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; 368*c963c68cSJames Collins 369*c963c68cSJames Collins // search for less library 370*c963c68cSJames Collins $path = '/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 371*c963c68cSJames Collins if (($lessAvailable = file_exists('.' . $path)) !== true) { 372*c963c68cSJames Collins for ($i = 0; $i < 6; $i++) { 373*c963c68cSJames Collins if (($lessAvailable = file_exists($_SERVER['DOCUMENT_ROOT'] . $path)) === true) { 374*c963c68cSJames Collins break; 375a8df40efSJames Collins } 376a8df40efSJames Collins 377*c963c68cSJames Collins $path = '/..' . $path; 378*c963c68cSJames Collins } 379*c963c68cSJames Collins 380*c963c68cSJames Collins if ($lessAvailable !== true) { 381*c963c68cSJames Collins $path = '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 382*c963c68cSJames Collins for ($i = 0; $i < 6; $i++) { 383*c963c68cSJames Collins if (($lessAvailable = file_exists($_SERVER['DOCUMENT_ROOT'] . $path)) === true) { 384*c963c68cSJames Collins break; 385*c963c68cSJames Collins } 386*c963c68cSJames Collins 387*c963c68cSJames Collins $path = '/..' . $path; 388*c963c68cSJames Collins } 389*c963c68cSJames Collins } 390*c963c68cSJames Collins }//end if 391*c963c68cSJames Collins 392a8df40efSJames Collins // check for ctype extensions 3939cff245bSJames Collins if (function_exists('ctype_digit') === false) { 394a8df40efSJames Collins $lessAvailable = false; 395a8df40efSJames Collins } 396a8df40efSJames Collins 3979cff245bSJames Collins if ($value === true && $lessAvailable === false) { 398a8df40efSJames Collins $this->lessIgnored = true; 39929118ed7SJames Collins $value = false; 40029118ed7SJames Collins } 4013a385f2cSJames Collins 4023a385f2cSJames Collins return $value; 4039cff245bSJames Collins }//end switch 4043a385f2cSJames Collins }//end if 4053a385f2cSJames Collins 4063a385f2cSJames Collins if (in_array($value, $row['values']) === true) { 4073a385f2cSJames Collins return $value; 4083a385f2cSJames Collins } 4093a385f2cSJames Collins 4103a385f2cSJames Collins if (array_key_exists('default', $row) === true) { 4113a385f2cSJames Collins if (is_array($row['default']) === true) { 4123a385f2cSJames Collins if (array_key_exists($key, $row['default']) === true) { 4133a385f2cSJames Collins return $row['default'][$key]; 4143a385f2cSJames Collins } 4153a385f2cSJames Collins } else { 4163a385f2cSJames Collins return $row['default']; 4173a385f2cSJames Collins } 4183a385f2cSJames Collins } 4193a385f2cSJames Collins 4203a385f2cSJames Collins return reset($row['values']); 4213a385f2cSJames Collins }//end if 4223a385f2cSJames Collins }//end foreach 423c165b184SJames Collins 424c165b184SJames Collins return $value; 425c165b184SJames Collins } 426c165b184SJames Collins 427c165b184SJames Collins 42895372bffSJames Collins // phpcs:enable 42995372bffSJames Collins 43095372bffSJames Collins 431c165b184SJames Collins /** 432a8eebd82SJames Collins * Check if a page exist in directory or namespace 433c165b184SJames Collins * 4349cff245bSJames Collins * @param string $page Page/namespace to search. 435a8eebd82SJames Collins * @return boolean if page exists 436c165b184SJames Collins */ 4379cff245bSJames Collins public function pageExists(string $page) 43810b40067Snomadjimbob { 439ab45ba71SJames Collins ob_start(); 440a8eebd82SJames Collins tpl_includeFile($page . '.html'); 441ab45ba71SJames Collins $html = ob_get_contents(); 442ab45ba71SJames Collins ob_end_clean(); 443a8eebd82SJames Collins 4443a385f2cSJames Collins if (empty($html) === false) { 4459cff245bSJames Collins return true; 4469cff245bSJames Collins } 447a8eebd82SJames Collins 448a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 449a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 450a8eebd82SJames Collins 4519cff245bSJames Collins if ($propagate === true) { 4529cff245bSJames Collins if (page_findnearest($page, $useACL) !== false) { 4539cff245bSJames Collins return true; 4549cff245bSJames Collins } 4559cff245bSJames Collins } elseif ($useACL === true && auth_quickaclcheck($page) !== AUTH_NONE) { 4569cff245bSJames Collins return true; 457ab45ba71SJames Collins } 458ab45ba71SJames Collins 4599cff245bSJames Collins return false; 460ab45ba71SJames Collins } 461ab45ba71SJames Collins 462a8eebd82SJames Collins 463c165b184SJames Collins /** 464a8eebd82SJames Collins * Print or return page from directory or namespace 4652b4583abSJames Collins * 4669cff245bSJames Collins * @param string $page Page/namespace to include. 4679cff245bSJames Collins * @param boolean $print Print content. 4689cff245bSJames Collins * @param boolean $parse Parse content before printing/returning. 4699cff245bSJames Collins * @param string $classWrapper Wrap page in a div with class. 470ab45ba71SJames Collins * @return string contents of page found 4712b4583abSJames Collins */ 4729cff245bSJames Collins public function includePage(string $page, bool $print = true, bool $parse = true, string $classWrapper = '') 4732b4583abSJames Collins { 474a8eebd82SJames Collins ob_start(); 475a8eebd82SJames Collins tpl_includeFile($page . '.html'); 476a8eebd82SJames Collins $html = ob_get_contents(); 477a8eebd82SJames Collins ob_end_clean(); 478a8eebd82SJames Collins 4793a385f2cSJames Collins if (empty($html) === true) { 4804f8225e4SJames Collins global $MSG; 4814f8225e4SJames Collins 482a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 483a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 484ab45ba71SJames Collins $html = ''; 4852b4583abSJames Collins 4864f8225e4SJames Collins ob_start(); 487ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 4884f8225e4SJames Collins $this->includedPageNotifications .= ob_get_contents(); 4894f8225e4SJames Collins ob_end_clean(); 490ab45ba71SJames Collins } 4912b4583abSJames Collins 4923a385f2cSJames Collins if (empty($html) === false && $parse === true) { 493ab45ba71SJames Collins $html = $this->parseContent($html); 494ab45ba71SJames Collins } 4952b4583abSJames Collins 4963a385f2cSJames Collins if (empty($classWrapper) === false && empty($html) === false) { 4979cff245bSJames Collins $html = '<div class="' . $classWrapper . '">' . $html . '</div>'; 4989cff245bSJames Collins } 4992b4583abSJames Collins 5009cff245bSJames Collins if ($print === true) { 5019cff245bSJames Collins echo $html; 5029cff245bSJames Collins } 503ab45ba71SJames Collins return $html; 5042b4583abSJames Collins } 5052b4583abSJames Collins 506a8eebd82SJames Collins 507a8eebd82SJames Collins /** 508a8eebd82SJames Collins * Print or return logged in user information 509a8eebd82SJames Collins * 5109cff245bSJames Collins * @param boolean $print Print content. 511a8eebd82SJames Collins * @return string user information 512a8eebd82SJames Collins */ 5139cff245bSJames Collins public function includeLoggedIn(bool $print = true) 51410b40067Snomadjimbob { 515a8eebd82SJames Collins $html = ''; 516a8eebd82SJames Collins 5179cff245bSJames Collins if (empty($_SERVER['REMOTE_USER']) === false) { 518a8eebd82SJames Collins $html .= '<div class="mikio-user-info">'; 519a8eebd82SJames Collins ob_start(); 520a8eebd82SJames Collins tpl_userinfo(); 521a8eebd82SJames Collins $html .= ob_get_contents(); 522a8eebd82SJames Collins ob_end_clean(); 523a8eebd82SJames Collins $html .= '</div>'; 5242b4583abSJames Collins } 525a8eebd82SJames Collins 5269cff245bSJames Collins if ($print === true) { 5279cff245bSJames Collins echo $html; 5289cff245bSJames Collins } 529a8eebd82SJames Collins return $html; 5302b4583abSJames Collins } 5312b4583abSJames Collins 5322b4583abSJames Collins 533a8eebd82SJames Collins /** 534a8eebd82SJames Collins * Print or return DokuWiki Menu 535a8eebd82SJames Collins * 5369cff245bSJames Collins * @param boolean $print Print content. 537a8eebd82SJames Collins * @return string contents of the menu 538a8eebd82SJames Collins */ 5399cff245bSJames Collins public function includeDWMenu(bool $print = true) 54010b40067Snomadjimbob { 5412b4583abSJames Collins global $lang; 5422b4583abSJames Collins global $USERINFO; 543c165b184SJames Collins 5449cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 545a8eebd82SJames Collins $html = '<ul class="mikio-nav">'; 5462b4583abSJames Collins 547ab45ba71SJames Collins $pageToolsMenu = []; 548ab45ba71SJames Collins $siteToolsMenu = []; 549ab45ba71SJames Collins $userToolsMenu = []; 550c165b184SJames Collins 551ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 552ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 553ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 5542b4583abSJames Collins 5552b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 5562b4583abSJames Collins foreach ($items as $item) { 5579cff245bSJames Collins if ($item->getType() !== 'top') { 558ab45ba71SJames Collins $itemHtml = ''; 5592b4583abSJames Collins 560905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5619cff245bSJames Collins if ( 5623a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5633a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5643a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5659cff245bSJames Collins ) { 5669cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . 5679cff245bSJames Collins ' ' . $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5689cff245bSJames Collins if ($showIcons === true) { 5699cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5709cff245bSJames Collins } 5719cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5729cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5739cff245bSJames Collins } 574ab45ba71SJames Collins $itemHtml .= '</a>'; 575ab45ba71SJames Collins 576ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 5772b4583abSJames Collins } 5789cff245bSJames Collins }//end if 5799cff245bSJames Collins }//end foreach 5802b4583abSJames Collins 581ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action'); 582ab45ba71SJames Collins foreach ($items as $item) { 583ab45ba71SJames Collins $itemHtml = ''; 5842b4583abSJames Collins 585905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5869cff245bSJames Collins if ( 5873a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5883a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5893a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5909cff245bSJames Collins ) { 5919cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . ' ' . 5929cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5939cff245bSJames Collins if ($showIcons === true) { 5949cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5959cff245bSJames Collins } 5969cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5979cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5989cff245bSJames Collins } 599ab45ba71SJames Collins $itemHtml .= '</a>'; 6002b4583abSJames Collins 601ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 6022b4583abSJames Collins } 6039cff245bSJames Collins }//end foreach 6042b4583abSJames Collins 605ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 606ab45ba71SJames Collins foreach ($items as $item) { 607ab45ba71SJames Collins $itemHtml = ''; 608ab45ba71SJames Collins 609905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 6109cff245bSJames Collins if ( 6113a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 6123a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 6133a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 6149cff245bSJames Collins ) { 6159cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link' . ($isDropDown === true ? ' mikio-dropdown-item' : '') . ' ' . 6169cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 6179cff245bSJames Collins if ($showIcons === true) { 6189cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 6199cff245bSJames Collins } 6209cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6219cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6229cff245bSJames Collins } 623ab45ba71SJames Collins $itemHtml .= '</a>'; 624ab45ba71SJames Collins 625ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 626ab45ba71SJames Collins } 6279cff245bSJames Collins }//end foreach 628ab45ba71SJames Collins 629ab45ba71SJames Collins 630ab45ba71SJames Collins switch ($this->getConf('navbarDWMenuCombine')) { 631ab45ba71SJames Collins case 'dropdown': 632ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 6339cff245bSJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" 6349cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6359cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('file') : '') . 6369cff245bSJames Collins ($showText === true ? $lang['page_tools'] : '<span class="mikio-small-only">' . $lang['page_tools'] . 6379cff245bSJames Collins '</span>') . '</a>'; 638a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 639ab45ba71SJames Collins 640ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 641ab45ba71SJames Collins $html .= $item; 642ab45ba71SJames Collins } 643ab45ba71SJames Collins 644ab45ba71SJames Collins $html .= '</div>'; 645ab45ba71SJames Collins $html .= '</li>'; 646ab45ba71SJames Collins 647a8eebd82SJames Collins $html .= '<li id="dokuwiki__sitetools" class="mikio-nav-dropdown">'; 6489cff245bSJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" 6499cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6509cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('gear') : '') . 6519cff245bSJames Collins ($showText === true ? $lang['site_tools'] : '<span class="mikio-small-only">' . 6529cff245bSJames Collins $lang['site_tools'] . '</span>') . '</a>'; 653a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 654ab45ba71SJames Collins 655ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 656ab45ba71SJames Collins $html .= $item; 657ab45ba71SJames Collins } 658ab45ba71SJames Collins 659ab45ba71SJames Collins $html .= '</div>'; 660ab45ba71SJames Collins $html .= '</li>'; 661ab45ba71SJames Collins 662a8eebd82SJames Collins $html .= '<li id="dokuwiki__usertools" class="mikio-nav-dropdown">'; 6639cff245bSJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" 6649cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6659cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('user') : '') . 6669cff245bSJames Collins ($showText === true ? $lang['user_tools'] : '<span class="mikio-small-only">' . 6679cff245bSJames Collins $lang['user_tools'] . '</span>') . '</a>'; 668a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 669ab45ba71SJames Collins 670ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 671ab45ba71SJames Collins $html .= $item; 672ab45ba71SJames Collins } 673ab45ba71SJames Collins 674ab45ba71SJames Collins $html .= '</div>'; 675ab45ba71SJames Collins $html .= '</li>'; 676ab45ba71SJames Collins 677ab45ba71SJames Collins break; 678ab45ba71SJames Collins 679ab45ba71SJames Collins case 'combine': 680ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 6819cff245bSJames Collins $html .= '<a class="mikio-nav-link" href="#">' . 6829cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('wrench') : '') . 6839cff245bSJames Collins ($showText === true ? tpl_getLang('tools-menu') : '<span class="mikio-small-only">' . 6849cff245bSJames Collins tpl_getLang('tools-menu') . '</span>') . '</a>'; 685a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 686ab45ba71SJames Collins 687ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 688ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 689ab45ba71SJames Collins $html .= $item; 690ab45ba71SJames Collins } 691ab45ba71SJames Collins 692ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 693ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 694ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 695ab45ba71SJames Collins $html .= $item; 696ab45ba71SJames Collins } 697ab45ba71SJames Collins 698ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 699ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 700ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 701ab45ba71SJames Collins $html .= $item; 702ab45ba71SJames Collins } 703ab45ba71SJames Collins 704ab45ba71SJames Collins $html .= '</div>'; 705ab45ba71SJames Collins $html .= '</li>'; 706ab45ba71SJames Collins break; 707ab45ba71SJames Collins 708ab45ba71SJames Collins default: // seperate 709ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 710a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 711ab45ba71SJames Collins } 712ab45ba71SJames Collins 713ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 714a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 715a8eebd82SJames Collins } 716a8eebd82SJames Collins 717a8eebd82SJames Collins foreach ($userToolsMenu as $item) { 718a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 719ab45ba71SJames Collins } 720ab45ba71SJames Collins 721ab45ba71SJames Collins break; 7229cff245bSJames Collins }//end switch 723ab45ba71SJames Collins 7243a3ece10SJames Collins $translation = plugin_load('helper', 'translation'); 7253a3ece10SJames Collins if ($translation !== null) { 7263a3ece10SJames Collins $html .= '<li id="mikio__translate" class="mikio-nav-dropdown">'; 7273a3ece10SJames Collins $html .= '<a id="mikio_dropdown_translate" class="nav-link dropdown-toggle" href="#" role="button" 7283a3ece10SJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 7293a3ece10SJames Collins $this->mikioInlineIcon('language') . 7303a3ece10SJames Collins '</a>'; 7313a3ece10SJames Collins $html .= '<div class="mikio-dropdown closed">'; 7323a3ece10SJames Collins 7333a3ece10SJames Collins $html .= $translation->showTranslations(); 7343a3ece10SJames Collins 7353a3ece10SJames Collins $html .= '</div>'; 7363a3ece10SJames Collins $html .= '</li>'; 7373a3ece10SJames Collins } 7383a3ece10SJames Collins 73912030b10SJames Collins if ($this->getConf('showLightDark') === true) { 740d0fba6d1SJames Collins $autoLightDark = $this->getConf('autoLightDark'); 7419e41d878SJames Collins $html .= '<li class="mikio-darklight"> 7429e41d878SJames Collins<a href="#" class="mikio-control mikio-button mikio-darklight-button">' . 743d0fba6d1SJames Collins ($autoLightDark === true ? $this->mikioInlineIcon('sunmoon', 'mikio-darklight-auto') : '') . 7449e41d878SJames Collins $this->mikioInlineIcon('sun', 'mikio-darklight-light') . 7459e41d878SJames Collins $this->mikioInlineIcon('moon', 'mikio-darklight-dark') . 7469e41d878SJames Collins '</a></li>'; 74712030b10SJames Collins } 74812030b10SJames Collins 749ab45ba71SJames Collins $html .= '</ul>'; 750ab45ba71SJames Collins 7519cff245bSJames Collins if ($print === true) { 7529cff245bSJames Collins echo $html; 7539cff245bSJames Collins } 754a8eebd82SJames Collins return $html; 755a8eebd82SJames Collins } 756a8eebd82SJames Collins 757a8eebd82SJames Collins 758a8eebd82SJames Collins /** 759a8eebd82SJames Collins * Create a nav element from a string. <uri>|<title>; 760a8eebd82SJames Collins * 7619cff245bSJames Collins * @param string $str String to generate nav. 762a8eebd82SJames Collins * @return string nav elements generated 763a8eebd82SJames Collins */ 7649cff245bSJames Collins public function stringToNav(string $str) 76510b40067Snomadjimbob { 766a8eebd82SJames Collins $html = ''; 767a8eebd82SJames Collins 7683a385f2cSJames Collins if (empty($str) === false) { 769a8eebd82SJames Collins $items = explode(';', $str); 770a8eebd82SJames Collins if (count($items) > 0) { 771a8eebd82SJames Collins $html .= '<ul class="mikio-nav">'; 772a8eebd82SJames Collins foreach ($items as $item) { 773a8eebd82SJames Collins $parts = explode('|', $item); 774a8eebd82SJames Collins if ($parts > 1) { 7759cff245bSJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . 7769cff245bSJames Collins strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . 7779cff245bSJames Collins '</a></li>'; 778a8eebd82SJames Collins } 779a8eebd82SJames Collins } 780a8eebd82SJames Collins $html .= '</ul>'; 781a8eebd82SJames Collins } 7822b4583abSJames Collins } 7832b4583abSJames Collins 784ab45ba71SJames Collins return $html; 7852b4583abSJames Collins } 7862b4583abSJames Collins 787a8eebd82SJames Collins /** 788ab45ba71SJames Collins * print or return the main navbar 7892b4583abSJames Collins * 7909cff245bSJames Collins * @param boolean $print Print the navbar. 7919cff245bSJames Collins * @param boolean $showSub Include the sub navbar. 792ab45ba71SJames Collins * @return string generated content 7932b4583abSJames Collins */ 7949cff245bSJames Collins public function includeNavbar(bool $print = true, bool $showSub = false) 79510b40067Snomadjimbob { 796b39ad16dSJames Collins global $conf, $USERINFO; 797d3d7d2b7SJames Collins 798d3d7d2b7SJames Collins $homeUrl = wl(); 799d3d7d2b7SJames Collins 8009cff245bSJames Collins if (plugin_isdisabled('showpageafterlogin') === false) { 801d3d7d2b7SJames Collins $p = &plugin_load('action', 'showpageafterlogin'); 8023a385f2cSJames Collins if (empty($p) === false) { 8039cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 804d3d7d2b7SJames Collins $homeUrl = wl($p->getConf('page_after_login')); 805d3d7d2b7SJames Collins } 806d3d7d2b7SJames Collins } 807b39ad16dSJames Collins } else { 8089cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 809b39ad16dSJames Collins $url = $this->getConf('brandURLUser'); 810b39ad16dSJames Collins if (strlen($url) > 0) { 811b39ad16dSJames Collins $homeUrl = $url; 812d3d7d2b7SJames Collins } 813b39ad16dSJames Collins } else { 814b39ad16dSJames Collins $url = $this->getConf('brandURLGuest'); 815b39ad16dSJames Collins if (strlen($url) > 0) { 816b39ad16dSJames Collins $homeUrl = $url; 817b39ad16dSJames Collins } 818b39ad16dSJames Collins } 819b39ad16dSJames Collins } 820d3d7d2b7SJames Collins 821ab45ba71SJames Collins $html = ''; 82247161538SJames Collins 8239cff245bSJames Collins $html .= '<nav class="mikio-navbar' . (($this->getConf('stickyNavbar') === true) ? ' mikio-sticky' : '') . 8249cff245bSJames Collins '">'; 825f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 826d3d7d2b7SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . $homeUrl . '">'; 8279cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true || $this->getConf('navbarUseTitleText') === true) { 828ab45ba71SJames Collins // Brand image 8299cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true) { 8309cff245bSJames Collins $logo = $this->getMediaFile('logo', false); 8319cff245bSJames Collins ; 8323a385f2cSJames Collins if (empty($logo) === false) { 833f0241fc4SJames Collins $width = $this->getConf('navbarTitleIconWidth'); 834f0241fc4SJames Collins $height = $this->getConf('navbarTitleIconHeight'); 835f0241fc4SJames Collins $styles = ''; 836f0241fc4SJames Collins 837f0241fc4SJames Collins if (strlen($width) > 0 || strlen($height) > 0) { 8389cff245bSJames Collins if (ctype_digit($width) === true) { 839f0241fc4SJames Collins $styles .= 'max-width:' . intval($width) . 'px;'; 8409cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $width) === 1) { 841f0241fc4SJames Collins $styles .= 'max-width:' . $width . ';'; 8429cff245bSJames Collins } elseif (strcasecmp($width, 'none') === 0) { 8437a92c19bSJames Collins $styles .= 'max-width:none;'; 844f0241fc4SJames Collins } 845f0241fc4SJames Collins 8469cff245bSJames Collins if (ctype_digit($height) === true) { 847f0241fc4SJames Collins $styles .= 'max-height:' . intval($height) . 'px;'; 8489cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $height) === 1) { 849f0241fc4SJames Collins $styles .= 'max-height:' . $height . ';'; 8509cff245bSJames Collins } elseif (strcasecmp($height, 'none') === 0) { 8517a92c19bSJames Collins $styles .= 'max-height:none;'; 852f0241fc4SJames Collins } 853f0241fc4SJames Collins 854f0241fc4SJames Collins if (strlen($styles) > 0) { 855f0241fc4SJames Collins $styles = ' style="' . $styles . '"'; 856f0241fc4SJames Collins } 8579cff245bSJames Collins }//end if 858f0241fc4SJames Collins 859f0241fc4SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image"' . $styles . '>'; 8609cff245bSJames Collins }//end if 8619cff245bSJames Collins }//end if 862ab45ba71SJames Collins 863ab45ba71SJames Collins // Brand title 8649cff245bSJames Collins if ($this->getConf('navbarUseTitleText') === true) { 865ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 866a8eebd82SJames Collins $html .= '<h1 class="mikio-navbar-brand-title-text">' . $conf['title'] . '</h1>'; 8679cff245bSJames Collins if ($this->getConf('navbarUseTaglineText') === true) { 868a8eebd82SJames Collins $html .= '<p class="claim mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</p>'; 869ab45ba71SJames Collins } 870ab45ba71SJames Collins $html .= '</div>'; 871ab45ba71SJames Collins } 8729cff245bSJames Collins }//end if 873ab45ba71SJames Collins $html .= '</a>'; 874660b2c71SJames Collins $html .= '<div class="mikio-navbar-toggle"><span class="icon"></span></div>'; 875ab45ba71SJames Collins 876ab45ba71SJames Collins // Menus 877ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 878ab45ba71SJames Collins 8799cff245bSJames Collins $menus = [$this->getConf('navbarPosLeft', 'none'), $this->getConf('navbarPosMiddle', 'none'), 8809cff245bSJames Collins $this->getConf('navbarPosRight', 'none') 8819cff245bSJames Collins ]; 882a8eebd82SJames Collins foreach ($menus as $menuType) { 883a8eebd82SJames Collins switch ($menuType) { 884a8eebd82SJames Collins case 'custom': 885a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('navbarCustomMenuText', '')); 886a8eebd82SJames Collins break; 887a8eebd82SJames Collins case 'search': 888ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 889ab45ba71SJames Collins $html .= $this->includeSearch(false); 890ab45ba71SJames Collins $html .= '</div>'; 891a8eebd82SJames Collins break; 892a8eebd82SJames Collins case 'dokuwiki': 8939cff245bSJames Collins $html .= $this->includeDWMenu(false); 894a8eebd82SJames Collins break; 895a8eebd82SJames Collins } 896a8eebd82SJames Collins } 897ab45ba71SJames Collins 898ab45ba71SJames Collins $html .= '</div>'; 899f8039bf2SJames Collins $html .= '</div>'; 900ab45ba71SJames Collins $html .= '</nav>'; 901ab45ba71SJames Collins 902a8eebd82SJames Collins // Sub Navbar 9039cff245bSJames Collins if ($showSub === true) { 9049cff245bSJames Collins $sub = $this->includePage('submenu', false); 9053a385f2cSJames Collins if (empty($sub) === false) { 9069cff245bSJames Collins $html .= '<nav class="mikio-navbar mikio-sub-navbar">' . $sub . '</nav>'; 9079cff245bSJames Collins } 908ab45ba71SJames Collins } 909ab45ba71SJames Collins 9109cff245bSJames Collins if ($print === true) { 9119cff245bSJames Collins echo $html; 9129cff245bSJames Collins } 913ab45ba71SJames Collins return $html; 914ab45ba71SJames Collins } 915ab45ba71SJames Collins 916ab45ba71SJames Collins 917a8eebd82SJames Collins /** 918a8eebd82SJames Collins * Is there a sidebar 919a8eebd82SJames Collins * 9209cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 921a8eebd82SJames Collins * @return boolean if sidebar exists 922a8eebd82SJames Collins */ 9239cff245bSJames Collins public function sidebarExists(string $prefix = '') 92410b40067Snomadjimbob { 925a8eebd82SJames Collins global $conf; 926a8eebd82SJames Collins 9273a385f2cSJames Collins if (strcasecmp($prefix, 'left') === 0) { 9289cff245bSJames Collins $prefix = ''; 9299cff245bSJames Collins } 930a8eebd82SJames Collins 931a8eebd82SJames Collins return $this->pageExists($conf['sidebar' . $prefix]); 932a8eebd82SJames Collins } 933a8eebd82SJames Collins 934a8eebd82SJames Collins 935a8eebd82SJames Collins /** 936ab45ba71SJames Collins * Print or return the sidebar content 937ab45ba71SJames Collins * 9389cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 9399cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 9409cff245bSJames Collins * @param boolean $parse Parse the content. 941ab45ba71SJames Collins * @return string generated content 942ab45ba71SJames Collins */ 9439cff245bSJames Collins public function includeSidebar(string $prefix = '', bool $print = true, bool $parse = true) 94410b40067Snomadjimbob { 945ab45ba71SJames Collins global $conf, $ID; 946ab45ba71SJames Collins 947ab45ba71SJames Collins $html = ''; 948ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 949ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 950ab45ba71SJames Collins 9513a385f2cSJames Collins if (empty($confPrefix) === true) { 9529cff245bSJames Collins $confPrefix = 'Left'; 9539cff245bSJames Collins } 9541cdedf28SJames Collins if (strcasecmp($prefix, 'left') === 0) { 9559cff245bSJames Collins $prefix = ''; 9569cff245bSJames Collins } 957ab45ba71SJames Collins 9581cdedf28SJames Collins $sidebarPage = empty($conf[$prefix . 'sidebar']) === true ? $prefix . 'sidebar' : $conf[$prefix . 'sidebar']; 959ab45ba71SJames Collins 9609cff245bSJames Collins if ( 9619cff245bSJames Collins $this->getConf('sidebarShow' . $confPrefix) === true && page_findnearest($sidebarPage) !== false && 9621cdedf28SJames Collins p_get_metadata($ID, 'nosidebar', false) === null 9639cff245bSJames Collins ) { 9649cff245bSJames Collins $content = $this->includePage($sidebarPage . 'header', false); 9653a385f2cSJames Collins if (empty($content) === false) { 9669cff245bSJames Collins $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 9679cff245bSJames Collins } 968ab45ba71SJames Collins 9693a385f2cSJames Collins if (empty($prefix) === true) { 9709cff245bSJames Collins $rows = [$this->getConf('sidebarLeftRow1'), $this->getConf('sidebarLeftRow2'), 9719cff245bSJames Collins $this->getConf('sidebarLeftRow3'), $this->getConf('sidebarLeftRow4') 9729cff245bSJames Collins ]; 973ab45ba71SJames Collins 974a8eebd82SJames Collins foreach ($rows as $row) { 975a8eebd82SJames Collins switch ($row) { 976a8eebd82SJames Collins case 'search': 9779cff245bSJames Collins $html .= $this->includeSearch(false); 978a8eebd82SJames Collins break; 979a8eebd82SJames Collins case 'logged in user': 9809cff245bSJames Collins $html .= $this->includeLoggedIn(false); 981a8eebd82SJames Collins break; 982a8eebd82SJames Collins case 'content': 9839cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9843a385f2cSJames Collins if (empty($content) === false) { 9859cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9869cff245bSJames Collins } 987a8eebd82SJames Collins break; 988a8eebd82SJames Collins case 'tags': 989a8eebd82SJames Collins $html .= '<div class="mikio-tags"></div>'; 990a8eebd82SJames Collins } 991a8eebd82SJames Collins } 992a8eebd82SJames Collins } else { 9939cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9943a385f2cSJames Collins if (empty($content) === false) { 9959cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9969cff245bSJames Collins } 9979cff245bSJames Collins }//end if 9989cff245bSJames Collins 9999cff245bSJames Collins $content = $this->includePage($sidebarPage . 'footer', false); 10003a385f2cSJames Collins if (empty($content) === false) { 10019cff245bSJames Collins $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 10029cff245bSJames Collins } 10039cff245bSJames Collins }//end if 10049cff245bSJames Collins 10053a385f2cSJames Collins if (empty($html) === true) { 10063a385f2cSJames Collins if (empty($prefix) === true && $this->getConf('sidebarAlwaysShowLeft') === true) { 10079cff245bSJames Collins $html = ' '; 10089cff245bSJames Collins } 10099cff245bSJames Collins if ($this->getConf('sidebarAlwaysShow' . ucfirst($prefix)) === true) { 10109cff245bSJames Collins $html = ' '; 10119cff245bSJames Collins } 1012a8eebd82SJames Collins } 1013ab45ba71SJames Collins 10143a385f2cSJames Collins if (empty($html) === false) { 10151cdedf28SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . (empty($prefix) === true ? 'left' : $prefix) . 10169cff245bSJames Collins '"><a class="mikio-sidebar-toggle' . 10179cff245bSJames Collins ($this->getConf('sidebarMobileDefaultCollapse') === true ? ' closed' : '') . '" href="#">' . 10189cff245bSJames Collins tpl_getLang('sidebar-title') . ' <span class="icon"></span></a><div class="mikio-sidebar-collapse">' . 10199cff245bSJames Collins $html . '</div></aside>'; 1020ab45ba71SJames Collins } 1021ab45ba71SJames Collins 10229cff245bSJames Collins if ($parse === true) { 10239cff245bSJames Collins $html = $this->includeIcons($html); 10243a04a100SJames Collins } 10259cff245bSJames Collins if ($print === true) { 10269cff245bSJames Collins echo $html; 1027ab45ba71SJames Collins } 10284f8225e4SJames Collins 1029ab45ba71SJames Collins return $html; 1030ab45ba71SJames Collins } 1031ab45ba71SJames Collins 1032ab45ba71SJames Collins 1033a8eebd82SJames Collins /** 1034ab45ba71SJames Collins * Print or return the page tools content 1035ab45ba71SJames Collins * 10369cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 10379cff245bSJames Collins * @param boolean $includeId Include the dw__pagetools id in the element. 1038ab45ba71SJames Collins * @return string generated content 1039ab45ba71SJames Collins */ 10409cff245bSJames Collins public function includePageTools(bool $print = true, bool $includeId = false) 104110b40067Snomadjimbob { 10421293ce10SJames Collins global $USERINFO; 10431293ce10SJames Collins 10449cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 1045ab45ba71SJames Collins $html = ''; 1046ab45ba71SJames Collins 10479cff245bSJames Collins $html .= '<nav' . ($includeId === true ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 1048b9c0582bSJames Collins $html .= '<ul class="tools">'; 1049ab45ba71SJames Collins 1050ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 1051ab45ba71SJames Collins foreach ($items as $item) { 10529cff245bSJames Collins $classes = []; 10533fd763a0SJames Collins $classes[] = $item->getType(); 10543fd763a0SJames Collins $attr = $item->getLinkAttributes(); 10553fd763a0SJames Collins 10569cff245bSJames Collins if (empty($attr['class']) === false) { 10573fd763a0SJames Collins $classes = array_merge($classes, explode(' ', $attr['class'])); 1058ab45ba71SJames Collins } 1059ab45ba71SJames Collins 10603fd763a0SJames Collins $classes = array_unique($classes); 10613fd763a0SJames Collins 1062f02b8ab5SJames Collins $showItem = $this->getConf('pageToolsShow' . ucfirst($item->getType()), 'always'); 10639cff245bSJames Collins if ( 10643a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 10653a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 10663a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === true)) 10679cff245bSJames Collins ) { 10683fd763a0SJames Collins $html .= '<li class="' . implode(' ', $classes) . '">'; 10699cff245bSJames Collins $html .= '<a href="' . $item->getLink() . '" class="' . $item->getType() . '" title="' . 10709cff245bSJames Collins $item->getTitle() . '"><div class="icon">' . inlineSVG($item->getSvg()) . 10719cff245bSJames Collins '</div><span class="a11y">' . $item->getLabel() . '</span></a>'; 10723fd763a0SJames Collins $html .= '</li>'; 10733fd763a0SJames Collins } 10749cff245bSJames Collins }//end foreach 10753fd763a0SJames Collins 10763fd763a0SJames Collins $html .= '</ul>'; 1077ab45ba71SJames Collins $html .= '</nav>'; 1078ab45ba71SJames Collins 10799cff245bSJames Collins if ($print === true) { 10809cff245bSJames Collins echo $html; 10819cff245bSJames Collins } 1082ab45ba71SJames Collins return $html; 1083ab45ba71SJames Collins } 1084ab45ba71SJames Collins 1085ab45ba71SJames Collins 1086a8eebd82SJames Collins /** 1087a8eebd82SJames Collins * Print or return the search bar 1088a8eebd82SJames Collins * 10899cff245bSJames Collins * @param boolean $print Print content. 1090a8eebd82SJames Collins * @return string contents of the search bar 1091a8eebd82SJames Collins */ 10929cff245bSJames Collins public function includeSearch(bool $print = true) 109310b40067Snomadjimbob { 10949cff245bSJames Collins global $lang, $ID, $ACT, $QUERY; 1095ab45ba71SJames Collins $html = ''; 1096ab45ba71SJames Collins 10979cff245bSJames Collins $html .= '<form class="mikio-search search" action="' . wl() . 10989cff245bSJames Collins '" accept-charset="utf-8" method="get" role="search">'; 1099a8eebd82SJames Collins $html .= '<input type="hidden" name="do" value="search">'; 1100a8eebd82SJames Collins $html .= '<input type="hidden" name="id" value="' . $ID . '">'; 1101c1cb9f15SChris MacMackin $html .= '<input name="q" '; 11029cff245bSJames Collins if ($this->getConf('searchUseTypeahead') === true) { 1103c1cb9f15SChris MacMackin $html .= 'class="search_typeahead" '; 1104c1cb9f15SChris MacMackin } 11059cff245bSJames Collins $html .= 'autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . 11063a385f2cSJames Collins ((strcasecmp($ACT, 'search') === 0) ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 1107a8eebd82SJames Collins $html .= '<button type="submit" title="' . $lang['btn_search'] . '">'; 11083a385f2cSJames Collins if (strcasecmp($this->getConf('searchButton'), 'icon') === 0) { 1109a8eebd82SJames Collins $html .= $this->mikioInlineIcon('search'); 1110ab45ba71SJames Collins } else { 1111ab45ba71SJames Collins $html .= $lang['btn_search']; 1112ab45ba71SJames Collins } 1113ab45ba71SJames Collins $html .= '</button>'; 1114ab45ba71SJames Collins $html .= '</form>'; 1115ab45ba71SJames Collins 11169cff245bSJames Collins if ($print === true) { 11179cff245bSJames Collins echo $html; 11189cff245bSJames Collins } 1119ab45ba71SJames Collins return $html; 1120ab45ba71SJames Collins } 1121ab45ba71SJames Collins 1122ab45ba71SJames Collins 1123a8eebd82SJames Collins /** 1124a8eebd82SJames Collins * Print or return content 1125a8eebd82SJames Collins * 11269cff245bSJames Collins * @param boolean $print Print content. 1127a8eebd82SJames Collins * @return string contents 1128a8eebd82SJames Collins */ 11299cff245bSJames Collins public function includeContent(bool $print = true) 113010b40067Snomadjimbob { 1131ab45ba71SJames Collins ob_start(); 11329cff245bSJames Collins tpl_content(false); 1133ab45ba71SJames Collins $html = ob_get_contents(); 1134ab45ba71SJames Collins ob_end_clean(); 1135ab45ba71SJames Collins 1136ab45ba71SJames Collins $html = $this->includeIcons($html); 1137ab45ba71SJames Collins $html = $this->parseContent($html); 1138ab45ba71SJames Collins 1139ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 1140ab45ba71SJames Collins 11419cff245bSJames Collins if ($this->getConf('heroTitle') === false) { 11429cff245bSJames Collins $html = '<div class="mikio-tags"></div>' . $html; 11439cff245bSJames Collins } 1144a8eebd82SJames Collins 1145a8eebd82SJames Collins $html = '<div class="mikio-article-content">' . $html . '</div>'; 1146a8eebd82SJames Collins 11479cff245bSJames Collins if ($print === true) { 11489cff245bSJames Collins echo $html; 11499cff245bSJames Collins } 1150ab45ba71SJames Collins return $html; 1151ab45ba71SJames Collins } 1152ab45ba71SJames Collins 1153a8eebd82SJames Collins /** 1154ab45ba71SJames Collins * Print or return footer 1155ab45ba71SJames Collins * 11569cff245bSJames Collins * @param boolean $print Print footer. 11579cff245bSJames Collins * @return string HTML string containing footer 1158ab45ba71SJames Collins */ 11599cff245bSJames Collins public function includeFooter(bool $print = true) 116010b40067Snomadjimbob { 1161ab45ba71SJames Collins global $ACT; 1162ab45ba71SJames Collins 1163ab45ba71SJames Collins $html = ''; 1164ab45ba71SJames Collins 1165ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 11669cff245bSJames Collins $html .= '<div class="doc">' . tpl_pageinfo(true) . '</div>'; 11679cff245bSJames Collins $html .= $this->includePage('footer', false); 1168ab45ba71SJames Collins 1169a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('footerCustomMenuText')); 1170ab45ba71SJames Collins 11719cff245bSJames Collins if ($this->getConf('footerSearch') === true) { 1172ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 11739cff245bSJames Collins $html .= $this->includeSearch(false); 1174ab45ba71SJames Collins $html .= '</div>'; 1175ab45ba71SJames Collins } 1176ab45ba71SJames Collins 1177a8eebd82SJames Collins $showPageTools = $this->getConf('pageToolsFooter'); 11789cff245bSJames Collins if ( 11793a385f2cSJames Collins strcasecmp($ACT, 'show') === 0 && (strcasecmp($showPageTools, 'always') === 0 || 11803a385f2cSJames Collins $this->userCanEdit() === true && strcasecmp($showPageTools, 'page editors') === 0) 11819cff245bSJames Collins ) { 11829cff245bSJames Collins $html .= $this->includePageTools(false); 11839cff245bSJames Collins } 1184ab45ba71SJames Collins 11859cff245bSJames Collins $meta['licenseType'] = ['multichoice', '_choices' => ['none', 'badge', 'button']]; 11869cff245bSJames Collins $meta['licenseImageOnly'] = ['onoff']; 1187ab45ba71SJames Collins 1188ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 11899cff245bSJames Collins if ($licenseType !== 'none') { 11909cff245bSJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), true, true); 1191ab45ba71SJames Collins } 1192ab45ba71SJames Collins 1193ab45ba71SJames Collins $html .= '</footer>'; 1194ab45ba71SJames Collins 11959cff245bSJames Collins if ($print === true) { 11969cff245bSJames Collins echo $html; 11979cff245bSJames Collins } 1198ab45ba71SJames Collins return $html; 1199ab45ba71SJames Collins } 1200ab45ba71SJames Collins 1201ab45ba71SJames Collins 1202a8eebd82SJames Collins /** 1203ab45ba71SJames Collins * Print or return breadcrumb trail 1204ab45ba71SJames Collins * 12059cff245bSJames Collins * @param boolean $print Print out trail. 12069cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12079cff245bSJames Collins * @return string HTML string containing breadcrumbs 1208ab45ba71SJames Collins */ 12099cff245bSJames Collins public function includeBreadcrumbs(bool $print = true, bool $parse = true) 121010b40067Snomadjimbob { 1211a8eebd82SJames Collins global $conf, $ID, $lang, $ACT; 1212a8eebd82SJames Collins 12133a385f2cSJames Collins if ( 12143a385f2cSJames Collins $this->getConf('breadcrumbHideHome') === true && strcasecmp($ID, 'start') === 0 && 121595372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['breadcrumbs'] === 0 12163a385f2cSJames Collins ) { 12179cff245bSJames Collins return ''; 12189cff245bSJames Collins } 1219ab45ba71SJames Collins 1220ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 1221f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 12223a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 122395372bffSJames Collins if ($conf['breadcrumbs'] !== 0) { 12249cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === false && $this->getConf('breadcrumbSep') === false) { 1225ab45ba71SJames Collins ob_start(); 122675adba86SJames Collins tpl_breadcrumbs(); 1227ab45ba71SJames Collins $html .= ob_get_contents(); 1228ab45ba71SJames Collins ob_end_clean(); 1229ab45ba71SJames Collins } else { 1230ab45ba71SJames Collins $sep = '•'; 1231ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 1232ab45ba71SJames Collins 12339cff245bSJames Collins if ($this->getConf('breadcrumbSep') === true) { 1234ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 12359cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-sep', false); 1236ab45ba71SJames Collins 12379cff245bSJames Collins if ($img !== false) { 1238ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1239ab45ba71SJames Collins } 124047161538SJames Collins } 124147161538SJames Collins 12429cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === true) { 1243ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 12449cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-prefix', false); 1245ab45ba71SJames Collins 12469cff245bSJames Collins if ($img !== false) { 1247ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 1248ab45ba71SJames Collins } 1249ab45ba71SJames Collins } 1250ab45ba71SJames Collins 1251ab45ba71SJames Collins $crumbs = breadcrumbs(); 1252ab45ba71SJames Collins 1253ab45ba71SJames Collins $html .= '<ul>'; 12543a385f2cSJames Collins if (empty($prefix) === false) { 12559cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 12569cff245bSJames Collins } 1257ab45ba71SJames Collins 1258ab45ba71SJames Collins $last = count($crumbs); 1259ab45ba71SJames Collins $i = 0; 1260ab45ba71SJames Collins foreach ($crumbs as $id => $name) { 1261ab45ba71SJames Collins $i++; 126295372bffSJames Collins if ($i !== 1) { 1263ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 126495372bffSJames Collins } 12659cff245bSJames Collins $html .= '<li' . ($i === $last ? ' class="curid"' : '') . '>'; 12669cff245bSJames Collins $html .= tpl_pagelink($id, null, true); 1267ab45ba71SJames Collins $html .= '</li>'; 1268ab45ba71SJames Collins } 1269ab45ba71SJames Collins 1270ab45ba71SJames Collins $html .= '</ul>'; 12719cff245bSJames Collins }//end if 12729cff245bSJames Collins }//end if 12739cff245bSJames Collins }//end if 12743d11a778SJames Collins 12753d11a778SJames Collins $html .= '</div>'; 12763d11a778SJames Collins $html .= '</div>'; 12773d11a778SJames Collins 12789cff245bSJames Collins if ($parse === true) { 12799cff245bSJames Collins $html = $this->includeIcons($html); 12809cff245bSJames Collins } 12819cff245bSJames Collins if ($print === true) { 12829cff245bSJames Collins echo $html; 12839cff245bSJames Collins } 12843d11a778SJames Collins return $html; 12853d11a778SJames Collins } 12863d11a778SJames Collins 12873d11a778SJames Collins /** 12883d11a778SJames Collins * Print or return you are here trail 12893d11a778SJames Collins * 12909cff245bSJames Collins * @param boolean $print Print out trail. 12919cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12929cff245bSJames Collins * @return string HTML string containing breadcrumbs 12933d11a778SJames Collins */ 12949cff245bSJames Collins public function includeYouAreHere(bool $print = true, bool $parse = true) 12953d11a778SJames Collins { 12963d11a778SJames Collins global $conf, $ID, $lang, $ACT; 12973d11a778SJames Collins 12983a385f2cSJames Collins if ( 12993a385f2cSJames Collins $this->getConf('youarehereHideHome') === true && strcasecmp($ID, 'start') === 0 && 130095372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['youarehere'] === 0 13013a385f2cSJames Collins ) { 13029cff245bSJames Collins return ''; 13039cff245bSJames Collins } 13043d11a778SJames Collins 13053d11a778SJames Collins $html = '<div class="mikio-youarehere">'; 13063d11a778SJames Collins $html .= '<div class="mikio-container">'; 13073a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 130895372bffSJames Collins if ($conf['youarehere'] !== 0) { 13099cff245bSJames Collins if ($this->getConf('youareherePrefix') === false && $this->getConf('youarehereSep') === false) { 131095372bffSJames Collins $html .= '<div class="mikio-bcdw">'; 1311ab45ba71SJames Collins ob_start(); 131275adba86SJames Collins tpl_youarehere(); 1313ab45ba71SJames Collins $html .= ob_get_contents(); 1314ab45ba71SJames Collins ob_end_clean(); 131595372bffSJames Collins $html .= '</div>'; 1316ab45ba71SJames Collins } else { 1317ab45ba71SJames Collins $sep = ' » '; 1318ab45ba71SJames Collins $prefix = $lang['youarehere']; 1319ab45ba71SJames Collins 13209cff245bSJames Collins if ($this->getConf('youarehereSep') === true) { 13213d11a778SJames Collins $sep = $this->getConf('youarehereSepText'); 13229cff245bSJames Collins $img = $this->getMediaFile('youarehere-sep', false); 1323ab45ba71SJames Collins 13249cff245bSJames Collins if ($img !== false) { 1325ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1326ab45ba71SJames Collins } 132775adba86SJames Collins } 132875adba86SJames Collins 13299cff245bSJames Collins if ($this->getConf('youareherePrefix') === true) { 13303d11a778SJames Collins $prefix = $this->getConf('youareherePrefixText'); 13319cff245bSJames Collins $img = $this->getMediaFile('youarehere-prefix', false); 1332ab45ba71SJames Collins 13339cff245bSJames Collins if ($img !== false) { 1334ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 133575adba86SJames Collins } 133647161538SJames Collins } 133747161538SJames Collins 1338ab45ba71SJames Collins $html .= '<ul>'; 13393a385f2cSJames Collins if (empty($prefix) === false) { 13409cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 13419cff245bSJames Collins } 13429cff245bSJames Collins $html .= '<li>' . tpl_pagelink(':' . $conf['start'], null, true) . '</li>'; 1343ab45ba71SJames Collins 1344ab45ba71SJames Collins $parts = explode(':', $ID); 1345ab45ba71SJames Collins $count = count($parts); 1346ab45ba71SJames Collins 1347ab45ba71SJames Collins $part = ''; 13489cff245bSJames Collins for ($i = 0; $i < ($count - 1); $i++) { 1349ab45ba71SJames Collins $part .= $parts[$i] . ':'; 1350ab45ba71SJames Collins $page = $part; 13519cff245bSJames Collins if ($page === $conf['start']) { 13529cff245bSJames Collins continue; 13539cff245bSJames Collins } 1354ab45ba71SJames Collins 1355ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13569cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1357ab45ba71SJames Collins } 1358ab45ba71SJames Collins 1359ab45ba71SJames Collins resolve_pageid('', $page, $exists); 13609cff245bSJames Collins if ((isset($page) === true && $page === $part . $parts[$i]) === false) { 1361ab45ba71SJames Collins $page = $part . $parts[$i]; 13629cff245bSJames Collins if ($page !== $conf['start']) { 1363ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13649cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1365ab45ba71SJames Collins } 1366ab45ba71SJames Collins } 1367ab45ba71SJames Collins 1368ab45ba71SJames Collins $html .= '</ul>'; 13699cff245bSJames Collins }//end if 13709cff245bSJames Collins }//end if 1371ab45ba71SJames Collins 13723d11a778SJames Collins $showLast = $this->getConf('youarehereShowLast'); 13739cff245bSJames Collins if ($showLast !== 0) { 1374a8eebd82SJames Collins preg_match_all('/(<li[^>]*>.+?<\/li>)/', $html, $matches); 13759cff245bSJames Collins if (count($matches) > 0 && count($matches[0]) > (($showLast * 2) + 2)) { 1376a8eebd82SJames Collins $count = count($matches[0]); 1377a8eebd82SJames Collins $list = ''; 1378a8eebd82SJames Collins 1379a8eebd82SJames Collins // Show Home 1380a8eebd82SJames Collins $list .= $matches[0][0] . $matches[0][1]; 1381a8eebd82SJames Collins 1382a8eebd82SJames Collins $list .= '<li>...</li>'; 13839cff245bSJames Collins for ($i = ($count - ($showLast * 2)); $i <= $count; $i++) { 1384a8eebd82SJames Collins $list .= $matches[0][$i]; 1385a8eebd82SJames Collins } 1386a8eebd82SJames Collins 1387a8eebd82SJames Collins $html = preg_replace('/<ul>.*<\/ul>/', '<ul>' . $list . '</ul>', $html); 1388a8eebd82SJames Collins } 1389a8eebd82SJames Collins } 1390a8eebd82SJames Collins 13913d11a778SJames Collins switch ($this->getConf('youarehereHome')) { 1392a8eebd82SJames Collins case 'none': 1393a8eebd82SJames Collins $html = preg_replace('/<li[^>]*>.+?<\/li>/', '', $html, 2); 1394a8eebd82SJames Collins break; 1395a8eebd82SJames Collins case 'home': 1396a8eebd82SJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . tpl_getlang('home') . '$3', $html, 1); 1397a8eebd82SJames Collins break; 1398a8eebd82SJames Collins case 'icon': 13999cff245bSJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . 14009cff245bSJames Collins $this->mikioInlineIcon('home') . '$3', $html, 1); 1401a8eebd82SJames Collins break; 1402a8eebd82SJames Collins } 1403a8eebd82SJames Collins } else { 1404a8eebd82SJames Collins $html .= '≪ '; 14059cff245bSJames Collins if (isset($_GET['page']) === true) { 14069cff245bSJames Collins $html .= '<a href="' . wl($ID, ['do' => $ACT]) . '">Back</a> / '; 1407a8eebd82SJames Collins } 14084057121fSJames Collins $html .= '<a href="' . wl($ID) . '">View Page</a>'; 14099cff245bSJames Collins }//end if 14109cff245bSJames Collins 14119cff245bSJames Collins $html .= '</div>'; 14129cff245bSJames Collins $html .= '</div>'; 14139cff245bSJames Collins 14149cff245bSJames Collins if ($parse === true) { 14159cff245bSJames Collins $html = $this->includeIcons($html); 1416a8eebd82SJames Collins } 14179cff245bSJames Collins if ($print === true) { 14189cff245bSJames Collins echo $html; 14199cff245bSJames Collins } 1420ab45ba71SJames Collins return $html; 1421ab45ba71SJames Collins } 1422ab45ba71SJames Collins 14231785fc73SJames Collins /** 14241785fc73SJames Collins * Get Page Title 14259cff245bSJames Collins * 14269cff245bSJames Collins * @return string page title 14271785fc73SJames Collins */ 142810b40067Snomadjimbob public function parsePageTitle() 142910b40067Snomadjimbob { 14302060e56cSJames Collins global $ID; 14312060e56cSJames Collins 14322060e56cSJames Collins $title = p_get_first_heading($ID); 14339cff245bSJames Collins if (strlen($title) <= 0) { 14349cff245bSJames Collins $title = tpl_pagetitle(null, true); 14359cff245bSJames Collins } 14361785fc73SJames Collins $title = $this->includeIcons($title); 14371785fc73SJames Collins 14381785fc73SJames Collins return $title; 14391785fc73SJames Collins } 14401785fc73SJames Collins 1441ab45ba71SJames Collins 144275adba86SJames Collins /** 1443a8eebd82SJames Collins * Print or return hero block 144475adba86SJames Collins * 14459cff245bSJames Collins * @param boolean $print Print content. 1446a8eebd82SJames Collins * @return string contents of hero 144775adba86SJames Collins */ 14489cff245bSJames Collins public function includeHero(bool $print = true) 144910b40067Snomadjimbob { 1450a8eebd82SJames Collins $html = ''; 145147161538SJames Collins 14529cff245bSJames Collins if ($this->getConf('heroTitle') === true) { 1453a8eebd82SJames Collins $html .= '<div class="mikio-hero">'; 1454f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 1455a8eebd82SJames Collins $html .= '<div class="mikio-hero-text">'; 14563a385f2cSJames Collins if (strcasecmp($this->getConf('youareherePosition'), 'hero') === 0) { 14579cff245bSJames Collins $html .= $this->includeYouAreHere(false); 14589cff245bSJames Collins } 14593a385f2cSJames Collins if (strcasecmp($this->getConf('breadcrumbPosition'), 'hero') === 0) { 14609cff245bSJames Collins $html .= $this->includeBreadcrumbs(false); 14619cff245bSJames Collins } 1462ab45ba71SJames Collins 1463a8eebd82SJames Collins $html .= '<h1 class="mikio-hero-title">'; 14641785fc73SJames Collins $html .= $this->parsePageTitle(); // No idea why this requires a blank space afterwards to work? 1465a8eebd82SJames Collins $html .= '</h1>'; 1466a8eebd82SJames Collins $html .= '<h2 class="mikio-hero-subtitle"></h2>'; 1467a8eebd82SJames Collins $html .= '</div>'; 146847161538SJames Collins 14699cff245bSJames Collins $hero_image = $this->getMediaFile('hero', true, $this->getConf('heroImagePropagation', true)); 1470a8eebd82SJames Collins $hero_image_resize_class = ''; 14713a385f2cSJames Collins if (empty($hero_image) === false) { 1472a8eebd82SJames Collins $hero_image = ' style="background-image:url(\'' . $hero_image . '\');"'; 1473a8eebd82SJames Collins $hero_image_resize_class = ' mikio-hero-image-resize'; 147447161538SJames Collins } 1475a8eebd82SJames Collins 14769cff245bSJames Collins $html .= '<div class="mikio-hero-image' . $hero_image_resize_class . '"' . $hero_image . 14779cff245bSJames Collins '><div class="mikio-tags"></div></div>'; 1478a8eebd82SJames Collins 1479a8eebd82SJames Collins $html .= '</div>'; 1480f8039bf2SJames Collins $html .= '</div>'; 14819cff245bSJames Collins }//end if 14829cff245bSJames Collins 14839cff245bSJames Collins if ($print === true) { 14849cff245bSJames Collins echo $html; 148575adba86SJames Collins } 1486a8eebd82SJames Collins 1487a8eebd82SJames Collins return $html; 148875adba86SJames Collins } 148975adba86SJames Collins 149075adba86SJames Collins 149175adba86SJames Collins /** 1492a8eebd82SJames Collins * Print or return out TOC 149375adba86SJames Collins * 14949cff245bSJames Collins * @param boolean $print Print TOC. 14959cff245bSJames Collins * @param boolean $parse Parse icons. 1496a8eebd82SJames Collins * @return string contents of TOC 149775adba86SJames Collins */ 14989cff245bSJames Collins public function includeTOC(bool $print = true, bool $parse = true) 149910b40067Snomadjimbob { 1500ab45ba71SJames Collins $html = ''; 15012b4583abSJames Collins 1502ab45ba71SJames Collins $tocHtml = tpl_toc(true); 1503ab45ba71SJames Collins 15043a385f2cSJames Collins if (empty($tocHtml) === false) { 1505f65a4e5eSJames Collins $tocHtml = preg_replace( 1506f65a4e5eSJames Collins '/(<h3.+?toggle.+?>)(.+?)<\/h3>/', 1507f65a4e5eSJames Collins '$1' . 1508f65a4e5eSJames Collins $this->mikioInlineIcon('hamburger', 'hamburger') . '$2' . 1509f65a4e5eSJames Collins $this->mikioInlineIcon('down-arrow', 'down-arrow') . '</h3>', 1510f65a4e5eSJames Collins $tocHtml 1511f65a4e5eSJames Collins ); 1512ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 1513a8eebd82SJames Collins $tocHtml = preg_replace('/<ul.*>\s*<\/ul>\s*/', '', $tocHtml); 1514ab45ba71SJames Collins 1515ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 1516ab45ba71SJames Collins $html .= $tocHtml; 1517ab45ba71SJames Collins $html .= '</div>'; 15182b4583abSJames Collins } 15192b4583abSJames Collins 15209cff245bSJames Collins if ($parse === true) { 15219cff245bSJames Collins $html = $this->includeIcons($html); 15229cff245bSJames Collins } 15239cff245bSJames Collins 15249cff245bSJames Collins if ($print === true) { 1525ab45ba71SJames Collins echo $html; 1526ab45ba71SJames Collins } 1527ab45ba71SJames Collins 15289cff245bSJames Collins return $html; 15299cff245bSJames Collins } 15309cff245bSJames Collins 1531ab45ba71SJames Collins 1532a8eebd82SJames Collins /** 1533ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 1534ab45ba71SJames Collins * 15359cff245bSJames Collins * @param string $str Content to parse. 1536ab45ba71SJames Collins * @return string parsed string 1537ab45ba71SJames Collins */ 15389cff245bSJames Collins public function includeIcons(string $str) 153910b40067Snomadjimbob { 1540ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 1541ab45ba71SJames Collins 1542ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 15433a385f2cSJames Collins if (empty($iconTag) === true) { 15449cff245bSJames Collins return $str; 15459cff245bSJames Collins } 1546ab45ba71SJames Collins 15479cff245bSJames Collins if ( 15489cff245bSJames Collins in_array($ACT, ['show', 'showtag', 'revisions', 'index', 'preview']) === true || 15493a385f2cSJames Collins strcasecmp($ACT, 'admin') === 0 && count($MIKIO_ICONS) > 0 15509cff245bSJames Collins ) { 1551a2005a27SJames Collins $content = $str; 1552a2005a27SJames Collins $preview = null; 1553a2005a27SJames Collins 15543a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15559cff245bSJames Collins $html = new \simple_html_dom(); 1556a2005a27SJames Collins $html->stripRNAttrValues = false; 1557a2005a27SJames Collins $html->load($str, true, false); 1558a2005a27SJames Collins 1559a2005a27SJames Collins $preview = $html->find('div.preview'); 15609cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1561a2005a27SJames Collins $content = $preview[0]->innertext; 1562a2005a27SJames Collins } 1563a2005a27SJames Collins } 1564a2005a27SJames Collins 15651785fc73SJames Collins $page_regex = '/(.*)/'; 15669cff245bSJames Collins if (stripos($str, '<pre') !== false) { 15671785fc73SJames Collins $page_regex = '/<(?!pre|\/).*?>(.*)[^<]*/'; 15681785fc73SJames Collins } 15691785fc73SJames Collins 15701785fc73SJames Collins $content = preg_replace_callback($page_regex, function ($icons) { 1571a2005a27SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 1572a2005a27SJames Collins 157310b40067Snomadjimbob return preg_replace_callback( 157410b40067Snomadjimbob '/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 1575ab45ba71SJames Collins function ($matches) { 1576ab45ba71SJames Collins global $MIKIO_ICONS; 1577ab45ba71SJames Collins 1578ab45ba71SJames Collins $s = $matches[0]; 1579ab45ba71SJames Collins 1580ab45ba71SJames Collins if (count($MIKIO_ICONS) > 0) { 1581ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 1582ab45ba71SJames Collins 1583ab45ba71SJames Collins if (count($matches) > 1) { 1584ab45ba71SJames Collins $e = explode(' ', $matches[1]); 1585ab45ba71SJames Collins 1586ab45ba71SJames Collins if (count($e) > 1) { 1587ab45ba71SJames Collins foreach ($MIKIO_ICONS as $iconItem) { 15889cff245bSJames Collins if (strcasecmp($iconItem['name'], $e[0]) === 0) { 1589ab45ba71SJames Collins $icon = $iconItem; 1590ab45ba71SJames Collins 1591ab45ba71SJames Collins $s = $icon['insert']; 1592ab45ba71SJames Collins for ($i = 1; $i < 9; $i++) { 15931cdedf28SJames Collins if (count($e) < $i || empty($e[$i]) === true) { 15949cff245bSJames Collins if (isset($icon['$' . $i]) === true) { 1595ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$' . $i], $s); 1596ab45ba71SJames Collins } 1597ab45ba71SJames Collins } else { 1598ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 1599ab45ba71SJames Collins } 1600ab45ba71SJames Collins } 1601ab45ba71SJames Collins 1602ab45ba71SJames Collins $dir = ''; 16039cff245bSJames Collins if (isset($icon['dir']) === true) { 16049cff245bSJames Collins $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 16059cff245bSJames Collins } 1606ab45ba71SJames Collins 1607ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 1608ab45ba71SJames Collins 1609ab45ba71SJames Collins break; 16109cff245bSJames Collins }//end if 16119cff245bSJames Collins }//end foreach 1612ab45ba71SJames Collins } else { 1613ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 16149cff245bSJames Collins }//end if 16159cff245bSJames Collins }//end if 16169cff245bSJames Collins }//end if 161775adba86SJames Collins 1618ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 16199cff245bSJames Collins if ($count === 0) { 1620ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 1621ab45ba71SJames Collins } 1622ab45ba71SJames Collins 1623ab45ba71SJames Collins return $s; 1624ab45ba71SJames Collins }, 162510b40067Snomadjimbob $icons[0] 162610b40067Snomadjimbob ); 1627a2005a27SJames Collins }, $content); 1628a2005a27SJames Collins 16293a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 16309cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1631a2005a27SJames Collins $preview[0]->innertext = $content; 1632a2005a27SJames Collins } 1633a2005a27SJames Collins 1634a2005a27SJames Collins $str = $html->save(); 1635a2005a27SJames Collins $html->clear(); 1636a2005a27SJames Collins unset($html); 1637a2005a27SJames Collins } else { 1638a2005a27SJames Collins $str = $content; 1639a2005a27SJames Collins } 16409cff245bSJames Collins }//end if 1641ab45ba71SJames Collins 1642ab45ba71SJames Collins return $str; 1643ab45ba71SJames Collins } 164447161538SJames Collins 1645c165b184SJames Collins /** 1646a8eebd82SJames Collins * Parse HTML for theme 1647c165b184SJames Collins * 16489cff245bSJames Collins * @param string $content HTML content to parse. 1649a8eebd82SJames Collins * @return string Parsed content 1650c165b184SJames Collins */ 16519cff245bSJames Collins public function parseContent(string $content) 165210b40067Snomadjimbob { 1653ab45ba71SJames Collins global $INPUT, $ACT; 1654ab45ba71SJames Collins 1655a8eebd82SJames Collins // Add Mikio Section titles 16563a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 16579cff245bSJames Collins $admin_sections = [ 1658ab45ba71SJames Collins // Section Insert Before Icon 16599cff245bSJames Collins 'navbar' => ['navbarUseTitleIcon', ''], 16609cff245bSJames Collins 'search' => ['searchButton', ''], 16619cff245bSJames Collins 'hero' => ['heroTitle', ''], 16629cff245bSJames Collins 'tags' => ['tagsConsolidate', ''], 16639cff245bSJames Collins 'breadcrumb' => ['breadcrumbHideHome', ''], 16649cff245bSJames Collins 'youarehere' => ['youarehereHideHome', ''], 16659cff245bSJames Collins 'sidebar' => ['sidebarShowLeft', ''], 16669cff245bSJames Collins 'toc' => ['tocFull', ''], 16679cff245bSJames Collins 'pagetools' => ['pageToolsFloating', ''], 16689cff245bSJames Collins 'footer' => ['footerCustomMenuText', ''], 16699cff245bSJames Collins 'license' => ['licenseType', ''], 16709cff245bSJames Collins 'acl' => ['includePageUseACL', ''], 16719cff245bSJames Collins 'sticky' => ['stickyTopHeader', ''], 16729cff245bSJames Collins ]; 1673ab45ba71SJames Collins 1674ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 1675ab45ba71SJames Collins $search = $items[0]; 1676ab45ba71SJames Collins $icon = $items[1]; 1677ab45ba71SJames Collins 167810b40067Snomadjimbob $content = preg_replace( 1679adf52ebbSJames Collins '/<tr(.*)>\s*<td class="label">\s*<span class="outkey">(tpl»mikio»' . $search . ')<\/span>/', 16809cff245bSJames Collins '<tr$1><td class="mikio-config-table-header" colspan="2">' . $this->mikioInlineIcon($icon) . 16819cff245bSJames Collins tpl_getLang('config_' . $section) . 16829cff245bSJames Collins '</td></tr><tr class="default"><td class="label"><span class="outkey">tpl»mikio»' . 16839cff245bSJames Collins $search . '</span>', 168410b40067Snomadjimbob $content 168510b40067Snomadjimbob ); 1686ab45ba71SJames Collins } 1687bb5a3dd1SJames Collins } elseif (strcasecmp($INPUT->str('page'), 'styling') === 0) { 1688ad182e6dSnomadjimbob $mikioPluginMissing = true; 1689ad182e6dSnomadjimbob /* Hide plugin fields if not installed */ 16909ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 1691ad182e6dSnomadjimbob $mikioPluginMissing = false; 1692ad182e6dSnomadjimbob } 1693ad182e6dSnomadjimbob 1694cee81679SJames Collins $style_headers = [ 1695f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__text_'], 1696f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__code_'], 1697f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__control_'], 1698f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__topheader_'], 1699f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__navbar_'], 1700f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__subnavbar_'], 1701f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__tag_background_color_'], 1702f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__breadcrumb_'], 1703f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__hero_'], 1704f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__sidebar_'], 1705f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__content_'], 1706f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__toc_'], 1707f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__pagetools_'], 1708f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__footer_'], 1709f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__table_'], 1710f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__dropdown_'], 1711f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__section_edit_'], 1712f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__tree_'], 1713f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__tab_'], 1714ad182e6dSnomadjimbob ['title' => 'Mikio Plugin', 'starts_with' => '__plugin_', 'heading' => 'h2', 17159ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17169ffe9161Snomadjimbob ], 1717ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_primary_', 'hidden' => $mikioPluginMissing], 1718ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_secondary_', 17199ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17209ffe9161Snomadjimbob ], 1721ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_success_', 'hidden' => $mikioPluginMissing], 1722ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_danger_', 'hidden' => $mikioPluginMissing], 1723ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_warning_', 'hidden' => $mikioPluginMissing], 1724ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_info_', 'hidden' => $mikioPluginMissing], 1725ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_light_', 'hidden' => $mikioPluginMissing], 1726ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_dark_', 'hidden' => $mikioPluginMissing], 1727ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_link_', 'hidden' => $mikioPluginMissing], 1728ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_carousel_', 'hidden' => $mikioPluginMissing], 1729ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_steps_', 'hidden' => $mikioPluginMissing], 1730ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_tabgroup_', 'hidden' => $mikioPluginMissing], 1731ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_tooltip_', 'hidden' => $mikioPluginMissing], 1732cee81679SJames Collins ['title' => 'Dark Mode', 'starts_with' => '__darkmode_', 'heading' => 'h2'], 1733f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__darkmode_text_'], 1734f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__darkmode_code_'], 1735f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__darkmode_control_'], 1736f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__darkmode_topheader_'], 1737f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__darkmode_navbar_'], 1738f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__darkmode_subnavbar_'], 1739f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__darkmode_tag_background_color_'], 1740f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__darkmode_breadcrumb_'], 1741f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__darkmode_hero_'], 1742f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__darkmode_sidebar_'], 1743f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__darkmode_content_'], 1744f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__darkmode_toc_'], 1745f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__darkmode_pagetools_'], 1746f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__darkmode_footer_'], 1747f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__darkmode_table_'], 1748f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__darkmode_dropdown_'], 1749f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__darkmode_section_edit_'], 1750f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__darkmode_tree_'], 1751f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__darkmode_tab_'], 1752ad182e6dSnomadjimbob ['title' => 'Mikio Plugin (Dark mode)', 'starts_with' => '__plugin_darkmode_', 'heading' => 'h2', 17539ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17549ffe9161Snomadjimbob ], 1755ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_darkmode_primary_', 17569ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17579ffe9161Snomadjimbob ], 1758ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_darkmode_secondary_', 17599ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17609ffe9161Snomadjimbob ], 1761ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_darkmode_success_', 17629ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17639ffe9161Snomadjimbob ], 1764ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_darkmode_danger_', 17659ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17669ffe9161Snomadjimbob ], 1767ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_darkmode_warning_', 17689ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17699ffe9161Snomadjimbob ], 1770ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_darkmode_info_', 17719ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17729ffe9161Snomadjimbob ], 1773ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_darkmode_light_', 17749ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17759ffe9161Snomadjimbob ], 1776ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_darkmode_dark_', 17779ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17789ffe9161Snomadjimbob ], 1779ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_darkmode_link_', 17809ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17819ffe9161Snomadjimbob ], 1782ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_darkmode_carousel_', 17839ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17849ffe9161Snomadjimbob ], 1785ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_darkmode_steps_', 'hidden' => $mikioPluginMissing], 1786ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_darkmode_tabgroup_', 17879ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17889ffe9161Snomadjimbob ], 1789ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_darkmode_tooltip_', 'hidden' => $mikioPluginMissing], 1790cee81679SJames Collins ]; 1791cee81679SJames Collins 1792cee81679SJames Collins foreach ($style_headers as $header) { 1793cee81679SJames Collins if (array_key_exists('heading', $header) === false) { 1794cee81679SJames Collins $header['heading'] = 'h3'; 1795cee81679SJames Collins } 1796cee81679SJames Collins 1797ad182e6dSnomadjimbob if (array_key_exists('hidden', $header) === false) { 1798ad182e6dSnomadjimbob $header['hidden'] = false; 1799ad182e6dSnomadjimbob } 1800ad182e6dSnomadjimbob 18011244e3ceSJames Collins $content = preg_replace( 1802f65a4e5eSJames Collins '/(<tr>\s*<td>\s*<label for="tpl__' . $header['starts_with'] . '.+?<\/tr>)/s', 18039ffe9161Snomadjimbob '</tbody></table><' . $header['heading'] . ' style="display:' . 18049ffe9161Snomadjimbob ($header['hidden'] === true ? 'none' : 'block') . '">' . 18059ffe9161Snomadjimbob $header['title'] . '</' . $header['heading'] . '> 1806ad182e6dSnomadjimbob <table style="display:' . ($header['hidden'] === true ? 'none' : 'table') . '"><tbody>$1', 18071244e3ceSJames Collins $content, 18081244e3ceSJames Collins 1 18091244e3ceSJames Collins ); 1810cee81679SJames Collins } 1811f65a4e5eSJames Collins 1812dea1f088SJames Collins $content = preg_replace_callback('/<input type="color"[^>]*>/', function ($match) { 1813dea1f088SJames Collins // Get the ID of the <input type="color"> element 1814dea1f088SJames Collins preg_match('/id="([^"]*)"/', $match[0], $matches); 1815dea1f088SJames Collins 1816dea1f088SJames Collins // Replace type with text and remove the id attribute 18172c87ab0dSJames Collins $replacement = preg_replace( 18182c87ab0dSJames Collins ['/type="color"/', '/id="([^"]*)"/'], 18192c87ab0dSJames Collins ['type="text" class="mikio-color-text-input"', 'for="$1"'], 18202c87ab0dSJames Collins $match[0] 18212c87ab0dSJames Collins ); 1822dea1f088SJames Collins 1823dea1f088SJames Collins return '<div class="mikio-color-picker">' . $replacement . $match[0] . '</div>'; 1824dea1f088SJames Collins }, $content); 1825bb5a3dd1SJames Collins }//end if 1826ab45ba71SJames Collins 18273a385f2cSJames Collins if (strcasecmp($ACT, 'admin') === 0 && isset($_GET['page']) === false) { 1828a8eebd82SJames Collins $content = preg_replace('/(<ul.*?>.*?)<\/ul>.*?<ul.*?>(.*?<\/ul>)/s', '$1$2', $content); 1829a8eebd82SJames Collins } 1830ab45ba71SJames Collins 1831a8eebd82SJames Collins // Page Revisions - Table Fix 18329cff245bSJames Collins if (strpos($content, 'id="page__revisions"') !== false) { 18339cff245bSJames Collins $content = preg_replace( 18349cff245bSJames Collins '/(<span class="sum">\s.*<\/span>\s.*<span class="user">\s.*<\/span>)/', 18359cff245bSJames Collins '<span>$1</span>', 18369cff245bSJames Collins $content 18379cff245bSJames Collins ); 1838a8eebd82SJames Collins } 1839ab45ba71SJames Collins 18409cff245bSJames Collins $html = new \simple_html_dom(); 1841bc1032d9SJames Collins $html->stripRNAttrValues = false; 1842c165b184SJames Collins $html->load($content, true, false); 1843c165b184SJames Collins 18449cff245bSJames Collins if ($html === false) { 18459cff245bSJames Collins return $content; 18469cff245bSJames Collins } 1847ab45ba71SJames Collins 1848ab45ba71SJames Collins /* Buttons */ 1849ab45ba71SJames Collins foreach ($html->find('#config__manager button') as $node) { 1850ab45ba71SJames Collins $c = explode(' ', $node->class); 18519cff245bSJames Collins if (in_array('mikio-button', $c) === false) { 18529cff245bSJames Collins $c[] = 'mikio-button'; 18539cff245bSJames Collins } 1854ab45ba71SJames Collins $node->class = implode(' ', $c); 1855c165b184SJames Collins } 1856c165b184SJames Collins 1857ab45ba71SJames Collins 1858ab45ba71SJames Collins /* Buttons - Primary */ 1859ab45ba71SJames Collins foreach ($html->find('#config__manager [type=submit]') as $node) { 1860ab45ba71SJames Collins $c = explode(' ', $node->class); 18619cff245bSJames Collins if (in_array('mikio-primary', $c) === false) { 18629cff245bSJames Collins $c[] = 'mikio-primary'; 18639cff245bSJames Collins } 1864ab45ba71SJames Collins $node->class = implode(' ', $c); 1865ab45ba71SJames Collins } 1866ab45ba71SJames Collins 1867a8eebd82SJames Collins /* Hide page title if hero is enabled */ 18689cff245bSJames Collins if ($this->getConf('heroTitle') === true && $ACT !== 'preview') { 18691785fc73SJames Collins $pageTitle = $this->parsePageTitle(); 187047161538SJames Collins 187147161538SJames Collins foreach ($html->find('h1,h2,h3,h4') as $elm) { 18729cff245bSJames Collins if ($elm->innertext === $pageTitle) { 1873a8eebd82SJames Collins // $elm->innertext = ''; 1874a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1875a8eebd82SJames Collins 187647161538SJames Collins break; 187747161538SJames Collins } 187847161538SJames Collins } 187947161538SJames Collins } 1880c165b184SJames Collins 1881a8eebd82SJames Collins /* Hero subtitle */ 18822b4583abSJames Collins foreach ($html->find('p') as $elm) { 1883d0d6c450SJames Collins if (preg_match('/[~-]~hero-subtitle (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1884d0d6c450SJames Collins $subtitle = $matches[1]; 1885a8eebd82SJames Collins $this->footerScript['hero-subtitle'] = 'mikio.setHeroSubTitle(\'' . $subtitle . '\')'; 1886a8eebd82SJames Collins 1887d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-subtitle (.+?)~[~-]/ui', '', $elm->innertext); 18882b4583abSJames Collins break; 18892b4583abSJames Collins } 18902b4583abSJames Collins } 18912b4583abSJames Collins 1892a8eebd82SJames Collins /* Hero image */ 1893a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1894a8eebd82SJames Collins $image = ''; 1895d0d6c450SJames Collins preg_match('/[~-]~hero-image (.+?)~[~-](?!.?")/ui', $elm->innertext, $matches); 1896a8eebd82SJames Collins if (count($matches) > 0) { 1897a8eebd82SJames Collins preg_match('/<img.*src="(.+?)"/ui', $matches[1], $imageTagMatches); 1898a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1899a8eebd82SJames Collins $image = $imageTagMatches[1]; 1900a8eebd82SJames Collins } else { 1901a8eebd82SJames Collins preg_match('/<a.+?>(.+?)[~<]/ui', $matches[1], $imageTagMatches); 1902a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1903a8eebd82SJames Collins $image = $imageTagMatches[1]; 1904a8eebd82SJames Collins } else { 1905a8eebd82SJames Collins $image = strip_tags($matches[1]); 19069cff245bSJames Collins if (stripos($image, ':') === false) { 19079cff245bSJames Collins $image = str_replace(['{', '}'], '', $image); 1908a8eebd82SJames Collins $i = stripos($image, '?'); 19099cff245bSJames Collins if ($i !== false) { 1910a8eebd82SJames Collins $image = substr($image, 0, $i); 1911c165b184SJames Collins } 1912c165b184SJames Collins 1913a8eebd82SJames Collins $image = ml($image, '', true, '', false); 1914ab45ba71SJames Collins } 1915ab45ba71SJames Collins } 1916ab45ba71SJames Collins } 1917ab45ba71SJames Collins 1918a8eebd82SJames Collins $this->footerScript['hero-image'] = 'mikio.setHeroImage(\'' . $image . '\')'; 1919a8eebd82SJames Collins 1920d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-image (.+?)~[~-].*/ui', '', $elm->innertext); 19219cff245bSJames Collins }//end if 19229cff245bSJames Collins }//end foreach 1923ab45ba71SJames Collins 19249cff245bSJames Collins /* Hero colors - ~~hero-colors [background-color] [hero-title-color] [hero-subtitle-color] 19259cff245bSJames Collins [breadcrumb-text-color] [breadcrumb-hover-color] (use 'initial' for original color) */ 1926a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1927d0d6c450SJames Collins if (preg_match('/[~-]~hero-colors (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1928d0d6c450SJames Collins $subtitle = $matches[1]; 1929d0d6c450SJames Collins $this->footerScript['hero-colors'] = 'mikio.setHeroColor(\'' . $subtitle . '\')'; 1930ab45ba71SJames Collins 1931d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-colors (.+?)~[~-]/ui', '', $elm->innertext); 1932a8eebd82SJames Collins break; 1933ab45ba71SJames Collins } 1934ab45ba71SJames Collins } 1935ab45ba71SJames Collins 193696ec8e1eSJames Collins /* Hide parts - ~~hide-parts [parts]~~ */ 193796ec8e1eSJames Collins foreach ($html->find('p') as $elm) { 19383a44a74aSJames Collins if (preg_match('/[~-]~hide-parts (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1939d0d6c450SJames Collins $parts = explode(' ', $matches[1]); 194096ec8e1eSJames Collins $script = ''; 194196ec8e1eSJames Collins 194296ec8e1eSJames Collins foreach ($parts as $part) { 194396ec8e1eSJames Collins if (strlen($part) > 0) { 194496ec8e1eSJames Collins $script .= 'mikio.hidePart(\'' . $part . '\');'; 194596ec8e1eSJames Collins } 194696ec8e1eSJames Collins } 194796ec8e1eSJames Collins 194896ec8e1eSJames Collins if (strlen($script) > 0) { 194996ec8e1eSJames Collins $this->footerScript['hide-parts'] = $script; 195096ec8e1eSJames Collins } 195196ec8e1eSJames Collins 19523a44a74aSJames Collins $elm->innertext = preg_replace('/[~-]~hide-parts (.+?)~[~-]/ui', '', $elm->innertext); 195396ec8e1eSJames Collins break; 1954d0d6c450SJames Collins } 19559cff245bSJames Collins }//end foreach 195696ec8e1eSJames Collins 195796ec8e1eSJames Collins 1958a8eebd82SJames Collins /* Page Tags (tag plugin) */ 19599cff245bSJames Collins if ($this->getConf('tagsConsolidate') === true) { 1960a8eebd82SJames Collins $tags = ''; 1961a8eebd82SJames Collins foreach ($html->find('div.tags a') as $elm) { 1962a8eebd82SJames Collins $tags .= $elm->outertext; 1963a8eebd82SJames Collins } 1964a8eebd82SJames Collins 1965a8eebd82SJames Collins foreach ($html->find('div.tags') as $elm) { 1966a8eebd82SJames Collins $elm->innertext = ''; 1967a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1968a8eebd82SJames Collins } 1969a8eebd82SJames Collins 19703a385f2cSJames Collins if (empty($tags) === false) { 1971a8eebd82SJames Collins $this->footerScript['tags'] = 'mikio.setTags(\'' . $tags . '\')'; 1972a8eebd82SJames Collins } 1973ab45ba71SJames Collins } 1974ab45ba71SJames Collins 1975ab45ba71SJames Collins // Configuration Manager 19763a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 1977ab45ba71SJames Collins // Additional save buttons 1978ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1979ab45ba71SJames Collins $saveButtons = ''; 1980ab45ba71SJames Collins 1981ab45ba71SJames Collins foreach ($cm->find('p') as $elm) { 1982ab45ba71SJames Collins $saveButtons = $elm->outertext; 1983a8eebd82SJames Collins $saveButtons = str_replace('<p>', '<p style="text-align:right">', $saveButtons); 1984ab45ba71SJames Collins $elm->outertext = ''; 1985ab45ba71SJames Collins } 1986ab45ba71SJames Collins 1987ab45ba71SJames Collins foreach ($cm->find('fieldset') as $elm) { 1988ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1989ab45ba71SJames Collins } 1990ab45ba71SJames Collins } 1991ab45ba71SJames Collins } 1992ab45ba71SJames Collins 1993ab45ba71SJames Collins $content = $html->save(); 1994c165b184SJames Collins $html->clear(); 1995c165b184SJames Collins unset($html); 1996c165b184SJames Collins 1997c165b184SJames Collins return $content; 1998c165b184SJames Collins } 19992b4583abSJames Collins 20002b4583abSJames Collins 2001a8eebd82SJames Collins /** 2002a8eebd82SJames Collins * Get DokuWiki namespace/page/URI as link 2003a8eebd82SJames Collins * 20049cff245bSJames Collins * @param string $str String to parse. 20059cff245bSJames Collins * @return string parsed URI 2006a8eebd82SJames Collins */ 20079cff245bSJames Collins public function getLink(string $str) 200810b40067Snomadjimbob { 20092b4583abSJames Collins $i = strpos($str, '://'); 20109cff245bSJames Collins if ($i !== false) { 20119cff245bSJames Collins return $str; 20129cff245bSJames Collins } 20132b4583abSJames Collins 20142b4583abSJames Collins return wl($str); 20152b4583abSJames Collins } 2016ab45ba71SJames Collins 2017ab45ba71SJames Collins 2018a8eebd82SJames Collins /** 2019a8eebd82SJames Collins * Check if the user can edit current namespace/page 2020a8eebd82SJames Collins * 2021a8eebd82SJames Collins * @return boolean user can edit 2022a8eebd82SJames Collins */ 202310b40067Snomadjimbob public function userCanEdit() 202410b40067Snomadjimbob { 2025ab45ba71SJames Collins global $INFO; 2026ab45ba71SJames Collins global $ID; 2027ab45ba71SJames Collins 2028ab45ba71SJames Collins $wiki_file = wikiFN($ID); 20299cff245bSJames Collins if (@file_exists($wiki_file) === false) { 20309cff245bSJames Collins return true; 20319cff245bSJames Collins } 20329cff245bSJames Collins if ($INFO['isadmin'] === true || $INFO['ismanager'] === true) { 20339cff245bSJames Collins return true; 20349cff245bSJames Collins } 2035a8eebd82SJames Collins // $meta_file = metaFN($ID, '.meta'); 20369cff245bSJames Collins if ($INFO['meta']['user'] === false) { 20379cff245bSJames Collins return true; 20389cff245bSJames Collins } 20399cff245bSJames Collins if ($INFO['client'] === $INFO['meta']['user']) { 20409cff245bSJames Collins return true; 20419cff245bSJames Collins } 2042ab45ba71SJames Collins 2043ab45ba71SJames Collins return false; 2044c165b184SJames Collins } 204547161538SJames Collins 204647161538SJames Collins 2047a8eebd82SJames Collins /** 2048a8eebd82SJames Collins * Search for and return the uri of a media file 2049a8eebd82SJames Collins * 20509cff245bSJames Collins * @param string $image Image name to search for (without extension). 20519cff245bSJames Collins * @param boolean $searchCurrentNS Search the current namespace. 20529cff245bSJames Collins * @param boolean $propagate Propagate search through the namespace. 20539cff245bSJames Collins * @return string URI of the found media file 2054a8eebd82SJames Collins */ 20559cff245bSJames Collins public function getMediaFile(string $image, bool $searchCurrentNS = true, bool $propagate = true) 205610b40067Snomadjimbob { 2057ab45ba71SJames Collins global $INFO; 2058a8eebd82SJames Collins 20599cff245bSJames Collins $ext = ['png', 'jpg', 'gif', 'svg']; 2060ab45ba71SJames Collins 20619cff245bSJames Collins if ($searchCurrentNS === true) { 20629cff245bSJames Collins $prefix[] = ':' . $INFO['namespace'] . ':'; 20639cff245bSJames Collins } 20649cff245bSJames Collins if ($propagate === true) { 2065ab45ba71SJames Collins $prefix[] = ':'; 2066ab45ba71SJames Collins $prefix[] = ':wiki:'; 2067a8eebd82SJames Collins } 2068ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 20693a385f2cSJames Collins if (empty($theme) === false) { 20709cff245bSJames Collins $prefix[] = 'themes/' . $theme . '/images/'; 20719cff245bSJames Collins } 2072ab45ba71SJames Collins $prefix[] = 'images/'; 2073ab45ba71SJames Collins 20749cff245bSJames Collins $search = []; 2075ab45ba71SJames Collins foreach ($prefix as $pitem) { 2076ab45ba71SJames Collins foreach ($ext as $eitem) { 2077ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 2078ab45ba71SJames Collins } 2079ab45ba71SJames Collins } 2080ab45ba71SJames Collins 2081ab45ba71SJames Collins $img = ''; 2082ab45ba71SJames Collins $file = ''; 2083ab45ba71SJames Collins $url = ''; 2084ab45ba71SJames Collins $ismedia = false; 2085ab45ba71SJames Collins $found = false; 2086ab45ba71SJames Collins 2087ab45ba71SJames Collins foreach ($search as $img) { 20883a385f2cSJames Collins if (strcasecmp(substr($img, 0, 1), ':') === 0) { 2089ab45ba71SJames Collins $file = mediaFN($img); 2090ab45ba71SJames Collins $ismedia = true; 2091ab45ba71SJames Collins } else { 2092ab45ba71SJames Collins $file = tpl_incdir() . $img; 2093ab45ba71SJames Collins $ismedia = false; 2094ab45ba71SJames Collins } 2095ab45ba71SJames Collins 20969cff245bSJames Collins if (file_exists($file) === true) { 2097ab45ba71SJames Collins $found = true; 2098ab45ba71SJames Collins break; 2099ab45ba71SJames Collins } 2100ab45ba71SJames Collins } 2101ab45ba71SJames Collins 21029cff245bSJames Collins if ($found === false) { 21039cff245bSJames Collins return false; 21049cff245bSJames Collins } 2105ab45ba71SJames Collins 21069cff245bSJames Collins if ($ismedia === true) { 2107ab45ba71SJames Collins $url = ml($img, '', true, '', false); 2108ab45ba71SJames Collins } else { 2109ab45ba71SJames Collins $url = tpl_basedir() . $img; 2110ab45ba71SJames Collins } 2111ab45ba71SJames Collins 2112ab45ba71SJames Collins return $url; 2113ab45ba71SJames Collins } 2114ab45ba71SJames Collins 2115a8eebd82SJames Collins 2116a8eebd82SJames Collins /** 2117ab45ba71SJames Collins * Print or return the page title 2118ab45ba71SJames Collins * 21199cff245bSJames Collins * @param string $page Page id or empty string for current page. 2120ab45ba71SJames Collins * @return string generated content 2121ab45ba71SJames Collins */ 21229cff245bSJames Collins public function getPageTitle(string $page = '') 212310b40067Snomadjimbob { 2124ab45ba71SJames Collins global $ID, $conf; 2125ab45ba71SJames Collins 2126ab45ba71SJames Collins $html = ''; 2127ab45ba71SJames Collins 21283a385f2cSJames Collins if (empty($page) === true) { 21299cff245bSJames Collins $page = $ID; 21309cff245bSJames Collins } 2131ab45ba71SJames Collins 2132ab45ba71SJames Collins $html = p_get_first_heading($page); 2133ab45ba71SJames Collins $html = strip_tags($html); 2134ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 2135ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 2136ab45ba71SJames Collins $html = trim($html); 2137ab45ba71SJames Collins 2138ab45ba71SJames Collins return $html; 2139ab45ba71SJames Collins } 2140a8eebd82SJames Collins 2141a8eebd82SJames Collins 2142a8eebd82SJames Collins /** 2143a8eebd82SJames Collins * Return inline theme icon 2144a8eebd82SJames Collins * 21459cff245bSJames Collins * @param string $type Icon to retreive. 21469e41d878SJames Collins * @param string $class Classname to insert. 21479cff245bSJames Collins * @return string HTML icon content 2148a8eebd82SJames Collins */ 21499e41d878SJames Collins public function mikioInlineIcon(string $type, string $class = "") 215010b40067Snomadjimbob { 21519e41d878SJames Collins if (is_array($class) === true) { 21529e41d878SJames Collins $class = explode(' ', $class); 21539e41d878SJames Collins } 21549e41d878SJames Collins 21559e41d878SJames Collins if (strlen($class) > 0) { 21569e41d878SJames Collins $class = ' ' . $class; 21579e41d878SJames Collins } 21589e41d878SJames Collins 2159a8eebd82SJames Collins switch ($type) { 2160a8eebd82SJames Collins case 'wrench': 2161906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 -256 1792 2162906e1a13SJames 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, 2163906e1a13SJames 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, 2164906e1a13SJames 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, 2165906e1a13SJames 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 2166906e1a13SJames 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, 2167906e1a13SJames 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>'; 2168a8eebd82SJames Collins case 'file': 2169906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2170906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,235.38983,1277.8305)" id="g2991"> 2171906e1a13SJames 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 2172906e1a13SJames 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 2173906e1a13SJames 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" 21749cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 2175a8eebd82SJames Collins case 'gear': 2176906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2177906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,121.49153,1285.4237)" id="g3027"> 2178906e1a13SJames 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 2179906e1a13SJames 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 2180906e1a13SJames 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 2181906e1a13SJames 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 2182906e1a13SJames 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 2183906e1a13SJames 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, 2184906e1a13SJames 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 2185906e1a13SJames 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 2186906e1a13SJames 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" /> 2187906e1a13SJames Collins</g></svg>'; 2188a8eebd82SJames Collins case 'user': 2189906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2190906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,197.42373,1300.6102)"><path d="M 2191906e1a13SJames 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 2192906e1a13SJames 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, 2193906e1a13SJames 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 2194906e1a13SJames 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 2195906e1a13SJames 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, 2196906e1a13SJames Collins1408 863,1408 975.5,1295.5 1088,1183 1088,1024 z"/></g></svg>'; 2197a8eebd82SJames Collins case 'search': 21989e41d878SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 21999cff245bSJames 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 22009cff245bSJames 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 22019cff245bSJames 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 22029cff245bSJames Collins6.195 0 0 1-6.188 6.188z"/></svg>'; 2203a8eebd82SJames Collins case 'home': 2204906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2205906e1a13SJames CollinsviewBox="0 -256 1792 1792" aria-hidden="true" style="fill:currentColor"><g 2206906e1a13SJames 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 2207906e1a13SJames 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 2208906e1a13SJames 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 2209906e1a13SJames 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, 2210906e1a13SJames 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" 22119cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 22129e41d878SJames Collins case 'sun': 2213906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2214906e1a13SJames 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 2215906e1a13SJames 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 2216906e1a13SJames 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 2217906e1a13SJames 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 2218906e1a13SJames Collins0 0 1-.707.707z" /></svg>'; 22199e41d878SJames Collins case 'moon': 2220906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2221906e1a13SJames 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 2222906e1a13SJames 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 2223906e1a13SJames 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 2224906e1a13SJames 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 2225906e1a13SJames Collins0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286z" /></svg>'; 222634d5f19aSJames Collins case 'sunmoon': 2227d0fba6d1SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2228d0fba6d1SJames Collinsstyle="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" 2229d0fba6d1SJames 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 2230d0fba6d1SJames 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" 2231d0fba6d1SJames 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, 2232d0fba6d1SJames 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>'; 2233f65a4e5eSJames Collins case 'hamburger': 2234f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" 2235f65a4e5eSJames 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 2236f65a4e5eSJames 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 2237f65a4e5eSJames 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 2238f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16z"/></svg>'; 2239f65a4e5eSJames Collins case 'down-arrow': 2240f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 2241f65a4e5eSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M16.003 18.626l7.081-7.081L25 13.46l-8.997 8.998-9.003-9 2242f65a4e5eSJames Collins1.917-1.916z"/></svg>'; 22433a3ece10SJames Collins case 'language': 22443a3ece10SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" width="16" 22453a3ece10SJames Collinsheight="16" fill="currentColor" viewBox="0 0 16 16"><path d="M4.545 6.714 4.11 22463a3ece10SJames 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 22473a3ece10SJames 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 22483a3ece10SJames 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 22493a3ece10SJames 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 22503a3ece10SJames Collins1.472.133-.254.414-.673.629-.89-1.125-.253-2.057-.694-2.82-1.284.681-.747 1.222-1.651 22513a3ece10SJames 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"/> 22523a3ece10SJames Collins</svg>'; 22539cff245bSJames Collins }//end switch 2254ab45ba71SJames Collins 2255a8eebd82SJames Collins return ''; 2256a8eebd82SJames Collins } 2257ab45ba71SJames Collins 2258a8eebd82SJames Collins /** 2259a8eebd82SJames Collins * Finalize theme 22609cff245bSJames Collins * 22619cff245bSJames Collins * @return void 2262a8eebd82SJames Collins */ 226310b40067Snomadjimbob public function finalize() 226410b40067Snomadjimbob { 2265a8eebd82SJames Collins } 22661785fc73SJames Collins 22671785fc73SJames Collins /** 22681785fc73SJames Collins * Show Messages 22699cff245bSJames Collins * 22709cff245bSJames Collins * @return void 22711785fc73SJames Collins */ 227210b40067Snomadjimbob public function showMessages() 227310b40067Snomadjimbob { 22741785fc73SJames Collins global $ACT; 22751785fc73SJames Collins 22769cff245bSJames Collins if ($this->lessIgnored === true) { 22779cff245bSJames Collins msg( 22789cff245bSJames Collins 'useLESS is enabled on the Mikio template, however is not supported on this server', 22799cff245bSJames Collins 2, 22809cff245bSJames Collins '', 22819cff245bSJames Collins '', 22829cff245bSJames Collins MSG_ADMINS_ONLY 22839cff245bSJames Collins ); 2284a8df40efSJames Collins } 2285a8df40efSJames Collins 22861785fc73SJames Collins $show = $this->getConf('showNotifications'); 22873a385f2cSJames Collins if ( 22884f8225e4SJames Collins strlen($show) === 0 || 22893a385f2cSJames Collins strcasecmp($show, 'always') === 0 || 22903a385f2cSJames Collins (strcasecmp($show, 'admin') === 0 && strcasecmp($ACT, 'admin') === 0) 22913a385f2cSJames Collins ) { 22921785fc73SJames Collins global $MSG, $MSG_shown; 22931785fc73SJames Collins 22944f8225e4SJames Collins if (isset($MSG) !== false) { 22959cff245bSJames Collins if (isset($MSG_shown) === false) { 22969cff245bSJames Collins $MSG_shown = []; 2297a8df40efSJames Collins } 22981785fc73SJames Collins 22991785fc73SJames Collins foreach ($MSG as $msg) { 23001785fc73SJames Collins $hash = md5($msg['msg']); 23019cff245bSJames Collins if (isset($MSG_shown[$hash]) === true) { 23021785fc73SJames Collins continue; 23031785fc73SJames Collins } 23041785fc73SJames Collins // skip double messages 23051785fc73SJames Collins 23069cff245bSJames Collins if (info_msg_allowed($msg) === true) { 23079cff245bSJames Collins echo '<div class="' . $msg['lvl'] . '">'; 23089cff245bSJames Collins echo $msg['msg']; 23099cff245bSJames Collins echo '</div>'; 23101785fc73SJames Collins } 23111785fc73SJames Collins 2312a8df40efSJames Collins $MSG_shown[$hash] = true; 23131785fc73SJames Collins } 23141785fc73SJames Collins 23151785fc73SJames Collins unset($GLOBALS['MSG']); 23169cff245bSJames Collins }//end if 23174f8225e4SJames Collins 23184f8225e4SJames Collins if (strlen($this->includedPageNotifications) > 0) { 23194f8225e4SJames Collins echo $this->includedPageNotifications; 23204f8225e4SJames Collins } 23214f8225e4SJames Collins }//end if 23221785fc73SJames Collins } 23237ac0a6efSJames Collins 23247ac0a6efSJames Collins /** 23257ac0a6efSJames Collins * Dokuwiki version 23267ac0a6efSJames Collins * 23277ac0a6efSJames Collins * @return string the dw version name 23287ac0a6efSJames Collins */ 23299cff245bSJames Collins public function dwVersion() 23309cff245bSJames Collins { 23319cff245bSJames Collins if (function_exists('getVersionData') === true) { 23327ac0a6efSJames Collins $version_data = getVersionData(); 23339cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 23347ac0a6efSJames Collins $version_items = explode(' ', $version_data['date']); 23357ac0a6efSJames Collins if (count($version_items) >= 2) { 23367ac0a6efSJames Collins return preg_replace('/[^a-zA-Z0-9 ]+/', '', strtolower($version_items[1])); 23377ac0a6efSJames Collins } 23387ac0a6efSJames Collins } 23397ac0a6efSJames Collins } 23407ac0a6efSJames Collins 23417ac0a6efSJames Collins return 'unknown'; 23427ac0a6efSJames Collins } 2343e4c4fb13SJames Collins 2344e4c4fb13SJames Collins /** 2345e4c4fb13SJames Collins * Dokuwiki version number 2346e4c4fb13SJames Collins * 2347e4c4fb13SJames Collins * @return string the dw version date converted to integer 2348e4c4fb13SJames Collins */ 23499cff245bSJames Collins public function dwVersionNumber() 23509cff245bSJames Collins { 23519cff245bSJames Collins if (function_exists('getVersionData') === true) { 2352e4c4fb13SJames Collins $version_data = getVersionData(); 23539cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 2354e4c4fb13SJames Collins $version_items = explode(' ', $version_data['date']); 2355e4c4fb13SJames Collins if (count($version_items) >= 1) { 2356e4c4fb13SJames Collins return intval(preg_replace('/[^0-9]+/', '', strtolower($version_items[0]))); 2357e4c4fb13SJames Collins } 2358e4c4fb13SJames Collins } 2359e4c4fb13SJames Collins } 2360e4c4fb13SJames Collins 2361e4c4fb13SJames Collins return 0; 2362e4c4fb13SJames Collins } 2363a8eebd82SJames Collins} 2364ab45ba71SJames Collins 2365ab45ba71SJames Collinsglobal $TEMPLATE; 236647161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 2367