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 */ 152*9ffe9161Snomadjimbob 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'], 3323a385f2cSJames Collins ['keys' => ['youarehereShowLast'], 'type' => 'int'], 3333a385f2cSJames Collins 3343a385f2cSJames Collins ['keys' => ['iconTag'], 'type' => 'string'], 3353a385f2cSJames Collins ['keys' => ['customTheme'], 'type' => 'string'], 3363a385f2cSJames Collins ['keys' => ['navbarCustomMenuText'], 'type' => 'string'], 3373a385f2cSJames Collins ['keys' => ['breadcrumbPrefixText'], 'type' => 'string'], 3383a385f2cSJames Collins ['keys' => ['breadcrumbSepText'], 'type' => 'string'], 3393a385f2cSJames Collins ['keys' => ['youareherePrefixText'], 'type' => 'string'], 3403a385f2cSJames Collins ['keys' => ['youarehereSepText'], 'type' => 'string'], 3413a385f2cSJames Collins ['keys' => ['footerCustomMenuText'], 'type' => 'string'], 3423a385f2cSJames Collins ['keys' => ['brandURLGuest'], 'type' => 'string'], 3433a385f2cSJames Collins ['keys' => ['brandURLUser'], 'type' => 'string'], 3443a385f2cSJames Collins 3453a385f2cSJames Collins ['keys' => ['useLESS'], 'type' => 'less'], 3463a385f2cSJames Collins ]; 3473a385f2cSJames Collins 3483a385f2cSJames Collins foreach ($data as $row) { 3493a385f2cSJames Collins // does not check case.... 3503a385f2cSJames Collins if (in_array($key, $row['keys']) === true) { 35195372bffSJames Collins if (array_key_exists('type', $row) === true) { 3523a385f2cSJames Collins switch ($row['type']) { 3533a385f2cSJames Collins case 'bool': 3543a385f2cSJames Collins return (bool) $value; 3553a385f2cSJames Collins case 'int': 3563a385f2cSJames Collins return (int) $value; 3573a385f2cSJames Collins case 'string': 3583a385f2cSJames Collins return $value; 3593a385f2cSJames Collins case 'less': 36029118ed7SJames Collins $value = (bool) $value; 361a8df40efSJames Collins $lessAvailable = true; 362a8df40efSJames Collins 363a8df40efSJames Collins // check for less library 364a8df40efSJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3659cff245bSJames Collins if (file_exists($lesscLib) === false) { 366a8df40efSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3679cff245bSJames Collins } 3689cff245bSJames Collins if (file_exists($lesscLib) === false) { 369a8df40efSJames Collins $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3709cff245bSJames Collins } 3719cff245bSJames Collins if (file_exists($lesscLib) === false) { 3729cff245bSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . 3739cff245bSJames Collins '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3749cff245bSJames Collins } 3759cff245bSJames Collins if (file_exists($lesscLib) === false) { 376a8df40efSJames Collins $lessAvailable = false; 377a8df40efSJames Collins } 378a8df40efSJames Collins 379a8df40efSJames Collins // check for ctype extensions 3809cff245bSJames Collins if (function_exists('ctype_digit') === false) { 381a8df40efSJames Collins $lessAvailable = false; 382a8df40efSJames Collins } 383a8df40efSJames Collins 3849cff245bSJames Collins if ($value === true && $lessAvailable === false) { 385a8df40efSJames Collins $this->lessIgnored = true; 38629118ed7SJames Collins $value = false; 38729118ed7SJames Collins } 3883a385f2cSJames Collins 3893a385f2cSJames Collins return $value; 3909cff245bSJames Collins }//end switch 3913a385f2cSJames Collins }//end if 3923a385f2cSJames Collins 3933a385f2cSJames Collins if (in_array($value, $row['values']) === true) { 3943a385f2cSJames Collins return $value; 3953a385f2cSJames Collins } 3963a385f2cSJames Collins 3973a385f2cSJames Collins if (array_key_exists('default', $row) === true) { 3983a385f2cSJames Collins if (is_array($row['default']) === true) { 3993a385f2cSJames Collins if (array_key_exists($key, $row['default']) === true) { 4003a385f2cSJames Collins return $row['default'][$key]; 4013a385f2cSJames Collins } 4023a385f2cSJames Collins } else { 4033a385f2cSJames Collins return $row['default']; 4043a385f2cSJames Collins } 4053a385f2cSJames Collins } 4063a385f2cSJames Collins 4073a385f2cSJames Collins return reset($row['values']); 4083a385f2cSJames Collins }//end if 4093a385f2cSJames Collins }//end foreach 410c165b184SJames Collins 411c165b184SJames Collins return $value; 412c165b184SJames Collins } 413c165b184SJames Collins 414c165b184SJames Collins 41595372bffSJames Collins // phpcs:enable 41695372bffSJames Collins 41795372bffSJames Collins 418c165b184SJames Collins /** 419a8eebd82SJames Collins * Check if a page exist in directory or namespace 420c165b184SJames Collins * 4219cff245bSJames Collins * @param string $page Page/namespace to search. 422a8eebd82SJames Collins * @return boolean if page exists 423c165b184SJames Collins */ 4249cff245bSJames Collins public function pageExists(string $page) 42510b40067Snomadjimbob { 426ab45ba71SJames Collins ob_start(); 427a8eebd82SJames Collins tpl_includeFile($page . '.html'); 428ab45ba71SJames Collins $html = ob_get_contents(); 429ab45ba71SJames Collins ob_end_clean(); 430a8eebd82SJames Collins 4313a385f2cSJames Collins if (empty($html) === false) { 4329cff245bSJames Collins return true; 4339cff245bSJames Collins } 434a8eebd82SJames Collins 435a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 436a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 437a8eebd82SJames Collins 4389cff245bSJames Collins if ($propagate === true) { 4399cff245bSJames Collins if (page_findnearest($page, $useACL) !== false) { 4409cff245bSJames Collins return true; 4419cff245bSJames Collins } 4429cff245bSJames Collins } elseif ($useACL === true && auth_quickaclcheck($page) !== AUTH_NONE) { 4439cff245bSJames Collins return true; 444ab45ba71SJames Collins } 445ab45ba71SJames Collins 4469cff245bSJames Collins return false; 447ab45ba71SJames Collins } 448ab45ba71SJames Collins 449a8eebd82SJames Collins 450c165b184SJames Collins /** 451a8eebd82SJames Collins * Print or return page from directory or namespace 4522b4583abSJames Collins * 4539cff245bSJames Collins * @param string $page Page/namespace to include. 4549cff245bSJames Collins * @param boolean $print Print content. 4559cff245bSJames Collins * @param boolean $parse Parse content before printing/returning. 4569cff245bSJames Collins * @param string $classWrapper Wrap page in a div with class. 457ab45ba71SJames Collins * @return string contents of page found 4582b4583abSJames Collins */ 4599cff245bSJames Collins public function includePage(string $page, bool $print = true, bool $parse = true, string $classWrapper = '') 4602b4583abSJames Collins { 461a8eebd82SJames Collins ob_start(); 462a8eebd82SJames Collins tpl_includeFile($page . '.html'); 463a8eebd82SJames Collins $html = ob_get_contents(); 464a8eebd82SJames Collins ob_end_clean(); 465a8eebd82SJames Collins 4663a385f2cSJames Collins if (empty($html) === true) { 467a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 468a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 469ab45ba71SJames Collins $html = ''; 4702b4583abSJames Collins 471ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 472ab45ba71SJames Collins } 4732b4583abSJames Collins 4743a385f2cSJames Collins if (empty($html) === false && $parse === true) { 475ab45ba71SJames Collins $html = $this->parseContent($html); 476ab45ba71SJames Collins } 4772b4583abSJames Collins 4783a385f2cSJames Collins if (empty($classWrapper) === false && empty($html) === false) { 4799cff245bSJames Collins $html = '<div class="' . $classWrapper . '">' . $html . '</div>'; 4809cff245bSJames Collins } 4812b4583abSJames Collins 4829cff245bSJames Collins if ($print === true) { 4839cff245bSJames Collins echo $html; 4849cff245bSJames Collins } 485ab45ba71SJames Collins return $html; 4862b4583abSJames Collins } 4872b4583abSJames Collins 488a8eebd82SJames Collins 489a8eebd82SJames Collins /** 490a8eebd82SJames Collins * Print or return logged in user information 491a8eebd82SJames Collins * 4929cff245bSJames Collins * @param boolean $print Print content. 493a8eebd82SJames Collins * @return string user information 494a8eebd82SJames Collins */ 4959cff245bSJames Collins public function includeLoggedIn(bool $print = true) 49610b40067Snomadjimbob { 497a8eebd82SJames Collins $html = ''; 498a8eebd82SJames Collins 4999cff245bSJames Collins if (empty($_SERVER['REMOTE_USER']) === false) { 500a8eebd82SJames Collins $html .= '<div class="mikio-user-info">'; 501a8eebd82SJames Collins ob_start(); 502a8eebd82SJames Collins tpl_userinfo(); 503a8eebd82SJames Collins $html .= ob_get_contents(); 504a8eebd82SJames Collins ob_end_clean(); 505a8eebd82SJames Collins $html .= '</div>'; 5062b4583abSJames Collins } 507a8eebd82SJames Collins 5089cff245bSJames Collins if ($print === true) { 5099cff245bSJames Collins echo $html; 5109cff245bSJames Collins } 511a8eebd82SJames Collins return $html; 5122b4583abSJames Collins } 5132b4583abSJames Collins 5142b4583abSJames Collins 515a8eebd82SJames Collins /** 516a8eebd82SJames Collins * Print or return DokuWiki Menu 517a8eebd82SJames Collins * 5189cff245bSJames Collins * @param boolean $print Print content. 519a8eebd82SJames Collins * @return string contents of the menu 520a8eebd82SJames Collins */ 5219cff245bSJames Collins public function includeDWMenu(bool $print = true) 52210b40067Snomadjimbob { 5232b4583abSJames Collins global $lang; 5242b4583abSJames Collins global $USERINFO; 525c165b184SJames Collins 5269cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 527a8eebd82SJames Collins $html = '<ul class="mikio-nav">'; 5282b4583abSJames Collins 529ab45ba71SJames Collins $pageToolsMenu = []; 530ab45ba71SJames Collins $siteToolsMenu = []; 531ab45ba71SJames Collins $userToolsMenu = []; 532c165b184SJames Collins 533ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 534ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 535ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 5362b4583abSJames Collins 5372b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 5382b4583abSJames Collins foreach ($items as $item) { 5399cff245bSJames Collins if ($item->getType() !== 'top') { 540ab45ba71SJames Collins $itemHtml = ''; 5412b4583abSJames Collins 542905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5439cff245bSJames Collins if ( 5443a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5453a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5463a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5479cff245bSJames Collins ) { 5489cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . 5499cff245bSJames Collins ' ' . $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5509cff245bSJames Collins if ($showIcons === true) { 5519cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5529cff245bSJames Collins } 5539cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5549cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5559cff245bSJames Collins } 556ab45ba71SJames Collins $itemHtml .= '</a>'; 557ab45ba71SJames Collins 558ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 5592b4583abSJames Collins } 5609cff245bSJames Collins }//end if 5619cff245bSJames Collins }//end foreach 5622b4583abSJames Collins 563ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action'); 564ab45ba71SJames Collins foreach ($items as $item) { 565ab45ba71SJames Collins $itemHtml = ''; 5662b4583abSJames Collins 567905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5689cff245bSJames Collins if ( 5693a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5703a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5713a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5729cff245bSJames Collins ) { 5739cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . ' ' . 5749cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5759cff245bSJames Collins if ($showIcons === true) { 5769cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5779cff245bSJames Collins } 5789cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5799cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5809cff245bSJames Collins } 581ab45ba71SJames Collins $itemHtml .= '</a>'; 5822b4583abSJames Collins 583ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 5842b4583abSJames Collins } 5859cff245bSJames Collins }//end foreach 5862b4583abSJames Collins 587ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 588ab45ba71SJames Collins foreach ($items as $item) { 589ab45ba71SJames Collins $itemHtml = ''; 590ab45ba71SJames Collins 591905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5929cff245bSJames Collins if ( 5933a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5943a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5953a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5969cff245bSJames Collins ) { 5979cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link' . ($isDropDown === true ? ' mikio-dropdown-item' : '') . ' ' . 5989cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5999cff245bSJames Collins if ($showIcons === true) { 6009cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 6019cff245bSJames Collins } 6029cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6039cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6049cff245bSJames Collins } 605ab45ba71SJames Collins $itemHtml .= '</a>'; 606ab45ba71SJames Collins 607ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 608ab45ba71SJames Collins } 6099cff245bSJames Collins }//end foreach 610ab45ba71SJames Collins 611ab45ba71SJames Collins 612ab45ba71SJames Collins switch ($this->getConf('navbarDWMenuCombine')) { 613ab45ba71SJames Collins case 'dropdown': 614ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 6159cff245bSJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" 6169cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6179cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('file') : '') . 6189cff245bSJames Collins ($showText === true ? $lang['page_tools'] : '<span class="mikio-small-only">' . $lang['page_tools'] . 6199cff245bSJames Collins '</span>') . '</a>'; 620a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 621ab45ba71SJames Collins 622ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 623ab45ba71SJames Collins $html .= $item; 624ab45ba71SJames Collins } 625ab45ba71SJames Collins 626ab45ba71SJames Collins $html .= '</div>'; 627ab45ba71SJames Collins $html .= '</li>'; 628ab45ba71SJames Collins 629a8eebd82SJames Collins $html .= '<li id="dokuwiki__sitetools" class="mikio-nav-dropdown">'; 6309cff245bSJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" 6319cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6329cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('gear') : '') . 6339cff245bSJames Collins ($showText === true ? $lang['site_tools'] : '<span class="mikio-small-only">' . 6349cff245bSJames Collins $lang['site_tools'] . '</span>') . '</a>'; 635a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 636ab45ba71SJames Collins 637ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 638ab45ba71SJames Collins $html .= $item; 639ab45ba71SJames Collins } 640ab45ba71SJames Collins 641ab45ba71SJames Collins $html .= '</div>'; 642ab45ba71SJames Collins $html .= '</li>'; 643ab45ba71SJames Collins 644a8eebd82SJames Collins $html .= '<li id="dokuwiki__usertools" class="mikio-nav-dropdown">'; 6459cff245bSJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" 6469cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6479cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('user') : '') . 6489cff245bSJames Collins ($showText === true ? $lang['user_tools'] : '<span class="mikio-small-only">' . 6499cff245bSJames Collins $lang['user_tools'] . '</span>') . '</a>'; 650a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 651ab45ba71SJames Collins 652ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 653ab45ba71SJames Collins $html .= $item; 654ab45ba71SJames Collins } 655ab45ba71SJames Collins 656ab45ba71SJames Collins $html .= '</div>'; 657ab45ba71SJames Collins $html .= '</li>'; 658ab45ba71SJames Collins 659ab45ba71SJames Collins break; 660ab45ba71SJames Collins 661ab45ba71SJames Collins case 'combine': 662ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 6639cff245bSJames Collins $html .= '<a class="mikio-nav-link" href="#">' . 6649cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('wrench') : '') . 6659cff245bSJames Collins ($showText === true ? tpl_getLang('tools-menu') : '<span class="mikio-small-only">' . 6669cff245bSJames Collins tpl_getLang('tools-menu') . '</span>') . '</a>'; 667a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 668ab45ba71SJames Collins 669ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 670ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 671ab45ba71SJames Collins $html .= $item; 672ab45ba71SJames Collins } 673ab45ba71SJames Collins 674ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 675ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 676ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 677ab45ba71SJames Collins $html .= $item; 678ab45ba71SJames Collins } 679ab45ba71SJames Collins 680ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 681ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 682ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 683ab45ba71SJames Collins $html .= $item; 684ab45ba71SJames Collins } 685ab45ba71SJames Collins 686ab45ba71SJames Collins $html .= '</div>'; 687ab45ba71SJames Collins $html .= '</li>'; 688ab45ba71SJames Collins break; 689ab45ba71SJames Collins 690ab45ba71SJames Collins default: // seperate 691ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 692a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 693ab45ba71SJames Collins } 694ab45ba71SJames Collins 695ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 696a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 697a8eebd82SJames Collins } 698a8eebd82SJames Collins 699a8eebd82SJames Collins foreach ($userToolsMenu as $item) { 700a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 701ab45ba71SJames Collins } 702ab45ba71SJames Collins 703ab45ba71SJames Collins break; 7049cff245bSJames Collins }//end switch 705ab45ba71SJames Collins 70612030b10SJames Collins if ($this->getConf('showLightDark') === true) { 7079e41d878SJames Collins $html .= '<li class="mikio-darklight"> 7089e41d878SJames Collins<a href="#" class="mikio-control mikio-button mikio-darklight-button">' . 7099e41d878SJames Collins $this->mikioInlineIcon('sun', 'mikio-darklight-light') . 7109e41d878SJames Collins $this->mikioInlineIcon('moon', 'mikio-darklight-dark') . 7119e41d878SJames Collins '</a></li>'; 71212030b10SJames Collins } 71312030b10SJames Collins 714ab45ba71SJames Collins $html .= '</ul>'; 715ab45ba71SJames Collins 7169cff245bSJames Collins if ($print === true) { 7179cff245bSJames Collins echo $html; 7189cff245bSJames Collins } 719a8eebd82SJames Collins return $html; 720a8eebd82SJames Collins } 721a8eebd82SJames Collins 722a8eebd82SJames Collins 723a8eebd82SJames Collins /** 724a8eebd82SJames Collins * Create a nav element from a string. <uri>|<title>; 725a8eebd82SJames Collins * 7269cff245bSJames Collins * @param string $str String to generate nav. 727a8eebd82SJames Collins * @return string nav elements generated 728a8eebd82SJames Collins */ 7299cff245bSJames Collins public function stringToNav(string $str) 73010b40067Snomadjimbob { 731a8eebd82SJames Collins $html = ''; 732a8eebd82SJames Collins 7333a385f2cSJames Collins if (empty($str) === false) { 734a8eebd82SJames Collins $items = explode(';', $str); 735a8eebd82SJames Collins if (count($items) > 0) { 736a8eebd82SJames Collins $html .= '<ul class="mikio-nav">'; 737a8eebd82SJames Collins foreach ($items as $item) { 738a8eebd82SJames Collins $parts = explode('|', $item); 739a8eebd82SJames Collins if ($parts > 1) { 7409cff245bSJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . 7419cff245bSJames Collins strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . 7429cff245bSJames Collins '</a></li>'; 743a8eebd82SJames Collins } 744a8eebd82SJames Collins } 745a8eebd82SJames Collins $html .= '</ul>'; 746a8eebd82SJames Collins } 7472b4583abSJames Collins } 7482b4583abSJames Collins 749ab45ba71SJames Collins return $html; 7502b4583abSJames Collins } 7512b4583abSJames Collins 752a8eebd82SJames Collins /** 753ab45ba71SJames Collins * print or return the main navbar 7542b4583abSJames Collins * 7559cff245bSJames Collins * @param boolean $print Print the navbar. 7569cff245bSJames Collins * @param boolean $showSub Include the sub navbar. 757ab45ba71SJames Collins * @return string generated content 7582b4583abSJames Collins */ 7599cff245bSJames Collins public function includeNavbar(bool $print = true, bool $showSub = false) 76010b40067Snomadjimbob { 761b39ad16dSJames Collins global $conf, $USERINFO; 762d3d7d2b7SJames Collins 763d3d7d2b7SJames Collins $homeUrl = wl(); 764d3d7d2b7SJames Collins 7659cff245bSJames Collins if (plugin_isdisabled('showpageafterlogin') === false) { 766d3d7d2b7SJames Collins $p = &plugin_load('action', 'showpageafterlogin'); 7673a385f2cSJames Collins if (empty($p) === false) { 7689cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 769d3d7d2b7SJames Collins $homeUrl = wl($p->getConf('page_after_login')); 770d3d7d2b7SJames Collins } 771d3d7d2b7SJames Collins } 772b39ad16dSJames Collins } else { 7739cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 774b39ad16dSJames Collins $url = $this->getConf('brandURLUser'); 775b39ad16dSJames Collins if (strlen($url) > 0) { 776b39ad16dSJames Collins $homeUrl = $url; 777d3d7d2b7SJames Collins } 778b39ad16dSJames Collins } else { 779b39ad16dSJames Collins $url = $this->getConf('brandURLGuest'); 780b39ad16dSJames Collins if (strlen($url) > 0) { 781b39ad16dSJames Collins $homeUrl = $url; 782b39ad16dSJames Collins } 783b39ad16dSJames Collins } 784b39ad16dSJames Collins } 785d3d7d2b7SJames Collins 786ab45ba71SJames Collins $html = ''; 78747161538SJames Collins 7889cff245bSJames Collins $html .= '<nav class="mikio-navbar' . (($this->getConf('stickyNavbar') === true) ? ' mikio-sticky' : '') . 7899cff245bSJames Collins '">'; 790f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 791d3d7d2b7SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . $homeUrl . '">'; 7929cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true || $this->getConf('navbarUseTitleText') === true) { 793ab45ba71SJames Collins // Brand image 7949cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true) { 7959cff245bSJames Collins $logo = $this->getMediaFile('logo', false); 7969cff245bSJames Collins ; 7973a385f2cSJames Collins if (empty($logo) === false) { 798f0241fc4SJames Collins $width = $this->getConf('navbarTitleIconWidth'); 799f0241fc4SJames Collins $height = $this->getConf('navbarTitleIconHeight'); 800f0241fc4SJames Collins $styles = ''; 801f0241fc4SJames Collins 802f0241fc4SJames Collins if (strlen($width) > 0 || strlen($height) > 0) { 8039cff245bSJames Collins if (ctype_digit($width) === true) { 804f0241fc4SJames Collins $styles .= 'max-width:' . intval($width) . 'px;'; 8059cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $width) === 1) { 806f0241fc4SJames Collins $styles .= 'max-width:' . $width . ';'; 8079cff245bSJames Collins } elseif (strcasecmp($width, 'none') === 0) { 8087a92c19bSJames Collins $styles .= 'max-width:none;'; 809f0241fc4SJames Collins } 810f0241fc4SJames Collins 8119cff245bSJames Collins if (ctype_digit($height) === true) { 812f0241fc4SJames Collins $styles .= 'max-height:' . intval($height) . 'px;'; 8139cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $height) === 1) { 814f0241fc4SJames Collins $styles .= 'max-height:' . $height . ';'; 8159cff245bSJames Collins } elseif (strcasecmp($height, 'none') === 0) { 8167a92c19bSJames Collins $styles .= 'max-height:none;'; 817f0241fc4SJames Collins } 818f0241fc4SJames Collins 819f0241fc4SJames Collins if (strlen($styles) > 0) { 820f0241fc4SJames Collins $styles = ' style="' . $styles . '"'; 821f0241fc4SJames Collins } 8229cff245bSJames Collins }//end if 823f0241fc4SJames Collins 824f0241fc4SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image"' . $styles . '>'; 8259cff245bSJames Collins }//end if 8269cff245bSJames Collins }//end if 827ab45ba71SJames Collins 828ab45ba71SJames Collins // Brand title 8299cff245bSJames Collins if ($this->getConf('navbarUseTitleText') === true) { 830ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 831a8eebd82SJames Collins $html .= '<h1 class="mikio-navbar-brand-title-text">' . $conf['title'] . '</h1>'; 8329cff245bSJames Collins if ($this->getConf('navbarUseTaglineText') === true) { 833a8eebd82SJames Collins $html .= '<p class="claim mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</p>'; 834ab45ba71SJames Collins } 835ab45ba71SJames Collins $html .= '</div>'; 836ab45ba71SJames Collins } 8379cff245bSJames Collins }//end if 838ab45ba71SJames Collins $html .= '</a>'; 839660b2c71SJames Collins $html .= '<div class="mikio-navbar-toggle"><span class="icon"></span></div>'; 840ab45ba71SJames Collins 841ab45ba71SJames Collins // Menus 842ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 843ab45ba71SJames Collins 8449cff245bSJames Collins $menus = [$this->getConf('navbarPosLeft', 'none'), $this->getConf('navbarPosMiddle', 'none'), 8459cff245bSJames Collins $this->getConf('navbarPosRight', 'none') 8469cff245bSJames Collins ]; 847a8eebd82SJames Collins foreach ($menus as $menuType) { 848a8eebd82SJames Collins switch ($menuType) { 849a8eebd82SJames Collins case 'custom': 850a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('navbarCustomMenuText', '')); 851a8eebd82SJames Collins break; 852a8eebd82SJames Collins case 'search': 853ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 854ab45ba71SJames Collins $html .= $this->includeSearch(false); 855ab45ba71SJames Collins $html .= '</div>'; 856a8eebd82SJames Collins break; 857a8eebd82SJames Collins case 'dokuwiki': 8589cff245bSJames Collins $html .= $this->includeDWMenu(false); 859a8eebd82SJames Collins break; 860a8eebd82SJames Collins } 861a8eebd82SJames Collins } 862ab45ba71SJames Collins 863ab45ba71SJames Collins $html .= '</div>'; 864f8039bf2SJames Collins $html .= '</div>'; 865ab45ba71SJames Collins $html .= '</nav>'; 866ab45ba71SJames Collins 867a8eebd82SJames Collins // Sub Navbar 8689cff245bSJames Collins if ($showSub === true) { 8699cff245bSJames Collins $sub = $this->includePage('submenu', false); 8703a385f2cSJames Collins if (empty($sub) === false) { 8719cff245bSJames Collins $html .= '<nav class="mikio-navbar mikio-sub-navbar">' . $sub . '</nav>'; 8729cff245bSJames Collins } 873ab45ba71SJames Collins } 874ab45ba71SJames Collins 8759cff245bSJames Collins if ($print === true) { 8769cff245bSJames Collins echo $html; 8779cff245bSJames Collins } 878ab45ba71SJames Collins return $html; 879ab45ba71SJames Collins } 880ab45ba71SJames Collins 881ab45ba71SJames Collins 882a8eebd82SJames Collins /** 883a8eebd82SJames Collins * Is there a sidebar 884a8eebd82SJames Collins * 8859cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 886a8eebd82SJames Collins * @return boolean if sidebar exists 887a8eebd82SJames Collins */ 8889cff245bSJames Collins public function sidebarExists(string $prefix = '') 88910b40067Snomadjimbob { 890a8eebd82SJames Collins global $conf; 891a8eebd82SJames Collins 8923a385f2cSJames Collins if (strcasecmp($prefix, 'left') === 0) { 8939cff245bSJames Collins $prefix = ''; 8949cff245bSJames Collins } 895a8eebd82SJames Collins 896a8eebd82SJames Collins return $this->pageExists($conf['sidebar' . $prefix]); 897a8eebd82SJames Collins } 898a8eebd82SJames Collins 899a8eebd82SJames Collins 900a8eebd82SJames Collins /** 901ab45ba71SJames Collins * Print or return the sidebar content 902ab45ba71SJames Collins * 9039cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 9049cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 9059cff245bSJames Collins * @param boolean $parse Parse the content. 906ab45ba71SJames Collins * @return string generated content 907ab45ba71SJames Collins */ 9089cff245bSJames Collins public function includeSidebar(string $prefix = '', bool $print = true, bool $parse = true) 90910b40067Snomadjimbob { 910ab45ba71SJames Collins global $conf, $ID; 911ab45ba71SJames Collins 912ab45ba71SJames Collins $html = ''; 913ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 914ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 915ab45ba71SJames Collins 9163a385f2cSJames Collins if (empty($confPrefix) === true) { 9179cff245bSJames Collins $confPrefix = 'Left'; 9189cff245bSJames Collins } 9191cdedf28SJames Collins if (strcasecmp($prefix, 'left') === 0) { 9209cff245bSJames Collins $prefix = ''; 9219cff245bSJames Collins } 922ab45ba71SJames Collins 9231cdedf28SJames Collins $sidebarPage = empty($conf[$prefix . 'sidebar']) === true ? $prefix . 'sidebar' : $conf[$prefix . 'sidebar']; 924ab45ba71SJames Collins 9259cff245bSJames Collins if ( 9269cff245bSJames Collins $this->getConf('sidebarShow' . $confPrefix) === true && page_findnearest($sidebarPage) !== false && 9271cdedf28SJames Collins p_get_metadata($ID, 'nosidebar', false) === null 9289cff245bSJames Collins ) { 9299cff245bSJames Collins $content = $this->includePage($sidebarPage . 'header', false); 9303a385f2cSJames Collins if (empty($content) === false) { 9319cff245bSJames Collins $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 9329cff245bSJames Collins } 933ab45ba71SJames Collins 9343a385f2cSJames Collins if (empty($prefix) === true) { 9359cff245bSJames Collins $rows = [$this->getConf('sidebarLeftRow1'), $this->getConf('sidebarLeftRow2'), 9369cff245bSJames Collins $this->getConf('sidebarLeftRow3'), $this->getConf('sidebarLeftRow4') 9379cff245bSJames Collins ]; 938ab45ba71SJames Collins 939a8eebd82SJames Collins foreach ($rows as $row) { 940a8eebd82SJames Collins switch ($row) { 941a8eebd82SJames Collins case 'search': 9429cff245bSJames Collins $html .= $this->includeSearch(false); 943a8eebd82SJames Collins break; 944a8eebd82SJames Collins case 'logged in user': 9459cff245bSJames Collins $html .= $this->includeLoggedIn(false); 946a8eebd82SJames Collins break; 947a8eebd82SJames Collins case 'content': 9489cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9493a385f2cSJames Collins if (empty($content) === false) { 9509cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9519cff245bSJames Collins } 952a8eebd82SJames Collins break; 953a8eebd82SJames Collins case 'tags': 954a8eebd82SJames Collins $html .= '<div class="mikio-tags"></div>'; 955a8eebd82SJames Collins } 956a8eebd82SJames Collins } 957a8eebd82SJames Collins } else { 9589cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9593a385f2cSJames Collins if (empty($content) === false) { 9609cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9619cff245bSJames Collins } 9629cff245bSJames Collins }//end if 9639cff245bSJames Collins 9649cff245bSJames Collins $content = $this->includePage($sidebarPage . 'footer', false); 9653a385f2cSJames Collins if (empty($content) === false) { 9669cff245bSJames Collins $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 9679cff245bSJames Collins } 9689cff245bSJames Collins }//end if 9699cff245bSJames Collins 9703a385f2cSJames Collins if (empty($html) === true) { 9713a385f2cSJames Collins if (empty($prefix) === true && $this->getConf('sidebarAlwaysShowLeft') === true) { 9729cff245bSJames Collins $html = ' '; 9739cff245bSJames Collins } 9749cff245bSJames Collins if ($this->getConf('sidebarAlwaysShow' . ucfirst($prefix)) === true) { 9759cff245bSJames Collins $html = ' '; 9769cff245bSJames Collins } 977a8eebd82SJames Collins } 978ab45ba71SJames Collins 9793a385f2cSJames Collins if (empty($html) === false) { 9801cdedf28SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . (empty($prefix) === true ? 'left' : $prefix) . 9819cff245bSJames Collins '"><a class="mikio-sidebar-toggle' . 9829cff245bSJames Collins ($this->getConf('sidebarMobileDefaultCollapse') === true ? ' closed' : '') . '" href="#">' . 9839cff245bSJames Collins tpl_getLang('sidebar-title') . ' <span class="icon"></span></a><div class="mikio-sidebar-collapse">' . 9849cff245bSJames Collins $html . '</div></aside>'; 985ab45ba71SJames Collins } 986ab45ba71SJames Collins 9879cff245bSJames Collins if ($parse === true) { 9889cff245bSJames Collins $html = $this->includeIcons($html); 9893a04a100SJames Collins } 9909cff245bSJames Collins if ($print === true) { 9919cff245bSJames Collins echo $html; 992ab45ba71SJames Collins } 993ab45ba71SJames Collins return $html; 994ab45ba71SJames Collins } 995ab45ba71SJames Collins 996ab45ba71SJames Collins 997a8eebd82SJames Collins /** 998ab45ba71SJames Collins * Print or return the page tools content 999ab45ba71SJames Collins * 10009cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 10019cff245bSJames Collins * @param boolean $includeId Include the dw__pagetools id in the element. 1002ab45ba71SJames Collins * @return string generated content 1003ab45ba71SJames Collins */ 10049cff245bSJames Collins public function includePageTools(bool $print = true, bool $includeId = false) 100510b40067Snomadjimbob { 10061293ce10SJames Collins global $USERINFO; 10071293ce10SJames Collins 10089cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 1009ab45ba71SJames Collins $html = ''; 1010ab45ba71SJames Collins 10119cff245bSJames Collins $html .= '<nav' . ($includeId === true ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 1012b9c0582bSJames Collins $html .= '<ul class="tools">'; 1013ab45ba71SJames Collins 1014ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 1015ab45ba71SJames Collins foreach ($items as $item) { 10169cff245bSJames Collins $classes = []; 10173fd763a0SJames Collins $classes[] = $item->getType(); 10183fd763a0SJames Collins $attr = $item->getLinkAttributes(); 10193fd763a0SJames Collins 10209cff245bSJames Collins if (empty($attr['class']) === false) { 10213fd763a0SJames Collins $classes = array_merge($classes, explode(' ', $attr['class'])); 1022ab45ba71SJames Collins } 1023ab45ba71SJames Collins 10243fd763a0SJames Collins $classes = array_unique($classes); 10253fd763a0SJames Collins 10261293ce10SJames Collins $showItem = $this->getConf('pageToolsShow' . ucfirst($item->getType())); 10279cff245bSJames Collins if ( 10283a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 10293a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 10303a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === true)) 10319cff245bSJames Collins ) { 10323fd763a0SJames Collins $html .= '<li class="' . implode(' ', $classes) . '">'; 10339cff245bSJames Collins $html .= '<a href="' . $item->getLink() . '" class="' . $item->getType() . '" title="' . 10349cff245bSJames Collins $item->getTitle() . '"><div class="icon">' . inlineSVG($item->getSvg()) . 10359cff245bSJames Collins '</div><span class="a11y">' . $item->getLabel() . '</span></a>'; 10363fd763a0SJames Collins $html .= '</li>'; 10373fd763a0SJames Collins } 10389cff245bSJames Collins }//end foreach 10393fd763a0SJames Collins 10403fd763a0SJames Collins $html .= '</ul>'; 1041ab45ba71SJames Collins $html .= '</nav>'; 1042ab45ba71SJames Collins 10439cff245bSJames Collins if ($print === true) { 10449cff245bSJames Collins echo $html; 10459cff245bSJames Collins } 1046ab45ba71SJames Collins return $html; 1047ab45ba71SJames Collins } 1048ab45ba71SJames Collins 1049ab45ba71SJames Collins 1050a8eebd82SJames Collins /** 1051a8eebd82SJames Collins * Print or return the search bar 1052a8eebd82SJames Collins * 10539cff245bSJames Collins * @param boolean $print Print content. 1054a8eebd82SJames Collins * @return string contents of the search bar 1055a8eebd82SJames Collins */ 10569cff245bSJames Collins public function includeSearch(bool $print = true) 105710b40067Snomadjimbob { 10589cff245bSJames Collins global $lang, $ID, $ACT, $QUERY; 1059ab45ba71SJames Collins $html = ''; 1060ab45ba71SJames Collins 10619cff245bSJames Collins $html .= '<form class="mikio-search search" action="' . wl() . 10629cff245bSJames Collins '" accept-charset="utf-8" method="get" role="search">'; 1063a8eebd82SJames Collins $html .= '<input type="hidden" name="do" value="search">'; 1064a8eebd82SJames Collins $html .= '<input type="hidden" name="id" value="' . $ID . '">'; 1065c1cb9f15SChris MacMackin $html .= '<input name="q" '; 10669cff245bSJames Collins if ($this->getConf('searchUseTypeahead') === true) { 1067c1cb9f15SChris MacMackin $html .= 'class="search_typeahead" '; 1068c1cb9f15SChris MacMackin } 10699cff245bSJames Collins $html .= 'autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . 10703a385f2cSJames Collins ((strcasecmp($ACT, 'search') === 0) ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 1071a8eebd82SJames Collins $html .= '<button type="submit" title="' . $lang['btn_search'] . '">'; 10723a385f2cSJames Collins if (strcasecmp($this->getConf('searchButton'), 'icon') === 0) { 1073a8eebd82SJames Collins $html .= $this->mikioInlineIcon('search'); 1074ab45ba71SJames Collins } else { 1075ab45ba71SJames Collins $html .= $lang['btn_search']; 1076ab45ba71SJames Collins } 1077ab45ba71SJames Collins $html .= '</button>'; 1078ab45ba71SJames Collins $html .= '</form>'; 1079ab45ba71SJames Collins 10809cff245bSJames Collins if ($print === true) { 10819cff245bSJames Collins echo $html; 10829cff245bSJames Collins } 1083ab45ba71SJames Collins return $html; 1084ab45ba71SJames Collins } 1085ab45ba71SJames Collins 1086ab45ba71SJames Collins 1087a8eebd82SJames Collins /** 1088a8eebd82SJames Collins * Print or return content 1089a8eebd82SJames Collins * 10909cff245bSJames Collins * @param boolean $print Print content. 1091a8eebd82SJames Collins * @return string contents 1092a8eebd82SJames Collins */ 10939cff245bSJames Collins public function includeContent(bool $print = true) 109410b40067Snomadjimbob { 1095ab45ba71SJames Collins ob_start(); 10969cff245bSJames Collins tpl_content(false); 1097ab45ba71SJames Collins $html = ob_get_contents(); 1098ab45ba71SJames Collins ob_end_clean(); 1099ab45ba71SJames Collins 1100ab45ba71SJames Collins $html = $this->includeIcons($html); 1101ab45ba71SJames Collins $html = $this->parseContent($html); 1102ab45ba71SJames Collins 1103ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 1104ab45ba71SJames Collins 11059cff245bSJames Collins if ($this->getConf('heroTitle') === false) { 11069cff245bSJames Collins $html = '<div class="mikio-tags"></div>' . $html; 11079cff245bSJames Collins } 1108a8eebd82SJames Collins 1109a8eebd82SJames Collins $html = '<div class="mikio-article-content">' . $html . '</div>'; 1110a8eebd82SJames Collins 11119cff245bSJames Collins if ($print === true) { 11129cff245bSJames Collins echo $html; 11139cff245bSJames Collins } 1114ab45ba71SJames Collins return $html; 1115ab45ba71SJames Collins } 1116ab45ba71SJames Collins 1117a8eebd82SJames Collins /** 1118ab45ba71SJames Collins * Print or return footer 1119ab45ba71SJames Collins * 11209cff245bSJames Collins * @param boolean $print Print footer. 11219cff245bSJames Collins * @return string HTML string containing footer 1122ab45ba71SJames Collins */ 11239cff245bSJames Collins public function includeFooter(bool $print = true) 112410b40067Snomadjimbob { 1125ab45ba71SJames Collins global $ACT; 1126ab45ba71SJames Collins 1127ab45ba71SJames Collins $html = ''; 1128ab45ba71SJames Collins 1129ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 11309cff245bSJames Collins $html .= '<div class="doc">' . tpl_pageinfo(true) . '</div>'; 11319cff245bSJames Collins $html .= $this->includePage('footer', false); 1132ab45ba71SJames Collins 1133a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('footerCustomMenuText')); 1134ab45ba71SJames Collins 11359cff245bSJames Collins if ($this->getConf('footerSearch') === true) { 1136ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 11379cff245bSJames Collins $html .= $this->includeSearch(false); 1138ab45ba71SJames Collins $html .= '</div>'; 1139ab45ba71SJames Collins } 1140ab45ba71SJames Collins 1141a8eebd82SJames Collins $showPageTools = $this->getConf('pageToolsFooter'); 11429cff245bSJames Collins if ( 11433a385f2cSJames Collins strcasecmp($ACT, 'show') === 0 && (strcasecmp($showPageTools, 'always') === 0 || 11443a385f2cSJames Collins $this->userCanEdit() === true && strcasecmp($showPageTools, 'page editors') === 0) 11459cff245bSJames Collins ) { 11469cff245bSJames Collins $html .= $this->includePageTools(false); 11479cff245bSJames Collins } 1148ab45ba71SJames Collins 11499cff245bSJames Collins $meta['licenseType'] = ['multichoice', '_choices' => ['none', 'badge', 'button']]; 11509cff245bSJames Collins $meta['licenseImageOnly'] = ['onoff']; 1151ab45ba71SJames Collins 1152ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 11539cff245bSJames Collins if ($licenseType !== 'none') { 11549cff245bSJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), true, true); 1155ab45ba71SJames Collins } 1156ab45ba71SJames Collins 1157ab45ba71SJames Collins $html .= '</footer>'; 1158ab45ba71SJames Collins 11599cff245bSJames Collins if ($print === true) { 11609cff245bSJames Collins echo $html; 11619cff245bSJames Collins } 1162ab45ba71SJames Collins return $html; 1163ab45ba71SJames Collins } 1164ab45ba71SJames Collins 1165ab45ba71SJames Collins 1166a8eebd82SJames Collins /** 1167ab45ba71SJames Collins * Print or return breadcrumb trail 1168ab45ba71SJames Collins * 11699cff245bSJames Collins * @param boolean $print Print out trail. 11709cff245bSJames Collins * @param boolean $parse Parse trail before printing. 11719cff245bSJames Collins * @return string HTML string containing breadcrumbs 1172ab45ba71SJames Collins */ 11739cff245bSJames Collins public function includeBreadcrumbs(bool $print = true, bool $parse = true) 117410b40067Snomadjimbob { 1175a8eebd82SJames Collins global $conf, $ID, $lang, $ACT; 1176a8eebd82SJames Collins 11773a385f2cSJames Collins if ( 11783a385f2cSJames Collins $this->getConf('breadcrumbHideHome') === true && strcasecmp($ID, 'start') === 0 && 117995372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['breadcrumbs'] === 0 11803a385f2cSJames Collins ) { 11819cff245bSJames Collins return ''; 11829cff245bSJames Collins } 1183ab45ba71SJames Collins 1184ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 1185f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 11863a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 118795372bffSJames Collins if ($conf['breadcrumbs'] !== 0) { 11889cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === false && $this->getConf('breadcrumbSep') === false) { 1189ab45ba71SJames Collins ob_start(); 119075adba86SJames Collins tpl_breadcrumbs(); 1191ab45ba71SJames Collins $html .= ob_get_contents(); 1192ab45ba71SJames Collins ob_end_clean(); 1193ab45ba71SJames Collins } else { 1194ab45ba71SJames Collins $sep = '•'; 1195ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 1196ab45ba71SJames Collins 11979cff245bSJames Collins if ($this->getConf('breadcrumbSep') === true) { 1198ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 11999cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-sep', false); 1200ab45ba71SJames Collins 12019cff245bSJames Collins if ($img !== false) { 1202ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1203ab45ba71SJames Collins } 120447161538SJames Collins } 120547161538SJames Collins 12069cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === true) { 1207ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 12089cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-prefix', false); 1209ab45ba71SJames Collins 12109cff245bSJames Collins if ($img !== false) { 1211ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 1212ab45ba71SJames Collins } 1213ab45ba71SJames Collins } 1214ab45ba71SJames Collins 1215ab45ba71SJames Collins $crumbs = breadcrumbs(); 1216ab45ba71SJames Collins 1217ab45ba71SJames Collins $html .= '<ul>'; 12183a385f2cSJames Collins if (empty($prefix) === false) { 12199cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 12209cff245bSJames Collins } 1221ab45ba71SJames Collins 1222ab45ba71SJames Collins $last = count($crumbs); 1223ab45ba71SJames Collins $i = 0; 1224ab45ba71SJames Collins foreach ($crumbs as $id => $name) { 1225ab45ba71SJames Collins $i++; 122695372bffSJames Collins if ($i !== 1) { 1227ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 122895372bffSJames Collins } 12299cff245bSJames Collins $html .= '<li' . ($i === $last ? ' class="curid"' : '') . '>'; 12309cff245bSJames Collins $html .= tpl_pagelink($id, null, true); 1231ab45ba71SJames Collins $html .= '</li>'; 1232ab45ba71SJames Collins } 1233ab45ba71SJames Collins 1234ab45ba71SJames Collins $html .= '</ul>'; 12359cff245bSJames Collins }//end if 12369cff245bSJames Collins }//end if 12379cff245bSJames Collins }//end if 12383d11a778SJames Collins 12393d11a778SJames Collins $html .= '</div>'; 12403d11a778SJames Collins $html .= '</div>'; 12413d11a778SJames Collins 12429cff245bSJames Collins if ($parse === true) { 12439cff245bSJames Collins $html = $this->includeIcons($html); 12449cff245bSJames Collins } 12459cff245bSJames Collins if ($print === true) { 12469cff245bSJames Collins echo $html; 12479cff245bSJames Collins } 12483d11a778SJames Collins return $html; 12493d11a778SJames Collins } 12503d11a778SJames Collins 12513d11a778SJames Collins /** 12523d11a778SJames Collins * Print or return you are here trail 12533d11a778SJames Collins * 12549cff245bSJames Collins * @param boolean $print Print out trail. 12559cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12569cff245bSJames Collins * @return string HTML string containing breadcrumbs 12573d11a778SJames Collins */ 12589cff245bSJames Collins public function includeYouAreHere(bool $print = true, bool $parse = true) 12593d11a778SJames Collins { 12603d11a778SJames Collins global $conf, $ID, $lang, $ACT; 12613d11a778SJames Collins 12623a385f2cSJames Collins if ( 12633a385f2cSJames Collins $this->getConf('youarehereHideHome') === true && strcasecmp($ID, 'start') === 0 && 126495372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['youarehere'] === 0 12653a385f2cSJames Collins ) { 12669cff245bSJames Collins return ''; 12679cff245bSJames Collins } 12683d11a778SJames Collins 12693d11a778SJames Collins $html = '<div class="mikio-youarehere">'; 12703d11a778SJames Collins $html .= '<div class="mikio-container">'; 12713a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 127295372bffSJames Collins if ($conf['youarehere'] !== 0) { 12739cff245bSJames Collins if ($this->getConf('youareherePrefix') === false && $this->getConf('youarehereSep') === false) { 127495372bffSJames Collins $html .= '<div class="mikio-bcdw">'; 1275ab45ba71SJames Collins ob_start(); 127675adba86SJames Collins tpl_youarehere(); 1277ab45ba71SJames Collins $html .= ob_get_contents(); 1278ab45ba71SJames Collins ob_end_clean(); 127995372bffSJames Collins $html .= '</div>'; 1280ab45ba71SJames Collins } else { 1281ab45ba71SJames Collins $sep = ' » '; 1282ab45ba71SJames Collins $prefix = $lang['youarehere']; 1283ab45ba71SJames Collins 12849cff245bSJames Collins if ($this->getConf('youarehereSep') === true) { 12853d11a778SJames Collins $sep = $this->getConf('youarehereSepText'); 12869cff245bSJames Collins $img = $this->getMediaFile('youarehere-sep', false); 1287ab45ba71SJames Collins 12889cff245bSJames Collins if ($img !== false) { 1289ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1290ab45ba71SJames Collins } 129175adba86SJames Collins } 129275adba86SJames Collins 12939cff245bSJames Collins if ($this->getConf('youareherePrefix') === true) { 12943d11a778SJames Collins $prefix = $this->getConf('youareherePrefixText'); 12959cff245bSJames Collins $img = $this->getMediaFile('youarehere-prefix', false); 1296ab45ba71SJames Collins 12979cff245bSJames Collins if ($img !== false) { 1298ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 129975adba86SJames Collins } 130047161538SJames Collins } 130147161538SJames Collins 1302ab45ba71SJames Collins $html .= '<ul>'; 13033a385f2cSJames Collins if (empty($prefix) === false) { 13049cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 13059cff245bSJames Collins } 13069cff245bSJames Collins $html .= '<li>' . tpl_pagelink(':' . $conf['start'], null, true) . '</li>'; 1307ab45ba71SJames Collins 1308ab45ba71SJames Collins $parts = explode(':', $ID); 1309ab45ba71SJames Collins $count = count($parts); 1310ab45ba71SJames Collins 1311ab45ba71SJames Collins $part = ''; 13129cff245bSJames Collins for ($i = 0; $i < ($count - 1); $i++) { 1313ab45ba71SJames Collins $part .= $parts[$i] . ':'; 1314ab45ba71SJames Collins $page = $part; 13159cff245bSJames Collins if ($page === $conf['start']) { 13169cff245bSJames Collins continue; 13179cff245bSJames Collins } 1318ab45ba71SJames Collins 1319ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13209cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1321ab45ba71SJames Collins } 1322ab45ba71SJames Collins 1323ab45ba71SJames Collins resolve_pageid('', $page, $exists); 13249cff245bSJames Collins if ((isset($page) === true && $page === $part . $parts[$i]) === false) { 1325ab45ba71SJames Collins $page = $part . $parts[$i]; 13269cff245bSJames Collins if ($page !== $conf['start']) { 1327ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13289cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1329ab45ba71SJames Collins } 1330ab45ba71SJames Collins } 1331ab45ba71SJames Collins 1332ab45ba71SJames Collins $html .= '</ul>'; 13339cff245bSJames Collins }//end if 13349cff245bSJames Collins }//end if 1335ab45ba71SJames Collins 13363d11a778SJames Collins $showLast = $this->getConf('youarehereShowLast'); 13379cff245bSJames Collins if ($showLast !== 0) { 1338a8eebd82SJames Collins preg_match_all('/(<li[^>]*>.+?<\/li>)/', $html, $matches); 13399cff245bSJames Collins if (count($matches) > 0 && count($matches[0]) > (($showLast * 2) + 2)) { 1340a8eebd82SJames Collins $count = count($matches[0]); 1341a8eebd82SJames Collins $list = ''; 1342a8eebd82SJames Collins 1343a8eebd82SJames Collins // Show Home 1344a8eebd82SJames Collins $list .= $matches[0][0] . $matches[0][1]; 1345a8eebd82SJames Collins 1346a8eebd82SJames Collins $list .= '<li>...</li>'; 13479cff245bSJames Collins for ($i = ($count - ($showLast * 2)); $i <= $count; $i++) { 1348a8eebd82SJames Collins $list .= $matches[0][$i]; 1349a8eebd82SJames Collins } 1350a8eebd82SJames Collins 1351a8eebd82SJames Collins $html = preg_replace('/<ul>.*<\/ul>/', '<ul>' . $list . '</ul>', $html); 1352a8eebd82SJames Collins } 1353a8eebd82SJames Collins } 1354a8eebd82SJames Collins 13553d11a778SJames Collins switch ($this->getConf('youarehereHome')) { 1356a8eebd82SJames Collins case 'none': 1357a8eebd82SJames Collins $html = preg_replace('/<li[^>]*>.+?<\/li>/', '', $html, 2); 1358a8eebd82SJames Collins break; 1359a8eebd82SJames Collins case 'home': 1360a8eebd82SJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . tpl_getlang('home') . '$3', $html, 1); 1361a8eebd82SJames Collins break; 1362a8eebd82SJames Collins case 'icon': 13639cff245bSJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . 13649cff245bSJames Collins $this->mikioInlineIcon('home') . '$3', $html, 1); 1365a8eebd82SJames Collins break; 1366a8eebd82SJames Collins } 1367a8eebd82SJames Collins } else { 1368a8eebd82SJames Collins $html .= '≪ '; 13699cff245bSJames Collins if (isset($_GET['page']) === true) { 13709cff245bSJames Collins $html .= '<a href="' . wl($ID, ['do' => $ACT]) . '">Back</a> / '; 1371a8eebd82SJames Collins } 13724057121fSJames Collins $html .= '<a href="' . wl($ID) . '">View Page</a>'; 13739cff245bSJames Collins }//end if 13749cff245bSJames Collins 13759cff245bSJames Collins $html .= '</div>'; 13769cff245bSJames Collins $html .= '</div>'; 13779cff245bSJames Collins 13789cff245bSJames Collins if ($parse === true) { 13799cff245bSJames Collins $html = $this->includeIcons($html); 1380a8eebd82SJames Collins } 13819cff245bSJames Collins if ($print === true) { 13829cff245bSJames Collins echo $html; 13839cff245bSJames Collins } 1384ab45ba71SJames Collins return $html; 1385ab45ba71SJames Collins } 1386ab45ba71SJames Collins 13871785fc73SJames Collins /** 13881785fc73SJames Collins * Get Page Title 13899cff245bSJames Collins * 13909cff245bSJames Collins * @return string page title 13911785fc73SJames Collins */ 139210b40067Snomadjimbob public function parsePageTitle() 139310b40067Snomadjimbob { 13942060e56cSJames Collins global $ID; 13952060e56cSJames Collins 13962060e56cSJames Collins $title = p_get_first_heading($ID); 13979cff245bSJames Collins if (strlen($title) <= 0) { 13989cff245bSJames Collins $title = tpl_pagetitle(null, true); 13999cff245bSJames Collins } 14001785fc73SJames Collins $title = $this->includeIcons($title); 14011785fc73SJames Collins 14021785fc73SJames Collins return $title; 14031785fc73SJames Collins } 14041785fc73SJames Collins 1405ab45ba71SJames Collins 140675adba86SJames Collins /** 1407a8eebd82SJames Collins * Print or return hero block 140875adba86SJames Collins * 14099cff245bSJames Collins * @param boolean $print Print content. 1410a8eebd82SJames Collins * @return string contents of hero 141175adba86SJames Collins */ 14129cff245bSJames Collins public function includeHero(bool $print = true) 141310b40067Snomadjimbob { 1414a8eebd82SJames Collins $html = ''; 141547161538SJames Collins 14169cff245bSJames Collins if ($this->getConf('heroTitle') === true) { 1417a8eebd82SJames Collins $html .= '<div class="mikio-hero">'; 1418f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 1419a8eebd82SJames Collins $html .= '<div class="mikio-hero-text">'; 14203a385f2cSJames Collins if (strcasecmp($this->getConf('youareherePosition'), 'hero') === 0) { 14219cff245bSJames Collins $html .= $this->includeYouAreHere(false); 14229cff245bSJames Collins } 14233a385f2cSJames Collins if (strcasecmp($this->getConf('breadcrumbPosition'), 'hero') === 0) { 14249cff245bSJames Collins $html .= $this->includeBreadcrumbs(false); 14259cff245bSJames Collins } 1426ab45ba71SJames Collins 1427a8eebd82SJames Collins $html .= '<h1 class="mikio-hero-title">'; 14281785fc73SJames Collins $html .= $this->parsePageTitle(); // No idea why this requires a blank space afterwards to work? 1429a8eebd82SJames Collins $html .= '</h1>'; 1430a8eebd82SJames Collins $html .= '<h2 class="mikio-hero-subtitle"></h2>'; 1431a8eebd82SJames Collins $html .= '</div>'; 143247161538SJames Collins 14339cff245bSJames Collins $hero_image = $this->getMediaFile('hero', true, $this->getConf('heroImagePropagation', true)); 1434a8eebd82SJames Collins $hero_image_resize_class = ''; 14353a385f2cSJames Collins if (empty($hero_image) === false) { 1436a8eebd82SJames Collins $hero_image = ' style="background-image:url(\'' . $hero_image . '\');"'; 1437a8eebd82SJames Collins $hero_image_resize_class = ' mikio-hero-image-resize'; 143847161538SJames Collins } 1439a8eebd82SJames Collins 14409cff245bSJames Collins $html .= '<div class="mikio-hero-image' . $hero_image_resize_class . '"' . $hero_image . 14419cff245bSJames Collins '><div class="mikio-tags"></div></div>'; 1442a8eebd82SJames Collins 1443a8eebd82SJames Collins $html .= '</div>'; 1444f8039bf2SJames Collins $html .= '</div>'; 14459cff245bSJames Collins }//end if 14469cff245bSJames Collins 14479cff245bSJames Collins if ($print === true) { 14489cff245bSJames Collins echo $html; 144975adba86SJames Collins } 1450a8eebd82SJames Collins 1451a8eebd82SJames Collins return $html; 145275adba86SJames Collins } 145375adba86SJames Collins 145475adba86SJames Collins 145575adba86SJames Collins /** 1456a8eebd82SJames Collins * Print or return out TOC 145775adba86SJames Collins * 14589cff245bSJames Collins * @param boolean $print Print TOC. 14599cff245bSJames Collins * @param boolean $parse Parse icons. 1460a8eebd82SJames Collins * @return string contents of TOC 146175adba86SJames Collins */ 14629cff245bSJames Collins public function includeTOC(bool $print = true, bool $parse = true) 146310b40067Snomadjimbob { 1464ab45ba71SJames Collins $html = ''; 14652b4583abSJames Collins 1466ab45ba71SJames Collins $tocHtml = tpl_toc(true); 1467ab45ba71SJames Collins 14683a385f2cSJames Collins if (empty($tocHtml) === false) { 1469f65a4e5eSJames Collins $tocHtml = preg_replace( 1470f65a4e5eSJames Collins '/(<h3.+?toggle.+?>)(.+?)<\/h3>/', 1471f65a4e5eSJames Collins '$1' . 1472f65a4e5eSJames Collins $this->mikioInlineIcon('hamburger', 'hamburger') . '$2' . 1473f65a4e5eSJames Collins $this->mikioInlineIcon('down-arrow', 'down-arrow') . '</h3>', 1474f65a4e5eSJames Collins $tocHtml 1475f65a4e5eSJames Collins ); 1476ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 1477a8eebd82SJames Collins $tocHtml = preg_replace('/<ul.*>\s*<\/ul>\s*/', '', $tocHtml); 1478ab45ba71SJames Collins 1479ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 1480ab45ba71SJames Collins $html .= $tocHtml; 1481ab45ba71SJames Collins $html .= '</div>'; 14822b4583abSJames Collins } 14832b4583abSJames Collins 14849cff245bSJames Collins if ($parse === true) { 14859cff245bSJames Collins $html = $this->includeIcons($html); 14869cff245bSJames Collins } 14879cff245bSJames Collins 14889cff245bSJames Collins if ($print === true) { 1489ab45ba71SJames Collins echo $html; 1490ab45ba71SJames Collins } 1491ab45ba71SJames Collins 14929cff245bSJames Collins return $html; 14939cff245bSJames Collins } 14949cff245bSJames Collins 1495ab45ba71SJames Collins 1496a8eebd82SJames Collins /** 1497ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 1498ab45ba71SJames Collins * 14999cff245bSJames Collins * @param string $str Content to parse. 1500ab45ba71SJames Collins * @return string parsed string 1501ab45ba71SJames Collins */ 15029cff245bSJames Collins public function includeIcons(string $str) 150310b40067Snomadjimbob { 1504ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 1505ab45ba71SJames Collins 1506ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 15073a385f2cSJames Collins if (empty($iconTag) === true) { 15089cff245bSJames Collins return $str; 15099cff245bSJames Collins } 1510ab45ba71SJames Collins 15119cff245bSJames Collins if ( 15129cff245bSJames Collins in_array($ACT, ['show', 'showtag', 'revisions', 'index', 'preview']) === true || 15133a385f2cSJames Collins strcasecmp($ACT, 'admin') === 0 && count($MIKIO_ICONS) > 0 15149cff245bSJames Collins ) { 1515a2005a27SJames Collins $content = $str; 1516a2005a27SJames Collins $preview = null; 1517a2005a27SJames Collins 15183a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15199cff245bSJames Collins $html = new \simple_html_dom(); 1520a2005a27SJames Collins $html->stripRNAttrValues = false; 1521a2005a27SJames Collins $html->load($str, true, false); 1522a2005a27SJames Collins 1523a2005a27SJames Collins $preview = $html->find('div.preview'); 15249cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1525a2005a27SJames Collins $content = $preview[0]->innertext; 1526a2005a27SJames Collins } 1527a2005a27SJames Collins } 1528a2005a27SJames Collins 15291785fc73SJames Collins $page_regex = '/(.*)/'; 15309cff245bSJames Collins if (stripos($str, '<pre') !== false) { 15311785fc73SJames Collins $page_regex = '/<(?!pre|\/).*?>(.*)[^<]*/'; 15321785fc73SJames Collins } 15331785fc73SJames Collins 15341785fc73SJames Collins $content = preg_replace_callback($page_regex, function ($icons) { 1535a2005a27SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 1536a2005a27SJames Collins 153710b40067Snomadjimbob return preg_replace_callback( 153810b40067Snomadjimbob '/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 1539ab45ba71SJames Collins function ($matches) { 1540ab45ba71SJames Collins global $MIKIO_ICONS; 1541ab45ba71SJames Collins 1542ab45ba71SJames Collins $s = $matches[0]; 1543ab45ba71SJames Collins 1544ab45ba71SJames Collins if (count($MIKIO_ICONS) > 0) { 1545ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 1546ab45ba71SJames Collins 1547ab45ba71SJames Collins if (count($matches) > 1) { 1548ab45ba71SJames Collins $e = explode(' ', $matches[1]); 1549ab45ba71SJames Collins 1550ab45ba71SJames Collins if (count($e) > 1) { 1551ab45ba71SJames Collins foreach ($MIKIO_ICONS as $iconItem) { 15529cff245bSJames Collins if (strcasecmp($iconItem['name'], $e[0]) === 0) { 1553ab45ba71SJames Collins $icon = $iconItem; 1554ab45ba71SJames Collins 1555ab45ba71SJames Collins $s = $icon['insert']; 1556ab45ba71SJames Collins for ($i = 1; $i < 9; $i++) { 15571cdedf28SJames Collins if (count($e) < $i || empty($e[$i]) === true) { 15589cff245bSJames Collins if (isset($icon['$' . $i]) === true) { 1559ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$' . $i], $s); 1560ab45ba71SJames Collins } 1561ab45ba71SJames Collins } else { 1562ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 1563ab45ba71SJames Collins } 1564ab45ba71SJames Collins } 1565ab45ba71SJames Collins 1566ab45ba71SJames Collins $dir = ''; 15679cff245bSJames Collins if (isset($icon['dir']) === true) { 15689cff245bSJames Collins $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 15699cff245bSJames Collins } 1570ab45ba71SJames Collins 1571ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 1572ab45ba71SJames Collins 1573ab45ba71SJames Collins break; 15749cff245bSJames Collins }//end if 15759cff245bSJames Collins }//end foreach 1576ab45ba71SJames Collins } else { 1577ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 15789cff245bSJames Collins }//end if 15799cff245bSJames Collins }//end if 15809cff245bSJames Collins }//end if 158175adba86SJames Collins 1582ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 15839cff245bSJames Collins if ($count === 0) { 1584ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 1585ab45ba71SJames Collins } 1586ab45ba71SJames Collins 1587ab45ba71SJames Collins return $s; 1588ab45ba71SJames Collins }, 158910b40067Snomadjimbob $icons[0] 159010b40067Snomadjimbob ); 1591a2005a27SJames Collins }, $content); 1592a2005a27SJames Collins 15933a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15949cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1595a2005a27SJames Collins $preview[0]->innertext = $content; 1596a2005a27SJames Collins } 1597a2005a27SJames Collins 1598a2005a27SJames Collins $str = $html->save(); 1599a2005a27SJames Collins $html->clear(); 1600a2005a27SJames Collins unset($html); 1601a2005a27SJames Collins } else { 1602a2005a27SJames Collins $str = $content; 1603a2005a27SJames Collins } 16049cff245bSJames Collins }//end if 1605ab45ba71SJames Collins 1606ab45ba71SJames Collins return $str; 1607ab45ba71SJames Collins } 160847161538SJames Collins 1609c165b184SJames Collins /** 1610a8eebd82SJames Collins * Parse HTML for theme 1611c165b184SJames Collins * 16129cff245bSJames Collins * @param string $content HTML content to parse. 1613a8eebd82SJames Collins * @return string Parsed content 1614c165b184SJames Collins */ 16159cff245bSJames Collins public function parseContent(string $content) 161610b40067Snomadjimbob { 1617ab45ba71SJames Collins global $INPUT, $ACT; 1618ab45ba71SJames Collins 1619a8eebd82SJames Collins // Add Mikio Section titles 16203a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 16219cff245bSJames Collins $admin_sections = [ 1622ab45ba71SJames Collins // Section Insert Before Icon 16239cff245bSJames Collins 'navbar' => ['navbarUseTitleIcon', ''], 16249cff245bSJames Collins 'search' => ['searchButton', ''], 16259cff245bSJames Collins 'hero' => ['heroTitle', ''], 16269cff245bSJames Collins 'tags' => ['tagsConsolidate', ''], 16279cff245bSJames Collins 'breadcrumb' => ['breadcrumbHideHome', ''], 16289cff245bSJames Collins 'youarehere' => ['youarehereHideHome', ''], 16299cff245bSJames Collins 'sidebar' => ['sidebarShowLeft', ''], 16309cff245bSJames Collins 'toc' => ['tocFull', ''], 16319cff245bSJames Collins 'pagetools' => ['pageToolsFloating', ''], 16329cff245bSJames Collins 'footer' => ['footerCustomMenuText', ''], 16339cff245bSJames Collins 'license' => ['licenseType', ''], 16349cff245bSJames Collins 'acl' => ['includePageUseACL', ''], 16359cff245bSJames Collins 'sticky' => ['stickyTopHeader', ''], 16369cff245bSJames Collins ]; 1637ab45ba71SJames Collins 1638ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 1639ab45ba71SJames Collins $search = $items[0]; 1640ab45ba71SJames Collins $icon = $items[1]; 1641ab45ba71SJames Collins 164210b40067Snomadjimbob $content = preg_replace( 1643adf52ebbSJames Collins '/<tr(.*)>\s*<td class="label">\s*<span class="outkey">(tpl»mikio»' . $search . ')<\/span>/', 16449cff245bSJames Collins '<tr$1><td class="mikio-config-table-header" colspan="2">' . $this->mikioInlineIcon($icon) . 16459cff245bSJames Collins tpl_getLang('config_' . $section) . 16469cff245bSJames Collins '</td></tr><tr class="default"><td class="label"><span class="outkey">tpl»mikio»' . 16479cff245bSJames Collins $search . '</span>', 164810b40067Snomadjimbob $content 164910b40067Snomadjimbob ); 1650ab45ba71SJames Collins } 1651bb5a3dd1SJames Collins } elseif (strcasecmp($INPUT->str('page'), 'styling') === 0) { 1652ad182e6dSnomadjimbob $mikioPluginMissing = true; 1653ad182e6dSnomadjimbob /* Hide plugin fields if not installed */ 1654*9ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 1655ad182e6dSnomadjimbob $mikioPluginMissing = false; 1656ad182e6dSnomadjimbob } 1657ad182e6dSnomadjimbob 1658cee81679SJames Collins $style_headers = [ 1659f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__text_'], 1660f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__code_'], 1661f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__control_'], 1662f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__topheader_'], 1663f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__navbar_'], 1664f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__subnavbar_'], 1665f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__tag_background_color_'], 1666f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__breadcrumb_'], 1667f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__hero_'], 1668f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__sidebar_'], 1669f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__content_'], 1670f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__toc_'], 1671f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__pagetools_'], 1672f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__footer_'], 1673f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__table_'], 1674f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__dropdown_'], 1675f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__section_edit_'], 1676f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__tree_'], 1677f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__tab_'], 1678ad182e6dSnomadjimbob ['title' => 'Mikio Plugin', 'starts_with' => '__plugin_', 'heading' => 'h2', 1679*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1680*9ffe9161Snomadjimbob ], 1681ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_primary_', 'hidden' => $mikioPluginMissing], 1682ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_secondary_', 1683*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1684*9ffe9161Snomadjimbob ], 1685ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_success_', 'hidden' => $mikioPluginMissing], 1686ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_danger_', 'hidden' => $mikioPluginMissing], 1687ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_warning_', 'hidden' => $mikioPluginMissing], 1688ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_info_', 'hidden' => $mikioPluginMissing], 1689ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_light_', 'hidden' => $mikioPluginMissing], 1690ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_dark_', 'hidden' => $mikioPluginMissing], 1691ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_link_', 'hidden' => $mikioPluginMissing], 1692ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_carousel_', 'hidden' => $mikioPluginMissing], 1693ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_steps_', 'hidden' => $mikioPluginMissing], 1694ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_tabgroup_', 'hidden' => $mikioPluginMissing], 1695ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_tooltip_', 'hidden' => $mikioPluginMissing], 1696cee81679SJames Collins ['title' => 'Dark Mode', 'starts_with' => '__darkmode_', 'heading' => 'h2'], 1697f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__darkmode_text_'], 1698f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__darkmode_code_'], 1699f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__darkmode_control_'], 1700f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__darkmode_topheader_'], 1701f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__darkmode_navbar_'], 1702f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__darkmode_subnavbar_'], 1703f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__darkmode_tag_background_color_'], 1704f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__darkmode_breadcrumb_'], 1705f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__darkmode_hero_'], 1706f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__darkmode_sidebar_'], 1707f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__darkmode_content_'], 1708f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__darkmode_toc_'], 1709f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__darkmode_pagetools_'], 1710f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__darkmode_footer_'], 1711f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__darkmode_table_'], 1712f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__darkmode_dropdown_'], 1713f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__darkmode_section_edit_'], 1714f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__darkmode_tree_'], 1715f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__darkmode_tab_'], 1716ad182e6dSnomadjimbob ['title' => 'Mikio Plugin (Dark mode)', 'starts_with' => '__plugin_darkmode_', 'heading' => 'h2', 1717*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1718*9ffe9161Snomadjimbob ], 1719ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_darkmode_primary_', 1720*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1721*9ffe9161Snomadjimbob ], 1722ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_darkmode_secondary_', 1723*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1724*9ffe9161Snomadjimbob ], 1725ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_darkmode_success_', 1726*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1727*9ffe9161Snomadjimbob ], 1728ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_darkmode_danger_', 1729*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1730*9ffe9161Snomadjimbob ], 1731ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_darkmode_warning_', 1732*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1733*9ffe9161Snomadjimbob ], 1734ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_darkmode_info_', 1735*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1736*9ffe9161Snomadjimbob ], 1737ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_darkmode_light_', 1738*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1739*9ffe9161Snomadjimbob ], 1740ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_darkmode_dark_', 1741*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1742*9ffe9161Snomadjimbob ], 1743ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_darkmode_link_', 1744*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1745*9ffe9161Snomadjimbob ], 1746ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_darkmode_carousel_', 1747*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1748*9ffe9161Snomadjimbob ], 1749ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_darkmode_steps_', 'hidden' => $mikioPluginMissing], 1750ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_darkmode_tabgroup_', 1751*9ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 1752*9ffe9161Snomadjimbob ], 1753ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_darkmode_tooltip_', 'hidden' => $mikioPluginMissing], 1754cee81679SJames Collins ]; 1755cee81679SJames Collins 1756cee81679SJames Collins foreach ($style_headers as $header) { 1757cee81679SJames Collins if (array_key_exists('heading', $header) === false) { 1758cee81679SJames Collins $header['heading'] = 'h3'; 1759cee81679SJames Collins } 1760cee81679SJames Collins 1761ad182e6dSnomadjimbob if (array_key_exists('hidden', $header) === false) { 1762ad182e6dSnomadjimbob $header['hidden'] = false; 1763ad182e6dSnomadjimbob } 1764ad182e6dSnomadjimbob 17651244e3ceSJames Collins $content = preg_replace( 1766f65a4e5eSJames Collins '/(<tr>\s*<td>\s*<label for="tpl__' . $header['starts_with'] . '.+?<\/tr>)/s', 1767*9ffe9161Snomadjimbob '</tbody></table><' . $header['heading'] . ' style="display:' . 1768*9ffe9161Snomadjimbob ($header['hidden'] === true ? 'none' : 'block') . '">' . 1769*9ffe9161Snomadjimbob $header['title'] . '</' . $header['heading'] . '> 1770ad182e6dSnomadjimbob <table style="display:' . ($header['hidden'] === true ? 'none' : 'table') . '"><tbody>$1', 17711244e3ceSJames Collins $content, 17721244e3ceSJames Collins 1 17731244e3ceSJames Collins ); 1774cee81679SJames Collins } 1775f65a4e5eSJames Collins 1776f65a4e5eSJames Collins $content = preg_replace('/type="color"/', 'type="text"', $content); 1777bb5a3dd1SJames Collins }//end if 1778ab45ba71SJames Collins 17793a385f2cSJames Collins if (strcasecmp($ACT, 'admin') === 0 && isset($_GET['page']) === false) { 1780a8eebd82SJames Collins $content = preg_replace('/(<ul.*?>.*?)<\/ul>.*?<ul.*?>(.*?<\/ul>)/s', '$1$2', $content); 1781a8eebd82SJames Collins } 1782ab45ba71SJames Collins 1783a8eebd82SJames Collins // Page Revisions - Table Fix 17849cff245bSJames Collins if (strpos($content, 'id="page__revisions"') !== false) { 17859cff245bSJames Collins $content = preg_replace( 17869cff245bSJames Collins '/(<span class="sum">\s.*<\/span>\s.*<span class="user">\s.*<\/span>)/', 17879cff245bSJames Collins '<span>$1</span>', 17889cff245bSJames Collins $content 17899cff245bSJames Collins ); 1790a8eebd82SJames Collins } 1791ab45ba71SJames Collins 17929cff245bSJames Collins $html = new \simple_html_dom(); 1793bc1032d9SJames Collins $html->stripRNAttrValues = false; 1794c165b184SJames Collins $html->load($content, true, false); 1795c165b184SJames Collins 17969cff245bSJames Collins if ($html === false) { 17979cff245bSJames Collins return $content; 17989cff245bSJames Collins } 1799ab45ba71SJames Collins 1800ab45ba71SJames Collins /* Buttons */ 1801ab45ba71SJames Collins foreach ($html->find('#config__manager button') as $node) { 1802ab45ba71SJames Collins $c = explode(' ', $node->class); 18039cff245bSJames Collins if (in_array('mikio-button', $c) === false) { 18049cff245bSJames Collins $c[] = 'mikio-button'; 18059cff245bSJames Collins } 1806ab45ba71SJames Collins $node->class = implode(' ', $c); 1807c165b184SJames Collins } 1808c165b184SJames Collins 1809ab45ba71SJames Collins 1810ab45ba71SJames Collins /* Buttons - Primary */ 1811ab45ba71SJames Collins foreach ($html->find('#config__manager [type=submit]') as $node) { 1812ab45ba71SJames Collins $c = explode(' ', $node->class); 18139cff245bSJames Collins if (in_array('mikio-primary', $c) === false) { 18149cff245bSJames Collins $c[] = 'mikio-primary'; 18159cff245bSJames Collins } 1816ab45ba71SJames Collins $node->class = implode(' ', $c); 1817ab45ba71SJames Collins } 1818ab45ba71SJames Collins 1819a8eebd82SJames Collins /* Hide page title if hero is enabled */ 18209cff245bSJames Collins if ($this->getConf('heroTitle') === true && $ACT !== 'preview') { 18211785fc73SJames Collins $pageTitle = $this->parsePageTitle(); 182247161538SJames Collins 182347161538SJames Collins foreach ($html->find('h1,h2,h3,h4') as $elm) { 18249cff245bSJames Collins if ($elm->innertext === $pageTitle) { 1825a8eebd82SJames Collins // $elm->innertext = ''; 1826a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1827a8eebd82SJames Collins 182847161538SJames Collins break; 182947161538SJames Collins } 183047161538SJames Collins } 183147161538SJames Collins } 1832c165b184SJames Collins 1833a8eebd82SJames Collins /* Hero subtitle */ 18342b4583abSJames Collins foreach ($html->find('p') as $elm) { 18352b4583abSJames Collins $i = stripos($elm->innertext, '~~hero-subtitle'); 18362b4583abSJames Collins if ($i !== false) { 18379cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 18382b4583abSJames Collins if ($j !== false) { 18399cff245bSJames Collins if ($j > ($i + 16)) { 18409cff245bSJames Collins $subtitle = substr($elm->innertext, ($i + 16), ($j - $i - 16)); 1841a8eebd82SJames Collins $this->footerScript['hero-subtitle'] = 'mikio.setHeroSubTitle(\'' . $subtitle . '\')'; 1842a8eebd82SJames Collins 1843a8eebd82SJames Collins // $elm->innertext = substr($elm->innertext, 0, $i + 2) . substr($elm->innertext, $j + 2); 1844a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-subtitle (.+?)~~.*/ui', '', $elm->innertext); 18452b4583abSJames Collins } 18462b4583abSJames Collins 18472b4583abSJames Collins break; 18482b4583abSJames Collins } 18492b4583abSJames Collins } 18502b4583abSJames Collins } 18512b4583abSJames Collins 1852a8eebd82SJames Collins /* Hero image */ 1853a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1854a8eebd82SJames Collins $image = ''; 1855a8eebd82SJames Collins preg_match('/~~hero-image (.+?)~~(?!.?")/ui', $elm->innertext, $matches); 1856a8eebd82SJames Collins if (count($matches) > 0) { 1857a8eebd82SJames Collins preg_match('/<img.*src="(.+?)"/ui', $matches[1], $imageTagMatches); 1858a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1859a8eebd82SJames Collins $image = $imageTagMatches[1]; 1860a8eebd82SJames Collins } else { 1861a8eebd82SJames Collins preg_match('/<a.+?>(.+?)[~<]/ui', $matches[1], $imageTagMatches); 1862a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1863a8eebd82SJames Collins $image = $imageTagMatches[1]; 1864a8eebd82SJames Collins } else { 1865a8eebd82SJames Collins $image = strip_tags($matches[1]); 18669cff245bSJames Collins if (stripos($image, ':') === false) { 18679cff245bSJames Collins $image = str_replace(['{', '}'], '', $image); 1868a8eebd82SJames Collins $i = stripos($image, '?'); 18699cff245bSJames Collins if ($i !== false) { 1870a8eebd82SJames Collins $image = substr($image, 0, $i); 1871c165b184SJames Collins } 1872c165b184SJames Collins 1873a8eebd82SJames Collins $image = ml($image, '', true, '', false); 1874ab45ba71SJames Collins } 1875ab45ba71SJames Collins } 1876ab45ba71SJames Collins } 1877ab45ba71SJames Collins 1878a8eebd82SJames Collins $this->footerScript['hero-image'] = 'mikio.setHeroImage(\'' . $image . '\')'; 1879a8eebd82SJames Collins 1880a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-image (.+?)~~.*/ui', '', $elm->innertext); 18819cff245bSJames Collins }//end if 18829cff245bSJames Collins }//end foreach 1883ab45ba71SJames Collins 18849cff245bSJames Collins /* Hero colors - ~~hero-colors [background-color] [hero-title-color] [hero-subtitle-color] 18859cff245bSJames Collins [breadcrumb-text-color] [breadcrumb-hover-color] (use 'initial' for original color) */ 1886a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1887a8eebd82SJames Collins $i = stripos($elm->innertext, '~~hero-colors'); 1888a8eebd82SJames Collins if ($i !== false) { 18899cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 1890a8eebd82SJames Collins if ($j !== false) { 18919cff245bSJames Collins if ($j > ($i + 14)) { 18929cff245bSJames Collins $color = substr($elm->innertext, ($i + 14), ($j - $i - 14)); 1893a8eebd82SJames Collins $this->footerScript['hero-colors'] = 'mikio.setHeroColor(\'' . $color . '\')'; 1894ab45ba71SJames Collins 1895a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-colors (.+?)~~.*/ui', '', $elm->innertext); 1896ab45ba71SJames Collins } 1897ab45ba71SJames Collins 1898a8eebd82SJames Collins break; 1899ab45ba71SJames Collins } 1900ab45ba71SJames Collins } 1901ab45ba71SJames Collins } 1902ab45ba71SJames Collins 190396ec8e1eSJames Collins /* Hide parts - ~~hide-parts [parts]~~ */ 190496ec8e1eSJames Collins foreach ($html->find('p') as $elm) { 190596ec8e1eSJames Collins $i = stripos($elm->innertext, '~~hide-parts'); 190696ec8e1eSJames Collins if ($i !== false) { 19079cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 190896ec8e1eSJames Collins if ($j !== false) { 19099cff245bSJames Collins if ($j > ($i + 13)) { 19109cff245bSJames Collins $parts = explode(' ', substr($elm->innertext, ($i + 13), ($j - $i - 13))); 191196ec8e1eSJames Collins $script = ''; 191296ec8e1eSJames Collins 191396ec8e1eSJames Collins foreach ($parts as $part) { 191496ec8e1eSJames Collins // $part = trim($part); 191596ec8e1eSJames Collins if (strlen($part) > 0) { 191696ec8e1eSJames Collins $script .= 'mikio.hidePart(\'' . $part . '\');'; 191796ec8e1eSJames Collins } 191896ec8e1eSJames Collins } 191996ec8e1eSJames Collins 192096ec8e1eSJames Collins if (strlen($script) > 0) { 192196ec8e1eSJames Collins $this->footerScript['hide-parts'] = $script; 192296ec8e1eSJames Collins } 192396ec8e1eSJames Collins 192496ec8e1eSJames Collins $elm->innertext = preg_replace('/~~hide-parts (.+?)~~.*/ui', '', $elm->innertext); 192596ec8e1eSJames Collins } 192696ec8e1eSJames Collins 192796ec8e1eSJames Collins break; 19289cff245bSJames Collins }//end if 19299cff245bSJames Collins }//end if 19309cff245bSJames Collins }//end foreach 193196ec8e1eSJames Collins 193296ec8e1eSJames Collins 1933a8eebd82SJames Collins /* Page Tags (tag plugin) */ 19349cff245bSJames Collins if ($this->getConf('tagsConsolidate') === true) { 1935a8eebd82SJames Collins $tags = ''; 1936a8eebd82SJames Collins foreach ($html->find('div.tags a') as $elm) { 1937a8eebd82SJames Collins $tags .= $elm->outertext; 1938a8eebd82SJames Collins } 1939a8eebd82SJames Collins 1940a8eebd82SJames Collins foreach ($html->find('div.tags') as $elm) { 1941a8eebd82SJames Collins $elm->innertext = ''; 1942a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1943a8eebd82SJames Collins } 1944a8eebd82SJames Collins 19453a385f2cSJames Collins if (empty($tags) === false) { 1946a8eebd82SJames Collins $this->footerScript['tags'] = 'mikio.setTags(\'' . $tags . '\')'; 1947a8eebd82SJames Collins } 1948ab45ba71SJames Collins } 1949ab45ba71SJames Collins 1950ab45ba71SJames Collins // Configuration Manager 19513a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 1952ab45ba71SJames Collins // Additional save buttons 1953ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1954ab45ba71SJames Collins $saveButtons = ''; 1955ab45ba71SJames Collins 1956ab45ba71SJames Collins foreach ($cm->find('p') as $elm) { 1957ab45ba71SJames Collins $saveButtons = $elm->outertext; 1958a8eebd82SJames Collins $saveButtons = str_replace('<p>', '<p style="text-align:right">', $saveButtons); 1959ab45ba71SJames Collins $elm->outertext = ''; 1960ab45ba71SJames Collins } 1961ab45ba71SJames Collins 1962ab45ba71SJames Collins foreach ($cm->find('fieldset') as $elm) { 1963ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1964ab45ba71SJames Collins } 1965ab45ba71SJames Collins } 1966ab45ba71SJames Collins } 1967ab45ba71SJames Collins 1968ab45ba71SJames Collins $content = $html->save(); 1969c165b184SJames Collins $html->clear(); 1970c165b184SJames Collins unset($html); 1971c165b184SJames Collins 1972c165b184SJames Collins return $content; 1973c165b184SJames Collins } 19742b4583abSJames Collins 19752b4583abSJames Collins 1976a8eebd82SJames Collins /** 1977a8eebd82SJames Collins * Get DokuWiki namespace/page/URI as link 1978a8eebd82SJames Collins * 19799cff245bSJames Collins * @param string $str String to parse. 19809cff245bSJames Collins * @return string parsed URI 1981a8eebd82SJames Collins */ 19829cff245bSJames Collins public function getLink(string $str) 198310b40067Snomadjimbob { 19842b4583abSJames Collins $i = strpos($str, '://'); 19859cff245bSJames Collins if ($i !== false) { 19869cff245bSJames Collins return $str; 19879cff245bSJames Collins } 19882b4583abSJames Collins 19892b4583abSJames Collins return wl($str); 19902b4583abSJames Collins } 1991ab45ba71SJames Collins 1992ab45ba71SJames Collins 1993a8eebd82SJames Collins /** 1994a8eebd82SJames Collins * Check if the user can edit current namespace/page 1995a8eebd82SJames Collins * 1996a8eebd82SJames Collins * @return boolean user can edit 1997a8eebd82SJames Collins */ 199810b40067Snomadjimbob public function userCanEdit() 199910b40067Snomadjimbob { 2000ab45ba71SJames Collins global $INFO; 2001ab45ba71SJames Collins global $ID; 2002ab45ba71SJames Collins 2003ab45ba71SJames Collins $wiki_file = wikiFN($ID); 20049cff245bSJames Collins if (@file_exists($wiki_file) === false) { 20059cff245bSJames Collins return true; 20069cff245bSJames Collins } 20079cff245bSJames Collins if ($INFO['isadmin'] === true || $INFO['ismanager'] === true) { 20089cff245bSJames Collins return true; 20099cff245bSJames Collins } 2010a8eebd82SJames Collins // $meta_file = metaFN($ID, '.meta'); 20119cff245bSJames Collins if ($INFO['meta']['user'] === false) { 20129cff245bSJames Collins return true; 20139cff245bSJames Collins } 20149cff245bSJames Collins if ($INFO['client'] === $INFO['meta']['user']) { 20159cff245bSJames Collins return true; 20169cff245bSJames Collins } 2017ab45ba71SJames Collins 2018ab45ba71SJames Collins return false; 2019c165b184SJames Collins } 202047161538SJames Collins 202147161538SJames Collins 2022a8eebd82SJames Collins /** 2023a8eebd82SJames Collins * Search for and return the uri of a media file 2024a8eebd82SJames Collins * 20259cff245bSJames Collins * @param string $image Image name to search for (without extension). 20269cff245bSJames Collins * @param boolean $searchCurrentNS Search the current namespace. 20279cff245bSJames Collins * @param boolean $propagate Propagate search through the namespace. 20289cff245bSJames Collins * @return string URI of the found media file 2029a8eebd82SJames Collins */ 20309cff245bSJames Collins public function getMediaFile(string $image, bool $searchCurrentNS = true, bool $propagate = true) 203110b40067Snomadjimbob { 2032ab45ba71SJames Collins global $INFO; 2033a8eebd82SJames Collins 20349cff245bSJames Collins $ext = ['png', 'jpg', 'gif', 'svg']; 2035ab45ba71SJames Collins 20369cff245bSJames Collins if ($searchCurrentNS === true) { 20379cff245bSJames Collins $prefix[] = ':' . $INFO['namespace'] . ':'; 20389cff245bSJames Collins } 20399cff245bSJames Collins if ($propagate === true) { 2040ab45ba71SJames Collins $prefix[] = ':'; 2041ab45ba71SJames Collins $prefix[] = ':wiki:'; 2042a8eebd82SJames Collins } 2043ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 20443a385f2cSJames Collins if (empty($theme) === false) { 20459cff245bSJames Collins $prefix[] = 'themes/' . $theme . '/images/'; 20469cff245bSJames Collins } 2047ab45ba71SJames Collins $prefix[] = 'images/'; 2048ab45ba71SJames Collins 20499cff245bSJames Collins $search = []; 2050ab45ba71SJames Collins foreach ($prefix as $pitem) { 2051ab45ba71SJames Collins foreach ($ext as $eitem) { 2052ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 2053ab45ba71SJames Collins } 2054ab45ba71SJames Collins } 2055ab45ba71SJames Collins 2056ab45ba71SJames Collins $img = ''; 2057ab45ba71SJames Collins $file = ''; 2058ab45ba71SJames Collins $url = ''; 2059ab45ba71SJames Collins $ismedia = false; 2060ab45ba71SJames Collins $found = false; 2061ab45ba71SJames Collins 2062ab45ba71SJames Collins foreach ($search as $img) { 20633a385f2cSJames Collins if (strcasecmp(substr($img, 0, 1), ':') === 0) { 2064ab45ba71SJames Collins $file = mediaFN($img); 2065ab45ba71SJames Collins $ismedia = true; 2066ab45ba71SJames Collins } else { 2067ab45ba71SJames Collins $file = tpl_incdir() . $img; 2068ab45ba71SJames Collins $ismedia = false; 2069ab45ba71SJames Collins } 2070ab45ba71SJames Collins 20719cff245bSJames Collins if (file_exists($file) === true) { 2072ab45ba71SJames Collins $found = true; 2073ab45ba71SJames Collins break; 2074ab45ba71SJames Collins } 2075ab45ba71SJames Collins } 2076ab45ba71SJames Collins 20779cff245bSJames Collins if ($found === false) { 20789cff245bSJames Collins return false; 20799cff245bSJames Collins } 2080ab45ba71SJames Collins 20819cff245bSJames Collins if ($ismedia === true) { 2082ab45ba71SJames Collins $url = ml($img, '', true, '', false); 2083ab45ba71SJames Collins } else { 2084ab45ba71SJames Collins $url = tpl_basedir() . $img; 2085ab45ba71SJames Collins } 2086ab45ba71SJames Collins 2087ab45ba71SJames Collins return $url; 2088ab45ba71SJames Collins } 2089ab45ba71SJames Collins 2090a8eebd82SJames Collins 2091a8eebd82SJames Collins /** 2092ab45ba71SJames Collins * Print or return the page title 2093ab45ba71SJames Collins * 20949cff245bSJames Collins * @param string $page Page id or empty string for current page. 2095ab45ba71SJames Collins * @return string generated content 2096ab45ba71SJames Collins */ 20979cff245bSJames Collins public function getPageTitle(string $page = '') 209810b40067Snomadjimbob { 2099ab45ba71SJames Collins global $ID, $conf; 2100ab45ba71SJames Collins 2101ab45ba71SJames Collins $html = ''; 2102ab45ba71SJames Collins 21033a385f2cSJames Collins if (empty($page) === true) { 21049cff245bSJames Collins $page = $ID; 21059cff245bSJames Collins } 2106ab45ba71SJames Collins 2107ab45ba71SJames Collins $html = p_get_first_heading($page); 2108ab45ba71SJames Collins $html = strip_tags($html); 2109ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 2110ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 2111ab45ba71SJames Collins $html = trim($html); 2112ab45ba71SJames Collins 2113ab45ba71SJames Collins return $html; 2114ab45ba71SJames Collins } 2115a8eebd82SJames Collins 2116a8eebd82SJames Collins 2117a8eebd82SJames Collins /** 2118a8eebd82SJames Collins * Return inline theme icon 2119a8eebd82SJames Collins * 21209cff245bSJames Collins * @param string $type Icon to retreive. 21219e41d878SJames Collins * @param string $class Classname to insert. 21229cff245bSJames Collins * @return string HTML icon content 2123a8eebd82SJames Collins */ 21249e41d878SJames Collins public function mikioInlineIcon(string $type, string $class = "") 212510b40067Snomadjimbob { 21269e41d878SJames Collins if (is_array($class) === true) { 21279e41d878SJames Collins $class = explode(' ', $class); 21289e41d878SJames Collins } 21299e41d878SJames Collins 21309e41d878SJames Collins if (strlen($class) > 0) { 21319e41d878SJames Collins $class = ' ' . $class; 21329e41d878SJames Collins } 21339e41d878SJames Collins 2134a8eebd82SJames Collins switch ($type) { 2135a8eebd82SJames Collins case 'wrench': 2136906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 -256 1792 2137906e1a13SJames 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, 2138906e1a13SJames 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, 2139906e1a13SJames 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, 2140906e1a13SJames 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 2141906e1a13SJames 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, 2142906e1a13SJames 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>'; 2143a8eebd82SJames Collins case 'file': 2144906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2145906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,235.38983,1277.8305)" id="g2991"> 2146906e1a13SJames 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 2147906e1a13SJames 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 2148906e1a13SJames 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" 21499cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 2150a8eebd82SJames Collins case 'gear': 2151906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2152906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,121.49153,1285.4237)" id="g3027"> 2153906e1a13SJames 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 2154906e1a13SJames 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 2155906e1a13SJames 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 2156906e1a13SJames 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 2157906e1a13SJames 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 2158906e1a13SJames 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, 2159906e1a13SJames 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 2160906e1a13SJames 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 2161906e1a13SJames 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" /> 2162906e1a13SJames Collins</g></svg>'; 2163a8eebd82SJames Collins case 'user': 2164906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2165906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,197.42373,1300.6102)"><path d="M 2166906e1a13SJames 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 2167906e1a13SJames 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, 2168906e1a13SJames 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 2169906e1a13SJames 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 2170906e1a13SJames 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, 2171906e1a13SJames Collins1408 863,1408 975.5,1295.5 1088,1183 1088,1024 z"/></g></svg>'; 2172a8eebd82SJames Collins case 'search': 21739e41d878SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 21749cff245bSJames 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 21759cff245bSJames 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 21769cff245bSJames 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 21779cff245bSJames Collins6.195 0 0 1-6.188 6.188z"/></svg>'; 2178a8eebd82SJames Collins case 'home': 2179906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2180906e1a13SJames CollinsviewBox="0 -256 1792 1792" aria-hidden="true" style="fill:currentColor"><g 2181906e1a13SJames 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 2182906e1a13SJames 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 2183906e1a13SJames 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 2184906e1a13SJames 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, 2185906e1a13SJames 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" 21869cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 21879e41d878SJames Collins case 'sun': 2188906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2189906e1a13SJames 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 2190906e1a13SJames 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 2191906e1a13SJames 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 2192906e1a13SJames 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 2193906e1a13SJames Collins0 0 1-.707.707z" /></svg>'; 21949e41d878SJames Collins case 'moon': 2195906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2196906e1a13SJames 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 2197906e1a13SJames 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 2198906e1a13SJames 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 2199906e1a13SJames 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 2200906e1a13SJames Collins0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286z" /></svg>'; 2201f65a4e5eSJames Collins case 'hamburger': 2202f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" 2203f65a4e5eSJames 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 2204f65a4e5eSJames 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 2205f65a4e5eSJames 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 2206f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16z"/></svg>'; 2207f65a4e5eSJames Collins case 'down-arrow': 2208f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 2209f65a4e5eSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M16.003 18.626l7.081-7.081L25 13.46l-8.997 8.998-9.003-9 2210f65a4e5eSJames Collins1.917-1.916z"/></svg>'; 22119cff245bSJames Collins }//end switch 2212ab45ba71SJames Collins 2213a8eebd82SJames Collins return ''; 2214a8eebd82SJames Collins } 2215ab45ba71SJames Collins 2216a8eebd82SJames Collins /** 2217a8eebd82SJames Collins * Finalize theme 22189cff245bSJames Collins * 22199cff245bSJames Collins * @return void 2220a8eebd82SJames Collins */ 222110b40067Snomadjimbob public function finalize() 222210b40067Snomadjimbob { 2223a8eebd82SJames Collins } 22241785fc73SJames Collins 22251785fc73SJames Collins /** 22261785fc73SJames Collins * Show Messages 22279cff245bSJames Collins * 22289cff245bSJames Collins * @return void 22291785fc73SJames Collins */ 223010b40067Snomadjimbob public function showMessages() 223110b40067Snomadjimbob { 22321785fc73SJames Collins global $ACT; 22331785fc73SJames Collins 22349cff245bSJames Collins if ($this->lessIgnored === true) { 22359cff245bSJames Collins msg( 22369cff245bSJames Collins 'useLESS is enabled on the Mikio template, however is not supported on this server', 22379cff245bSJames Collins 2, 22389cff245bSJames Collins '', 22399cff245bSJames Collins '', 22409cff245bSJames Collins MSG_ADMINS_ONLY 22419cff245bSJames Collins ); 2242a8df40efSJames Collins } 2243a8df40efSJames Collins 22441785fc73SJames Collins $show = $this->getConf('showNotifications'); 22453a385f2cSJames Collins if ( 22463a385f2cSJames Collins strcasecmp($show, 'always') === 0 || 22473a385f2cSJames Collins (strcasecmp($show, 'admin') === 0 && strcasecmp($ACT, 'admin') === 0) 22483a385f2cSJames Collins ) { 22491785fc73SJames Collins global $MSG, $MSG_shown; 22501785fc73SJames Collins 22519cff245bSJames Collins if (isset($MSG) === false) { 22521785fc73SJames Collins return; 22531785fc73SJames Collins } 22541785fc73SJames Collins 22559cff245bSJames Collins if (isset($MSG_shown) === false) { 22569cff245bSJames Collins $MSG_shown = []; 2257a8df40efSJames Collins } 22581785fc73SJames Collins 22591785fc73SJames Collins foreach ($MSG as $msg) { 22601785fc73SJames Collins $hash = md5($msg['msg']); 22619cff245bSJames Collins if (isset($MSG_shown[$hash]) === true) { 22621785fc73SJames Collins continue; 22631785fc73SJames Collins } 22641785fc73SJames Collins // skip double messages 22651785fc73SJames Collins 22669cff245bSJames Collins if (info_msg_allowed($msg) === true) { 22679cff245bSJames Collins echo '<div class="' . $msg['lvl'] . '">'; 22689cff245bSJames Collins echo $msg['msg']; 22699cff245bSJames Collins echo '</div>'; 22701785fc73SJames Collins } 22711785fc73SJames Collins 2272a8df40efSJames Collins $MSG_shown[$hash] = true; 22731785fc73SJames Collins } 22741785fc73SJames Collins 22751785fc73SJames Collins unset($GLOBALS['MSG']); 22769cff245bSJames Collins }//end if 22771785fc73SJames Collins } 22787ac0a6efSJames Collins 22797ac0a6efSJames Collins /** 22807ac0a6efSJames Collins * Dokuwiki version 22817ac0a6efSJames Collins * 22827ac0a6efSJames Collins * @return string the dw version name 22837ac0a6efSJames Collins */ 22849cff245bSJames Collins public function dwVersion() 22859cff245bSJames Collins { 22869cff245bSJames Collins if (function_exists('getVersionData') === true) { 22877ac0a6efSJames Collins $version_data = getVersionData(); 22889cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 22897ac0a6efSJames Collins $version_items = explode(' ', $version_data['date']); 22907ac0a6efSJames Collins if (count($version_items) >= 2) { 22917ac0a6efSJames Collins return preg_replace('/[^a-zA-Z0-9 ]+/', '', strtolower($version_items[1])); 22927ac0a6efSJames Collins } 22937ac0a6efSJames Collins } 22947ac0a6efSJames Collins } 22957ac0a6efSJames Collins 22967ac0a6efSJames Collins return 'unknown'; 22977ac0a6efSJames Collins } 2298e4c4fb13SJames Collins 2299e4c4fb13SJames Collins /** 2300e4c4fb13SJames Collins * Dokuwiki version number 2301e4c4fb13SJames Collins * 2302e4c4fb13SJames Collins * @return string the dw version date converted to integer 2303e4c4fb13SJames Collins */ 23049cff245bSJames Collins public function dwVersionNumber() 23059cff245bSJames Collins { 23069cff245bSJames Collins if (function_exists('getVersionData') === true) { 2307e4c4fb13SJames Collins $version_data = getVersionData(); 23089cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 2309e4c4fb13SJames Collins $version_items = explode(' ', $version_data['date']); 2310e4c4fb13SJames Collins if (count($version_items) >= 1) { 2311e4c4fb13SJames Collins return intval(preg_replace('/[^0-9]+/', '', strtolower($version_items[0]))); 2312e4c4fb13SJames Collins } 2313e4c4fb13SJames Collins } 2314e4c4fb13SJames Collins } 2315e4c4fb13SJames Collins 2316e4c4fb13SJames Collins return 0; 2317e4c4fb13SJames Collins } 2318a8eebd82SJames Collins} 2319ab45ba71SJames Collins 2320ab45ba71SJames Collinsglobal $TEMPLATE; 232147161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 2322