Seditio Source
Root |
./othercms/dotclear-2.22/plugins/simpleMenu/_public.php
<?php
/**
 * @brief simpleMenu, a plugin for Dotclear 2
 *
 * @package Dotclear
 * @subpackage Plugins
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 */
if (!defined('DC_RC_PATH')) {
    return;
}

require
__DIR__ . '/_widgets.php';

# Simple menu template functions
$core->tpl->addValue('SimpleMenu', ['tplSimpleMenu', 'simpleMenu']);

class
tplSimpleMenu
{
   
# Template function
   
public static function simpleMenu($attr)
    {
        global
$core;

        if (!(bool)
$core->blog->settings->system->simpleMenu_active) {
            return
'';
        }

       
$class       = isset($attr['class']) ? trim((string) $attr['class']) : '';
       
$id          = isset($attr['id']) ? trim((string) $attr['id']) : '';
       
$description = isset($attr['description']) ? trim((string) $attr['description']) : '';

        if (!
preg_match('#^(title|span|both|none)$#', $description)) {
           
$description = '';
        }

        return
'<?php echo tplSimpleMenu::displayMenu(' .
       
"'" . addslashes($class) . "'," .
       
"'" . addslashes($id) . "'," .
       
"'" . addslashes($description) . "'" .
           
'); ?>';
    }

   
# Widget function
   
public static function simpleMenuWidget($w)
    {
        global
$core;

       
$descr_type = [0 => 'span', 1 => 'title', 2 => 'both', 3 => 'none'];

        if (!(bool)
$core->blog->settings->system->simpleMenu_active) {
            return;
        }

        if (
$w->offline) {
            return;
        }

        if ((
$w->homeonly == 1 && !$core->url->isHome($core->url->type)) || ($w->homeonly == 2 && $core->url->isHome($core->url->type))) {
            return;
        }

       
$description = 'title';
        if (isset(
$descr_type[$w->description])) {
           
$description = $descr_type[$w->description];
        }
       
$menu = tplSimpleMenu::displayMenu('', '', $description);
        if (
$menu == '') {
            return;
        }

        return
$w->renderDiv(
           
$w->content_only,
           
'simple-menu ' . $w->class,
           
'',
            (
$w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '') . $menu
       
);
    }

    public static function
displayMenu($class = '', $id = '', $description = '')
    {
        global
$core;

       
$ret = '';

        if (!(bool)
$core->blog->settings->system->simpleMenu_active) {
            return
$ret;
        }

       
$menu = $core->blog->settings->system->simpleMenu;
        if (
is_array($menu)) {
           
// Current relative URL
           
$url     = $_SERVER['REQUEST_URI'];
           
$abs_url = http::getHost() . $url;

           
// Home recognition var
           
$home_url       = html::stripHostURL($core->blog->url);
           
$home_directory = dirname($home_url);
            if (
$home_directory != '/') {
               
$home_directory = $home_directory . '/';
            }

           
// Menu items loop
           
foreach ($menu as $i => $m) {
               
# $href = lien de l'item de menu
               
$href = $m['url'];
               
$href = html::escapeHTML($href);

               
# Cope with request only URL (ie ?query_part)
               
$href_part = '';
                if (
$href != '' && substr($href, 0, 1) == '?') {
                   
$href_part = substr($href, 1);
                }

               
$targetBlank = ((isset($m['targetBlank'])) && ($m['targetBlank'])) ? true : false;

               
# Active item test
               
$active = false;
                if ((
$url == $href) || ($abs_url == $href) || ($_SERVER['URL_REQUEST_PART'] == $href) || (($href_part != '') && ($_SERVER['URL_REQUEST_PART'] == $href_part)) || (($_SERVER['URL_REQUEST_PART'] == '') && (($href == $home_url) || ($href == $home_directory)))) {
                   
$active = true;
                }
               
$title = $span = '';

                if (
$m['descr']) {
                    if ((
$description == 'title' || $description == 'both') && $targetBlank) {
                       
$title = html::escapeHTML($m['descr']) . ' (' .
                       
__('new window') . ')';
                    } elseif (
$description == 'title' || $description == 'both') {
                       
$title = html::escapeHTML($m['descr']);
                    }
                    if (
$description == 'span' || $description == 'both') {
                       
$span = ' <span class="simple-menu-descr">' . html::escapeHTML($m['descr']) . '</span>';
                    }
                }

                if (empty(
$title) && $targetBlank) {
                   
$title = __('new window');
                }
                if (
$active && !$targetBlank) {
                   
$title = (empty($title) ? __('Active page') : $title . ' (' . __('active page') . ')');
                }

               
$label = html::escapeHTML($m['label']);

               
$item = new ArrayObject([
                   
'url'    => $href,   // URL
                   
'label'  => $label,  // <a> link label
                   
'title'  => $title,  // <a> link title (optional)
                   
'span'   => $span,   // description (will be displayed after <a> link)
                   
'active' => $active, // status (true/false)
                   
'class'  => '',      // additional <li> class (optional)
               
]);

               
# --BEHAVIOR-- publicSimpleMenuItem
               
$core->callBehavior('publicSimpleMenuItem', $i, $item);

               
$ret .= '<li class="li' . ($i + 1) .
                    (
$item['active'] ? ' active' : '') .
                    (
$i == 0 ? ' li-first' : '') .
                    (
$i == count($menu) - 1 ? ' li-last' : '') .
                    (
$item['class'] ? ' ' . $item['class'] : '') .
                   
'">' .
                   
'<a href="' . $href . '"' .
                    (!empty(
$item['title']) ? ' title="' . $label . ' - ' . $item['title'] . '"' : '') .
                    ((
$targetBlank) ? ' target="_blank" rel="noopener noreferrer"' : '') . '>' .
                   
'<span class="simple-menu-label">' . $item['label'] . '</span>' .
                   
$item['span'] . '</a>' .
                   
'</li>';
            }
           
// Final rendering
           
if ($ret) {
               
$ret = '<nav role="navigation"><ul ' . ($id ? 'id="' . $id . '"' : '') . ' class="simple-menu' . ($class ? ' ' . $class : '') . '">' . "\n" . $ret . "\n" . '</ul></nav>';
            }
        }

        return
$ret;
    }
}