169 lines
6.0 KiB
PHP
169 lines
6.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @package Joomla.Administrator
|
|
* @subpackage mod_guidedtours
|
|
*
|
|
* @copyright (C) 2023 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\Language\Text;
|
|
use Joomla\CMS\Uri\Uri;
|
|
|
|
$hideLinks = $app->getInput()->getBool('hidemainmenu');
|
|
|
|
if ($hideLinks || !$tours) {
|
|
return;
|
|
}
|
|
|
|
// Load the Bootstrap Dropdown
|
|
$app->getDocument()
|
|
->getWebAssetManager()
|
|
->useScript('bootstrap.dropdown')
|
|
->useScript('joomla.dialog-autocreate');
|
|
|
|
$lang = $app->getLanguage();
|
|
$extension = $app->getInput()->get('option');
|
|
$contextTours = [];
|
|
$starTours = [];
|
|
$listTours = [];
|
|
$allTours = [];
|
|
$contextCount = $params->get('contextcount', 7);
|
|
$toursCount = $params->get('tourscount', 7);
|
|
|
|
foreach ($tours as $tour) :
|
|
$uri = new Uri($tour->url);
|
|
|
|
if (in_array('*', $tour->extensions)) :
|
|
$starTours[] = $tour;
|
|
elseif (in_array($extension, $tour->extensions)) :
|
|
if ($extension === 'com_categories') :
|
|
// Special case for the categories page, where the context is complemented with the extension the categories apply to
|
|
if ($uri->getVar('option', '') === 'com_categories') :
|
|
if ($uri->getVar('extension', '') === $app->getInput()->get('extension', '')) :
|
|
if ($contextCount > 0) :
|
|
$contextTours[] = $tour;
|
|
$contextCount--;
|
|
endif;
|
|
elseif ($toursCount > 0) :
|
|
$listTours[] = $tour;
|
|
$toursCount--;
|
|
endif;
|
|
else :
|
|
if (in_array($app->getInput()->get('extension', ''), $tour->extensions)) :
|
|
if ($contextCount > 0) :
|
|
$contextTours[] = $tour;
|
|
$contextCount--;
|
|
endif;
|
|
elseif ($toursCount > 0) :
|
|
$listTours[] = $tour;
|
|
$toursCount--;
|
|
endif;
|
|
endif;
|
|
elseif ($contextCount > 0) :
|
|
$contextTours[] = $tour;
|
|
$contextCount--;
|
|
endif;
|
|
elseif ($toursCount > 0) :
|
|
$listTours[] = $tour;
|
|
$toursCount--;
|
|
endif;
|
|
|
|
// We assume the url is the starting point
|
|
$key = $uri->getVar('option') ?? 'com_cpanel';
|
|
|
|
if (!isset($allTours[$key])) :
|
|
$lang->load("$key.sys", JPATH_ADMINISTRATOR)
|
|
|| $lang->load("$key.sys", JPATH_ADMINISTRATOR . '/components/' . $key);
|
|
|
|
$allTours[$key] = [];
|
|
endif;
|
|
|
|
$allTours[$key][] = $tour;
|
|
endforeach;
|
|
|
|
if ($contextCount > 0) :
|
|
// The '*' tours have lower priority than contextual tours and are added after them, room permitting
|
|
$contextTours = array_slice(array_merge($contextTours, $starTours), 0, $params->get('contextcount', 7));
|
|
endif;
|
|
|
|
$popupId = 'guidedtours-popup-content' . $module->id;
|
|
$popupOptions = json_encode([
|
|
'src' => '#' . $popupId,
|
|
'width' => '800px',
|
|
'height' => 'fit-content',
|
|
'textHeader' => Text::_('MOD_GUIDEDTOURS_START_TOUR'),
|
|
'preferredParent' => 'body',
|
|
]);
|
|
|
|
?>
|
|
<div class="header-item-content dropdown header-tours d-none d-sm-block">
|
|
<button class="dropdown-toggle d-flex align-items-center ps-0 py-0" data-bs-toggle="dropdown" type="button" title="<?php echo Text::_('MOD_GUIDEDTOURS_MENU'); ?>">
|
|
<div class="header-item-icon">
|
|
<span class="icon-map-signs" aria-hidden="true"></span>
|
|
</div>
|
|
<div class="header-item-text">
|
|
<?php echo Text::_('MOD_GUIDEDTOURS_MENU'); ?>
|
|
</div>
|
|
<span class="icon-angle-down" aria-hidden="true"></span>
|
|
</button>
|
|
<div class="dropdown-menu dropdown-menu-end">
|
|
<?php if (count($contextTours) > 0) : ?>
|
|
<ul class="list-unstyled m-0">
|
|
<?php foreach ($contextTours as $tour) : ?>
|
|
<li>
|
|
<button type="button" class="button-start-guidedtour dropdown-item" data-id="<?php echo $tour->id; ?>">
|
|
<span class="icon-star icon-fw" aria-hidden="true"></span>
|
|
<?php echo $tour->title; ?>
|
|
</button>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
<hr class="dropdown-divider m-0" role="separator" />
|
|
<?php endif; ?>
|
|
<?php if (count($listTours) > 0) : ?>
|
|
<ul class="list-unstyled m-0">
|
|
<?php foreach ($listTours as $tour) : ?>
|
|
<li>
|
|
<button type="button" class="button-start-guidedtour dropdown-item" data-id="<?php echo $tour->id; ?>">
|
|
<span class="icon-map-signs icon-fw" aria-hidden="true"></span>
|
|
<?php echo $tour->title; ?>
|
|
</button>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
<hr class="dropdown-divider m-0" role="separator" />
|
|
<?php endif; ?>
|
|
<button type="button" class="dropdown-item text-center" data-joomla-dialog="<?php echo htmlspecialchars($popupOptions); ?>">
|
|
<?php echo Text::_('MOD_GUIDEDTOURS_SHOW_ALL'); ?>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
|
|
$modalHtml = [];
|
|
$modalHtml[] = '<div class="p-3">';
|
|
$modalHtml[] = '<div class="row">';
|
|
foreach ($allTours as $extension => $tours) :
|
|
$modalHtml[] = '<div class="col-lg-6">';
|
|
$modalHtml[] = '<h4>' . Text::_($extension) . '</h4>';
|
|
$modalHtml[] = '<ul class="list-unstyled">';
|
|
foreach ($tours as $tour) :
|
|
$modalHtml[] = '<li>';
|
|
$modalHtml[] = '<a href="#" role="button" class="button-start-guidedtour" data-id="' . (int) $tour->id . '">' . htmlentities($tour->title) . '</a>';
|
|
$modalHtml[] = '</li>';
|
|
endforeach;
|
|
$modalHtml[] = '</ul>';
|
|
$modalHtml[] = '</div>';
|
|
endforeach;
|
|
$modalHtml[] = '</div>';
|
|
$modalHtml[] = '</div>';
|
|
|
|
$modalBody = implode($modalHtml);
|
|
|
|
?>
|
|
<template id="<?php echo $popupId; ?>"><?php echo $modalBody; ?></template>
|