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 = false; 368c963c68cSJames Collins 369c963c68cSJames Collins // search for less library 370c963c68cSJames Collins $path = '/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 371c963c68cSJames Collins if (($lessAvailable = file_exists('.' . $path)) !== true) { 372c963c68cSJames Collins for ($i = 0; $i < 6; $i++) { 373c963c68cSJames Collins if (($lessAvailable = file_exists($_SERVER['DOCUMENT_ROOT'] . $path)) === true) { 374c963c68cSJames Collins break; 375a8df40efSJames Collins } 376a8df40efSJames Collins 377c963c68cSJames Collins $path = '/..' . $path; 378c963c68cSJames Collins } 379c963c68cSJames Collins 380c963c68cSJames Collins if ($lessAvailable !== true) { 381c963c68cSJames Collins $path = '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 382c963c68cSJames Collins for ($i = 0; $i < 6; $i++) { 383*54915114SJames Collins if ( 384*54915114SJames Collins ($lessAvailable = file_exists( 385*54915114SJames Collins $_SERVER['DOCUMENT_ROOT'] . $path 386*54915114SJames Collins )) === true 387*54915114SJames Collins ) { 388c963c68cSJames Collins break; 389c963c68cSJames Collins } 390c963c68cSJames Collins 391c963c68cSJames Collins $path = '/..' . $path; 392c963c68cSJames Collins } 393c963c68cSJames Collins } 394c963c68cSJames Collins }//end if 395c963c68cSJames Collins 396a8df40efSJames Collins // check for ctype extensions 3979cff245bSJames Collins if (function_exists('ctype_digit') === false) { 398a8df40efSJames Collins $lessAvailable = false; 399a8df40efSJames Collins } 400a8df40efSJames Collins 4019cff245bSJames Collins if ($value === true && $lessAvailable === false) { 402a8df40efSJames Collins $this->lessIgnored = true; 40329118ed7SJames Collins $value = false; 40429118ed7SJames Collins } 4053a385f2cSJames Collins 4063a385f2cSJames Collins return $value; 4079cff245bSJames Collins }//end switch 4083a385f2cSJames Collins }//end if 4093a385f2cSJames Collins 4103a385f2cSJames Collins if (in_array($value, $row['values']) === true) { 4113a385f2cSJames Collins return $value; 4123a385f2cSJames Collins } 4133a385f2cSJames Collins 4143a385f2cSJames Collins if (array_key_exists('default', $row) === true) { 4153a385f2cSJames Collins if (is_array($row['default']) === true) { 4163a385f2cSJames Collins if (array_key_exists($key, $row['default']) === true) { 4173a385f2cSJames Collins return $row['default'][$key]; 4183a385f2cSJames Collins } 4193a385f2cSJames Collins } else { 4203a385f2cSJames Collins return $row['default']; 4213a385f2cSJames Collins } 4223a385f2cSJames Collins } 4233a385f2cSJames Collins 4243a385f2cSJames Collins return reset($row['values']); 4253a385f2cSJames Collins }//end if 4263a385f2cSJames Collins }//end foreach 427c165b184SJames Collins 428c165b184SJames Collins return $value; 429c165b184SJames Collins } 430c165b184SJames Collins 431c165b184SJames Collins 43295372bffSJames Collins // phpcs:enable 43395372bffSJames Collins 43495372bffSJames Collins 435c165b184SJames Collins /** 436a8eebd82SJames Collins * Check if a page exist in directory or namespace 437c165b184SJames Collins * 4389cff245bSJames Collins * @param string $page Page/namespace to search. 439a8eebd82SJames Collins * @return boolean if page exists 440c165b184SJames Collins */ 4419cff245bSJames Collins public function pageExists(string $page) 44210b40067Snomadjimbob { 443ab45ba71SJames Collins ob_start(); 444a8eebd82SJames Collins tpl_includeFile($page . '.html'); 445ab45ba71SJames Collins $html = ob_get_contents(); 446ab45ba71SJames Collins ob_end_clean(); 447a8eebd82SJames Collins 4483a385f2cSJames Collins if (empty($html) === false) { 4499cff245bSJames Collins return true; 4509cff245bSJames Collins } 451a8eebd82SJames Collins 452a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 453a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 454a8eebd82SJames Collins 4559cff245bSJames Collins if ($propagate === true) { 4569cff245bSJames Collins if (page_findnearest($page, $useACL) !== false) { 4579cff245bSJames Collins return true; 4589cff245bSJames Collins } 4599cff245bSJames Collins } elseif ($useACL === true && auth_quickaclcheck($page) !== AUTH_NONE) { 4609cff245bSJames Collins return true; 461ab45ba71SJames Collins } 462ab45ba71SJames Collins 4639cff245bSJames Collins return false; 464ab45ba71SJames Collins } 465ab45ba71SJames Collins 466a8eebd82SJames Collins 467c165b184SJames Collins /** 468a8eebd82SJames Collins * Print or return page from directory or namespace 4692b4583abSJames Collins * 4709cff245bSJames Collins * @param string $page Page/namespace to include. 4719cff245bSJames Collins * @param boolean $print Print content. 4729cff245bSJames Collins * @param boolean $parse Parse content before printing/returning. 4739cff245bSJames Collins * @param string $classWrapper Wrap page in a div with class. 474ab45ba71SJames Collins * @return string contents of page found 4752b4583abSJames Collins */ 4769cff245bSJames Collins public function includePage(string $page, bool $print = true, bool $parse = true, string $classWrapper = '') 4772b4583abSJames Collins { 478a8eebd82SJames Collins ob_start(); 479a8eebd82SJames Collins tpl_includeFile($page . '.html'); 480a8eebd82SJames Collins $html = ob_get_contents(); 481a8eebd82SJames Collins ob_end_clean(); 482a8eebd82SJames Collins 4833a385f2cSJames Collins if (empty($html) === true) { 4844f8225e4SJames Collins global $MSG; 4854f8225e4SJames Collins 486a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 487a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 488ab45ba71SJames Collins $html = ''; 4892b4583abSJames Collins 4904f8225e4SJames Collins ob_start(); 491ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 4924f8225e4SJames Collins $this->includedPageNotifications .= ob_get_contents(); 4934f8225e4SJames Collins ob_end_clean(); 494ab45ba71SJames Collins } 4952b4583abSJames Collins 4963a385f2cSJames Collins if (empty($html) === false && $parse === true) { 497ab45ba71SJames Collins $html = $this->parseContent($html); 498ab45ba71SJames Collins } 4992b4583abSJames Collins 5003a385f2cSJames Collins if (empty($classWrapper) === false && empty($html) === false) { 5019cff245bSJames Collins $html = '<div class="' . $classWrapper . '">' . $html . '</div>'; 5029cff245bSJames Collins } 5032b4583abSJames Collins 5049cff245bSJames Collins if ($print === true) { 5059cff245bSJames Collins echo $html; 5069cff245bSJames Collins } 507ab45ba71SJames Collins return $html; 5082b4583abSJames Collins } 5092b4583abSJames Collins 510a8eebd82SJames Collins 511a8eebd82SJames Collins /** 512a8eebd82SJames Collins * Print or return logged in user information 513a8eebd82SJames Collins * 5149cff245bSJames Collins * @param boolean $print Print content. 515a8eebd82SJames Collins * @return string user information 516a8eebd82SJames Collins */ 5179cff245bSJames Collins public function includeLoggedIn(bool $print = true) 51810b40067Snomadjimbob { 519a8eebd82SJames Collins $html = ''; 520a8eebd82SJames Collins 5219cff245bSJames Collins if (empty($_SERVER['REMOTE_USER']) === false) { 522a8eebd82SJames Collins $html .= '<div class="mikio-user-info">'; 523a8eebd82SJames Collins ob_start(); 524a8eebd82SJames Collins tpl_userinfo(); 525a8eebd82SJames Collins $html .= ob_get_contents(); 526a8eebd82SJames Collins ob_end_clean(); 527a8eebd82SJames Collins $html .= '</div>'; 5282b4583abSJames Collins } 529a8eebd82SJames Collins 5309cff245bSJames Collins if ($print === true) { 5319cff245bSJames Collins echo $html; 5329cff245bSJames Collins } 533a8eebd82SJames Collins return $html; 5342b4583abSJames Collins } 5352b4583abSJames Collins 5362b4583abSJames Collins 537a8eebd82SJames Collins /** 538a8eebd82SJames Collins * Print or return DokuWiki Menu 539a8eebd82SJames Collins * 5409cff245bSJames Collins * @param boolean $print Print content. 541a8eebd82SJames Collins * @return string contents of the menu 542a8eebd82SJames Collins */ 5439cff245bSJames Collins public function includeDWMenu(bool $print = true) 54410b40067Snomadjimbob { 5452b4583abSJames Collins global $lang; 5462b4583abSJames Collins global $USERINFO; 547c165b184SJames Collins 5489cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 549a8eebd82SJames Collins $html = '<ul class="mikio-nav">'; 5502b4583abSJames Collins 551ab45ba71SJames Collins $pageToolsMenu = []; 552ab45ba71SJames Collins $siteToolsMenu = []; 553ab45ba71SJames Collins $userToolsMenu = []; 554c165b184SJames Collins 555ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 556ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 557ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 5582b4583abSJames Collins 5592b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 5602b4583abSJames Collins foreach ($items as $item) { 5619cff245bSJames Collins if ($item->getType() !== 'top') { 562ab45ba71SJames Collins $itemHtml = ''; 5632b4583abSJames Collins 564905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5659cff245bSJames Collins if ( 5663a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5673a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5683a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5699cff245bSJames Collins ) { 5709cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . 5719cff245bSJames Collins ' ' . $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5729cff245bSJames Collins if ($showIcons === true) { 5739cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5749cff245bSJames Collins } 5759cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5769cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5779cff245bSJames Collins } 578ab45ba71SJames Collins $itemHtml .= '</a>'; 579ab45ba71SJames Collins 580ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 5812b4583abSJames Collins } 5829cff245bSJames Collins }//end if 5839cff245bSJames Collins }//end foreach 5842b4583abSJames Collins 585ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action'); 586ab45ba71SJames Collins foreach ($items as $item) { 587ab45ba71SJames Collins $itemHtml = ''; 5882b4583abSJames Collins 589905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5909cff245bSJames Collins if ( 5913a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5923a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5933a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5949cff245bSJames Collins ) { 5959cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . ' ' . 5969cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5979cff245bSJames Collins if ($showIcons === true) { 5989cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5999cff245bSJames Collins } 6009cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6019cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6029cff245bSJames Collins } 603ab45ba71SJames Collins $itemHtml .= '</a>'; 6042b4583abSJames Collins 605ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 6062b4583abSJames Collins } 6079cff245bSJames Collins }//end foreach 6082b4583abSJames Collins 609ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 610ab45ba71SJames Collins foreach ($items as $item) { 611ab45ba71SJames Collins $itemHtml = ''; 612ab45ba71SJames Collins 613905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 6149cff245bSJames Collins if ( 6153a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 6163a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 6173a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 6189cff245bSJames Collins ) { 6199cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link' . ($isDropDown === true ? ' mikio-dropdown-item' : '') . ' ' . 6209cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 6219cff245bSJames Collins if ($showIcons === true) { 6229cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 6239cff245bSJames Collins } 6249cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6259cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6269cff245bSJames Collins } 627ab45ba71SJames Collins $itemHtml .= '</a>'; 628ab45ba71SJames Collins 629ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 630ab45ba71SJames Collins } 6319cff245bSJames Collins }//end foreach 632ab45ba71SJames Collins 633ab45ba71SJames Collins 634ab45ba71SJames Collins switch ($this->getConf('navbarDWMenuCombine')) { 635ab45ba71SJames Collins case 'dropdown': 636ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 6379cff245bSJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" 6389cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6399cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('file') : '') . 6409cff245bSJames Collins ($showText === true ? $lang['page_tools'] : '<span class="mikio-small-only">' . $lang['page_tools'] . 6419cff245bSJames Collins '</span>') . '</a>'; 642a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 643ab45ba71SJames Collins 644ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 645ab45ba71SJames Collins $html .= $item; 646ab45ba71SJames Collins } 647ab45ba71SJames Collins 648ab45ba71SJames Collins $html .= '</div>'; 649ab45ba71SJames Collins $html .= '</li>'; 650ab45ba71SJames Collins 651a8eebd82SJames Collins $html .= '<li id="dokuwiki__sitetools" class="mikio-nav-dropdown">'; 6529cff245bSJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" 6539cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6549cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('gear') : '') . 6559cff245bSJames Collins ($showText === true ? $lang['site_tools'] : '<span class="mikio-small-only">' . 6569cff245bSJames Collins $lang['site_tools'] . '</span>') . '</a>'; 657a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 658ab45ba71SJames Collins 659ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 660ab45ba71SJames Collins $html .= $item; 661ab45ba71SJames Collins } 662ab45ba71SJames Collins 663ab45ba71SJames Collins $html .= '</div>'; 664ab45ba71SJames Collins $html .= '</li>'; 665ab45ba71SJames Collins 666a8eebd82SJames Collins $html .= '<li id="dokuwiki__usertools" class="mikio-nav-dropdown">'; 6679cff245bSJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" 6689cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6699cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('user') : '') . 6709cff245bSJames Collins ($showText === true ? $lang['user_tools'] : '<span class="mikio-small-only">' . 6719cff245bSJames Collins $lang['user_tools'] . '</span>') . '</a>'; 672a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 673ab45ba71SJames Collins 674ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 675ab45ba71SJames Collins $html .= $item; 676ab45ba71SJames Collins } 677ab45ba71SJames Collins 678ab45ba71SJames Collins $html .= '</div>'; 679ab45ba71SJames Collins $html .= '</li>'; 680ab45ba71SJames Collins 681ab45ba71SJames Collins break; 682ab45ba71SJames Collins 683ab45ba71SJames Collins case 'combine': 684ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 6859cff245bSJames Collins $html .= '<a class="mikio-nav-link" href="#">' . 6869cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('wrench') : '') . 6879cff245bSJames Collins ($showText === true ? tpl_getLang('tools-menu') : '<span class="mikio-small-only">' . 6889cff245bSJames Collins tpl_getLang('tools-menu') . '</span>') . '</a>'; 689a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 690ab45ba71SJames Collins 691ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 692ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 693ab45ba71SJames Collins $html .= $item; 694ab45ba71SJames Collins } 695ab45ba71SJames Collins 696ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 697ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 698ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 699ab45ba71SJames Collins $html .= $item; 700ab45ba71SJames Collins } 701ab45ba71SJames Collins 702ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 703ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 704ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 705ab45ba71SJames Collins $html .= $item; 706ab45ba71SJames Collins } 707ab45ba71SJames Collins 708ab45ba71SJames Collins $html .= '</div>'; 709ab45ba71SJames Collins $html .= '</li>'; 710ab45ba71SJames Collins break; 711ab45ba71SJames Collins 712ab45ba71SJames Collins default: // seperate 713ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 714a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 715ab45ba71SJames Collins } 716ab45ba71SJames Collins 717ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 718a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 719a8eebd82SJames Collins } 720a8eebd82SJames Collins 721a8eebd82SJames Collins foreach ($userToolsMenu as $item) { 722a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 723ab45ba71SJames Collins } 724ab45ba71SJames Collins 725ab45ba71SJames Collins break; 7269cff245bSJames Collins }//end switch 727ab45ba71SJames Collins 7283a3ece10SJames Collins $translation = plugin_load('helper', 'translation'); 7293a3ece10SJames Collins if ($translation !== null) { 7303a3ece10SJames Collins $html .= '<li id="mikio__translate" class="mikio-nav-dropdown">'; 7313a3ece10SJames Collins $html .= '<a id="mikio_dropdown_translate" class="nav-link dropdown-toggle" href="#" role="button" 7323a3ece10SJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 7333a3ece10SJames Collins $this->mikioInlineIcon('language') . 7343a3ece10SJames Collins '</a>'; 7353a3ece10SJames Collins $html .= '<div class="mikio-dropdown closed">'; 7363a3ece10SJames Collins 7373a3ece10SJames Collins $html .= $translation->showTranslations(); 7383a3ece10SJames Collins 7393a3ece10SJames Collins $html .= '</div>'; 7403a3ece10SJames Collins $html .= '</li>'; 7413a3ece10SJames Collins } 7423a3ece10SJames Collins 74312030b10SJames Collins if ($this->getConf('showLightDark') === true) { 744d0fba6d1SJames Collins $autoLightDark = $this->getConf('autoLightDark'); 7459e41d878SJames Collins $html .= '<li class="mikio-darklight"> 7469e41d878SJames Collins<a href="#" class="mikio-control mikio-button mikio-darklight-button">' . 747d0fba6d1SJames Collins ($autoLightDark === true ? $this->mikioInlineIcon('sunmoon', 'mikio-darklight-auto') : '') . 7489e41d878SJames Collins $this->mikioInlineIcon('sun', 'mikio-darklight-light') . 7499e41d878SJames Collins $this->mikioInlineIcon('moon', 'mikio-darklight-dark') . 7509e41d878SJames Collins '</a></li>'; 75112030b10SJames Collins } 75212030b10SJames Collins 753ab45ba71SJames Collins $html .= '</ul>'; 754ab45ba71SJames Collins 7559cff245bSJames Collins if ($print === true) { 7569cff245bSJames Collins echo $html; 7579cff245bSJames Collins } 758a8eebd82SJames Collins return $html; 759a8eebd82SJames Collins } 760a8eebd82SJames Collins 761a8eebd82SJames Collins 762a8eebd82SJames Collins /** 763a8eebd82SJames Collins * Create a nav element from a string. <uri>|<title>; 764a8eebd82SJames Collins * 7659cff245bSJames Collins * @param string $str String to generate nav. 766a8eebd82SJames Collins * @return string nav elements generated 767a8eebd82SJames Collins */ 7689cff245bSJames Collins public function stringToNav(string $str) 76910b40067Snomadjimbob { 770a8eebd82SJames Collins $html = ''; 771a8eebd82SJames Collins 7723a385f2cSJames Collins if (empty($str) === false) { 773a8eebd82SJames Collins $items = explode(';', $str); 774a8eebd82SJames Collins if (count($items) > 0) { 775a8eebd82SJames Collins $html .= '<ul class="mikio-nav">'; 776a8eebd82SJames Collins foreach ($items as $item) { 777a8eebd82SJames Collins $parts = explode('|', $item); 778a8eebd82SJames Collins if ($parts > 1) { 7799cff245bSJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . 7809cff245bSJames Collins strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . 7819cff245bSJames Collins '</a></li>'; 782a8eebd82SJames Collins } 783a8eebd82SJames Collins } 784a8eebd82SJames Collins $html .= '</ul>'; 785a8eebd82SJames Collins } 7862b4583abSJames Collins } 7872b4583abSJames Collins 788ab45ba71SJames Collins return $html; 7892b4583abSJames Collins } 7902b4583abSJames Collins 791a8eebd82SJames Collins /** 792ab45ba71SJames Collins * print or return the main navbar 7932b4583abSJames Collins * 7949cff245bSJames Collins * @param boolean $print Print the navbar. 7959cff245bSJames Collins * @param boolean $showSub Include the sub navbar. 796ab45ba71SJames Collins * @return string generated content 7972b4583abSJames Collins */ 7989cff245bSJames Collins public function includeNavbar(bool $print = true, bool $showSub = false) 79910b40067Snomadjimbob { 800b39ad16dSJames Collins global $conf, $USERINFO; 801d3d7d2b7SJames Collins 802d3d7d2b7SJames Collins $homeUrl = wl(); 803d3d7d2b7SJames Collins 8049cff245bSJames Collins if (plugin_isdisabled('showpageafterlogin') === false) { 805d3d7d2b7SJames Collins $p = &plugin_load('action', 'showpageafterlogin'); 8063a385f2cSJames Collins if (empty($p) === false) { 8079cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 808d3d7d2b7SJames Collins $homeUrl = wl($p->getConf('page_after_login')); 809d3d7d2b7SJames Collins } 810d3d7d2b7SJames Collins } 811b39ad16dSJames Collins } else { 8129cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 813b39ad16dSJames Collins $url = $this->getConf('brandURLUser'); 814b39ad16dSJames Collins if (strlen($url) > 0) { 815b39ad16dSJames Collins $homeUrl = $url; 816d3d7d2b7SJames Collins } 817b39ad16dSJames Collins } else { 818b39ad16dSJames Collins $url = $this->getConf('brandURLGuest'); 819b39ad16dSJames Collins if (strlen($url) > 0) { 820b39ad16dSJames Collins $homeUrl = $url; 821b39ad16dSJames Collins } 822b39ad16dSJames Collins } 823b39ad16dSJames Collins } 824d3d7d2b7SJames Collins 825ab45ba71SJames Collins $html = ''; 82647161538SJames Collins 8279cff245bSJames Collins $html .= '<nav class="mikio-navbar' . (($this->getConf('stickyNavbar') === true) ? ' mikio-sticky' : '') . 8289cff245bSJames Collins '">'; 829f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 830d3d7d2b7SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . $homeUrl . '">'; 8319cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true || $this->getConf('navbarUseTitleText') === true) { 832ab45ba71SJames Collins // Brand image 8339cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true) { 8349cff245bSJames Collins $logo = $this->getMediaFile('logo', false); 8359cff245bSJames Collins ; 8363a385f2cSJames Collins if (empty($logo) === false) { 837f0241fc4SJames Collins $width = $this->getConf('navbarTitleIconWidth'); 838f0241fc4SJames Collins $height = $this->getConf('navbarTitleIconHeight'); 839f0241fc4SJames Collins $styles = ''; 840f0241fc4SJames Collins 841f0241fc4SJames Collins if (strlen($width) > 0 || strlen($height) > 0) { 8429cff245bSJames Collins if (ctype_digit($width) === true) { 843f0241fc4SJames Collins $styles .= 'max-width:' . intval($width) . 'px;'; 8449cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $width) === 1) { 845f0241fc4SJames Collins $styles .= 'max-width:' . $width . ';'; 8469cff245bSJames Collins } elseif (strcasecmp($width, 'none') === 0) { 8477a92c19bSJames Collins $styles .= 'max-width:none;'; 848f0241fc4SJames Collins } 849f0241fc4SJames Collins 8509cff245bSJames Collins if (ctype_digit($height) === true) { 851f0241fc4SJames Collins $styles .= 'max-height:' . intval($height) . 'px;'; 8529cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $height) === 1) { 853f0241fc4SJames Collins $styles .= 'max-height:' . $height . ';'; 8549cff245bSJames Collins } elseif (strcasecmp($height, 'none') === 0) { 8557a92c19bSJames Collins $styles .= 'max-height:none;'; 856f0241fc4SJames Collins } 857f0241fc4SJames Collins 858f0241fc4SJames Collins if (strlen($styles) > 0) { 859f0241fc4SJames Collins $styles = ' style="' . $styles . '"'; 860f0241fc4SJames Collins } 8619cff245bSJames Collins }//end if 862f0241fc4SJames Collins 863f0241fc4SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image"' . $styles . '>'; 8649cff245bSJames Collins }//end if 8659cff245bSJames Collins }//end if 866ab45ba71SJames Collins 867ab45ba71SJames Collins // Brand title 8689cff245bSJames Collins if ($this->getConf('navbarUseTitleText') === true) { 869ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 870a8eebd82SJames Collins $html .= '<h1 class="mikio-navbar-brand-title-text">' . $conf['title'] . '</h1>'; 8719cff245bSJames Collins if ($this->getConf('navbarUseTaglineText') === true) { 872a8eebd82SJames Collins $html .= '<p class="claim mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</p>'; 873ab45ba71SJames Collins } 874ab45ba71SJames Collins $html .= '</div>'; 875ab45ba71SJames Collins } 8769cff245bSJames Collins }//end if 877ab45ba71SJames Collins $html .= '</a>'; 878660b2c71SJames Collins $html .= '<div class="mikio-navbar-toggle"><span class="icon"></span></div>'; 879ab45ba71SJames Collins 880ab45ba71SJames Collins // Menus 881ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 882ab45ba71SJames Collins 8839cff245bSJames Collins $menus = [$this->getConf('navbarPosLeft', 'none'), $this->getConf('navbarPosMiddle', 'none'), 8849cff245bSJames Collins $this->getConf('navbarPosRight', 'none') 8859cff245bSJames Collins ]; 886a8eebd82SJames Collins foreach ($menus as $menuType) { 887a8eebd82SJames Collins switch ($menuType) { 888a8eebd82SJames Collins case 'custom': 889a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('navbarCustomMenuText', '')); 890a8eebd82SJames Collins break; 891a8eebd82SJames Collins case 'search': 892ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 893ab45ba71SJames Collins $html .= $this->includeSearch(false); 894ab45ba71SJames Collins $html .= '</div>'; 895a8eebd82SJames Collins break; 896a8eebd82SJames Collins case 'dokuwiki': 8979cff245bSJames Collins $html .= $this->includeDWMenu(false); 898a8eebd82SJames Collins break; 899a8eebd82SJames Collins } 900a8eebd82SJames Collins } 901ab45ba71SJames Collins 902ab45ba71SJames Collins $html .= '</div>'; 903f8039bf2SJames Collins $html .= '</div>'; 904ab45ba71SJames Collins $html .= '</nav>'; 905ab45ba71SJames Collins 906a8eebd82SJames Collins // Sub Navbar 9079cff245bSJames Collins if ($showSub === true) { 9089cff245bSJames Collins $sub = $this->includePage('submenu', false); 9093a385f2cSJames Collins if (empty($sub) === false) { 9109cff245bSJames Collins $html .= '<nav class="mikio-navbar mikio-sub-navbar">' . $sub . '</nav>'; 9119cff245bSJames Collins } 912ab45ba71SJames Collins } 913ab45ba71SJames Collins 9149cff245bSJames Collins if ($print === true) { 9159cff245bSJames Collins echo $html; 9169cff245bSJames Collins } 917ab45ba71SJames Collins return $html; 918ab45ba71SJames Collins } 919ab45ba71SJames Collins 920ab45ba71SJames Collins 921a8eebd82SJames Collins /** 922a8eebd82SJames Collins * Is there a sidebar 923a8eebd82SJames Collins * 9249cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 925a8eebd82SJames Collins * @return boolean if sidebar exists 926a8eebd82SJames Collins */ 9279cff245bSJames Collins public function sidebarExists(string $prefix = '') 92810b40067Snomadjimbob { 929a8eebd82SJames Collins global $conf; 930a8eebd82SJames Collins 9313a385f2cSJames Collins if (strcasecmp($prefix, 'left') === 0) { 9329cff245bSJames Collins $prefix = ''; 9339cff245bSJames Collins } 934a8eebd82SJames Collins 935a8eebd82SJames Collins return $this->pageExists($conf['sidebar' . $prefix]); 936a8eebd82SJames Collins } 937a8eebd82SJames Collins 938a8eebd82SJames Collins 939a8eebd82SJames Collins /** 940ab45ba71SJames Collins * Print or return the sidebar content 941ab45ba71SJames Collins * 9429cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 9439cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 9449cff245bSJames Collins * @param boolean $parse Parse the content. 945ab45ba71SJames Collins * @return string generated content 946ab45ba71SJames Collins */ 9479cff245bSJames Collins public function includeSidebar(string $prefix = '', bool $print = true, bool $parse = true) 94810b40067Snomadjimbob { 949ab45ba71SJames Collins global $conf, $ID; 950ab45ba71SJames Collins 951ab45ba71SJames Collins $html = ''; 952ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 953ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 954ab45ba71SJames Collins 9553a385f2cSJames Collins if (empty($confPrefix) === true) { 9569cff245bSJames Collins $confPrefix = 'Left'; 9579cff245bSJames Collins } 9581cdedf28SJames Collins if (strcasecmp($prefix, 'left') === 0) { 9599cff245bSJames Collins $prefix = ''; 9609cff245bSJames Collins } 961ab45ba71SJames Collins 9621cdedf28SJames Collins $sidebarPage = empty($conf[$prefix . 'sidebar']) === true ? $prefix . 'sidebar' : $conf[$prefix . 'sidebar']; 963ab45ba71SJames Collins 9649cff245bSJames Collins if ( 9659cff245bSJames Collins $this->getConf('sidebarShow' . $confPrefix) === true && page_findnearest($sidebarPage) !== false && 9661cdedf28SJames Collins p_get_metadata($ID, 'nosidebar', false) === null 9679cff245bSJames Collins ) { 9689cff245bSJames Collins $content = $this->includePage($sidebarPage . 'header', false); 9693a385f2cSJames Collins if (empty($content) === false) { 9709cff245bSJames Collins $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 9719cff245bSJames Collins } 972ab45ba71SJames Collins 9733a385f2cSJames Collins if (empty($prefix) === true) { 9749cff245bSJames Collins $rows = [$this->getConf('sidebarLeftRow1'), $this->getConf('sidebarLeftRow2'), 9759cff245bSJames Collins $this->getConf('sidebarLeftRow3'), $this->getConf('sidebarLeftRow4') 9769cff245bSJames Collins ]; 977ab45ba71SJames Collins 978a8eebd82SJames Collins foreach ($rows as $row) { 979a8eebd82SJames Collins switch ($row) { 980a8eebd82SJames Collins case 'search': 9819cff245bSJames Collins $html .= $this->includeSearch(false); 982a8eebd82SJames Collins break; 983a8eebd82SJames Collins case 'logged in user': 9849cff245bSJames Collins $html .= $this->includeLoggedIn(false); 985a8eebd82SJames Collins break; 986a8eebd82SJames Collins case 'content': 9879cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9883a385f2cSJames Collins if (empty($content) === false) { 9899cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9909cff245bSJames Collins } 991a8eebd82SJames Collins break; 992a8eebd82SJames Collins case 'tags': 993a8eebd82SJames Collins $html .= '<div class="mikio-tags"></div>'; 994a8eebd82SJames Collins } 995a8eebd82SJames Collins } 996a8eebd82SJames Collins } else { 9979cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9983a385f2cSJames Collins if (empty($content) === false) { 9999cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 10009cff245bSJames Collins } 10019cff245bSJames Collins }//end if 10029cff245bSJames Collins 10039cff245bSJames Collins $content = $this->includePage($sidebarPage . 'footer', false); 10043a385f2cSJames Collins if (empty($content) === false) { 10059cff245bSJames Collins $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 10069cff245bSJames Collins } 10079cff245bSJames Collins }//end if 10089cff245bSJames Collins 10093a385f2cSJames Collins if (empty($html) === true) { 10103a385f2cSJames Collins if (empty($prefix) === true && $this->getConf('sidebarAlwaysShowLeft') === true) { 10119cff245bSJames Collins $html = ' '; 10129cff245bSJames Collins } 10139cff245bSJames Collins if ($this->getConf('sidebarAlwaysShow' . ucfirst($prefix)) === true) { 10149cff245bSJames Collins $html = ' '; 10159cff245bSJames Collins } 1016a8eebd82SJames Collins } 1017ab45ba71SJames Collins 10183a385f2cSJames Collins if (empty($html) === false) { 10191cdedf28SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . (empty($prefix) === true ? 'left' : $prefix) . 10209cff245bSJames Collins '"><a class="mikio-sidebar-toggle' . 10219cff245bSJames Collins ($this->getConf('sidebarMobileDefaultCollapse') === true ? ' closed' : '') . '" href="#">' . 10229cff245bSJames Collins tpl_getLang('sidebar-title') . ' <span class="icon"></span></a><div class="mikio-sidebar-collapse">' . 10239cff245bSJames Collins $html . '</div></aside>'; 1024ab45ba71SJames Collins } 1025ab45ba71SJames Collins 10269cff245bSJames Collins if ($parse === true) { 10279cff245bSJames Collins $html = $this->includeIcons($html); 10283a04a100SJames Collins } 10299cff245bSJames Collins if ($print === true) { 10309cff245bSJames Collins echo $html; 1031ab45ba71SJames Collins } 10324f8225e4SJames Collins 1033ab45ba71SJames Collins return $html; 1034ab45ba71SJames Collins } 1035ab45ba71SJames Collins 1036ab45ba71SJames Collins 1037a8eebd82SJames Collins /** 1038ab45ba71SJames Collins * Print or return the page tools content 1039ab45ba71SJames Collins * 10409cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 10419cff245bSJames Collins * @param boolean $includeId Include the dw__pagetools id in the element. 1042ab45ba71SJames Collins * @return string generated content 1043ab45ba71SJames Collins */ 10449cff245bSJames Collins public function includePageTools(bool $print = true, bool $includeId = false) 104510b40067Snomadjimbob { 10461293ce10SJames Collins global $USERINFO; 10471293ce10SJames Collins 10489cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 1049ab45ba71SJames Collins $html = ''; 1050ab45ba71SJames Collins 10519cff245bSJames Collins $html .= '<nav' . ($includeId === true ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 1052b9c0582bSJames Collins $html .= '<ul class="tools">'; 1053ab45ba71SJames Collins 1054ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 1055ab45ba71SJames Collins foreach ($items as $item) { 10569cff245bSJames Collins $classes = []; 10573fd763a0SJames Collins $classes[] = $item->getType(); 10583fd763a0SJames Collins $attr = $item->getLinkAttributes(); 10593fd763a0SJames Collins 10609cff245bSJames Collins if (empty($attr['class']) === false) { 10613fd763a0SJames Collins $classes = array_merge($classes, explode(' ', $attr['class'])); 1062ab45ba71SJames Collins } 1063ab45ba71SJames Collins 10643fd763a0SJames Collins $classes = array_unique($classes); 10653fd763a0SJames Collins 1066f02b8ab5SJames Collins $showItem = $this->getConf('pageToolsShow' . ucfirst($item->getType()), 'always'); 10679cff245bSJames Collins if ( 10683a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 10693a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 10703a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === true)) 10719cff245bSJames Collins ) { 10723fd763a0SJames Collins $html .= '<li class="' . implode(' ', $classes) . '">'; 10739cff245bSJames Collins $html .= '<a href="' . $item->getLink() . '" class="' . $item->getType() . '" title="' . 10749cff245bSJames Collins $item->getTitle() . '"><div class="icon">' . inlineSVG($item->getSvg()) . 10759cff245bSJames Collins '</div><span class="a11y">' . $item->getLabel() . '</span></a>'; 10763fd763a0SJames Collins $html .= '</li>'; 10773fd763a0SJames Collins } 10789cff245bSJames Collins }//end foreach 10793fd763a0SJames Collins 10803fd763a0SJames Collins $html .= '</ul>'; 1081ab45ba71SJames Collins $html .= '</nav>'; 1082ab45ba71SJames Collins 10839cff245bSJames Collins if ($print === true) { 10849cff245bSJames Collins echo $html; 10859cff245bSJames Collins } 1086ab45ba71SJames Collins return $html; 1087ab45ba71SJames Collins } 1088ab45ba71SJames Collins 1089ab45ba71SJames Collins 1090a8eebd82SJames Collins /** 1091a8eebd82SJames Collins * Print or return the search bar 1092a8eebd82SJames Collins * 10939cff245bSJames Collins * @param boolean $print Print content. 1094a8eebd82SJames Collins * @return string contents of the search bar 1095a8eebd82SJames Collins */ 10969cff245bSJames Collins public function includeSearch(bool $print = true) 109710b40067Snomadjimbob { 10989cff245bSJames Collins global $lang, $ID, $ACT, $QUERY; 1099ab45ba71SJames Collins $html = ''; 1100ab45ba71SJames Collins 11019cff245bSJames Collins $html .= '<form class="mikio-search search" action="' . wl() . 11029cff245bSJames Collins '" accept-charset="utf-8" method="get" role="search">'; 1103a8eebd82SJames Collins $html .= '<input type="hidden" name="do" value="search">'; 1104a8eebd82SJames Collins $html .= '<input type="hidden" name="id" value="' . $ID . '">'; 1105c1cb9f15SChris MacMackin $html .= '<input name="q" '; 11069cff245bSJames Collins if ($this->getConf('searchUseTypeahead') === true) { 1107c1cb9f15SChris MacMackin $html .= 'class="search_typeahead" '; 1108c1cb9f15SChris MacMackin } 11099cff245bSJames Collins $html .= 'autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . 11103a385f2cSJames Collins ((strcasecmp($ACT, 'search') === 0) ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 1111a8eebd82SJames Collins $html .= '<button type="submit" title="' . $lang['btn_search'] . '">'; 11123a385f2cSJames Collins if (strcasecmp($this->getConf('searchButton'), 'icon') === 0) { 1113a8eebd82SJames Collins $html .= $this->mikioInlineIcon('search'); 1114ab45ba71SJames Collins } else { 1115ab45ba71SJames Collins $html .= $lang['btn_search']; 1116ab45ba71SJames Collins } 1117ab45ba71SJames Collins $html .= '</button>'; 1118ab45ba71SJames Collins $html .= '</form>'; 1119ab45ba71SJames Collins 11209cff245bSJames Collins if ($print === true) { 11219cff245bSJames Collins echo $html; 11229cff245bSJames Collins } 1123ab45ba71SJames Collins return $html; 1124ab45ba71SJames Collins } 1125ab45ba71SJames Collins 1126ab45ba71SJames Collins 1127a8eebd82SJames Collins /** 1128a8eebd82SJames Collins * Print or return content 1129a8eebd82SJames Collins * 11309cff245bSJames Collins * @param boolean $print Print content. 1131a8eebd82SJames Collins * @return string contents 1132a8eebd82SJames Collins */ 11339cff245bSJames Collins public function includeContent(bool $print = true) 113410b40067Snomadjimbob { 1135ab45ba71SJames Collins ob_start(); 11369cff245bSJames Collins tpl_content(false); 1137ab45ba71SJames Collins $html = ob_get_contents(); 1138ab45ba71SJames Collins ob_end_clean(); 1139ab45ba71SJames Collins 1140ab45ba71SJames Collins $html = $this->includeIcons($html); 1141ab45ba71SJames Collins $html = $this->parseContent($html); 1142ab45ba71SJames Collins 1143ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 1144ab45ba71SJames Collins 11459cff245bSJames Collins if ($this->getConf('heroTitle') === false) { 11469cff245bSJames Collins $html = '<div class="mikio-tags"></div>' . $html; 11479cff245bSJames Collins } 1148a8eebd82SJames Collins 1149a8eebd82SJames Collins $html = '<div class="mikio-article-content">' . $html . '</div>'; 1150a8eebd82SJames Collins 11519cff245bSJames Collins if ($print === true) { 11529cff245bSJames Collins echo $html; 11539cff245bSJames Collins } 1154ab45ba71SJames Collins return $html; 1155ab45ba71SJames Collins } 1156ab45ba71SJames Collins 1157a8eebd82SJames Collins /** 1158ab45ba71SJames Collins * Print or return footer 1159ab45ba71SJames Collins * 11609cff245bSJames Collins * @param boolean $print Print footer. 11619cff245bSJames Collins * @return string HTML string containing footer 1162ab45ba71SJames Collins */ 11639cff245bSJames Collins public function includeFooter(bool $print = true) 116410b40067Snomadjimbob { 1165ab45ba71SJames Collins global $ACT; 1166ab45ba71SJames Collins 1167ab45ba71SJames Collins $html = ''; 1168ab45ba71SJames Collins 1169ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 11709cff245bSJames Collins $html .= '<div class="doc">' . tpl_pageinfo(true) . '</div>'; 11719cff245bSJames Collins $html .= $this->includePage('footer', false); 1172ab45ba71SJames Collins 1173a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('footerCustomMenuText')); 1174ab45ba71SJames Collins 11759cff245bSJames Collins if ($this->getConf('footerSearch') === true) { 1176ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 11779cff245bSJames Collins $html .= $this->includeSearch(false); 1178ab45ba71SJames Collins $html .= '</div>'; 1179ab45ba71SJames Collins } 1180ab45ba71SJames Collins 1181a8eebd82SJames Collins $showPageTools = $this->getConf('pageToolsFooter'); 11829cff245bSJames Collins if ( 11833a385f2cSJames Collins strcasecmp($ACT, 'show') === 0 && (strcasecmp($showPageTools, 'always') === 0 || 11843a385f2cSJames Collins $this->userCanEdit() === true && strcasecmp($showPageTools, 'page editors') === 0) 11859cff245bSJames Collins ) { 11869cff245bSJames Collins $html .= $this->includePageTools(false); 11879cff245bSJames Collins } 1188ab45ba71SJames Collins 11899cff245bSJames Collins $meta['licenseType'] = ['multichoice', '_choices' => ['none', 'badge', 'button']]; 11909cff245bSJames Collins $meta['licenseImageOnly'] = ['onoff']; 1191ab45ba71SJames Collins 1192ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 11939cff245bSJames Collins if ($licenseType !== 'none') { 11949cff245bSJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), true, true); 1195ab45ba71SJames Collins } 1196ab45ba71SJames Collins 1197ab45ba71SJames Collins $html .= '</footer>'; 1198ab45ba71SJames Collins 11999cff245bSJames Collins if ($print === true) { 12009cff245bSJames Collins echo $html; 12019cff245bSJames Collins } 1202ab45ba71SJames Collins return $html; 1203ab45ba71SJames Collins } 1204ab45ba71SJames Collins 1205ab45ba71SJames Collins 1206a8eebd82SJames Collins /** 1207ab45ba71SJames Collins * Print or return breadcrumb trail 1208ab45ba71SJames Collins * 12099cff245bSJames Collins * @param boolean $print Print out trail. 12109cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12119cff245bSJames Collins * @return string HTML string containing breadcrumbs 1212ab45ba71SJames Collins */ 12139cff245bSJames Collins public function includeBreadcrumbs(bool $print = true, bool $parse = true) 121410b40067Snomadjimbob { 1215a8eebd82SJames Collins global $conf, $ID, $lang, $ACT; 1216a8eebd82SJames Collins 12173a385f2cSJames Collins if ( 12183a385f2cSJames Collins $this->getConf('breadcrumbHideHome') === true && strcasecmp($ID, 'start') === 0 && 121995372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['breadcrumbs'] === 0 12203a385f2cSJames Collins ) { 12219cff245bSJames Collins return ''; 12229cff245bSJames Collins } 1223ab45ba71SJames Collins 1224ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 1225f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 12263a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 122795372bffSJames Collins if ($conf['breadcrumbs'] !== 0) { 12289cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === false && $this->getConf('breadcrumbSep') === false) { 1229ab45ba71SJames Collins ob_start(); 123075adba86SJames Collins tpl_breadcrumbs(); 1231ab45ba71SJames Collins $html .= ob_get_contents(); 1232ab45ba71SJames Collins ob_end_clean(); 1233ab45ba71SJames Collins } else { 1234ab45ba71SJames Collins $sep = '•'; 1235ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 1236ab45ba71SJames Collins 12379cff245bSJames Collins if ($this->getConf('breadcrumbSep') === true) { 1238ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 12399cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-sep', false); 1240ab45ba71SJames Collins 12419cff245bSJames Collins if ($img !== false) { 1242ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1243ab45ba71SJames Collins } 124447161538SJames Collins } 124547161538SJames Collins 12469cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === true) { 1247ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 12489cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-prefix', false); 1249ab45ba71SJames Collins 12509cff245bSJames Collins if ($img !== false) { 1251ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 1252ab45ba71SJames Collins } 1253ab45ba71SJames Collins } 1254ab45ba71SJames Collins 1255ab45ba71SJames Collins $crumbs = breadcrumbs(); 1256ab45ba71SJames Collins 1257ab45ba71SJames Collins $html .= '<ul>'; 12583a385f2cSJames Collins if (empty($prefix) === false) { 12599cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 12609cff245bSJames Collins } 1261ab45ba71SJames Collins 1262ab45ba71SJames Collins $last = count($crumbs); 1263ab45ba71SJames Collins $i = 0; 1264ab45ba71SJames Collins foreach ($crumbs as $id => $name) { 1265ab45ba71SJames Collins $i++; 126695372bffSJames Collins if ($i !== 1) { 1267ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 126895372bffSJames Collins } 12699cff245bSJames Collins $html .= '<li' . ($i === $last ? ' class="curid"' : '') . '>'; 12709cff245bSJames Collins $html .= tpl_pagelink($id, null, true); 1271ab45ba71SJames Collins $html .= '</li>'; 1272ab45ba71SJames Collins } 1273ab45ba71SJames Collins 1274ab45ba71SJames Collins $html .= '</ul>'; 12759cff245bSJames Collins }//end if 12769cff245bSJames Collins }//end if 12779cff245bSJames Collins }//end if 12783d11a778SJames Collins 12793d11a778SJames Collins $html .= '</div>'; 12803d11a778SJames Collins $html .= '</div>'; 12813d11a778SJames Collins 12829cff245bSJames Collins if ($parse === true) { 12839cff245bSJames Collins $html = $this->includeIcons($html); 12849cff245bSJames Collins } 12859cff245bSJames Collins if ($print === true) { 12869cff245bSJames Collins echo $html; 12879cff245bSJames Collins } 12883d11a778SJames Collins return $html; 12893d11a778SJames Collins } 12903d11a778SJames Collins 12913d11a778SJames Collins /** 12923d11a778SJames Collins * Print or return you are here trail 12933d11a778SJames Collins * 12949cff245bSJames Collins * @param boolean $print Print out trail. 12959cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12969cff245bSJames Collins * @return string HTML string containing breadcrumbs 12973d11a778SJames Collins */ 12989cff245bSJames Collins public function includeYouAreHere(bool $print = true, bool $parse = true) 12993d11a778SJames Collins { 13003d11a778SJames Collins global $conf, $ID, $lang, $ACT; 13013d11a778SJames Collins 13023a385f2cSJames Collins if ( 13033a385f2cSJames Collins $this->getConf('youarehereHideHome') === true && strcasecmp($ID, 'start') === 0 && 130495372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['youarehere'] === 0 13053a385f2cSJames Collins ) { 13069cff245bSJames Collins return ''; 13079cff245bSJames Collins } 13083d11a778SJames Collins 13093d11a778SJames Collins $html = '<div class="mikio-youarehere">'; 13103d11a778SJames Collins $html .= '<div class="mikio-container">'; 13113a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 131295372bffSJames Collins if ($conf['youarehere'] !== 0) { 13139cff245bSJames Collins if ($this->getConf('youareherePrefix') === false && $this->getConf('youarehereSep') === false) { 131495372bffSJames Collins $html .= '<div class="mikio-bcdw">'; 1315ab45ba71SJames Collins ob_start(); 131675adba86SJames Collins tpl_youarehere(); 1317ab45ba71SJames Collins $html .= ob_get_contents(); 1318ab45ba71SJames Collins ob_end_clean(); 131995372bffSJames Collins $html .= '</div>'; 1320ab45ba71SJames Collins } else { 1321ab45ba71SJames Collins $sep = ' » '; 1322ab45ba71SJames Collins $prefix = $lang['youarehere']; 1323ab45ba71SJames Collins 13249cff245bSJames Collins if ($this->getConf('youarehereSep') === true) { 13253d11a778SJames Collins $sep = $this->getConf('youarehereSepText'); 13269cff245bSJames Collins $img = $this->getMediaFile('youarehere-sep', false); 1327ab45ba71SJames Collins 13289cff245bSJames Collins if ($img !== false) { 1329ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1330ab45ba71SJames Collins } 133175adba86SJames Collins } 133275adba86SJames Collins 13339cff245bSJames Collins if ($this->getConf('youareherePrefix') === true) { 13343d11a778SJames Collins $prefix = $this->getConf('youareherePrefixText'); 13359cff245bSJames Collins $img = $this->getMediaFile('youarehere-prefix', false); 1336ab45ba71SJames Collins 13379cff245bSJames Collins if ($img !== false) { 1338ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 133975adba86SJames Collins } 134047161538SJames Collins } 134147161538SJames Collins 1342ab45ba71SJames Collins $html .= '<ul>'; 13433a385f2cSJames Collins if (empty($prefix) === false) { 13449cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 13459cff245bSJames Collins } 13469cff245bSJames Collins $html .= '<li>' . tpl_pagelink(':' . $conf['start'], null, true) . '</li>'; 1347ab45ba71SJames Collins 1348ab45ba71SJames Collins $parts = explode(':', $ID); 1349ab45ba71SJames Collins $count = count($parts); 1350ab45ba71SJames Collins 1351ab45ba71SJames Collins $part = ''; 13529cff245bSJames Collins for ($i = 0; $i < ($count - 1); $i++) { 1353ab45ba71SJames Collins $part .= $parts[$i] . ':'; 1354ab45ba71SJames Collins $page = $part; 13559cff245bSJames Collins if ($page === $conf['start']) { 13569cff245bSJames Collins continue; 13579cff245bSJames Collins } 1358ab45ba71SJames Collins 1359ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13609cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1361ab45ba71SJames Collins } 1362ab45ba71SJames Collins 1363ab45ba71SJames Collins resolve_pageid('', $page, $exists); 13649cff245bSJames Collins if ((isset($page) === true && $page === $part . $parts[$i]) === false) { 1365ab45ba71SJames Collins $page = $part . $parts[$i]; 13669cff245bSJames Collins if ($page !== $conf['start']) { 1367ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13689cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1369ab45ba71SJames Collins } 1370ab45ba71SJames Collins } 1371ab45ba71SJames Collins 1372ab45ba71SJames Collins $html .= '</ul>'; 13739cff245bSJames Collins }//end if 13749cff245bSJames Collins }//end if 1375ab45ba71SJames Collins 13763d11a778SJames Collins $showLast = $this->getConf('youarehereShowLast'); 13779cff245bSJames Collins if ($showLast !== 0) { 1378a8eebd82SJames Collins preg_match_all('/(<li[^>]*>.+?<\/li>)/', $html, $matches); 13799cff245bSJames Collins if (count($matches) > 0 && count($matches[0]) > (($showLast * 2) + 2)) { 1380a8eebd82SJames Collins $count = count($matches[0]); 1381a8eebd82SJames Collins $list = ''; 1382a8eebd82SJames Collins 1383a8eebd82SJames Collins // Show Home 1384a8eebd82SJames Collins $list .= $matches[0][0] . $matches[0][1]; 1385a8eebd82SJames Collins 1386a8eebd82SJames Collins $list .= '<li>...</li>'; 13879cff245bSJames Collins for ($i = ($count - ($showLast * 2)); $i <= $count; $i++) { 1388a8eebd82SJames Collins $list .= $matches[0][$i]; 1389a8eebd82SJames Collins } 1390a8eebd82SJames Collins 1391a8eebd82SJames Collins $html = preg_replace('/<ul>.*<\/ul>/', '<ul>' . $list . '</ul>', $html); 1392a8eebd82SJames Collins } 1393a8eebd82SJames Collins } 1394a8eebd82SJames Collins 13953d11a778SJames Collins switch ($this->getConf('youarehereHome')) { 1396a8eebd82SJames Collins case 'none': 1397a8eebd82SJames Collins $html = preg_replace('/<li[^>]*>.+?<\/li>/', '', $html, 2); 1398a8eebd82SJames Collins break; 1399a8eebd82SJames Collins case 'home': 1400a8eebd82SJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . tpl_getlang('home') . '$3', $html, 1); 1401a8eebd82SJames Collins break; 1402a8eebd82SJames Collins case 'icon': 14039cff245bSJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . 14049cff245bSJames Collins $this->mikioInlineIcon('home') . '$3', $html, 1); 1405a8eebd82SJames Collins break; 1406a8eebd82SJames Collins } 1407a8eebd82SJames Collins } else { 1408a8eebd82SJames Collins $html .= '≪ '; 14099cff245bSJames Collins if (isset($_GET['page']) === true) { 14109cff245bSJames Collins $html .= '<a href="' . wl($ID, ['do' => $ACT]) . '">Back</a> / '; 1411a8eebd82SJames Collins } 14124057121fSJames Collins $html .= '<a href="' . wl($ID) . '">View Page</a>'; 14139cff245bSJames Collins }//end if 14149cff245bSJames Collins 14159cff245bSJames Collins $html .= '</div>'; 14169cff245bSJames Collins $html .= '</div>'; 14179cff245bSJames Collins 14189cff245bSJames Collins if ($parse === true) { 14199cff245bSJames Collins $html = $this->includeIcons($html); 1420a8eebd82SJames Collins } 14219cff245bSJames Collins if ($print === true) { 14229cff245bSJames Collins echo $html; 14239cff245bSJames Collins } 1424ab45ba71SJames Collins return $html; 1425ab45ba71SJames Collins } 1426ab45ba71SJames Collins 14271785fc73SJames Collins /** 14281785fc73SJames Collins * Get Page Title 14299cff245bSJames Collins * 14309cff245bSJames Collins * @return string page title 14311785fc73SJames Collins */ 143210b40067Snomadjimbob public function parsePageTitle() 143310b40067Snomadjimbob { 14342060e56cSJames Collins global $ID; 14352060e56cSJames Collins 14362060e56cSJames Collins $title = p_get_first_heading($ID); 14379cff245bSJames Collins if (strlen($title) <= 0) { 14389cff245bSJames Collins $title = tpl_pagetitle(null, true); 14399cff245bSJames Collins } 14401785fc73SJames Collins $title = $this->includeIcons($title); 14411785fc73SJames Collins 14421785fc73SJames Collins return $title; 14431785fc73SJames Collins } 14441785fc73SJames Collins 1445ab45ba71SJames Collins 144675adba86SJames Collins /** 1447a8eebd82SJames Collins * Print or return hero block 144875adba86SJames Collins * 14499cff245bSJames Collins * @param boolean $print Print content. 1450a8eebd82SJames Collins * @return string contents of hero 145175adba86SJames Collins */ 14529cff245bSJames Collins public function includeHero(bool $print = true) 145310b40067Snomadjimbob { 1454a8eebd82SJames Collins $html = ''; 145547161538SJames Collins 14569cff245bSJames Collins if ($this->getConf('heroTitle') === true) { 1457a8eebd82SJames Collins $html .= '<div class="mikio-hero">'; 1458f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 1459a8eebd82SJames Collins $html .= '<div class="mikio-hero-text">'; 14603a385f2cSJames Collins if (strcasecmp($this->getConf('youareherePosition'), 'hero') === 0) { 14619cff245bSJames Collins $html .= $this->includeYouAreHere(false); 14629cff245bSJames Collins } 14633a385f2cSJames Collins if (strcasecmp($this->getConf('breadcrumbPosition'), 'hero') === 0) { 14649cff245bSJames Collins $html .= $this->includeBreadcrumbs(false); 14659cff245bSJames Collins } 1466ab45ba71SJames Collins 1467a8eebd82SJames Collins $html .= '<h1 class="mikio-hero-title">'; 14681785fc73SJames Collins $html .= $this->parsePageTitle(); // No idea why this requires a blank space afterwards to work? 1469a8eebd82SJames Collins $html .= '</h1>'; 1470a8eebd82SJames Collins $html .= '<h2 class="mikio-hero-subtitle"></h2>'; 1471a8eebd82SJames Collins $html .= '</div>'; 147247161538SJames Collins 14739cff245bSJames Collins $hero_image = $this->getMediaFile('hero', true, $this->getConf('heroImagePropagation', true)); 1474a8eebd82SJames Collins $hero_image_resize_class = ''; 14753a385f2cSJames Collins if (empty($hero_image) === false) { 1476a8eebd82SJames Collins $hero_image = ' style="background-image:url(\'' . $hero_image . '\');"'; 1477a8eebd82SJames Collins $hero_image_resize_class = ' mikio-hero-image-resize'; 147847161538SJames Collins } 1479a8eebd82SJames Collins 14809cff245bSJames Collins $html .= '<div class="mikio-hero-image' . $hero_image_resize_class . '"' . $hero_image . 14819cff245bSJames Collins '><div class="mikio-tags"></div></div>'; 1482a8eebd82SJames Collins 1483a8eebd82SJames Collins $html .= '</div>'; 1484f8039bf2SJames Collins $html .= '</div>'; 14859cff245bSJames Collins }//end if 14869cff245bSJames Collins 14879cff245bSJames Collins if ($print === true) { 14889cff245bSJames Collins echo $html; 148975adba86SJames Collins } 1490a8eebd82SJames Collins 1491a8eebd82SJames Collins return $html; 149275adba86SJames Collins } 149375adba86SJames Collins 149475adba86SJames Collins 149575adba86SJames Collins /** 1496a8eebd82SJames Collins * Print or return out TOC 149775adba86SJames Collins * 14989cff245bSJames Collins * @param boolean $print Print TOC. 14999cff245bSJames Collins * @param boolean $parse Parse icons. 1500a8eebd82SJames Collins * @return string contents of TOC 150175adba86SJames Collins */ 15029cff245bSJames Collins public function includeTOC(bool $print = true, bool $parse = true) 150310b40067Snomadjimbob { 1504ab45ba71SJames Collins $html = ''; 15052b4583abSJames Collins 1506ab45ba71SJames Collins $tocHtml = tpl_toc(true); 1507ab45ba71SJames Collins 15083a385f2cSJames Collins if (empty($tocHtml) === false) { 1509f65a4e5eSJames Collins $tocHtml = preg_replace( 1510f65a4e5eSJames Collins '/(<h3.+?toggle.+?>)(.+?)<\/h3>/', 1511f65a4e5eSJames Collins '$1' . 1512f65a4e5eSJames Collins $this->mikioInlineIcon('hamburger', 'hamburger') . '$2' . 1513f65a4e5eSJames Collins $this->mikioInlineIcon('down-arrow', 'down-arrow') . '</h3>', 1514f65a4e5eSJames Collins $tocHtml 1515f65a4e5eSJames Collins ); 1516ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 1517a8eebd82SJames Collins $tocHtml = preg_replace('/<ul.*>\s*<\/ul>\s*/', '', $tocHtml); 1518ab45ba71SJames Collins 1519ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 1520ab45ba71SJames Collins $html .= $tocHtml; 1521ab45ba71SJames Collins $html .= '</div>'; 15222b4583abSJames Collins } 15232b4583abSJames Collins 15249cff245bSJames Collins if ($parse === true) { 15259cff245bSJames Collins $html = $this->includeIcons($html); 15269cff245bSJames Collins } 15279cff245bSJames Collins 15289cff245bSJames Collins if ($print === true) { 1529ab45ba71SJames Collins echo $html; 1530ab45ba71SJames Collins } 1531ab45ba71SJames Collins 15329cff245bSJames Collins return $html; 15339cff245bSJames Collins } 15349cff245bSJames Collins 1535ab45ba71SJames Collins 1536a8eebd82SJames Collins /** 1537ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 1538ab45ba71SJames Collins * 15399cff245bSJames Collins * @param string $str Content to parse. 1540ab45ba71SJames Collins * @return string parsed string 1541ab45ba71SJames Collins */ 15429cff245bSJames Collins public function includeIcons(string $str) 154310b40067Snomadjimbob { 1544ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 1545ab45ba71SJames Collins 1546ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 15473a385f2cSJames Collins if (empty($iconTag) === true) { 15489cff245bSJames Collins return $str; 15499cff245bSJames Collins } 1550ab45ba71SJames Collins 15519cff245bSJames Collins if ( 15529cff245bSJames Collins in_array($ACT, ['show', 'showtag', 'revisions', 'index', 'preview']) === true || 15533a385f2cSJames Collins strcasecmp($ACT, 'admin') === 0 && count($MIKIO_ICONS) > 0 15549cff245bSJames Collins ) { 1555a2005a27SJames Collins $content = $str; 1556a2005a27SJames Collins $preview = null; 1557a2005a27SJames Collins 15583a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15599cff245bSJames Collins $html = new \simple_html_dom(); 1560a2005a27SJames Collins $html->stripRNAttrValues = false; 1561a2005a27SJames Collins $html->load($str, true, false); 1562a2005a27SJames Collins 1563a2005a27SJames Collins $preview = $html->find('div.preview'); 15649cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1565a2005a27SJames Collins $content = $preview[0]->innertext; 1566a2005a27SJames Collins } 1567a2005a27SJames Collins } 1568a2005a27SJames Collins 15691785fc73SJames Collins $page_regex = '/(.*)/'; 15709cff245bSJames Collins if (stripos($str, '<pre') !== false) { 15711785fc73SJames Collins $page_regex = '/<(?!pre|\/).*?>(.*)[^<]*/'; 15721785fc73SJames Collins } 15731785fc73SJames Collins 15741785fc73SJames Collins $content = preg_replace_callback($page_regex, function ($icons) { 1575a2005a27SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 1576a2005a27SJames Collins 157710b40067Snomadjimbob return preg_replace_callback( 157810b40067Snomadjimbob '/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 1579ab45ba71SJames Collins function ($matches) { 1580ab45ba71SJames Collins global $MIKIO_ICONS; 1581ab45ba71SJames Collins 1582ab45ba71SJames Collins $s = $matches[0]; 1583ab45ba71SJames Collins 1584ab45ba71SJames Collins if (count($MIKIO_ICONS) > 0) { 1585ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 1586ab45ba71SJames Collins 1587ab45ba71SJames Collins if (count($matches) > 1) { 1588ab45ba71SJames Collins $e = explode(' ', $matches[1]); 1589ab45ba71SJames Collins 1590ab45ba71SJames Collins if (count($e) > 1) { 1591ab45ba71SJames Collins foreach ($MIKIO_ICONS as $iconItem) { 15929cff245bSJames Collins if (strcasecmp($iconItem['name'], $e[0]) === 0) { 1593ab45ba71SJames Collins $icon = $iconItem; 1594ab45ba71SJames Collins 1595ab45ba71SJames Collins $s = $icon['insert']; 1596ab45ba71SJames Collins for ($i = 1; $i < 9; $i++) { 15971cdedf28SJames Collins if (count($e) < $i || empty($e[$i]) === true) { 15989cff245bSJames Collins if (isset($icon['$' . $i]) === true) { 1599ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$' . $i], $s); 1600ab45ba71SJames Collins } 1601ab45ba71SJames Collins } else { 1602ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 1603ab45ba71SJames Collins } 1604ab45ba71SJames Collins } 1605ab45ba71SJames Collins 1606ab45ba71SJames Collins $dir = ''; 16079cff245bSJames Collins if (isset($icon['dir']) === true) { 16089cff245bSJames Collins $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 16099cff245bSJames Collins } 1610ab45ba71SJames Collins 1611ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 1612ab45ba71SJames Collins 1613ab45ba71SJames Collins break; 16149cff245bSJames Collins }//end if 16159cff245bSJames Collins }//end foreach 1616ab45ba71SJames Collins } else { 1617ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 16189cff245bSJames Collins }//end if 16199cff245bSJames Collins }//end if 16209cff245bSJames Collins }//end if 162175adba86SJames Collins 1622ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 16239cff245bSJames Collins if ($count === 0) { 1624ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 1625ab45ba71SJames Collins } 1626ab45ba71SJames Collins 1627ab45ba71SJames Collins return $s; 1628ab45ba71SJames Collins }, 162910b40067Snomadjimbob $icons[0] 163010b40067Snomadjimbob ); 1631a2005a27SJames Collins }, $content); 1632a2005a27SJames Collins 16333a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 16349cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1635a2005a27SJames Collins $preview[0]->innertext = $content; 1636a2005a27SJames Collins } 1637a2005a27SJames Collins 1638a2005a27SJames Collins $str = $html->save(); 1639a2005a27SJames Collins $html->clear(); 1640a2005a27SJames Collins unset($html); 1641a2005a27SJames Collins } else { 1642a2005a27SJames Collins $str = $content; 1643a2005a27SJames Collins } 16449cff245bSJames Collins }//end if 1645ab45ba71SJames Collins 1646ab45ba71SJames Collins return $str; 1647ab45ba71SJames Collins } 164847161538SJames Collins 1649c165b184SJames Collins /** 1650a8eebd82SJames Collins * Parse HTML for theme 1651c165b184SJames Collins * 16529cff245bSJames Collins * @param string $content HTML content to parse. 1653a8eebd82SJames Collins * @return string Parsed content 1654c165b184SJames Collins */ 16559cff245bSJames Collins public function parseContent(string $content) 165610b40067Snomadjimbob { 1657ab45ba71SJames Collins global $INPUT, $ACT; 1658ab45ba71SJames Collins 1659a8eebd82SJames Collins // Add Mikio Section titles 16603a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 16619cff245bSJames Collins $admin_sections = [ 1662ab45ba71SJames Collins // Section Insert Before Icon 16639cff245bSJames Collins 'navbar' => ['navbarUseTitleIcon', ''], 16649cff245bSJames Collins 'search' => ['searchButton', ''], 16659cff245bSJames Collins 'hero' => ['heroTitle', ''], 16669cff245bSJames Collins 'tags' => ['tagsConsolidate', ''], 16679cff245bSJames Collins 'breadcrumb' => ['breadcrumbHideHome', ''], 16689cff245bSJames Collins 'youarehere' => ['youarehereHideHome', ''], 16699cff245bSJames Collins 'sidebar' => ['sidebarShowLeft', ''], 16709cff245bSJames Collins 'toc' => ['tocFull', ''], 16719cff245bSJames Collins 'pagetools' => ['pageToolsFloating', ''], 16729cff245bSJames Collins 'footer' => ['footerCustomMenuText', ''], 16739cff245bSJames Collins 'license' => ['licenseType', ''], 16749cff245bSJames Collins 'acl' => ['includePageUseACL', ''], 16759cff245bSJames Collins 'sticky' => ['stickyTopHeader', ''], 16769cff245bSJames Collins ]; 1677ab45ba71SJames Collins 1678ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 1679ab45ba71SJames Collins $search = $items[0]; 1680ab45ba71SJames Collins $icon = $items[1]; 1681ab45ba71SJames Collins 168210b40067Snomadjimbob $content = preg_replace( 1683adf52ebbSJames Collins '/<tr(.*)>\s*<td class="label">\s*<span class="outkey">(tpl»mikio»' . $search . ')<\/span>/', 16849cff245bSJames Collins '<tr$1><td class="mikio-config-table-header" colspan="2">' . $this->mikioInlineIcon($icon) . 16859cff245bSJames Collins tpl_getLang('config_' . $section) . 16869cff245bSJames Collins '</td></tr><tr class="default"><td class="label"><span class="outkey">tpl»mikio»' . 16879cff245bSJames Collins $search . '</span>', 168810b40067Snomadjimbob $content 168910b40067Snomadjimbob ); 1690ab45ba71SJames Collins } 1691bb5a3dd1SJames Collins } elseif (strcasecmp($INPUT->str('page'), 'styling') === 0) { 1692ad182e6dSnomadjimbob $mikioPluginMissing = true; 1693ad182e6dSnomadjimbob /* Hide plugin fields if not installed */ 16949ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 1695ad182e6dSnomadjimbob $mikioPluginMissing = false; 1696ad182e6dSnomadjimbob } 1697ad182e6dSnomadjimbob 1698cee81679SJames Collins $style_headers = [ 1699f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__text_'], 1700f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__code_'], 1701f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__control_'], 1702f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__topheader_'], 1703f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__navbar_'], 1704f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__subnavbar_'], 1705f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__tag_background_color_'], 1706f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__breadcrumb_'], 1707f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__hero_'], 1708f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__sidebar_'], 1709f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__content_'], 1710f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__toc_'], 1711f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__pagetools_'], 1712f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__footer_'], 1713f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__table_'], 1714f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__dropdown_'], 1715f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__section_edit_'], 1716f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__tree_'], 1717f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__tab_'], 1718ad182e6dSnomadjimbob ['title' => 'Mikio Plugin', 'starts_with' => '__plugin_', 'heading' => 'h2', 17199ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17209ffe9161Snomadjimbob ], 1721ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_primary_', 'hidden' => $mikioPluginMissing], 1722ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_secondary_', 17239ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17249ffe9161Snomadjimbob ], 1725ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_success_', 'hidden' => $mikioPluginMissing], 1726ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_danger_', 'hidden' => $mikioPluginMissing], 1727ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_warning_', 'hidden' => $mikioPluginMissing], 1728ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_info_', 'hidden' => $mikioPluginMissing], 1729ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_light_', 'hidden' => $mikioPluginMissing], 1730ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_dark_', 'hidden' => $mikioPluginMissing], 1731ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_link_', 'hidden' => $mikioPluginMissing], 1732ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_carousel_', 'hidden' => $mikioPluginMissing], 1733ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_steps_', 'hidden' => $mikioPluginMissing], 1734ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_tabgroup_', 'hidden' => $mikioPluginMissing], 1735ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_tooltip_', 'hidden' => $mikioPluginMissing], 1736cee81679SJames Collins ['title' => 'Dark Mode', 'starts_with' => '__darkmode_', 'heading' => 'h2'], 1737f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__darkmode_text_'], 1738f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__darkmode_code_'], 1739f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__darkmode_control_'], 1740f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__darkmode_topheader_'], 1741f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__darkmode_navbar_'], 1742f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__darkmode_subnavbar_'], 1743f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__darkmode_tag_background_color_'], 1744f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__darkmode_breadcrumb_'], 1745f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__darkmode_hero_'], 1746f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__darkmode_sidebar_'], 1747f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__darkmode_content_'], 1748f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__darkmode_toc_'], 1749f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__darkmode_pagetools_'], 1750f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__darkmode_footer_'], 1751f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__darkmode_table_'], 1752f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__darkmode_dropdown_'], 1753f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__darkmode_section_edit_'], 1754f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__darkmode_tree_'], 1755f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__darkmode_tab_'], 1756ad182e6dSnomadjimbob ['title' => 'Mikio Plugin (Dark mode)', 'starts_with' => '__plugin_darkmode_', 'heading' => 'h2', 17579ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17589ffe9161Snomadjimbob ], 1759ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_darkmode_primary_', 17609ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17619ffe9161Snomadjimbob ], 1762ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_darkmode_secondary_', 17639ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17649ffe9161Snomadjimbob ], 1765ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_darkmode_success_', 17669ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17679ffe9161Snomadjimbob ], 1768ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_darkmode_danger_', 17699ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17709ffe9161Snomadjimbob ], 1771ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_darkmode_warning_', 17729ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17739ffe9161Snomadjimbob ], 1774ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_darkmode_info_', 17759ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17769ffe9161Snomadjimbob ], 1777ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_darkmode_light_', 17789ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17799ffe9161Snomadjimbob ], 1780ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_darkmode_dark_', 17819ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17829ffe9161Snomadjimbob ], 1783ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_darkmode_link_', 17849ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17859ffe9161Snomadjimbob ], 1786ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_darkmode_carousel_', 17879ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17889ffe9161Snomadjimbob ], 1789ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_darkmode_steps_', 'hidden' => $mikioPluginMissing], 1790ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_darkmode_tabgroup_', 17919ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17929ffe9161Snomadjimbob ], 1793ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_darkmode_tooltip_', 'hidden' => $mikioPluginMissing], 1794cee81679SJames Collins ]; 1795cee81679SJames Collins 1796cee81679SJames Collins foreach ($style_headers as $header) { 1797cee81679SJames Collins if (array_key_exists('heading', $header) === false) { 1798cee81679SJames Collins $header['heading'] = 'h3'; 1799cee81679SJames Collins } 1800cee81679SJames Collins 1801ad182e6dSnomadjimbob if (array_key_exists('hidden', $header) === false) { 1802ad182e6dSnomadjimbob $header['hidden'] = false; 1803ad182e6dSnomadjimbob } 1804ad182e6dSnomadjimbob 18051244e3ceSJames Collins $content = preg_replace( 1806f65a4e5eSJames Collins '/(<tr>\s*<td>\s*<label for="tpl__' . $header['starts_with'] . '.+?<\/tr>)/s', 18079ffe9161Snomadjimbob '</tbody></table><' . $header['heading'] . ' style="display:' . 18089ffe9161Snomadjimbob ($header['hidden'] === true ? 'none' : 'block') . '">' . 18099ffe9161Snomadjimbob $header['title'] . '</' . $header['heading'] . '> 1810ad182e6dSnomadjimbob <table style="display:' . ($header['hidden'] === true ? 'none' : 'table') . '"><tbody>$1', 18111244e3ceSJames Collins $content, 18121244e3ceSJames Collins 1 18131244e3ceSJames Collins ); 1814cee81679SJames Collins } 1815f65a4e5eSJames Collins 1816dea1f088SJames Collins $content = preg_replace_callback('/<input type="color"[^>]*>/', function ($match) { 1817dea1f088SJames Collins // Get the ID of the <input type="color"> element 1818dea1f088SJames Collins preg_match('/id="([^"]*)"/', $match[0], $matches); 1819dea1f088SJames Collins 1820dea1f088SJames Collins // Replace type with text and remove the id attribute 18212c87ab0dSJames Collins $replacement = preg_replace( 18222c87ab0dSJames Collins ['/type="color"/', '/id="([^"]*)"/'], 18232c87ab0dSJames Collins ['type="text" class="mikio-color-text-input"', 'for="$1"'], 18242c87ab0dSJames Collins $match[0] 18252c87ab0dSJames Collins ); 1826dea1f088SJames Collins 1827dea1f088SJames Collins return '<div class="mikio-color-picker">' . $replacement . $match[0] . '</div>'; 1828dea1f088SJames Collins }, $content); 1829bb5a3dd1SJames Collins }//end if 1830ab45ba71SJames Collins 18313a385f2cSJames Collins if (strcasecmp($ACT, 'admin') === 0 && isset($_GET['page']) === false) { 1832a8eebd82SJames Collins $content = preg_replace('/(<ul.*?>.*?)<\/ul>.*?<ul.*?>(.*?<\/ul>)/s', '$1$2', $content); 1833a8eebd82SJames Collins } 1834ab45ba71SJames Collins 1835a8eebd82SJames Collins // Page Revisions - Table Fix 18369cff245bSJames Collins if (strpos($content, 'id="page__revisions"') !== false) { 18379cff245bSJames Collins $content = preg_replace( 18389cff245bSJames Collins '/(<span class="sum">\s.*<\/span>\s.*<span class="user">\s.*<\/span>)/', 18399cff245bSJames Collins '<span>$1</span>', 18409cff245bSJames Collins $content 18419cff245bSJames Collins ); 1842a8eebd82SJames Collins } 1843ab45ba71SJames Collins 18449cff245bSJames Collins $html = new \simple_html_dom(); 1845bc1032d9SJames Collins $html->stripRNAttrValues = false; 1846c165b184SJames Collins $html->load($content, true, false); 1847c165b184SJames Collins 18489cff245bSJames Collins if ($html === false) { 18499cff245bSJames Collins return $content; 18509cff245bSJames Collins } 1851ab45ba71SJames Collins 1852ab45ba71SJames Collins /* Buttons */ 1853ab45ba71SJames Collins foreach ($html->find('#config__manager button') as $node) { 1854ab45ba71SJames Collins $c = explode(' ', $node->class); 18559cff245bSJames Collins if (in_array('mikio-button', $c) === false) { 18569cff245bSJames Collins $c[] = 'mikio-button'; 18579cff245bSJames Collins } 1858ab45ba71SJames Collins $node->class = implode(' ', $c); 1859c165b184SJames Collins } 1860c165b184SJames Collins 1861ab45ba71SJames Collins 1862ab45ba71SJames Collins /* Buttons - Primary */ 1863ab45ba71SJames Collins foreach ($html->find('#config__manager [type=submit]') as $node) { 1864ab45ba71SJames Collins $c = explode(' ', $node->class); 18659cff245bSJames Collins if (in_array('mikio-primary', $c) === false) { 18669cff245bSJames Collins $c[] = 'mikio-primary'; 18679cff245bSJames Collins } 1868ab45ba71SJames Collins $node->class = implode(' ', $c); 1869ab45ba71SJames Collins } 1870ab45ba71SJames Collins 1871a8eebd82SJames Collins /* Hide page title if hero is enabled */ 18729cff245bSJames Collins if ($this->getConf('heroTitle') === true && $ACT !== 'preview') { 18731785fc73SJames Collins $pageTitle = $this->parsePageTitle(); 187447161538SJames Collins 187547161538SJames Collins foreach ($html->find('h1,h2,h3,h4') as $elm) { 18769cff245bSJames Collins if ($elm->innertext === $pageTitle) { 1877a8eebd82SJames Collins // $elm->innertext = ''; 1878a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1879a8eebd82SJames Collins 188047161538SJames Collins break; 188147161538SJames Collins } 188247161538SJames Collins } 188347161538SJames Collins } 1884c165b184SJames Collins 1885a8eebd82SJames Collins /* Hero subtitle */ 18862b4583abSJames Collins foreach ($html->find('p') as $elm) { 1887d0d6c450SJames Collins if (preg_match('/[~-]~hero-subtitle (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1888d0d6c450SJames Collins $subtitle = $matches[1]; 1889a8eebd82SJames Collins $this->footerScript['hero-subtitle'] = 'mikio.setHeroSubTitle(\'' . $subtitle . '\')'; 1890a8eebd82SJames Collins 1891d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-subtitle (.+?)~[~-]/ui', '', $elm->innertext); 18922b4583abSJames Collins break; 18932b4583abSJames Collins } 18942b4583abSJames Collins } 18952b4583abSJames Collins 1896a8eebd82SJames Collins /* Hero image */ 1897a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1898a8eebd82SJames Collins $image = ''; 1899d0d6c450SJames Collins preg_match('/[~-]~hero-image (.+?)~[~-](?!.?")/ui', $elm->innertext, $matches); 1900a8eebd82SJames Collins if (count($matches) > 0) { 1901a8eebd82SJames Collins preg_match('/<img.*src="(.+?)"/ui', $matches[1], $imageTagMatches); 1902a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1903a8eebd82SJames Collins $image = $imageTagMatches[1]; 1904a8eebd82SJames Collins } else { 1905a8eebd82SJames Collins preg_match('/<a.+?>(.+?)[~<]/ui', $matches[1], $imageTagMatches); 1906a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1907a8eebd82SJames Collins $image = $imageTagMatches[1]; 1908a8eebd82SJames Collins } else { 1909a8eebd82SJames Collins $image = strip_tags($matches[1]); 19109cff245bSJames Collins if (stripos($image, ':') === false) { 19119cff245bSJames Collins $image = str_replace(['{', '}'], '', $image); 1912a8eebd82SJames Collins $i = stripos($image, '?'); 19139cff245bSJames Collins if ($i !== false) { 1914a8eebd82SJames Collins $image = substr($image, 0, $i); 1915c165b184SJames Collins } 1916c165b184SJames Collins 1917a8eebd82SJames Collins $image = ml($image, '', true, '', false); 1918ab45ba71SJames Collins } 1919ab45ba71SJames Collins } 1920ab45ba71SJames Collins } 1921ab45ba71SJames Collins 1922a8eebd82SJames Collins $this->footerScript['hero-image'] = 'mikio.setHeroImage(\'' . $image . '\')'; 1923a8eebd82SJames Collins 1924d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-image (.+?)~[~-].*/ui', '', $elm->innertext); 19259cff245bSJames Collins }//end if 19269cff245bSJames Collins }//end foreach 1927ab45ba71SJames Collins 19289cff245bSJames Collins /* Hero colors - ~~hero-colors [background-color] [hero-title-color] [hero-subtitle-color] 19299cff245bSJames Collins [breadcrumb-text-color] [breadcrumb-hover-color] (use 'initial' for original color) */ 1930a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1931d0d6c450SJames Collins if (preg_match('/[~-]~hero-colors (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1932d0d6c450SJames Collins $subtitle = $matches[1]; 1933d0d6c450SJames Collins $this->footerScript['hero-colors'] = 'mikio.setHeroColor(\'' . $subtitle . '\')'; 1934ab45ba71SJames Collins 1935d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-colors (.+?)~[~-]/ui', '', $elm->innertext); 1936a8eebd82SJames Collins break; 1937ab45ba71SJames Collins } 1938ab45ba71SJames Collins } 1939ab45ba71SJames Collins 194096ec8e1eSJames Collins /* Hide parts - ~~hide-parts [parts]~~ */ 194196ec8e1eSJames Collins foreach ($html->find('p') as $elm) { 19423a44a74aSJames Collins if (preg_match('/[~-]~hide-parts (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1943d0d6c450SJames Collins $parts = explode(' ', $matches[1]); 194496ec8e1eSJames Collins $script = ''; 194596ec8e1eSJames Collins 194696ec8e1eSJames Collins foreach ($parts as $part) { 194796ec8e1eSJames Collins if (strlen($part) > 0) { 194896ec8e1eSJames Collins $script .= 'mikio.hidePart(\'' . $part . '\');'; 194996ec8e1eSJames Collins } 195096ec8e1eSJames Collins } 195196ec8e1eSJames Collins 195296ec8e1eSJames Collins if (strlen($script) > 0) { 195396ec8e1eSJames Collins $this->footerScript['hide-parts'] = $script; 195496ec8e1eSJames Collins } 195596ec8e1eSJames Collins 19563a44a74aSJames Collins $elm->innertext = preg_replace('/[~-]~hide-parts (.+?)~[~-]/ui', '', $elm->innertext); 195796ec8e1eSJames Collins break; 1958d0d6c450SJames Collins } 19599cff245bSJames Collins }//end foreach 196096ec8e1eSJames Collins 196196ec8e1eSJames Collins 1962a8eebd82SJames Collins /* Page Tags (tag plugin) */ 19639cff245bSJames Collins if ($this->getConf('tagsConsolidate') === true) { 1964a8eebd82SJames Collins $tags = ''; 1965a8eebd82SJames Collins foreach ($html->find('div.tags a') as $elm) { 1966a8eebd82SJames Collins $tags .= $elm->outertext; 1967a8eebd82SJames Collins } 1968a8eebd82SJames Collins 1969a8eebd82SJames Collins foreach ($html->find('div.tags') as $elm) { 1970a8eebd82SJames Collins $elm->innertext = ''; 1971a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1972a8eebd82SJames Collins } 1973a8eebd82SJames Collins 19743a385f2cSJames Collins if (empty($tags) === false) { 1975a8eebd82SJames Collins $this->footerScript['tags'] = 'mikio.setTags(\'' . $tags . '\')'; 1976a8eebd82SJames Collins } 1977ab45ba71SJames Collins } 1978ab45ba71SJames Collins 1979ab45ba71SJames Collins // Configuration Manager 19803a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 1981ab45ba71SJames Collins // Additional save buttons 1982ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1983ab45ba71SJames Collins $saveButtons = ''; 1984ab45ba71SJames Collins 1985ab45ba71SJames Collins foreach ($cm->find('p') as $elm) { 1986ab45ba71SJames Collins $saveButtons = $elm->outertext; 1987a8eebd82SJames Collins $saveButtons = str_replace('<p>', '<p style="text-align:right">', $saveButtons); 1988ab45ba71SJames Collins $elm->outertext = ''; 1989ab45ba71SJames Collins } 1990ab45ba71SJames Collins 1991ab45ba71SJames Collins foreach ($cm->find('fieldset') as $elm) { 1992ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1993ab45ba71SJames Collins } 1994ab45ba71SJames Collins } 1995ab45ba71SJames Collins } 1996ab45ba71SJames Collins 1997ab45ba71SJames Collins $content = $html->save(); 1998c165b184SJames Collins $html->clear(); 1999c165b184SJames Collins unset($html); 2000c165b184SJames Collins 2001c165b184SJames Collins return $content; 2002c165b184SJames Collins } 20032b4583abSJames Collins 20042b4583abSJames Collins 2005a8eebd82SJames Collins /** 2006a8eebd82SJames Collins * Get DokuWiki namespace/page/URI as link 2007a8eebd82SJames Collins * 20089cff245bSJames Collins * @param string $str String to parse. 20099cff245bSJames Collins * @return string parsed URI 2010a8eebd82SJames Collins */ 20119cff245bSJames Collins public function getLink(string $str) 201210b40067Snomadjimbob { 20132b4583abSJames Collins $i = strpos($str, '://'); 20149cff245bSJames Collins if ($i !== false) { 20159cff245bSJames Collins return $str; 20169cff245bSJames Collins } 20172b4583abSJames Collins 20182b4583abSJames Collins return wl($str); 20192b4583abSJames Collins } 2020ab45ba71SJames Collins 2021ab45ba71SJames Collins 2022a8eebd82SJames Collins /** 2023a8eebd82SJames Collins * Check if the user can edit current namespace/page 2024a8eebd82SJames Collins * 2025a8eebd82SJames Collins * @return boolean user can edit 2026a8eebd82SJames Collins */ 202710b40067Snomadjimbob public function userCanEdit() 202810b40067Snomadjimbob { 2029ab45ba71SJames Collins global $INFO; 2030ab45ba71SJames Collins global $ID; 2031ab45ba71SJames Collins 2032ab45ba71SJames Collins $wiki_file = wikiFN($ID); 20339cff245bSJames Collins if (@file_exists($wiki_file) === false) { 20349cff245bSJames Collins return true; 20359cff245bSJames Collins } 20369cff245bSJames Collins if ($INFO['isadmin'] === true || $INFO['ismanager'] === true) { 20379cff245bSJames Collins return true; 20389cff245bSJames Collins } 2039a8eebd82SJames Collins // $meta_file = metaFN($ID, '.meta'); 20409cff245bSJames Collins if ($INFO['meta']['user'] === false) { 20419cff245bSJames Collins return true; 20429cff245bSJames Collins } 20439cff245bSJames Collins if ($INFO['client'] === $INFO['meta']['user']) { 20449cff245bSJames Collins return true; 20459cff245bSJames Collins } 2046ab45ba71SJames Collins 2047ab45ba71SJames Collins return false; 2048c165b184SJames Collins } 204947161538SJames Collins 205047161538SJames Collins 2051a8eebd82SJames Collins /** 2052a8eebd82SJames Collins * Search for and return the uri of a media file 2053a8eebd82SJames Collins * 20549cff245bSJames Collins * @param string $image Image name to search for (without extension). 20559cff245bSJames Collins * @param boolean $searchCurrentNS Search the current namespace. 20569cff245bSJames Collins * @param boolean $propagate Propagate search through the namespace. 20579cff245bSJames Collins * @return string URI of the found media file 2058a8eebd82SJames Collins */ 20599cff245bSJames Collins public function getMediaFile(string $image, bool $searchCurrentNS = true, bool $propagate = true) 206010b40067Snomadjimbob { 2061ab45ba71SJames Collins global $INFO; 2062a8eebd82SJames Collins 20639cff245bSJames Collins $ext = ['png', 'jpg', 'gif', 'svg']; 2064ab45ba71SJames Collins 20659cff245bSJames Collins if ($searchCurrentNS === true) { 20669cff245bSJames Collins $prefix[] = ':' . $INFO['namespace'] . ':'; 20679cff245bSJames Collins } 20689cff245bSJames Collins if ($propagate === true) { 2069ab45ba71SJames Collins $prefix[] = ':'; 2070ab45ba71SJames Collins $prefix[] = ':wiki:'; 2071a8eebd82SJames Collins } 2072ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 20733a385f2cSJames Collins if (empty($theme) === false) { 20749cff245bSJames Collins $prefix[] = 'themes/' . $theme . '/images/'; 20759cff245bSJames Collins } 2076ab45ba71SJames Collins $prefix[] = 'images/'; 2077ab45ba71SJames Collins 20789cff245bSJames Collins $search = []; 2079ab45ba71SJames Collins foreach ($prefix as $pitem) { 2080ab45ba71SJames Collins foreach ($ext as $eitem) { 2081ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 2082ab45ba71SJames Collins } 2083ab45ba71SJames Collins } 2084ab45ba71SJames Collins 2085ab45ba71SJames Collins $img = ''; 2086ab45ba71SJames Collins $file = ''; 2087ab45ba71SJames Collins $url = ''; 2088ab45ba71SJames Collins $ismedia = false; 2089ab45ba71SJames Collins $found = false; 2090ab45ba71SJames Collins 2091ab45ba71SJames Collins foreach ($search as $img) { 20923a385f2cSJames Collins if (strcasecmp(substr($img, 0, 1), ':') === 0) { 2093ab45ba71SJames Collins $file = mediaFN($img); 2094ab45ba71SJames Collins $ismedia = true; 2095ab45ba71SJames Collins } else { 2096ab45ba71SJames Collins $file = tpl_incdir() . $img; 2097ab45ba71SJames Collins $ismedia = false; 2098ab45ba71SJames Collins } 2099ab45ba71SJames Collins 21009cff245bSJames Collins if (file_exists($file) === true) { 2101ab45ba71SJames Collins $found = true; 2102ab45ba71SJames Collins break; 2103ab45ba71SJames Collins } 2104ab45ba71SJames Collins } 2105ab45ba71SJames Collins 21069cff245bSJames Collins if ($found === false) { 21079cff245bSJames Collins return false; 21089cff245bSJames Collins } 2109ab45ba71SJames Collins 21109cff245bSJames Collins if ($ismedia === true) { 2111ab45ba71SJames Collins $url = ml($img, '', true, '', false); 2112ab45ba71SJames Collins } else { 2113ab45ba71SJames Collins $url = tpl_basedir() . $img; 2114ab45ba71SJames Collins } 2115ab45ba71SJames Collins 2116ab45ba71SJames Collins return $url; 2117ab45ba71SJames Collins } 2118ab45ba71SJames Collins 2119a8eebd82SJames Collins 2120a8eebd82SJames Collins /** 2121ab45ba71SJames Collins * Print or return the page title 2122ab45ba71SJames Collins * 21239cff245bSJames Collins * @param string $page Page id or empty string for current page. 2124ab45ba71SJames Collins * @return string generated content 2125ab45ba71SJames Collins */ 21269cff245bSJames Collins public function getPageTitle(string $page = '') 212710b40067Snomadjimbob { 2128ab45ba71SJames Collins global $ID, $conf; 2129ab45ba71SJames Collins 2130ab45ba71SJames Collins $html = ''; 2131ab45ba71SJames Collins 21323a385f2cSJames Collins if (empty($page) === true) { 21339cff245bSJames Collins $page = $ID; 21349cff245bSJames Collins } 2135ab45ba71SJames Collins 2136ab45ba71SJames Collins $html = p_get_first_heading($page); 2137ab45ba71SJames Collins $html = strip_tags($html); 2138ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 2139ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 2140ab45ba71SJames Collins $html = trim($html); 2141ab45ba71SJames Collins 2142ab45ba71SJames Collins return $html; 2143ab45ba71SJames Collins } 2144a8eebd82SJames Collins 2145a8eebd82SJames Collins 2146a8eebd82SJames Collins /** 2147a8eebd82SJames Collins * Return inline theme icon 2148a8eebd82SJames Collins * 21499cff245bSJames Collins * @param string $type Icon to retreive. 21509e41d878SJames Collins * @param string $class Classname to insert. 21519cff245bSJames Collins * @return string HTML icon content 2152a8eebd82SJames Collins */ 21539e41d878SJames Collins public function mikioInlineIcon(string $type, string $class = "") 215410b40067Snomadjimbob { 21559e41d878SJames Collins if (is_array($class) === true) { 21569e41d878SJames Collins $class = explode(' ', $class); 21579e41d878SJames Collins } 21589e41d878SJames Collins 21599e41d878SJames Collins if (strlen($class) > 0) { 21609e41d878SJames Collins $class = ' ' . $class; 21619e41d878SJames Collins } 21629e41d878SJames Collins 2163a8eebd82SJames Collins switch ($type) { 2164a8eebd82SJames Collins case 'wrench': 2165906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 -256 1792 2166906e1a13SJames 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, 2167906e1a13SJames 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, 2168906e1a13SJames 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, 2169906e1a13SJames 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 2170906e1a13SJames 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, 2171906e1a13SJames 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>'; 2172a8eebd82SJames Collins case 'file': 2173906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2174906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,235.38983,1277.8305)" id="g2991"> 2175906e1a13SJames 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 2176906e1a13SJames 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 2177906e1a13SJames 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" 21789cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 2179a8eebd82SJames Collins case 'gear': 2180906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2181906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,121.49153,1285.4237)" id="g3027"> 2182906e1a13SJames 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 2183906e1a13SJames 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 2184906e1a13SJames 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 2185906e1a13SJames 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 2186906e1a13SJames 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 2187906e1a13SJames 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, 2188906e1a13SJames 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 2189906e1a13SJames 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 2190906e1a13SJames 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" /> 2191906e1a13SJames Collins</g></svg>'; 2192a8eebd82SJames Collins case 'user': 2193906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2194906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,197.42373,1300.6102)"><path d="M 2195906e1a13SJames 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 2196906e1a13SJames 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, 2197906e1a13SJames 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 2198906e1a13SJames 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 2199906e1a13SJames 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, 2200906e1a13SJames Collins1408 863,1408 975.5,1295.5 1088,1183 1088,1024 z"/></g></svg>'; 2201a8eebd82SJames Collins case 'search': 22029e41d878SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 22039cff245bSJames 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 22049cff245bSJames 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 22059cff245bSJames 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 22069cff245bSJames Collins6.195 0 0 1-6.188 6.188z"/></svg>'; 2207a8eebd82SJames Collins case 'home': 2208906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2209906e1a13SJames CollinsviewBox="0 -256 1792 1792" aria-hidden="true" style="fill:currentColor"><g 2210906e1a13SJames 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 2211906e1a13SJames 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 2212906e1a13SJames 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 2213906e1a13SJames 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, 2214906e1a13SJames 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" 22159cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 22169e41d878SJames Collins case 'sun': 2217906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2218906e1a13SJames 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 2219906e1a13SJames 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 2220906e1a13SJames 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 2221906e1a13SJames 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 2222906e1a13SJames Collins0 0 1-.707.707z" /></svg>'; 22239e41d878SJames Collins case 'moon': 2224906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2225906e1a13SJames 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 2226906e1a13SJames 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 2227906e1a13SJames 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 2228906e1a13SJames 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 2229906e1a13SJames Collins0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286z" /></svg>'; 223034d5f19aSJames Collins case 'sunmoon': 2231d0fba6d1SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2232d0fba6d1SJames Collinsstyle="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" 2233d0fba6d1SJames 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 2234d0fba6d1SJames 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" 2235d0fba6d1SJames 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, 2236d0fba6d1SJames 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>'; 2237f65a4e5eSJames Collins case 'hamburger': 2238f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" 2239f65a4e5eSJames 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 2240f65a4e5eSJames 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 2241f65a4e5eSJames 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 2242f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16z"/></svg>'; 2243f65a4e5eSJames Collins case 'down-arrow': 2244f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 2245f65a4e5eSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M16.003 18.626l7.081-7.081L25 13.46l-8.997 8.998-9.003-9 2246f65a4e5eSJames Collins1.917-1.916z"/></svg>'; 22473a3ece10SJames Collins case 'language': 22483a3ece10SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" width="16" 22493a3ece10SJames Collinsheight="16" fill="currentColor" viewBox="0 0 16 16"><path d="M4.545 6.714 4.11 22503a3ece10SJames 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 22513a3ece10SJames 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 22523a3ece10SJames 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 22533a3ece10SJames 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 22543a3ece10SJames Collins1.472.133-.254.414-.673.629-.89-1.125-.253-2.057-.694-2.82-1.284.681-.747 1.222-1.651 22553a3ece10SJames 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"/> 22563a3ece10SJames Collins</svg>'; 22579cff245bSJames Collins }//end switch 2258ab45ba71SJames Collins 2259a8eebd82SJames Collins return ''; 2260a8eebd82SJames Collins } 2261ab45ba71SJames Collins 2262a8eebd82SJames Collins /** 2263a8eebd82SJames Collins * Finalize theme 22649cff245bSJames Collins * 22659cff245bSJames Collins * @return void 2266a8eebd82SJames Collins */ 226710b40067Snomadjimbob public function finalize() 226810b40067Snomadjimbob { 2269a8eebd82SJames Collins } 22701785fc73SJames Collins 22711785fc73SJames Collins /** 22721785fc73SJames Collins * Show Messages 22739cff245bSJames Collins * 22749cff245bSJames Collins * @return void 22751785fc73SJames Collins */ 227610b40067Snomadjimbob public function showMessages() 227710b40067Snomadjimbob { 22781785fc73SJames Collins global $ACT; 22791785fc73SJames Collins 22809cff245bSJames Collins if ($this->lessIgnored === true) { 22819cff245bSJames Collins msg( 22829cff245bSJames Collins 'useLESS is enabled on the Mikio template, however is not supported on this server', 22839cff245bSJames Collins 2, 22849cff245bSJames Collins '', 22859cff245bSJames Collins '', 22869cff245bSJames Collins MSG_ADMINS_ONLY 22879cff245bSJames Collins ); 2288a8df40efSJames Collins } 2289a8df40efSJames Collins 22901785fc73SJames Collins $show = $this->getConf('showNotifications'); 22913a385f2cSJames Collins if ( 22924f8225e4SJames Collins strlen($show) === 0 || 22933a385f2cSJames Collins strcasecmp($show, 'always') === 0 || 22943a385f2cSJames Collins (strcasecmp($show, 'admin') === 0 && strcasecmp($ACT, 'admin') === 0) 22953a385f2cSJames Collins ) { 22961785fc73SJames Collins global $MSG, $MSG_shown; 22971785fc73SJames Collins 22984f8225e4SJames Collins if (isset($MSG) !== false) { 22999cff245bSJames Collins if (isset($MSG_shown) === false) { 23009cff245bSJames Collins $MSG_shown = []; 2301a8df40efSJames Collins } 23021785fc73SJames Collins 23031785fc73SJames Collins foreach ($MSG as $msg) { 23041785fc73SJames Collins $hash = md5($msg['msg']); 23059cff245bSJames Collins if (isset($MSG_shown[$hash]) === true) { 23061785fc73SJames Collins continue; 23071785fc73SJames Collins } 23081785fc73SJames Collins // skip double messages 23091785fc73SJames Collins 23109cff245bSJames Collins if (info_msg_allowed($msg) === true) { 23119cff245bSJames Collins echo '<div class="' . $msg['lvl'] . '">'; 23129cff245bSJames Collins echo $msg['msg']; 23139cff245bSJames Collins echo '</div>'; 23141785fc73SJames Collins } 23151785fc73SJames Collins 2316a8df40efSJames Collins $MSG_shown[$hash] = true; 23171785fc73SJames Collins } 23181785fc73SJames Collins 23191785fc73SJames Collins unset($GLOBALS['MSG']); 23209cff245bSJames Collins }//end if 23214f8225e4SJames Collins 23224f8225e4SJames Collins if (strlen($this->includedPageNotifications) > 0) { 23234f8225e4SJames Collins echo $this->includedPageNotifications; 23244f8225e4SJames Collins } 23254f8225e4SJames Collins }//end if 23261785fc73SJames Collins } 23277ac0a6efSJames Collins 23287ac0a6efSJames Collins /** 23297ac0a6efSJames Collins * Dokuwiki version 23307ac0a6efSJames Collins * 23317ac0a6efSJames Collins * @return string the dw version name 23327ac0a6efSJames Collins */ 23339cff245bSJames Collins public function dwVersion() 23349cff245bSJames Collins { 23359cff245bSJames Collins if (function_exists('getVersionData') === true) { 23367ac0a6efSJames Collins $version_data = getVersionData(); 23379cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 23387ac0a6efSJames Collins $version_items = explode(' ', $version_data['date']); 23397ac0a6efSJames Collins if (count($version_items) >= 2) { 23407ac0a6efSJames Collins return preg_replace('/[^a-zA-Z0-9 ]+/', '', strtolower($version_items[1])); 23417ac0a6efSJames Collins } 23427ac0a6efSJames Collins } 23437ac0a6efSJames Collins } 23447ac0a6efSJames Collins 23457ac0a6efSJames Collins return 'unknown'; 23467ac0a6efSJames Collins } 2347e4c4fb13SJames Collins 2348e4c4fb13SJames Collins /** 2349e4c4fb13SJames Collins * Dokuwiki version number 2350e4c4fb13SJames Collins * 2351e4c4fb13SJames Collins * @return string the dw version date converted to integer 2352e4c4fb13SJames Collins */ 23539cff245bSJames Collins public function dwVersionNumber() 23549cff245bSJames Collins { 23559cff245bSJames Collins if (function_exists('getVersionData') === true) { 2356e4c4fb13SJames Collins $version_data = getVersionData(); 23579cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 2358e4c4fb13SJames Collins $version_items = explode(' ', $version_data['date']); 2359e4c4fb13SJames Collins if (count($version_items) >= 1) { 2360e4c4fb13SJames Collins return intval(preg_replace('/[^0-9]+/', '', strtolower($version_items[0]))); 2361e4c4fb13SJames Collins } 2362e4c4fb13SJames Collins } 2363e4c4fb13SJames Collins } 2364e4c4fb13SJames Collins 2365e4c4fb13SJames Collins return 0; 2366e4c4fb13SJames Collins } 2367a8eebd82SJames Collins} 2368ab45ba71SJames Collins 2369ab45ba71SJames Collinsglobal $TEMPLATE; 237047161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 2371