1c165b184SJames Collins<?php 210b40067Snomadjimbob 3c165b184SJames Collins/** 4c165b184SJames Collins * DokuWiki Mikio Template 5c165b184SJames Collins * 6c165b184SJames Collins * @link http://dokuwiki.org/template:mikio 7c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 8ab45ba71SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html) 9c165b184SJames Collins */ 1010b40067Snomadjimbob 11ab45ba71SJames Collinsnamespace dokuwiki\template\mikio; 12c165b184SJames Collins 139cff245bSJames Collinsif (defined('DOKU_INC') === false) { 149cff245bSJames Collins die(); 159cff245bSJames Collins} 16c165b184SJames Collins 17ab45ba71SJames Collinsrequire_once('icons/icons.php'); 18c165b184SJames Collinsrequire_once('inc/simple_html_dom.php'); 19c165b184SJames Collins 2010b40067Snomadjimbobclass Template 2110b40067Snomadjimbob{ 229cff245bSJames Collins /** 239cff245bSJames Collins * @var string Template directory path from local FS. 249cff245bSJames Collins */ 25c165b184SJames Collins public $tplDir = ''; 269cff245bSJames Collins 279cff245bSJames Collins /** 289cff245bSJames Collins * @var string Template directory path from web. 299cff245bSJames Collins */ 30c165b184SJames Collins public $baseDir = ''; 319cff245bSJames Collins 329cff245bSJames Collins /** 339cff245bSJames Collins * @var array Array of Javascript files to include in footer. 349cff245bSJames Collins */ 359cff245bSJames Collins public $footerScript = []; 369cff245bSJames Collins 379cff245bSJames Collins /** 389cff245bSJames Collins * @var boolean Ignore LESS files. 399cff245bSJames Collins */ 40a8df40efSJames Collins public $lessIgnored = false; 41c165b184SJames Collins 424f8225e4SJames Collins /** 434f8225e4SJames Collins * @var string Notifications from included pages. 444f8225e4SJames Collins */ 454f8225e4SJames Collins private $includedPageNotifications = ''; 464f8225e4SJames Collins 47c165b184SJames Collins 48c165b184SJames Collins /** 49c165b184SJames Collins * Class constructor 50c165b184SJames Collins */ 5110b40067Snomadjimbob public function __construct() 5210b40067Snomadjimbob { 53c165b184SJames Collins $this->tplDir = tpl_incdir(); 54c165b184SJames Collins $this->baseDir = tpl_basedir(); 55c165b184SJames Collins 569cff245bSJames Collins $this->registerHooks(); 57c165b184SJames Collins } 58c165b184SJames Collins 59c165b184SJames Collins /** 60ab45ba71SJames Collins * Returns the instance of the class 6147161538SJames Collins * 62ab45ba71SJames Collins * @return Template class instance 6347161538SJames Collins */ 6447161538SJames Collins public static function getInstance() 6547161538SJames Collins { 6647161538SJames Collins static $instance = null; 6747161538SJames Collins 683a385f2cSJames Collins if (empty($instance) === true) { 6947161538SJames Collins $instance = new Template(); 7047161538SJames Collins } 7147161538SJames Collins 7247161538SJames Collins return $instance; 7347161538SJames Collins } 7447161538SJames Collins 75ab45ba71SJames Collins 7647161538SJames Collins /** 77ab45ba71SJames Collins * Register the themes hooks into Dokuwiki 789cff245bSJames Collins * 799cff245bSJames Collins * @return void 80c165b184SJames Collins */ 819cff245bSJames Collins private function registerHooks() 8210b40067Snomadjimbob { 83c165b184SJames Collins global $EVENT_HANDLER; 84c165b184SJames Collins 859cff245bSJames Collins $events_dispatcher = [ 86ab45ba71SJames Collins 'TPL_METAHEADER_OUTPUT' => 'metaheadersHandler' 879cff245bSJames Collins ]; 88c165b184SJames Collins 89c165b184SJames Collins foreach ($events_dispatcher as $event => $method) { 90c165b184SJames Collins $EVENT_HANDLER->register_hook($event, 'BEFORE', $this, $method); 91c165b184SJames Collins } 92c165b184SJames Collins } 93c165b184SJames Collins 94c165b184SJames Collins 95c165b184SJames Collins /** 96ab45ba71SJames Collins * Meta handler hook for DokuWiki 97c165b184SJames Collins * 989cff245bSJames Collins * @param \Doku_Event $event DokuWiki Event. 999cff245bSJames Collins * @return void 100c165b184SJames Collins */ 10110b40067Snomadjimbob public function metaHeadersHandler(\Doku_Event $event) 10210b40067Snomadjimbob { 103ab45ba71SJames Collins global $MIKIO_ICONS; 104b5536b07SChris MacMackin global $conf; 105ab45ba71SJames Collins 106ad182e6dSnomadjimbob global $MIKIO_TEMPLATE; 107ad182e6dSnomadjimbob $MIKIO_TEMPLATE = '123'; 108ad182e6dSnomadjimbob 1099cff245bSJames Collins $this->includePage('theme', false, true); 110a8eebd82SJames Collins 1119cff245bSJames Collins $stylesheets = []; 1129cff245bSJames Collins $scripts = []; 113c165b184SJames Collins 1143a385f2cSJames Collins if (empty($this->getConf('customTheme')) === false) { 1159cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.less') === true) { 116a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.less'; 117a8eebd82SJames Collins } else { 1189cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.css') === true) { 119ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.css'; 1202b4583abSJames Collins } 121a8eebd82SJames Collins } 1229cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/script.js') === true) { 123ab45ba71SJames Collins $scripts[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/script.js'; 124c165b184SJames Collins } 125c165b184SJames Collins } 126c165b184SJames Collins 1273a385f2cSJames Collins if (is_array($MIKIO_ICONS) === true && empty($this->getConf('iconTag', 'icon')) === false) { 1289cff245bSJames Collins $icons = []; 129ab45ba71SJames Collins foreach ($MIKIO_ICONS as $icon) { 1309cff245bSJames Collins if (isset($icon['name']) === true && isset($icon['css']) === true && isset($icon['insert']) === true) { 131ab45ba71SJames Collins $icons[] = $icon; 132c165b184SJames Collins 1333a385f2cSJames Collins if (empty($icon['css']) === false) { 1349cff245bSJames Collins if (strpos($icon['css'], '//') === false) { 135a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'icons/' . $icon['css']; 136ab45ba71SJames Collins } else { 137a8eebd82SJames Collins $stylesheets[] = $icon['css']; 138ab45ba71SJames Collins } 139ab45ba71SJames Collins } 140ab45ba71SJames Collins } 141ab45ba71SJames Collins } 142ab45ba71SJames Collins $MIKIO_ICONS = $icons; 143ab45ba71SJames Collins } else { 144ab45ba71SJames Collins $MIKIO_ICONS = []; 145ab45ba71SJames Collins } 146c165b184SJames Collins 1477864545bSChris MacMackin $scripts[] = $this->baseDir . 'assets/mikio-typeahead.js'; 148ab45ba71SJames Collins $scripts[] = $this->baseDir . 'assets/mikio.js'; 149644fd9f9SJames Collins 1509cff245bSJames Collins if ($this->getConf('useLESS') === true) { 151ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.less'; 152644fd9f9SJames Collins } else { 153644fd9f9SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.css'; 154644fd9f9SJames Collins } 155644fd9f9SJames Collins 156ad182e6dSnomadjimbob /* MikioPlugin Support */ 1579ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 158ad182e6dSnomadjimbob if ($this->getConf('useLESS') === true) { 159ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.less'; 160ad182e6dSnomadjimbob } else { 161ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.css'; 162ad182e6dSnomadjimbob } 163ad182e6dSnomadjimbob } 164ab45ba71SJames Collins 165ab45ba71SJames Collins $set = []; 166c165b184SJames Collins foreach ($stylesheets as $style) { 1679cff245bSJames Collins if (in_array($style, $set) === false) { 1683a385f2cSJames Collins if (strcasecmp(substr($style, -5), '.less') === 0 && $this->getConf('useLESS') === true) { 169ab45ba71SJames Collins $style = $this->baseDir . 'css.php?css=' . str_replace($this->baseDir, '', $style); 170ab45ba71SJames Collins } 171ab45ba71SJames Collins 1729cff245bSJames Collins array_unshift($event->data['link'], [ 173c165b184SJames Collins 'type' => 'text/css', 174c165b184SJames Collins 'rel' => 'stylesheet', 175c165b184SJames Collins 'href' => $style 1769cff245bSJames Collins ]); 177c165b184SJames Collins } 178ab45ba71SJames Collins $set[] = $style; 179ab45ba71SJames Collins } 180c165b184SJames Collins 181ab45ba71SJames Collins $set = []; 182c165b184SJames Collins foreach ($scripts as $script) { 1839cff245bSJames Collins if (in_array($script, $set) === false) { 1849cff245bSJames Collins $script_params = [ 185c165b184SJames Collins 'type' => 'text/javascript', 186c165b184SJames Collins '_data' => '', 1878395cdcbSChris MacMackin 'src' => $script 1889cff245bSJames Collins ]; 189c1ecb866SJames Collins 190c1ecb866SJames Collins // equal to or greator than hogfather 191c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 192c1ecb866SJames Collins // greator than hogfather - defer always on 193c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 194c1ecb866SJames Collins $script_params += ['defer' => 'defer']; 195c1ecb866SJames Collins } else { 196c1ecb866SJames Collins // hogfather - defer always on unless $conf['defer_js'] is false 1979cff245bSJames Collins if (array_key_exists('defer_js', $conf) === false || $conf['defer_js'] === true) { 1988395cdcbSChris MacMackin $script_params += ['defer' => 'defer']; 1998395cdcbSChris MacMackin } 200c1ecb866SJames Collins } 201c1ecb866SJames Collins } 202c1ecb866SJames Collins 2038395cdcbSChris MacMackin $event->data['script'][] = $script_params; 2049cff245bSJames Collins }//end if 205ab45ba71SJames Collins $set[] = $script; 2069cff245bSJames Collins }//end foreach 207c165b184SJames Collins } 208c165b184SJames Collins 209c165b184SJames Collins 210c165b184SJames Collins /** 211a8eebd82SJames Collins * Print or return the footer meta data 212c165b184SJames Collins * 2139cff245bSJames Collins * @param boolean $print Print the data to buffer. 2149cff245bSJames Collins * @return string HTML footer meta data 215c165b184SJames Collins */ 2169cff245bSJames Collins public function includeFooterMeta(bool $print = true) 21710b40067Snomadjimbob { 218a8eebd82SJames Collins $html = ''; 219a8eebd82SJames Collins 220a8eebd82SJames Collins if (count($this->footerScript) > 0) { 221a8eebd82SJames Collins $html .= '<script type="text/javascript">function mikioFooterRun() {'; 222a8eebd82SJames Collins foreach ($this->footerScript as $script) { 223a8eebd82SJames Collins $html .= $script . ';'; 224a8eebd82SJames Collins } 225a8eebd82SJames Collins $html .= '}</script>'; 226a8eebd82SJames Collins } 227c165b184SJames Collins 228c165b184SJames Collins 2299cff245bSJames Collins if ($print === true) { 2309cff245bSJames Collins echo $html; 2319cff245bSJames Collins } 232a8eebd82SJames Collins return $html; 233a8eebd82SJames Collins } 234a8eebd82SJames Collins 23595372bffSJames Collins 23695372bffSJames Collins // phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing 23795372bffSJames Collins 23895372bffSJames Collins 239a8eebd82SJames Collins /** 240ab45ba71SJames Collins * Retreive and parse theme configuration options 241c165b184SJames Collins * 2429cff245bSJames Collins * @param string $key The configuration key to retreive. 2439cff245bSJames Collins * @param mixed $default If key doesn't exist, return this value. 244ab45ba71SJames Collins * @return mixed parsed value of configuration 245c165b184SJames Collins */ 24695372bffSJames Collins public function getConf(string $key, $default = false) 24710b40067Snomadjimbob { 248c165b184SJames Collins $value = tpl_getConf($key, $default); 249c165b184SJames Collins 2503a385f2cSJames Collins $data = [ 2513a385f2cSJames Collins ['keys' => ['navbarDWMenuType'], 'type' => 'choice', 2523a385f2cSJames Collins 'values' => ['both', 'icons', 'text'] 2533a385f2cSJames Collins ], 2543a385f2cSJames Collins ['keys' => ['navbarDWMenuCombine'], 'type' => 'choice', 2553a385f2cSJames Collins 'values' => ['combine', 'seperate', 'dropdown'] 2563a385f2cSJames Collins ], 2573a385f2cSJames Collins ['keys' => ['navbarPosLeft', 'navbarPosMiddle', 'navbarPosRight'], 2583a385f2cSJames Collins 'type' => 'choice', 2593a385f2cSJames Collins 'values' => ['none', 'custom', 'search', 'dokuwiki'], 2603a385f2cSJames Collins 'default' => [ 2613a385f2cSJames Collins 'navbarPosLeft' => 'none', 2623a385f2cSJames Collins 'navbarPosMiddle' => 'search', 2633a385f2cSJames Collins 'navbarPosRight' => 'dokuwiki' 2643a385f2cSJames Collins ] 2653a385f2cSJames Collins ], 2663a385f2cSJames Collins ['keys' => ['navbarItemShowCreate', 'navbarItemShowShow', 'navbarItemShowRevs', 'navbarItemShowBacklink', 2673a385f2cSJames Collins 'navbarItemShowRecent', 'navbarItemShowMedia', 'navbarItemShowIndex', 'navbarItemShowProfile', 2683a385f2cSJames Collins 'navbarItemShowAdmin' 2693a385f2cSJames Collins ], 2703a385f2cSJames Collins 'type' => 'choice', 2713a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 2723a385f2cSJames Collins ], 2733a385f2cSJames Collins ['keys' => ['navbarItemShowLogin', 'navbarItemShowLogout'], 2743a385f2cSJames Collins 'type' => 'choice', 2753a385f2cSJames Collins 'values' => ['always', 'never'] 2763a385f2cSJames Collins ], 2773a385f2cSJames Collins ['keys' => ['searchButton'], 'type' => 'choice', 2783a385f2cSJames Collins 'values' => ['icon', 'text'] 2793a385f2cSJames Collins ], 2803a385f2cSJames Collins ['keys' => ['breadcrumbPosition', 'youareherePosition'], 2813a385f2cSJames Collins 'type' => 'choice', 2823a385f2cSJames Collins 'values' => ['top', 'hero', 'page', 'none'] 2833a385f2cSJames Collins ], 2843a385f2cSJames Collins ['keys' => ['youarehereHome'], 'type' => 'choice', 2853a385f2cSJames Collins 'values' => ['page title', 'home', 'icon', 'none'] 2863a385f2cSJames Collins ], 2873a385f2cSJames Collins ['keys' => ['sidebarLeftRow1', 'sidebarLeftRow2', 'sidebarLeftRow3', 'sidebarLeftRow4'], 2883a385f2cSJames Collins 'type' => 'choice', 2893a385f2cSJames Collins 'values' => ['none', 'logged in user', 'search', 'content', 'tags'], 2903a385f2cSJames Collins 'default' => [ 2913a385f2cSJames Collins 'sidebarLeftRow1' => 'logged in user', 2923a385f2cSJames Collins 'sidebarLeftRow2' => 'search', 2933a385f2cSJames Collins 'sidebarLeftRow3' => 'content' 2943a385f2cSJames Collins ] 2953a385f2cSJames Collins ], 2963a385f2cSJames Collins ['keys' => ['pageToolsFloating', 'pageToolsFooter'], 2973a385f2cSJames Collins 'type' => 'choice', 2983a385f2cSJames Collins 'values' => ['always', 'none', 'page editors'] 2993a385f2cSJames Collins ], 3003a385f2cSJames Collins ['keys' => ['pageToolsShowCreate', 'pageToolsShowEdit', 'pageToolsShowRevs', 'pageToolsShowBacklink', 3013a385f2cSJames Collins 'pageToolsShowTop' 3023a385f2cSJames Collins ], 3033a385f2cSJames Collins 'type' => 'choice', 3043a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 3053a385f2cSJames Collins ], 3063a385f2cSJames Collins ['keys' => ['showNotifications'], 'type' => 'choice', 3073a385f2cSJames Collins 'values' => ['admin', 'always', 'none'] 3083a385f2cSJames Collins ], 3093a385f2cSJames Collins ['keys' => ['licenseType'], 'type' => 'choice', 3103a385f2cSJames Collins 'values' => ['badge', 'button', 'none'] 3113a385f2cSJames Collins ], 3123a385f2cSJames Collins ['keys' => ['navbarUseTitleIcon'], 'type' => 'bool'], 3133a385f2cSJames Collins ['keys' => ['navbarUseTitleText'], 'type' => 'bool'], 3143a385f2cSJames Collins ['keys' => ['navbarUseTaglineText'], 'type' => 'bool'], 3153a385f2cSJames Collins ['keys' => ['navbarShowSub'], 'type' => 'bool'], 3163a385f2cSJames Collins ['keys' => ['heroTitle'], 'type' => 'bool'], 3173a385f2cSJames Collins ['keys' => ['heroImagePropagation'], 'type' => 'bool'], 3183a385f2cSJames Collins ['keys' => ['breadcrumbPrefix'], 'type' => 'bool'], 3193a385f2cSJames Collins ['keys' => ['breadcrumbSep'], 'type' => 'bool'], 3203a385f2cSJames Collins ['keys' => ['youareherePrefix'], 'type' => 'bool'], 3213a385f2cSJames Collins ['keys' => ['youarehereSep'], 'type' => 'bool'], 3223a385f2cSJames Collins ['keys' => ['sidebarShowLeft'], 'type' => 'bool'], 3233a385f2cSJames Collins ['keys' => ['sidebarShowRight'], 'type' => 'bool'], 3243a385f2cSJames Collins ['keys' => ['tocFull'], 'type' => 'bool'], 3253a385f2cSJames Collins ['keys' => ['footerSearch'], 'type' => 'bool'], 3263a385f2cSJames Collins ['keys' => ['licenseImageOnly'], 'type' => 'bool'], 3273a385f2cSJames Collins ['keys' => ['includePageUseACL'], 'type' => 'bool'], 3283a385f2cSJames Collins ['keys' => ['includePagePropagate'], 'type' => 'bool'], 3293a385f2cSJames Collins ['keys' => ['youarehereHideHome'], 'type' => 'bool'], 3303a385f2cSJames Collins ['keys' => ['tagsConsolidate'], 'type' => 'bool'], 3313a385f2cSJames Collins ['keys' => ['footerInPage'], 'type' => 'bool'], 3323a385f2cSJames Collins ['keys' => ['sidebarMobileDefaultCollapse'], 'type' => 'bool'], 3333a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowLeft'], 'type' => 'bool'], 3343a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowRight'], 'type' => 'bool'], 3353a385f2cSJames Collins ['keys' => ['searchUseTypeahead'], 'type' => 'bool'], 33612030b10SJames Collins ['keys' => ['showLightDark'], 'type' => 'bool'], 33734d5f19aSJames Collins ['keys' => ['autoLightDark'], 'type' => 'bool'], 3383a385f2cSJames Collins ['keys' => ['youarehereShowLast'], 'type' => 'int'], 3393a385f2cSJames Collins 3403a385f2cSJames Collins ['keys' => ['iconTag'], 'type' => 'string'], 3413a385f2cSJames Collins ['keys' => ['customTheme'], 'type' => 'string'], 3423a385f2cSJames Collins ['keys' => ['navbarCustomMenuText'], 'type' => 'string'], 3433a385f2cSJames Collins ['keys' => ['breadcrumbPrefixText'], 'type' => 'string'], 3443a385f2cSJames Collins ['keys' => ['breadcrumbSepText'], 'type' => 'string'], 3453a385f2cSJames Collins ['keys' => ['youareherePrefixText'], 'type' => 'string'], 3463a385f2cSJames Collins ['keys' => ['youarehereSepText'], 'type' => 'string'], 3473a385f2cSJames Collins ['keys' => ['footerCustomMenuText'], 'type' => 'string'], 3483a385f2cSJames Collins ['keys' => ['brandURLGuest'], 'type' => 'string'], 3493a385f2cSJames Collins ['keys' => ['brandURLUser'], 'type' => 'string'], 3503a385f2cSJames Collins 3513a385f2cSJames Collins ['keys' => ['useLESS'], 'type' => 'less'], 3523a385f2cSJames Collins ]; 3533a385f2cSJames Collins 3543a385f2cSJames Collins foreach ($data as $row) { 3553a385f2cSJames Collins // does not check case.... 3563a385f2cSJames Collins if (in_array($key, $row['keys']) === true) { 35795372bffSJames Collins if (array_key_exists('type', $row) === true) { 3583a385f2cSJames Collins switch ($row['type']) { 3593a385f2cSJames Collins case 'bool': 3603a385f2cSJames Collins return (bool) $value; 3613a385f2cSJames Collins case 'int': 3623a385f2cSJames Collins return (int) $value; 3633a385f2cSJames Collins case 'string': 3643a385f2cSJames Collins return $value; 3653a385f2cSJames Collins case 'less': 36629118ed7SJames Collins $value = (bool) $value; 367a8df40efSJames Collins $lessAvailable = true; 368a8df40efSJames Collins 369a8df40efSJames Collins // check for less library 370a8df40efSJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3719cff245bSJames Collins if (file_exists($lesscLib) === false) { 372a8df40efSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3739cff245bSJames Collins } 3749cff245bSJames Collins if (file_exists($lesscLib) === false) { 375a8df40efSJames Collins $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3769cff245bSJames Collins } 3779cff245bSJames Collins if (file_exists($lesscLib) === false) { 3789cff245bSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . 3799cff245bSJames Collins '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3809cff245bSJames Collins } 3819cff245bSJames Collins if (file_exists($lesscLib) === false) { 382a8df40efSJames Collins $lessAvailable = false; 383a8df40efSJames Collins } 384a8df40efSJames Collins 385a8df40efSJames Collins // check for ctype extensions 3869cff245bSJames Collins if (function_exists('ctype_digit') === false) { 387a8df40efSJames Collins $lessAvailable = false; 388a8df40efSJames Collins } 389a8df40efSJames Collins 3909cff245bSJames Collins if ($value === true && $lessAvailable === false) { 391a8df40efSJames Collins $this->lessIgnored = true; 39229118ed7SJames Collins $value = false; 39329118ed7SJames Collins } 3943a385f2cSJames Collins 3953a385f2cSJames Collins return $value; 3969cff245bSJames Collins }//end switch 3973a385f2cSJames Collins }//end if 3983a385f2cSJames Collins 3993a385f2cSJames Collins if (in_array($value, $row['values']) === true) { 4003a385f2cSJames Collins return $value; 4013a385f2cSJames Collins } 4023a385f2cSJames Collins 4033a385f2cSJames Collins if (array_key_exists('default', $row) === true) { 4043a385f2cSJames Collins if (is_array($row['default']) === true) { 4053a385f2cSJames Collins if (array_key_exists($key, $row['default']) === true) { 4063a385f2cSJames Collins return $row['default'][$key]; 4073a385f2cSJames Collins } 4083a385f2cSJames Collins } else { 4093a385f2cSJames Collins return $row['default']; 4103a385f2cSJames Collins } 4113a385f2cSJames Collins } 4123a385f2cSJames Collins 4133a385f2cSJames Collins return reset($row['values']); 4143a385f2cSJames Collins }//end if 4153a385f2cSJames Collins }//end foreach 416c165b184SJames Collins 417c165b184SJames Collins return $value; 418c165b184SJames Collins } 419c165b184SJames Collins 420c165b184SJames Collins 42195372bffSJames Collins // phpcs:enable 42295372bffSJames Collins 42395372bffSJames Collins 424c165b184SJames Collins /** 425a8eebd82SJames Collins * Check if a page exist in directory or namespace 426c165b184SJames Collins * 4279cff245bSJames Collins * @param string $page Page/namespace to search. 428a8eebd82SJames Collins * @return boolean if page exists 429c165b184SJames Collins */ 4309cff245bSJames Collins public function pageExists(string $page) 43110b40067Snomadjimbob { 432ab45ba71SJames Collins ob_start(); 433a8eebd82SJames Collins tpl_includeFile($page . '.html'); 434ab45ba71SJames Collins $html = ob_get_contents(); 435ab45ba71SJames Collins ob_end_clean(); 436a8eebd82SJames Collins 4373a385f2cSJames Collins if (empty($html) === false) { 4389cff245bSJames Collins return true; 4399cff245bSJames Collins } 440a8eebd82SJames Collins 441a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 442a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 443a8eebd82SJames Collins 4449cff245bSJames Collins if ($propagate === true) { 4459cff245bSJames Collins if (page_findnearest($page, $useACL) !== false) { 4469cff245bSJames Collins return true; 4479cff245bSJames Collins } 4489cff245bSJames Collins } elseif ($useACL === true && auth_quickaclcheck($page) !== AUTH_NONE) { 4499cff245bSJames Collins return true; 450ab45ba71SJames Collins } 451ab45ba71SJames Collins 4529cff245bSJames Collins return false; 453ab45ba71SJames Collins } 454ab45ba71SJames Collins 455a8eebd82SJames Collins 456c165b184SJames Collins /** 457a8eebd82SJames Collins * Print or return page from directory or namespace 4582b4583abSJames Collins * 4599cff245bSJames Collins * @param string $page Page/namespace to include. 4609cff245bSJames Collins * @param boolean $print Print content. 4619cff245bSJames Collins * @param boolean $parse Parse content before printing/returning. 4629cff245bSJames Collins * @param string $classWrapper Wrap page in a div with class. 463ab45ba71SJames Collins * @return string contents of page found 4642b4583abSJames Collins */ 4659cff245bSJames Collins public function includePage(string $page, bool $print = true, bool $parse = true, string $classWrapper = '') 4662b4583abSJames Collins { 467a8eebd82SJames Collins ob_start(); 468a8eebd82SJames Collins tpl_includeFile($page . '.html'); 469a8eebd82SJames Collins $html = ob_get_contents(); 470a8eebd82SJames Collins ob_end_clean(); 471a8eebd82SJames Collins 4723a385f2cSJames Collins if (empty($html) === true) { 4734f8225e4SJames Collins global $MSG; 4744f8225e4SJames Collins 475a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 476a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 477ab45ba71SJames Collins $html = ''; 4782b4583abSJames Collins 4794f8225e4SJames Collins ob_start(); 480ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 4814f8225e4SJames Collins $this->includedPageNotifications .= ob_get_contents(); 4824f8225e4SJames Collins ob_end_clean(); 483ab45ba71SJames Collins } 4842b4583abSJames Collins 4853a385f2cSJames Collins if (empty($html) === false && $parse === true) { 486ab45ba71SJames Collins $html = $this->parseContent($html); 487ab45ba71SJames Collins } 4882b4583abSJames Collins 4893a385f2cSJames Collins if (empty($classWrapper) === false && empty($html) === false) { 4909cff245bSJames Collins $html = '<div class="' . $classWrapper . '">' . $html . '</div>'; 4919cff245bSJames Collins } 4922b4583abSJames Collins 4939cff245bSJames Collins if ($print === true) { 4949cff245bSJames Collins echo $html; 4959cff245bSJames Collins } 496ab45ba71SJames Collins return $html; 4972b4583abSJames Collins } 4982b4583abSJames Collins 499a8eebd82SJames Collins 500a8eebd82SJames Collins /** 501a8eebd82SJames Collins * Print or return logged in user information 502a8eebd82SJames Collins * 5039cff245bSJames Collins * @param boolean $print Print content. 504a8eebd82SJames Collins * @return string user information 505a8eebd82SJames Collins */ 5069cff245bSJames Collins public function includeLoggedIn(bool $print = true) 50710b40067Snomadjimbob { 508a8eebd82SJames Collins $html = ''; 509a8eebd82SJames Collins 5109cff245bSJames Collins if (empty($_SERVER['REMOTE_USER']) === false) { 511a8eebd82SJames Collins $html .= '<div class="mikio-user-info">'; 512a8eebd82SJames Collins ob_start(); 513a8eebd82SJames Collins tpl_userinfo(); 514a8eebd82SJames Collins $html .= ob_get_contents(); 515a8eebd82SJames Collins ob_end_clean(); 516a8eebd82SJames Collins $html .= '</div>'; 5172b4583abSJames Collins } 518a8eebd82SJames Collins 5199cff245bSJames Collins if ($print === true) { 5209cff245bSJames Collins echo $html; 5219cff245bSJames Collins } 522a8eebd82SJames Collins return $html; 5232b4583abSJames Collins } 5242b4583abSJames Collins 5252b4583abSJames Collins 526a8eebd82SJames Collins /** 527a8eebd82SJames Collins * Print or return DokuWiki Menu 528a8eebd82SJames Collins * 5299cff245bSJames Collins * @param boolean $print Print content. 530a8eebd82SJames Collins * @return string contents of the menu 531a8eebd82SJames Collins */ 5329cff245bSJames Collins public function includeDWMenu(bool $print = true) 53310b40067Snomadjimbob { 5342b4583abSJames Collins global $lang; 5352b4583abSJames Collins global $USERINFO; 536c165b184SJames Collins 5379cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 538a8eebd82SJames Collins $html = '<ul class="mikio-nav">'; 5392b4583abSJames Collins 540ab45ba71SJames Collins $pageToolsMenu = []; 541ab45ba71SJames Collins $siteToolsMenu = []; 542ab45ba71SJames Collins $userToolsMenu = []; 543c165b184SJames Collins 544ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 545ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 546ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 5472b4583abSJames Collins 5482b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 5492b4583abSJames Collins foreach ($items as $item) { 5509cff245bSJames Collins if ($item->getType() !== 'top') { 551ab45ba71SJames Collins $itemHtml = ''; 5522b4583abSJames Collins 553905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5549cff245bSJames Collins if ( 5553a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5563a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5573a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5589cff245bSJames Collins ) { 5599cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . 5609cff245bSJames Collins ' ' . $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5619cff245bSJames Collins if ($showIcons === true) { 5629cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5639cff245bSJames Collins } 5649cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5659cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5669cff245bSJames Collins } 567ab45ba71SJames Collins $itemHtml .= '</a>'; 568ab45ba71SJames Collins 569ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 5702b4583abSJames Collins } 5719cff245bSJames Collins }//end if 5729cff245bSJames Collins }//end foreach 5732b4583abSJames Collins 574ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action'); 575ab45ba71SJames Collins foreach ($items as $item) { 576ab45ba71SJames Collins $itemHtml = ''; 5772b4583abSJames Collins 578905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5799cff245bSJames Collins if ( 5803a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5813a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5823a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5839cff245bSJames Collins ) { 5849cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . ' ' . 5859cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5869cff245bSJames Collins if ($showIcons === true) { 5879cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5889cff245bSJames Collins } 5899cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5909cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5919cff245bSJames Collins } 592ab45ba71SJames Collins $itemHtml .= '</a>'; 5932b4583abSJames Collins 594ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 5952b4583abSJames Collins } 5969cff245bSJames Collins }//end foreach 5972b4583abSJames Collins 598ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 599ab45ba71SJames Collins foreach ($items as $item) { 600ab45ba71SJames Collins $itemHtml = ''; 601ab45ba71SJames Collins 602905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 6039cff245bSJames Collins if ( 6043a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 6053a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 6063a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 6079cff245bSJames Collins ) { 6089cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link' . ($isDropDown === true ? ' mikio-dropdown-item' : '') . ' ' . 6099cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 6109cff245bSJames Collins if ($showIcons === true) { 6119cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 6129cff245bSJames Collins } 6139cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6149cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6159cff245bSJames Collins } 616ab45ba71SJames Collins $itemHtml .= '</a>'; 617ab45ba71SJames Collins 618ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 619ab45ba71SJames Collins } 6209cff245bSJames Collins }//end foreach 621ab45ba71SJames Collins 622ab45ba71SJames Collins 623ab45ba71SJames Collins switch ($this->getConf('navbarDWMenuCombine')) { 624ab45ba71SJames Collins case 'dropdown': 625ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 6269cff245bSJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" 6279cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6289cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('file') : '') . 6299cff245bSJames Collins ($showText === true ? $lang['page_tools'] : '<span class="mikio-small-only">' . $lang['page_tools'] . 6309cff245bSJames Collins '</span>') . '</a>'; 631a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 632ab45ba71SJames Collins 633ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 634ab45ba71SJames Collins $html .= $item; 635ab45ba71SJames Collins } 636ab45ba71SJames Collins 637ab45ba71SJames Collins $html .= '</div>'; 638ab45ba71SJames Collins $html .= '</li>'; 639ab45ba71SJames Collins 640a8eebd82SJames Collins $html .= '<li id="dokuwiki__sitetools" class="mikio-nav-dropdown">'; 6419cff245bSJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" 6429cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6439cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('gear') : '') . 6449cff245bSJames Collins ($showText === true ? $lang['site_tools'] : '<span class="mikio-small-only">' . 6459cff245bSJames Collins $lang['site_tools'] . '</span>') . '</a>'; 646a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 647ab45ba71SJames Collins 648ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 649ab45ba71SJames Collins $html .= $item; 650ab45ba71SJames Collins } 651ab45ba71SJames Collins 652ab45ba71SJames Collins $html .= '</div>'; 653ab45ba71SJames Collins $html .= '</li>'; 654ab45ba71SJames Collins 655a8eebd82SJames Collins $html .= '<li id="dokuwiki__usertools" class="mikio-nav-dropdown">'; 6569cff245bSJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" 6579cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6589cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('user') : '') . 6599cff245bSJames Collins ($showText === true ? $lang['user_tools'] : '<span class="mikio-small-only">' . 6609cff245bSJames Collins $lang['user_tools'] . '</span>') . '</a>'; 661a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 662ab45ba71SJames Collins 663ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 664ab45ba71SJames Collins $html .= $item; 665ab45ba71SJames Collins } 666ab45ba71SJames Collins 667ab45ba71SJames Collins $html .= '</div>'; 668ab45ba71SJames Collins $html .= '</li>'; 669ab45ba71SJames Collins 670ab45ba71SJames Collins break; 671ab45ba71SJames Collins 672ab45ba71SJames Collins case 'combine': 673ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 6749cff245bSJames Collins $html .= '<a class="mikio-nav-link" href="#">' . 6759cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('wrench') : '') . 6769cff245bSJames Collins ($showText === true ? tpl_getLang('tools-menu') : '<span class="mikio-small-only">' . 6779cff245bSJames Collins tpl_getLang('tools-menu') . '</span>') . '</a>'; 678a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 679ab45ba71SJames Collins 680ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 681ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 682ab45ba71SJames Collins $html .= $item; 683ab45ba71SJames Collins } 684ab45ba71SJames Collins 685ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 686ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 687ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 688ab45ba71SJames Collins $html .= $item; 689ab45ba71SJames Collins } 690ab45ba71SJames Collins 691ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 692ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 693ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 694ab45ba71SJames Collins $html .= $item; 695ab45ba71SJames Collins } 696ab45ba71SJames Collins 697ab45ba71SJames Collins $html .= '</div>'; 698ab45ba71SJames Collins $html .= '</li>'; 699ab45ba71SJames Collins break; 700ab45ba71SJames Collins 701ab45ba71SJames Collins default: // seperate 702ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 703a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 704ab45ba71SJames Collins } 705ab45ba71SJames Collins 706ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 707a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 708a8eebd82SJames Collins } 709a8eebd82SJames Collins 710a8eebd82SJames Collins foreach ($userToolsMenu as $item) { 711a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 712ab45ba71SJames Collins } 713ab45ba71SJames Collins 714ab45ba71SJames Collins break; 7159cff245bSJames Collins }//end switch 716ab45ba71SJames Collins 7173a3ece10SJames Collins $translation = plugin_load('helper', 'translation'); 7183a3ece10SJames Collins if ($translation !== null) { 7193a3ece10SJames Collins $html .= '<li id="mikio__translate" class="mikio-nav-dropdown">'; 7203a3ece10SJames Collins $html .= '<a id="mikio_dropdown_translate" class="nav-link dropdown-toggle" href="#" role="button" 7213a3ece10SJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 7223a3ece10SJames Collins $this->mikioInlineIcon('language') . 7233a3ece10SJames Collins '</a>'; 7243a3ece10SJames Collins $html .= '<div class="mikio-dropdown closed">'; 7253a3ece10SJames Collins 7263a3ece10SJames Collins $html .= $translation->showTranslations(); 7273a3ece10SJames Collins 7283a3ece10SJames Collins $html .= '</div>'; 7293a3ece10SJames Collins $html .= '</li>'; 7303a3ece10SJames Collins } 7313a3ece10SJames Collins 73212030b10SJames Collins if ($this->getConf('showLightDark') === true) { 733d0fba6d1SJames Collins $autoLightDark = $this->getConf('autoLightDark'); 7349e41d878SJames Collins $html .= '<li class="mikio-darklight"> 7359e41d878SJames Collins<a href="#" class="mikio-control mikio-button mikio-darklight-button">' . 736d0fba6d1SJames Collins ($autoLightDark === true ? $this->mikioInlineIcon('sunmoon', 'mikio-darklight-auto') : '') . 7379e41d878SJames Collins $this->mikioInlineIcon('sun', 'mikio-darklight-light') . 7389e41d878SJames Collins $this->mikioInlineIcon('moon', 'mikio-darklight-dark') . 7399e41d878SJames Collins '</a></li>'; 74012030b10SJames Collins } 74112030b10SJames Collins 742ab45ba71SJames Collins $html .= '</ul>'; 743ab45ba71SJames Collins 7449cff245bSJames Collins if ($print === true) { 7459cff245bSJames Collins echo $html; 7469cff245bSJames Collins } 747a8eebd82SJames Collins return $html; 748a8eebd82SJames Collins } 749a8eebd82SJames Collins 750a8eebd82SJames Collins 751a8eebd82SJames Collins /** 752a8eebd82SJames Collins * Create a nav element from a string. <uri>|<title>; 753a8eebd82SJames Collins * 7549cff245bSJames Collins * @param string $str String to generate nav. 755a8eebd82SJames Collins * @return string nav elements generated 756a8eebd82SJames Collins */ 7579cff245bSJames Collins public function stringToNav(string $str) 75810b40067Snomadjimbob { 759a8eebd82SJames Collins $html = ''; 760a8eebd82SJames Collins 7613a385f2cSJames Collins if (empty($str) === false) { 762a8eebd82SJames Collins $items = explode(';', $str); 763a8eebd82SJames Collins if (count($items) > 0) { 764a8eebd82SJames Collins $html .= '<ul class="mikio-nav">'; 765a8eebd82SJames Collins foreach ($items as $item) { 766a8eebd82SJames Collins $parts = explode('|', $item); 767a8eebd82SJames Collins if ($parts > 1) { 7689cff245bSJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . 7699cff245bSJames Collins strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . 7709cff245bSJames Collins '</a></li>'; 771a8eebd82SJames Collins } 772a8eebd82SJames Collins } 773a8eebd82SJames Collins $html .= '</ul>'; 774a8eebd82SJames Collins } 7752b4583abSJames Collins } 7762b4583abSJames Collins 777ab45ba71SJames Collins return $html; 7782b4583abSJames Collins } 7792b4583abSJames Collins 780a8eebd82SJames Collins /** 781ab45ba71SJames Collins * print or return the main navbar 7822b4583abSJames Collins * 7839cff245bSJames Collins * @param boolean $print Print the navbar. 7849cff245bSJames Collins * @param boolean $showSub Include the sub navbar. 785ab45ba71SJames Collins * @return string generated content 7862b4583abSJames Collins */ 7879cff245bSJames Collins public function includeNavbar(bool $print = true, bool $showSub = false) 78810b40067Snomadjimbob { 789b39ad16dSJames Collins global $conf, $USERINFO; 790d3d7d2b7SJames Collins 791d3d7d2b7SJames Collins $homeUrl = wl(); 792d3d7d2b7SJames Collins 7939cff245bSJames Collins if (plugin_isdisabled('showpageafterlogin') === false) { 794d3d7d2b7SJames Collins $p = &plugin_load('action', 'showpageafterlogin'); 7953a385f2cSJames Collins if (empty($p) === false) { 7969cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 797d3d7d2b7SJames Collins $homeUrl = wl($p->getConf('page_after_login')); 798d3d7d2b7SJames Collins } 799d3d7d2b7SJames Collins } 800b39ad16dSJames Collins } else { 8019cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 802b39ad16dSJames Collins $url = $this->getConf('brandURLUser'); 803b39ad16dSJames Collins if (strlen($url) > 0) { 804b39ad16dSJames Collins $homeUrl = $url; 805d3d7d2b7SJames Collins } 806b39ad16dSJames Collins } else { 807b39ad16dSJames Collins $url = $this->getConf('brandURLGuest'); 808b39ad16dSJames Collins if (strlen($url) > 0) { 809b39ad16dSJames Collins $homeUrl = $url; 810b39ad16dSJames Collins } 811b39ad16dSJames Collins } 812b39ad16dSJames Collins } 813d3d7d2b7SJames Collins 814ab45ba71SJames Collins $html = ''; 81547161538SJames Collins 8169cff245bSJames Collins $html .= '<nav class="mikio-navbar' . (($this->getConf('stickyNavbar') === true) ? ' mikio-sticky' : '') . 8179cff245bSJames Collins '">'; 818f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 819d3d7d2b7SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . $homeUrl . '">'; 8209cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true || $this->getConf('navbarUseTitleText') === true) { 821ab45ba71SJames Collins // Brand image 8229cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true) { 8239cff245bSJames Collins $logo = $this->getMediaFile('logo', false); 8249cff245bSJames Collins ; 8253a385f2cSJames Collins if (empty($logo) === false) { 826f0241fc4SJames Collins $width = $this->getConf('navbarTitleIconWidth'); 827f0241fc4SJames Collins $height = $this->getConf('navbarTitleIconHeight'); 828f0241fc4SJames Collins $styles = ''; 829f0241fc4SJames Collins 830f0241fc4SJames Collins if (strlen($width) > 0 || strlen($height) > 0) { 8319cff245bSJames Collins if (ctype_digit($width) === true) { 832f0241fc4SJames Collins $styles .= 'max-width:' . intval($width) . 'px;'; 8339cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $width) === 1) { 834f0241fc4SJames Collins $styles .= 'max-width:' . $width . ';'; 8359cff245bSJames Collins } elseif (strcasecmp($width, 'none') === 0) { 8367a92c19bSJames Collins $styles .= 'max-width:none;'; 837f0241fc4SJames Collins } 838f0241fc4SJames Collins 8399cff245bSJames Collins if (ctype_digit($height) === true) { 840f0241fc4SJames Collins $styles .= 'max-height:' . intval($height) . 'px;'; 8419cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $height) === 1) { 842f0241fc4SJames Collins $styles .= 'max-height:' . $height . ';'; 8439cff245bSJames Collins } elseif (strcasecmp($height, 'none') === 0) { 8447a92c19bSJames Collins $styles .= 'max-height:none;'; 845f0241fc4SJames Collins } 846f0241fc4SJames Collins 847f0241fc4SJames Collins if (strlen($styles) > 0) { 848f0241fc4SJames Collins $styles = ' style="' . $styles . '"'; 849f0241fc4SJames Collins } 8509cff245bSJames Collins }//end if 851f0241fc4SJames Collins 852f0241fc4SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image"' . $styles . '>'; 8539cff245bSJames Collins }//end if 8549cff245bSJames Collins }//end if 855ab45ba71SJames Collins 856ab45ba71SJames Collins // Brand title 8579cff245bSJames Collins if ($this->getConf('navbarUseTitleText') === true) { 858ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 859a8eebd82SJames Collins $html .= '<h1 class="mikio-navbar-brand-title-text">' . $conf['title'] . '</h1>'; 8609cff245bSJames Collins if ($this->getConf('navbarUseTaglineText') === true) { 861a8eebd82SJames Collins $html .= '<p class="claim mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</p>'; 862ab45ba71SJames Collins } 863ab45ba71SJames Collins $html .= '</div>'; 864ab45ba71SJames Collins } 8659cff245bSJames Collins }//end if 866ab45ba71SJames Collins $html .= '</a>'; 867660b2c71SJames Collins $html .= '<div class="mikio-navbar-toggle"><span class="icon"></span></div>'; 868ab45ba71SJames Collins 869ab45ba71SJames Collins // Menus 870ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 871ab45ba71SJames Collins 8729cff245bSJames Collins $menus = [$this->getConf('navbarPosLeft', 'none'), $this->getConf('navbarPosMiddle', 'none'), 8739cff245bSJames Collins $this->getConf('navbarPosRight', 'none') 8749cff245bSJames Collins ]; 875a8eebd82SJames Collins foreach ($menus as $menuType) { 876a8eebd82SJames Collins switch ($menuType) { 877a8eebd82SJames Collins case 'custom': 878a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('navbarCustomMenuText', '')); 879a8eebd82SJames Collins break; 880a8eebd82SJames Collins case 'search': 881ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 882ab45ba71SJames Collins $html .= $this->includeSearch(false); 883ab45ba71SJames Collins $html .= '</div>'; 884a8eebd82SJames Collins break; 885a8eebd82SJames Collins case 'dokuwiki': 8869cff245bSJames Collins $html .= $this->includeDWMenu(false); 887a8eebd82SJames Collins break; 888a8eebd82SJames Collins } 889a8eebd82SJames Collins } 890ab45ba71SJames Collins 891ab45ba71SJames Collins $html .= '</div>'; 892f8039bf2SJames Collins $html .= '</div>'; 893ab45ba71SJames Collins $html .= '</nav>'; 894ab45ba71SJames Collins 895a8eebd82SJames Collins // Sub Navbar 8969cff245bSJames Collins if ($showSub === true) { 8979cff245bSJames Collins $sub = $this->includePage('submenu', false); 8983a385f2cSJames Collins if (empty($sub) === false) { 8999cff245bSJames Collins $html .= '<nav class="mikio-navbar mikio-sub-navbar">' . $sub . '</nav>'; 9009cff245bSJames Collins } 901ab45ba71SJames Collins } 902ab45ba71SJames Collins 9039cff245bSJames Collins if ($print === true) { 9049cff245bSJames Collins echo $html; 9059cff245bSJames Collins } 906ab45ba71SJames Collins return $html; 907ab45ba71SJames Collins } 908ab45ba71SJames Collins 909ab45ba71SJames Collins 910a8eebd82SJames Collins /** 911a8eebd82SJames Collins * Is there a sidebar 912a8eebd82SJames Collins * 9139cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 914a8eebd82SJames Collins * @return boolean if sidebar exists 915a8eebd82SJames Collins */ 9169cff245bSJames Collins public function sidebarExists(string $prefix = '') 91710b40067Snomadjimbob { 918a8eebd82SJames Collins global $conf; 919a8eebd82SJames Collins 9203a385f2cSJames Collins if (strcasecmp($prefix, 'left') === 0) { 9219cff245bSJames Collins $prefix = ''; 9229cff245bSJames Collins } 923a8eebd82SJames Collins 924a8eebd82SJames Collins return $this->pageExists($conf['sidebar' . $prefix]); 925a8eebd82SJames Collins } 926a8eebd82SJames Collins 927a8eebd82SJames Collins 928a8eebd82SJames Collins /** 929ab45ba71SJames Collins * Print or return the sidebar content 930ab45ba71SJames Collins * 9319cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 9329cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 9339cff245bSJames Collins * @param boolean $parse Parse the content. 934ab45ba71SJames Collins * @return string generated content 935ab45ba71SJames Collins */ 9369cff245bSJames Collins public function includeSidebar(string $prefix = '', bool $print = true, bool $parse = true) 93710b40067Snomadjimbob { 938ab45ba71SJames Collins global $conf, $ID; 939ab45ba71SJames Collins 940ab45ba71SJames Collins $html = ''; 941ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 942ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 943ab45ba71SJames Collins 9443a385f2cSJames Collins if (empty($confPrefix) === true) { 9459cff245bSJames Collins $confPrefix = 'Left'; 9469cff245bSJames Collins } 9471cdedf28SJames Collins if (strcasecmp($prefix, 'left') === 0) { 9489cff245bSJames Collins $prefix = ''; 9499cff245bSJames Collins } 950ab45ba71SJames Collins 9511cdedf28SJames Collins $sidebarPage = empty($conf[$prefix . 'sidebar']) === true ? $prefix . 'sidebar' : $conf[$prefix . 'sidebar']; 952ab45ba71SJames Collins 9539cff245bSJames Collins if ( 9549cff245bSJames Collins $this->getConf('sidebarShow' . $confPrefix) === true && page_findnearest($sidebarPage) !== false && 9551cdedf28SJames Collins p_get_metadata($ID, 'nosidebar', false) === null 9569cff245bSJames Collins ) { 9579cff245bSJames Collins $content = $this->includePage($sidebarPage . 'header', false); 9583a385f2cSJames Collins if (empty($content) === false) { 9599cff245bSJames Collins $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 9609cff245bSJames Collins } 961ab45ba71SJames Collins 9623a385f2cSJames Collins if (empty($prefix) === true) { 9639cff245bSJames Collins $rows = [$this->getConf('sidebarLeftRow1'), $this->getConf('sidebarLeftRow2'), 9649cff245bSJames Collins $this->getConf('sidebarLeftRow3'), $this->getConf('sidebarLeftRow4') 9659cff245bSJames Collins ]; 966ab45ba71SJames Collins 967a8eebd82SJames Collins foreach ($rows as $row) { 968a8eebd82SJames Collins switch ($row) { 969a8eebd82SJames Collins case 'search': 9709cff245bSJames Collins $html .= $this->includeSearch(false); 971a8eebd82SJames Collins break; 972a8eebd82SJames Collins case 'logged in user': 9739cff245bSJames Collins $html .= $this->includeLoggedIn(false); 974a8eebd82SJames Collins break; 975a8eebd82SJames Collins case 'content': 9769cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9773a385f2cSJames Collins if (empty($content) === false) { 9789cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9799cff245bSJames Collins } 980a8eebd82SJames Collins break; 981a8eebd82SJames Collins case 'tags': 982a8eebd82SJames Collins $html .= '<div class="mikio-tags"></div>'; 983a8eebd82SJames Collins } 984a8eebd82SJames Collins } 985a8eebd82SJames Collins } else { 9869cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9873a385f2cSJames Collins if (empty($content) === false) { 9889cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9899cff245bSJames Collins } 9909cff245bSJames Collins }//end if 9919cff245bSJames Collins 9929cff245bSJames Collins $content = $this->includePage($sidebarPage . 'footer', false); 9933a385f2cSJames Collins if (empty($content) === false) { 9949cff245bSJames Collins $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 9959cff245bSJames Collins } 9969cff245bSJames Collins }//end if 9979cff245bSJames Collins 9983a385f2cSJames Collins if (empty($html) === true) { 9993a385f2cSJames Collins if (empty($prefix) === true && $this->getConf('sidebarAlwaysShowLeft') === true) { 10009cff245bSJames Collins $html = ' '; 10019cff245bSJames Collins } 10029cff245bSJames Collins if ($this->getConf('sidebarAlwaysShow' . ucfirst($prefix)) === true) { 10039cff245bSJames Collins $html = ' '; 10049cff245bSJames Collins } 1005a8eebd82SJames Collins } 1006ab45ba71SJames Collins 10073a385f2cSJames Collins if (empty($html) === false) { 10081cdedf28SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . (empty($prefix) === true ? 'left' : $prefix) . 10099cff245bSJames Collins '"><a class="mikio-sidebar-toggle' . 10109cff245bSJames Collins ($this->getConf('sidebarMobileDefaultCollapse') === true ? ' closed' : '') . '" href="#">' . 10119cff245bSJames Collins tpl_getLang('sidebar-title') . ' <span class="icon"></span></a><div class="mikio-sidebar-collapse">' . 10129cff245bSJames Collins $html . '</div></aside>'; 1013ab45ba71SJames Collins } 1014ab45ba71SJames Collins 10159cff245bSJames Collins if ($parse === true) { 10169cff245bSJames Collins $html = $this->includeIcons($html); 10173a04a100SJames Collins } 10189cff245bSJames Collins if ($print === true) { 10199cff245bSJames Collins echo $html; 1020ab45ba71SJames Collins } 10214f8225e4SJames Collins 1022ab45ba71SJames Collins return $html; 1023ab45ba71SJames Collins } 1024ab45ba71SJames Collins 1025ab45ba71SJames Collins 1026a8eebd82SJames Collins /** 1027ab45ba71SJames Collins * Print or return the page tools content 1028ab45ba71SJames Collins * 10299cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 10309cff245bSJames Collins * @param boolean $includeId Include the dw__pagetools id in the element. 1031ab45ba71SJames Collins * @return string generated content 1032ab45ba71SJames Collins */ 10339cff245bSJames Collins public function includePageTools(bool $print = true, bool $includeId = false) 103410b40067Snomadjimbob { 10351293ce10SJames Collins global $USERINFO; 10361293ce10SJames Collins 10379cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 1038ab45ba71SJames Collins $html = ''; 1039ab45ba71SJames Collins 10409cff245bSJames Collins $html .= '<nav' . ($includeId === true ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 1041b9c0582bSJames Collins $html .= '<ul class="tools">'; 1042ab45ba71SJames Collins 1043ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 1044ab45ba71SJames Collins foreach ($items as $item) { 10459cff245bSJames Collins $classes = []; 10463fd763a0SJames Collins $classes[] = $item->getType(); 10473fd763a0SJames Collins $attr = $item->getLinkAttributes(); 10483fd763a0SJames Collins 10499cff245bSJames Collins if (empty($attr['class']) === false) { 10503fd763a0SJames Collins $classes = array_merge($classes, explode(' ', $attr['class'])); 1051ab45ba71SJames Collins } 1052ab45ba71SJames Collins 10533fd763a0SJames Collins $classes = array_unique($classes); 10543fd763a0SJames Collins 10551293ce10SJames Collins $showItem = $this->getConf('pageToolsShow' . ucfirst($item->getType())); 10569cff245bSJames Collins if ( 10573a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 10583a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 10593a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === true)) 10609cff245bSJames Collins ) { 10613fd763a0SJames Collins $html .= '<li class="' . implode(' ', $classes) . '">'; 10629cff245bSJames Collins $html .= '<a href="' . $item->getLink() . '" class="' . $item->getType() . '" title="' . 10639cff245bSJames Collins $item->getTitle() . '"><div class="icon">' . inlineSVG($item->getSvg()) . 10649cff245bSJames Collins '</div><span class="a11y">' . $item->getLabel() . '</span></a>'; 10653fd763a0SJames Collins $html .= '</li>'; 10663fd763a0SJames Collins } 10679cff245bSJames Collins }//end foreach 10683fd763a0SJames Collins 10693fd763a0SJames Collins $html .= '</ul>'; 1070ab45ba71SJames Collins $html .= '</nav>'; 1071ab45ba71SJames Collins 10729cff245bSJames Collins if ($print === true) { 10739cff245bSJames Collins echo $html; 10749cff245bSJames Collins } 1075ab45ba71SJames Collins return $html; 1076ab45ba71SJames Collins } 1077ab45ba71SJames Collins 1078ab45ba71SJames Collins 1079a8eebd82SJames Collins /** 1080a8eebd82SJames Collins * Print or return the search bar 1081a8eebd82SJames Collins * 10829cff245bSJames Collins * @param boolean $print Print content. 1083a8eebd82SJames Collins * @return string contents of the search bar 1084a8eebd82SJames Collins */ 10859cff245bSJames Collins public function includeSearch(bool $print = true) 108610b40067Snomadjimbob { 10879cff245bSJames Collins global $lang, $ID, $ACT, $QUERY; 1088ab45ba71SJames Collins $html = ''; 1089ab45ba71SJames Collins 10909cff245bSJames Collins $html .= '<form class="mikio-search search" action="' . wl() . 10919cff245bSJames Collins '" accept-charset="utf-8" method="get" role="search">'; 1092a8eebd82SJames Collins $html .= '<input type="hidden" name="do" value="search">'; 1093a8eebd82SJames Collins $html .= '<input type="hidden" name="id" value="' . $ID . '">'; 1094c1cb9f15SChris MacMackin $html .= '<input name="q" '; 10959cff245bSJames Collins if ($this->getConf('searchUseTypeahead') === true) { 1096c1cb9f15SChris MacMackin $html .= 'class="search_typeahead" '; 1097c1cb9f15SChris MacMackin } 10989cff245bSJames Collins $html .= 'autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . 10993a385f2cSJames Collins ((strcasecmp($ACT, 'search') === 0) ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 1100a8eebd82SJames Collins $html .= '<button type="submit" title="' . $lang['btn_search'] . '">'; 11013a385f2cSJames Collins if (strcasecmp($this->getConf('searchButton'), 'icon') === 0) { 1102a8eebd82SJames Collins $html .= $this->mikioInlineIcon('search'); 1103ab45ba71SJames Collins } else { 1104ab45ba71SJames Collins $html .= $lang['btn_search']; 1105ab45ba71SJames Collins } 1106ab45ba71SJames Collins $html .= '</button>'; 1107ab45ba71SJames Collins $html .= '</form>'; 1108ab45ba71SJames Collins 11099cff245bSJames Collins if ($print === true) { 11109cff245bSJames Collins echo $html; 11119cff245bSJames Collins } 1112ab45ba71SJames Collins return $html; 1113ab45ba71SJames Collins } 1114ab45ba71SJames Collins 1115ab45ba71SJames Collins 1116a8eebd82SJames Collins /** 1117a8eebd82SJames Collins * Print or return content 1118a8eebd82SJames Collins * 11199cff245bSJames Collins * @param boolean $print Print content. 1120a8eebd82SJames Collins * @return string contents 1121a8eebd82SJames Collins */ 11229cff245bSJames Collins public function includeContent(bool $print = true) 112310b40067Snomadjimbob { 1124ab45ba71SJames Collins ob_start(); 11259cff245bSJames Collins tpl_content(false); 1126ab45ba71SJames Collins $html = ob_get_contents(); 1127ab45ba71SJames Collins ob_end_clean(); 1128ab45ba71SJames Collins 1129ab45ba71SJames Collins $html = $this->includeIcons($html); 1130ab45ba71SJames Collins $html = $this->parseContent($html); 1131ab45ba71SJames Collins 1132ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 1133ab45ba71SJames Collins 11349cff245bSJames Collins if ($this->getConf('heroTitle') === false) { 11359cff245bSJames Collins $html = '<div class="mikio-tags"></div>' . $html; 11369cff245bSJames Collins } 1137a8eebd82SJames Collins 1138a8eebd82SJames Collins $html = '<div class="mikio-article-content">' . $html . '</div>'; 1139a8eebd82SJames Collins 11409cff245bSJames Collins if ($print === true) { 11419cff245bSJames Collins echo $html; 11429cff245bSJames Collins } 1143ab45ba71SJames Collins return $html; 1144ab45ba71SJames Collins } 1145ab45ba71SJames Collins 1146a8eebd82SJames Collins /** 1147ab45ba71SJames Collins * Print or return footer 1148ab45ba71SJames Collins * 11499cff245bSJames Collins * @param boolean $print Print footer. 11509cff245bSJames Collins * @return string HTML string containing footer 1151ab45ba71SJames Collins */ 11529cff245bSJames Collins public function includeFooter(bool $print = true) 115310b40067Snomadjimbob { 1154ab45ba71SJames Collins global $ACT; 1155ab45ba71SJames Collins 1156ab45ba71SJames Collins $html = ''; 1157ab45ba71SJames Collins 1158ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 11599cff245bSJames Collins $html .= '<div class="doc">' . tpl_pageinfo(true) . '</div>'; 11609cff245bSJames Collins $html .= $this->includePage('footer', false); 1161ab45ba71SJames Collins 1162a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('footerCustomMenuText')); 1163ab45ba71SJames Collins 11649cff245bSJames Collins if ($this->getConf('footerSearch') === true) { 1165ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 11669cff245bSJames Collins $html .= $this->includeSearch(false); 1167ab45ba71SJames Collins $html .= '</div>'; 1168ab45ba71SJames Collins } 1169ab45ba71SJames Collins 1170a8eebd82SJames Collins $showPageTools = $this->getConf('pageToolsFooter'); 11719cff245bSJames Collins if ( 11723a385f2cSJames Collins strcasecmp($ACT, 'show') === 0 && (strcasecmp($showPageTools, 'always') === 0 || 11733a385f2cSJames Collins $this->userCanEdit() === true && strcasecmp($showPageTools, 'page editors') === 0) 11749cff245bSJames Collins ) { 11759cff245bSJames Collins $html .= $this->includePageTools(false); 11769cff245bSJames Collins } 1177ab45ba71SJames Collins 11789cff245bSJames Collins $meta['licenseType'] = ['multichoice', '_choices' => ['none', 'badge', 'button']]; 11799cff245bSJames Collins $meta['licenseImageOnly'] = ['onoff']; 1180ab45ba71SJames Collins 1181ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 11829cff245bSJames Collins if ($licenseType !== 'none') { 11839cff245bSJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), true, true); 1184ab45ba71SJames Collins } 1185ab45ba71SJames Collins 1186ab45ba71SJames Collins $html .= '</footer>'; 1187ab45ba71SJames Collins 11889cff245bSJames Collins if ($print === true) { 11899cff245bSJames Collins echo $html; 11909cff245bSJames Collins } 1191ab45ba71SJames Collins return $html; 1192ab45ba71SJames Collins } 1193ab45ba71SJames Collins 1194ab45ba71SJames Collins 1195a8eebd82SJames Collins /** 1196ab45ba71SJames Collins * Print or return breadcrumb trail 1197ab45ba71SJames Collins * 11989cff245bSJames Collins * @param boolean $print Print out trail. 11999cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12009cff245bSJames Collins * @return string HTML string containing breadcrumbs 1201ab45ba71SJames Collins */ 12029cff245bSJames Collins public function includeBreadcrumbs(bool $print = true, bool $parse = true) 120310b40067Snomadjimbob { 1204a8eebd82SJames Collins global $conf, $ID, $lang, $ACT; 1205a8eebd82SJames Collins 12063a385f2cSJames Collins if ( 12073a385f2cSJames Collins $this->getConf('breadcrumbHideHome') === true && strcasecmp($ID, 'start') === 0 && 120895372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['breadcrumbs'] === 0 12093a385f2cSJames Collins ) { 12109cff245bSJames Collins return ''; 12119cff245bSJames Collins } 1212ab45ba71SJames Collins 1213ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 1214f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 12153a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 121695372bffSJames Collins if ($conf['breadcrumbs'] !== 0) { 12179cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === false && $this->getConf('breadcrumbSep') === false) { 1218ab45ba71SJames Collins ob_start(); 121975adba86SJames Collins tpl_breadcrumbs(); 1220ab45ba71SJames Collins $html .= ob_get_contents(); 1221ab45ba71SJames Collins ob_end_clean(); 1222ab45ba71SJames Collins } else { 1223ab45ba71SJames Collins $sep = '•'; 1224ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 1225ab45ba71SJames Collins 12269cff245bSJames Collins if ($this->getConf('breadcrumbSep') === true) { 1227ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 12289cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-sep', false); 1229ab45ba71SJames Collins 12309cff245bSJames Collins if ($img !== false) { 1231ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1232ab45ba71SJames Collins } 123347161538SJames Collins } 123447161538SJames Collins 12359cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === true) { 1236ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 12379cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-prefix', false); 1238ab45ba71SJames Collins 12399cff245bSJames Collins if ($img !== false) { 1240ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 1241ab45ba71SJames Collins } 1242ab45ba71SJames Collins } 1243ab45ba71SJames Collins 1244ab45ba71SJames Collins $crumbs = breadcrumbs(); 1245ab45ba71SJames Collins 1246ab45ba71SJames Collins $html .= '<ul>'; 12473a385f2cSJames Collins if (empty($prefix) === false) { 12489cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 12499cff245bSJames Collins } 1250ab45ba71SJames Collins 1251ab45ba71SJames Collins $last = count($crumbs); 1252ab45ba71SJames Collins $i = 0; 1253ab45ba71SJames Collins foreach ($crumbs as $id => $name) { 1254ab45ba71SJames Collins $i++; 125595372bffSJames Collins if ($i !== 1) { 1256ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 125795372bffSJames Collins } 12589cff245bSJames Collins $html .= '<li' . ($i === $last ? ' class="curid"' : '') . '>'; 12599cff245bSJames Collins $html .= tpl_pagelink($id, null, true); 1260ab45ba71SJames Collins $html .= '</li>'; 1261ab45ba71SJames Collins } 1262ab45ba71SJames Collins 1263ab45ba71SJames Collins $html .= '</ul>'; 12649cff245bSJames Collins }//end if 12659cff245bSJames Collins }//end if 12669cff245bSJames Collins }//end if 12673d11a778SJames Collins 12683d11a778SJames Collins $html .= '</div>'; 12693d11a778SJames Collins $html .= '</div>'; 12703d11a778SJames Collins 12719cff245bSJames Collins if ($parse === true) { 12729cff245bSJames Collins $html = $this->includeIcons($html); 12739cff245bSJames Collins } 12749cff245bSJames Collins if ($print === true) { 12759cff245bSJames Collins echo $html; 12769cff245bSJames Collins } 12773d11a778SJames Collins return $html; 12783d11a778SJames Collins } 12793d11a778SJames Collins 12803d11a778SJames Collins /** 12813d11a778SJames Collins * Print or return you are here trail 12823d11a778SJames Collins * 12839cff245bSJames Collins * @param boolean $print Print out trail. 12849cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12859cff245bSJames Collins * @return string HTML string containing breadcrumbs 12863d11a778SJames Collins */ 12879cff245bSJames Collins public function includeYouAreHere(bool $print = true, bool $parse = true) 12883d11a778SJames Collins { 12893d11a778SJames Collins global $conf, $ID, $lang, $ACT; 12903d11a778SJames Collins 12913a385f2cSJames Collins if ( 12923a385f2cSJames Collins $this->getConf('youarehereHideHome') === true && strcasecmp($ID, 'start') === 0 && 129395372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['youarehere'] === 0 12943a385f2cSJames Collins ) { 12959cff245bSJames Collins return ''; 12969cff245bSJames Collins } 12973d11a778SJames Collins 12983d11a778SJames Collins $html = '<div class="mikio-youarehere">'; 12993d11a778SJames Collins $html .= '<div class="mikio-container">'; 13003a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 130195372bffSJames Collins if ($conf['youarehere'] !== 0) { 13029cff245bSJames Collins if ($this->getConf('youareherePrefix') === false && $this->getConf('youarehereSep') === false) { 130395372bffSJames Collins $html .= '<div class="mikio-bcdw">'; 1304ab45ba71SJames Collins ob_start(); 130575adba86SJames Collins tpl_youarehere(); 1306ab45ba71SJames Collins $html .= ob_get_contents(); 1307ab45ba71SJames Collins ob_end_clean(); 130895372bffSJames Collins $html .= '</div>'; 1309ab45ba71SJames Collins } else { 1310ab45ba71SJames Collins $sep = ' » '; 1311ab45ba71SJames Collins $prefix = $lang['youarehere']; 1312ab45ba71SJames Collins 13139cff245bSJames Collins if ($this->getConf('youarehereSep') === true) { 13143d11a778SJames Collins $sep = $this->getConf('youarehereSepText'); 13159cff245bSJames Collins $img = $this->getMediaFile('youarehere-sep', false); 1316ab45ba71SJames Collins 13179cff245bSJames Collins if ($img !== false) { 1318ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1319ab45ba71SJames Collins } 132075adba86SJames Collins } 132175adba86SJames Collins 13229cff245bSJames Collins if ($this->getConf('youareherePrefix') === true) { 13233d11a778SJames Collins $prefix = $this->getConf('youareherePrefixText'); 13249cff245bSJames Collins $img = $this->getMediaFile('youarehere-prefix', false); 1325ab45ba71SJames Collins 13269cff245bSJames Collins if ($img !== false) { 1327ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 132875adba86SJames Collins } 132947161538SJames Collins } 133047161538SJames Collins 1331ab45ba71SJames Collins $html .= '<ul>'; 13323a385f2cSJames Collins if (empty($prefix) === false) { 13339cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 13349cff245bSJames Collins } 13359cff245bSJames Collins $html .= '<li>' . tpl_pagelink(':' . $conf['start'], null, true) . '</li>'; 1336ab45ba71SJames Collins 1337ab45ba71SJames Collins $parts = explode(':', $ID); 1338ab45ba71SJames Collins $count = count($parts); 1339ab45ba71SJames Collins 1340ab45ba71SJames Collins $part = ''; 13419cff245bSJames Collins for ($i = 0; $i < ($count - 1); $i++) { 1342ab45ba71SJames Collins $part .= $parts[$i] . ':'; 1343ab45ba71SJames Collins $page = $part; 13449cff245bSJames Collins if ($page === $conf['start']) { 13459cff245bSJames Collins continue; 13469cff245bSJames Collins } 1347ab45ba71SJames Collins 1348ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13499cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1350ab45ba71SJames Collins } 1351ab45ba71SJames Collins 1352ab45ba71SJames Collins resolve_pageid('', $page, $exists); 13539cff245bSJames Collins if ((isset($page) === true && $page === $part . $parts[$i]) === false) { 1354ab45ba71SJames Collins $page = $part . $parts[$i]; 13559cff245bSJames Collins if ($page !== $conf['start']) { 1356ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13579cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1358ab45ba71SJames Collins } 1359ab45ba71SJames Collins } 1360ab45ba71SJames Collins 1361ab45ba71SJames Collins $html .= '</ul>'; 13629cff245bSJames Collins }//end if 13639cff245bSJames Collins }//end if 1364ab45ba71SJames Collins 13653d11a778SJames Collins $showLast = $this->getConf('youarehereShowLast'); 13669cff245bSJames Collins if ($showLast !== 0) { 1367a8eebd82SJames Collins preg_match_all('/(<li[^>]*>.+?<\/li>)/', $html, $matches); 13689cff245bSJames Collins if (count($matches) > 0 && count($matches[0]) > (($showLast * 2) + 2)) { 1369a8eebd82SJames Collins $count = count($matches[0]); 1370a8eebd82SJames Collins $list = ''; 1371a8eebd82SJames Collins 1372a8eebd82SJames Collins // Show Home 1373a8eebd82SJames Collins $list .= $matches[0][0] . $matches[0][1]; 1374a8eebd82SJames Collins 1375a8eebd82SJames Collins $list .= '<li>...</li>'; 13769cff245bSJames Collins for ($i = ($count - ($showLast * 2)); $i <= $count; $i++) { 1377a8eebd82SJames Collins $list .= $matches[0][$i]; 1378a8eebd82SJames Collins } 1379a8eebd82SJames Collins 1380a8eebd82SJames Collins $html = preg_replace('/<ul>.*<\/ul>/', '<ul>' . $list . '</ul>', $html); 1381a8eebd82SJames Collins } 1382a8eebd82SJames Collins } 1383a8eebd82SJames Collins 13843d11a778SJames Collins switch ($this->getConf('youarehereHome')) { 1385a8eebd82SJames Collins case 'none': 1386a8eebd82SJames Collins $html = preg_replace('/<li[^>]*>.+?<\/li>/', '', $html, 2); 1387a8eebd82SJames Collins break; 1388a8eebd82SJames Collins case 'home': 1389a8eebd82SJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . tpl_getlang('home') . '$3', $html, 1); 1390a8eebd82SJames Collins break; 1391a8eebd82SJames Collins case 'icon': 13929cff245bSJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . 13939cff245bSJames Collins $this->mikioInlineIcon('home') . '$3', $html, 1); 1394a8eebd82SJames Collins break; 1395a8eebd82SJames Collins } 1396a8eebd82SJames Collins } else { 1397a8eebd82SJames Collins $html .= '≪ '; 13989cff245bSJames Collins if (isset($_GET['page']) === true) { 13999cff245bSJames Collins $html .= '<a href="' . wl($ID, ['do' => $ACT]) . '">Back</a> / '; 1400a8eebd82SJames Collins } 14014057121fSJames Collins $html .= '<a href="' . wl($ID) . '">View Page</a>'; 14029cff245bSJames Collins }//end if 14039cff245bSJames Collins 14049cff245bSJames Collins $html .= '</div>'; 14059cff245bSJames Collins $html .= '</div>'; 14069cff245bSJames Collins 14079cff245bSJames Collins if ($parse === true) { 14089cff245bSJames Collins $html = $this->includeIcons($html); 1409a8eebd82SJames Collins } 14109cff245bSJames Collins if ($print === true) { 14119cff245bSJames Collins echo $html; 14129cff245bSJames Collins } 1413ab45ba71SJames Collins return $html; 1414ab45ba71SJames Collins } 1415ab45ba71SJames Collins 14161785fc73SJames Collins /** 14171785fc73SJames Collins * Get Page Title 14189cff245bSJames Collins * 14199cff245bSJames Collins * @return string page title 14201785fc73SJames Collins */ 142110b40067Snomadjimbob public function parsePageTitle() 142210b40067Snomadjimbob { 14232060e56cSJames Collins global $ID; 14242060e56cSJames Collins 14252060e56cSJames Collins $title = p_get_first_heading($ID); 14269cff245bSJames Collins if (strlen($title) <= 0) { 14279cff245bSJames Collins $title = tpl_pagetitle(null, true); 14289cff245bSJames Collins } 14291785fc73SJames Collins $title = $this->includeIcons($title); 14301785fc73SJames Collins 14311785fc73SJames Collins return $title; 14321785fc73SJames Collins } 14331785fc73SJames Collins 1434ab45ba71SJames Collins 143575adba86SJames Collins /** 1436a8eebd82SJames Collins * Print or return hero block 143775adba86SJames Collins * 14389cff245bSJames Collins * @param boolean $print Print content. 1439a8eebd82SJames Collins * @return string contents of hero 144075adba86SJames Collins */ 14419cff245bSJames Collins public function includeHero(bool $print = true) 144210b40067Snomadjimbob { 1443a8eebd82SJames Collins $html = ''; 144447161538SJames Collins 14459cff245bSJames Collins if ($this->getConf('heroTitle') === true) { 1446a8eebd82SJames Collins $html .= '<div class="mikio-hero">'; 1447f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 1448a8eebd82SJames Collins $html .= '<div class="mikio-hero-text">'; 14493a385f2cSJames Collins if (strcasecmp($this->getConf('youareherePosition'), 'hero') === 0) { 14509cff245bSJames Collins $html .= $this->includeYouAreHere(false); 14519cff245bSJames Collins } 14523a385f2cSJames Collins if (strcasecmp($this->getConf('breadcrumbPosition'), 'hero') === 0) { 14539cff245bSJames Collins $html .= $this->includeBreadcrumbs(false); 14549cff245bSJames Collins } 1455ab45ba71SJames Collins 1456a8eebd82SJames Collins $html .= '<h1 class="mikio-hero-title">'; 14571785fc73SJames Collins $html .= $this->parsePageTitle(); // No idea why this requires a blank space afterwards to work? 1458a8eebd82SJames Collins $html .= '</h1>'; 1459a8eebd82SJames Collins $html .= '<h2 class="mikio-hero-subtitle"></h2>'; 1460a8eebd82SJames Collins $html .= '</div>'; 146147161538SJames Collins 14629cff245bSJames Collins $hero_image = $this->getMediaFile('hero', true, $this->getConf('heroImagePropagation', true)); 1463a8eebd82SJames Collins $hero_image_resize_class = ''; 14643a385f2cSJames Collins if (empty($hero_image) === false) { 1465a8eebd82SJames Collins $hero_image = ' style="background-image:url(\'' . $hero_image . '\');"'; 1466a8eebd82SJames Collins $hero_image_resize_class = ' mikio-hero-image-resize'; 146747161538SJames Collins } 1468a8eebd82SJames Collins 14699cff245bSJames Collins $html .= '<div class="mikio-hero-image' . $hero_image_resize_class . '"' . $hero_image . 14709cff245bSJames Collins '><div class="mikio-tags"></div></div>'; 1471a8eebd82SJames Collins 1472a8eebd82SJames Collins $html .= '</div>'; 1473f8039bf2SJames Collins $html .= '</div>'; 14749cff245bSJames Collins }//end if 14759cff245bSJames Collins 14769cff245bSJames Collins if ($print === true) { 14779cff245bSJames Collins echo $html; 147875adba86SJames Collins } 1479a8eebd82SJames Collins 1480a8eebd82SJames Collins return $html; 148175adba86SJames Collins } 148275adba86SJames Collins 148375adba86SJames Collins 148475adba86SJames Collins /** 1485a8eebd82SJames Collins * Print or return out TOC 148675adba86SJames Collins * 14879cff245bSJames Collins * @param boolean $print Print TOC. 14889cff245bSJames Collins * @param boolean $parse Parse icons. 1489a8eebd82SJames Collins * @return string contents of TOC 149075adba86SJames Collins */ 14919cff245bSJames Collins public function includeTOC(bool $print = true, bool $parse = true) 149210b40067Snomadjimbob { 1493ab45ba71SJames Collins $html = ''; 14942b4583abSJames Collins 1495ab45ba71SJames Collins $tocHtml = tpl_toc(true); 1496ab45ba71SJames Collins 14973a385f2cSJames Collins if (empty($tocHtml) === false) { 1498f65a4e5eSJames Collins $tocHtml = preg_replace( 1499f65a4e5eSJames Collins '/(<h3.+?toggle.+?>)(.+?)<\/h3>/', 1500f65a4e5eSJames Collins '$1' . 1501f65a4e5eSJames Collins $this->mikioInlineIcon('hamburger', 'hamburger') . '$2' . 1502f65a4e5eSJames Collins $this->mikioInlineIcon('down-arrow', 'down-arrow') . '</h3>', 1503f65a4e5eSJames Collins $tocHtml 1504f65a4e5eSJames Collins ); 1505ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 1506a8eebd82SJames Collins $tocHtml = preg_replace('/<ul.*>\s*<\/ul>\s*/', '', $tocHtml); 1507ab45ba71SJames Collins 1508ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 1509ab45ba71SJames Collins $html .= $tocHtml; 1510ab45ba71SJames Collins $html .= '</div>'; 15112b4583abSJames Collins } 15122b4583abSJames Collins 15139cff245bSJames Collins if ($parse === true) { 15149cff245bSJames Collins $html = $this->includeIcons($html); 15159cff245bSJames Collins } 15169cff245bSJames Collins 15179cff245bSJames Collins if ($print === true) { 1518ab45ba71SJames Collins echo $html; 1519ab45ba71SJames Collins } 1520ab45ba71SJames Collins 15219cff245bSJames Collins return $html; 15229cff245bSJames Collins } 15239cff245bSJames Collins 1524ab45ba71SJames Collins 1525a8eebd82SJames Collins /** 1526ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 1527ab45ba71SJames Collins * 15289cff245bSJames Collins * @param string $str Content to parse. 1529ab45ba71SJames Collins * @return string parsed string 1530ab45ba71SJames Collins */ 15319cff245bSJames Collins public function includeIcons(string $str) 153210b40067Snomadjimbob { 1533ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 1534ab45ba71SJames Collins 1535ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 15363a385f2cSJames Collins if (empty($iconTag) === true) { 15379cff245bSJames Collins return $str; 15389cff245bSJames Collins } 1539ab45ba71SJames Collins 15409cff245bSJames Collins if ( 15419cff245bSJames Collins in_array($ACT, ['show', 'showtag', 'revisions', 'index', 'preview']) === true || 15423a385f2cSJames Collins strcasecmp($ACT, 'admin') === 0 && count($MIKIO_ICONS) > 0 15439cff245bSJames Collins ) { 1544a2005a27SJames Collins $content = $str; 1545a2005a27SJames Collins $preview = null; 1546a2005a27SJames Collins 15473a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15489cff245bSJames Collins $html = new \simple_html_dom(); 1549a2005a27SJames Collins $html->stripRNAttrValues = false; 1550a2005a27SJames Collins $html->load($str, true, false); 1551a2005a27SJames Collins 1552a2005a27SJames Collins $preview = $html->find('div.preview'); 15539cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1554a2005a27SJames Collins $content = $preview[0]->innertext; 1555a2005a27SJames Collins } 1556a2005a27SJames Collins } 1557a2005a27SJames Collins 15581785fc73SJames Collins $page_regex = '/(.*)/'; 15599cff245bSJames Collins if (stripos($str, '<pre') !== false) { 15601785fc73SJames Collins $page_regex = '/<(?!pre|\/).*?>(.*)[^<]*/'; 15611785fc73SJames Collins } 15621785fc73SJames Collins 15631785fc73SJames Collins $content = preg_replace_callback($page_regex, function ($icons) { 1564a2005a27SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 1565a2005a27SJames Collins 156610b40067Snomadjimbob return preg_replace_callback( 156710b40067Snomadjimbob '/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 1568ab45ba71SJames Collins function ($matches) { 1569ab45ba71SJames Collins global $MIKIO_ICONS; 1570ab45ba71SJames Collins 1571ab45ba71SJames Collins $s = $matches[0]; 1572ab45ba71SJames Collins 1573ab45ba71SJames Collins if (count($MIKIO_ICONS) > 0) { 1574ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 1575ab45ba71SJames Collins 1576ab45ba71SJames Collins if (count($matches) > 1) { 1577ab45ba71SJames Collins $e = explode(' ', $matches[1]); 1578ab45ba71SJames Collins 1579ab45ba71SJames Collins if (count($e) > 1) { 1580ab45ba71SJames Collins foreach ($MIKIO_ICONS as $iconItem) { 15819cff245bSJames Collins if (strcasecmp($iconItem['name'], $e[0]) === 0) { 1582ab45ba71SJames Collins $icon = $iconItem; 1583ab45ba71SJames Collins 1584ab45ba71SJames Collins $s = $icon['insert']; 1585ab45ba71SJames Collins for ($i = 1; $i < 9; $i++) { 15861cdedf28SJames Collins if (count($e) < $i || empty($e[$i]) === true) { 15879cff245bSJames Collins if (isset($icon['$' . $i]) === true) { 1588ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$' . $i], $s); 1589ab45ba71SJames Collins } 1590ab45ba71SJames Collins } else { 1591ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 1592ab45ba71SJames Collins } 1593ab45ba71SJames Collins } 1594ab45ba71SJames Collins 1595ab45ba71SJames Collins $dir = ''; 15969cff245bSJames Collins if (isset($icon['dir']) === true) { 15979cff245bSJames Collins $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 15989cff245bSJames Collins } 1599ab45ba71SJames Collins 1600ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 1601ab45ba71SJames Collins 1602ab45ba71SJames Collins break; 16039cff245bSJames Collins }//end if 16049cff245bSJames Collins }//end foreach 1605ab45ba71SJames Collins } else { 1606ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 16079cff245bSJames Collins }//end if 16089cff245bSJames Collins }//end if 16099cff245bSJames Collins }//end if 161075adba86SJames Collins 1611ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 16129cff245bSJames Collins if ($count === 0) { 1613ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 1614ab45ba71SJames Collins } 1615ab45ba71SJames Collins 1616ab45ba71SJames Collins return $s; 1617ab45ba71SJames Collins }, 161810b40067Snomadjimbob $icons[0] 161910b40067Snomadjimbob ); 1620a2005a27SJames Collins }, $content); 1621a2005a27SJames Collins 16223a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 16239cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1624a2005a27SJames Collins $preview[0]->innertext = $content; 1625a2005a27SJames Collins } 1626a2005a27SJames Collins 1627a2005a27SJames Collins $str = $html->save(); 1628a2005a27SJames Collins $html->clear(); 1629a2005a27SJames Collins unset($html); 1630a2005a27SJames Collins } else { 1631a2005a27SJames Collins $str = $content; 1632a2005a27SJames Collins } 16339cff245bSJames Collins }//end if 1634ab45ba71SJames Collins 1635ab45ba71SJames Collins return $str; 1636ab45ba71SJames Collins } 163747161538SJames Collins 1638c165b184SJames Collins /** 1639a8eebd82SJames Collins * Parse HTML for theme 1640c165b184SJames Collins * 16419cff245bSJames Collins * @param string $content HTML content to parse. 1642a8eebd82SJames Collins * @return string Parsed content 1643c165b184SJames Collins */ 16449cff245bSJames Collins public function parseContent(string $content) 164510b40067Snomadjimbob { 1646ab45ba71SJames Collins global $INPUT, $ACT; 1647ab45ba71SJames Collins 1648a8eebd82SJames Collins // Add Mikio Section titles 16493a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 16509cff245bSJames Collins $admin_sections = [ 1651ab45ba71SJames Collins // Section Insert Before Icon 16529cff245bSJames Collins 'navbar' => ['navbarUseTitleIcon', ''], 16539cff245bSJames Collins 'search' => ['searchButton', ''], 16549cff245bSJames Collins 'hero' => ['heroTitle', ''], 16559cff245bSJames Collins 'tags' => ['tagsConsolidate', ''], 16569cff245bSJames Collins 'breadcrumb' => ['breadcrumbHideHome', ''], 16579cff245bSJames Collins 'youarehere' => ['youarehereHideHome', ''], 16589cff245bSJames Collins 'sidebar' => ['sidebarShowLeft', ''], 16599cff245bSJames Collins 'toc' => ['tocFull', ''], 16609cff245bSJames Collins 'pagetools' => ['pageToolsFloating', ''], 16619cff245bSJames Collins 'footer' => ['footerCustomMenuText', ''], 16629cff245bSJames Collins 'license' => ['licenseType', ''], 16639cff245bSJames Collins 'acl' => ['includePageUseACL', ''], 16649cff245bSJames Collins 'sticky' => ['stickyTopHeader', ''], 16659cff245bSJames Collins ]; 1666ab45ba71SJames Collins 1667ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 1668ab45ba71SJames Collins $search = $items[0]; 1669ab45ba71SJames Collins $icon = $items[1]; 1670ab45ba71SJames Collins 167110b40067Snomadjimbob $content = preg_replace( 1672adf52ebbSJames Collins '/<tr(.*)>\s*<td class="label">\s*<span class="outkey">(tpl»mikio»' . $search . ')<\/span>/', 16739cff245bSJames Collins '<tr$1><td class="mikio-config-table-header" colspan="2">' . $this->mikioInlineIcon($icon) . 16749cff245bSJames Collins tpl_getLang('config_' . $section) . 16759cff245bSJames Collins '</td></tr><tr class="default"><td class="label"><span class="outkey">tpl»mikio»' . 16769cff245bSJames Collins $search . '</span>', 167710b40067Snomadjimbob $content 167810b40067Snomadjimbob ); 1679ab45ba71SJames Collins } 1680bb5a3dd1SJames Collins } elseif (strcasecmp($INPUT->str('page'), 'styling') === 0) { 1681ad182e6dSnomadjimbob $mikioPluginMissing = true; 1682ad182e6dSnomadjimbob /* Hide plugin fields if not installed */ 16839ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 1684ad182e6dSnomadjimbob $mikioPluginMissing = false; 1685ad182e6dSnomadjimbob } 1686ad182e6dSnomadjimbob 1687cee81679SJames Collins $style_headers = [ 1688f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__text_'], 1689f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__code_'], 1690f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__control_'], 1691f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__topheader_'], 1692f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__navbar_'], 1693f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__subnavbar_'], 1694f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__tag_background_color_'], 1695f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__breadcrumb_'], 1696f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__hero_'], 1697f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__sidebar_'], 1698f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__content_'], 1699f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__toc_'], 1700f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__pagetools_'], 1701f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__footer_'], 1702f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__table_'], 1703f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__dropdown_'], 1704f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__section_edit_'], 1705f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__tree_'], 1706f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__tab_'], 1707ad182e6dSnomadjimbob ['title' => 'Mikio Plugin', 'starts_with' => '__plugin_', 'heading' => 'h2', 17089ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17099ffe9161Snomadjimbob ], 1710ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_primary_', 'hidden' => $mikioPluginMissing], 1711ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_secondary_', 17129ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17139ffe9161Snomadjimbob ], 1714ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_success_', 'hidden' => $mikioPluginMissing], 1715ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_danger_', 'hidden' => $mikioPluginMissing], 1716ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_warning_', 'hidden' => $mikioPluginMissing], 1717ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_info_', 'hidden' => $mikioPluginMissing], 1718ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_light_', 'hidden' => $mikioPluginMissing], 1719ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_dark_', 'hidden' => $mikioPluginMissing], 1720ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_link_', 'hidden' => $mikioPluginMissing], 1721ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_carousel_', 'hidden' => $mikioPluginMissing], 1722ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_steps_', 'hidden' => $mikioPluginMissing], 1723ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_tabgroup_', 'hidden' => $mikioPluginMissing], 1724ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_tooltip_', 'hidden' => $mikioPluginMissing], 1725cee81679SJames Collins ['title' => 'Dark Mode', 'starts_with' => '__darkmode_', 'heading' => 'h2'], 1726f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__darkmode_text_'], 1727f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__darkmode_code_'], 1728f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__darkmode_control_'], 1729f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__darkmode_topheader_'], 1730f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__darkmode_navbar_'], 1731f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__darkmode_subnavbar_'], 1732f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__darkmode_tag_background_color_'], 1733f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__darkmode_breadcrumb_'], 1734f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__darkmode_hero_'], 1735f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__darkmode_sidebar_'], 1736f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__darkmode_content_'], 1737f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__darkmode_toc_'], 1738f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__darkmode_pagetools_'], 1739f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__darkmode_footer_'], 1740f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__darkmode_table_'], 1741f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__darkmode_dropdown_'], 1742f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__darkmode_section_edit_'], 1743f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__darkmode_tree_'], 1744f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__darkmode_tab_'], 1745ad182e6dSnomadjimbob ['title' => 'Mikio Plugin (Dark mode)', 'starts_with' => '__plugin_darkmode_', 'heading' => 'h2', 17469ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17479ffe9161Snomadjimbob ], 1748ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_darkmode_primary_', 17499ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17509ffe9161Snomadjimbob ], 1751ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_darkmode_secondary_', 17529ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17539ffe9161Snomadjimbob ], 1754ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_darkmode_success_', 17559ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17569ffe9161Snomadjimbob ], 1757ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_darkmode_danger_', 17589ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17599ffe9161Snomadjimbob ], 1760ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_darkmode_warning_', 17619ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17629ffe9161Snomadjimbob ], 1763ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_darkmode_info_', 17649ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17659ffe9161Snomadjimbob ], 1766ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_darkmode_light_', 17679ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17689ffe9161Snomadjimbob ], 1769ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_darkmode_dark_', 17709ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17719ffe9161Snomadjimbob ], 1772ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_darkmode_link_', 17739ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17749ffe9161Snomadjimbob ], 1775ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_darkmode_carousel_', 17769ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17779ffe9161Snomadjimbob ], 1778ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_darkmode_steps_', 'hidden' => $mikioPluginMissing], 1779ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_darkmode_tabgroup_', 17809ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17819ffe9161Snomadjimbob ], 1782ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_darkmode_tooltip_', 'hidden' => $mikioPluginMissing], 1783cee81679SJames Collins ]; 1784cee81679SJames Collins 1785cee81679SJames Collins foreach ($style_headers as $header) { 1786cee81679SJames Collins if (array_key_exists('heading', $header) === false) { 1787cee81679SJames Collins $header['heading'] = 'h3'; 1788cee81679SJames Collins } 1789cee81679SJames Collins 1790ad182e6dSnomadjimbob if (array_key_exists('hidden', $header) === false) { 1791ad182e6dSnomadjimbob $header['hidden'] = false; 1792ad182e6dSnomadjimbob } 1793ad182e6dSnomadjimbob 17941244e3ceSJames Collins $content = preg_replace( 1795f65a4e5eSJames Collins '/(<tr>\s*<td>\s*<label for="tpl__' . $header['starts_with'] . '.+?<\/tr>)/s', 17969ffe9161Snomadjimbob '</tbody></table><' . $header['heading'] . ' style="display:' . 17979ffe9161Snomadjimbob ($header['hidden'] === true ? 'none' : 'block') . '">' . 17989ffe9161Snomadjimbob $header['title'] . '</' . $header['heading'] . '> 1799ad182e6dSnomadjimbob <table style="display:' . ($header['hidden'] === true ? 'none' : 'table') . '"><tbody>$1', 18001244e3ceSJames Collins $content, 18011244e3ceSJames Collins 1 18021244e3ceSJames Collins ); 1803cee81679SJames Collins } 1804f65a4e5eSJames Collins 1805f65a4e5eSJames Collins $content = preg_replace('/type="color"/', 'type="text"', $content); 1806bb5a3dd1SJames Collins }//end if 1807ab45ba71SJames Collins 18083a385f2cSJames Collins if (strcasecmp($ACT, 'admin') === 0 && isset($_GET['page']) === false) { 1809a8eebd82SJames Collins $content = preg_replace('/(<ul.*?>.*?)<\/ul>.*?<ul.*?>(.*?<\/ul>)/s', '$1$2', $content); 1810a8eebd82SJames Collins } 1811ab45ba71SJames Collins 1812a8eebd82SJames Collins // Page Revisions - Table Fix 18139cff245bSJames Collins if (strpos($content, 'id="page__revisions"') !== false) { 18149cff245bSJames Collins $content = preg_replace( 18159cff245bSJames Collins '/(<span class="sum">\s.*<\/span>\s.*<span class="user">\s.*<\/span>)/', 18169cff245bSJames Collins '<span>$1</span>', 18179cff245bSJames Collins $content 18189cff245bSJames Collins ); 1819a8eebd82SJames Collins } 1820ab45ba71SJames Collins 18219cff245bSJames Collins $html = new \simple_html_dom(); 1822bc1032d9SJames Collins $html->stripRNAttrValues = false; 1823c165b184SJames Collins $html->load($content, true, false); 1824c165b184SJames Collins 18259cff245bSJames Collins if ($html === false) { 18269cff245bSJames Collins return $content; 18279cff245bSJames Collins } 1828ab45ba71SJames Collins 1829ab45ba71SJames Collins /* Buttons */ 1830ab45ba71SJames Collins foreach ($html->find('#config__manager button') as $node) { 1831ab45ba71SJames Collins $c = explode(' ', $node->class); 18329cff245bSJames Collins if (in_array('mikio-button', $c) === false) { 18339cff245bSJames Collins $c[] = 'mikio-button'; 18349cff245bSJames Collins } 1835ab45ba71SJames Collins $node->class = implode(' ', $c); 1836c165b184SJames Collins } 1837c165b184SJames Collins 1838ab45ba71SJames Collins 1839ab45ba71SJames Collins /* Buttons - Primary */ 1840ab45ba71SJames Collins foreach ($html->find('#config__manager [type=submit]') as $node) { 1841ab45ba71SJames Collins $c = explode(' ', $node->class); 18429cff245bSJames Collins if (in_array('mikio-primary', $c) === false) { 18439cff245bSJames Collins $c[] = 'mikio-primary'; 18449cff245bSJames Collins } 1845ab45ba71SJames Collins $node->class = implode(' ', $c); 1846ab45ba71SJames Collins } 1847ab45ba71SJames Collins 1848a8eebd82SJames Collins /* Hide page title if hero is enabled */ 18499cff245bSJames Collins if ($this->getConf('heroTitle') === true && $ACT !== 'preview') { 18501785fc73SJames Collins $pageTitle = $this->parsePageTitle(); 185147161538SJames Collins 185247161538SJames Collins foreach ($html->find('h1,h2,h3,h4') as $elm) { 18539cff245bSJames Collins if ($elm->innertext === $pageTitle) { 1854a8eebd82SJames Collins // $elm->innertext = ''; 1855a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1856a8eebd82SJames Collins 185747161538SJames Collins break; 185847161538SJames Collins } 185947161538SJames Collins } 186047161538SJames Collins } 1861c165b184SJames Collins 1862a8eebd82SJames Collins /* Hero subtitle */ 18632b4583abSJames Collins foreach ($html->find('p') as $elm) { 1864d0d6c450SJames Collins if (preg_match('/[~-]~hero-subtitle (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1865d0d6c450SJames Collins $subtitle = $matches[1]; 1866a8eebd82SJames Collins $this->footerScript['hero-subtitle'] = 'mikio.setHeroSubTitle(\'' . $subtitle . '\')'; 1867a8eebd82SJames Collins 1868d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-subtitle (.+?)~[~-]/ui', '', $elm->innertext); 18692b4583abSJames Collins break; 18702b4583abSJames Collins } 18712b4583abSJames Collins } 18722b4583abSJames Collins 1873a8eebd82SJames Collins /* Hero image */ 1874a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1875a8eebd82SJames Collins $image = ''; 1876d0d6c450SJames Collins preg_match('/[~-]~hero-image (.+?)~[~-](?!.?")/ui', $elm->innertext, $matches); 1877a8eebd82SJames Collins if (count($matches) > 0) { 1878a8eebd82SJames Collins preg_match('/<img.*src="(.+?)"/ui', $matches[1], $imageTagMatches); 1879a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1880a8eebd82SJames Collins $image = $imageTagMatches[1]; 1881a8eebd82SJames Collins } else { 1882a8eebd82SJames Collins preg_match('/<a.+?>(.+?)[~<]/ui', $matches[1], $imageTagMatches); 1883a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1884a8eebd82SJames Collins $image = $imageTagMatches[1]; 1885a8eebd82SJames Collins } else { 1886a8eebd82SJames Collins $image = strip_tags($matches[1]); 18879cff245bSJames Collins if (stripos($image, ':') === false) { 18889cff245bSJames Collins $image = str_replace(['{', '}'], '', $image); 1889a8eebd82SJames Collins $i = stripos($image, '?'); 18909cff245bSJames Collins if ($i !== false) { 1891a8eebd82SJames Collins $image = substr($image, 0, $i); 1892c165b184SJames Collins } 1893c165b184SJames Collins 1894a8eebd82SJames Collins $image = ml($image, '', true, '', false); 1895ab45ba71SJames Collins } 1896ab45ba71SJames Collins } 1897ab45ba71SJames Collins } 1898ab45ba71SJames Collins 1899a8eebd82SJames Collins $this->footerScript['hero-image'] = 'mikio.setHeroImage(\'' . $image . '\')'; 1900a8eebd82SJames Collins 1901d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-image (.+?)~[~-].*/ui', '', $elm->innertext); 19029cff245bSJames Collins }//end if 19039cff245bSJames Collins }//end foreach 1904ab45ba71SJames Collins 19059cff245bSJames Collins /* Hero colors - ~~hero-colors [background-color] [hero-title-color] [hero-subtitle-color] 19069cff245bSJames Collins [breadcrumb-text-color] [breadcrumb-hover-color] (use 'initial' for original color) */ 1907a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1908d0d6c450SJames Collins if (preg_match('/[~-]~hero-colors (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1909d0d6c450SJames Collins $subtitle = $matches[1]; 1910d0d6c450SJames Collins $this->footerScript['hero-colors'] = 'mikio.setHeroColor(\'' . $subtitle . '\')'; 1911ab45ba71SJames Collins 1912d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-colors (.+?)~[~-]/ui', '', $elm->innertext); 1913a8eebd82SJames Collins break; 1914ab45ba71SJames Collins } 1915ab45ba71SJames Collins } 1916ab45ba71SJames Collins 191796ec8e1eSJames Collins /* Hide parts - ~~hide-parts [parts]~~ */ 191896ec8e1eSJames Collins foreach ($html->find('p') as $elm) { 1919*3a44a74aSJames Collins if (preg_match('/[~-]~hide-parts (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1920d0d6c450SJames Collins $parts = explode(' ', $matches[1]); 192196ec8e1eSJames Collins $script = ''; 192296ec8e1eSJames Collins 192396ec8e1eSJames Collins foreach ($parts as $part) { 192496ec8e1eSJames Collins if (strlen($part) > 0) { 192596ec8e1eSJames Collins $script .= 'mikio.hidePart(\'' . $part . '\');'; 192696ec8e1eSJames Collins } 192796ec8e1eSJames Collins } 192896ec8e1eSJames Collins 192996ec8e1eSJames Collins if (strlen($script) > 0) { 193096ec8e1eSJames Collins $this->footerScript['hide-parts'] = $script; 193196ec8e1eSJames Collins } 193296ec8e1eSJames Collins 1933*3a44a74aSJames Collins $elm->innertext = preg_replace('/[~-]~hide-parts (.+?)~[~-]/ui', '', $elm->innertext); 193496ec8e1eSJames Collins break; 1935d0d6c450SJames Collins } 19369cff245bSJames Collins }//end foreach 193796ec8e1eSJames Collins 193896ec8e1eSJames Collins 1939a8eebd82SJames Collins /* Page Tags (tag plugin) */ 19409cff245bSJames Collins if ($this->getConf('tagsConsolidate') === true) { 1941a8eebd82SJames Collins $tags = ''; 1942a8eebd82SJames Collins foreach ($html->find('div.tags a') as $elm) { 1943a8eebd82SJames Collins $tags .= $elm->outertext; 1944a8eebd82SJames Collins } 1945a8eebd82SJames Collins 1946a8eebd82SJames Collins foreach ($html->find('div.tags') as $elm) { 1947a8eebd82SJames Collins $elm->innertext = ''; 1948a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1949a8eebd82SJames Collins } 1950a8eebd82SJames Collins 19513a385f2cSJames Collins if (empty($tags) === false) { 1952a8eebd82SJames Collins $this->footerScript['tags'] = 'mikio.setTags(\'' . $tags . '\')'; 1953a8eebd82SJames Collins } 1954ab45ba71SJames Collins } 1955ab45ba71SJames Collins 1956ab45ba71SJames Collins // Configuration Manager 19573a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 1958ab45ba71SJames Collins // Additional save buttons 1959ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1960ab45ba71SJames Collins $saveButtons = ''; 1961ab45ba71SJames Collins 1962ab45ba71SJames Collins foreach ($cm->find('p') as $elm) { 1963ab45ba71SJames Collins $saveButtons = $elm->outertext; 1964a8eebd82SJames Collins $saveButtons = str_replace('<p>', '<p style="text-align:right">', $saveButtons); 1965ab45ba71SJames Collins $elm->outertext = ''; 1966ab45ba71SJames Collins } 1967ab45ba71SJames Collins 1968ab45ba71SJames Collins foreach ($cm->find('fieldset') as $elm) { 1969ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1970ab45ba71SJames Collins } 1971ab45ba71SJames Collins } 1972ab45ba71SJames Collins } 1973ab45ba71SJames Collins 1974ab45ba71SJames Collins $content = $html->save(); 1975c165b184SJames Collins $html->clear(); 1976c165b184SJames Collins unset($html); 1977c165b184SJames Collins 1978c165b184SJames Collins return $content; 1979c165b184SJames Collins } 19802b4583abSJames Collins 19812b4583abSJames Collins 1982a8eebd82SJames Collins /** 1983a8eebd82SJames Collins * Get DokuWiki namespace/page/URI as link 1984a8eebd82SJames Collins * 19859cff245bSJames Collins * @param string $str String to parse. 19869cff245bSJames Collins * @return string parsed URI 1987a8eebd82SJames Collins */ 19889cff245bSJames Collins public function getLink(string $str) 198910b40067Snomadjimbob { 19902b4583abSJames Collins $i = strpos($str, '://'); 19919cff245bSJames Collins if ($i !== false) { 19929cff245bSJames Collins return $str; 19939cff245bSJames Collins } 19942b4583abSJames Collins 19952b4583abSJames Collins return wl($str); 19962b4583abSJames Collins } 1997ab45ba71SJames Collins 1998ab45ba71SJames Collins 1999a8eebd82SJames Collins /** 2000a8eebd82SJames Collins * Check if the user can edit current namespace/page 2001a8eebd82SJames Collins * 2002a8eebd82SJames Collins * @return boolean user can edit 2003a8eebd82SJames Collins */ 200410b40067Snomadjimbob public function userCanEdit() 200510b40067Snomadjimbob { 2006ab45ba71SJames Collins global $INFO; 2007ab45ba71SJames Collins global $ID; 2008ab45ba71SJames Collins 2009ab45ba71SJames Collins $wiki_file = wikiFN($ID); 20109cff245bSJames Collins if (@file_exists($wiki_file) === false) { 20119cff245bSJames Collins return true; 20129cff245bSJames Collins } 20139cff245bSJames Collins if ($INFO['isadmin'] === true || $INFO['ismanager'] === true) { 20149cff245bSJames Collins return true; 20159cff245bSJames Collins } 2016a8eebd82SJames Collins // $meta_file = metaFN($ID, '.meta'); 20179cff245bSJames Collins if ($INFO['meta']['user'] === false) { 20189cff245bSJames Collins return true; 20199cff245bSJames Collins } 20209cff245bSJames Collins if ($INFO['client'] === $INFO['meta']['user']) { 20219cff245bSJames Collins return true; 20229cff245bSJames Collins } 2023ab45ba71SJames Collins 2024ab45ba71SJames Collins return false; 2025c165b184SJames Collins } 202647161538SJames Collins 202747161538SJames Collins 2028a8eebd82SJames Collins /** 2029a8eebd82SJames Collins * Search for and return the uri of a media file 2030a8eebd82SJames Collins * 20319cff245bSJames Collins * @param string $image Image name to search for (without extension). 20329cff245bSJames Collins * @param boolean $searchCurrentNS Search the current namespace. 20339cff245bSJames Collins * @param boolean $propagate Propagate search through the namespace. 20349cff245bSJames Collins * @return string URI of the found media file 2035a8eebd82SJames Collins */ 20369cff245bSJames Collins public function getMediaFile(string $image, bool $searchCurrentNS = true, bool $propagate = true) 203710b40067Snomadjimbob { 2038ab45ba71SJames Collins global $INFO; 2039a8eebd82SJames Collins 20409cff245bSJames Collins $ext = ['png', 'jpg', 'gif', 'svg']; 2041ab45ba71SJames Collins 20429cff245bSJames Collins if ($searchCurrentNS === true) { 20439cff245bSJames Collins $prefix[] = ':' . $INFO['namespace'] . ':'; 20449cff245bSJames Collins } 20459cff245bSJames Collins if ($propagate === true) { 2046ab45ba71SJames Collins $prefix[] = ':'; 2047ab45ba71SJames Collins $prefix[] = ':wiki:'; 2048a8eebd82SJames Collins } 2049ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 20503a385f2cSJames Collins if (empty($theme) === false) { 20519cff245bSJames Collins $prefix[] = 'themes/' . $theme . '/images/'; 20529cff245bSJames Collins } 2053ab45ba71SJames Collins $prefix[] = 'images/'; 2054ab45ba71SJames Collins 20559cff245bSJames Collins $search = []; 2056ab45ba71SJames Collins foreach ($prefix as $pitem) { 2057ab45ba71SJames Collins foreach ($ext as $eitem) { 2058ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 2059ab45ba71SJames Collins } 2060ab45ba71SJames Collins } 2061ab45ba71SJames Collins 2062ab45ba71SJames Collins $img = ''; 2063ab45ba71SJames Collins $file = ''; 2064ab45ba71SJames Collins $url = ''; 2065ab45ba71SJames Collins $ismedia = false; 2066ab45ba71SJames Collins $found = false; 2067ab45ba71SJames Collins 2068ab45ba71SJames Collins foreach ($search as $img) { 20693a385f2cSJames Collins if (strcasecmp(substr($img, 0, 1), ':') === 0) { 2070ab45ba71SJames Collins $file = mediaFN($img); 2071ab45ba71SJames Collins $ismedia = true; 2072ab45ba71SJames Collins } else { 2073ab45ba71SJames Collins $file = tpl_incdir() . $img; 2074ab45ba71SJames Collins $ismedia = false; 2075ab45ba71SJames Collins } 2076ab45ba71SJames Collins 20779cff245bSJames Collins if (file_exists($file) === true) { 2078ab45ba71SJames Collins $found = true; 2079ab45ba71SJames Collins break; 2080ab45ba71SJames Collins } 2081ab45ba71SJames Collins } 2082ab45ba71SJames Collins 20839cff245bSJames Collins if ($found === false) { 20849cff245bSJames Collins return false; 20859cff245bSJames Collins } 2086ab45ba71SJames Collins 20879cff245bSJames Collins if ($ismedia === true) { 2088ab45ba71SJames Collins $url = ml($img, '', true, '', false); 2089ab45ba71SJames Collins } else { 2090ab45ba71SJames Collins $url = tpl_basedir() . $img; 2091ab45ba71SJames Collins } 2092ab45ba71SJames Collins 2093ab45ba71SJames Collins return $url; 2094ab45ba71SJames Collins } 2095ab45ba71SJames Collins 2096a8eebd82SJames Collins 2097a8eebd82SJames Collins /** 2098ab45ba71SJames Collins * Print or return the page title 2099ab45ba71SJames Collins * 21009cff245bSJames Collins * @param string $page Page id or empty string for current page. 2101ab45ba71SJames Collins * @return string generated content 2102ab45ba71SJames Collins */ 21039cff245bSJames Collins public function getPageTitle(string $page = '') 210410b40067Snomadjimbob { 2105ab45ba71SJames Collins global $ID, $conf; 2106ab45ba71SJames Collins 2107ab45ba71SJames Collins $html = ''; 2108ab45ba71SJames Collins 21093a385f2cSJames Collins if (empty($page) === true) { 21109cff245bSJames Collins $page = $ID; 21119cff245bSJames Collins } 2112ab45ba71SJames Collins 2113ab45ba71SJames Collins $html = p_get_first_heading($page); 2114ab45ba71SJames Collins $html = strip_tags($html); 2115ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 2116ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 2117ab45ba71SJames Collins $html = trim($html); 2118ab45ba71SJames Collins 2119ab45ba71SJames Collins return $html; 2120ab45ba71SJames Collins } 2121a8eebd82SJames Collins 2122a8eebd82SJames Collins 2123a8eebd82SJames Collins /** 2124a8eebd82SJames Collins * Return inline theme icon 2125a8eebd82SJames Collins * 21269cff245bSJames Collins * @param string $type Icon to retreive. 21279e41d878SJames Collins * @param string $class Classname to insert. 21289cff245bSJames Collins * @return string HTML icon content 2129a8eebd82SJames Collins */ 21309e41d878SJames Collins public function mikioInlineIcon(string $type, string $class = "") 213110b40067Snomadjimbob { 21329e41d878SJames Collins if (is_array($class) === true) { 21339e41d878SJames Collins $class = explode(' ', $class); 21349e41d878SJames Collins } 21359e41d878SJames Collins 21369e41d878SJames Collins if (strlen($class) > 0) { 21379e41d878SJames Collins $class = ' ' . $class; 21389e41d878SJames Collins } 21399e41d878SJames Collins 2140a8eebd82SJames Collins switch ($type) { 2141a8eebd82SJames Collins case 'wrench': 2142906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 -256 1792 2143906e1a13SJames Collins1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,53.152542,1217.0847)"><path d="m 384,64 q 0,26 -19,45 -19, 2144906e1a13SJames Collins19 -45,19 -26,0 -45,-19 -19,-19 -19,-45 0,-26 19,-45 19,-19 45,-19 26,0 45,19 19,19 19,45 z m 644,420 -682,-682 q -37, 2145906e1a13SJames Collins-37 -90,-37 -52,0 -91,37 L 59,-90 Q 21,-54 21,0 21,53 59,91 L 740,772 Q 779,674 854.5,598.5 930,523 1028,484 z m 634, 2146906e1a13SJames Collins435 q 0,-39 -23,-106 Q 1592,679 1474.5,595.5 1357,512 1216,512 1031,512 899.5,643.5 768,775 768,960 q 0,185 131.5,316.5 2147906e1a13SJames Collins131.5,131.5 316.5,131.5 58,0 121.5,-16.5 63.5,-16.5 107.5,-46.5 16,-11 16,-28 0,-17 -16,-28 L 1152,1120 V 896 l 193, 2148906e1a13SJames Collins-107 q 5,3 79,48.5 74,45.5 135.5,81 61.5,35.5 70.5,35.5 15,0 23.5,-10 8.5,-10 8.5,-25 z"/></g></svg>'; 2149a8eebd82SJames Collins case 'file': 2150906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2151906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,235.38983,1277.8305)" id="g2991"> 2152906e1a13SJames Collins<path d="M 128,0 H 1152 V 768 H 736 q -40,0 -68,28 -28,28 -28,68 v 416 H 128 V 0 z m 640,896 h 299 L 768,1195 V 896 z M 2153906e1a13SJames Collins1280,768 V -32 q 0,-40 -28,-68 -28,-28 -68,-28 H 96 q -40,0 -68,28 -28,28 -28,68 v 1344 q 0,40 28,68 28,28 68,28 h 544 2154906e1a13SJames Collinsq 40,0 88,-20 48,-20 76,-48 l 408,-408 q 28,-28 48,-76 20,-48 20,-88 z" id="path2993" inkscape:connector-curvature="0" 21559cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 2156a8eebd82SJames Collins case 'gear': 2157906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2158906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,121.49153,1285.4237)" id="g3027"> 2159906e1a13SJames Collins<path d="m 1024,640 q 0,106 -75,181 -75,75 -181,75 -106,0 -181,-75 -75,-75 -75,-181 0,-106 75,-181 75,-75 181,-75 106,0 2160906e1a13SJames Collins181,75 75,75 75,181 z m 512,109 V 527 q 0,-12 -8,-23 -8,-11 -20,-13 l -185,-28 q -19,-54 -39,-91 35,-50 107,-138 10,-12 2161906e1a13SJames Collins10,-25 0,-13 -9,-23 -27,-37 -99,-108 -72,-71 -94,-71 -12,0 -26,9 l -138,108 q -44,-23 -91,-38 -16,-136 -29,-186 -7,-28 2162906e1a13SJames Collins-36,-28 H 657 q -14,0 -24.5,8.5 Q 622,-111 621,-98 L 593,86 q -49,16 -90,37 L 362,16 Q 352,7 337,7 323,7 312,18 186,132 2163906e1a13SJames Collins147,186 q -7,10 -7,23 0,12 8,23 15,21 51,66.5 36,45.5 54,70.5 -27,50 -41,99 L 29,495 Q 16,497 8,507.5 0,518 0,531 v 222 2164906e1a13SJames Collinsq 0,12 8,23 8,11 19,13 l 186,28 q 14,46 39,92 -40,57 -107,138 -10,12 -10,24 0,10 9,23 26,36 98.5,107.5 72.5,71.5 94.5, 2165906e1a13SJames Collins71.5 13,0 26,-10 l 138,-107 q 44,23 91,38 16,136 29,186 7,28 36,28 h 222 q 14,0 24.5,-8.5 Q 914,1391 915,1378 l 28,-184 2166906e1a13SJames Collinsq 49,-16 90,-37 l 142,107 q 9,9 24,9 13,0 25,-10 129,-119 165,-170 7,-8 7,-22 0,-12 -8,-23 -15,-21 -51,-66.5 -36,-45.5 2167906e1a13SJames Collins-54,-70.5 26,-50 41,-98 l 183,-28 q 13,-2 21,-12.5 8,-10.5 8,-23.5 z" id="path3029" inkscape:connector-curvature="0" /> 2168906e1a13SJames Collins</g></svg>'; 2169a8eebd82SJames Collins case 'user': 2170906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2171906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,197.42373,1300.6102)"><path d="M 2172906e1a13SJames Collins1408,131 Q 1408,11 1335,-58.5 1262,-128 1141,-128 H 267 Q 146,-128 73,-58.5 0,11 0,131 0,184 3.5,234.5 7,285 17.5,343.5 2173906e1a13SJames Collins28,402 44,452 q 16,50 43,97.5 27,47.5 62,81 35,33.5 85.5,53.5 50.5,20 111.5,20 9,0 42,-21.5 33,-21.5 74.5,-48 41.5, 2174906e1a13SJames Collins-26.5 108,-48 Q 637,565 704,565 q 67,0 133.5,21.5 66.5,21.5 108,48 41.5,26.5 74.5,48 33,21.5 42,21.5 61,0 111.5,-20 2175906e1a13SJames Collins50.5,-20 85.5,-53.5 35,-33.5 62,-81 27,-47.5 43,-97.5 16,-50 26.5,-108.5 10.5,-58.5 14,-109 Q 1408,184 1408,131 z m 2176906e1a13SJames Collins-320,893 Q 1088,865 975.5,752.5 863,640 704,640 545,640 432.5,752.5 320,865 320,1024 320,1183 432.5,1295.5 545,1408 704, 2177906e1a13SJames Collins1408 863,1408 975.5,1295.5 1088,1183 1088,1024 z"/></g></svg>'; 2178a8eebd82SJames Collins case 'search': 21799e41d878SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 21809cff245bSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M27 24.57l-5.647-5.648a8.895 8.895 0 0 0 1.522-4.984C22.875 9.01 21819cff245bSJames Collins18.867 5 13.938 5 9.01 5 5 9.01 5 13.938c0 4.929 4.01 8.938 8.938 8.938a8.887 8.887 0 0 0 4.984-1.522L24.568 27 27 21829cff245bSJames Collins24.57zm-13.062-4.445a6.194 6.194 0 0 1-6.188-6.188 6.195 6.195 0 0 1 6.188-6.188 6.195 6.195 0 0 1 6.188 6.188 6.195 21839cff245bSJames Collins6.195 0 0 1-6.188 6.188z"/></svg>'; 2184a8eebd82SJames Collins case 'home': 2185906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2186906e1a13SJames CollinsviewBox="0 -256 1792 1792" aria-hidden="true" style="fill:currentColor"><g 2187906e1a13SJames Collinstransform="matrix(1,0,0,-1,68.338983,1285.4237)" id="g3015"><path d="M 1408,544 V 64 Q 1408,38 1389,19 1370,0 1344,0 H 2188906e1a13SJames Collins960 V 384 H 704 V 0 H 320 q -26,0 -45,19 -19,19 -19,45 v 480 q 0,1 0.5,3 0.5,2 0.5,3 l 575,474 575,-474 q 1,-2 1,-6 z 2189906e1a13SJames Collinsm 223,69 -62,-74 q -8,-9 -21,-11 h -3 q -13,0 -21,7 L 832,1112 140,535 q -12,-8 -24,-7 -13,2 -21,11 l -62,74 q -8,10 2190906e1a13SJames Collins-7,23.5 1,13.5 11,21.5 l 719,599 q 32,26 76,26 44,0 76,-26 l 244,-204 v 195 q 0,14 9,23 9,9 23,9 h 192 q 14,0 23,-9 9, 2191906e1a13SJames Collins-9 9,-23 V 840 l 219,-182 q 10,-8 11,-21.5 1,-13.5 -7,-23.5 z" id="path3017" inkscape:connector-curvature="0" 21929cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 21939e41d878SJames Collins case 'sun': 2194906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2195906e1a13SJames Collinsstyle="fill:currentColor" viewBox="0 0 16 16"><path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 2196906e1a13SJames Collins0 8zm.5-9.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm0 11a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm5-5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zm-11 2197906e1a13SJames Collins0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zm9.743-4.036a.5.5 0 1 1-.707-.707.5.5 0 0 1 .707.707zm-7.779 7.779a.5.5 0 1 2198906e1a13SJames Collins1-.707-.707.5.5 0 0 1 .707.707zm7.072 0a.5.5 0 1 1 .707-.707.5.5 0 0 1-.707.707zM3.757 4.464a.5.5 0 1 1 .707-.707.5.5 2199906e1a13SJames Collins0 0 1-.707.707z" /></svg>'; 22009e41d878SJames Collins case 'moon': 2201906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2202906e1a13SJames Collinsstyle="fill:currentColor" viewBox="0 0 16 16"><path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 2203906e1a13SJames Collins4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 2204906e1a13SJames Collins1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278zM4.858 1.311A7.269 7.269 0 0 0 2205906e1a13SJames Collins1.025 7.71c0 4.02 3.279 7.276 7.319 7.276a7.316 7.316 0 0 0 5.205-2.162c-.337.042-.68.063-1.029.063-4.61 2206906e1a13SJames Collins0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286z" /></svg>'; 220734d5f19aSJames Collins case 'sunmoon': 2208d0fba6d1SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2209d0fba6d1SJames Collinsstyle="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" 2210d0fba6d1SJames CollinsviewBox="0 0 32 32"><line x1="16" y1="3" x2="16" y2="29"/><path d="M16,23c-3.87,0-7-3.13-7-7s3.13-7,7-7"/><line 2211d0fba6d1SJames Collinsx1="6.81" y1="6.81" x2="8.93" y2="8.93"/><line x1="3" y1="16" x2="6" y2="16"/><line x1="6.81" y1="25.19" x2="8.93" 2212d0fba6d1SJames Collinsy2="23.07"/><path d="M16,12.55C17.2,10.43,19.48,9,22.09,9c0.16,0,0.31,0.01,0.47,0.02c-1.67,0.88-2.8,2.63-2.8,4.64c0,2.9, 2213d0fba6d1SJames Collins2.35,5.25,5.25,5.25c1.6,0,3.03-0.72,3.99-1.85C28.48,20.43,25.59,23,22.09,23c-2.61,0-4.89-1.43-6.09-3.55"/></svg>'; 2214f65a4e5eSJames Collins case 'hamburger': 2215f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" 2216f65a4e5eSJames Collinsstyle="fill:currentColor"><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 2217f65a4e5eSJames Collins76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 2218f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 2219f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16z"/></svg>'; 2220f65a4e5eSJames Collins case 'down-arrow': 2221f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 2222f65a4e5eSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M16.003 18.626l7.081-7.081L25 13.46l-8.997 8.998-9.003-9 2223f65a4e5eSJames Collins1.917-1.916z"/></svg>'; 22243a3ece10SJames Collins case 'language': 22253a3ece10SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" width="16" 22263a3ece10SJames Collinsheight="16" fill="currentColor" viewBox="0 0 16 16"><path d="M4.545 6.714 4.11 22273a3ece10SJames Collins8H3l1.862-5h1.284L8 8H6.833l-.435-1.286H4.545zm1.634-.736L5.5 3.956h-.049l-.679 2.022H6.18z"/><path d="M0 2a2 2 0 0 1 22283a3ece10SJames Collins2-2h7a2 2 0 0 1 2 2v3h3a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-3H2a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v7a1 1 0 0 22293a3ece10SJames Collins0 1 1h7a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2zm7.138 9.995c.193.301.402.583.63.846-.748.575-1.673 1.001-2.768 22303a3ece10SJames Collins1.292.178.217.451.635.555.867 1.125-.359 2.08-.844 2.886-1.494.777.665 1.739 1.165 2.93 22313a3ece10SJames Collins1.472.133-.254.414-.673.629-.89-1.125-.253-2.057-.694-2.82-1.284.681-.747 1.222-1.651 22323a3ece10SJames Collins1.621-2.757H14V8h-3v1.047h.765c-.318.844-.74 1.546-1.272 2.13a6.066 6.066 0 0 1-.415-.492 1.988 1.988 0 0 1-.94.31z"/> 22333a3ece10SJames Collins</svg>'; 22349cff245bSJames Collins }//end switch 2235ab45ba71SJames Collins 2236a8eebd82SJames Collins return ''; 2237a8eebd82SJames Collins } 2238ab45ba71SJames Collins 2239a8eebd82SJames Collins /** 2240a8eebd82SJames Collins * Finalize theme 22419cff245bSJames Collins * 22429cff245bSJames Collins * @return void 2243a8eebd82SJames Collins */ 224410b40067Snomadjimbob public function finalize() 224510b40067Snomadjimbob { 2246a8eebd82SJames Collins } 22471785fc73SJames Collins 22481785fc73SJames Collins /** 22491785fc73SJames Collins * Show Messages 22509cff245bSJames Collins * 22519cff245bSJames Collins * @return void 22521785fc73SJames Collins */ 225310b40067Snomadjimbob public function showMessages() 225410b40067Snomadjimbob { 22551785fc73SJames Collins global $ACT; 22561785fc73SJames Collins 22579cff245bSJames Collins if ($this->lessIgnored === true) { 22589cff245bSJames Collins msg( 22599cff245bSJames Collins 'useLESS is enabled on the Mikio template, however is not supported on this server', 22609cff245bSJames Collins 2, 22619cff245bSJames Collins '', 22629cff245bSJames Collins '', 22639cff245bSJames Collins MSG_ADMINS_ONLY 22649cff245bSJames Collins ); 2265a8df40efSJames Collins } 2266a8df40efSJames Collins 22671785fc73SJames Collins $show = $this->getConf('showNotifications'); 22683a385f2cSJames Collins if ( 22694f8225e4SJames Collins strlen($show) === 0 || 22703a385f2cSJames Collins strcasecmp($show, 'always') === 0 || 22713a385f2cSJames Collins (strcasecmp($show, 'admin') === 0 && strcasecmp($ACT, 'admin') === 0) 22723a385f2cSJames Collins ) { 22731785fc73SJames Collins global $MSG, $MSG_shown; 22741785fc73SJames Collins 22754f8225e4SJames Collins if (isset($MSG) !== false) { 22769cff245bSJames Collins if (isset($MSG_shown) === false) { 22779cff245bSJames Collins $MSG_shown = []; 2278a8df40efSJames Collins } 22791785fc73SJames Collins 22801785fc73SJames Collins foreach ($MSG as $msg) { 22811785fc73SJames Collins $hash = md5($msg['msg']); 22829cff245bSJames Collins if (isset($MSG_shown[$hash]) === true) { 22831785fc73SJames Collins continue; 22841785fc73SJames Collins } 22851785fc73SJames Collins // skip double messages 22861785fc73SJames Collins 22879cff245bSJames Collins if (info_msg_allowed($msg) === true) { 22889cff245bSJames Collins echo '<div class="' . $msg['lvl'] . '">'; 22899cff245bSJames Collins echo $msg['msg']; 22909cff245bSJames Collins echo '</div>'; 22911785fc73SJames Collins } 22921785fc73SJames Collins 2293a8df40efSJames Collins $MSG_shown[$hash] = true; 22941785fc73SJames Collins } 22951785fc73SJames Collins 22961785fc73SJames Collins unset($GLOBALS['MSG']); 22979cff245bSJames Collins }//end if 22984f8225e4SJames Collins 22994f8225e4SJames Collins if (strlen($this->includedPageNotifications) > 0) { 23004f8225e4SJames Collins echo $this->includedPageNotifications; 23014f8225e4SJames Collins } 23024f8225e4SJames Collins }//end if 23031785fc73SJames Collins } 23047ac0a6efSJames Collins 23057ac0a6efSJames Collins /** 23067ac0a6efSJames Collins * Dokuwiki version 23077ac0a6efSJames Collins * 23087ac0a6efSJames Collins * @return string the dw version name 23097ac0a6efSJames Collins */ 23109cff245bSJames Collins public function dwVersion() 23119cff245bSJames Collins { 23129cff245bSJames Collins if (function_exists('getVersionData') === true) { 23137ac0a6efSJames Collins $version_data = getVersionData(); 23149cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 23157ac0a6efSJames Collins $version_items = explode(' ', $version_data['date']); 23167ac0a6efSJames Collins if (count($version_items) >= 2) { 23177ac0a6efSJames Collins return preg_replace('/[^a-zA-Z0-9 ]+/', '', strtolower($version_items[1])); 23187ac0a6efSJames Collins } 23197ac0a6efSJames Collins } 23207ac0a6efSJames Collins } 23217ac0a6efSJames Collins 23227ac0a6efSJames Collins return 'unknown'; 23237ac0a6efSJames Collins } 2324e4c4fb13SJames Collins 2325e4c4fb13SJames Collins /** 2326e4c4fb13SJames Collins * Dokuwiki version number 2327e4c4fb13SJames Collins * 2328e4c4fb13SJames Collins * @return string the dw version date converted to integer 2329e4c4fb13SJames Collins */ 23309cff245bSJames Collins public function dwVersionNumber() 23319cff245bSJames Collins { 23329cff245bSJames Collins if (function_exists('getVersionData') === true) { 2333e4c4fb13SJames Collins $version_data = getVersionData(); 23349cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 2335e4c4fb13SJames Collins $version_items = explode(' ', $version_data['date']); 2336e4c4fb13SJames Collins if (count($version_items) >= 1) { 2337e4c4fb13SJames Collins return intval(preg_replace('/[^0-9]+/', '', strtolower($version_items[0]))); 2338e4c4fb13SJames Collins } 2339e4c4fb13SJames Collins } 2340e4c4fb13SJames Collins } 2341e4c4fb13SJames Collins 2342e4c4fb13SJames Collins return 0; 2343e4c4fb13SJames Collins } 2344a8eebd82SJames Collins} 2345ab45ba71SJames Collins 2346ab45ba71SJames Collinsglobal $TEMPLATE; 234747161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 2348