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 42c165b184SJames Collins 43c165b184SJames Collins /** 44c165b184SJames Collins * Class constructor 45c165b184SJames Collins */ 4610b40067Snomadjimbob public function __construct() 4710b40067Snomadjimbob { 48c165b184SJames Collins $this->tplDir = tpl_incdir(); 49c165b184SJames Collins $this->baseDir = tpl_basedir(); 50c165b184SJames Collins 519cff245bSJames Collins $this->registerHooks(); 52c165b184SJames Collins } 53c165b184SJames Collins 54c165b184SJames Collins /** 55ab45ba71SJames Collins * Returns the instance of the class 5647161538SJames Collins * 57ab45ba71SJames Collins * @return Template class instance 5847161538SJames Collins */ 5947161538SJames Collins public static function getInstance() 6047161538SJames Collins { 6147161538SJames Collins static $instance = null; 6247161538SJames Collins 633a385f2cSJames Collins if (empty($instance) === true) { 6447161538SJames Collins $instance = new Template(); 6547161538SJames Collins } 6647161538SJames Collins 6747161538SJames Collins return $instance; 6847161538SJames Collins } 6947161538SJames Collins 70ab45ba71SJames Collins 7147161538SJames Collins /** 72ab45ba71SJames Collins * Register the themes hooks into Dokuwiki 739cff245bSJames Collins * 749cff245bSJames Collins * @return void 75c165b184SJames Collins */ 769cff245bSJames Collins private function registerHooks() 7710b40067Snomadjimbob { 78c165b184SJames Collins global $EVENT_HANDLER; 79c165b184SJames Collins 809cff245bSJames Collins $events_dispatcher = [ 81ab45ba71SJames Collins 'TPL_METAHEADER_OUTPUT' => 'metaheadersHandler' 829cff245bSJames Collins ]; 83c165b184SJames Collins 84c165b184SJames Collins foreach ($events_dispatcher as $event => $method) { 85c165b184SJames Collins $EVENT_HANDLER->register_hook($event, 'BEFORE', $this, $method); 86c165b184SJames Collins } 87c165b184SJames Collins } 88c165b184SJames Collins 89c165b184SJames Collins 90c165b184SJames Collins /** 91ab45ba71SJames Collins * Meta handler hook for DokuWiki 92c165b184SJames Collins * 939cff245bSJames Collins * @param \Doku_Event $event DokuWiki Event. 949cff245bSJames Collins * @return void 95c165b184SJames Collins */ 9610b40067Snomadjimbob public function metaHeadersHandler(\Doku_Event $event) 9710b40067Snomadjimbob { 98ab45ba71SJames Collins global $MIKIO_ICONS; 99b5536b07SChris MacMackin global $conf; 100ab45ba71SJames Collins 101ad182e6dSnomadjimbob global $MIKIO_TEMPLATE; 102ad182e6dSnomadjimbob $MIKIO_TEMPLATE = '123'; 103ad182e6dSnomadjimbob 1049cff245bSJames Collins $this->includePage('theme', false, true); 105a8eebd82SJames Collins 1069cff245bSJames Collins $stylesheets = []; 1079cff245bSJames Collins $scripts = []; 108c165b184SJames Collins 1093a385f2cSJames Collins if (empty($this->getConf('customTheme')) === false) { 1109cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.less') === true) { 111a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.less'; 112a8eebd82SJames Collins } else { 1139cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.css') === true) { 114ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.css'; 1152b4583abSJames Collins } 116a8eebd82SJames Collins } 1179cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/script.js') === true) { 118ab45ba71SJames Collins $scripts[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/script.js'; 119c165b184SJames Collins } 120c165b184SJames Collins } 121c165b184SJames Collins 1223a385f2cSJames Collins if (is_array($MIKIO_ICONS) === true && empty($this->getConf('iconTag', 'icon')) === false) { 1239cff245bSJames Collins $icons = []; 124ab45ba71SJames Collins foreach ($MIKIO_ICONS as $icon) { 1259cff245bSJames Collins if (isset($icon['name']) === true && isset($icon['css']) === true && isset($icon['insert']) === true) { 126ab45ba71SJames Collins $icons[] = $icon; 127c165b184SJames Collins 1283a385f2cSJames Collins if (empty($icon['css']) === false) { 1299cff245bSJames Collins if (strpos($icon['css'], '//') === false) { 130a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'icons/' . $icon['css']; 131ab45ba71SJames Collins } else { 132a8eebd82SJames Collins $stylesheets[] = $icon['css']; 133ab45ba71SJames Collins } 134ab45ba71SJames Collins } 135ab45ba71SJames Collins } 136ab45ba71SJames Collins } 137ab45ba71SJames Collins $MIKIO_ICONS = $icons; 138ab45ba71SJames Collins } else { 139ab45ba71SJames Collins $MIKIO_ICONS = []; 140ab45ba71SJames Collins } 141c165b184SJames Collins 1427864545bSChris MacMackin $scripts[] = $this->baseDir . 'assets/mikio-typeahead.js'; 143ab45ba71SJames Collins $scripts[] = $this->baseDir . 'assets/mikio.js'; 144644fd9f9SJames Collins 1459cff245bSJames Collins if ($this->getConf('useLESS') === true) { 146ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.less'; 147644fd9f9SJames Collins } else { 148644fd9f9SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.css'; 149644fd9f9SJames Collins } 150644fd9f9SJames Collins 151ad182e6dSnomadjimbob /* MikioPlugin Support */ 1529ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 153ad182e6dSnomadjimbob if ($this->getConf('useLESS') === true) { 154ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.less'; 155ad182e6dSnomadjimbob } else { 156ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.css'; 157ad182e6dSnomadjimbob } 158ad182e6dSnomadjimbob } 159ab45ba71SJames Collins 160ab45ba71SJames Collins $set = []; 161c165b184SJames Collins foreach ($stylesheets as $style) { 1629cff245bSJames Collins if (in_array($style, $set) === false) { 1633a385f2cSJames Collins if (strcasecmp(substr($style, -5), '.less') === 0 && $this->getConf('useLESS') === true) { 164ab45ba71SJames Collins $style = $this->baseDir . 'css.php?css=' . str_replace($this->baseDir, '', $style); 165ab45ba71SJames Collins } 166ab45ba71SJames Collins 1679cff245bSJames Collins array_unshift($event->data['link'], [ 168c165b184SJames Collins 'type' => 'text/css', 169c165b184SJames Collins 'rel' => 'stylesheet', 170c165b184SJames Collins 'href' => $style 1719cff245bSJames Collins ]); 172c165b184SJames Collins } 173ab45ba71SJames Collins $set[] = $style; 174ab45ba71SJames Collins } 175c165b184SJames Collins 176ab45ba71SJames Collins $set = []; 177c165b184SJames Collins foreach ($scripts as $script) { 1789cff245bSJames Collins if (in_array($script, $set) === false) { 1799cff245bSJames Collins $script_params = [ 180c165b184SJames Collins 'type' => 'text/javascript', 181c165b184SJames Collins '_data' => '', 1828395cdcbSChris MacMackin 'src' => $script 1839cff245bSJames Collins ]; 184c1ecb866SJames Collins 185c1ecb866SJames Collins // equal to or greator than hogfather 186c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 187c1ecb866SJames Collins // greator than hogfather - defer always on 188c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 189c1ecb866SJames Collins $script_params += ['defer' => 'defer']; 190c1ecb866SJames Collins } else { 191c1ecb866SJames Collins // hogfather - defer always on unless $conf['defer_js'] is false 1929cff245bSJames Collins if (array_key_exists('defer_js', $conf) === false || $conf['defer_js'] === true) { 1938395cdcbSChris MacMackin $script_params += ['defer' => 'defer']; 1948395cdcbSChris MacMackin } 195c1ecb866SJames Collins } 196c1ecb866SJames Collins } 197c1ecb866SJames Collins 1988395cdcbSChris MacMackin $event->data['script'][] = $script_params; 1999cff245bSJames Collins }//end if 200ab45ba71SJames Collins $set[] = $script; 2019cff245bSJames Collins }//end foreach 202c165b184SJames Collins } 203c165b184SJames Collins 204c165b184SJames Collins 205c165b184SJames Collins /** 206a8eebd82SJames Collins * Print or return the footer meta data 207c165b184SJames Collins * 2089cff245bSJames Collins * @param boolean $print Print the data to buffer. 2099cff245bSJames Collins * @return string HTML footer meta data 210c165b184SJames Collins */ 2119cff245bSJames Collins public function includeFooterMeta(bool $print = true) 21210b40067Snomadjimbob { 213a8eebd82SJames Collins $html = ''; 214a8eebd82SJames Collins 215a8eebd82SJames Collins if (count($this->footerScript) > 0) { 216a8eebd82SJames Collins $html .= '<script type="text/javascript">function mikioFooterRun() {'; 217a8eebd82SJames Collins foreach ($this->footerScript as $script) { 218a8eebd82SJames Collins $html .= $script . ';'; 219a8eebd82SJames Collins } 220a8eebd82SJames Collins $html .= '}</script>'; 221a8eebd82SJames Collins } 222c165b184SJames Collins 223c165b184SJames Collins 2249cff245bSJames Collins if ($print === true) { 2259cff245bSJames Collins echo $html; 2269cff245bSJames Collins } 227a8eebd82SJames Collins return $html; 228a8eebd82SJames Collins } 229a8eebd82SJames Collins 23095372bffSJames Collins 23195372bffSJames Collins // phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing 23295372bffSJames Collins 23395372bffSJames Collins 234a8eebd82SJames Collins /** 235ab45ba71SJames Collins * Retreive and parse theme configuration options 236c165b184SJames Collins * 2379cff245bSJames Collins * @param string $key The configuration key to retreive. 2389cff245bSJames Collins * @param mixed $default If key doesn't exist, return this value. 239ab45ba71SJames Collins * @return mixed parsed value of configuration 240c165b184SJames Collins */ 24195372bffSJames Collins public function getConf(string $key, $default = false) 24210b40067Snomadjimbob { 243c165b184SJames Collins $value = tpl_getConf($key, $default); 244c165b184SJames Collins 2453a385f2cSJames Collins $data = [ 2463a385f2cSJames Collins ['keys' => ['navbarDWMenuType'], 'type' => 'choice', 2473a385f2cSJames Collins 'values' => ['both', 'icons', 'text'] 2483a385f2cSJames Collins ], 2493a385f2cSJames Collins ['keys' => ['navbarDWMenuCombine'], 'type' => 'choice', 2503a385f2cSJames Collins 'values' => ['combine', 'seperate', 'dropdown'] 2513a385f2cSJames Collins ], 2523a385f2cSJames Collins ['keys' => ['navbarPosLeft', 'navbarPosMiddle', 'navbarPosRight'], 2533a385f2cSJames Collins 'type' => 'choice', 2543a385f2cSJames Collins 'values' => ['none', 'custom', 'search', 'dokuwiki'], 2553a385f2cSJames Collins 'default' => [ 2563a385f2cSJames Collins 'navbarPosLeft' => 'none', 2573a385f2cSJames Collins 'navbarPosMiddle' => 'search', 2583a385f2cSJames Collins 'navbarPosRight' => 'dokuwiki' 2593a385f2cSJames Collins ] 2603a385f2cSJames Collins ], 2613a385f2cSJames Collins ['keys' => ['navbarItemShowCreate', 'navbarItemShowShow', 'navbarItemShowRevs', 'navbarItemShowBacklink', 2623a385f2cSJames Collins 'navbarItemShowRecent', 'navbarItemShowMedia', 'navbarItemShowIndex', 'navbarItemShowProfile', 2633a385f2cSJames Collins 'navbarItemShowAdmin' 2643a385f2cSJames Collins ], 2653a385f2cSJames Collins 'type' => 'choice', 2663a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 2673a385f2cSJames Collins ], 2683a385f2cSJames Collins ['keys' => ['navbarItemShowLogin', 'navbarItemShowLogout'], 2693a385f2cSJames Collins 'type' => 'choice', 2703a385f2cSJames Collins 'values' => ['always', 'never'] 2713a385f2cSJames Collins ], 2723a385f2cSJames Collins ['keys' => ['searchButton'], 'type' => 'choice', 2733a385f2cSJames Collins 'values' => ['icon', 'text'] 2743a385f2cSJames Collins ], 2753a385f2cSJames Collins ['keys' => ['breadcrumbPosition', 'youareherePosition'], 2763a385f2cSJames Collins 'type' => 'choice', 2773a385f2cSJames Collins 'values' => ['top', 'hero', 'page', 'none'] 2783a385f2cSJames Collins ], 2793a385f2cSJames Collins ['keys' => ['youarehereHome'], 'type' => 'choice', 2803a385f2cSJames Collins 'values' => ['page title', 'home', 'icon', 'none'] 2813a385f2cSJames Collins ], 2823a385f2cSJames Collins ['keys' => ['sidebarLeftRow1', 'sidebarLeftRow2', 'sidebarLeftRow3', 'sidebarLeftRow4'], 2833a385f2cSJames Collins 'type' => 'choice', 2843a385f2cSJames Collins 'values' => ['none', 'logged in user', 'search', 'content', 'tags'], 2853a385f2cSJames Collins 'default' => [ 2863a385f2cSJames Collins 'sidebarLeftRow1' => 'logged in user', 2873a385f2cSJames Collins 'sidebarLeftRow2' => 'search', 2883a385f2cSJames Collins 'sidebarLeftRow3' => 'content' 2893a385f2cSJames Collins ] 2903a385f2cSJames Collins ], 2913a385f2cSJames Collins ['keys' => ['pageToolsFloating', 'pageToolsFooter'], 2923a385f2cSJames Collins 'type' => 'choice', 2933a385f2cSJames Collins 'values' => ['always', 'none', 'page editors'] 2943a385f2cSJames Collins ], 2953a385f2cSJames Collins ['keys' => ['pageToolsShowCreate', 'pageToolsShowEdit', 'pageToolsShowRevs', 'pageToolsShowBacklink', 2963a385f2cSJames Collins 'pageToolsShowTop' 2973a385f2cSJames Collins ], 2983a385f2cSJames Collins 'type' => 'choice', 2993a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 3003a385f2cSJames Collins ], 3013a385f2cSJames Collins ['keys' => ['showNotifications'], 'type' => 'choice', 3023a385f2cSJames Collins 'values' => ['admin', 'always', 'none'] 3033a385f2cSJames Collins ], 3043a385f2cSJames Collins ['keys' => ['licenseType'], 'type' => 'choice', 3053a385f2cSJames Collins 'values' => ['badge', 'button', 'none'] 3063a385f2cSJames Collins ], 3073a385f2cSJames Collins ['keys' => ['navbarUseTitleIcon'], 'type' => 'bool'], 3083a385f2cSJames Collins ['keys' => ['navbarUseTitleText'], 'type' => 'bool'], 3093a385f2cSJames Collins ['keys' => ['navbarUseTaglineText'], 'type' => 'bool'], 3103a385f2cSJames Collins ['keys' => ['navbarShowSub'], 'type' => 'bool'], 3113a385f2cSJames Collins ['keys' => ['heroTitle'], 'type' => 'bool'], 3123a385f2cSJames Collins ['keys' => ['heroImagePropagation'], 'type' => 'bool'], 3133a385f2cSJames Collins ['keys' => ['breadcrumbPrefix'], 'type' => 'bool'], 3143a385f2cSJames Collins ['keys' => ['breadcrumbSep'], 'type' => 'bool'], 3153a385f2cSJames Collins ['keys' => ['youareherePrefix'], 'type' => 'bool'], 3163a385f2cSJames Collins ['keys' => ['youarehereSep'], 'type' => 'bool'], 3173a385f2cSJames Collins ['keys' => ['sidebarShowLeft'], 'type' => 'bool'], 3183a385f2cSJames Collins ['keys' => ['sidebarShowRight'], 'type' => 'bool'], 3193a385f2cSJames Collins ['keys' => ['tocFull'], 'type' => 'bool'], 3203a385f2cSJames Collins ['keys' => ['footerSearch'], 'type' => 'bool'], 3213a385f2cSJames Collins ['keys' => ['licenseImageOnly'], 'type' => 'bool'], 3223a385f2cSJames Collins ['keys' => ['includePageUseACL'], 'type' => 'bool'], 3233a385f2cSJames Collins ['keys' => ['includePagePropagate'], 'type' => 'bool'], 3243a385f2cSJames Collins ['keys' => ['youarehereHideHome'], 'type' => 'bool'], 3253a385f2cSJames Collins ['keys' => ['tagsConsolidate'], 'type' => 'bool'], 3263a385f2cSJames Collins ['keys' => ['footerInPage'], 'type' => 'bool'], 3273a385f2cSJames Collins ['keys' => ['sidebarMobileDefaultCollapse'], 'type' => 'bool'], 3283a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowLeft'], 'type' => 'bool'], 3293a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowRight'], 'type' => 'bool'], 3303a385f2cSJames Collins ['keys' => ['searchUseTypeahead'], 'type' => 'bool'], 33112030b10SJames Collins ['keys' => ['showLightDark'], 'type' => 'bool'], 33234d5f19aSJames Collins ['keys' => ['autoLightDark'], 'type' => 'bool'], 3333a385f2cSJames Collins ['keys' => ['youarehereShowLast'], 'type' => 'int'], 3343a385f2cSJames Collins 3353a385f2cSJames Collins ['keys' => ['iconTag'], 'type' => 'string'], 3363a385f2cSJames Collins ['keys' => ['customTheme'], 'type' => 'string'], 3373a385f2cSJames Collins ['keys' => ['navbarCustomMenuText'], 'type' => 'string'], 3383a385f2cSJames Collins ['keys' => ['breadcrumbPrefixText'], 'type' => 'string'], 3393a385f2cSJames Collins ['keys' => ['breadcrumbSepText'], 'type' => 'string'], 3403a385f2cSJames Collins ['keys' => ['youareherePrefixText'], 'type' => 'string'], 3413a385f2cSJames Collins ['keys' => ['youarehereSepText'], 'type' => 'string'], 3423a385f2cSJames Collins ['keys' => ['footerCustomMenuText'], 'type' => 'string'], 3433a385f2cSJames Collins ['keys' => ['brandURLGuest'], 'type' => 'string'], 3443a385f2cSJames Collins ['keys' => ['brandURLUser'], 'type' => 'string'], 3453a385f2cSJames Collins 3463a385f2cSJames Collins ['keys' => ['useLESS'], 'type' => 'less'], 3473a385f2cSJames Collins ]; 3483a385f2cSJames Collins 3493a385f2cSJames Collins foreach ($data as $row) { 3503a385f2cSJames Collins // does not check case.... 3513a385f2cSJames Collins if (in_array($key, $row['keys']) === true) { 35295372bffSJames Collins if (array_key_exists('type', $row) === true) { 3533a385f2cSJames Collins switch ($row['type']) { 3543a385f2cSJames Collins case 'bool': 3553a385f2cSJames Collins return (bool) $value; 3563a385f2cSJames Collins case 'int': 3573a385f2cSJames Collins return (int) $value; 3583a385f2cSJames Collins case 'string': 3593a385f2cSJames Collins return $value; 3603a385f2cSJames Collins case 'less': 36129118ed7SJames Collins $value = (bool) $value; 362a8df40efSJames Collins $lessAvailable = true; 363a8df40efSJames Collins 364a8df40efSJames Collins // check for less library 365a8df40efSJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3669cff245bSJames Collins if (file_exists($lesscLib) === false) { 367a8df40efSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3689cff245bSJames Collins } 3699cff245bSJames Collins if (file_exists($lesscLib) === false) { 370a8df40efSJames Collins $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3719cff245bSJames Collins } 3729cff245bSJames Collins if (file_exists($lesscLib) === false) { 3739cff245bSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . 3749cff245bSJames Collins '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3759cff245bSJames Collins } 3769cff245bSJames Collins if (file_exists($lesscLib) === false) { 377a8df40efSJames Collins $lessAvailable = false; 378a8df40efSJames Collins } 379a8df40efSJames Collins 380a8df40efSJames Collins // check for ctype extensions 3819cff245bSJames Collins if (function_exists('ctype_digit') === false) { 382a8df40efSJames Collins $lessAvailable = false; 383a8df40efSJames Collins } 384a8df40efSJames Collins 3859cff245bSJames Collins if ($value === true && $lessAvailable === false) { 386a8df40efSJames Collins $this->lessIgnored = true; 38729118ed7SJames Collins $value = false; 38829118ed7SJames Collins } 3893a385f2cSJames Collins 3903a385f2cSJames Collins return $value; 3919cff245bSJames Collins }//end switch 3923a385f2cSJames Collins }//end if 3933a385f2cSJames Collins 3943a385f2cSJames Collins if (in_array($value, $row['values']) === true) { 3953a385f2cSJames Collins return $value; 3963a385f2cSJames Collins } 3973a385f2cSJames Collins 3983a385f2cSJames Collins if (array_key_exists('default', $row) === true) { 3993a385f2cSJames Collins if (is_array($row['default']) === true) { 4003a385f2cSJames Collins if (array_key_exists($key, $row['default']) === true) { 4013a385f2cSJames Collins return $row['default'][$key]; 4023a385f2cSJames Collins } 4033a385f2cSJames Collins } else { 4043a385f2cSJames Collins return $row['default']; 4053a385f2cSJames Collins } 4063a385f2cSJames Collins } 4073a385f2cSJames Collins 4083a385f2cSJames Collins return reset($row['values']); 4093a385f2cSJames Collins }//end if 4103a385f2cSJames Collins }//end foreach 411c165b184SJames Collins 412c165b184SJames Collins return $value; 413c165b184SJames Collins } 414c165b184SJames Collins 415c165b184SJames Collins 41695372bffSJames Collins // phpcs:enable 41795372bffSJames Collins 41895372bffSJames Collins 419c165b184SJames Collins /** 420a8eebd82SJames Collins * Check if a page exist in directory or namespace 421c165b184SJames Collins * 4229cff245bSJames Collins * @param string $page Page/namespace to search. 423a8eebd82SJames Collins * @return boolean if page exists 424c165b184SJames Collins */ 4259cff245bSJames Collins public function pageExists(string $page) 42610b40067Snomadjimbob { 427ab45ba71SJames Collins ob_start(); 428a8eebd82SJames Collins tpl_includeFile($page . '.html'); 429ab45ba71SJames Collins $html = ob_get_contents(); 430ab45ba71SJames Collins ob_end_clean(); 431a8eebd82SJames Collins 4323a385f2cSJames Collins if (empty($html) === false) { 4339cff245bSJames Collins return true; 4349cff245bSJames Collins } 435a8eebd82SJames Collins 436a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 437a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 438a8eebd82SJames Collins 4399cff245bSJames Collins if ($propagate === true) { 4409cff245bSJames Collins if (page_findnearest($page, $useACL) !== false) { 4419cff245bSJames Collins return true; 4429cff245bSJames Collins } 4439cff245bSJames Collins } elseif ($useACL === true && auth_quickaclcheck($page) !== AUTH_NONE) { 4449cff245bSJames Collins return true; 445ab45ba71SJames Collins } 446ab45ba71SJames Collins 4479cff245bSJames Collins return false; 448ab45ba71SJames Collins } 449ab45ba71SJames Collins 450a8eebd82SJames Collins 451c165b184SJames Collins /** 452a8eebd82SJames Collins * Print or return page from directory or namespace 4532b4583abSJames Collins * 4549cff245bSJames Collins * @param string $page Page/namespace to include. 4559cff245bSJames Collins * @param boolean $print Print content. 4569cff245bSJames Collins * @param boolean $parse Parse content before printing/returning. 4579cff245bSJames Collins * @param string $classWrapper Wrap page in a div with class. 458ab45ba71SJames Collins * @return string contents of page found 4592b4583abSJames Collins */ 4609cff245bSJames Collins public function includePage(string $page, bool $print = true, bool $parse = true, string $classWrapper = '') 4612b4583abSJames Collins { 462a8eebd82SJames Collins ob_start(); 463a8eebd82SJames Collins tpl_includeFile($page . '.html'); 464a8eebd82SJames Collins $html = ob_get_contents(); 465a8eebd82SJames Collins ob_end_clean(); 466a8eebd82SJames Collins 4673a385f2cSJames Collins if (empty($html) === true) { 468a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 469a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 470ab45ba71SJames Collins $html = ''; 4712b4583abSJames Collins 472ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 473ab45ba71SJames Collins } 4742b4583abSJames Collins 4753a385f2cSJames Collins if (empty($html) === false && $parse === true) { 476ab45ba71SJames Collins $html = $this->parseContent($html); 477ab45ba71SJames Collins } 4782b4583abSJames Collins 4793a385f2cSJames Collins if (empty($classWrapper) === false && empty($html) === false) { 4809cff245bSJames Collins $html = '<div class="' . $classWrapper . '">' . $html . '</div>'; 4819cff245bSJames Collins } 4822b4583abSJames Collins 4839cff245bSJames Collins if ($print === true) { 4849cff245bSJames Collins echo $html; 4859cff245bSJames Collins } 486ab45ba71SJames Collins return $html; 4872b4583abSJames Collins } 4882b4583abSJames Collins 489a8eebd82SJames Collins 490a8eebd82SJames Collins /** 491a8eebd82SJames Collins * Print or return logged in user information 492a8eebd82SJames Collins * 4939cff245bSJames Collins * @param boolean $print Print content. 494a8eebd82SJames Collins * @return string user information 495a8eebd82SJames Collins */ 4969cff245bSJames Collins public function includeLoggedIn(bool $print = true) 49710b40067Snomadjimbob { 498a8eebd82SJames Collins $html = ''; 499a8eebd82SJames Collins 5009cff245bSJames Collins if (empty($_SERVER['REMOTE_USER']) === false) { 501a8eebd82SJames Collins $html .= '<div class="mikio-user-info">'; 502a8eebd82SJames Collins ob_start(); 503a8eebd82SJames Collins tpl_userinfo(); 504a8eebd82SJames Collins $html .= ob_get_contents(); 505a8eebd82SJames Collins ob_end_clean(); 506a8eebd82SJames Collins $html .= '</div>'; 5072b4583abSJames Collins } 508a8eebd82SJames Collins 5099cff245bSJames Collins if ($print === true) { 5109cff245bSJames Collins echo $html; 5119cff245bSJames Collins } 512a8eebd82SJames Collins return $html; 5132b4583abSJames Collins } 5142b4583abSJames Collins 5152b4583abSJames Collins 516a8eebd82SJames Collins /** 517a8eebd82SJames Collins * Print or return DokuWiki Menu 518a8eebd82SJames Collins * 5199cff245bSJames Collins * @param boolean $print Print content. 520a8eebd82SJames Collins * @return string contents of the menu 521a8eebd82SJames Collins */ 5229cff245bSJames Collins public function includeDWMenu(bool $print = true) 52310b40067Snomadjimbob { 5242b4583abSJames Collins global $lang; 5252b4583abSJames Collins global $USERINFO; 526c165b184SJames Collins 5279cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 528a8eebd82SJames Collins $html = '<ul class="mikio-nav">'; 5292b4583abSJames Collins 530ab45ba71SJames Collins $pageToolsMenu = []; 531ab45ba71SJames Collins $siteToolsMenu = []; 532ab45ba71SJames Collins $userToolsMenu = []; 533c165b184SJames Collins 534ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 535ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 536ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 5372b4583abSJames Collins 5382b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 5392b4583abSJames Collins foreach ($items as $item) { 5409cff245bSJames Collins if ($item->getType() !== 'top') { 541ab45ba71SJames Collins $itemHtml = ''; 5422b4583abSJames Collins 543905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5449cff245bSJames Collins if ( 5453a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5463a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5473a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5489cff245bSJames Collins ) { 5499cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . 5509cff245bSJames Collins ' ' . $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5519cff245bSJames Collins if ($showIcons === true) { 5529cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5539cff245bSJames Collins } 5549cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5559cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5569cff245bSJames Collins } 557ab45ba71SJames Collins $itemHtml .= '</a>'; 558ab45ba71SJames Collins 559ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 5602b4583abSJames Collins } 5619cff245bSJames Collins }//end if 5629cff245bSJames Collins }//end foreach 5632b4583abSJames Collins 564ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action'); 565ab45ba71SJames Collins foreach ($items as $item) { 566ab45ba71SJames Collins $itemHtml = ''; 5672b4583abSJames Collins 568905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5699cff245bSJames Collins if ( 5703a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5713a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5723a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5739cff245bSJames Collins ) { 5749cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . ' ' . 5759cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5769cff245bSJames Collins if ($showIcons === true) { 5779cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5789cff245bSJames Collins } 5799cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5809cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5819cff245bSJames Collins } 582ab45ba71SJames Collins $itemHtml .= '</a>'; 5832b4583abSJames Collins 584ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 5852b4583abSJames Collins } 5869cff245bSJames Collins }//end foreach 5872b4583abSJames Collins 588ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 589ab45ba71SJames Collins foreach ($items as $item) { 590ab45ba71SJames Collins $itemHtml = ''; 591ab45ba71SJames Collins 592905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5939cff245bSJames Collins if ( 5943a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5953a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5963a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5979cff245bSJames Collins ) { 5989cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link' . ($isDropDown === true ? ' mikio-dropdown-item' : '') . ' ' . 5999cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 6009cff245bSJames Collins if ($showIcons === true) { 6019cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 6029cff245bSJames Collins } 6039cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6049cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6059cff245bSJames Collins } 606ab45ba71SJames Collins $itemHtml .= '</a>'; 607ab45ba71SJames Collins 608ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 609ab45ba71SJames Collins } 6109cff245bSJames Collins }//end foreach 611ab45ba71SJames Collins 612ab45ba71SJames Collins 613ab45ba71SJames Collins switch ($this->getConf('navbarDWMenuCombine')) { 614ab45ba71SJames Collins case 'dropdown': 615ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 6169cff245bSJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" 6179cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6189cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('file') : '') . 6199cff245bSJames Collins ($showText === true ? $lang['page_tools'] : '<span class="mikio-small-only">' . $lang['page_tools'] . 6209cff245bSJames Collins '</span>') . '</a>'; 621a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 622ab45ba71SJames Collins 623ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 624ab45ba71SJames Collins $html .= $item; 625ab45ba71SJames Collins } 626ab45ba71SJames Collins 627ab45ba71SJames Collins $html .= '</div>'; 628ab45ba71SJames Collins $html .= '</li>'; 629ab45ba71SJames Collins 630a8eebd82SJames Collins $html .= '<li id="dokuwiki__sitetools" class="mikio-nav-dropdown">'; 6319cff245bSJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" 6329cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6339cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('gear') : '') . 6349cff245bSJames Collins ($showText === true ? $lang['site_tools'] : '<span class="mikio-small-only">' . 6359cff245bSJames Collins $lang['site_tools'] . '</span>') . '</a>'; 636a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 637ab45ba71SJames Collins 638ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 639ab45ba71SJames Collins $html .= $item; 640ab45ba71SJames Collins } 641ab45ba71SJames Collins 642ab45ba71SJames Collins $html .= '</div>'; 643ab45ba71SJames Collins $html .= '</li>'; 644ab45ba71SJames Collins 645a8eebd82SJames Collins $html .= '<li id="dokuwiki__usertools" class="mikio-nav-dropdown">'; 6469cff245bSJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" 6479cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6489cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('user') : '') . 6499cff245bSJames Collins ($showText === true ? $lang['user_tools'] : '<span class="mikio-small-only">' . 6509cff245bSJames Collins $lang['user_tools'] . '</span>') . '</a>'; 651a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 652ab45ba71SJames Collins 653ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 654ab45ba71SJames Collins $html .= $item; 655ab45ba71SJames Collins } 656ab45ba71SJames Collins 657ab45ba71SJames Collins $html .= '</div>'; 658ab45ba71SJames Collins $html .= '</li>'; 659ab45ba71SJames Collins 660ab45ba71SJames Collins break; 661ab45ba71SJames Collins 662ab45ba71SJames Collins case 'combine': 663ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 6649cff245bSJames Collins $html .= '<a class="mikio-nav-link" href="#">' . 6659cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('wrench') : '') . 6669cff245bSJames Collins ($showText === true ? tpl_getLang('tools-menu') : '<span class="mikio-small-only">' . 6679cff245bSJames Collins tpl_getLang('tools-menu') . '</span>') . '</a>'; 668a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 669ab45ba71SJames Collins 670ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 671ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 672ab45ba71SJames Collins $html .= $item; 673ab45ba71SJames Collins } 674ab45ba71SJames Collins 675ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 676ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 677ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 678ab45ba71SJames Collins $html .= $item; 679ab45ba71SJames Collins } 680ab45ba71SJames Collins 681ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 682ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 683ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 684ab45ba71SJames Collins $html .= $item; 685ab45ba71SJames Collins } 686ab45ba71SJames Collins 687ab45ba71SJames Collins $html .= '</div>'; 688ab45ba71SJames Collins $html .= '</li>'; 689ab45ba71SJames Collins break; 690ab45ba71SJames Collins 691ab45ba71SJames Collins default: // seperate 692ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 693a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 694ab45ba71SJames Collins } 695ab45ba71SJames Collins 696ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 697a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 698a8eebd82SJames Collins } 699a8eebd82SJames Collins 700a8eebd82SJames Collins foreach ($userToolsMenu as $item) { 701a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 702ab45ba71SJames Collins } 703ab45ba71SJames Collins 704ab45ba71SJames Collins break; 7059cff245bSJames Collins }//end switch 706ab45ba71SJames Collins 70712030b10SJames Collins if ($this->getConf('showLightDark') === true) { 708*d0fba6d1SJames Collins $autoLightDark = $this->getConf('autoLightDark'); 7099e41d878SJames Collins $html .= '<li class="mikio-darklight"> 7109e41d878SJames Collins<a href="#" class="mikio-control mikio-button mikio-darklight-button">' . 711*d0fba6d1SJames Collins ($autoLightDark === true ? $this->mikioInlineIcon('sunmoon', 'mikio-darklight-auto') : '') . 7129e41d878SJames Collins $this->mikioInlineIcon('sun', 'mikio-darklight-light') . 7139e41d878SJames Collins $this->mikioInlineIcon('moon', 'mikio-darklight-dark') . 7149e41d878SJames Collins '</a></li>'; 71512030b10SJames Collins } 71612030b10SJames Collins 717ab45ba71SJames Collins $html .= '</ul>'; 718ab45ba71SJames Collins 7199cff245bSJames Collins if ($print === true) { 7209cff245bSJames Collins echo $html; 7219cff245bSJames Collins } 722a8eebd82SJames Collins return $html; 723a8eebd82SJames Collins } 724a8eebd82SJames Collins 725a8eebd82SJames Collins 726a8eebd82SJames Collins /** 727a8eebd82SJames Collins * Create a nav element from a string. <uri>|<title>; 728a8eebd82SJames Collins * 7299cff245bSJames Collins * @param string $str String to generate nav. 730a8eebd82SJames Collins * @return string nav elements generated 731a8eebd82SJames Collins */ 7329cff245bSJames Collins public function stringToNav(string $str) 73310b40067Snomadjimbob { 734a8eebd82SJames Collins $html = ''; 735a8eebd82SJames Collins 7363a385f2cSJames Collins if (empty($str) === false) { 737a8eebd82SJames Collins $items = explode(';', $str); 738a8eebd82SJames Collins if (count($items) > 0) { 739a8eebd82SJames Collins $html .= '<ul class="mikio-nav">'; 740a8eebd82SJames Collins foreach ($items as $item) { 741a8eebd82SJames Collins $parts = explode('|', $item); 742a8eebd82SJames Collins if ($parts > 1) { 7439cff245bSJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . 7449cff245bSJames Collins strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . 7459cff245bSJames Collins '</a></li>'; 746a8eebd82SJames Collins } 747a8eebd82SJames Collins } 748a8eebd82SJames Collins $html .= '</ul>'; 749a8eebd82SJames Collins } 7502b4583abSJames Collins } 7512b4583abSJames Collins 752ab45ba71SJames Collins return $html; 7532b4583abSJames Collins } 7542b4583abSJames Collins 755a8eebd82SJames Collins /** 756ab45ba71SJames Collins * print or return the main navbar 7572b4583abSJames Collins * 7589cff245bSJames Collins * @param boolean $print Print the navbar. 7599cff245bSJames Collins * @param boolean $showSub Include the sub navbar. 760ab45ba71SJames Collins * @return string generated content 7612b4583abSJames Collins */ 7629cff245bSJames Collins public function includeNavbar(bool $print = true, bool $showSub = false) 76310b40067Snomadjimbob { 764b39ad16dSJames Collins global $conf, $USERINFO; 765d3d7d2b7SJames Collins 766d3d7d2b7SJames Collins $homeUrl = wl(); 767d3d7d2b7SJames Collins 7689cff245bSJames Collins if (plugin_isdisabled('showpageafterlogin') === false) { 769d3d7d2b7SJames Collins $p = &plugin_load('action', 'showpageafterlogin'); 7703a385f2cSJames Collins if (empty($p) === false) { 7719cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 772d3d7d2b7SJames Collins $homeUrl = wl($p->getConf('page_after_login')); 773d3d7d2b7SJames Collins } 774d3d7d2b7SJames Collins } 775b39ad16dSJames Collins } else { 7769cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 777b39ad16dSJames Collins $url = $this->getConf('brandURLUser'); 778b39ad16dSJames Collins if (strlen($url) > 0) { 779b39ad16dSJames Collins $homeUrl = $url; 780d3d7d2b7SJames Collins } 781b39ad16dSJames Collins } else { 782b39ad16dSJames Collins $url = $this->getConf('brandURLGuest'); 783b39ad16dSJames Collins if (strlen($url) > 0) { 784b39ad16dSJames Collins $homeUrl = $url; 785b39ad16dSJames Collins } 786b39ad16dSJames Collins } 787b39ad16dSJames Collins } 788d3d7d2b7SJames Collins 789ab45ba71SJames Collins $html = ''; 79047161538SJames Collins 7919cff245bSJames Collins $html .= '<nav class="mikio-navbar' . (($this->getConf('stickyNavbar') === true) ? ' mikio-sticky' : '') . 7929cff245bSJames Collins '">'; 793f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 794d3d7d2b7SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . $homeUrl . '">'; 7959cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true || $this->getConf('navbarUseTitleText') === true) { 796ab45ba71SJames Collins // Brand image 7979cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true) { 7989cff245bSJames Collins $logo = $this->getMediaFile('logo', false); 7999cff245bSJames Collins ; 8003a385f2cSJames Collins if (empty($logo) === false) { 801f0241fc4SJames Collins $width = $this->getConf('navbarTitleIconWidth'); 802f0241fc4SJames Collins $height = $this->getConf('navbarTitleIconHeight'); 803f0241fc4SJames Collins $styles = ''; 804f0241fc4SJames Collins 805f0241fc4SJames Collins if (strlen($width) > 0 || strlen($height) > 0) { 8069cff245bSJames Collins if (ctype_digit($width) === true) { 807f0241fc4SJames Collins $styles .= 'max-width:' . intval($width) . 'px;'; 8089cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $width) === 1) { 809f0241fc4SJames Collins $styles .= 'max-width:' . $width . ';'; 8109cff245bSJames Collins } elseif (strcasecmp($width, 'none') === 0) { 8117a92c19bSJames Collins $styles .= 'max-width:none;'; 812f0241fc4SJames Collins } 813f0241fc4SJames Collins 8149cff245bSJames Collins if (ctype_digit($height) === true) { 815f0241fc4SJames Collins $styles .= 'max-height:' . intval($height) . 'px;'; 8169cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $height) === 1) { 817f0241fc4SJames Collins $styles .= 'max-height:' . $height . ';'; 8189cff245bSJames Collins } elseif (strcasecmp($height, 'none') === 0) { 8197a92c19bSJames Collins $styles .= 'max-height:none;'; 820f0241fc4SJames Collins } 821f0241fc4SJames Collins 822f0241fc4SJames Collins if (strlen($styles) > 0) { 823f0241fc4SJames Collins $styles = ' style="' . $styles . '"'; 824f0241fc4SJames Collins } 8259cff245bSJames Collins }//end if 826f0241fc4SJames Collins 827f0241fc4SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image"' . $styles . '>'; 8289cff245bSJames Collins }//end if 8299cff245bSJames Collins }//end if 830ab45ba71SJames Collins 831ab45ba71SJames Collins // Brand title 8329cff245bSJames Collins if ($this->getConf('navbarUseTitleText') === true) { 833ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 834a8eebd82SJames Collins $html .= '<h1 class="mikio-navbar-brand-title-text">' . $conf['title'] . '</h1>'; 8359cff245bSJames Collins if ($this->getConf('navbarUseTaglineText') === true) { 836a8eebd82SJames Collins $html .= '<p class="claim mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</p>'; 837ab45ba71SJames Collins } 838ab45ba71SJames Collins $html .= '</div>'; 839ab45ba71SJames Collins } 8409cff245bSJames Collins }//end if 841ab45ba71SJames Collins $html .= '</a>'; 842660b2c71SJames Collins $html .= '<div class="mikio-navbar-toggle"><span class="icon"></span></div>'; 843ab45ba71SJames Collins 844ab45ba71SJames Collins // Menus 845ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 846ab45ba71SJames Collins 8479cff245bSJames Collins $menus = [$this->getConf('navbarPosLeft', 'none'), $this->getConf('navbarPosMiddle', 'none'), 8489cff245bSJames Collins $this->getConf('navbarPosRight', 'none') 8499cff245bSJames Collins ]; 850a8eebd82SJames Collins foreach ($menus as $menuType) { 851a8eebd82SJames Collins switch ($menuType) { 852a8eebd82SJames Collins case 'custom': 853a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('navbarCustomMenuText', '')); 854a8eebd82SJames Collins break; 855a8eebd82SJames Collins case 'search': 856ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 857ab45ba71SJames Collins $html .= $this->includeSearch(false); 858ab45ba71SJames Collins $html .= '</div>'; 859a8eebd82SJames Collins break; 860a8eebd82SJames Collins case 'dokuwiki': 8619cff245bSJames Collins $html .= $this->includeDWMenu(false); 862a8eebd82SJames Collins break; 863a8eebd82SJames Collins } 864a8eebd82SJames Collins } 865ab45ba71SJames Collins 866ab45ba71SJames Collins $html .= '</div>'; 867f8039bf2SJames Collins $html .= '</div>'; 868ab45ba71SJames Collins $html .= '</nav>'; 869ab45ba71SJames Collins 870a8eebd82SJames Collins // Sub Navbar 8719cff245bSJames Collins if ($showSub === true) { 8729cff245bSJames Collins $sub = $this->includePage('submenu', false); 8733a385f2cSJames Collins if (empty($sub) === false) { 8749cff245bSJames Collins $html .= '<nav class="mikio-navbar mikio-sub-navbar">' . $sub . '</nav>'; 8759cff245bSJames Collins } 876ab45ba71SJames Collins } 877ab45ba71SJames Collins 8789cff245bSJames Collins if ($print === true) { 8799cff245bSJames Collins echo $html; 8809cff245bSJames Collins } 881ab45ba71SJames Collins return $html; 882ab45ba71SJames Collins } 883ab45ba71SJames Collins 884ab45ba71SJames Collins 885a8eebd82SJames Collins /** 886a8eebd82SJames Collins * Is there a sidebar 887a8eebd82SJames Collins * 8889cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 889a8eebd82SJames Collins * @return boolean if sidebar exists 890a8eebd82SJames Collins */ 8919cff245bSJames Collins public function sidebarExists(string $prefix = '') 89210b40067Snomadjimbob { 893a8eebd82SJames Collins global $conf; 894a8eebd82SJames Collins 8953a385f2cSJames Collins if (strcasecmp($prefix, 'left') === 0) { 8969cff245bSJames Collins $prefix = ''; 8979cff245bSJames Collins } 898a8eebd82SJames Collins 899a8eebd82SJames Collins return $this->pageExists($conf['sidebar' . $prefix]); 900a8eebd82SJames Collins } 901a8eebd82SJames Collins 902a8eebd82SJames Collins 903a8eebd82SJames Collins /** 904ab45ba71SJames Collins * Print or return the sidebar content 905ab45ba71SJames Collins * 9069cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 9079cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 9089cff245bSJames Collins * @param boolean $parse Parse the content. 909ab45ba71SJames Collins * @return string generated content 910ab45ba71SJames Collins */ 9119cff245bSJames Collins public function includeSidebar(string $prefix = '', bool $print = true, bool $parse = true) 91210b40067Snomadjimbob { 913ab45ba71SJames Collins global $conf, $ID; 914ab45ba71SJames Collins 915ab45ba71SJames Collins $html = ''; 916ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 917ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 918ab45ba71SJames Collins 9193a385f2cSJames Collins if (empty($confPrefix) === true) { 9209cff245bSJames Collins $confPrefix = 'Left'; 9219cff245bSJames Collins } 9221cdedf28SJames Collins if (strcasecmp($prefix, 'left') === 0) { 9239cff245bSJames Collins $prefix = ''; 9249cff245bSJames Collins } 925ab45ba71SJames Collins 9261cdedf28SJames Collins $sidebarPage = empty($conf[$prefix . 'sidebar']) === true ? $prefix . 'sidebar' : $conf[$prefix . 'sidebar']; 927ab45ba71SJames Collins 9289cff245bSJames Collins if ( 9299cff245bSJames Collins $this->getConf('sidebarShow' . $confPrefix) === true && page_findnearest($sidebarPage) !== false && 9301cdedf28SJames Collins p_get_metadata($ID, 'nosidebar', false) === null 9319cff245bSJames Collins ) { 9329cff245bSJames Collins $content = $this->includePage($sidebarPage . 'header', false); 9333a385f2cSJames Collins if (empty($content) === false) { 9349cff245bSJames Collins $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 9359cff245bSJames Collins } 936ab45ba71SJames Collins 9373a385f2cSJames Collins if (empty($prefix) === true) { 9389cff245bSJames Collins $rows = [$this->getConf('sidebarLeftRow1'), $this->getConf('sidebarLeftRow2'), 9399cff245bSJames Collins $this->getConf('sidebarLeftRow3'), $this->getConf('sidebarLeftRow4') 9409cff245bSJames Collins ]; 941ab45ba71SJames Collins 942a8eebd82SJames Collins foreach ($rows as $row) { 943a8eebd82SJames Collins switch ($row) { 944a8eebd82SJames Collins case 'search': 9459cff245bSJames Collins $html .= $this->includeSearch(false); 946a8eebd82SJames Collins break; 947a8eebd82SJames Collins case 'logged in user': 9489cff245bSJames Collins $html .= $this->includeLoggedIn(false); 949a8eebd82SJames Collins break; 950a8eebd82SJames Collins case 'content': 9519cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9523a385f2cSJames Collins if (empty($content) === false) { 9539cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9549cff245bSJames Collins } 955a8eebd82SJames Collins break; 956a8eebd82SJames Collins case 'tags': 957a8eebd82SJames Collins $html .= '<div class="mikio-tags"></div>'; 958a8eebd82SJames Collins } 959a8eebd82SJames Collins } 960a8eebd82SJames Collins } else { 9619cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9623a385f2cSJames Collins if (empty($content) === false) { 9639cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9649cff245bSJames Collins } 9659cff245bSJames Collins }//end if 9669cff245bSJames Collins 9679cff245bSJames Collins $content = $this->includePage($sidebarPage . 'footer', false); 9683a385f2cSJames Collins if (empty($content) === false) { 9699cff245bSJames Collins $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 9709cff245bSJames Collins } 9719cff245bSJames Collins }//end if 9729cff245bSJames Collins 9733a385f2cSJames Collins if (empty($html) === true) { 9743a385f2cSJames Collins if (empty($prefix) === true && $this->getConf('sidebarAlwaysShowLeft') === true) { 9759cff245bSJames Collins $html = ' '; 9769cff245bSJames Collins } 9779cff245bSJames Collins if ($this->getConf('sidebarAlwaysShow' . ucfirst($prefix)) === true) { 9789cff245bSJames Collins $html = ' '; 9799cff245bSJames Collins } 980a8eebd82SJames Collins } 981ab45ba71SJames Collins 9823a385f2cSJames Collins if (empty($html) === false) { 9831cdedf28SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . (empty($prefix) === true ? 'left' : $prefix) . 9849cff245bSJames Collins '"><a class="mikio-sidebar-toggle' . 9859cff245bSJames Collins ($this->getConf('sidebarMobileDefaultCollapse') === true ? ' closed' : '') . '" href="#">' . 9869cff245bSJames Collins tpl_getLang('sidebar-title') . ' <span class="icon"></span></a><div class="mikio-sidebar-collapse">' . 9879cff245bSJames Collins $html . '</div></aside>'; 988ab45ba71SJames Collins } 989ab45ba71SJames Collins 9909cff245bSJames Collins if ($parse === true) { 9919cff245bSJames Collins $html = $this->includeIcons($html); 9923a04a100SJames Collins } 9939cff245bSJames Collins if ($print === true) { 9949cff245bSJames Collins echo $html; 995ab45ba71SJames Collins } 996ab45ba71SJames Collins return $html; 997ab45ba71SJames Collins } 998ab45ba71SJames Collins 999ab45ba71SJames Collins 1000a8eebd82SJames Collins /** 1001ab45ba71SJames Collins * Print or return the page tools content 1002ab45ba71SJames Collins * 10039cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 10049cff245bSJames Collins * @param boolean $includeId Include the dw__pagetools id in the element. 1005ab45ba71SJames Collins * @return string generated content 1006ab45ba71SJames Collins */ 10079cff245bSJames Collins public function includePageTools(bool $print = true, bool $includeId = false) 100810b40067Snomadjimbob { 10091293ce10SJames Collins global $USERINFO; 10101293ce10SJames Collins 10119cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 1012ab45ba71SJames Collins $html = ''; 1013ab45ba71SJames Collins 10149cff245bSJames Collins $html .= '<nav' . ($includeId === true ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 1015b9c0582bSJames Collins $html .= '<ul class="tools">'; 1016ab45ba71SJames Collins 1017ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 1018ab45ba71SJames Collins foreach ($items as $item) { 10199cff245bSJames Collins $classes = []; 10203fd763a0SJames Collins $classes[] = $item->getType(); 10213fd763a0SJames Collins $attr = $item->getLinkAttributes(); 10223fd763a0SJames Collins 10239cff245bSJames Collins if (empty($attr['class']) === false) { 10243fd763a0SJames Collins $classes = array_merge($classes, explode(' ', $attr['class'])); 1025ab45ba71SJames Collins } 1026ab45ba71SJames Collins 10273fd763a0SJames Collins $classes = array_unique($classes); 10283fd763a0SJames Collins 10291293ce10SJames Collins $showItem = $this->getConf('pageToolsShow' . ucfirst($item->getType())); 10309cff245bSJames Collins if ( 10313a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 10323a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 10333a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === true)) 10349cff245bSJames Collins ) { 10353fd763a0SJames Collins $html .= '<li class="' . implode(' ', $classes) . '">'; 10369cff245bSJames Collins $html .= '<a href="' . $item->getLink() . '" class="' . $item->getType() . '" title="' . 10379cff245bSJames Collins $item->getTitle() . '"><div class="icon">' . inlineSVG($item->getSvg()) . 10389cff245bSJames Collins '</div><span class="a11y">' . $item->getLabel() . '</span></a>'; 10393fd763a0SJames Collins $html .= '</li>'; 10403fd763a0SJames Collins } 10419cff245bSJames Collins }//end foreach 10423fd763a0SJames Collins 10433fd763a0SJames Collins $html .= '</ul>'; 1044ab45ba71SJames Collins $html .= '</nav>'; 1045ab45ba71SJames Collins 10469cff245bSJames Collins if ($print === true) { 10479cff245bSJames Collins echo $html; 10489cff245bSJames Collins } 1049ab45ba71SJames Collins return $html; 1050ab45ba71SJames Collins } 1051ab45ba71SJames Collins 1052ab45ba71SJames Collins 1053a8eebd82SJames Collins /** 1054a8eebd82SJames Collins * Print or return the search bar 1055a8eebd82SJames Collins * 10569cff245bSJames Collins * @param boolean $print Print content. 1057a8eebd82SJames Collins * @return string contents of the search bar 1058a8eebd82SJames Collins */ 10599cff245bSJames Collins public function includeSearch(bool $print = true) 106010b40067Snomadjimbob { 10619cff245bSJames Collins global $lang, $ID, $ACT, $QUERY; 1062ab45ba71SJames Collins $html = ''; 1063ab45ba71SJames Collins 10649cff245bSJames Collins $html .= '<form class="mikio-search search" action="' . wl() . 10659cff245bSJames Collins '" accept-charset="utf-8" method="get" role="search">'; 1066a8eebd82SJames Collins $html .= '<input type="hidden" name="do" value="search">'; 1067a8eebd82SJames Collins $html .= '<input type="hidden" name="id" value="' . $ID . '">'; 1068c1cb9f15SChris MacMackin $html .= '<input name="q" '; 10699cff245bSJames Collins if ($this->getConf('searchUseTypeahead') === true) { 1070c1cb9f15SChris MacMackin $html .= 'class="search_typeahead" '; 1071c1cb9f15SChris MacMackin } 10729cff245bSJames Collins $html .= 'autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . 10733a385f2cSJames Collins ((strcasecmp($ACT, 'search') === 0) ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 1074a8eebd82SJames Collins $html .= '<button type="submit" title="' . $lang['btn_search'] . '">'; 10753a385f2cSJames Collins if (strcasecmp($this->getConf('searchButton'), 'icon') === 0) { 1076a8eebd82SJames Collins $html .= $this->mikioInlineIcon('search'); 1077ab45ba71SJames Collins } else { 1078ab45ba71SJames Collins $html .= $lang['btn_search']; 1079ab45ba71SJames Collins } 1080ab45ba71SJames Collins $html .= '</button>'; 1081ab45ba71SJames Collins $html .= '</form>'; 1082ab45ba71SJames Collins 10839cff245bSJames Collins if ($print === true) { 10849cff245bSJames Collins echo $html; 10859cff245bSJames Collins } 1086ab45ba71SJames Collins return $html; 1087ab45ba71SJames Collins } 1088ab45ba71SJames Collins 1089ab45ba71SJames Collins 1090a8eebd82SJames Collins /** 1091a8eebd82SJames Collins * Print or return content 1092a8eebd82SJames Collins * 10939cff245bSJames Collins * @param boolean $print Print content. 1094a8eebd82SJames Collins * @return string contents 1095a8eebd82SJames Collins */ 10969cff245bSJames Collins public function includeContent(bool $print = true) 109710b40067Snomadjimbob { 1098ab45ba71SJames Collins ob_start(); 10999cff245bSJames Collins tpl_content(false); 1100ab45ba71SJames Collins $html = ob_get_contents(); 1101ab45ba71SJames Collins ob_end_clean(); 1102ab45ba71SJames Collins 1103ab45ba71SJames Collins $html = $this->includeIcons($html); 1104ab45ba71SJames Collins $html = $this->parseContent($html); 1105ab45ba71SJames Collins 1106ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 1107ab45ba71SJames Collins 11089cff245bSJames Collins if ($this->getConf('heroTitle') === false) { 11099cff245bSJames Collins $html = '<div class="mikio-tags"></div>' . $html; 11109cff245bSJames Collins } 1111a8eebd82SJames Collins 1112a8eebd82SJames Collins $html = '<div class="mikio-article-content">' . $html . '</div>'; 1113a8eebd82SJames Collins 11149cff245bSJames Collins if ($print === true) { 11159cff245bSJames Collins echo $html; 11169cff245bSJames Collins } 1117ab45ba71SJames Collins return $html; 1118ab45ba71SJames Collins } 1119ab45ba71SJames Collins 1120a8eebd82SJames Collins /** 1121ab45ba71SJames Collins * Print or return footer 1122ab45ba71SJames Collins * 11239cff245bSJames Collins * @param boolean $print Print footer. 11249cff245bSJames Collins * @return string HTML string containing footer 1125ab45ba71SJames Collins */ 11269cff245bSJames Collins public function includeFooter(bool $print = true) 112710b40067Snomadjimbob { 1128ab45ba71SJames Collins global $ACT; 1129ab45ba71SJames Collins 1130ab45ba71SJames Collins $html = ''; 1131ab45ba71SJames Collins 1132ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 11339cff245bSJames Collins $html .= '<div class="doc">' . tpl_pageinfo(true) . '</div>'; 11349cff245bSJames Collins $html .= $this->includePage('footer', false); 1135ab45ba71SJames Collins 1136a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('footerCustomMenuText')); 1137ab45ba71SJames Collins 11389cff245bSJames Collins if ($this->getConf('footerSearch') === true) { 1139ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 11409cff245bSJames Collins $html .= $this->includeSearch(false); 1141ab45ba71SJames Collins $html .= '</div>'; 1142ab45ba71SJames Collins } 1143ab45ba71SJames Collins 1144a8eebd82SJames Collins $showPageTools = $this->getConf('pageToolsFooter'); 11459cff245bSJames Collins if ( 11463a385f2cSJames Collins strcasecmp($ACT, 'show') === 0 && (strcasecmp($showPageTools, 'always') === 0 || 11473a385f2cSJames Collins $this->userCanEdit() === true && strcasecmp($showPageTools, 'page editors') === 0) 11489cff245bSJames Collins ) { 11499cff245bSJames Collins $html .= $this->includePageTools(false); 11509cff245bSJames Collins } 1151ab45ba71SJames Collins 11529cff245bSJames Collins $meta['licenseType'] = ['multichoice', '_choices' => ['none', 'badge', 'button']]; 11539cff245bSJames Collins $meta['licenseImageOnly'] = ['onoff']; 1154ab45ba71SJames Collins 1155ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 11569cff245bSJames Collins if ($licenseType !== 'none') { 11579cff245bSJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), true, true); 1158ab45ba71SJames Collins } 1159ab45ba71SJames Collins 1160ab45ba71SJames Collins $html .= '</footer>'; 1161ab45ba71SJames Collins 11629cff245bSJames Collins if ($print === true) { 11639cff245bSJames Collins echo $html; 11649cff245bSJames Collins } 1165ab45ba71SJames Collins return $html; 1166ab45ba71SJames Collins } 1167ab45ba71SJames Collins 1168ab45ba71SJames Collins 1169a8eebd82SJames Collins /** 1170ab45ba71SJames Collins * Print or return breadcrumb trail 1171ab45ba71SJames Collins * 11729cff245bSJames Collins * @param boolean $print Print out trail. 11739cff245bSJames Collins * @param boolean $parse Parse trail before printing. 11749cff245bSJames Collins * @return string HTML string containing breadcrumbs 1175ab45ba71SJames Collins */ 11769cff245bSJames Collins public function includeBreadcrumbs(bool $print = true, bool $parse = true) 117710b40067Snomadjimbob { 1178a8eebd82SJames Collins global $conf, $ID, $lang, $ACT; 1179a8eebd82SJames Collins 11803a385f2cSJames Collins if ( 11813a385f2cSJames Collins $this->getConf('breadcrumbHideHome') === true && strcasecmp($ID, 'start') === 0 && 118295372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['breadcrumbs'] === 0 11833a385f2cSJames Collins ) { 11849cff245bSJames Collins return ''; 11859cff245bSJames Collins } 1186ab45ba71SJames Collins 1187ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 1188f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 11893a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 119095372bffSJames Collins if ($conf['breadcrumbs'] !== 0) { 11919cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === false && $this->getConf('breadcrumbSep') === false) { 1192ab45ba71SJames Collins ob_start(); 119375adba86SJames Collins tpl_breadcrumbs(); 1194ab45ba71SJames Collins $html .= ob_get_contents(); 1195ab45ba71SJames Collins ob_end_clean(); 1196ab45ba71SJames Collins } else { 1197ab45ba71SJames Collins $sep = '•'; 1198ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 1199ab45ba71SJames Collins 12009cff245bSJames Collins if ($this->getConf('breadcrumbSep') === true) { 1201ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 12029cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-sep', false); 1203ab45ba71SJames Collins 12049cff245bSJames Collins if ($img !== false) { 1205ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1206ab45ba71SJames Collins } 120747161538SJames Collins } 120847161538SJames Collins 12099cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === true) { 1210ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 12119cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-prefix', false); 1212ab45ba71SJames Collins 12139cff245bSJames Collins if ($img !== false) { 1214ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 1215ab45ba71SJames Collins } 1216ab45ba71SJames Collins } 1217ab45ba71SJames Collins 1218ab45ba71SJames Collins $crumbs = breadcrumbs(); 1219ab45ba71SJames Collins 1220ab45ba71SJames Collins $html .= '<ul>'; 12213a385f2cSJames Collins if (empty($prefix) === false) { 12229cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 12239cff245bSJames Collins } 1224ab45ba71SJames Collins 1225ab45ba71SJames Collins $last = count($crumbs); 1226ab45ba71SJames Collins $i = 0; 1227ab45ba71SJames Collins foreach ($crumbs as $id => $name) { 1228ab45ba71SJames Collins $i++; 122995372bffSJames Collins if ($i !== 1) { 1230ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 123195372bffSJames Collins } 12329cff245bSJames Collins $html .= '<li' . ($i === $last ? ' class="curid"' : '') . '>'; 12339cff245bSJames Collins $html .= tpl_pagelink($id, null, true); 1234ab45ba71SJames Collins $html .= '</li>'; 1235ab45ba71SJames Collins } 1236ab45ba71SJames Collins 1237ab45ba71SJames Collins $html .= '</ul>'; 12389cff245bSJames Collins }//end if 12399cff245bSJames Collins }//end if 12409cff245bSJames Collins }//end if 12413d11a778SJames Collins 12423d11a778SJames Collins $html .= '</div>'; 12433d11a778SJames Collins $html .= '</div>'; 12443d11a778SJames Collins 12459cff245bSJames Collins if ($parse === true) { 12469cff245bSJames Collins $html = $this->includeIcons($html); 12479cff245bSJames Collins } 12489cff245bSJames Collins if ($print === true) { 12499cff245bSJames Collins echo $html; 12509cff245bSJames Collins } 12513d11a778SJames Collins return $html; 12523d11a778SJames Collins } 12533d11a778SJames Collins 12543d11a778SJames Collins /** 12553d11a778SJames Collins * Print or return you are here trail 12563d11a778SJames Collins * 12579cff245bSJames Collins * @param boolean $print Print out trail. 12589cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12599cff245bSJames Collins * @return string HTML string containing breadcrumbs 12603d11a778SJames Collins */ 12619cff245bSJames Collins public function includeYouAreHere(bool $print = true, bool $parse = true) 12623d11a778SJames Collins { 12633d11a778SJames Collins global $conf, $ID, $lang, $ACT; 12643d11a778SJames Collins 12653a385f2cSJames Collins if ( 12663a385f2cSJames Collins $this->getConf('youarehereHideHome') === true && strcasecmp($ID, 'start') === 0 && 126795372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['youarehere'] === 0 12683a385f2cSJames Collins ) { 12699cff245bSJames Collins return ''; 12709cff245bSJames Collins } 12713d11a778SJames Collins 12723d11a778SJames Collins $html = '<div class="mikio-youarehere">'; 12733d11a778SJames Collins $html .= '<div class="mikio-container">'; 12743a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 127595372bffSJames Collins if ($conf['youarehere'] !== 0) { 12769cff245bSJames Collins if ($this->getConf('youareherePrefix') === false && $this->getConf('youarehereSep') === false) { 127795372bffSJames Collins $html .= '<div class="mikio-bcdw">'; 1278ab45ba71SJames Collins ob_start(); 127975adba86SJames Collins tpl_youarehere(); 1280ab45ba71SJames Collins $html .= ob_get_contents(); 1281ab45ba71SJames Collins ob_end_clean(); 128295372bffSJames Collins $html .= '</div>'; 1283ab45ba71SJames Collins } else { 1284ab45ba71SJames Collins $sep = ' » '; 1285ab45ba71SJames Collins $prefix = $lang['youarehere']; 1286ab45ba71SJames Collins 12879cff245bSJames Collins if ($this->getConf('youarehereSep') === true) { 12883d11a778SJames Collins $sep = $this->getConf('youarehereSepText'); 12899cff245bSJames Collins $img = $this->getMediaFile('youarehere-sep', false); 1290ab45ba71SJames Collins 12919cff245bSJames Collins if ($img !== false) { 1292ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1293ab45ba71SJames Collins } 129475adba86SJames Collins } 129575adba86SJames Collins 12969cff245bSJames Collins if ($this->getConf('youareherePrefix') === true) { 12973d11a778SJames Collins $prefix = $this->getConf('youareherePrefixText'); 12989cff245bSJames Collins $img = $this->getMediaFile('youarehere-prefix', false); 1299ab45ba71SJames Collins 13009cff245bSJames Collins if ($img !== false) { 1301ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 130275adba86SJames Collins } 130347161538SJames Collins } 130447161538SJames Collins 1305ab45ba71SJames Collins $html .= '<ul>'; 13063a385f2cSJames Collins if (empty($prefix) === false) { 13079cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 13089cff245bSJames Collins } 13099cff245bSJames Collins $html .= '<li>' . tpl_pagelink(':' . $conf['start'], null, true) . '</li>'; 1310ab45ba71SJames Collins 1311ab45ba71SJames Collins $parts = explode(':', $ID); 1312ab45ba71SJames Collins $count = count($parts); 1313ab45ba71SJames Collins 1314ab45ba71SJames Collins $part = ''; 13159cff245bSJames Collins for ($i = 0; $i < ($count - 1); $i++) { 1316ab45ba71SJames Collins $part .= $parts[$i] . ':'; 1317ab45ba71SJames Collins $page = $part; 13189cff245bSJames Collins if ($page === $conf['start']) { 13199cff245bSJames Collins continue; 13209cff245bSJames Collins } 1321ab45ba71SJames Collins 1322ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13239cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1324ab45ba71SJames Collins } 1325ab45ba71SJames Collins 1326ab45ba71SJames Collins resolve_pageid('', $page, $exists); 13279cff245bSJames Collins if ((isset($page) === true && $page === $part . $parts[$i]) === false) { 1328ab45ba71SJames Collins $page = $part . $parts[$i]; 13299cff245bSJames Collins if ($page !== $conf['start']) { 1330ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13319cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1332ab45ba71SJames Collins } 1333ab45ba71SJames Collins } 1334ab45ba71SJames Collins 1335ab45ba71SJames Collins $html .= '</ul>'; 13369cff245bSJames Collins }//end if 13379cff245bSJames Collins }//end if 1338ab45ba71SJames Collins 13393d11a778SJames Collins $showLast = $this->getConf('youarehereShowLast'); 13409cff245bSJames Collins if ($showLast !== 0) { 1341a8eebd82SJames Collins preg_match_all('/(<li[^>]*>.+?<\/li>)/', $html, $matches); 13429cff245bSJames Collins if (count($matches) > 0 && count($matches[0]) > (($showLast * 2) + 2)) { 1343a8eebd82SJames Collins $count = count($matches[0]); 1344a8eebd82SJames Collins $list = ''; 1345a8eebd82SJames Collins 1346a8eebd82SJames Collins // Show Home 1347a8eebd82SJames Collins $list .= $matches[0][0] . $matches[0][1]; 1348a8eebd82SJames Collins 1349a8eebd82SJames Collins $list .= '<li>...</li>'; 13509cff245bSJames Collins for ($i = ($count - ($showLast * 2)); $i <= $count; $i++) { 1351a8eebd82SJames Collins $list .= $matches[0][$i]; 1352a8eebd82SJames Collins } 1353a8eebd82SJames Collins 1354a8eebd82SJames Collins $html = preg_replace('/<ul>.*<\/ul>/', '<ul>' . $list . '</ul>', $html); 1355a8eebd82SJames Collins } 1356a8eebd82SJames Collins } 1357a8eebd82SJames Collins 13583d11a778SJames Collins switch ($this->getConf('youarehereHome')) { 1359a8eebd82SJames Collins case 'none': 1360a8eebd82SJames Collins $html = preg_replace('/<li[^>]*>.+?<\/li>/', '', $html, 2); 1361a8eebd82SJames Collins break; 1362a8eebd82SJames Collins case 'home': 1363a8eebd82SJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . tpl_getlang('home') . '$3', $html, 1); 1364a8eebd82SJames Collins break; 1365a8eebd82SJames Collins case 'icon': 13669cff245bSJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . 13679cff245bSJames Collins $this->mikioInlineIcon('home') . '$3', $html, 1); 1368a8eebd82SJames Collins break; 1369a8eebd82SJames Collins } 1370a8eebd82SJames Collins } else { 1371a8eebd82SJames Collins $html .= '≪ '; 13729cff245bSJames Collins if (isset($_GET['page']) === true) { 13739cff245bSJames Collins $html .= '<a href="' . wl($ID, ['do' => $ACT]) . '">Back</a> / '; 1374a8eebd82SJames Collins } 13754057121fSJames Collins $html .= '<a href="' . wl($ID) . '">View Page</a>'; 13769cff245bSJames Collins }//end if 13779cff245bSJames Collins 13789cff245bSJames Collins $html .= '</div>'; 13799cff245bSJames Collins $html .= '</div>'; 13809cff245bSJames Collins 13819cff245bSJames Collins if ($parse === true) { 13829cff245bSJames Collins $html = $this->includeIcons($html); 1383a8eebd82SJames Collins } 13849cff245bSJames Collins if ($print === true) { 13859cff245bSJames Collins echo $html; 13869cff245bSJames Collins } 1387ab45ba71SJames Collins return $html; 1388ab45ba71SJames Collins } 1389ab45ba71SJames Collins 13901785fc73SJames Collins /** 13911785fc73SJames Collins * Get Page Title 13929cff245bSJames Collins * 13939cff245bSJames Collins * @return string page title 13941785fc73SJames Collins */ 139510b40067Snomadjimbob public function parsePageTitle() 139610b40067Snomadjimbob { 13972060e56cSJames Collins global $ID; 13982060e56cSJames Collins 13992060e56cSJames Collins $title = p_get_first_heading($ID); 14009cff245bSJames Collins if (strlen($title) <= 0) { 14019cff245bSJames Collins $title = tpl_pagetitle(null, true); 14029cff245bSJames Collins } 14031785fc73SJames Collins $title = $this->includeIcons($title); 14041785fc73SJames Collins 14051785fc73SJames Collins return $title; 14061785fc73SJames Collins } 14071785fc73SJames Collins 1408ab45ba71SJames Collins 140975adba86SJames Collins /** 1410a8eebd82SJames Collins * Print or return hero block 141175adba86SJames Collins * 14129cff245bSJames Collins * @param boolean $print Print content. 1413a8eebd82SJames Collins * @return string contents of hero 141475adba86SJames Collins */ 14159cff245bSJames Collins public function includeHero(bool $print = true) 141610b40067Snomadjimbob { 1417a8eebd82SJames Collins $html = ''; 141847161538SJames Collins 14199cff245bSJames Collins if ($this->getConf('heroTitle') === true) { 1420a8eebd82SJames Collins $html .= '<div class="mikio-hero">'; 1421f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 1422a8eebd82SJames Collins $html .= '<div class="mikio-hero-text">'; 14233a385f2cSJames Collins if (strcasecmp($this->getConf('youareherePosition'), 'hero') === 0) { 14249cff245bSJames Collins $html .= $this->includeYouAreHere(false); 14259cff245bSJames Collins } 14263a385f2cSJames Collins if (strcasecmp($this->getConf('breadcrumbPosition'), 'hero') === 0) { 14279cff245bSJames Collins $html .= $this->includeBreadcrumbs(false); 14289cff245bSJames Collins } 1429ab45ba71SJames Collins 1430a8eebd82SJames Collins $html .= '<h1 class="mikio-hero-title">'; 14311785fc73SJames Collins $html .= $this->parsePageTitle(); // No idea why this requires a blank space afterwards to work? 1432a8eebd82SJames Collins $html .= '</h1>'; 1433a8eebd82SJames Collins $html .= '<h2 class="mikio-hero-subtitle"></h2>'; 1434a8eebd82SJames Collins $html .= '</div>'; 143547161538SJames Collins 14369cff245bSJames Collins $hero_image = $this->getMediaFile('hero', true, $this->getConf('heroImagePropagation', true)); 1437a8eebd82SJames Collins $hero_image_resize_class = ''; 14383a385f2cSJames Collins if (empty($hero_image) === false) { 1439a8eebd82SJames Collins $hero_image = ' style="background-image:url(\'' . $hero_image . '\');"'; 1440a8eebd82SJames Collins $hero_image_resize_class = ' mikio-hero-image-resize'; 144147161538SJames Collins } 1442a8eebd82SJames Collins 14439cff245bSJames Collins $html .= '<div class="mikio-hero-image' . $hero_image_resize_class . '"' . $hero_image . 14449cff245bSJames Collins '><div class="mikio-tags"></div></div>'; 1445a8eebd82SJames Collins 1446a8eebd82SJames Collins $html .= '</div>'; 1447f8039bf2SJames Collins $html .= '</div>'; 14489cff245bSJames Collins }//end if 14499cff245bSJames Collins 14509cff245bSJames Collins if ($print === true) { 14519cff245bSJames Collins echo $html; 145275adba86SJames Collins } 1453a8eebd82SJames Collins 1454a8eebd82SJames Collins return $html; 145575adba86SJames Collins } 145675adba86SJames Collins 145775adba86SJames Collins 145875adba86SJames Collins /** 1459a8eebd82SJames Collins * Print or return out TOC 146075adba86SJames Collins * 14619cff245bSJames Collins * @param boolean $print Print TOC. 14629cff245bSJames Collins * @param boolean $parse Parse icons. 1463a8eebd82SJames Collins * @return string contents of TOC 146475adba86SJames Collins */ 14659cff245bSJames Collins public function includeTOC(bool $print = true, bool $parse = true) 146610b40067Snomadjimbob { 1467ab45ba71SJames Collins $html = ''; 14682b4583abSJames Collins 1469ab45ba71SJames Collins $tocHtml = tpl_toc(true); 1470ab45ba71SJames Collins 14713a385f2cSJames Collins if (empty($tocHtml) === false) { 1472f65a4e5eSJames Collins $tocHtml = preg_replace( 1473f65a4e5eSJames Collins '/(<h3.+?toggle.+?>)(.+?)<\/h3>/', 1474f65a4e5eSJames Collins '$1' . 1475f65a4e5eSJames Collins $this->mikioInlineIcon('hamburger', 'hamburger') . '$2' . 1476f65a4e5eSJames Collins $this->mikioInlineIcon('down-arrow', 'down-arrow') . '</h3>', 1477f65a4e5eSJames Collins $tocHtml 1478f65a4e5eSJames Collins ); 1479ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 1480a8eebd82SJames Collins $tocHtml = preg_replace('/<ul.*>\s*<\/ul>\s*/', '', $tocHtml); 1481ab45ba71SJames Collins 1482ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 1483ab45ba71SJames Collins $html .= $tocHtml; 1484ab45ba71SJames Collins $html .= '</div>'; 14852b4583abSJames Collins } 14862b4583abSJames Collins 14879cff245bSJames Collins if ($parse === true) { 14889cff245bSJames Collins $html = $this->includeIcons($html); 14899cff245bSJames Collins } 14909cff245bSJames Collins 14919cff245bSJames Collins if ($print === true) { 1492ab45ba71SJames Collins echo $html; 1493ab45ba71SJames Collins } 1494ab45ba71SJames Collins 14959cff245bSJames Collins return $html; 14969cff245bSJames Collins } 14979cff245bSJames Collins 1498ab45ba71SJames Collins 1499a8eebd82SJames Collins /** 1500ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 1501ab45ba71SJames Collins * 15029cff245bSJames Collins * @param string $str Content to parse. 1503ab45ba71SJames Collins * @return string parsed string 1504ab45ba71SJames Collins */ 15059cff245bSJames Collins public function includeIcons(string $str) 150610b40067Snomadjimbob { 1507ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 1508ab45ba71SJames Collins 1509ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 15103a385f2cSJames Collins if (empty($iconTag) === true) { 15119cff245bSJames Collins return $str; 15129cff245bSJames Collins } 1513ab45ba71SJames Collins 15149cff245bSJames Collins if ( 15159cff245bSJames Collins in_array($ACT, ['show', 'showtag', 'revisions', 'index', 'preview']) === true || 15163a385f2cSJames Collins strcasecmp($ACT, 'admin') === 0 && count($MIKIO_ICONS) > 0 15179cff245bSJames Collins ) { 1518a2005a27SJames Collins $content = $str; 1519a2005a27SJames Collins $preview = null; 1520a2005a27SJames Collins 15213a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15229cff245bSJames Collins $html = new \simple_html_dom(); 1523a2005a27SJames Collins $html->stripRNAttrValues = false; 1524a2005a27SJames Collins $html->load($str, true, false); 1525a2005a27SJames Collins 1526a2005a27SJames Collins $preview = $html->find('div.preview'); 15279cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1528a2005a27SJames Collins $content = $preview[0]->innertext; 1529a2005a27SJames Collins } 1530a2005a27SJames Collins } 1531a2005a27SJames Collins 15321785fc73SJames Collins $page_regex = '/(.*)/'; 15339cff245bSJames Collins if (stripos($str, '<pre') !== false) { 15341785fc73SJames Collins $page_regex = '/<(?!pre|\/).*?>(.*)[^<]*/'; 15351785fc73SJames Collins } 15361785fc73SJames Collins 15371785fc73SJames Collins $content = preg_replace_callback($page_regex, function ($icons) { 1538a2005a27SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 1539a2005a27SJames Collins 154010b40067Snomadjimbob return preg_replace_callback( 154110b40067Snomadjimbob '/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 1542ab45ba71SJames Collins function ($matches) { 1543ab45ba71SJames Collins global $MIKIO_ICONS; 1544ab45ba71SJames Collins 1545ab45ba71SJames Collins $s = $matches[0]; 1546ab45ba71SJames Collins 1547ab45ba71SJames Collins if (count($MIKIO_ICONS) > 0) { 1548ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 1549ab45ba71SJames Collins 1550ab45ba71SJames Collins if (count($matches) > 1) { 1551ab45ba71SJames Collins $e = explode(' ', $matches[1]); 1552ab45ba71SJames Collins 1553ab45ba71SJames Collins if (count($e) > 1) { 1554ab45ba71SJames Collins foreach ($MIKIO_ICONS as $iconItem) { 15559cff245bSJames Collins if (strcasecmp($iconItem['name'], $e[0]) === 0) { 1556ab45ba71SJames Collins $icon = $iconItem; 1557ab45ba71SJames Collins 1558ab45ba71SJames Collins $s = $icon['insert']; 1559ab45ba71SJames Collins for ($i = 1; $i < 9; $i++) { 15601cdedf28SJames Collins if (count($e) < $i || empty($e[$i]) === true) { 15619cff245bSJames Collins if (isset($icon['$' . $i]) === true) { 1562ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$' . $i], $s); 1563ab45ba71SJames Collins } 1564ab45ba71SJames Collins } else { 1565ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 1566ab45ba71SJames Collins } 1567ab45ba71SJames Collins } 1568ab45ba71SJames Collins 1569ab45ba71SJames Collins $dir = ''; 15709cff245bSJames Collins if (isset($icon['dir']) === true) { 15719cff245bSJames Collins $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 15729cff245bSJames Collins } 1573ab45ba71SJames Collins 1574ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 1575ab45ba71SJames Collins 1576ab45ba71SJames Collins break; 15779cff245bSJames Collins }//end if 15789cff245bSJames Collins }//end foreach 1579ab45ba71SJames Collins } else { 1580ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 15819cff245bSJames Collins }//end if 15829cff245bSJames Collins }//end if 15839cff245bSJames Collins }//end if 158475adba86SJames Collins 1585ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 15869cff245bSJames Collins if ($count === 0) { 1587ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 1588ab45ba71SJames Collins } 1589ab45ba71SJames Collins 1590ab45ba71SJames Collins return $s; 1591ab45ba71SJames Collins }, 159210b40067Snomadjimbob $icons[0] 159310b40067Snomadjimbob ); 1594a2005a27SJames Collins }, $content); 1595a2005a27SJames Collins 15963a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15979cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1598a2005a27SJames Collins $preview[0]->innertext = $content; 1599a2005a27SJames Collins } 1600a2005a27SJames Collins 1601a2005a27SJames Collins $str = $html->save(); 1602a2005a27SJames Collins $html->clear(); 1603a2005a27SJames Collins unset($html); 1604a2005a27SJames Collins } else { 1605a2005a27SJames Collins $str = $content; 1606a2005a27SJames Collins } 16079cff245bSJames Collins }//end if 1608ab45ba71SJames Collins 1609ab45ba71SJames Collins return $str; 1610ab45ba71SJames Collins } 161147161538SJames Collins 1612c165b184SJames Collins /** 1613a8eebd82SJames Collins * Parse HTML for theme 1614c165b184SJames Collins * 16159cff245bSJames Collins * @param string $content HTML content to parse. 1616a8eebd82SJames Collins * @return string Parsed content 1617c165b184SJames Collins */ 16189cff245bSJames Collins public function parseContent(string $content) 161910b40067Snomadjimbob { 1620ab45ba71SJames Collins global $INPUT, $ACT; 1621ab45ba71SJames Collins 1622a8eebd82SJames Collins // Add Mikio Section titles 16233a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 16249cff245bSJames Collins $admin_sections = [ 1625ab45ba71SJames Collins // Section Insert Before Icon 16269cff245bSJames Collins 'navbar' => ['navbarUseTitleIcon', ''], 16279cff245bSJames Collins 'search' => ['searchButton', ''], 16289cff245bSJames Collins 'hero' => ['heroTitle', ''], 16299cff245bSJames Collins 'tags' => ['tagsConsolidate', ''], 16309cff245bSJames Collins 'breadcrumb' => ['breadcrumbHideHome', ''], 16319cff245bSJames Collins 'youarehere' => ['youarehereHideHome', ''], 16329cff245bSJames Collins 'sidebar' => ['sidebarShowLeft', ''], 16339cff245bSJames Collins 'toc' => ['tocFull', ''], 16349cff245bSJames Collins 'pagetools' => ['pageToolsFloating', ''], 16359cff245bSJames Collins 'footer' => ['footerCustomMenuText', ''], 16369cff245bSJames Collins 'license' => ['licenseType', ''], 16379cff245bSJames Collins 'acl' => ['includePageUseACL', ''], 16389cff245bSJames Collins 'sticky' => ['stickyTopHeader', ''], 16399cff245bSJames Collins ]; 1640ab45ba71SJames Collins 1641ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 1642ab45ba71SJames Collins $search = $items[0]; 1643ab45ba71SJames Collins $icon = $items[1]; 1644ab45ba71SJames Collins 164510b40067Snomadjimbob $content = preg_replace( 1646adf52ebbSJames Collins '/<tr(.*)>\s*<td class="label">\s*<span class="outkey">(tpl»mikio»' . $search . ')<\/span>/', 16479cff245bSJames Collins '<tr$1><td class="mikio-config-table-header" colspan="2">' . $this->mikioInlineIcon($icon) . 16489cff245bSJames Collins tpl_getLang('config_' . $section) . 16499cff245bSJames Collins '</td></tr><tr class="default"><td class="label"><span class="outkey">tpl»mikio»' . 16509cff245bSJames Collins $search . '</span>', 165110b40067Snomadjimbob $content 165210b40067Snomadjimbob ); 1653ab45ba71SJames Collins } 1654bb5a3dd1SJames Collins } elseif (strcasecmp($INPUT->str('page'), 'styling') === 0) { 1655ad182e6dSnomadjimbob $mikioPluginMissing = true; 1656ad182e6dSnomadjimbob /* Hide plugin fields if not installed */ 16579ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 1658ad182e6dSnomadjimbob $mikioPluginMissing = false; 1659ad182e6dSnomadjimbob } 1660ad182e6dSnomadjimbob 1661cee81679SJames Collins $style_headers = [ 1662f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__text_'], 1663f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__code_'], 1664f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__control_'], 1665f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__topheader_'], 1666f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__navbar_'], 1667f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__subnavbar_'], 1668f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__tag_background_color_'], 1669f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__breadcrumb_'], 1670f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__hero_'], 1671f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__sidebar_'], 1672f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__content_'], 1673f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__toc_'], 1674f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__pagetools_'], 1675f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__footer_'], 1676f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__table_'], 1677f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__dropdown_'], 1678f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__section_edit_'], 1679f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__tree_'], 1680f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__tab_'], 1681ad182e6dSnomadjimbob ['title' => 'Mikio Plugin', 'starts_with' => '__plugin_', 'heading' => 'h2', 16829ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 16839ffe9161Snomadjimbob ], 1684ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_primary_', 'hidden' => $mikioPluginMissing], 1685ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_secondary_', 16869ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 16879ffe9161Snomadjimbob ], 1688ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_success_', 'hidden' => $mikioPluginMissing], 1689ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_danger_', 'hidden' => $mikioPluginMissing], 1690ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_warning_', 'hidden' => $mikioPluginMissing], 1691ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_info_', 'hidden' => $mikioPluginMissing], 1692ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_light_', 'hidden' => $mikioPluginMissing], 1693ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_dark_', 'hidden' => $mikioPluginMissing], 1694ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_link_', 'hidden' => $mikioPluginMissing], 1695ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_carousel_', 'hidden' => $mikioPluginMissing], 1696ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_steps_', 'hidden' => $mikioPluginMissing], 1697ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_tabgroup_', 'hidden' => $mikioPluginMissing], 1698ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_tooltip_', 'hidden' => $mikioPluginMissing], 1699cee81679SJames Collins ['title' => 'Dark Mode', 'starts_with' => '__darkmode_', 'heading' => 'h2'], 1700f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__darkmode_text_'], 1701f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__darkmode_code_'], 1702f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__darkmode_control_'], 1703f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__darkmode_topheader_'], 1704f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__darkmode_navbar_'], 1705f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__darkmode_subnavbar_'], 1706f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__darkmode_tag_background_color_'], 1707f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__darkmode_breadcrumb_'], 1708f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__darkmode_hero_'], 1709f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__darkmode_sidebar_'], 1710f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__darkmode_content_'], 1711f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__darkmode_toc_'], 1712f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__darkmode_pagetools_'], 1713f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__darkmode_footer_'], 1714f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__darkmode_table_'], 1715f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__darkmode_dropdown_'], 1716f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__darkmode_section_edit_'], 1717f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__darkmode_tree_'], 1718f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__darkmode_tab_'], 1719ad182e6dSnomadjimbob ['title' => 'Mikio Plugin (Dark mode)', 'starts_with' => '__plugin_darkmode_', 'heading' => 'h2', 17209ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17219ffe9161Snomadjimbob ], 1722ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_darkmode_primary_', 17239ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17249ffe9161Snomadjimbob ], 1725ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_darkmode_secondary_', 17269ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17279ffe9161Snomadjimbob ], 1728ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_darkmode_success_', 17299ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17309ffe9161Snomadjimbob ], 1731ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_darkmode_danger_', 17329ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17339ffe9161Snomadjimbob ], 1734ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_darkmode_warning_', 17359ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17369ffe9161Snomadjimbob ], 1737ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_darkmode_info_', 17389ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17399ffe9161Snomadjimbob ], 1740ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_darkmode_light_', 17419ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17429ffe9161Snomadjimbob ], 1743ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_darkmode_dark_', 17449ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17459ffe9161Snomadjimbob ], 1746ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_darkmode_link_', 17479ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17489ffe9161Snomadjimbob ], 1749ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_darkmode_carousel_', 17509ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17519ffe9161Snomadjimbob ], 1752ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_darkmode_steps_', 'hidden' => $mikioPluginMissing], 1753ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_darkmode_tabgroup_', 17549ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17559ffe9161Snomadjimbob ], 1756ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_darkmode_tooltip_', 'hidden' => $mikioPluginMissing], 1757cee81679SJames Collins ]; 1758cee81679SJames Collins 1759cee81679SJames Collins foreach ($style_headers as $header) { 1760cee81679SJames Collins if (array_key_exists('heading', $header) === false) { 1761cee81679SJames Collins $header['heading'] = 'h3'; 1762cee81679SJames Collins } 1763cee81679SJames Collins 1764ad182e6dSnomadjimbob if (array_key_exists('hidden', $header) === false) { 1765ad182e6dSnomadjimbob $header['hidden'] = false; 1766ad182e6dSnomadjimbob } 1767ad182e6dSnomadjimbob 17681244e3ceSJames Collins $content = preg_replace( 1769f65a4e5eSJames Collins '/(<tr>\s*<td>\s*<label for="tpl__' . $header['starts_with'] . '.+?<\/tr>)/s', 17709ffe9161Snomadjimbob '</tbody></table><' . $header['heading'] . ' style="display:' . 17719ffe9161Snomadjimbob ($header['hidden'] === true ? 'none' : 'block') . '">' . 17729ffe9161Snomadjimbob $header['title'] . '</' . $header['heading'] . '> 1773ad182e6dSnomadjimbob <table style="display:' . ($header['hidden'] === true ? 'none' : 'table') . '"><tbody>$1', 17741244e3ceSJames Collins $content, 17751244e3ceSJames Collins 1 17761244e3ceSJames Collins ); 1777cee81679SJames Collins } 1778f65a4e5eSJames Collins 1779f65a4e5eSJames Collins $content = preg_replace('/type="color"/', 'type="text"', $content); 1780bb5a3dd1SJames Collins }//end if 1781ab45ba71SJames Collins 17823a385f2cSJames Collins if (strcasecmp($ACT, 'admin') === 0 && isset($_GET['page']) === false) { 1783a8eebd82SJames Collins $content = preg_replace('/(<ul.*?>.*?)<\/ul>.*?<ul.*?>(.*?<\/ul>)/s', '$1$2', $content); 1784a8eebd82SJames Collins } 1785ab45ba71SJames Collins 1786a8eebd82SJames Collins // Page Revisions - Table Fix 17879cff245bSJames Collins if (strpos($content, 'id="page__revisions"') !== false) { 17889cff245bSJames Collins $content = preg_replace( 17899cff245bSJames Collins '/(<span class="sum">\s.*<\/span>\s.*<span class="user">\s.*<\/span>)/', 17909cff245bSJames Collins '<span>$1</span>', 17919cff245bSJames Collins $content 17929cff245bSJames Collins ); 1793a8eebd82SJames Collins } 1794ab45ba71SJames Collins 17959cff245bSJames Collins $html = new \simple_html_dom(); 1796bc1032d9SJames Collins $html->stripRNAttrValues = false; 1797c165b184SJames Collins $html->load($content, true, false); 1798c165b184SJames Collins 17999cff245bSJames Collins if ($html === false) { 18009cff245bSJames Collins return $content; 18019cff245bSJames Collins } 1802ab45ba71SJames Collins 1803ab45ba71SJames Collins /* Buttons */ 1804ab45ba71SJames Collins foreach ($html->find('#config__manager button') as $node) { 1805ab45ba71SJames Collins $c = explode(' ', $node->class); 18069cff245bSJames Collins if (in_array('mikio-button', $c) === false) { 18079cff245bSJames Collins $c[] = 'mikio-button'; 18089cff245bSJames Collins } 1809ab45ba71SJames Collins $node->class = implode(' ', $c); 1810c165b184SJames Collins } 1811c165b184SJames Collins 1812ab45ba71SJames Collins 1813ab45ba71SJames Collins /* Buttons - Primary */ 1814ab45ba71SJames Collins foreach ($html->find('#config__manager [type=submit]') as $node) { 1815ab45ba71SJames Collins $c = explode(' ', $node->class); 18169cff245bSJames Collins if (in_array('mikio-primary', $c) === false) { 18179cff245bSJames Collins $c[] = 'mikio-primary'; 18189cff245bSJames Collins } 1819ab45ba71SJames Collins $node->class = implode(' ', $c); 1820ab45ba71SJames Collins } 1821ab45ba71SJames Collins 1822a8eebd82SJames Collins /* Hide page title if hero is enabled */ 18239cff245bSJames Collins if ($this->getConf('heroTitle') === true && $ACT !== 'preview') { 18241785fc73SJames Collins $pageTitle = $this->parsePageTitle(); 182547161538SJames Collins 182647161538SJames Collins foreach ($html->find('h1,h2,h3,h4') as $elm) { 18279cff245bSJames Collins if ($elm->innertext === $pageTitle) { 1828a8eebd82SJames Collins // $elm->innertext = ''; 1829a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1830a8eebd82SJames Collins 183147161538SJames Collins break; 183247161538SJames Collins } 183347161538SJames Collins } 183447161538SJames Collins } 1835c165b184SJames Collins 1836a8eebd82SJames Collins /* Hero subtitle */ 18372b4583abSJames Collins foreach ($html->find('p') as $elm) { 18382b4583abSJames Collins $i = stripos($elm->innertext, '~~hero-subtitle'); 18392b4583abSJames Collins if ($i !== false) { 18409cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 18412b4583abSJames Collins if ($j !== false) { 18429cff245bSJames Collins if ($j > ($i + 16)) { 18439cff245bSJames Collins $subtitle = substr($elm->innertext, ($i + 16), ($j - $i - 16)); 1844a8eebd82SJames Collins $this->footerScript['hero-subtitle'] = 'mikio.setHeroSubTitle(\'' . $subtitle . '\')'; 1845a8eebd82SJames Collins 1846a8eebd82SJames Collins // $elm->innertext = substr($elm->innertext, 0, $i + 2) . substr($elm->innertext, $j + 2); 1847a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-subtitle (.+?)~~.*/ui', '', $elm->innertext); 18482b4583abSJames Collins } 18492b4583abSJames Collins 18502b4583abSJames Collins break; 18512b4583abSJames Collins } 18522b4583abSJames Collins } 18532b4583abSJames Collins } 18542b4583abSJames Collins 1855a8eebd82SJames Collins /* Hero image */ 1856a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1857a8eebd82SJames Collins $image = ''; 1858a8eebd82SJames Collins preg_match('/~~hero-image (.+?)~~(?!.?")/ui', $elm->innertext, $matches); 1859a8eebd82SJames Collins if (count($matches) > 0) { 1860a8eebd82SJames Collins preg_match('/<img.*src="(.+?)"/ui', $matches[1], $imageTagMatches); 1861a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1862a8eebd82SJames Collins $image = $imageTagMatches[1]; 1863a8eebd82SJames Collins } else { 1864a8eebd82SJames Collins preg_match('/<a.+?>(.+?)[~<]/ui', $matches[1], $imageTagMatches); 1865a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1866a8eebd82SJames Collins $image = $imageTagMatches[1]; 1867a8eebd82SJames Collins } else { 1868a8eebd82SJames Collins $image = strip_tags($matches[1]); 18699cff245bSJames Collins if (stripos($image, ':') === false) { 18709cff245bSJames Collins $image = str_replace(['{', '}'], '', $image); 1871a8eebd82SJames Collins $i = stripos($image, '?'); 18729cff245bSJames Collins if ($i !== false) { 1873a8eebd82SJames Collins $image = substr($image, 0, $i); 1874c165b184SJames Collins } 1875c165b184SJames Collins 1876a8eebd82SJames Collins $image = ml($image, '', true, '', false); 1877ab45ba71SJames Collins } 1878ab45ba71SJames Collins } 1879ab45ba71SJames Collins } 1880ab45ba71SJames Collins 1881a8eebd82SJames Collins $this->footerScript['hero-image'] = 'mikio.setHeroImage(\'' . $image . '\')'; 1882a8eebd82SJames Collins 1883a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-image (.+?)~~.*/ui', '', $elm->innertext); 18849cff245bSJames Collins }//end if 18859cff245bSJames Collins }//end foreach 1886ab45ba71SJames Collins 18879cff245bSJames Collins /* Hero colors - ~~hero-colors [background-color] [hero-title-color] [hero-subtitle-color] 18889cff245bSJames Collins [breadcrumb-text-color] [breadcrumb-hover-color] (use 'initial' for original color) */ 1889a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1890a8eebd82SJames Collins $i = stripos($elm->innertext, '~~hero-colors'); 1891a8eebd82SJames Collins if ($i !== false) { 18929cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 1893a8eebd82SJames Collins if ($j !== false) { 18949cff245bSJames Collins if ($j > ($i + 14)) { 18959cff245bSJames Collins $color = substr($elm->innertext, ($i + 14), ($j - $i - 14)); 1896a8eebd82SJames Collins $this->footerScript['hero-colors'] = 'mikio.setHeroColor(\'' . $color . '\')'; 1897ab45ba71SJames Collins 1898a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-colors (.+?)~~.*/ui', '', $elm->innertext); 1899ab45ba71SJames Collins } 1900ab45ba71SJames Collins 1901a8eebd82SJames Collins break; 1902ab45ba71SJames Collins } 1903ab45ba71SJames Collins } 1904ab45ba71SJames Collins } 1905ab45ba71SJames Collins 190696ec8e1eSJames Collins /* Hide parts - ~~hide-parts [parts]~~ */ 190796ec8e1eSJames Collins foreach ($html->find('p') as $elm) { 190896ec8e1eSJames Collins $i = stripos($elm->innertext, '~~hide-parts'); 190996ec8e1eSJames Collins if ($i !== false) { 19109cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 191196ec8e1eSJames Collins if ($j !== false) { 19129cff245bSJames Collins if ($j > ($i + 13)) { 19139cff245bSJames Collins $parts = explode(' ', substr($elm->innertext, ($i + 13), ($j - $i - 13))); 191496ec8e1eSJames Collins $script = ''; 191596ec8e1eSJames Collins 191696ec8e1eSJames Collins foreach ($parts as $part) { 191796ec8e1eSJames Collins // $part = trim($part); 191896ec8e1eSJames Collins if (strlen($part) > 0) { 191996ec8e1eSJames Collins $script .= 'mikio.hidePart(\'' . $part . '\');'; 192096ec8e1eSJames Collins } 192196ec8e1eSJames Collins } 192296ec8e1eSJames Collins 192396ec8e1eSJames Collins if (strlen($script) > 0) { 192496ec8e1eSJames Collins $this->footerScript['hide-parts'] = $script; 192596ec8e1eSJames Collins } 192696ec8e1eSJames Collins 192796ec8e1eSJames Collins $elm->innertext = preg_replace('/~~hide-parts (.+?)~~.*/ui', '', $elm->innertext); 192896ec8e1eSJames Collins } 192996ec8e1eSJames Collins 193096ec8e1eSJames Collins break; 19319cff245bSJames Collins }//end if 19329cff245bSJames Collins }//end if 19339cff245bSJames Collins }//end foreach 193496ec8e1eSJames Collins 193596ec8e1eSJames Collins 1936a8eebd82SJames Collins /* Page Tags (tag plugin) */ 19379cff245bSJames Collins if ($this->getConf('tagsConsolidate') === true) { 1938a8eebd82SJames Collins $tags = ''; 1939a8eebd82SJames Collins foreach ($html->find('div.tags a') as $elm) { 1940a8eebd82SJames Collins $tags .= $elm->outertext; 1941a8eebd82SJames Collins } 1942a8eebd82SJames Collins 1943a8eebd82SJames Collins foreach ($html->find('div.tags') as $elm) { 1944a8eebd82SJames Collins $elm->innertext = ''; 1945a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1946a8eebd82SJames Collins } 1947a8eebd82SJames Collins 19483a385f2cSJames Collins if (empty($tags) === false) { 1949a8eebd82SJames Collins $this->footerScript['tags'] = 'mikio.setTags(\'' . $tags . '\')'; 1950a8eebd82SJames Collins } 1951ab45ba71SJames Collins } 1952ab45ba71SJames Collins 1953ab45ba71SJames Collins // Configuration Manager 19543a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 1955ab45ba71SJames Collins // Additional save buttons 1956ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1957ab45ba71SJames Collins $saveButtons = ''; 1958ab45ba71SJames Collins 1959ab45ba71SJames Collins foreach ($cm->find('p') as $elm) { 1960ab45ba71SJames Collins $saveButtons = $elm->outertext; 1961a8eebd82SJames Collins $saveButtons = str_replace('<p>', '<p style="text-align:right">', $saveButtons); 1962ab45ba71SJames Collins $elm->outertext = ''; 1963ab45ba71SJames Collins } 1964ab45ba71SJames Collins 1965ab45ba71SJames Collins foreach ($cm->find('fieldset') as $elm) { 1966ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1967ab45ba71SJames Collins } 1968ab45ba71SJames Collins } 1969ab45ba71SJames Collins } 1970ab45ba71SJames Collins 1971ab45ba71SJames Collins $content = $html->save(); 1972c165b184SJames Collins $html->clear(); 1973c165b184SJames Collins unset($html); 1974c165b184SJames Collins 1975c165b184SJames Collins return $content; 1976c165b184SJames Collins } 19772b4583abSJames Collins 19782b4583abSJames Collins 1979a8eebd82SJames Collins /** 1980a8eebd82SJames Collins * Get DokuWiki namespace/page/URI as link 1981a8eebd82SJames Collins * 19829cff245bSJames Collins * @param string $str String to parse. 19839cff245bSJames Collins * @return string parsed URI 1984a8eebd82SJames Collins */ 19859cff245bSJames Collins public function getLink(string $str) 198610b40067Snomadjimbob { 19872b4583abSJames Collins $i = strpos($str, '://'); 19889cff245bSJames Collins if ($i !== false) { 19899cff245bSJames Collins return $str; 19909cff245bSJames Collins } 19912b4583abSJames Collins 19922b4583abSJames Collins return wl($str); 19932b4583abSJames Collins } 1994ab45ba71SJames Collins 1995ab45ba71SJames Collins 1996a8eebd82SJames Collins /** 1997a8eebd82SJames Collins * Check if the user can edit current namespace/page 1998a8eebd82SJames Collins * 1999a8eebd82SJames Collins * @return boolean user can edit 2000a8eebd82SJames Collins */ 200110b40067Snomadjimbob public function userCanEdit() 200210b40067Snomadjimbob { 2003ab45ba71SJames Collins global $INFO; 2004ab45ba71SJames Collins global $ID; 2005ab45ba71SJames Collins 2006ab45ba71SJames Collins $wiki_file = wikiFN($ID); 20079cff245bSJames Collins if (@file_exists($wiki_file) === false) { 20089cff245bSJames Collins return true; 20099cff245bSJames Collins } 20109cff245bSJames Collins if ($INFO['isadmin'] === true || $INFO['ismanager'] === true) { 20119cff245bSJames Collins return true; 20129cff245bSJames Collins } 2013a8eebd82SJames Collins // $meta_file = metaFN($ID, '.meta'); 20149cff245bSJames Collins if ($INFO['meta']['user'] === false) { 20159cff245bSJames Collins return true; 20169cff245bSJames Collins } 20179cff245bSJames Collins if ($INFO['client'] === $INFO['meta']['user']) { 20189cff245bSJames Collins return true; 20199cff245bSJames Collins } 2020ab45ba71SJames Collins 2021ab45ba71SJames Collins return false; 2022c165b184SJames Collins } 202347161538SJames Collins 202447161538SJames Collins 2025a8eebd82SJames Collins /** 2026a8eebd82SJames Collins * Search for and return the uri of a media file 2027a8eebd82SJames Collins * 20289cff245bSJames Collins * @param string $image Image name to search for (without extension). 20299cff245bSJames Collins * @param boolean $searchCurrentNS Search the current namespace. 20309cff245bSJames Collins * @param boolean $propagate Propagate search through the namespace. 20319cff245bSJames Collins * @return string URI of the found media file 2032a8eebd82SJames Collins */ 20339cff245bSJames Collins public function getMediaFile(string $image, bool $searchCurrentNS = true, bool $propagate = true) 203410b40067Snomadjimbob { 2035ab45ba71SJames Collins global $INFO; 2036a8eebd82SJames Collins 20379cff245bSJames Collins $ext = ['png', 'jpg', 'gif', 'svg']; 2038ab45ba71SJames Collins 20399cff245bSJames Collins if ($searchCurrentNS === true) { 20409cff245bSJames Collins $prefix[] = ':' . $INFO['namespace'] . ':'; 20419cff245bSJames Collins } 20429cff245bSJames Collins if ($propagate === true) { 2043ab45ba71SJames Collins $prefix[] = ':'; 2044ab45ba71SJames Collins $prefix[] = ':wiki:'; 2045a8eebd82SJames Collins } 2046ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 20473a385f2cSJames Collins if (empty($theme) === false) { 20489cff245bSJames Collins $prefix[] = 'themes/' . $theme . '/images/'; 20499cff245bSJames Collins } 2050ab45ba71SJames Collins $prefix[] = 'images/'; 2051ab45ba71SJames Collins 20529cff245bSJames Collins $search = []; 2053ab45ba71SJames Collins foreach ($prefix as $pitem) { 2054ab45ba71SJames Collins foreach ($ext as $eitem) { 2055ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 2056ab45ba71SJames Collins } 2057ab45ba71SJames Collins } 2058ab45ba71SJames Collins 2059ab45ba71SJames Collins $img = ''; 2060ab45ba71SJames Collins $file = ''; 2061ab45ba71SJames Collins $url = ''; 2062ab45ba71SJames Collins $ismedia = false; 2063ab45ba71SJames Collins $found = false; 2064ab45ba71SJames Collins 2065ab45ba71SJames Collins foreach ($search as $img) { 20663a385f2cSJames Collins if (strcasecmp(substr($img, 0, 1), ':') === 0) { 2067ab45ba71SJames Collins $file = mediaFN($img); 2068ab45ba71SJames Collins $ismedia = true; 2069ab45ba71SJames Collins } else { 2070ab45ba71SJames Collins $file = tpl_incdir() . $img; 2071ab45ba71SJames Collins $ismedia = false; 2072ab45ba71SJames Collins } 2073ab45ba71SJames Collins 20749cff245bSJames Collins if (file_exists($file) === true) { 2075ab45ba71SJames Collins $found = true; 2076ab45ba71SJames Collins break; 2077ab45ba71SJames Collins } 2078ab45ba71SJames Collins } 2079ab45ba71SJames Collins 20809cff245bSJames Collins if ($found === false) { 20819cff245bSJames Collins return false; 20829cff245bSJames Collins } 2083ab45ba71SJames Collins 20849cff245bSJames Collins if ($ismedia === true) { 2085ab45ba71SJames Collins $url = ml($img, '', true, '', false); 2086ab45ba71SJames Collins } else { 2087ab45ba71SJames Collins $url = tpl_basedir() . $img; 2088ab45ba71SJames Collins } 2089ab45ba71SJames Collins 2090ab45ba71SJames Collins return $url; 2091ab45ba71SJames Collins } 2092ab45ba71SJames Collins 2093a8eebd82SJames Collins 2094a8eebd82SJames Collins /** 2095ab45ba71SJames Collins * Print or return the page title 2096ab45ba71SJames Collins * 20979cff245bSJames Collins * @param string $page Page id or empty string for current page. 2098ab45ba71SJames Collins * @return string generated content 2099ab45ba71SJames Collins */ 21009cff245bSJames Collins public function getPageTitle(string $page = '') 210110b40067Snomadjimbob { 2102ab45ba71SJames Collins global $ID, $conf; 2103ab45ba71SJames Collins 2104ab45ba71SJames Collins $html = ''; 2105ab45ba71SJames Collins 21063a385f2cSJames Collins if (empty($page) === true) { 21079cff245bSJames Collins $page = $ID; 21089cff245bSJames Collins } 2109ab45ba71SJames Collins 2110ab45ba71SJames Collins $html = p_get_first_heading($page); 2111ab45ba71SJames Collins $html = strip_tags($html); 2112ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 2113ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 2114ab45ba71SJames Collins $html = trim($html); 2115ab45ba71SJames Collins 2116ab45ba71SJames Collins return $html; 2117ab45ba71SJames Collins } 2118a8eebd82SJames Collins 2119a8eebd82SJames Collins 2120a8eebd82SJames Collins /** 2121a8eebd82SJames Collins * Return inline theme icon 2122a8eebd82SJames Collins * 21239cff245bSJames Collins * @param string $type Icon to retreive. 21249e41d878SJames Collins * @param string $class Classname to insert. 21259cff245bSJames Collins * @return string HTML icon content 2126a8eebd82SJames Collins */ 21279e41d878SJames Collins public function mikioInlineIcon(string $type, string $class = "") 212810b40067Snomadjimbob { 21299e41d878SJames Collins if (is_array($class) === true) { 21309e41d878SJames Collins $class = explode(' ', $class); 21319e41d878SJames Collins } 21329e41d878SJames Collins 21339e41d878SJames Collins if (strlen($class) > 0) { 21349e41d878SJames Collins $class = ' ' . $class; 21359e41d878SJames Collins } 21369e41d878SJames Collins 2137a8eebd82SJames Collins switch ($type) { 2138a8eebd82SJames Collins case 'wrench': 2139906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 -256 1792 2140906e1a13SJames 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, 2141906e1a13SJames 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, 2142906e1a13SJames 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, 2143906e1a13SJames 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 2144906e1a13SJames 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, 2145906e1a13SJames 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>'; 2146a8eebd82SJames Collins case 'file': 2147906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2148906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,235.38983,1277.8305)" id="g2991"> 2149906e1a13SJames 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 2150906e1a13SJames 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 2151906e1a13SJames 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" 21529cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 2153a8eebd82SJames Collins case 'gear': 2154906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2155906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,121.49153,1285.4237)" id="g3027"> 2156906e1a13SJames 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 2157906e1a13SJames 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 2158906e1a13SJames 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 2159906e1a13SJames 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 2160906e1a13SJames 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 2161906e1a13SJames 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, 2162906e1a13SJames 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 2163906e1a13SJames 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 2164906e1a13SJames 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" /> 2165906e1a13SJames Collins</g></svg>'; 2166a8eebd82SJames Collins case 'user': 2167906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2168906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,197.42373,1300.6102)"><path d="M 2169906e1a13SJames 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 2170906e1a13SJames 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, 2171906e1a13SJames 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 2172906e1a13SJames 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 2173906e1a13SJames 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, 2174906e1a13SJames Collins1408 863,1408 975.5,1295.5 1088,1183 1088,1024 z"/></g></svg>'; 2175a8eebd82SJames Collins case 'search': 21769e41d878SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 21779cff245bSJames 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 21789cff245bSJames 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 21799cff245bSJames 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 21809cff245bSJames Collins6.195 0 0 1-6.188 6.188z"/></svg>'; 2181a8eebd82SJames Collins case 'home': 2182906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2183906e1a13SJames CollinsviewBox="0 -256 1792 1792" aria-hidden="true" style="fill:currentColor"><g 2184906e1a13SJames 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 2185906e1a13SJames 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 2186906e1a13SJames 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 2187906e1a13SJames 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, 2188906e1a13SJames 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" 21899cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 21909e41d878SJames Collins case 'sun': 2191906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2192906e1a13SJames 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 2193906e1a13SJames 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 2194906e1a13SJames 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 2195906e1a13SJames 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 2196906e1a13SJames Collins0 0 1-.707.707z" /></svg>'; 21979e41d878SJames Collins case 'moon': 2198906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2199906e1a13SJames 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 2200906e1a13SJames 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 2201906e1a13SJames 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 2202906e1a13SJames 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 2203906e1a13SJames Collins0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286z" /></svg>'; 220434d5f19aSJames Collins case 'sunmoon': 2205*d0fba6d1SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2206*d0fba6d1SJames Collinsstyle="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" 2207*d0fba6d1SJames 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 2208*d0fba6d1SJames 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" 2209*d0fba6d1SJames 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, 2210*d0fba6d1SJames 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>'; 2211f65a4e5eSJames Collins case 'hamburger': 2212f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" 2213f65a4e5eSJames 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 2214f65a4e5eSJames 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 2215f65a4e5eSJames 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 2216f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16z"/></svg>'; 2217f65a4e5eSJames Collins case 'down-arrow': 2218f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 2219f65a4e5eSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M16.003 18.626l7.081-7.081L25 13.46l-8.997 8.998-9.003-9 2220f65a4e5eSJames Collins1.917-1.916z"/></svg>'; 22219cff245bSJames Collins }//end switch 2222ab45ba71SJames Collins 2223a8eebd82SJames Collins return ''; 2224a8eebd82SJames Collins } 2225ab45ba71SJames Collins 2226a8eebd82SJames Collins /** 2227a8eebd82SJames Collins * Finalize theme 22289cff245bSJames Collins * 22299cff245bSJames Collins * @return void 2230a8eebd82SJames Collins */ 223110b40067Snomadjimbob public function finalize() 223210b40067Snomadjimbob { 2233a8eebd82SJames Collins } 22341785fc73SJames Collins 22351785fc73SJames Collins /** 22361785fc73SJames Collins * Show Messages 22379cff245bSJames Collins * 22389cff245bSJames Collins * @return void 22391785fc73SJames Collins */ 224010b40067Snomadjimbob public function showMessages() 224110b40067Snomadjimbob { 22421785fc73SJames Collins global $ACT; 22431785fc73SJames Collins 22449cff245bSJames Collins if ($this->lessIgnored === true) { 22459cff245bSJames Collins msg( 22469cff245bSJames Collins 'useLESS is enabled on the Mikio template, however is not supported on this server', 22479cff245bSJames Collins 2, 22489cff245bSJames Collins '', 22499cff245bSJames Collins '', 22509cff245bSJames Collins MSG_ADMINS_ONLY 22519cff245bSJames Collins ); 2252a8df40efSJames Collins } 2253a8df40efSJames Collins 22541785fc73SJames Collins $show = $this->getConf('showNotifications'); 22553a385f2cSJames Collins if ( 22563a385f2cSJames Collins strcasecmp($show, 'always') === 0 || 22573a385f2cSJames Collins (strcasecmp($show, 'admin') === 0 && strcasecmp($ACT, 'admin') === 0) 22583a385f2cSJames Collins ) { 22591785fc73SJames Collins global $MSG, $MSG_shown; 22601785fc73SJames Collins 22619cff245bSJames Collins if (isset($MSG) === false) { 22621785fc73SJames Collins return; 22631785fc73SJames Collins } 22641785fc73SJames Collins 22659cff245bSJames Collins if (isset($MSG_shown) === false) { 22669cff245bSJames Collins $MSG_shown = []; 2267a8df40efSJames Collins } 22681785fc73SJames Collins 22691785fc73SJames Collins foreach ($MSG as $msg) { 22701785fc73SJames Collins $hash = md5($msg['msg']); 22719cff245bSJames Collins if (isset($MSG_shown[$hash]) === true) { 22721785fc73SJames Collins continue; 22731785fc73SJames Collins } 22741785fc73SJames Collins // skip double messages 22751785fc73SJames Collins 22769cff245bSJames Collins if (info_msg_allowed($msg) === true) { 22779cff245bSJames Collins echo '<div class="' . $msg['lvl'] . '">'; 22789cff245bSJames Collins echo $msg['msg']; 22799cff245bSJames Collins echo '</div>'; 22801785fc73SJames Collins } 22811785fc73SJames Collins 2282a8df40efSJames Collins $MSG_shown[$hash] = true; 22831785fc73SJames Collins } 22841785fc73SJames Collins 22851785fc73SJames Collins unset($GLOBALS['MSG']); 22869cff245bSJames Collins }//end if 22871785fc73SJames Collins } 22887ac0a6efSJames Collins 22897ac0a6efSJames Collins /** 22907ac0a6efSJames Collins * Dokuwiki version 22917ac0a6efSJames Collins * 22927ac0a6efSJames Collins * @return string the dw version name 22937ac0a6efSJames Collins */ 22949cff245bSJames Collins public function dwVersion() 22959cff245bSJames Collins { 22969cff245bSJames Collins if (function_exists('getVersionData') === true) { 22977ac0a6efSJames Collins $version_data = getVersionData(); 22989cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 22997ac0a6efSJames Collins $version_items = explode(' ', $version_data['date']); 23007ac0a6efSJames Collins if (count($version_items) >= 2) { 23017ac0a6efSJames Collins return preg_replace('/[^a-zA-Z0-9 ]+/', '', strtolower($version_items[1])); 23027ac0a6efSJames Collins } 23037ac0a6efSJames Collins } 23047ac0a6efSJames Collins } 23057ac0a6efSJames Collins 23067ac0a6efSJames Collins return 'unknown'; 23077ac0a6efSJames Collins } 2308e4c4fb13SJames Collins 2309e4c4fb13SJames Collins /** 2310e4c4fb13SJames Collins * Dokuwiki version number 2311e4c4fb13SJames Collins * 2312e4c4fb13SJames Collins * @return string the dw version date converted to integer 2313e4c4fb13SJames Collins */ 23149cff245bSJames Collins public function dwVersionNumber() 23159cff245bSJames Collins { 23169cff245bSJames Collins if (function_exists('getVersionData') === true) { 2317e4c4fb13SJames Collins $version_data = getVersionData(); 23189cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 2319e4c4fb13SJames Collins $version_items = explode(' ', $version_data['date']); 2320e4c4fb13SJames Collins if (count($version_items) >= 1) { 2321e4c4fb13SJames Collins return intval(preg_replace('/[^0-9]+/', '', strtolower($version_items[0]))); 2322e4c4fb13SJames Collins } 2323e4c4fb13SJames Collins } 2324e4c4fb13SJames Collins } 2325e4c4fb13SJames Collins 2326e4c4fb13SJames Collins return 0; 2327e4c4fb13SJames Collins } 2328a8eebd82SJames Collins} 2329ab45ba71SJames Collins 2330ab45ba71SJames Collinsglobal $TEMPLATE; 233147161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 2332