185 lines
6.9 KiB
PHP
185 lines
6.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @package Joomla.Administrator
|
|
* @subpackage mod_menu
|
|
*
|
|
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\HTML\HTMLHelper;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\Router\Route;
|
|
use Joomla\CMS\Uri\Uri;
|
|
|
|
/**
|
|
* =========================================================================================================
|
|
* IMPORTANT: The scope of this layout file is the `var \Joomla\Module\Menu\Administrator\Menu\CssMenu` object
|
|
* and NOT the module context.
|
|
* =========================================================================================================
|
|
*/
|
|
/** @var \Joomla\Module\Menu\Administrator\Menu\CssMenu $this */
|
|
$class = 'item';
|
|
$currentParams = $current->getParams();
|
|
|
|
// Build the CSS class suffix
|
|
if (!$this->enabled) {
|
|
$class .= ' disabled';
|
|
} elseif ($current->type == 'separator') {
|
|
$class = $current->title ? 'menuitem-group' : 'divider';
|
|
} elseif ($current->hasChildren()) {
|
|
$class .= ' parent';
|
|
}
|
|
|
|
if ($current->level == 1) {
|
|
$class .= ' item-level-1';
|
|
} elseif ($current->level == 2) {
|
|
$class .= ' item-level-2';
|
|
} elseif ($current->level == 3) {
|
|
$class .= ' item-level-3';
|
|
}
|
|
|
|
// Set the correct aria role and print the item
|
|
if ($current->type == 'separator') {
|
|
echo '<li class="' . $class . '" role="presentation">';
|
|
} else {
|
|
echo '<li class="' . $class . '">';
|
|
}
|
|
|
|
// Print a link if it exists
|
|
$linkClass = [];
|
|
$dataToggle = '';
|
|
$iconClass = '';
|
|
$itemIconClass = '';
|
|
$itemImage = '';
|
|
|
|
if ($current->hasChildren()) {
|
|
$linkClass[] = 'has-arrow';
|
|
|
|
if ($current->level > 2) {
|
|
$dataToggle = ' data-bs-toggle="dropdown"';
|
|
}
|
|
} else {
|
|
$linkClass[] = 'no-dropdown';
|
|
}
|
|
|
|
// Implode out $linkClass for rendering
|
|
$linkClass = ' class="' . implode(' ', $linkClass) . '" ';
|
|
|
|
// Get the menu link
|
|
$link = $current->link;
|
|
|
|
// Get the menu image class
|
|
$itemIconClass = $currentParams->get('menu_icon');
|
|
|
|
// Get the menu image
|
|
$itemImage = $currentParams->get('menu_image');
|
|
|
|
// Get the menu icon
|
|
$icon = $this->getIconClass($current);
|
|
$iconClass = ($icon != '' && $current->level == 1) ? '<span class="' . $icon . '" aria-hidden="true"></span>' : '';
|
|
$ajax = !empty($current->ajaxbadge) ? '<span class="menu-badge"><span class="icon-spin icon-spinner mt-1 system-counter" data-url="' . $current->ajaxbadge . '"></span></span>' : '';
|
|
$iconImage = $current->icon;
|
|
$homeImage = '';
|
|
|
|
if ($iconClass === '' && $itemIconClass) {
|
|
$iconClass = '<span class="' . $itemIconClass . '" aria-hidden="true"></span>';
|
|
}
|
|
|
|
if ($iconImage) {
|
|
if (substr($iconImage, 0, 6) == 'class:' && substr($iconImage, 6) == 'icon-home') {
|
|
$iconImage = '<span class="home-image icon-home" aria-hidden="true"></span>';
|
|
$iconImage .= '<span class="visually-hidden">' . Text::_('JDEFAULT') . '</span>';
|
|
} elseif (substr($iconImage, 0, 6) == 'image:') {
|
|
$iconImage = ' <span class="badge">' . substr($iconImage, 6) . '</span>';
|
|
} else {
|
|
$iconImage = '';
|
|
}
|
|
}
|
|
|
|
$itemImage = (empty($itemIconClass) && $itemImage) ? ' <img src="' . Uri::root() . $itemImage . '" alt=""> ' : '';
|
|
|
|
// If the item image is not set, the item title would not have margin. Here we add it.
|
|
if ($icon == '' && $iconClass == '' && $current->level == 1 && $current->target == '') {
|
|
$iconClass = '<span aria-hidden="true" class="icon-fw"></span>';
|
|
}
|
|
|
|
if ($link != '' && $current->target != '') {
|
|
echo '<a' . $linkClass . $dataToggle . ' href="' . $link . '" target="' . $current->target . '">'
|
|
. $iconClass
|
|
. '<span class="sidebar-item-title">' . $itemImage . Text::_($current->title) . '</span>' . $ajax . '</a>';
|
|
} elseif ($link != '' && $current->type !== 'separator') {
|
|
echo '<a' . $linkClass . $dataToggle . ' href="' . $link . '" aria-label="' . Text::_($current->title) . '">'
|
|
. $iconClass
|
|
. '<span class="sidebar-item-title">' . $itemImage . Text::_($current->title) . '</span>' . $iconImage . '</a>';
|
|
} elseif ($current->title != '' && $current->type !== 'separator') {
|
|
echo '<a' . $linkClass . $dataToggle . ' href="#">'
|
|
. $iconClass
|
|
. '<span class="sidebar-item-title">' . $itemImage . Text::_($current->title) . '</span>' . $ajax . '</a>';
|
|
} elseif ($current->title != '' && $current->type === 'separator') {
|
|
echo '<span class="sidebar-item-title">' . Text::_($current->title) . '</span>' . $ajax;
|
|
} else {
|
|
echo '<span>' . Text::_($current->title) . '</span>' . $ajax;
|
|
}
|
|
|
|
if ($currentParams->get('menu-quicktask') && (int) $this->params->get('shownew', 1) === 1) {
|
|
$params = $current->getParams();
|
|
$user = $this->application->getIdentity();
|
|
$link = $params->get('menu-quicktask');
|
|
$icon = $params->get('menu-quicktask-icon', 'plus');
|
|
$title = $params->get('menu-quicktask-title', 'MOD_MENU_QUICKTASK_NEW');
|
|
$permission = $params->get('menu-quicktask-permission');
|
|
$scope = $current->scope !== 'default' ? $current->scope : null;
|
|
|
|
if (!$permission || $user->authorise($permission, $scope)) {
|
|
echo '<span class="menu-quicktask"><a href="' . $link . '">';
|
|
echo '<span class="icon-' . $icon . '" title="' . htmlentities(Text::_($title)) . '" aria-hidden="true"></span>';
|
|
echo '<span class="visually-hidden">' . Text::_($title) . '</span>';
|
|
echo '</a></span>';
|
|
}
|
|
}
|
|
|
|
if (!empty($current->dashboard)) {
|
|
$titleDashboard = Text::sprintf('MOD_MENU_DASHBOARD_LINK', Text::_($current->title));
|
|
|
|
// Prepare the Dashboard icon. We use our own icon, not Fontawesome
|
|
$pathDashboard = 'media/templates/administrator/atum/images/icons/dashboard.svg';
|
|
$attrDashboard = [
|
|
'loading' => 'eager',
|
|
'decoding' => 'async',
|
|
'aria-hidden' => 'true',
|
|
'class' => 'atum-dashboard',
|
|
'height' => '18',
|
|
];
|
|
|
|
$iconDashboard = HTMLHelper::_('image', $pathDashboard, '', $attrDashboard, false, 0);
|
|
|
|
echo '<span class="menu-dashboard"><a href="'
|
|
. Route::_('index.php?option=com_cpanel&view=cpanel&dashboard=' . $current->dashboard) . '" '
|
|
. 'title="' . $titleDashboard . '">'
|
|
. '<span>' . $iconDashboard . '</span>'
|
|
. '<span class="visually-hidden">' . $titleDashboard . '</span>'
|
|
. '</a></span>';
|
|
}
|
|
|
|
// Recurse through children if they exist
|
|
if ($this->enabled && $current->hasChildren()) {
|
|
if ($current->level > 1) {
|
|
$id = $current->id ? ' id="menu-' . strtolower($current->id) . '"' : '';
|
|
|
|
echo '<ul' . $id . ' class="mm-collapse collapse-level-' . $current->level . '">' . "\n";
|
|
} else {
|
|
echo '<ul id="collapse' . $this->getCounter() . '" class="collapse-level-1 mm-collapse">' . "\n";
|
|
}
|
|
|
|
// WARNING: Do not use direct 'include' or 'require' as it is important to isolate the scope for each call
|
|
$this->renderSubmenu(__FILE__, $current);
|
|
|
|
echo "</ul>\n";
|
|
}
|
|
|
|
echo "</li>\n";
|