1c165b184SJames Collins<?php 210b40067Snomadjimbob 3c165b184SJames Collins/** 4c165b184SJames Collins * DokuWiki Mikio Template 5c165b184SJames Collins * 6c165b184SJames Collins * @link http://dokuwiki.org/template:mikio 7c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 8ab45ba71SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html) 9c165b184SJames Collins */ 1010b40067Snomadjimbob 11ab45ba71SJames Collinsnamespace dokuwiki\template\mikio; 12c165b184SJames Collins 139cff245bSJames Collinsif (defined('DOKU_INC') === false) { 149cff245bSJames Collins die(); 159cff245bSJames Collins} 16c165b184SJames Collins 17ab45ba71SJames Collinsrequire_once('icons/icons.php'); 18c165b184SJames Collinsrequire_once('inc/simple_html_dom.php'); 19c165b184SJames Collins 2010b40067Snomadjimbobclass Template 2110b40067Snomadjimbob{ 229cff245bSJames Collins /** 239cff245bSJames Collins * @var string Template directory path from local FS. 249cff245bSJames Collins */ 25c165b184SJames Collins public $tplDir = ''; 269cff245bSJames Collins 279cff245bSJames Collins /** 289cff245bSJames Collins * @var string Template directory path from web. 299cff245bSJames Collins */ 30c165b184SJames Collins public $baseDir = ''; 319cff245bSJames Collins 329cff245bSJames Collins /** 339cff245bSJames Collins * @var array Array of Javascript files to include in footer. 349cff245bSJames Collins */ 359cff245bSJames Collins public $footerScript = []; 369cff245bSJames Collins 379cff245bSJames Collins /** 389cff245bSJames Collins * @var boolean Ignore LESS files. 399cff245bSJames Collins */ 40a8df40efSJames Collins public $lessIgnored = false; 41c165b184SJames Collins 424f8225e4SJames Collins /** 434f8225e4SJames Collins * @var string Notifications from included pages. 444f8225e4SJames Collins */ 454f8225e4SJames Collins private $includedPageNotifications = ''; 464f8225e4SJames Collins 47c165b184SJames Collins 48c165b184SJames Collins /** 49c165b184SJames Collins * Class constructor 50c165b184SJames Collins */ 5110b40067Snomadjimbob public function __construct() 5210b40067Snomadjimbob { 53c165b184SJames Collins $this->tplDir = tpl_incdir(); 54c165b184SJames Collins $this->baseDir = tpl_basedir(); 55c165b184SJames Collins 569cff245bSJames Collins $this->registerHooks(); 57c165b184SJames Collins } 58c165b184SJames Collins 59c165b184SJames Collins /** 60ab45ba71SJames Collins * Returns the instance of the class 6147161538SJames Collins * 62ab45ba71SJames Collins * @return Template class instance 6347161538SJames Collins */ 6447161538SJames Collins public static function getInstance() 6547161538SJames Collins { 6647161538SJames Collins static $instance = null; 6747161538SJames Collins 683a385f2cSJames Collins if (empty($instance) === true) { 6947161538SJames Collins $instance = new Template(); 7047161538SJames Collins } 7147161538SJames Collins 7247161538SJames Collins return $instance; 7347161538SJames Collins } 7447161538SJames Collins 75ab45ba71SJames Collins 7647161538SJames Collins /** 77ab45ba71SJames Collins * Register the themes hooks into Dokuwiki 789cff245bSJames Collins * 799cff245bSJames Collins * @return void 80c165b184SJames Collins */ 819cff245bSJames Collins private function registerHooks() 8210b40067Snomadjimbob { 83c165b184SJames Collins global $EVENT_HANDLER; 84c165b184SJames Collins 859cff245bSJames Collins $events_dispatcher = [ 86ab45ba71SJames Collins 'TPL_METAHEADER_OUTPUT' => 'metaheadersHandler' 879cff245bSJames Collins ]; 88c165b184SJames Collins 89c165b184SJames Collins foreach ($events_dispatcher as $event => $method) { 90c165b184SJames Collins $EVENT_HANDLER->register_hook($event, 'BEFORE', $this, $method); 91c165b184SJames Collins } 92c165b184SJames Collins } 93c165b184SJames Collins 94c165b184SJames Collins 95c165b184SJames Collins /** 96ab45ba71SJames Collins * Meta handler hook for DokuWiki 97c165b184SJames Collins * 989cff245bSJames Collins * @param \Doku_Event $event DokuWiki Event. 999cff245bSJames Collins * @return void 100c165b184SJames Collins */ 10110b40067Snomadjimbob public function metaHeadersHandler(\Doku_Event $event) 10210b40067Snomadjimbob { 103ab45ba71SJames Collins global $MIKIO_ICONS; 104b5536b07SChris MacMackin global $conf; 105ab45ba71SJames Collins 106ad182e6dSnomadjimbob global $MIKIO_TEMPLATE; 107ad182e6dSnomadjimbob $MIKIO_TEMPLATE = '123'; 108ad182e6dSnomadjimbob 1099cff245bSJames Collins $this->includePage('theme', false, true); 110a8eebd82SJames Collins 1119cff245bSJames Collins $stylesheets = []; 1129cff245bSJames Collins $scripts = []; 113c165b184SJames Collins 1143a385f2cSJames Collins if (empty($this->getConf('customTheme')) === false) { 1159cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.less') === true) { 116a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.less'; 117a8eebd82SJames Collins } else { 1189cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.css') === true) { 119ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.css'; 1202b4583abSJames Collins } 121a8eebd82SJames Collins } 1229cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/script.js') === true) { 123ab45ba71SJames Collins $scripts[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/script.js'; 124c165b184SJames Collins } 125c165b184SJames Collins } 126c165b184SJames Collins 1273a385f2cSJames Collins if (is_array($MIKIO_ICONS) === true && empty($this->getConf('iconTag', 'icon')) === false) { 1289cff245bSJames Collins $icons = []; 129ab45ba71SJames Collins foreach ($MIKIO_ICONS as $icon) { 1309cff245bSJames Collins if (isset($icon['name']) === true && isset($icon['css']) === true && isset($icon['insert']) === true) { 131ab45ba71SJames Collins $icons[] = $icon; 132c165b184SJames Collins 1333a385f2cSJames Collins if (empty($icon['css']) === false) { 1349cff245bSJames Collins if (strpos($icon['css'], '//') === false) { 135a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'icons/' . $icon['css']; 136ab45ba71SJames Collins } else { 137a8eebd82SJames Collins $stylesheets[] = $icon['css']; 138ab45ba71SJames Collins } 139ab45ba71SJames Collins } 140ab45ba71SJames Collins } 141ab45ba71SJames Collins } 142ab45ba71SJames Collins $MIKIO_ICONS = $icons; 143ab45ba71SJames Collins } else { 144ab45ba71SJames Collins $MIKIO_ICONS = []; 145ab45ba71SJames Collins } 146c165b184SJames Collins 1477864545bSChris MacMackin $scripts[] = $this->baseDir . 'assets/mikio-typeahead.js'; 148ab45ba71SJames Collins $scripts[] = $this->baseDir . 'assets/mikio.js'; 149644fd9f9SJames Collins 1509cff245bSJames Collins if ($this->getConf('useLESS') === true) { 151ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.less'; 152644fd9f9SJames Collins } else { 153644fd9f9SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.css'; 154644fd9f9SJames Collins } 155644fd9f9SJames Collins 156ad182e6dSnomadjimbob /* MikioPlugin Support */ 1579ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 158ad182e6dSnomadjimbob if ($this->getConf('useLESS') === true) { 159ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.less'; 160ad182e6dSnomadjimbob } else { 161ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.css'; 162ad182e6dSnomadjimbob } 163ad182e6dSnomadjimbob } 164ab45ba71SJames Collins 165ab45ba71SJames Collins $set = []; 166c165b184SJames Collins foreach ($stylesheets as $style) { 1679cff245bSJames Collins if (in_array($style, $set) === false) { 1683a385f2cSJames Collins if (strcasecmp(substr($style, -5), '.less') === 0 && $this->getConf('useLESS') === true) { 169ab45ba71SJames Collins $style = $this->baseDir . 'css.php?css=' . str_replace($this->baseDir, '', $style); 170ab45ba71SJames Collins } 171ab45ba71SJames Collins 1729cff245bSJames Collins array_unshift($event->data['link'], [ 173c165b184SJames Collins 'type' => 'text/css', 174c165b184SJames Collins 'rel' => 'stylesheet', 175c165b184SJames Collins 'href' => $style 1769cff245bSJames Collins ]); 177c165b184SJames Collins } 178ab45ba71SJames Collins $set[] = $style; 179ab45ba71SJames Collins } 180c165b184SJames Collins 181ab45ba71SJames Collins $set = []; 182c165b184SJames Collins foreach ($scripts as $script) { 1839cff245bSJames Collins if (in_array($script, $set) === false) { 1849cff245bSJames Collins $script_params = [ 185c165b184SJames Collins 'type' => 'text/javascript', 186c165b184SJames Collins '_data' => '', 1878395cdcbSChris MacMackin 'src' => $script 1889cff245bSJames Collins ]; 189c1ecb866SJames Collins 190c1ecb866SJames Collins // equal to or greator than hogfather 191c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 192c1ecb866SJames Collins // greator than hogfather - defer always on 193c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 194c1ecb866SJames Collins $script_params += ['defer' => 'defer']; 195c1ecb866SJames Collins } else { 196c1ecb866SJames Collins // hogfather - defer always on unless $conf['defer_js'] is false 1979cff245bSJames Collins if (array_key_exists('defer_js', $conf) === false || $conf['defer_js'] === true) { 1988395cdcbSChris MacMackin $script_params += ['defer' => 'defer']; 1998395cdcbSChris MacMackin } 200c1ecb866SJames Collins } 201c1ecb866SJames Collins } 202c1ecb866SJames Collins 2038395cdcbSChris MacMackin $event->data['script'][] = $script_params; 2049cff245bSJames Collins }//end if 205ab45ba71SJames Collins $set[] = $script; 2069cff245bSJames Collins }//end foreach 207c165b184SJames Collins } 208c165b184SJames Collins 209c165b184SJames Collins 210c165b184SJames Collins /** 211a8eebd82SJames Collins * Print or return the footer meta data 212c165b184SJames Collins * 2139cff245bSJames Collins * @param boolean $print Print the data to buffer. 2149cff245bSJames Collins * @return string HTML footer meta data 215c165b184SJames Collins */ 2169cff245bSJames Collins public function includeFooterMeta(bool $print = true) 21710b40067Snomadjimbob { 218a8eebd82SJames Collins $html = ''; 219a8eebd82SJames Collins 220a8eebd82SJames Collins if (count($this->footerScript) > 0) { 221a8eebd82SJames Collins $html .= '<script type="text/javascript">function mikioFooterRun() {'; 222a8eebd82SJames Collins foreach ($this->footerScript as $script) { 223a8eebd82SJames Collins $html .= $script . ';'; 224a8eebd82SJames Collins } 225a8eebd82SJames Collins $html .= '}</script>'; 226a8eebd82SJames Collins } 227c165b184SJames Collins 228c165b184SJames Collins 2299cff245bSJames Collins if ($print === true) { 2309cff245bSJames Collins echo $html; 2319cff245bSJames Collins } 232a8eebd82SJames Collins return $html; 233a8eebd82SJames Collins } 234a8eebd82SJames Collins 23595372bffSJames Collins 23695372bffSJames Collins // phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing 23795372bffSJames Collins 23895372bffSJames Collins 239a8eebd82SJames Collins /** 240ab45ba71SJames Collins * Retreive and parse theme configuration options 241c165b184SJames Collins * 2429cff245bSJames Collins * @param string $key The configuration key to retreive. 2439cff245bSJames Collins * @param mixed $default If key doesn't exist, return this value. 244ab45ba71SJames Collins * @return mixed parsed value of configuration 245c165b184SJames Collins */ 24695372bffSJames Collins public function getConf(string $key, $default = false) 24710b40067Snomadjimbob { 248c165b184SJames Collins $value = tpl_getConf($key, $default); 249c165b184SJames Collins 2503a385f2cSJames Collins $data = [ 2513a385f2cSJames Collins ['keys' => ['navbarDWMenuType'], 'type' => 'choice', 2523a385f2cSJames Collins 'values' => ['both', 'icons', 'text'] 2533a385f2cSJames Collins ], 2543a385f2cSJames Collins ['keys' => ['navbarDWMenuCombine'], 'type' => 'choice', 2553a385f2cSJames Collins 'values' => ['combine', 'seperate', 'dropdown'] 2563a385f2cSJames Collins ], 2573a385f2cSJames Collins ['keys' => ['navbarPosLeft', 'navbarPosMiddle', 'navbarPosRight'], 2583a385f2cSJames Collins 'type' => 'choice', 2593a385f2cSJames Collins 'values' => ['none', 'custom', 'search', 'dokuwiki'], 2603a385f2cSJames Collins 'default' => [ 2613a385f2cSJames Collins 'navbarPosLeft' => 'none', 2623a385f2cSJames Collins 'navbarPosMiddle' => 'search', 2633a385f2cSJames Collins 'navbarPosRight' => 'dokuwiki' 2643a385f2cSJames Collins ] 2653a385f2cSJames Collins ], 2663a385f2cSJames Collins ['keys' => ['navbarItemShowCreate', 'navbarItemShowShow', 'navbarItemShowRevs', 'navbarItemShowBacklink', 2673a385f2cSJames Collins 'navbarItemShowRecent', 'navbarItemShowMedia', 'navbarItemShowIndex', 'navbarItemShowProfile', 2683a385f2cSJames Collins 'navbarItemShowAdmin' 2693a385f2cSJames Collins ], 2703a385f2cSJames Collins 'type' => 'choice', 2713a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 2723a385f2cSJames Collins ], 2733a385f2cSJames Collins ['keys' => ['navbarItemShowLogin', 'navbarItemShowLogout'], 2743a385f2cSJames Collins 'type' => 'choice', 2753a385f2cSJames Collins 'values' => ['always', 'never'] 2763a385f2cSJames Collins ], 2773a385f2cSJames Collins ['keys' => ['searchButton'], 'type' => 'choice', 2783a385f2cSJames Collins 'values' => ['icon', 'text'] 2793a385f2cSJames Collins ], 2803a385f2cSJames Collins ['keys' => ['breadcrumbPosition', 'youareherePosition'], 2813a385f2cSJames Collins 'type' => 'choice', 2823a385f2cSJames Collins 'values' => ['top', 'hero', 'page', 'none'] 2833a385f2cSJames Collins ], 2843a385f2cSJames Collins ['keys' => ['youarehereHome'], 'type' => 'choice', 2853a385f2cSJames Collins 'values' => ['page title', 'home', 'icon', 'none'] 2863a385f2cSJames Collins ], 2873a385f2cSJames Collins ['keys' => ['sidebarLeftRow1', 'sidebarLeftRow2', 'sidebarLeftRow3', 'sidebarLeftRow4'], 2883a385f2cSJames Collins 'type' => 'choice', 2893a385f2cSJames Collins 'values' => ['none', 'logged in user', 'search', 'content', 'tags'], 2903a385f2cSJames Collins 'default' => [ 2913a385f2cSJames Collins 'sidebarLeftRow1' => 'logged in user', 2923a385f2cSJames Collins 'sidebarLeftRow2' => 'search', 2933a385f2cSJames Collins 'sidebarLeftRow3' => 'content' 2943a385f2cSJames Collins ] 2953a385f2cSJames Collins ], 2963a385f2cSJames Collins ['keys' => ['pageToolsFloating', 'pageToolsFooter'], 2973a385f2cSJames Collins 'type' => 'choice', 2983a385f2cSJames Collins 'values' => ['always', 'none', 'page editors'] 2993a385f2cSJames Collins ], 3003a385f2cSJames Collins ['keys' => ['pageToolsShowCreate', 'pageToolsShowEdit', 'pageToolsShowRevs', 'pageToolsShowBacklink', 3013a385f2cSJames Collins 'pageToolsShowTop' 3023a385f2cSJames Collins ], 3033a385f2cSJames Collins 'type' => 'choice', 3043a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 3053a385f2cSJames Collins ], 3063a385f2cSJames Collins ['keys' => ['showNotifications'], 'type' => 'choice', 3073a385f2cSJames Collins 'values' => ['admin', 'always', 'none'] 3083a385f2cSJames Collins ], 3093a385f2cSJames Collins ['keys' => ['licenseType'], 'type' => 'choice', 3103a385f2cSJames Collins 'values' => ['badge', 'button', 'none'] 3113a385f2cSJames Collins ], 3123a385f2cSJames Collins ['keys' => ['navbarUseTitleIcon'], 'type' => 'bool'], 3133a385f2cSJames Collins ['keys' => ['navbarUseTitleText'], 'type' => 'bool'], 3143a385f2cSJames Collins ['keys' => ['navbarUseTaglineText'], 'type' => 'bool'], 3153a385f2cSJames Collins ['keys' => ['navbarShowSub'], 'type' => 'bool'], 3163a385f2cSJames Collins ['keys' => ['heroTitle'], 'type' => 'bool'], 3173a385f2cSJames Collins ['keys' => ['heroImagePropagation'], 'type' => 'bool'], 3183a385f2cSJames Collins ['keys' => ['breadcrumbPrefix'], 'type' => 'bool'], 3193a385f2cSJames Collins ['keys' => ['breadcrumbSep'], 'type' => 'bool'], 3203a385f2cSJames Collins ['keys' => ['youareherePrefix'], 'type' => 'bool'], 3213a385f2cSJames Collins ['keys' => ['youarehereSep'], 'type' => 'bool'], 3223a385f2cSJames Collins ['keys' => ['sidebarShowLeft'], 'type' => 'bool'], 3233a385f2cSJames Collins ['keys' => ['sidebarShowRight'], 'type' => 'bool'], 3243a385f2cSJames Collins ['keys' => ['tocFull'], 'type' => 'bool'], 3253a385f2cSJames Collins ['keys' => ['footerSearch'], 'type' => 'bool'], 3263a385f2cSJames Collins ['keys' => ['licenseImageOnly'], 'type' => 'bool'], 3273a385f2cSJames Collins ['keys' => ['includePageUseACL'], 'type' => 'bool'], 3283a385f2cSJames Collins ['keys' => ['includePagePropagate'], 'type' => 'bool'], 3293a385f2cSJames Collins ['keys' => ['youarehereHideHome'], 'type' => 'bool'], 3303a385f2cSJames Collins ['keys' => ['tagsConsolidate'], 'type' => 'bool'], 3313a385f2cSJames Collins ['keys' => ['footerInPage'], 'type' => 'bool'], 3323a385f2cSJames Collins ['keys' => ['sidebarMobileDefaultCollapse'], 'type' => 'bool'], 3333a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowLeft'], 'type' => 'bool'], 3343a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowRight'], 'type' => 'bool'], 3353a385f2cSJames Collins ['keys' => ['searchUseTypeahead'], 'type' => 'bool'], 33612030b10SJames Collins ['keys' => ['showLightDark'], 'type' => 'bool'], 33734d5f19aSJames Collins ['keys' => ['autoLightDark'], 'type' => 'bool'], 3383a385f2cSJames Collins ['keys' => ['youarehereShowLast'], 'type' => 'int'], 3393a385f2cSJames Collins 3403a385f2cSJames Collins ['keys' => ['iconTag'], 'type' => 'string'], 3413a385f2cSJames Collins ['keys' => ['customTheme'], 'type' => 'string'], 3423a385f2cSJames Collins ['keys' => ['navbarCustomMenuText'], 'type' => 'string'], 3433a385f2cSJames Collins ['keys' => ['breadcrumbPrefixText'], 'type' => 'string'], 3443a385f2cSJames Collins ['keys' => ['breadcrumbSepText'], 'type' => 'string'], 3453a385f2cSJames Collins ['keys' => ['youareherePrefixText'], 'type' => 'string'], 3463a385f2cSJames Collins ['keys' => ['youarehereSepText'], 'type' => 'string'], 3473a385f2cSJames Collins ['keys' => ['footerCustomMenuText'], 'type' => 'string'], 3483a385f2cSJames Collins ['keys' => ['brandURLGuest'], 'type' => 'string'], 3493a385f2cSJames Collins ['keys' => ['brandURLUser'], 'type' => 'string'], 3503a385f2cSJames Collins 3513a385f2cSJames Collins ['keys' => ['useLESS'], 'type' => 'less'], 3523a385f2cSJames Collins ]; 3533a385f2cSJames Collins 3543a385f2cSJames Collins foreach ($data as $row) { 3553a385f2cSJames Collins // does not check case.... 3563a385f2cSJames Collins if (in_array($key, $row['keys']) === true) { 35795372bffSJames Collins if (array_key_exists('type', $row) === true) { 3583a385f2cSJames Collins switch ($row['type']) { 3593a385f2cSJames Collins case 'bool': 3603a385f2cSJames Collins return (bool) $value; 3613a385f2cSJames Collins case 'int': 3623a385f2cSJames Collins return (int) $value; 3633a385f2cSJames Collins case 'string': 3643a385f2cSJames Collins return $value; 3653a385f2cSJames Collins case 'less': 36629118ed7SJames Collins $value = (bool) $value; 367a8df40efSJames Collins $lessAvailable = true; 368a8df40efSJames Collins 369a8df40efSJames Collins // check for less library 370a8df40efSJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3719cff245bSJames Collins if (file_exists($lesscLib) === false) { 372a8df40efSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3739cff245bSJames Collins } 3749cff245bSJames Collins if (file_exists($lesscLib) === false) { 375a8df40efSJames Collins $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3769cff245bSJames Collins } 3779cff245bSJames Collins if (file_exists($lesscLib) === false) { 3789cff245bSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . 3799cff245bSJames Collins '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3809cff245bSJames Collins } 3819cff245bSJames Collins if (file_exists($lesscLib) === false) { 382a8df40efSJames Collins $lessAvailable = false; 383a8df40efSJames Collins } 384a8df40efSJames Collins 385a8df40efSJames Collins // check for ctype extensions 3869cff245bSJames Collins if (function_exists('ctype_digit') === false) { 387a8df40efSJames Collins $lessAvailable = false; 388a8df40efSJames Collins } 389a8df40efSJames Collins 3909cff245bSJames Collins if ($value === true && $lessAvailable === false) { 391a8df40efSJames Collins $this->lessIgnored = true; 39229118ed7SJames Collins $value = false; 39329118ed7SJames Collins } 3943a385f2cSJames Collins 3953a385f2cSJames Collins return $value; 3969cff245bSJames Collins }//end switch 3973a385f2cSJames Collins }//end if 3983a385f2cSJames Collins 3993a385f2cSJames Collins if (in_array($value, $row['values']) === true) { 4003a385f2cSJames Collins return $value; 4013a385f2cSJames Collins } 4023a385f2cSJames Collins 4033a385f2cSJames Collins if (array_key_exists('default', $row) === true) { 4043a385f2cSJames Collins if (is_array($row['default']) === true) { 4053a385f2cSJames Collins if (array_key_exists($key, $row['default']) === true) { 4063a385f2cSJames Collins return $row['default'][$key]; 4073a385f2cSJames Collins } 4083a385f2cSJames Collins } else { 4093a385f2cSJames Collins return $row['default']; 4103a385f2cSJames Collins } 4113a385f2cSJames Collins } 4123a385f2cSJames Collins 4133a385f2cSJames Collins return reset($row['values']); 4143a385f2cSJames Collins }//end if 4153a385f2cSJames Collins }//end foreach 416c165b184SJames Collins 417c165b184SJames Collins return $value; 418c165b184SJames Collins } 419c165b184SJames Collins 420c165b184SJames Collins 42195372bffSJames Collins // phpcs:enable 42295372bffSJames Collins 42395372bffSJames Collins 424c165b184SJames Collins /** 425a8eebd82SJames Collins * Check if a page exist in directory or namespace 426c165b184SJames Collins * 4279cff245bSJames Collins * @param string $page Page/namespace to search. 428a8eebd82SJames Collins * @return boolean if page exists 429c165b184SJames Collins */ 4309cff245bSJames Collins public function pageExists(string $page) 43110b40067Snomadjimbob { 432ab45ba71SJames Collins ob_start(); 433a8eebd82SJames Collins tpl_includeFile($page . '.html'); 434ab45ba71SJames Collins $html = ob_get_contents(); 435ab45ba71SJames Collins ob_end_clean(); 436a8eebd82SJames Collins 4373a385f2cSJames Collins if (empty($html) === false) { 4389cff245bSJames Collins return true; 4399cff245bSJames Collins } 440a8eebd82SJames Collins 441a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 442a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 443a8eebd82SJames Collins 4449cff245bSJames Collins if ($propagate === true) { 4459cff245bSJames Collins if (page_findnearest($page, $useACL) !== false) { 4469cff245bSJames Collins return true; 4479cff245bSJames Collins } 4489cff245bSJames Collins } elseif ($useACL === true && auth_quickaclcheck($page) !== AUTH_NONE) { 4499cff245bSJames Collins return true; 450ab45ba71SJames Collins } 451ab45ba71SJames Collins 4529cff245bSJames Collins return false; 453ab45ba71SJames Collins } 454ab45ba71SJames Collins 455a8eebd82SJames Collins 456c165b184SJames Collins /** 457a8eebd82SJames Collins * Print or return page from directory or namespace 4582b4583abSJames Collins * 4599cff245bSJames Collins * @param string $page Page/namespace to include. 4609cff245bSJames Collins * @param boolean $print Print content. 4619cff245bSJames Collins * @param boolean $parse Parse content before printing/returning. 4629cff245bSJames Collins * @param string $classWrapper Wrap page in a div with class. 463ab45ba71SJames Collins * @return string contents of page found 4642b4583abSJames Collins */ 4659cff245bSJames Collins public function includePage(string $page, bool $print = true, bool $parse = true, string $classWrapper = '') 4662b4583abSJames Collins { 467a8eebd82SJames Collins ob_start(); 468a8eebd82SJames Collins tpl_includeFile($page . '.html'); 469a8eebd82SJames Collins $html = ob_get_contents(); 470a8eebd82SJames Collins ob_end_clean(); 471a8eebd82SJames Collins 4723a385f2cSJames Collins if (empty($html) === true) { 4734f8225e4SJames Collins global $MSG; 4744f8225e4SJames Collins 475a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 476a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 477ab45ba71SJames Collins $html = ''; 4782b4583abSJames Collins 4794f8225e4SJames Collins ob_start(); 480ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 4814f8225e4SJames Collins $this->includedPageNotifications .= ob_get_contents(); 4824f8225e4SJames Collins ob_end_clean(); 483ab45ba71SJames Collins } 4842b4583abSJames Collins 4853a385f2cSJames Collins if (empty($html) === false && $parse === true) { 486ab45ba71SJames Collins $html = $this->parseContent($html); 487ab45ba71SJames Collins } 4882b4583abSJames Collins 4893a385f2cSJames Collins if (empty($classWrapper) === false && empty($html) === false) { 4909cff245bSJames Collins $html = '<div class="' . $classWrapper . '">' . $html . '</div>'; 4919cff245bSJames Collins } 4922b4583abSJames Collins 4939cff245bSJames Collins if ($print === true) { 4949cff245bSJames Collins echo $html; 4959cff245bSJames Collins } 496ab45ba71SJames Collins return $html; 4972b4583abSJames Collins } 4982b4583abSJames Collins 499a8eebd82SJames Collins 500a8eebd82SJames Collins /** 501a8eebd82SJames Collins * Print or return logged in user information 502a8eebd82SJames Collins * 5039cff245bSJames Collins * @param boolean $print Print content. 504a8eebd82SJames Collins * @return string user information 505a8eebd82SJames Collins */ 5069cff245bSJames Collins public function includeLoggedIn(bool $print = true) 50710b40067Snomadjimbob { 508a8eebd82SJames Collins $html = ''; 509a8eebd82SJames Collins 5109cff245bSJames Collins if (empty($_SERVER['REMOTE_USER']) === false) { 511a8eebd82SJames Collins $html .= '<div class="mikio-user-info">'; 512a8eebd82SJames Collins ob_start(); 513a8eebd82SJames Collins tpl_userinfo(); 514a8eebd82SJames Collins $html .= ob_get_contents(); 515a8eebd82SJames Collins ob_end_clean(); 516a8eebd82SJames Collins $html .= '</div>'; 5172b4583abSJames Collins } 518a8eebd82SJames Collins 5199cff245bSJames Collins if ($print === true) { 5209cff245bSJames Collins echo $html; 5219cff245bSJames Collins } 522a8eebd82SJames Collins return $html; 5232b4583abSJames Collins } 5242b4583abSJames Collins 5252b4583abSJames Collins 526a8eebd82SJames Collins /** 527a8eebd82SJames Collins * Print or return DokuWiki Menu 528a8eebd82SJames Collins * 5299cff245bSJames Collins * @param boolean $print Print content. 530a8eebd82SJames Collins * @return string contents of the menu 531a8eebd82SJames Collins */ 5329cff245bSJames Collins public function includeDWMenu(bool $print = true) 53310b40067Snomadjimbob { 5342b4583abSJames Collins global $lang; 5352b4583abSJames Collins global $USERINFO; 536c165b184SJames Collins 5379cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 538a8eebd82SJames Collins $html = '<ul class="mikio-nav">'; 5392b4583abSJames Collins 540ab45ba71SJames Collins $pageToolsMenu = []; 541ab45ba71SJames Collins $siteToolsMenu = []; 542ab45ba71SJames Collins $userToolsMenu = []; 543c165b184SJames Collins 544ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 545ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 546ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 5472b4583abSJames Collins 5482b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 5492b4583abSJames Collins foreach ($items as $item) { 5509cff245bSJames Collins if ($item->getType() !== 'top') { 551ab45ba71SJames Collins $itemHtml = ''; 5522b4583abSJames Collins 553905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5549cff245bSJames Collins if ( 5553a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5563a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5573a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5589cff245bSJames Collins ) { 5599cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . 5609cff245bSJames Collins ' ' . $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5619cff245bSJames Collins if ($showIcons === true) { 5629cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5639cff245bSJames Collins } 5649cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5659cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5669cff245bSJames Collins } 567ab45ba71SJames Collins $itemHtml .= '</a>'; 568ab45ba71SJames Collins 569ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 5702b4583abSJames Collins } 5719cff245bSJames Collins }//end if 5729cff245bSJames Collins }//end foreach 5732b4583abSJames Collins 574ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action'); 575ab45ba71SJames Collins foreach ($items as $item) { 576ab45ba71SJames Collins $itemHtml = ''; 5772b4583abSJames Collins 578905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5799cff245bSJames Collins if ( 5803a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5813a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5823a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5839cff245bSJames Collins ) { 5849cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . ' ' . 5859cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5869cff245bSJames Collins if ($showIcons === true) { 5879cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5889cff245bSJames Collins } 5899cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5909cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5919cff245bSJames Collins } 592ab45ba71SJames Collins $itemHtml .= '</a>'; 5932b4583abSJames Collins 594ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 5952b4583abSJames Collins } 5969cff245bSJames Collins }//end foreach 5972b4583abSJames Collins 598ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 599ab45ba71SJames Collins foreach ($items as $item) { 600ab45ba71SJames Collins $itemHtml = ''; 601ab45ba71SJames Collins 602905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 6039cff245bSJames Collins if ( 6043a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 6053a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 6063a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 6079cff245bSJames Collins ) { 6089cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link' . ($isDropDown === true ? ' mikio-dropdown-item' : '') . ' ' . 6099cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 6109cff245bSJames Collins if ($showIcons === true) { 6119cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 6129cff245bSJames Collins } 6139cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6149cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6159cff245bSJames Collins } 616ab45ba71SJames Collins $itemHtml .= '</a>'; 617ab45ba71SJames Collins 618ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 619ab45ba71SJames Collins } 6209cff245bSJames Collins }//end foreach 621ab45ba71SJames Collins 622ab45ba71SJames Collins 623ab45ba71SJames Collins switch ($this->getConf('navbarDWMenuCombine')) { 624ab45ba71SJames Collins case 'dropdown': 625ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 6269cff245bSJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" 6279cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6289cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('file') : '') . 6299cff245bSJames Collins ($showText === true ? $lang['page_tools'] : '<span class="mikio-small-only">' . $lang['page_tools'] . 6309cff245bSJames Collins '</span>') . '</a>'; 631a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 632ab45ba71SJames Collins 633ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 634ab45ba71SJames Collins $html .= $item; 635ab45ba71SJames Collins } 636ab45ba71SJames Collins 637ab45ba71SJames Collins $html .= '</div>'; 638ab45ba71SJames Collins $html .= '</li>'; 639ab45ba71SJames Collins 640a8eebd82SJames Collins $html .= '<li id="dokuwiki__sitetools" class="mikio-nav-dropdown">'; 6419cff245bSJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" 6429cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6439cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('gear') : '') . 6449cff245bSJames Collins ($showText === true ? $lang['site_tools'] : '<span class="mikio-small-only">' . 6459cff245bSJames Collins $lang['site_tools'] . '</span>') . '</a>'; 646a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 647ab45ba71SJames Collins 648ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 649ab45ba71SJames Collins $html .= $item; 650ab45ba71SJames Collins } 651ab45ba71SJames Collins 652ab45ba71SJames Collins $html .= '</div>'; 653ab45ba71SJames Collins $html .= '</li>'; 654ab45ba71SJames Collins 655a8eebd82SJames Collins $html .= '<li id="dokuwiki__usertools" class="mikio-nav-dropdown">'; 6569cff245bSJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" 6579cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6589cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('user') : '') . 6599cff245bSJames Collins ($showText === true ? $lang['user_tools'] : '<span class="mikio-small-only">' . 6609cff245bSJames Collins $lang['user_tools'] . '</span>') . '</a>'; 661a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 662ab45ba71SJames Collins 663ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 664ab45ba71SJames Collins $html .= $item; 665ab45ba71SJames Collins } 666ab45ba71SJames Collins 667ab45ba71SJames Collins $html .= '</div>'; 668ab45ba71SJames Collins $html .= '</li>'; 669ab45ba71SJames Collins 670ab45ba71SJames Collins break; 671ab45ba71SJames Collins 672ab45ba71SJames Collins case 'combine': 673ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 6749cff245bSJames Collins $html .= '<a class="mikio-nav-link" href="#">' . 6759cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('wrench') : '') . 6769cff245bSJames Collins ($showText === true ? tpl_getLang('tools-menu') : '<span class="mikio-small-only">' . 6779cff245bSJames Collins tpl_getLang('tools-menu') . '</span>') . '</a>'; 678a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 679ab45ba71SJames Collins 680ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 681ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 682ab45ba71SJames Collins $html .= $item; 683ab45ba71SJames Collins } 684ab45ba71SJames Collins 685ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 686ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 687ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 688ab45ba71SJames Collins $html .= $item; 689ab45ba71SJames Collins } 690ab45ba71SJames Collins 691ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 692ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 693ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 694ab45ba71SJames Collins $html .= $item; 695ab45ba71SJames Collins } 696ab45ba71SJames Collins 697ab45ba71SJames Collins $html .= '</div>'; 698ab45ba71SJames Collins $html .= '</li>'; 699ab45ba71SJames Collins break; 700ab45ba71SJames Collins 701ab45ba71SJames Collins default: // seperate 702ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 703a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 704ab45ba71SJames Collins } 705ab45ba71SJames Collins 706ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 707a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 708a8eebd82SJames Collins } 709a8eebd82SJames Collins 710a8eebd82SJames Collins foreach ($userToolsMenu as $item) { 711a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 712ab45ba71SJames Collins } 713ab45ba71SJames Collins 714ab45ba71SJames Collins break; 7159cff245bSJames Collins }//end switch 716ab45ba71SJames Collins 7173a3ece10SJames Collins $translation = plugin_load('helper', 'translation'); 7183a3ece10SJames Collins if ($translation !== null) { 7193a3ece10SJames Collins $html .= '<li id="mikio__translate" class="mikio-nav-dropdown">'; 7203a3ece10SJames Collins $html .= '<a id="mikio_dropdown_translate" class="nav-link dropdown-toggle" href="#" role="button" 7213a3ece10SJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 7223a3ece10SJames Collins $this->mikioInlineIcon('language') . 7233a3ece10SJames Collins '</a>'; 7243a3ece10SJames Collins $html .= '<div class="mikio-dropdown closed">'; 7253a3ece10SJames Collins 7263a3ece10SJames Collins $html .= $translation->showTranslations(); 7273a3ece10SJames Collins 7283a3ece10SJames Collins $html .= '</div>'; 7293a3ece10SJames Collins $html .= '</li>'; 7303a3ece10SJames Collins } 7313a3ece10SJames Collins 73212030b10SJames Collins if ($this->getConf('showLightDark') === true) { 733d0fba6d1SJames Collins $autoLightDark = $this->getConf('autoLightDark'); 7349e41d878SJames Collins $html .= '<li class="mikio-darklight"> 7359e41d878SJames Collins<a href="#" class="mikio-control mikio-button mikio-darklight-button">' . 736d0fba6d1SJames Collins ($autoLightDark === true ? $this->mikioInlineIcon('sunmoon', 'mikio-darklight-auto') : '') . 7379e41d878SJames Collins $this->mikioInlineIcon('sun', 'mikio-darklight-light') . 7389e41d878SJames Collins $this->mikioInlineIcon('moon', 'mikio-darklight-dark') . 7399e41d878SJames Collins '</a></li>'; 74012030b10SJames Collins } 74112030b10SJames Collins 742ab45ba71SJames Collins $html .= '</ul>'; 743ab45ba71SJames Collins 7449cff245bSJames Collins if ($print === true) { 7459cff245bSJames Collins echo $html; 7469cff245bSJames Collins } 747a8eebd82SJames Collins return $html; 748a8eebd82SJames Collins } 749a8eebd82SJames Collins 750a8eebd82SJames Collins 751a8eebd82SJames Collins /** 752a8eebd82SJames Collins * Create a nav element from a string. <uri>|<title>; 753a8eebd82SJames Collins * 7549cff245bSJames Collins * @param string $str String to generate nav. 755a8eebd82SJames Collins * @return string nav elements generated 756a8eebd82SJames Collins */ 7579cff245bSJames Collins public function stringToNav(string $str) 75810b40067Snomadjimbob { 759a8eebd82SJames Collins $html = ''; 760a8eebd82SJames Collins 7613a385f2cSJames Collins if (empty($str) === false) { 762a8eebd82SJames Collins $items = explode(';', $str); 763a8eebd82SJames Collins if (count($items) > 0) { 764a8eebd82SJames Collins $html .= '<ul class="mikio-nav">'; 765a8eebd82SJames Collins foreach ($items as $item) { 766a8eebd82SJames Collins $parts = explode('|', $item); 767a8eebd82SJames Collins if ($parts > 1) { 7689cff245bSJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . 7699cff245bSJames Collins strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . 7709cff245bSJames Collins '</a></li>'; 771a8eebd82SJames Collins } 772a8eebd82SJames Collins } 773a8eebd82SJames Collins $html .= '</ul>'; 774a8eebd82SJames Collins } 7752b4583abSJames Collins } 7762b4583abSJames Collins 777ab45ba71SJames Collins return $html; 7782b4583abSJames Collins } 7792b4583abSJames Collins 780a8eebd82SJames Collins /** 781ab45ba71SJames Collins * print or return the main navbar 7822b4583abSJames Collins * 7839cff245bSJames Collins * @param boolean $print Print the navbar. 7849cff245bSJames Collins * @param boolean $showSub Include the sub navbar. 785ab45ba71SJames Collins * @return string generated content 7862b4583abSJames Collins */ 7879cff245bSJames Collins public function includeNavbar(bool $print = true, bool $showSub = false) 78810b40067Snomadjimbob { 789b39ad16dSJames Collins global $conf, $USERINFO; 790d3d7d2b7SJames Collins 791d3d7d2b7SJames Collins $homeUrl = wl(); 792d3d7d2b7SJames Collins 7939cff245bSJames Collins if (plugin_isdisabled('showpageafterlogin') === false) { 794d3d7d2b7SJames Collins $p = &plugin_load('action', 'showpageafterlogin'); 7953a385f2cSJames Collins if (empty($p) === false) { 7969cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 797d3d7d2b7SJames Collins $homeUrl = wl($p->getConf('page_after_login')); 798d3d7d2b7SJames Collins } 799d3d7d2b7SJames Collins } 800b39ad16dSJames Collins } else { 8019cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 802b39ad16dSJames Collins $url = $this->getConf('brandURLUser'); 803b39ad16dSJames Collins if (strlen($url) > 0) { 804b39ad16dSJames Collins $homeUrl = $url; 805d3d7d2b7SJames Collins } 806b39ad16dSJames Collins } else { 807b39ad16dSJames Collins $url = $this->getConf('brandURLGuest'); 808b39ad16dSJames Collins if (strlen($url) > 0) { 809b39ad16dSJames Collins $homeUrl = $url; 810b39ad16dSJames Collins } 811b39ad16dSJames Collins } 812b39ad16dSJames Collins } 813d3d7d2b7SJames Collins 814ab45ba71SJames Collins $html = ''; 81547161538SJames Collins 8169cff245bSJames Collins $html .= '<nav class="mikio-navbar' . (($this->getConf('stickyNavbar') === true) ? ' mikio-sticky' : '') . 8179cff245bSJames Collins '">'; 818f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 819d3d7d2b7SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . $homeUrl . '">'; 8209cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true || $this->getConf('navbarUseTitleText') === true) { 821ab45ba71SJames Collins // Brand image 8229cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true) { 8239cff245bSJames Collins $logo = $this->getMediaFile('logo', false); 8249cff245bSJames Collins ; 8253a385f2cSJames Collins if (empty($logo) === false) { 826f0241fc4SJames Collins $width = $this->getConf('navbarTitleIconWidth'); 827f0241fc4SJames Collins $height = $this->getConf('navbarTitleIconHeight'); 828f0241fc4SJames Collins $styles = ''; 829f0241fc4SJames Collins 830f0241fc4SJames Collins if (strlen($width) > 0 || strlen($height) > 0) { 8319cff245bSJames Collins if (ctype_digit($width) === true) { 832f0241fc4SJames Collins $styles .= 'max-width:' . intval($width) . 'px;'; 8339cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $width) === 1) { 834f0241fc4SJames Collins $styles .= 'max-width:' . $width . ';'; 8359cff245bSJames Collins } elseif (strcasecmp($width, 'none') === 0) { 8367a92c19bSJames Collins $styles .= 'max-width:none;'; 837f0241fc4SJames Collins } 838f0241fc4SJames Collins 8399cff245bSJames Collins if (ctype_digit($height) === true) { 840f0241fc4SJames Collins $styles .= 'max-height:' . intval($height) . 'px;'; 8419cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $height) === 1) { 842f0241fc4SJames Collins $styles .= 'max-height:' . $height . ';'; 8439cff245bSJames Collins } elseif (strcasecmp($height, 'none') === 0) { 8447a92c19bSJames Collins $styles .= 'max-height:none;'; 845f0241fc4SJames Collins } 846f0241fc4SJames Collins 847f0241fc4SJames Collins if (strlen($styles) > 0) { 848f0241fc4SJames Collins $styles = ' style="' . $styles . '"'; 849f0241fc4SJames Collins } 8509cff245bSJames Collins }//end if 851f0241fc4SJames Collins 852f0241fc4SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image"' . $styles . '>'; 8539cff245bSJames Collins }//end if 8549cff245bSJames Collins }//end if 855ab45ba71SJames Collins 856ab45ba71SJames Collins // Brand title 8579cff245bSJames Collins if ($this->getConf('navbarUseTitleText') === true) { 858ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 859a8eebd82SJames Collins $html .= '<h1 class="mikio-navbar-brand-title-text">' . $conf['title'] . '</h1>'; 8609cff245bSJames Collins if ($this->getConf('navbarUseTaglineText') === true) { 861a8eebd82SJames Collins $html .= '<p class="claim mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</p>'; 862ab45ba71SJames Collins } 863ab45ba71SJames Collins $html .= '</div>'; 864ab45ba71SJames Collins } 8659cff245bSJames Collins }//end if 866ab45ba71SJames Collins $html .= '</a>'; 867660b2c71SJames Collins $html .= '<div class="mikio-navbar-toggle"><span class="icon"></span></div>'; 868ab45ba71SJames Collins 869ab45ba71SJames Collins // Menus 870ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 871ab45ba71SJames Collins 8729cff245bSJames Collins $menus = [$this->getConf('navbarPosLeft', 'none'), $this->getConf('navbarPosMiddle', 'none'), 8739cff245bSJames Collins $this->getConf('navbarPosRight', 'none') 8749cff245bSJames Collins ]; 875a8eebd82SJames Collins foreach ($menus as $menuType) { 876a8eebd82SJames Collins switch ($menuType) { 877a8eebd82SJames Collins case 'custom': 878a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('navbarCustomMenuText', '')); 879a8eebd82SJames Collins break; 880a8eebd82SJames Collins case 'search': 881ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 882ab45ba71SJames Collins $html .= $this->includeSearch(false); 883ab45ba71SJames Collins $html .= '</div>'; 884a8eebd82SJames Collins break; 885a8eebd82SJames Collins case 'dokuwiki': 8869cff245bSJames Collins $html .= $this->includeDWMenu(false); 887a8eebd82SJames Collins break; 888a8eebd82SJames Collins } 889a8eebd82SJames Collins } 890ab45ba71SJames Collins 891ab45ba71SJames Collins $html .= '</div>'; 892f8039bf2SJames Collins $html .= '</div>'; 893ab45ba71SJames Collins $html .= '</nav>'; 894ab45ba71SJames Collins 895a8eebd82SJames Collins // Sub Navbar 8969cff245bSJames Collins if ($showSub === true) { 8979cff245bSJames Collins $sub = $this->includePage('submenu', false); 8983a385f2cSJames Collins if (empty($sub) === false) { 8999cff245bSJames Collins $html .= '<nav class="mikio-navbar mikio-sub-navbar">' . $sub . '</nav>'; 9009cff245bSJames Collins } 901ab45ba71SJames Collins } 902ab45ba71SJames Collins 9039cff245bSJames Collins if ($print === true) { 9049cff245bSJames Collins echo $html; 9059cff245bSJames Collins } 906ab45ba71SJames Collins return $html; 907ab45ba71SJames Collins } 908ab45ba71SJames Collins 909ab45ba71SJames Collins 910a8eebd82SJames Collins /** 911a8eebd82SJames Collins * Is there a sidebar 912a8eebd82SJames Collins * 9139cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 914a8eebd82SJames Collins * @return boolean if sidebar exists 915a8eebd82SJames Collins */ 9169cff245bSJames Collins public function sidebarExists(string $prefix = '') 91710b40067Snomadjimbob { 918a8eebd82SJames Collins global $conf; 919a8eebd82SJames Collins 9203a385f2cSJames Collins if (strcasecmp($prefix, 'left') === 0) { 9219cff245bSJames Collins $prefix = ''; 9229cff245bSJames Collins } 923a8eebd82SJames Collins 924a8eebd82SJames Collins return $this->pageExists($conf['sidebar' . $prefix]); 925a8eebd82SJames Collins } 926a8eebd82SJames Collins 927a8eebd82SJames Collins 928a8eebd82SJames Collins /** 929ab45ba71SJames Collins * Print or return the sidebar content 930ab45ba71SJames Collins * 9319cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 9329cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 9339cff245bSJames Collins * @param boolean $parse Parse the content. 934ab45ba71SJames Collins * @return string generated content 935ab45ba71SJames Collins */ 9369cff245bSJames Collins public function includeSidebar(string $prefix = '', bool $print = true, bool $parse = true) 93710b40067Snomadjimbob { 938ab45ba71SJames Collins global $conf, $ID; 939ab45ba71SJames Collins 940ab45ba71SJames Collins $html = ''; 941ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 942ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 943ab45ba71SJames Collins 9443a385f2cSJames Collins if (empty($confPrefix) === true) { 9459cff245bSJames Collins $confPrefix = 'Left'; 9469cff245bSJames Collins } 9471cdedf28SJames Collins if (strcasecmp($prefix, 'left') === 0) { 9489cff245bSJames Collins $prefix = ''; 9499cff245bSJames Collins } 950ab45ba71SJames Collins 9511cdedf28SJames Collins $sidebarPage = empty($conf[$prefix . 'sidebar']) === true ? $prefix . 'sidebar' : $conf[$prefix . 'sidebar']; 952ab45ba71SJames Collins 9539cff245bSJames Collins if ( 9549cff245bSJames Collins $this->getConf('sidebarShow' . $confPrefix) === true && page_findnearest($sidebarPage) !== false && 9551cdedf28SJames Collins p_get_metadata($ID, 'nosidebar', false) === null 9569cff245bSJames Collins ) { 9579cff245bSJames Collins $content = $this->includePage($sidebarPage . 'header', false); 9583a385f2cSJames Collins if (empty($content) === false) { 9599cff245bSJames Collins $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 9609cff245bSJames Collins } 961ab45ba71SJames Collins 9623a385f2cSJames Collins if (empty($prefix) === true) { 9639cff245bSJames Collins $rows = [$this->getConf('sidebarLeftRow1'), $this->getConf('sidebarLeftRow2'), 9649cff245bSJames Collins $this->getConf('sidebarLeftRow3'), $this->getConf('sidebarLeftRow4') 9659cff245bSJames Collins ]; 966ab45ba71SJames Collins 967a8eebd82SJames Collins foreach ($rows as $row) { 968a8eebd82SJames Collins switch ($row) { 969a8eebd82SJames Collins case 'search': 9709cff245bSJames Collins $html .= $this->includeSearch(false); 971a8eebd82SJames Collins break; 972a8eebd82SJames Collins case 'logged in user': 9739cff245bSJames Collins $html .= $this->includeLoggedIn(false); 974a8eebd82SJames Collins break; 975a8eebd82SJames Collins case 'content': 9769cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9773a385f2cSJames Collins if (empty($content) === false) { 9789cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9799cff245bSJames Collins } 980a8eebd82SJames Collins break; 981a8eebd82SJames Collins case 'tags': 982a8eebd82SJames Collins $html .= '<div class="mikio-tags"></div>'; 983a8eebd82SJames Collins } 984a8eebd82SJames Collins } 985a8eebd82SJames Collins } else { 9869cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9873a385f2cSJames Collins if (empty($content) === false) { 9889cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9899cff245bSJames Collins } 9909cff245bSJames Collins }//end if 9919cff245bSJames Collins 9929cff245bSJames Collins $content = $this->includePage($sidebarPage . 'footer', false); 9933a385f2cSJames Collins if (empty($content) === false) { 9949cff245bSJames Collins $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 9959cff245bSJames Collins } 9969cff245bSJames Collins }//end if 9979cff245bSJames Collins 9983a385f2cSJames Collins if (empty($html) === true) { 9993a385f2cSJames Collins if (empty($prefix) === true && $this->getConf('sidebarAlwaysShowLeft') === true) { 10009cff245bSJames Collins $html = ' '; 10019cff245bSJames Collins } 10029cff245bSJames Collins if ($this->getConf('sidebarAlwaysShow' . ucfirst($prefix)) === true) { 10039cff245bSJames Collins $html = ' '; 10049cff245bSJames Collins } 1005a8eebd82SJames Collins } 1006ab45ba71SJames Collins 10073a385f2cSJames Collins if (empty($html) === false) { 10081cdedf28SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . (empty($prefix) === true ? 'left' : $prefix) . 10099cff245bSJames Collins '"><a class="mikio-sidebar-toggle' . 10109cff245bSJames Collins ($this->getConf('sidebarMobileDefaultCollapse') === true ? ' closed' : '') . '" href="#">' . 10119cff245bSJames Collins tpl_getLang('sidebar-title') . ' <span class="icon"></span></a><div class="mikio-sidebar-collapse">' . 10129cff245bSJames Collins $html . '</div></aside>'; 1013ab45ba71SJames Collins } 1014ab45ba71SJames Collins 10159cff245bSJames Collins if ($parse === true) { 10169cff245bSJames Collins $html = $this->includeIcons($html); 10173a04a100SJames Collins } 10189cff245bSJames Collins if ($print === true) { 10199cff245bSJames Collins echo $html; 1020ab45ba71SJames Collins } 10214f8225e4SJames Collins 1022ab45ba71SJames Collins return $html; 1023ab45ba71SJames Collins } 1024ab45ba71SJames Collins 1025ab45ba71SJames Collins 1026a8eebd82SJames Collins /** 1027ab45ba71SJames Collins * Print or return the page tools content 1028ab45ba71SJames Collins * 10299cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 10309cff245bSJames Collins * @param boolean $includeId Include the dw__pagetools id in the element. 1031ab45ba71SJames Collins * @return string generated content 1032ab45ba71SJames Collins */ 10339cff245bSJames Collins public function includePageTools(bool $print = true, bool $includeId = false) 103410b40067Snomadjimbob { 10351293ce10SJames Collins global $USERINFO; 10361293ce10SJames Collins 10379cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 1038ab45ba71SJames Collins $html = ''; 1039ab45ba71SJames Collins 10409cff245bSJames Collins $html .= '<nav' . ($includeId === true ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 1041b9c0582bSJames Collins $html .= '<ul class="tools">'; 1042ab45ba71SJames Collins 1043ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 1044ab45ba71SJames Collins foreach ($items as $item) { 10459cff245bSJames Collins $classes = []; 10463fd763a0SJames Collins $classes[] = $item->getType(); 10473fd763a0SJames Collins $attr = $item->getLinkAttributes(); 10483fd763a0SJames Collins 10499cff245bSJames Collins if (empty($attr['class']) === false) { 10503fd763a0SJames Collins $classes = array_merge($classes, explode(' ', $attr['class'])); 1051ab45ba71SJames Collins } 1052ab45ba71SJames Collins 10533fd763a0SJames Collins $classes = array_unique($classes); 10543fd763a0SJames Collins 1055f02b8ab5SJames Collins $showItem = $this->getConf('pageToolsShow' . ucfirst($item->getType()), 'always'); 10569cff245bSJames Collins if ( 10573a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 10583a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 10593a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === true)) 10609cff245bSJames Collins ) { 10613fd763a0SJames Collins $html .= '<li class="' . implode(' ', $classes) . '">'; 10629cff245bSJames Collins $html .= '<a href="' . $item->getLink() . '" class="' . $item->getType() . '" title="' . 10639cff245bSJames Collins $item->getTitle() . '"><div class="icon">' . inlineSVG($item->getSvg()) . 10649cff245bSJames Collins '</div><span class="a11y">' . $item->getLabel() . '</span></a>'; 10653fd763a0SJames Collins $html .= '</li>'; 10663fd763a0SJames Collins } 10679cff245bSJames Collins }//end foreach 10683fd763a0SJames Collins 10693fd763a0SJames Collins $html .= '</ul>'; 1070ab45ba71SJames Collins $html .= '</nav>'; 1071ab45ba71SJames Collins 10729cff245bSJames Collins if ($print === true) { 10739cff245bSJames Collins echo $html; 10749cff245bSJames Collins } 1075ab45ba71SJames Collins return $html; 1076ab45ba71SJames Collins } 1077ab45ba71SJames Collins 1078ab45ba71SJames Collins 1079a8eebd82SJames Collins /** 1080a8eebd82SJames Collins * Print or return the search bar 1081a8eebd82SJames Collins * 10829cff245bSJames Collins * @param boolean $print Print content. 1083a8eebd82SJames Collins * @return string contents of the search bar 1084a8eebd82SJames Collins */ 10859cff245bSJames Collins public function includeSearch(bool $print = true) 108610b40067Snomadjimbob { 10879cff245bSJames Collins global $lang, $ID, $ACT, $QUERY; 1088ab45ba71SJames Collins $html = ''; 1089ab45ba71SJames Collins 10909cff245bSJames Collins $html .= '<form class="mikio-search search" action="' . wl() . 10919cff245bSJames Collins '" accept-charset="utf-8" method="get" role="search">'; 1092a8eebd82SJames Collins $html .= '<input type="hidden" name="do" value="search">'; 1093a8eebd82SJames Collins $html .= '<input type="hidden" name="id" value="' . $ID . '">'; 1094c1cb9f15SChris MacMackin $html .= '<input name="q" '; 10959cff245bSJames Collins if ($this->getConf('searchUseTypeahead') === true) { 1096c1cb9f15SChris MacMackin $html .= 'class="search_typeahead" '; 1097c1cb9f15SChris MacMackin } 10989cff245bSJames Collins $html .= 'autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . 10993a385f2cSJames Collins ((strcasecmp($ACT, 'search') === 0) ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 1100a8eebd82SJames Collins $html .= '<button type="submit" title="' . $lang['btn_search'] . '">'; 11013a385f2cSJames Collins if (strcasecmp($this->getConf('searchButton'), 'icon') === 0) { 1102a8eebd82SJames Collins $html .= $this->mikioInlineIcon('search'); 1103ab45ba71SJames Collins } else { 1104ab45ba71SJames Collins $html .= $lang['btn_search']; 1105ab45ba71SJames Collins } 1106ab45ba71SJames Collins $html .= '</button>'; 1107ab45ba71SJames Collins $html .= '</form>'; 1108ab45ba71SJames Collins 11099cff245bSJames Collins if ($print === true) { 11109cff245bSJames Collins echo $html; 11119cff245bSJames Collins } 1112ab45ba71SJames Collins return $html; 1113ab45ba71SJames Collins } 1114ab45ba71SJames Collins 1115ab45ba71SJames Collins 1116a8eebd82SJames Collins /** 1117a8eebd82SJames Collins * Print or return content 1118a8eebd82SJames Collins * 11199cff245bSJames Collins * @param boolean $print Print content. 1120a8eebd82SJames Collins * @return string contents 1121a8eebd82SJames Collins */ 11229cff245bSJames Collins public function includeContent(bool $print = true) 112310b40067Snomadjimbob { 1124ab45ba71SJames Collins ob_start(); 11259cff245bSJames Collins tpl_content(false); 1126ab45ba71SJames Collins $html = ob_get_contents(); 1127ab45ba71SJames Collins ob_end_clean(); 1128ab45ba71SJames Collins 1129ab45ba71SJames Collins $html = $this->includeIcons($html); 1130ab45ba71SJames Collins $html = $this->parseContent($html); 1131ab45ba71SJames Collins 1132ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 1133ab45ba71SJames Collins 11349cff245bSJames Collins if ($this->getConf('heroTitle') === false) { 11359cff245bSJames Collins $html = '<div class="mikio-tags"></div>' . $html; 11369cff245bSJames Collins } 1137a8eebd82SJames Collins 1138a8eebd82SJames Collins $html = '<div class="mikio-article-content">' . $html . '</div>'; 1139a8eebd82SJames Collins 11409cff245bSJames Collins if ($print === true) { 11419cff245bSJames Collins echo $html; 11429cff245bSJames Collins } 1143ab45ba71SJames Collins return $html; 1144ab45ba71SJames Collins } 1145ab45ba71SJames Collins 1146a8eebd82SJames Collins /** 1147ab45ba71SJames Collins * Print or return footer 1148ab45ba71SJames Collins * 11499cff245bSJames Collins * @param boolean $print Print footer. 11509cff245bSJames Collins * @return string HTML string containing footer 1151ab45ba71SJames Collins */ 11529cff245bSJames Collins public function includeFooter(bool $print = true) 115310b40067Snomadjimbob { 1154ab45ba71SJames Collins global $ACT; 1155ab45ba71SJames Collins 1156ab45ba71SJames Collins $html = ''; 1157ab45ba71SJames Collins 1158ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 11599cff245bSJames Collins $html .= '<div class="doc">' . tpl_pageinfo(true) . '</div>'; 11609cff245bSJames Collins $html .= $this->includePage('footer', false); 1161ab45ba71SJames Collins 1162a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('footerCustomMenuText')); 1163ab45ba71SJames Collins 11649cff245bSJames Collins if ($this->getConf('footerSearch') === true) { 1165ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 11669cff245bSJames Collins $html .= $this->includeSearch(false); 1167ab45ba71SJames Collins $html .= '</div>'; 1168ab45ba71SJames Collins } 1169ab45ba71SJames Collins 1170a8eebd82SJames Collins $showPageTools = $this->getConf('pageToolsFooter'); 11719cff245bSJames Collins if ( 11723a385f2cSJames Collins strcasecmp($ACT, 'show') === 0 && (strcasecmp($showPageTools, 'always') === 0 || 11733a385f2cSJames Collins $this->userCanEdit() === true && strcasecmp($showPageTools, 'page editors') === 0) 11749cff245bSJames Collins ) { 11759cff245bSJames Collins $html .= $this->includePageTools(false); 11769cff245bSJames Collins } 1177ab45ba71SJames Collins 11789cff245bSJames Collins $meta['licenseType'] = ['multichoice', '_choices' => ['none', 'badge', 'button']]; 11799cff245bSJames Collins $meta['licenseImageOnly'] = ['onoff']; 1180ab45ba71SJames Collins 1181ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 11829cff245bSJames Collins if ($licenseType !== 'none') { 11839cff245bSJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), true, true); 1184ab45ba71SJames Collins } 1185ab45ba71SJames Collins 1186ab45ba71SJames Collins $html .= '</footer>'; 1187ab45ba71SJames Collins 11889cff245bSJames Collins if ($print === true) { 11899cff245bSJames Collins echo $html; 11909cff245bSJames Collins } 1191ab45ba71SJames Collins return $html; 1192ab45ba71SJames Collins } 1193ab45ba71SJames Collins 1194ab45ba71SJames Collins 1195a8eebd82SJames Collins /** 1196ab45ba71SJames Collins * Print or return breadcrumb trail 1197ab45ba71SJames Collins * 11989cff245bSJames Collins * @param boolean $print Print out trail. 11999cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12009cff245bSJames Collins * @return string HTML string containing breadcrumbs 1201ab45ba71SJames Collins */ 12029cff245bSJames Collins public function includeBreadcrumbs(bool $print = true, bool $parse = true) 120310b40067Snomadjimbob { 1204a8eebd82SJames Collins global $conf, $ID, $lang, $ACT; 1205a8eebd82SJames Collins 12063a385f2cSJames Collins if ( 12073a385f2cSJames Collins $this->getConf('breadcrumbHideHome') === true && strcasecmp($ID, 'start') === 0 && 120895372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['breadcrumbs'] === 0 12093a385f2cSJames Collins ) { 12109cff245bSJames Collins return ''; 12119cff245bSJames Collins } 1212ab45ba71SJames Collins 1213ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 1214f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 12153a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 121695372bffSJames Collins if ($conf['breadcrumbs'] !== 0) { 12179cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === false && $this->getConf('breadcrumbSep') === false) { 1218ab45ba71SJames Collins ob_start(); 121975adba86SJames Collins tpl_breadcrumbs(); 1220ab45ba71SJames Collins $html .= ob_get_contents(); 1221ab45ba71SJames Collins ob_end_clean(); 1222ab45ba71SJames Collins } else { 1223ab45ba71SJames Collins $sep = '•'; 1224ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 1225ab45ba71SJames Collins 12269cff245bSJames Collins if ($this->getConf('breadcrumbSep') === true) { 1227ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 12289cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-sep', false); 1229ab45ba71SJames Collins 12309cff245bSJames Collins if ($img !== false) { 1231ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1232ab45ba71SJames Collins } 123347161538SJames Collins } 123447161538SJames Collins 12359cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === true) { 1236ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 12379cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-prefix', false); 1238ab45ba71SJames Collins 12399cff245bSJames Collins if ($img !== false) { 1240ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 1241ab45ba71SJames Collins } 1242ab45ba71SJames Collins } 1243ab45ba71SJames Collins 1244ab45ba71SJames Collins $crumbs = breadcrumbs(); 1245ab45ba71SJames Collins 1246ab45ba71SJames Collins $html .= '<ul>'; 12473a385f2cSJames Collins if (empty($prefix) === false) { 12489cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 12499cff245bSJames Collins } 1250ab45ba71SJames Collins 1251ab45ba71SJames Collins $last = count($crumbs); 1252ab45ba71SJames Collins $i = 0; 1253ab45ba71SJames Collins foreach ($crumbs as $id => $name) { 1254ab45ba71SJames Collins $i++; 125595372bffSJames Collins if ($i !== 1) { 1256ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 125795372bffSJames Collins } 12589cff245bSJames Collins $html .= '<li' . ($i === $last ? ' class="curid"' : '') . '>'; 12599cff245bSJames Collins $html .= tpl_pagelink($id, null, true); 1260ab45ba71SJames Collins $html .= '</li>'; 1261ab45ba71SJames Collins } 1262ab45ba71SJames Collins 1263ab45ba71SJames Collins $html .= '</ul>'; 12649cff245bSJames Collins }//end if 12659cff245bSJames Collins }//end if 12669cff245bSJames Collins }//end if 12673d11a778SJames Collins 12683d11a778SJames Collins $html .= '</div>'; 12693d11a778SJames Collins $html .= '</div>'; 12703d11a778SJames Collins 12719cff245bSJames Collins if ($parse === true) { 12729cff245bSJames Collins $html = $this->includeIcons($html); 12739cff245bSJames Collins } 12749cff245bSJames Collins if ($print === true) { 12759cff245bSJames Collins echo $html; 12769cff245bSJames Collins } 12773d11a778SJames Collins return $html; 12783d11a778SJames Collins } 12793d11a778SJames Collins 12803d11a778SJames Collins /** 12813d11a778SJames Collins * Print or return you are here trail 12823d11a778SJames Collins * 12839cff245bSJames Collins * @param boolean $print Print out trail. 12849cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12859cff245bSJames Collins * @return string HTML string containing breadcrumbs 12863d11a778SJames Collins */ 12879cff245bSJames Collins public function includeYouAreHere(bool $print = true, bool $parse = true) 12883d11a778SJames Collins { 12893d11a778SJames Collins global $conf, $ID, $lang, $ACT; 12903d11a778SJames Collins 12913a385f2cSJames Collins if ( 12923a385f2cSJames Collins $this->getConf('youarehereHideHome') === true && strcasecmp($ID, 'start') === 0 && 129395372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['youarehere'] === 0 12943a385f2cSJames Collins ) { 12959cff245bSJames Collins return ''; 12969cff245bSJames Collins } 12973d11a778SJames Collins 12983d11a778SJames Collins $html = '<div class="mikio-youarehere">'; 12993d11a778SJames Collins $html .= '<div class="mikio-container">'; 13003a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 130195372bffSJames Collins if ($conf['youarehere'] !== 0) { 13029cff245bSJames Collins if ($this->getConf('youareherePrefix') === false && $this->getConf('youarehereSep') === false) { 130395372bffSJames Collins $html .= '<div class="mikio-bcdw">'; 1304ab45ba71SJames Collins ob_start(); 130575adba86SJames Collins tpl_youarehere(); 1306ab45ba71SJames Collins $html .= ob_get_contents(); 1307ab45ba71SJames Collins ob_end_clean(); 130895372bffSJames Collins $html .= '</div>'; 1309ab45ba71SJames Collins } else { 1310ab45ba71SJames Collins $sep = ' » '; 1311ab45ba71SJames Collins $prefix = $lang['youarehere']; 1312ab45ba71SJames Collins 13139cff245bSJames Collins if ($this->getConf('youarehereSep') === true) { 13143d11a778SJames Collins $sep = $this->getConf('youarehereSepText'); 13159cff245bSJames Collins $img = $this->getMediaFile('youarehere-sep', false); 1316ab45ba71SJames Collins 13179cff245bSJames Collins if ($img !== false) { 1318ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1319ab45ba71SJames Collins } 132075adba86SJames Collins } 132175adba86SJames Collins 13229cff245bSJames Collins if ($this->getConf('youareherePrefix') === true) { 13233d11a778SJames Collins $prefix = $this->getConf('youareherePrefixText'); 13249cff245bSJames Collins $img = $this->getMediaFile('youarehere-prefix', false); 1325ab45ba71SJames Collins 13269cff245bSJames Collins if ($img !== false) { 1327ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 132875adba86SJames Collins } 132947161538SJames Collins } 133047161538SJames Collins 1331ab45ba71SJames Collins $html .= '<ul>'; 13323a385f2cSJames Collins if (empty($prefix) === false) { 13339cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 13349cff245bSJames Collins } 13359cff245bSJames Collins $html .= '<li>' . tpl_pagelink(':' . $conf['start'], null, true) . '</li>'; 1336ab45ba71SJames Collins 1337ab45ba71SJames Collins $parts = explode(':', $ID); 1338ab45ba71SJames Collins $count = count($parts); 1339ab45ba71SJames Collins 1340ab45ba71SJames Collins $part = ''; 13419cff245bSJames Collins for ($i = 0; $i < ($count - 1); $i++) { 1342ab45ba71SJames Collins $part .= $parts[$i] . ':'; 1343ab45ba71SJames Collins $page = $part; 13449cff245bSJames Collins if ($page === $conf['start']) { 13459cff245bSJames Collins continue; 13469cff245bSJames Collins } 1347ab45ba71SJames Collins 1348ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13499cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1350ab45ba71SJames Collins } 1351ab45ba71SJames Collins 1352ab45ba71SJames Collins resolve_pageid('', $page, $exists); 13539cff245bSJames Collins if ((isset($page) === true && $page === $part . $parts[$i]) === false) { 1354ab45ba71SJames Collins $page = $part . $parts[$i]; 13559cff245bSJames Collins if ($page !== $conf['start']) { 1356ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13579cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1358ab45ba71SJames Collins } 1359ab45ba71SJames Collins } 1360ab45ba71SJames Collins 1361ab45ba71SJames Collins $html .= '</ul>'; 13629cff245bSJames Collins }//end if 13639cff245bSJames Collins }//end if 1364ab45ba71SJames Collins 13653d11a778SJames Collins $showLast = $this->getConf('youarehereShowLast'); 13669cff245bSJames Collins if ($showLast !== 0) { 1367a8eebd82SJames Collins preg_match_all('/(<li[^>]*>.+?<\/li>)/', $html, $matches); 13689cff245bSJames Collins if (count($matches) > 0 && count($matches[0]) > (($showLast * 2) + 2)) { 1369a8eebd82SJames Collins $count = count($matches[0]); 1370a8eebd82SJames Collins $list = ''; 1371a8eebd82SJames Collins 1372a8eebd82SJames Collins // Show Home 1373a8eebd82SJames Collins $list .= $matches[0][0] . $matches[0][1]; 1374a8eebd82SJames Collins 1375a8eebd82SJames Collins $list .= '<li>...</li>'; 13769cff245bSJames Collins for ($i = ($count - ($showLast * 2)); $i <= $count; $i++) { 1377a8eebd82SJames Collins $list .= $matches[0][$i]; 1378a8eebd82SJames Collins } 1379a8eebd82SJames Collins 1380a8eebd82SJames Collins $html = preg_replace('/<ul>.*<\/ul>/', '<ul>' . $list . '</ul>', $html); 1381a8eebd82SJames Collins } 1382a8eebd82SJames Collins } 1383a8eebd82SJames Collins 13843d11a778SJames Collins switch ($this->getConf('youarehereHome')) { 1385a8eebd82SJames Collins case 'none': 1386a8eebd82SJames Collins $html = preg_replace('/<li[^>]*>.+?<\/li>/', '', $html, 2); 1387a8eebd82SJames Collins break; 1388a8eebd82SJames Collins case 'home': 1389a8eebd82SJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . tpl_getlang('home') . '$3', $html, 1); 1390a8eebd82SJames Collins break; 1391a8eebd82SJames Collins case 'icon': 13929cff245bSJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . 13939cff245bSJames Collins $this->mikioInlineIcon('home') . '$3', $html, 1); 1394a8eebd82SJames Collins break; 1395a8eebd82SJames Collins } 1396a8eebd82SJames Collins } else { 1397a8eebd82SJames Collins $html .= '≪ '; 13989cff245bSJames Collins if (isset($_GET['page']) === true) { 13999cff245bSJames Collins $html .= '<a href="' . wl($ID, ['do' => $ACT]) . '">Back</a> / '; 1400a8eebd82SJames Collins } 14014057121fSJames Collins $html .= '<a href="' . wl($ID) . '">View Page</a>'; 14029cff245bSJames Collins }//end if 14039cff245bSJames Collins 14049cff245bSJames Collins $html .= '</div>'; 14059cff245bSJames Collins $html .= '</div>'; 14069cff245bSJames Collins 14079cff245bSJames Collins if ($parse === true) { 14089cff245bSJames Collins $html = $this->includeIcons($html); 1409a8eebd82SJames Collins } 14109cff245bSJames Collins if ($print === true) { 14119cff245bSJames Collins echo $html; 14129cff245bSJames Collins } 1413ab45ba71SJames Collins return $html; 1414ab45ba71SJames Collins } 1415ab45ba71SJames Collins 14161785fc73SJames Collins /** 14171785fc73SJames Collins * Get Page Title 14189cff245bSJames Collins * 14199cff245bSJames Collins * @return string page title 14201785fc73SJames Collins */ 142110b40067Snomadjimbob public function parsePageTitle() 142210b40067Snomadjimbob { 14232060e56cSJames Collins global $ID; 14242060e56cSJames Collins 14252060e56cSJames Collins $title = p_get_first_heading($ID); 14269cff245bSJames Collins if (strlen($title) <= 0) { 14279cff245bSJames Collins $title = tpl_pagetitle(null, true); 14289cff245bSJames Collins } 14291785fc73SJames Collins $title = $this->includeIcons($title); 14301785fc73SJames Collins 14311785fc73SJames Collins return $title; 14321785fc73SJames Collins } 14331785fc73SJames Collins 1434ab45ba71SJames Collins 143575adba86SJames Collins /** 1436a8eebd82SJames Collins * Print or return hero block 143775adba86SJames Collins * 14389cff245bSJames Collins * @param boolean $print Print content. 1439a8eebd82SJames Collins * @return string contents of hero 144075adba86SJames Collins */ 14419cff245bSJames Collins public function includeHero(bool $print = true) 144210b40067Snomadjimbob { 1443a8eebd82SJames Collins $html = ''; 144447161538SJames Collins 14459cff245bSJames Collins if ($this->getConf('heroTitle') === true) { 1446a8eebd82SJames Collins $html .= '<div class="mikio-hero">'; 1447f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 1448a8eebd82SJames Collins $html .= '<div class="mikio-hero-text">'; 14493a385f2cSJames Collins if (strcasecmp($this->getConf('youareherePosition'), 'hero') === 0) { 14509cff245bSJames Collins $html .= $this->includeYouAreHere(false); 14519cff245bSJames Collins } 14523a385f2cSJames Collins if (strcasecmp($this->getConf('breadcrumbPosition'), 'hero') === 0) { 14539cff245bSJames Collins $html .= $this->includeBreadcrumbs(false); 14549cff245bSJames Collins } 1455ab45ba71SJames Collins 1456a8eebd82SJames Collins $html .= '<h1 class="mikio-hero-title">'; 14571785fc73SJames Collins $html .= $this->parsePageTitle(); // No idea why this requires a blank space afterwards to work? 1458a8eebd82SJames Collins $html .= '</h1>'; 1459a8eebd82SJames Collins $html .= '<h2 class="mikio-hero-subtitle"></h2>'; 1460a8eebd82SJames Collins $html .= '</div>'; 146147161538SJames Collins 14629cff245bSJames Collins $hero_image = $this->getMediaFile('hero', true, $this->getConf('heroImagePropagation', true)); 1463a8eebd82SJames Collins $hero_image_resize_class = ''; 14643a385f2cSJames Collins if (empty($hero_image) === false) { 1465a8eebd82SJames Collins $hero_image = ' style="background-image:url(\'' . $hero_image . '\');"'; 1466a8eebd82SJames Collins $hero_image_resize_class = ' mikio-hero-image-resize'; 146747161538SJames Collins } 1468a8eebd82SJames Collins 14699cff245bSJames Collins $html .= '<div class="mikio-hero-image' . $hero_image_resize_class . '"' . $hero_image . 14709cff245bSJames Collins '><div class="mikio-tags"></div></div>'; 1471a8eebd82SJames Collins 1472a8eebd82SJames Collins $html .= '</div>'; 1473f8039bf2SJames Collins $html .= '</div>'; 14749cff245bSJames Collins }//end if 14759cff245bSJames Collins 14769cff245bSJames Collins if ($print === true) { 14779cff245bSJames Collins echo $html; 147875adba86SJames Collins } 1479a8eebd82SJames Collins 1480a8eebd82SJames Collins return $html; 148175adba86SJames Collins } 148275adba86SJames Collins 148375adba86SJames Collins 148475adba86SJames Collins /** 1485a8eebd82SJames Collins * Print or return out TOC 148675adba86SJames Collins * 14879cff245bSJames Collins * @param boolean $print Print TOC. 14889cff245bSJames Collins * @param boolean $parse Parse icons. 1489a8eebd82SJames Collins * @return string contents of TOC 149075adba86SJames Collins */ 14919cff245bSJames Collins public function includeTOC(bool $print = true, bool $parse = true) 149210b40067Snomadjimbob { 1493ab45ba71SJames Collins $html = ''; 14942b4583abSJames Collins 1495ab45ba71SJames Collins $tocHtml = tpl_toc(true); 1496ab45ba71SJames Collins 14973a385f2cSJames Collins if (empty($tocHtml) === false) { 1498f65a4e5eSJames Collins $tocHtml = preg_replace( 1499f65a4e5eSJames Collins '/(<h3.+?toggle.+?>)(.+?)<\/h3>/', 1500f65a4e5eSJames Collins '$1' . 1501f65a4e5eSJames Collins $this->mikioInlineIcon('hamburger', 'hamburger') . '$2' . 1502f65a4e5eSJames Collins $this->mikioInlineIcon('down-arrow', 'down-arrow') . '</h3>', 1503f65a4e5eSJames Collins $tocHtml 1504f65a4e5eSJames Collins ); 1505ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 1506a8eebd82SJames Collins $tocHtml = preg_replace('/<ul.*>\s*<\/ul>\s*/', '', $tocHtml); 1507ab45ba71SJames Collins 1508ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 1509ab45ba71SJames Collins $html .= $tocHtml; 1510ab45ba71SJames Collins $html .= '</div>'; 15112b4583abSJames Collins } 15122b4583abSJames Collins 15139cff245bSJames Collins if ($parse === true) { 15149cff245bSJames Collins $html = $this->includeIcons($html); 15159cff245bSJames Collins } 15169cff245bSJames Collins 15179cff245bSJames Collins if ($print === true) { 1518ab45ba71SJames Collins echo $html; 1519ab45ba71SJames Collins } 1520ab45ba71SJames Collins 15219cff245bSJames Collins return $html; 15229cff245bSJames Collins } 15239cff245bSJames Collins 1524ab45ba71SJames Collins 1525a8eebd82SJames Collins /** 1526ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 1527ab45ba71SJames Collins * 15289cff245bSJames Collins * @param string $str Content to parse. 1529ab45ba71SJames Collins * @return string parsed string 1530ab45ba71SJames Collins */ 15319cff245bSJames Collins public function includeIcons(string $str) 153210b40067Snomadjimbob { 1533ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 1534ab45ba71SJames Collins 1535ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 15363a385f2cSJames Collins if (empty($iconTag) === true) { 15379cff245bSJames Collins return $str; 15389cff245bSJames Collins } 1539ab45ba71SJames Collins 15409cff245bSJames Collins if ( 15419cff245bSJames Collins in_array($ACT, ['show', 'showtag', 'revisions', 'index', 'preview']) === true || 15423a385f2cSJames Collins strcasecmp($ACT, 'admin') === 0 && count($MIKIO_ICONS) > 0 15439cff245bSJames Collins ) { 1544a2005a27SJames Collins $content = $str; 1545a2005a27SJames Collins $preview = null; 1546a2005a27SJames Collins 15473a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15489cff245bSJames Collins $html = new \simple_html_dom(); 1549a2005a27SJames Collins $html->stripRNAttrValues = false; 1550a2005a27SJames Collins $html->load($str, true, false); 1551a2005a27SJames Collins 1552a2005a27SJames Collins $preview = $html->find('div.preview'); 15539cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1554a2005a27SJames Collins $content = $preview[0]->innertext; 1555a2005a27SJames Collins } 1556a2005a27SJames Collins } 1557a2005a27SJames Collins 15581785fc73SJames Collins $page_regex = '/(.*)/'; 15599cff245bSJames Collins if (stripos($str, '<pre') !== false) { 15601785fc73SJames Collins $page_regex = '/<(?!pre|\/).*?>(.*)[^<]*/'; 15611785fc73SJames Collins } 15621785fc73SJames Collins 15631785fc73SJames Collins $content = preg_replace_callback($page_regex, function ($icons) { 1564a2005a27SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 1565a2005a27SJames Collins 156610b40067Snomadjimbob return preg_replace_callback( 156710b40067Snomadjimbob '/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 1568ab45ba71SJames Collins function ($matches) { 1569ab45ba71SJames Collins global $MIKIO_ICONS; 1570ab45ba71SJames Collins 1571ab45ba71SJames Collins $s = $matches[0]; 1572ab45ba71SJames Collins 1573ab45ba71SJames Collins if (count($MIKIO_ICONS) > 0) { 1574ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 1575ab45ba71SJames Collins 1576ab45ba71SJames Collins if (count($matches) > 1) { 1577ab45ba71SJames Collins $e = explode(' ', $matches[1]); 1578ab45ba71SJames Collins 1579ab45ba71SJames Collins if (count($e) > 1) { 1580ab45ba71SJames Collins foreach ($MIKIO_ICONS as $iconItem) { 15819cff245bSJames Collins if (strcasecmp($iconItem['name'], $e[0]) === 0) { 1582ab45ba71SJames Collins $icon = $iconItem; 1583ab45ba71SJames Collins 1584ab45ba71SJames Collins $s = $icon['insert']; 1585ab45ba71SJames Collins for ($i = 1; $i < 9; $i++) { 15861cdedf28SJames Collins if (count($e) < $i || empty($e[$i]) === true) { 15879cff245bSJames Collins if (isset($icon['$' . $i]) === true) { 1588ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$' . $i], $s); 1589ab45ba71SJames Collins } 1590ab45ba71SJames Collins } else { 1591ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 1592ab45ba71SJames Collins } 1593ab45ba71SJames Collins } 1594ab45ba71SJames Collins 1595ab45ba71SJames Collins $dir = ''; 15969cff245bSJames Collins if (isset($icon['dir']) === true) { 15979cff245bSJames Collins $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 15989cff245bSJames Collins } 1599ab45ba71SJames Collins 1600ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 1601ab45ba71SJames Collins 1602ab45ba71SJames Collins break; 16039cff245bSJames Collins }//end if 16049cff245bSJames Collins }//end foreach 1605ab45ba71SJames Collins } else { 1606ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 16079cff245bSJames Collins }//end if 16089cff245bSJames Collins }//end if 16099cff245bSJames Collins }//end if 161075adba86SJames Collins 1611ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 16129cff245bSJames Collins if ($count === 0) { 1613ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 1614ab45ba71SJames Collins } 1615ab45ba71SJames Collins 1616ab45ba71SJames Collins return $s; 1617ab45ba71SJames Collins }, 161810b40067Snomadjimbob $icons[0] 161910b40067Snomadjimbob ); 1620a2005a27SJames Collins }, $content); 1621a2005a27SJames Collins 16223a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 16239cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1624a2005a27SJames Collins $preview[0]->innertext = $content; 1625a2005a27SJames Collins } 1626a2005a27SJames Collins 1627a2005a27SJames Collins $str = $html->save(); 1628a2005a27SJames Collins $html->clear(); 1629a2005a27SJames Collins unset($html); 1630a2005a27SJames Collins } else { 1631a2005a27SJames Collins $str = $content; 1632a2005a27SJames Collins } 16339cff245bSJames Collins }//end if 1634ab45ba71SJames Collins 1635ab45ba71SJames Collins return $str; 1636ab45ba71SJames Collins } 163747161538SJames Collins 1638c165b184SJames Collins /** 1639a8eebd82SJames Collins * Parse HTML for theme 1640c165b184SJames Collins * 16419cff245bSJames Collins * @param string $content HTML content to parse. 1642a8eebd82SJames Collins * @return string Parsed content 1643c165b184SJames Collins */ 16449cff245bSJames Collins public function parseContent(string $content) 164510b40067Snomadjimbob { 1646ab45ba71SJames Collins global $INPUT, $ACT; 1647ab45ba71SJames Collins 1648a8eebd82SJames Collins // Add Mikio Section titles 16493a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 16509cff245bSJames Collins $admin_sections = [ 1651ab45ba71SJames Collins // Section Insert Before Icon 16529cff245bSJames Collins 'navbar' => ['navbarUseTitleIcon', ''], 16539cff245bSJames Collins 'search' => ['searchButton', ''], 16549cff245bSJames Collins 'hero' => ['heroTitle', ''], 16559cff245bSJames Collins 'tags' => ['tagsConsolidate', ''], 16569cff245bSJames Collins 'breadcrumb' => ['breadcrumbHideHome', ''], 16579cff245bSJames Collins 'youarehere' => ['youarehereHideHome', ''], 16589cff245bSJames Collins 'sidebar' => ['sidebarShowLeft', ''], 16599cff245bSJames Collins 'toc' => ['tocFull', ''], 16609cff245bSJames Collins 'pagetools' => ['pageToolsFloating', ''], 16619cff245bSJames Collins 'footer' => ['footerCustomMenuText', ''], 16629cff245bSJames Collins 'license' => ['licenseType', ''], 16639cff245bSJames Collins 'acl' => ['includePageUseACL', ''], 16649cff245bSJames Collins 'sticky' => ['stickyTopHeader', ''], 16659cff245bSJames Collins ]; 1666ab45ba71SJames Collins 1667ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 1668ab45ba71SJames Collins $search = $items[0]; 1669ab45ba71SJames Collins $icon = $items[1]; 1670ab45ba71SJames Collins 167110b40067Snomadjimbob $content = preg_replace( 1672adf52ebbSJames Collins '/<tr(.*)>\s*<td class="label">\s*<span class="outkey">(tpl»mikio»' . $search . ')<\/span>/', 16739cff245bSJames Collins '<tr$1><td class="mikio-config-table-header" colspan="2">' . $this->mikioInlineIcon($icon) . 16749cff245bSJames Collins tpl_getLang('config_' . $section) . 16759cff245bSJames Collins '</td></tr><tr class="default"><td class="label"><span class="outkey">tpl»mikio»' . 16769cff245bSJames Collins $search . '</span>', 167710b40067Snomadjimbob $content 167810b40067Snomadjimbob ); 1679ab45ba71SJames Collins } 1680bb5a3dd1SJames Collins } elseif (strcasecmp($INPUT->str('page'), 'styling') === 0) { 1681ad182e6dSnomadjimbob $mikioPluginMissing = true; 1682ad182e6dSnomadjimbob /* Hide plugin fields if not installed */ 16839ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 1684ad182e6dSnomadjimbob $mikioPluginMissing = false; 1685ad182e6dSnomadjimbob } 1686ad182e6dSnomadjimbob 1687cee81679SJames Collins $style_headers = [ 1688f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__text_'], 1689f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__code_'], 1690f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__control_'], 1691f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__topheader_'], 1692f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__navbar_'], 1693f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__subnavbar_'], 1694f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__tag_background_color_'], 1695f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__breadcrumb_'], 1696f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__hero_'], 1697f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__sidebar_'], 1698f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__content_'], 1699f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__toc_'], 1700f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__pagetools_'], 1701f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__footer_'], 1702f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__table_'], 1703f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__dropdown_'], 1704f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__section_edit_'], 1705f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__tree_'], 1706f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__tab_'], 1707ad182e6dSnomadjimbob ['title' => 'Mikio Plugin', 'starts_with' => '__plugin_', 'heading' => 'h2', 17089ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17099ffe9161Snomadjimbob ], 1710ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_primary_', 'hidden' => $mikioPluginMissing], 1711ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_secondary_', 17129ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17139ffe9161Snomadjimbob ], 1714ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_success_', 'hidden' => $mikioPluginMissing], 1715ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_danger_', 'hidden' => $mikioPluginMissing], 1716ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_warning_', 'hidden' => $mikioPluginMissing], 1717ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_info_', 'hidden' => $mikioPluginMissing], 1718ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_light_', 'hidden' => $mikioPluginMissing], 1719ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_dark_', 'hidden' => $mikioPluginMissing], 1720ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_link_', 'hidden' => $mikioPluginMissing], 1721ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_carousel_', 'hidden' => $mikioPluginMissing], 1722ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_steps_', 'hidden' => $mikioPluginMissing], 1723ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_tabgroup_', 'hidden' => $mikioPluginMissing], 1724ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_tooltip_', 'hidden' => $mikioPluginMissing], 1725cee81679SJames Collins ['title' => 'Dark Mode', 'starts_with' => '__darkmode_', 'heading' => 'h2'], 1726f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__darkmode_text_'], 1727f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__darkmode_code_'], 1728f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__darkmode_control_'], 1729f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__darkmode_topheader_'], 1730f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__darkmode_navbar_'], 1731f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__darkmode_subnavbar_'], 1732f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__darkmode_tag_background_color_'], 1733f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__darkmode_breadcrumb_'], 1734f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__darkmode_hero_'], 1735f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__darkmode_sidebar_'], 1736f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__darkmode_content_'], 1737f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__darkmode_toc_'], 1738f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__darkmode_pagetools_'], 1739f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__darkmode_footer_'], 1740f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__darkmode_table_'], 1741f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__darkmode_dropdown_'], 1742f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__darkmode_section_edit_'], 1743f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__darkmode_tree_'], 1744f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__darkmode_tab_'], 1745ad182e6dSnomadjimbob ['title' => 'Mikio Plugin (Dark mode)', 'starts_with' => '__plugin_darkmode_', 'heading' => 'h2', 17469ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17479ffe9161Snomadjimbob ], 1748ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_darkmode_primary_', 17499ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17509ffe9161Snomadjimbob ], 1751ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_darkmode_secondary_', 17529ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17539ffe9161Snomadjimbob ], 1754ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_darkmode_success_', 17559ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17569ffe9161Snomadjimbob ], 1757ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_darkmode_danger_', 17589ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17599ffe9161Snomadjimbob ], 1760ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_darkmode_warning_', 17619ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17629ffe9161Snomadjimbob ], 1763ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_darkmode_info_', 17649ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17659ffe9161Snomadjimbob ], 1766ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_darkmode_light_', 17679ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17689ffe9161Snomadjimbob ], 1769ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_darkmode_dark_', 17709ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17719ffe9161Snomadjimbob ], 1772ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_darkmode_link_', 17739ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17749ffe9161Snomadjimbob ], 1775ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_darkmode_carousel_', 17769ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17779ffe9161Snomadjimbob ], 1778ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_darkmode_steps_', 'hidden' => $mikioPluginMissing], 1779ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_darkmode_tabgroup_', 17809ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17819ffe9161Snomadjimbob ], 1782ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_darkmode_tooltip_', 'hidden' => $mikioPluginMissing], 1783cee81679SJames Collins ]; 1784cee81679SJames Collins 1785cee81679SJames Collins foreach ($style_headers as $header) { 1786cee81679SJames Collins if (array_key_exists('heading', $header) === false) { 1787cee81679SJames Collins $header['heading'] = 'h3'; 1788cee81679SJames Collins } 1789cee81679SJames Collins 1790ad182e6dSnomadjimbob if (array_key_exists('hidden', $header) === false) { 1791ad182e6dSnomadjimbob $header['hidden'] = false; 1792ad182e6dSnomadjimbob } 1793ad182e6dSnomadjimbob 17941244e3ceSJames Collins $content = preg_replace( 1795f65a4e5eSJames Collins '/(<tr>\s*<td>\s*<label for="tpl__' . $header['starts_with'] . '.+?<\/tr>)/s', 17969ffe9161Snomadjimbob '</tbody></table><' . $header['heading'] . ' style="display:' . 17979ffe9161Snomadjimbob ($header['hidden'] === true ? 'none' : 'block') . '">' . 17989ffe9161Snomadjimbob $header['title'] . '</' . $header['heading'] . '> 1799ad182e6dSnomadjimbob <table style="display:' . ($header['hidden'] === true ? 'none' : 'table') . '"><tbody>$1', 18001244e3ceSJames Collins $content, 18011244e3ceSJames Collins 1 18021244e3ceSJames Collins ); 1803cee81679SJames Collins } 1804f65a4e5eSJames Collins 1805dea1f088SJames Collins $content = preg_replace_callback('/<input type="color"[^>]*>/', function ($match) { 1806dea1f088SJames Collins // Get the ID of the <input type="color"> element 1807dea1f088SJames Collins preg_match('/id="([^"]*)"/', $match[0], $matches); 1808dea1f088SJames Collins 1809dea1f088SJames Collins // Replace type with text and remove the id attribute 1810*2c87ab0dSJames Collins $replacement = preg_replace( 1811*2c87ab0dSJames Collins ['/type="color"/', '/id="([^"]*)"/'], 1812*2c87ab0dSJames Collins ['type="text" class="mikio-color-text-input"', 'for="$1"'], 1813*2c87ab0dSJames Collins $match[0] 1814*2c87ab0dSJames Collins ); 1815dea1f088SJames Collins 1816dea1f088SJames Collins return '<div class="mikio-color-picker">' . $replacement . $match[0] . '</div>'; 1817dea1f088SJames Collins }, $content); 1818bb5a3dd1SJames Collins }//end if 1819ab45ba71SJames Collins 18203a385f2cSJames Collins if (strcasecmp($ACT, 'admin') === 0 && isset($_GET['page']) === false) { 1821a8eebd82SJames Collins $content = preg_replace('/(<ul.*?>.*?)<\/ul>.*?<ul.*?>(.*?<\/ul>)/s', '$1$2', $content); 1822a8eebd82SJames Collins } 1823ab45ba71SJames Collins 1824a8eebd82SJames Collins // Page Revisions - Table Fix 18259cff245bSJames Collins if (strpos($content, 'id="page__revisions"') !== false) { 18269cff245bSJames Collins $content = preg_replace( 18279cff245bSJames Collins '/(<span class="sum">\s.*<\/span>\s.*<span class="user">\s.*<\/span>)/', 18289cff245bSJames Collins '<span>$1</span>', 18299cff245bSJames Collins $content 18309cff245bSJames Collins ); 1831a8eebd82SJames Collins } 1832ab45ba71SJames Collins 18339cff245bSJames Collins $html = new \simple_html_dom(); 1834bc1032d9SJames Collins $html->stripRNAttrValues = false; 1835c165b184SJames Collins $html->load($content, true, false); 1836c165b184SJames Collins 18379cff245bSJames Collins if ($html === false) { 18389cff245bSJames Collins return $content; 18399cff245bSJames Collins } 1840ab45ba71SJames Collins 1841ab45ba71SJames Collins /* Buttons */ 1842ab45ba71SJames Collins foreach ($html->find('#config__manager button') as $node) { 1843ab45ba71SJames Collins $c = explode(' ', $node->class); 18449cff245bSJames Collins if (in_array('mikio-button', $c) === false) { 18459cff245bSJames Collins $c[] = 'mikio-button'; 18469cff245bSJames Collins } 1847ab45ba71SJames Collins $node->class = implode(' ', $c); 1848c165b184SJames Collins } 1849c165b184SJames Collins 1850ab45ba71SJames Collins 1851ab45ba71SJames Collins /* Buttons - Primary */ 1852ab45ba71SJames Collins foreach ($html->find('#config__manager [type=submit]') as $node) { 1853ab45ba71SJames Collins $c = explode(' ', $node->class); 18549cff245bSJames Collins if (in_array('mikio-primary', $c) === false) { 18559cff245bSJames Collins $c[] = 'mikio-primary'; 18569cff245bSJames Collins } 1857ab45ba71SJames Collins $node->class = implode(' ', $c); 1858ab45ba71SJames Collins } 1859ab45ba71SJames Collins 1860a8eebd82SJames Collins /* Hide page title if hero is enabled */ 18619cff245bSJames Collins if ($this->getConf('heroTitle') === true && $ACT !== 'preview') { 18621785fc73SJames Collins $pageTitle = $this->parsePageTitle(); 186347161538SJames Collins 186447161538SJames Collins foreach ($html->find('h1,h2,h3,h4') as $elm) { 18659cff245bSJames Collins if ($elm->innertext === $pageTitle) { 1866a8eebd82SJames Collins // $elm->innertext = ''; 1867a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1868a8eebd82SJames Collins 186947161538SJames Collins break; 187047161538SJames Collins } 187147161538SJames Collins } 187247161538SJames Collins } 1873c165b184SJames Collins 1874a8eebd82SJames Collins /* Hero subtitle */ 18752b4583abSJames Collins foreach ($html->find('p') as $elm) { 1876d0d6c450SJames Collins if (preg_match('/[~-]~hero-subtitle (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1877d0d6c450SJames Collins $subtitle = $matches[1]; 1878a8eebd82SJames Collins $this->footerScript['hero-subtitle'] = 'mikio.setHeroSubTitle(\'' . $subtitle . '\')'; 1879a8eebd82SJames Collins 1880d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-subtitle (.+?)~[~-]/ui', '', $elm->innertext); 18812b4583abSJames Collins break; 18822b4583abSJames Collins } 18832b4583abSJames Collins } 18842b4583abSJames Collins 1885a8eebd82SJames Collins /* Hero image */ 1886a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1887a8eebd82SJames Collins $image = ''; 1888d0d6c450SJames Collins preg_match('/[~-]~hero-image (.+?)~[~-](?!.?")/ui', $elm->innertext, $matches); 1889a8eebd82SJames Collins if (count($matches) > 0) { 1890a8eebd82SJames Collins preg_match('/<img.*src="(.+?)"/ui', $matches[1], $imageTagMatches); 1891a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1892a8eebd82SJames Collins $image = $imageTagMatches[1]; 1893a8eebd82SJames Collins } else { 1894a8eebd82SJames Collins preg_match('/<a.+?>(.+?)[~<]/ui', $matches[1], $imageTagMatches); 1895a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1896a8eebd82SJames Collins $image = $imageTagMatches[1]; 1897a8eebd82SJames Collins } else { 1898a8eebd82SJames Collins $image = strip_tags($matches[1]); 18999cff245bSJames Collins if (stripos($image, ':') === false) { 19009cff245bSJames Collins $image = str_replace(['{', '}'], '', $image); 1901a8eebd82SJames Collins $i = stripos($image, '?'); 19029cff245bSJames Collins if ($i !== false) { 1903a8eebd82SJames Collins $image = substr($image, 0, $i); 1904c165b184SJames Collins } 1905c165b184SJames Collins 1906a8eebd82SJames Collins $image = ml($image, '', true, '', false); 1907ab45ba71SJames Collins } 1908ab45ba71SJames Collins } 1909ab45ba71SJames Collins } 1910ab45ba71SJames Collins 1911a8eebd82SJames Collins $this->footerScript['hero-image'] = 'mikio.setHeroImage(\'' . $image . '\')'; 1912a8eebd82SJames Collins 1913d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-image (.+?)~[~-].*/ui', '', $elm->innertext); 19149cff245bSJames Collins }//end if 19159cff245bSJames Collins }//end foreach 1916ab45ba71SJames Collins 19179cff245bSJames Collins /* Hero colors - ~~hero-colors [background-color] [hero-title-color] [hero-subtitle-color] 19189cff245bSJames Collins [breadcrumb-text-color] [breadcrumb-hover-color] (use 'initial' for original color) */ 1919a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1920d0d6c450SJames Collins if (preg_match('/[~-]~hero-colors (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1921d0d6c450SJames Collins $subtitle = $matches[1]; 1922d0d6c450SJames Collins $this->footerScript['hero-colors'] = 'mikio.setHeroColor(\'' . $subtitle . '\')'; 1923ab45ba71SJames Collins 1924d0d6c450SJames Collins $elm->innertext = preg_replace('/[~-]~hero-colors (.+?)~[~-]/ui', '', $elm->innertext); 1925a8eebd82SJames Collins break; 1926ab45ba71SJames Collins } 1927ab45ba71SJames Collins } 1928ab45ba71SJames Collins 192996ec8e1eSJames Collins /* Hide parts - ~~hide-parts [parts]~~ */ 193096ec8e1eSJames Collins foreach ($html->find('p') as $elm) { 19313a44a74aSJames Collins if (preg_match('/[~-]~hide-parts (.+?)~[~-]/ui', $elm->innertext, $matches) === 1) { 1932d0d6c450SJames Collins $parts = explode(' ', $matches[1]); 193396ec8e1eSJames Collins $script = ''; 193496ec8e1eSJames Collins 193596ec8e1eSJames Collins foreach ($parts as $part) { 193696ec8e1eSJames Collins if (strlen($part) > 0) { 193796ec8e1eSJames Collins $script .= 'mikio.hidePart(\'' . $part . '\');'; 193896ec8e1eSJames Collins } 193996ec8e1eSJames Collins } 194096ec8e1eSJames Collins 194196ec8e1eSJames Collins if (strlen($script) > 0) { 194296ec8e1eSJames Collins $this->footerScript['hide-parts'] = $script; 194396ec8e1eSJames Collins } 194496ec8e1eSJames Collins 19453a44a74aSJames Collins $elm->innertext = preg_replace('/[~-]~hide-parts (.+?)~[~-]/ui', '', $elm->innertext); 194696ec8e1eSJames Collins break; 1947d0d6c450SJames Collins } 19489cff245bSJames Collins }//end foreach 194996ec8e1eSJames Collins 195096ec8e1eSJames Collins 1951a8eebd82SJames Collins /* Page Tags (tag plugin) */ 19529cff245bSJames Collins if ($this->getConf('tagsConsolidate') === true) { 1953a8eebd82SJames Collins $tags = ''; 1954a8eebd82SJames Collins foreach ($html->find('div.tags a') as $elm) { 1955a8eebd82SJames Collins $tags .= $elm->outertext; 1956a8eebd82SJames Collins } 1957a8eebd82SJames Collins 1958a8eebd82SJames Collins foreach ($html->find('div.tags') as $elm) { 1959a8eebd82SJames Collins $elm->innertext = ''; 1960a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1961a8eebd82SJames Collins } 1962a8eebd82SJames Collins 19633a385f2cSJames Collins if (empty($tags) === false) { 1964a8eebd82SJames Collins $this->footerScript['tags'] = 'mikio.setTags(\'' . $tags . '\')'; 1965a8eebd82SJames Collins } 1966ab45ba71SJames Collins } 1967ab45ba71SJames Collins 1968ab45ba71SJames Collins // Configuration Manager 19693a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 1970ab45ba71SJames Collins // Additional save buttons 1971ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1972ab45ba71SJames Collins $saveButtons = ''; 1973ab45ba71SJames Collins 1974ab45ba71SJames Collins foreach ($cm->find('p') as $elm) { 1975ab45ba71SJames Collins $saveButtons = $elm->outertext; 1976a8eebd82SJames Collins $saveButtons = str_replace('<p>', '<p style="text-align:right">', $saveButtons); 1977ab45ba71SJames Collins $elm->outertext = ''; 1978ab45ba71SJames Collins } 1979ab45ba71SJames Collins 1980ab45ba71SJames Collins foreach ($cm->find('fieldset') as $elm) { 1981ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1982ab45ba71SJames Collins } 1983ab45ba71SJames Collins } 1984ab45ba71SJames Collins } 1985ab45ba71SJames Collins 1986ab45ba71SJames Collins $content = $html->save(); 1987c165b184SJames Collins $html->clear(); 1988c165b184SJames Collins unset($html); 1989c165b184SJames Collins 1990c165b184SJames Collins return $content; 1991c165b184SJames Collins } 19922b4583abSJames Collins 19932b4583abSJames Collins 1994a8eebd82SJames Collins /** 1995a8eebd82SJames Collins * Get DokuWiki namespace/page/URI as link 1996a8eebd82SJames Collins * 19979cff245bSJames Collins * @param string $str String to parse. 19989cff245bSJames Collins * @return string parsed URI 1999a8eebd82SJames Collins */ 20009cff245bSJames Collins public function getLink(string $str) 200110b40067Snomadjimbob { 20022b4583abSJames Collins $i = strpos($str, '://'); 20039cff245bSJames Collins if ($i !== false) { 20049cff245bSJames Collins return $str; 20059cff245bSJames Collins } 20062b4583abSJames Collins 20072b4583abSJames Collins return wl($str); 20082b4583abSJames Collins } 2009ab45ba71SJames Collins 2010ab45ba71SJames Collins 2011a8eebd82SJames Collins /** 2012a8eebd82SJames Collins * Check if the user can edit current namespace/page 2013a8eebd82SJames Collins * 2014a8eebd82SJames Collins * @return boolean user can edit 2015a8eebd82SJames Collins */ 201610b40067Snomadjimbob public function userCanEdit() 201710b40067Snomadjimbob { 2018ab45ba71SJames Collins global $INFO; 2019ab45ba71SJames Collins global $ID; 2020ab45ba71SJames Collins 2021ab45ba71SJames Collins $wiki_file = wikiFN($ID); 20229cff245bSJames Collins if (@file_exists($wiki_file) === false) { 20239cff245bSJames Collins return true; 20249cff245bSJames Collins } 20259cff245bSJames Collins if ($INFO['isadmin'] === true || $INFO['ismanager'] === true) { 20269cff245bSJames Collins return true; 20279cff245bSJames Collins } 2028a8eebd82SJames Collins // $meta_file = metaFN($ID, '.meta'); 20299cff245bSJames Collins if ($INFO['meta']['user'] === false) { 20309cff245bSJames Collins return true; 20319cff245bSJames Collins } 20329cff245bSJames Collins if ($INFO['client'] === $INFO['meta']['user']) { 20339cff245bSJames Collins return true; 20349cff245bSJames Collins } 2035ab45ba71SJames Collins 2036ab45ba71SJames Collins return false; 2037c165b184SJames Collins } 203847161538SJames Collins 203947161538SJames Collins 2040a8eebd82SJames Collins /** 2041a8eebd82SJames Collins * Search for and return the uri of a media file 2042a8eebd82SJames Collins * 20439cff245bSJames Collins * @param string $image Image name to search for (without extension). 20449cff245bSJames Collins * @param boolean $searchCurrentNS Search the current namespace. 20459cff245bSJames Collins * @param boolean $propagate Propagate search through the namespace. 20469cff245bSJames Collins * @return string URI of the found media file 2047a8eebd82SJames Collins */ 20489cff245bSJames Collins public function getMediaFile(string $image, bool $searchCurrentNS = true, bool $propagate = true) 204910b40067Snomadjimbob { 2050ab45ba71SJames Collins global $INFO; 2051a8eebd82SJames Collins 20529cff245bSJames Collins $ext = ['png', 'jpg', 'gif', 'svg']; 2053ab45ba71SJames Collins 20549cff245bSJames Collins if ($searchCurrentNS === true) { 20559cff245bSJames Collins $prefix[] = ':' . $INFO['namespace'] . ':'; 20569cff245bSJames Collins } 20579cff245bSJames Collins if ($propagate === true) { 2058ab45ba71SJames Collins $prefix[] = ':'; 2059ab45ba71SJames Collins $prefix[] = ':wiki:'; 2060a8eebd82SJames Collins } 2061ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 20623a385f2cSJames Collins if (empty($theme) === false) { 20639cff245bSJames Collins $prefix[] = 'themes/' . $theme . '/images/'; 20649cff245bSJames Collins } 2065ab45ba71SJames Collins $prefix[] = 'images/'; 2066ab45ba71SJames Collins 20679cff245bSJames Collins $search = []; 2068ab45ba71SJames Collins foreach ($prefix as $pitem) { 2069ab45ba71SJames Collins foreach ($ext as $eitem) { 2070ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 2071ab45ba71SJames Collins } 2072ab45ba71SJames Collins } 2073ab45ba71SJames Collins 2074ab45ba71SJames Collins $img = ''; 2075ab45ba71SJames Collins $file = ''; 2076ab45ba71SJames Collins $url = ''; 2077ab45ba71SJames Collins $ismedia = false; 2078ab45ba71SJames Collins $found = false; 2079ab45ba71SJames Collins 2080ab45ba71SJames Collins foreach ($search as $img) { 20813a385f2cSJames Collins if (strcasecmp(substr($img, 0, 1), ':') === 0) { 2082ab45ba71SJames Collins $file = mediaFN($img); 2083ab45ba71SJames Collins $ismedia = true; 2084ab45ba71SJames Collins } else { 2085ab45ba71SJames Collins $file = tpl_incdir() . $img; 2086ab45ba71SJames Collins $ismedia = false; 2087ab45ba71SJames Collins } 2088ab45ba71SJames Collins 20899cff245bSJames Collins if (file_exists($file) === true) { 2090ab45ba71SJames Collins $found = true; 2091ab45ba71SJames Collins break; 2092ab45ba71SJames Collins } 2093ab45ba71SJames Collins } 2094ab45ba71SJames Collins 20959cff245bSJames Collins if ($found === false) { 20969cff245bSJames Collins return false; 20979cff245bSJames Collins } 2098ab45ba71SJames Collins 20999cff245bSJames Collins if ($ismedia === true) { 2100ab45ba71SJames Collins $url = ml($img, '', true, '', false); 2101ab45ba71SJames Collins } else { 2102ab45ba71SJames Collins $url = tpl_basedir() . $img; 2103ab45ba71SJames Collins } 2104ab45ba71SJames Collins 2105ab45ba71SJames Collins return $url; 2106ab45ba71SJames Collins } 2107ab45ba71SJames Collins 2108a8eebd82SJames Collins 2109a8eebd82SJames Collins /** 2110ab45ba71SJames Collins * Print or return the page title 2111ab45ba71SJames Collins * 21129cff245bSJames Collins * @param string $page Page id or empty string for current page. 2113ab45ba71SJames Collins * @return string generated content 2114ab45ba71SJames Collins */ 21159cff245bSJames Collins public function getPageTitle(string $page = '') 211610b40067Snomadjimbob { 2117ab45ba71SJames Collins global $ID, $conf; 2118ab45ba71SJames Collins 2119ab45ba71SJames Collins $html = ''; 2120ab45ba71SJames Collins 21213a385f2cSJames Collins if (empty($page) === true) { 21229cff245bSJames Collins $page = $ID; 21239cff245bSJames Collins } 2124ab45ba71SJames Collins 2125ab45ba71SJames Collins $html = p_get_first_heading($page); 2126ab45ba71SJames Collins $html = strip_tags($html); 2127ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 2128ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 2129ab45ba71SJames Collins $html = trim($html); 2130ab45ba71SJames Collins 2131ab45ba71SJames Collins return $html; 2132ab45ba71SJames Collins } 2133a8eebd82SJames Collins 2134a8eebd82SJames Collins 2135a8eebd82SJames Collins /** 2136a8eebd82SJames Collins * Return inline theme icon 2137a8eebd82SJames Collins * 21389cff245bSJames Collins * @param string $type Icon to retreive. 21399e41d878SJames Collins * @param string $class Classname to insert. 21409cff245bSJames Collins * @return string HTML icon content 2141a8eebd82SJames Collins */ 21429e41d878SJames Collins public function mikioInlineIcon(string $type, string $class = "") 214310b40067Snomadjimbob { 21449e41d878SJames Collins if (is_array($class) === true) { 21459e41d878SJames Collins $class = explode(' ', $class); 21469e41d878SJames Collins } 21479e41d878SJames Collins 21489e41d878SJames Collins if (strlen($class) > 0) { 21499e41d878SJames Collins $class = ' ' . $class; 21509e41d878SJames Collins } 21519e41d878SJames Collins 2152a8eebd82SJames Collins switch ($type) { 2153a8eebd82SJames Collins case 'wrench': 2154906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 -256 1792 2155906e1a13SJames 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, 2156906e1a13SJames 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, 2157906e1a13SJames 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, 2158906e1a13SJames 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 2159906e1a13SJames 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, 2160906e1a13SJames 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>'; 2161a8eebd82SJames Collins case 'file': 2162906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2163906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,235.38983,1277.8305)" id="g2991"> 2164906e1a13SJames 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 2165906e1a13SJames 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 2166906e1a13SJames 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" 21679cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 2168a8eebd82SJames Collins case 'gear': 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,121.49153,1285.4237)" id="g3027"> 2171906e1a13SJames 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 2172906e1a13SJames 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 2173906e1a13SJames 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 2174906e1a13SJames 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 2175906e1a13SJames 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 2176906e1a13SJames 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, 2177906e1a13SJames 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 2178906e1a13SJames 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 2179906e1a13SJames 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" /> 2180906e1a13SJames Collins</g></svg>'; 2181a8eebd82SJames Collins case 'user': 2182906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2183906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,197.42373,1300.6102)"><path d="M 2184906e1a13SJames 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 2185906e1a13SJames 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, 2186906e1a13SJames 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 2187906e1a13SJames 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 2188906e1a13SJames 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, 2189906e1a13SJames Collins1408 863,1408 975.5,1295.5 1088,1183 1088,1024 z"/></g></svg>'; 2190a8eebd82SJames Collins case 'search': 21919e41d878SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 21929cff245bSJames 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 21939cff245bSJames 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 21949cff245bSJames 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 21959cff245bSJames Collins6.195 0 0 1-6.188 6.188z"/></svg>'; 2196a8eebd82SJames Collins case 'home': 2197906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2198906e1a13SJames CollinsviewBox="0 -256 1792 1792" aria-hidden="true" style="fill:currentColor"><g 2199906e1a13SJames 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 2200906e1a13SJames 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 2201906e1a13SJames 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 2202906e1a13SJames 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, 2203906e1a13SJames 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" 22049cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 22059e41d878SJames Collins case 'sun': 2206906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2207906e1a13SJames 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 2208906e1a13SJames 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 2209906e1a13SJames 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 2210906e1a13SJames 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 2211906e1a13SJames Collins0 0 1-.707.707z" /></svg>'; 22129e41d878SJames Collins case 'moon': 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="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 2215906e1a13SJames 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 2216906e1a13SJames 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 2217906e1a13SJames 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 2218906e1a13SJames Collins0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286z" /></svg>'; 221934d5f19aSJames Collins case 'sunmoon': 2220d0fba6d1SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2221d0fba6d1SJames Collinsstyle="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" 2222d0fba6d1SJames 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 2223d0fba6d1SJames 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" 2224d0fba6d1SJames 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, 2225d0fba6d1SJames 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>'; 2226f65a4e5eSJames Collins case 'hamburger': 2227f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" 2228f65a4e5eSJames 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 2229f65a4e5eSJames 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 2230f65a4e5eSJames 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 2231f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16z"/></svg>'; 2232f65a4e5eSJames Collins case 'down-arrow': 2233f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 2234f65a4e5eSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M16.003 18.626l7.081-7.081L25 13.46l-8.997 8.998-9.003-9 2235f65a4e5eSJames Collins1.917-1.916z"/></svg>'; 22363a3ece10SJames Collins case 'language': 22373a3ece10SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" width="16" 22383a3ece10SJames Collinsheight="16" fill="currentColor" viewBox="0 0 16 16"><path d="M4.545 6.714 4.11 22393a3ece10SJames 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 22403a3ece10SJames 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 22413a3ece10SJames 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 22423a3ece10SJames 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 22433a3ece10SJames Collins1.472.133-.254.414-.673.629-.89-1.125-.253-2.057-.694-2.82-1.284.681-.747 1.222-1.651 22443a3ece10SJames 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"/> 22453a3ece10SJames Collins</svg>'; 22469cff245bSJames Collins }//end switch 2247ab45ba71SJames Collins 2248a8eebd82SJames Collins return ''; 2249a8eebd82SJames Collins } 2250ab45ba71SJames Collins 2251a8eebd82SJames Collins /** 2252a8eebd82SJames Collins * Finalize theme 22539cff245bSJames Collins * 22549cff245bSJames Collins * @return void 2255a8eebd82SJames Collins */ 225610b40067Snomadjimbob public function finalize() 225710b40067Snomadjimbob { 2258a8eebd82SJames Collins } 22591785fc73SJames Collins 22601785fc73SJames Collins /** 22611785fc73SJames Collins * Show Messages 22629cff245bSJames Collins * 22639cff245bSJames Collins * @return void 22641785fc73SJames Collins */ 226510b40067Snomadjimbob public function showMessages() 226610b40067Snomadjimbob { 22671785fc73SJames Collins global $ACT; 22681785fc73SJames Collins 22699cff245bSJames Collins if ($this->lessIgnored === true) { 22709cff245bSJames Collins msg( 22719cff245bSJames Collins 'useLESS is enabled on the Mikio template, however is not supported on this server', 22729cff245bSJames Collins 2, 22739cff245bSJames Collins '', 22749cff245bSJames Collins '', 22759cff245bSJames Collins MSG_ADMINS_ONLY 22769cff245bSJames Collins ); 2277a8df40efSJames Collins } 2278a8df40efSJames Collins 22791785fc73SJames Collins $show = $this->getConf('showNotifications'); 22803a385f2cSJames Collins if ( 22814f8225e4SJames Collins strlen($show) === 0 || 22823a385f2cSJames Collins strcasecmp($show, 'always') === 0 || 22833a385f2cSJames Collins (strcasecmp($show, 'admin') === 0 && strcasecmp($ACT, 'admin') === 0) 22843a385f2cSJames Collins ) { 22851785fc73SJames Collins global $MSG, $MSG_shown; 22861785fc73SJames Collins 22874f8225e4SJames Collins if (isset($MSG) !== false) { 22889cff245bSJames Collins if (isset($MSG_shown) === false) { 22899cff245bSJames Collins $MSG_shown = []; 2290a8df40efSJames Collins } 22911785fc73SJames Collins 22921785fc73SJames Collins foreach ($MSG as $msg) { 22931785fc73SJames Collins $hash = md5($msg['msg']); 22949cff245bSJames Collins if (isset($MSG_shown[$hash]) === true) { 22951785fc73SJames Collins continue; 22961785fc73SJames Collins } 22971785fc73SJames Collins // skip double messages 22981785fc73SJames Collins 22999cff245bSJames Collins if (info_msg_allowed($msg) === true) { 23009cff245bSJames Collins echo '<div class="' . $msg['lvl'] . '">'; 23019cff245bSJames Collins echo $msg['msg']; 23029cff245bSJames Collins echo '</div>'; 23031785fc73SJames Collins } 23041785fc73SJames Collins 2305a8df40efSJames Collins $MSG_shown[$hash] = true; 23061785fc73SJames Collins } 23071785fc73SJames Collins 23081785fc73SJames Collins unset($GLOBALS['MSG']); 23099cff245bSJames Collins }//end if 23104f8225e4SJames Collins 23114f8225e4SJames Collins if (strlen($this->includedPageNotifications) > 0) { 23124f8225e4SJames Collins echo $this->includedPageNotifications; 23134f8225e4SJames Collins } 23144f8225e4SJames Collins }//end if 23151785fc73SJames Collins } 23167ac0a6efSJames Collins 23177ac0a6efSJames Collins /** 23187ac0a6efSJames Collins * Dokuwiki version 23197ac0a6efSJames Collins * 23207ac0a6efSJames Collins * @return string the dw version name 23217ac0a6efSJames Collins */ 23229cff245bSJames Collins public function dwVersion() 23239cff245bSJames Collins { 23249cff245bSJames Collins if (function_exists('getVersionData') === true) { 23257ac0a6efSJames Collins $version_data = getVersionData(); 23269cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 23277ac0a6efSJames Collins $version_items = explode(' ', $version_data['date']); 23287ac0a6efSJames Collins if (count($version_items) >= 2) { 23297ac0a6efSJames Collins return preg_replace('/[^a-zA-Z0-9 ]+/', '', strtolower($version_items[1])); 23307ac0a6efSJames Collins } 23317ac0a6efSJames Collins } 23327ac0a6efSJames Collins } 23337ac0a6efSJames Collins 23347ac0a6efSJames Collins return 'unknown'; 23357ac0a6efSJames Collins } 2336e4c4fb13SJames Collins 2337e4c4fb13SJames Collins /** 2338e4c4fb13SJames Collins * Dokuwiki version number 2339e4c4fb13SJames Collins * 2340e4c4fb13SJames Collins * @return string the dw version date converted to integer 2341e4c4fb13SJames Collins */ 23429cff245bSJames Collins public function dwVersionNumber() 23439cff245bSJames Collins { 23449cff245bSJames Collins if (function_exists('getVersionData') === true) { 2345e4c4fb13SJames Collins $version_data = getVersionData(); 23469cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 2347e4c4fb13SJames Collins $version_items = explode(' ', $version_data['date']); 2348e4c4fb13SJames Collins if (count($version_items) >= 1) { 2349e4c4fb13SJames Collins return intval(preg_replace('/[^0-9]+/', '', strtolower($version_items[0]))); 2350e4c4fb13SJames Collins } 2351e4c4fb13SJames Collins } 2352e4c4fb13SJames Collins } 2353e4c4fb13SJames Collins 2354e4c4fb13SJames Collins return 0; 2355e4c4fb13SJames Collins } 2356a8eebd82SJames Collins} 2357ab45ba71SJames Collins 2358ab45ba71SJames Collinsglobal $TEMPLATE; 235947161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 2360