1c165b184SJames Collins<?php 210b40067Snomadjimbob 3c165b184SJames Collins/** 4c165b184SJames Collins * DokuWiki Mikio Template 5c165b184SJames Collins * 6c165b184SJames Collins * @link http://dokuwiki.org/template:mikio 7c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 8ab45ba71SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html) 9c165b184SJames Collins */ 1010b40067Snomadjimbob 11ab45ba71SJames Collinsnamespace dokuwiki\template\mikio; 12c165b184SJames Collins 139cff245bSJames Collinsif (defined('DOKU_INC') === false) { 149cff245bSJames Collins die(); 159cff245bSJames Collins} 16c165b184SJames Collins 17ab45ba71SJames Collinsrequire_once('icons/icons.php'); 18c165b184SJames Collinsrequire_once('inc/simple_html_dom.php'); 19c165b184SJames Collins 2010b40067Snomadjimbobclass Template 2110b40067Snomadjimbob{ 229cff245bSJames Collins /** 239cff245bSJames Collins * @var string Template directory path from local FS. 249cff245bSJames Collins */ 25c165b184SJames Collins public $tplDir = ''; 269cff245bSJames Collins 279cff245bSJames Collins /** 289cff245bSJames Collins * @var string Template directory path from web. 299cff245bSJames Collins */ 30c165b184SJames Collins public $baseDir = ''; 319cff245bSJames Collins 329cff245bSJames Collins /** 339cff245bSJames Collins * @var array Array of Javascript files to include in footer. 349cff245bSJames Collins */ 359cff245bSJames Collins public $footerScript = []; 369cff245bSJames Collins 379cff245bSJames Collins /** 389cff245bSJames Collins * @var boolean Ignore LESS files. 399cff245bSJames Collins */ 40a8df40efSJames Collins public $lessIgnored = false; 41c165b184SJames Collins 42c165b184SJames Collins 43c165b184SJames Collins /** 44c165b184SJames Collins * Class constructor 45c165b184SJames Collins */ 4610b40067Snomadjimbob public function __construct() 4710b40067Snomadjimbob { 48c165b184SJames Collins $this->tplDir = tpl_incdir(); 49c165b184SJames Collins $this->baseDir = tpl_basedir(); 50c165b184SJames Collins 519cff245bSJames Collins $this->registerHooks(); 52c165b184SJames Collins } 53c165b184SJames Collins 54c165b184SJames Collins /** 55ab45ba71SJames Collins * Returns the instance of the class 5647161538SJames Collins * 57ab45ba71SJames Collins * @return Template class instance 5847161538SJames Collins */ 5947161538SJames Collins public static function getInstance() 6047161538SJames Collins { 6147161538SJames Collins static $instance = null; 6247161538SJames Collins 633a385f2cSJames Collins if (empty($instance) === true) { 6447161538SJames Collins $instance = new Template(); 6547161538SJames Collins } 6647161538SJames Collins 6747161538SJames Collins return $instance; 6847161538SJames Collins } 6947161538SJames Collins 70ab45ba71SJames Collins 7147161538SJames Collins /** 72ab45ba71SJames Collins * Register the themes hooks into Dokuwiki 739cff245bSJames Collins * 749cff245bSJames Collins * @return void 75c165b184SJames Collins */ 769cff245bSJames Collins private function registerHooks() 7710b40067Snomadjimbob { 78c165b184SJames Collins global $EVENT_HANDLER; 79c165b184SJames Collins 809cff245bSJames Collins $events_dispatcher = [ 81ab45ba71SJames Collins 'TPL_METAHEADER_OUTPUT' => 'metaheadersHandler' 829cff245bSJames Collins ]; 83c165b184SJames Collins 84c165b184SJames Collins foreach ($events_dispatcher as $event => $method) { 85c165b184SJames Collins $EVENT_HANDLER->register_hook($event, 'BEFORE', $this, $method); 86c165b184SJames Collins } 87c165b184SJames Collins } 88c165b184SJames Collins 89c165b184SJames Collins 90c165b184SJames Collins /** 91ab45ba71SJames Collins * Meta handler hook for DokuWiki 92c165b184SJames Collins * 939cff245bSJames Collins * @param \Doku_Event $event DokuWiki Event. 949cff245bSJames Collins * @return void 95c165b184SJames Collins */ 9610b40067Snomadjimbob public function metaHeadersHandler(\Doku_Event $event) 9710b40067Snomadjimbob { 98ab45ba71SJames Collins global $MIKIO_ICONS; 99b5536b07SChris MacMackin global $conf; 100ab45ba71SJames Collins 101ad182e6dSnomadjimbob global $MIKIO_TEMPLATE; 102ad182e6dSnomadjimbob $MIKIO_TEMPLATE = '123'; 103ad182e6dSnomadjimbob 1049cff245bSJames Collins $this->includePage('theme', false, true); 105a8eebd82SJames Collins 1069cff245bSJames Collins $stylesheets = []; 1079cff245bSJames Collins $scripts = []; 108c165b184SJames Collins 1093a385f2cSJames Collins if (empty($this->getConf('customTheme')) === false) { 1109cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.less') === true) { 111a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.less'; 112a8eebd82SJames Collins } else { 1139cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.css') === true) { 114ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.css'; 1152b4583abSJames Collins } 116a8eebd82SJames Collins } 1179cff245bSJames Collins if (file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/script.js') === true) { 118ab45ba71SJames Collins $scripts[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/script.js'; 119c165b184SJames Collins } 120c165b184SJames Collins } 121c165b184SJames Collins 1223a385f2cSJames Collins if (is_array($MIKIO_ICONS) === true && empty($this->getConf('iconTag', 'icon')) === false) { 1239cff245bSJames Collins $icons = []; 124ab45ba71SJames Collins foreach ($MIKIO_ICONS as $icon) { 1259cff245bSJames Collins if (isset($icon['name']) === true && isset($icon['css']) === true && isset($icon['insert']) === true) { 126ab45ba71SJames Collins $icons[] = $icon; 127c165b184SJames Collins 1283a385f2cSJames Collins if (empty($icon['css']) === false) { 1299cff245bSJames Collins if (strpos($icon['css'], '//') === false) { 130a8eebd82SJames Collins $stylesheets[] = $this->baseDir . 'icons/' . $icon['css']; 131ab45ba71SJames Collins } else { 132a8eebd82SJames Collins $stylesheets[] = $icon['css']; 133ab45ba71SJames Collins } 134ab45ba71SJames Collins } 135ab45ba71SJames Collins } 136ab45ba71SJames Collins } 137ab45ba71SJames Collins $MIKIO_ICONS = $icons; 138ab45ba71SJames Collins } else { 139ab45ba71SJames Collins $MIKIO_ICONS = []; 140ab45ba71SJames Collins } 141c165b184SJames Collins 1427864545bSChris MacMackin $scripts[] = $this->baseDir . 'assets/mikio-typeahead.js'; 143ab45ba71SJames Collins $scripts[] = $this->baseDir . 'assets/mikio.js'; 144644fd9f9SJames Collins 1459cff245bSJames Collins if ($this->getConf('useLESS') === true) { 146ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.less'; 147644fd9f9SJames Collins } else { 148644fd9f9SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.css'; 149644fd9f9SJames Collins } 150644fd9f9SJames Collins 151ad182e6dSnomadjimbob /* MikioPlugin Support */ 1529ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 153ad182e6dSnomadjimbob if ($this->getConf('useLESS') === true) { 154ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.less'; 155ad182e6dSnomadjimbob } else { 156ad182e6dSnomadjimbob $stylesheets[] = $this->baseDir . 'assets/mikioplugin.css'; 157ad182e6dSnomadjimbob } 158ad182e6dSnomadjimbob } 159ab45ba71SJames Collins 160ab45ba71SJames Collins $set = []; 161c165b184SJames Collins foreach ($stylesheets as $style) { 1629cff245bSJames Collins if (in_array($style, $set) === false) { 1633a385f2cSJames Collins if (strcasecmp(substr($style, -5), '.less') === 0 && $this->getConf('useLESS') === true) { 164ab45ba71SJames Collins $style = $this->baseDir . 'css.php?css=' . str_replace($this->baseDir, '', $style); 165ab45ba71SJames Collins } 166ab45ba71SJames Collins 1679cff245bSJames Collins array_unshift($event->data['link'], [ 168c165b184SJames Collins 'type' => 'text/css', 169c165b184SJames Collins 'rel' => 'stylesheet', 170c165b184SJames Collins 'href' => $style 1719cff245bSJames Collins ]); 172c165b184SJames Collins } 173ab45ba71SJames Collins $set[] = $style; 174ab45ba71SJames Collins } 175c165b184SJames Collins 176ab45ba71SJames Collins $set = []; 177c165b184SJames Collins foreach ($scripts as $script) { 1789cff245bSJames Collins if (in_array($script, $set) === false) { 1799cff245bSJames Collins $script_params = [ 180c165b184SJames Collins 'type' => 'text/javascript', 181c165b184SJames Collins '_data' => '', 1828395cdcbSChris MacMackin 'src' => $script 1839cff245bSJames Collins ]; 184c1ecb866SJames Collins 185c1ecb866SJames Collins // equal to or greator than hogfather 186c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 187c1ecb866SJames Collins // greator than hogfather - defer always on 188c1ecb866SJames Collins if ($this->dwVersionNumber() >= 20200729) { 189c1ecb866SJames Collins $script_params += ['defer' => 'defer']; 190c1ecb866SJames Collins } else { 191c1ecb866SJames Collins // hogfather - defer always on unless $conf['defer_js'] is false 1929cff245bSJames Collins if (array_key_exists('defer_js', $conf) === false || $conf['defer_js'] === true) { 1938395cdcbSChris MacMackin $script_params += ['defer' => 'defer']; 1948395cdcbSChris MacMackin } 195c1ecb866SJames Collins } 196c1ecb866SJames Collins } 197c1ecb866SJames Collins 1988395cdcbSChris MacMackin $event->data['script'][] = $script_params; 1999cff245bSJames Collins }//end if 200ab45ba71SJames Collins $set[] = $script; 2019cff245bSJames Collins }//end foreach 202c165b184SJames Collins } 203c165b184SJames Collins 204c165b184SJames Collins 205c165b184SJames Collins /** 206a8eebd82SJames Collins * Print or return the footer meta data 207c165b184SJames Collins * 2089cff245bSJames Collins * @param boolean $print Print the data to buffer. 2099cff245bSJames Collins * @return string HTML footer meta data 210c165b184SJames Collins */ 2119cff245bSJames Collins public function includeFooterMeta(bool $print = true) 21210b40067Snomadjimbob { 213a8eebd82SJames Collins $html = ''; 214a8eebd82SJames Collins 215a8eebd82SJames Collins if (count($this->footerScript) > 0) { 216a8eebd82SJames Collins $html .= '<script type="text/javascript">function mikioFooterRun() {'; 217a8eebd82SJames Collins foreach ($this->footerScript as $script) { 218a8eebd82SJames Collins $html .= $script . ';'; 219a8eebd82SJames Collins } 220a8eebd82SJames Collins $html .= '}</script>'; 221a8eebd82SJames Collins } 222c165b184SJames Collins 223c165b184SJames Collins 2249cff245bSJames Collins if ($print === true) { 2259cff245bSJames Collins echo $html; 2269cff245bSJames Collins } 227a8eebd82SJames Collins return $html; 228a8eebd82SJames Collins } 229a8eebd82SJames Collins 23095372bffSJames Collins 23195372bffSJames Collins // phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing 23295372bffSJames Collins 23395372bffSJames Collins 234a8eebd82SJames Collins /** 235ab45ba71SJames Collins * Retreive and parse theme configuration options 236c165b184SJames Collins * 2379cff245bSJames Collins * @param string $key The configuration key to retreive. 2389cff245bSJames Collins * @param mixed $default If key doesn't exist, return this value. 239ab45ba71SJames Collins * @return mixed parsed value of configuration 240c165b184SJames Collins */ 24195372bffSJames Collins public function getConf(string $key, $default = false) 24210b40067Snomadjimbob { 243c165b184SJames Collins $value = tpl_getConf($key, $default); 244c165b184SJames Collins 2453a385f2cSJames Collins $data = [ 2463a385f2cSJames Collins ['keys' => ['navbarDWMenuType'], 'type' => 'choice', 2473a385f2cSJames Collins 'values' => ['both', 'icons', 'text'] 2483a385f2cSJames Collins ], 2493a385f2cSJames Collins ['keys' => ['navbarDWMenuCombine'], 'type' => 'choice', 2503a385f2cSJames Collins 'values' => ['combine', 'seperate', 'dropdown'] 2513a385f2cSJames Collins ], 2523a385f2cSJames Collins ['keys' => ['navbarPosLeft', 'navbarPosMiddle', 'navbarPosRight'], 2533a385f2cSJames Collins 'type' => 'choice', 2543a385f2cSJames Collins 'values' => ['none', 'custom', 'search', 'dokuwiki'], 2553a385f2cSJames Collins 'default' => [ 2563a385f2cSJames Collins 'navbarPosLeft' => 'none', 2573a385f2cSJames Collins 'navbarPosMiddle' => 'search', 2583a385f2cSJames Collins 'navbarPosRight' => 'dokuwiki' 2593a385f2cSJames Collins ] 2603a385f2cSJames Collins ], 2613a385f2cSJames Collins ['keys' => ['navbarItemShowCreate', 'navbarItemShowShow', 'navbarItemShowRevs', 'navbarItemShowBacklink', 2623a385f2cSJames Collins 'navbarItemShowRecent', 'navbarItemShowMedia', 'navbarItemShowIndex', 'navbarItemShowProfile', 2633a385f2cSJames Collins 'navbarItemShowAdmin' 2643a385f2cSJames Collins ], 2653a385f2cSJames Collins 'type' => 'choice', 2663a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 2673a385f2cSJames Collins ], 2683a385f2cSJames Collins ['keys' => ['navbarItemShowLogin', 'navbarItemShowLogout'], 2693a385f2cSJames Collins 'type' => 'choice', 2703a385f2cSJames Collins 'values' => ['always', 'never'] 2713a385f2cSJames Collins ], 2723a385f2cSJames Collins ['keys' => ['searchButton'], 'type' => 'choice', 2733a385f2cSJames Collins 'values' => ['icon', 'text'] 2743a385f2cSJames Collins ], 2753a385f2cSJames Collins ['keys' => ['breadcrumbPosition', 'youareherePosition'], 2763a385f2cSJames Collins 'type' => 'choice', 2773a385f2cSJames Collins 'values' => ['top', 'hero', 'page', 'none'] 2783a385f2cSJames Collins ], 2793a385f2cSJames Collins ['keys' => ['youarehereHome'], 'type' => 'choice', 2803a385f2cSJames Collins 'values' => ['page title', 'home', 'icon', 'none'] 2813a385f2cSJames Collins ], 2823a385f2cSJames Collins ['keys' => ['sidebarLeftRow1', 'sidebarLeftRow2', 'sidebarLeftRow3', 'sidebarLeftRow4'], 2833a385f2cSJames Collins 'type' => 'choice', 2843a385f2cSJames Collins 'values' => ['none', 'logged in user', 'search', 'content', 'tags'], 2853a385f2cSJames Collins 'default' => [ 2863a385f2cSJames Collins 'sidebarLeftRow1' => 'logged in user', 2873a385f2cSJames Collins 'sidebarLeftRow2' => 'search', 2883a385f2cSJames Collins 'sidebarLeftRow3' => 'content' 2893a385f2cSJames Collins ] 2903a385f2cSJames Collins ], 2913a385f2cSJames Collins ['keys' => ['pageToolsFloating', 'pageToolsFooter'], 2923a385f2cSJames Collins 'type' => 'choice', 2933a385f2cSJames Collins 'values' => ['always', 'none', 'page editors'] 2943a385f2cSJames Collins ], 2953a385f2cSJames Collins ['keys' => ['pageToolsShowCreate', 'pageToolsShowEdit', 'pageToolsShowRevs', 'pageToolsShowBacklink', 2963a385f2cSJames Collins 'pageToolsShowTop' 2973a385f2cSJames Collins ], 2983a385f2cSJames Collins 'type' => 'choice', 2993a385f2cSJames Collins 'values' => ['always', 'logged in', 'logged out', 'never'] 3003a385f2cSJames Collins ], 3013a385f2cSJames Collins ['keys' => ['showNotifications'], 'type' => 'choice', 3023a385f2cSJames Collins 'values' => ['admin', 'always', 'none'] 3033a385f2cSJames Collins ], 3043a385f2cSJames Collins ['keys' => ['licenseType'], 'type' => 'choice', 3053a385f2cSJames Collins 'values' => ['badge', 'button', 'none'] 3063a385f2cSJames Collins ], 3073a385f2cSJames Collins ['keys' => ['navbarUseTitleIcon'], 'type' => 'bool'], 3083a385f2cSJames Collins ['keys' => ['navbarUseTitleText'], 'type' => 'bool'], 3093a385f2cSJames Collins ['keys' => ['navbarUseTaglineText'], 'type' => 'bool'], 3103a385f2cSJames Collins ['keys' => ['navbarShowSub'], 'type' => 'bool'], 3113a385f2cSJames Collins ['keys' => ['heroTitle'], 'type' => 'bool'], 3123a385f2cSJames Collins ['keys' => ['heroImagePropagation'], 'type' => 'bool'], 3133a385f2cSJames Collins ['keys' => ['breadcrumbPrefix'], 'type' => 'bool'], 3143a385f2cSJames Collins ['keys' => ['breadcrumbSep'], 'type' => 'bool'], 3153a385f2cSJames Collins ['keys' => ['youareherePrefix'], 'type' => 'bool'], 3163a385f2cSJames Collins ['keys' => ['youarehereSep'], 'type' => 'bool'], 3173a385f2cSJames Collins ['keys' => ['sidebarShowLeft'], 'type' => 'bool'], 3183a385f2cSJames Collins ['keys' => ['sidebarShowRight'], 'type' => 'bool'], 3193a385f2cSJames Collins ['keys' => ['tocFull'], 'type' => 'bool'], 3203a385f2cSJames Collins ['keys' => ['footerSearch'], 'type' => 'bool'], 3213a385f2cSJames Collins ['keys' => ['licenseImageOnly'], 'type' => 'bool'], 3223a385f2cSJames Collins ['keys' => ['includePageUseACL'], 'type' => 'bool'], 3233a385f2cSJames Collins ['keys' => ['includePagePropagate'], 'type' => 'bool'], 3243a385f2cSJames Collins ['keys' => ['youarehereHideHome'], 'type' => 'bool'], 3253a385f2cSJames Collins ['keys' => ['tagsConsolidate'], 'type' => 'bool'], 3263a385f2cSJames Collins ['keys' => ['footerInPage'], 'type' => 'bool'], 3273a385f2cSJames Collins ['keys' => ['sidebarMobileDefaultCollapse'], 'type' => 'bool'], 3283a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowLeft'], 'type' => 'bool'], 3293a385f2cSJames Collins ['keys' => ['sidebarAlwaysShowRight'], 'type' => 'bool'], 3303a385f2cSJames Collins ['keys' => ['searchUseTypeahead'], 'type' => 'bool'], 33112030b10SJames Collins ['keys' => ['showLightDark'], 'type' => 'bool'], 332*34d5f19aSJames Collins ['keys' => ['autoLightDark'], 'type' => 'bool'], 3333a385f2cSJames Collins ['keys' => ['youarehereShowLast'], 'type' => 'int'], 3343a385f2cSJames Collins 3353a385f2cSJames Collins ['keys' => ['iconTag'], 'type' => 'string'], 3363a385f2cSJames Collins ['keys' => ['customTheme'], 'type' => 'string'], 3373a385f2cSJames Collins ['keys' => ['navbarCustomMenuText'], 'type' => 'string'], 3383a385f2cSJames Collins ['keys' => ['breadcrumbPrefixText'], 'type' => 'string'], 3393a385f2cSJames Collins ['keys' => ['breadcrumbSepText'], 'type' => 'string'], 3403a385f2cSJames Collins ['keys' => ['youareherePrefixText'], 'type' => 'string'], 3413a385f2cSJames Collins ['keys' => ['youarehereSepText'], 'type' => 'string'], 3423a385f2cSJames Collins ['keys' => ['footerCustomMenuText'], 'type' => 'string'], 3433a385f2cSJames Collins ['keys' => ['brandURLGuest'], 'type' => 'string'], 3443a385f2cSJames Collins ['keys' => ['brandURLUser'], 'type' => 'string'], 3453a385f2cSJames Collins 3463a385f2cSJames Collins ['keys' => ['useLESS'], 'type' => 'less'], 3473a385f2cSJames Collins ]; 3483a385f2cSJames Collins 3493a385f2cSJames Collins foreach ($data as $row) { 3503a385f2cSJames Collins // does not check case.... 3513a385f2cSJames Collins if (in_array($key, $row['keys']) === true) { 35295372bffSJames Collins if (array_key_exists('type', $row) === true) { 3533a385f2cSJames Collins switch ($row['type']) { 3543a385f2cSJames Collins case 'bool': 3553a385f2cSJames Collins return (bool) $value; 3563a385f2cSJames Collins case 'int': 3573a385f2cSJames Collins return (int) $value; 3583a385f2cSJames Collins case 'string': 3593a385f2cSJames Collins return $value; 3603a385f2cSJames Collins case 'less': 36129118ed7SJames Collins $value = (bool) $value; 362a8df40efSJames Collins $lessAvailable = true; 363a8df40efSJames Collins 364a8df40efSJames Collins // check for less library 365a8df40efSJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3669cff245bSJames Collins if (file_exists($lesscLib) === false) { 367a8df40efSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3689cff245bSJames Collins } 3699cff245bSJames Collins if (file_exists($lesscLib) === false) { 370a8df40efSJames Collins $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3719cff245bSJames Collins } 3729cff245bSJames Collins if (file_exists($lesscLib) === false) { 3739cff245bSJames Collins $lesscLib = $_SERVER['DOCUMENT_ROOT'] . 3749cff245bSJames Collins '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 3759cff245bSJames Collins } 3769cff245bSJames Collins if (file_exists($lesscLib) === false) { 377a8df40efSJames Collins $lessAvailable = false; 378a8df40efSJames Collins } 379a8df40efSJames Collins 380a8df40efSJames Collins // check for ctype extensions 3819cff245bSJames Collins if (function_exists('ctype_digit') === false) { 382a8df40efSJames Collins $lessAvailable = false; 383a8df40efSJames Collins } 384a8df40efSJames Collins 3859cff245bSJames Collins if ($value === true && $lessAvailable === false) { 386a8df40efSJames Collins $this->lessIgnored = true; 38729118ed7SJames Collins $value = false; 38829118ed7SJames Collins } 3893a385f2cSJames Collins 3903a385f2cSJames Collins return $value; 3919cff245bSJames Collins }//end switch 3923a385f2cSJames Collins }//end if 3933a385f2cSJames Collins 3943a385f2cSJames Collins if (in_array($value, $row['values']) === true) { 3953a385f2cSJames Collins return $value; 3963a385f2cSJames Collins } 3973a385f2cSJames Collins 3983a385f2cSJames Collins if (array_key_exists('default', $row) === true) { 3993a385f2cSJames Collins if (is_array($row['default']) === true) { 4003a385f2cSJames Collins if (array_key_exists($key, $row['default']) === true) { 4013a385f2cSJames Collins return $row['default'][$key]; 4023a385f2cSJames Collins } 4033a385f2cSJames Collins } else { 4043a385f2cSJames Collins return $row['default']; 4053a385f2cSJames Collins } 4063a385f2cSJames Collins } 4073a385f2cSJames Collins 4083a385f2cSJames Collins return reset($row['values']); 4093a385f2cSJames Collins }//end if 4103a385f2cSJames Collins }//end foreach 411c165b184SJames Collins 412c165b184SJames Collins return $value; 413c165b184SJames Collins } 414c165b184SJames Collins 415c165b184SJames Collins 41695372bffSJames Collins // phpcs:enable 41795372bffSJames Collins 41895372bffSJames Collins 419c165b184SJames Collins /** 420a8eebd82SJames Collins * Check if a page exist in directory or namespace 421c165b184SJames Collins * 4229cff245bSJames Collins * @param string $page Page/namespace to search. 423a8eebd82SJames Collins * @return boolean if page exists 424c165b184SJames Collins */ 4259cff245bSJames Collins public function pageExists(string $page) 42610b40067Snomadjimbob { 427ab45ba71SJames Collins ob_start(); 428a8eebd82SJames Collins tpl_includeFile($page . '.html'); 429ab45ba71SJames Collins $html = ob_get_contents(); 430ab45ba71SJames Collins ob_end_clean(); 431a8eebd82SJames Collins 4323a385f2cSJames Collins if (empty($html) === false) { 4339cff245bSJames Collins return true; 4349cff245bSJames Collins } 435a8eebd82SJames Collins 436a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 437a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 438a8eebd82SJames Collins 4399cff245bSJames Collins if ($propagate === true) { 4409cff245bSJames Collins if (page_findnearest($page, $useACL) !== false) { 4419cff245bSJames Collins return true; 4429cff245bSJames Collins } 4439cff245bSJames Collins } elseif ($useACL === true && auth_quickaclcheck($page) !== AUTH_NONE) { 4449cff245bSJames Collins return true; 445ab45ba71SJames Collins } 446ab45ba71SJames Collins 4479cff245bSJames Collins return false; 448ab45ba71SJames Collins } 449ab45ba71SJames Collins 450a8eebd82SJames Collins 451c165b184SJames Collins /** 452a8eebd82SJames Collins * Print or return page from directory or namespace 4532b4583abSJames Collins * 4549cff245bSJames Collins * @param string $page Page/namespace to include. 4559cff245bSJames Collins * @param boolean $print Print content. 4569cff245bSJames Collins * @param boolean $parse Parse content before printing/returning. 4579cff245bSJames Collins * @param string $classWrapper Wrap page in a div with class. 458ab45ba71SJames Collins * @return string contents of page found 4592b4583abSJames Collins */ 4609cff245bSJames Collins public function includePage(string $page, bool $print = true, bool $parse = true, string $classWrapper = '') 4612b4583abSJames Collins { 462a8eebd82SJames Collins ob_start(); 463a8eebd82SJames Collins tpl_includeFile($page . '.html'); 464a8eebd82SJames Collins $html = ob_get_contents(); 465a8eebd82SJames Collins ob_end_clean(); 466a8eebd82SJames Collins 4673a385f2cSJames Collins if (empty($html) === true) { 468a8eebd82SJames Collins $useACL = $this->getConf('includePageUseACL'); 469a8eebd82SJames Collins $propagate = $this->getConf('includePagePropagate'); 470ab45ba71SJames Collins $html = ''; 4712b4583abSJames Collins 472ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 473ab45ba71SJames Collins } 4742b4583abSJames Collins 4753a385f2cSJames Collins if (empty($html) === false && $parse === true) { 476ab45ba71SJames Collins $html = $this->parseContent($html); 477ab45ba71SJames Collins } 4782b4583abSJames Collins 4793a385f2cSJames Collins if (empty($classWrapper) === false && empty($html) === false) { 4809cff245bSJames Collins $html = '<div class="' . $classWrapper . '">' . $html . '</div>'; 4819cff245bSJames Collins } 4822b4583abSJames Collins 4839cff245bSJames Collins if ($print === true) { 4849cff245bSJames Collins echo $html; 4859cff245bSJames Collins } 486ab45ba71SJames Collins return $html; 4872b4583abSJames Collins } 4882b4583abSJames Collins 489a8eebd82SJames Collins 490a8eebd82SJames Collins /** 491a8eebd82SJames Collins * Print or return logged in user information 492a8eebd82SJames Collins * 4939cff245bSJames Collins * @param boolean $print Print content. 494a8eebd82SJames Collins * @return string user information 495a8eebd82SJames Collins */ 4969cff245bSJames Collins public function includeLoggedIn(bool $print = true) 49710b40067Snomadjimbob { 498a8eebd82SJames Collins $html = ''; 499a8eebd82SJames Collins 5009cff245bSJames Collins if (empty($_SERVER['REMOTE_USER']) === false) { 501a8eebd82SJames Collins $html .= '<div class="mikio-user-info">'; 502a8eebd82SJames Collins ob_start(); 503a8eebd82SJames Collins tpl_userinfo(); 504a8eebd82SJames Collins $html .= ob_get_contents(); 505a8eebd82SJames Collins ob_end_clean(); 506a8eebd82SJames Collins $html .= '</div>'; 5072b4583abSJames Collins } 508a8eebd82SJames Collins 5099cff245bSJames Collins if ($print === true) { 5109cff245bSJames Collins echo $html; 5119cff245bSJames Collins } 512a8eebd82SJames Collins return $html; 5132b4583abSJames Collins } 5142b4583abSJames Collins 5152b4583abSJames Collins 516a8eebd82SJames Collins /** 517a8eebd82SJames Collins * Print or return DokuWiki Menu 518a8eebd82SJames Collins * 5199cff245bSJames Collins * @param boolean $print Print content. 520a8eebd82SJames Collins * @return string contents of the menu 521a8eebd82SJames Collins */ 5229cff245bSJames Collins public function includeDWMenu(bool $print = true) 52310b40067Snomadjimbob { 5242b4583abSJames Collins global $lang; 5252b4583abSJames Collins global $USERINFO; 526c165b184SJames Collins 5279cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 528a8eebd82SJames Collins $html = '<ul class="mikio-nav">'; 5292b4583abSJames Collins 530ab45ba71SJames Collins $pageToolsMenu = []; 531ab45ba71SJames Collins $siteToolsMenu = []; 532ab45ba71SJames Collins $userToolsMenu = []; 533c165b184SJames Collins 534ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 535ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 536ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 5372b4583abSJames Collins 5382b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 5392b4583abSJames Collins foreach ($items as $item) { 5409cff245bSJames Collins if ($item->getType() !== 'top') { 541ab45ba71SJames Collins $itemHtml = ''; 5422b4583abSJames Collins 543905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5449cff245bSJames Collins if ( 5453a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5463a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5473a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5489cff245bSJames Collins ) { 5499cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . 5509cff245bSJames Collins ' ' . $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5519cff245bSJames Collins if ($showIcons === true) { 5529cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5539cff245bSJames Collins } 5549cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5559cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5569cff245bSJames Collins } 557ab45ba71SJames Collins $itemHtml .= '</a>'; 558ab45ba71SJames Collins 559ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 5602b4583abSJames Collins } 5619cff245bSJames Collins }//end if 5629cff245bSJames Collins }//end foreach 5632b4583abSJames Collins 564ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action'); 565ab45ba71SJames Collins foreach ($items as $item) { 566ab45ba71SJames Collins $itemHtml = ''; 5672b4583abSJames Collins 568905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5699cff245bSJames Collins if ( 5703a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5713a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5723a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5739cff245bSJames Collins ) { 5749cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown === true ? 'mikio-dropdown-item' : '') . ' ' . 5759cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 5769cff245bSJames Collins if ($showIcons === true) { 5779cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 5789cff245bSJames Collins } 5799cff245bSJames Collins if ($showText === true || $isDropDown === true) { 5809cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 5819cff245bSJames Collins } 582ab45ba71SJames Collins $itemHtml .= '</a>'; 5832b4583abSJames Collins 584ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 5852b4583abSJames Collins } 5869cff245bSJames Collins }//end foreach 5872b4583abSJames Collins 588ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 589ab45ba71SJames Collins foreach ($items as $item) { 590ab45ba71SJames Collins $itemHtml = ''; 591ab45ba71SJames Collins 592905b27c6SJames Collins $showItem = $this->getConf('navbarItemShow' . ucfirst($item->getType())); 5939cff245bSJames Collins if ( 5943a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 5953a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 5963a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === false)) 5979cff245bSJames Collins ) { 5989cff245bSJames Collins $itemHtml .= '<a class="mikio-nav-link' . ($isDropDown === true ? ' mikio-dropdown-item' : '') . ' ' . 5999cff245bSJames Collins $item->getType() . '" href="' . $item->getLink() . '" title="' . $item->getTitle() . '">'; 6009cff245bSJames Collins if ($showIcons === true) { 6019cff245bSJames Collins $itemHtml .= '<span class="mikio-icon">' . inlineSVG($item->getSvg()) . '</span>'; 6029cff245bSJames Collins } 6039cff245bSJames Collins if ($showText === true || $isDropDown === true) { 6049cff245bSJames Collins $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 6059cff245bSJames Collins } 606ab45ba71SJames Collins $itemHtml .= '</a>'; 607ab45ba71SJames Collins 608ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 609ab45ba71SJames Collins } 6109cff245bSJames Collins }//end foreach 611ab45ba71SJames Collins 612ab45ba71SJames Collins 613ab45ba71SJames Collins switch ($this->getConf('navbarDWMenuCombine')) { 614ab45ba71SJames Collins case 'dropdown': 615ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 6169cff245bSJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" 6179cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6189cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('file') : '') . 6199cff245bSJames Collins ($showText === true ? $lang['page_tools'] : '<span class="mikio-small-only">' . $lang['page_tools'] . 6209cff245bSJames Collins '</span>') . '</a>'; 621a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 622ab45ba71SJames Collins 623ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 624ab45ba71SJames Collins $html .= $item; 625ab45ba71SJames Collins } 626ab45ba71SJames Collins 627ab45ba71SJames Collins $html .= '</div>'; 628ab45ba71SJames Collins $html .= '</li>'; 629ab45ba71SJames Collins 630a8eebd82SJames Collins $html .= '<li id="dokuwiki__sitetools" class="mikio-nav-dropdown">'; 6319cff245bSJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" 6329cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6339cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('gear') : '') . 6349cff245bSJames Collins ($showText === true ? $lang['site_tools'] : '<span class="mikio-small-only">' . 6359cff245bSJames Collins $lang['site_tools'] . '</span>') . '</a>'; 636a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 637ab45ba71SJames Collins 638ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 639ab45ba71SJames Collins $html .= $item; 640ab45ba71SJames Collins } 641ab45ba71SJames Collins 642ab45ba71SJames Collins $html .= '</div>'; 643ab45ba71SJames Collins $html .= '</li>'; 644ab45ba71SJames Collins 645a8eebd82SJames Collins $html .= '<li id="dokuwiki__usertools" class="mikio-nav-dropdown">'; 6469cff245bSJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" 6479cff245bSJames Collinsdata-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . 6489cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('user') : '') . 6499cff245bSJames Collins ($showText === true ? $lang['user_tools'] : '<span class="mikio-small-only">' . 6509cff245bSJames Collins $lang['user_tools'] . '</span>') . '</a>'; 651a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 652ab45ba71SJames Collins 653ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 654ab45ba71SJames Collins $html .= $item; 655ab45ba71SJames Collins } 656ab45ba71SJames Collins 657ab45ba71SJames Collins $html .= '</div>'; 658ab45ba71SJames Collins $html .= '</li>'; 659ab45ba71SJames Collins 660ab45ba71SJames Collins break; 661ab45ba71SJames Collins 662ab45ba71SJames Collins case 'combine': 663ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 6649cff245bSJames Collins $html .= '<a class="mikio-nav-link" href="#">' . 6659cff245bSJames Collins ($showIcons === true ? $this->mikioInlineIcon('wrench') : '') . 6669cff245bSJames Collins ($showText === true ? tpl_getLang('tools-menu') : '<span class="mikio-small-only">' . 6679cff245bSJames Collins tpl_getLang('tools-menu') . '</span>') . '</a>'; 668a8eebd82SJames Collins $html .= '<div class="mikio-dropdown closed">'; 669ab45ba71SJames Collins 670ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 671ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 672ab45ba71SJames Collins $html .= $item; 673ab45ba71SJames Collins } 674ab45ba71SJames Collins 675ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 676ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 677ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 678ab45ba71SJames Collins $html .= $item; 679ab45ba71SJames Collins } 680ab45ba71SJames Collins 681ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 682ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 683ab45ba71SJames Collins foreach ($userToolsMenu as $item) { 684ab45ba71SJames Collins $html .= $item; 685ab45ba71SJames Collins } 686ab45ba71SJames Collins 687ab45ba71SJames Collins $html .= '</div>'; 688ab45ba71SJames Collins $html .= '</li>'; 689ab45ba71SJames Collins break; 690ab45ba71SJames Collins 691ab45ba71SJames Collins default: // seperate 692ab45ba71SJames Collins foreach ($siteToolsMenu as $item) { 693a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 694ab45ba71SJames Collins } 695ab45ba71SJames Collins 696ab45ba71SJames Collins foreach ($pageToolsMenu as $item) { 697a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 698a8eebd82SJames Collins } 699a8eebd82SJames Collins 700a8eebd82SJames Collins foreach ($userToolsMenu as $item) { 701a8eebd82SJames Collins $html .= '<li class="mikio-nav-item">' . $item . '</li>'; 702ab45ba71SJames Collins } 703ab45ba71SJames Collins 704ab45ba71SJames Collins break; 7059cff245bSJames Collins }//end switch 706ab45ba71SJames Collins 70712030b10SJames Collins if ($this->getConf('showLightDark') === true) { 7089e41d878SJames Collins $html .= '<li class="mikio-darklight"> 7099e41d878SJames Collins<a href="#" class="mikio-control mikio-button mikio-darklight-button">' . 710*34d5f19aSJames Collins ($this->getConf('autoLightDark') === true ? $this->mikioInlineIcon('sunmoon', 'mikio-darklight-auto') : '') . 7119e41d878SJames Collins $this->mikioInlineIcon('sun', 'mikio-darklight-light') . 7129e41d878SJames Collins $this->mikioInlineIcon('moon', 'mikio-darklight-dark') . 7139e41d878SJames Collins '</a></li>'; 71412030b10SJames Collins } 71512030b10SJames Collins 716ab45ba71SJames Collins $html .= '</ul>'; 717ab45ba71SJames Collins 7189cff245bSJames Collins if ($print === true) { 7199cff245bSJames Collins echo $html; 7209cff245bSJames Collins } 721a8eebd82SJames Collins return $html; 722a8eebd82SJames Collins } 723a8eebd82SJames Collins 724a8eebd82SJames Collins 725a8eebd82SJames Collins /** 726a8eebd82SJames Collins * Create a nav element from a string. <uri>|<title>; 727a8eebd82SJames Collins * 7289cff245bSJames Collins * @param string $str String to generate nav. 729a8eebd82SJames Collins * @return string nav elements generated 730a8eebd82SJames Collins */ 7319cff245bSJames Collins public function stringToNav(string $str) 73210b40067Snomadjimbob { 733a8eebd82SJames Collins $html = ''; 734a8eebd82SJames Collins 7353a385f2cSJames Collins if (empty($str) === false) { 736a8eebd82SJames Collins $items = explode(';', $str); 737a8eebd82SJames Collins if (count($items) > 0) { 738a8eebd82SJames Collins $html .= '<ul class="mikio-nav">'; 739a8eebd82SJames Collins foreach ($items as $item) { 740a8eebd82SJames Collins $parts = explode('|', $item); 741a8eebd82SJames Collins if ($parts > 1) { 7429cff245bSJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . 7439cff245bSJames Collins strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . 7449cff245bSJames Collins '</a></li>'; 745a8eebd82SJames Collins } 746a8eebd82SJames Collins } 747a8eebd82SJames Collins $html .= '</ul>'; 748a8eebd82SJames Collins } 7492b4583abSJames Collins } 7502b4583abSJames Collins 751ab45ba71SJames Collins return $html; 7522b4583abSJames Collins } 7532b4583abSJames Collins 754a8eebd82SJames Collins /** 755ab45ba71SJames Collins * print or return the main navbar 7562b4583abSJames Collins * 7579cff245bSJames Collins * @param boolean $print Print the navbar. 7589cff245bSJames Collins * @param boolean $showSub Include the sub navbar. 759ab45ba71SJames Collins * @return string generated content 7602b4583abSJames Collins */ 7619cff245bSJames Collins public function includeNavbar(bool $print = true, bool $showSub = false) 76210b40067Snomadjimbob { 763b39ad16dSJames Collins global $conf, $USERINFO; 764d3d7d2b7SJames Collins 765d3d7d2b7SJames Collins $homeUrl = wl(); 766d3d7d2b7SJames Collins 7679cff245bSJames Collins if (plugin_isdisabled('showpageafterlogin') === false) { 768d3d7d2b7SJames Collins $p = &plugin_load('action', 'showpageafterlogin'); 7693a385f2cSJames Collins if (empty($p) === false) { 7709cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 771d3d7d2b7SJames Collins $homeUrl = wl($p->getConf('page_after_login')); 772d3d7d2b7SJames Collins } 773d3d7d2b7SJames Collins } 774b39ad16dSJames Collins } else { 7759cff245bSJames Collins if (is_array($USERINFO) === true && count($USERINFO) > 0) { 776b39ad16dSJames Collins $url = $this->getConf('brandURLUser'); 777b39ad16dSJames Collins if (strlen($url) > 0) { 778b39ad16dSJames Collins $homeUrl = $url; 779d3d7d2b7SJames Collins } 780b39ad16dSJames Collins } else { 781b39ad16dSJames Collins $url = $this->getConf('brandURLGuest'); 782b39ad16dSJames Collins if (strlen($url) > 0) { 783b39ad16dSJames Collins $homeUrl = $url; 784b39ad16dSJames Collins } 785b39ad16dSJames Collins } 786b39ad16dSJames Collins } 787d3d7d2b7SJames Collins 788ab45ba71SJames Collins $html = ''; 78947161538SJames Collins 7909cff245bSJames Collins $html .= '<nav class="mikio-navbar' . (($this->getConf('stickyNavbar') === true) ? ' mikio-sticky' : '') . 7919cff245bSJames Collins '">'; 792f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 793d3d7d2b7SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . $homeUrl . '">'; 7949cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true || $this->getConf('navbarUseTitleText') === true) { 795ab45ba71SJames Collins // Brand image 7969cff245bSJames Collins if ($this->getConf('navbarUseTitleIcon') === true) { 7979cff245bSJames Collins $logo = $this->getMediaFile('logo', false); 7989cff245bSJames Collins ; 7993a385f2cSJames Collins if (empty($logo) === false) { 800f0241fc4SJames Collins $width = $this->getConf('navbarTitleIconWidth'); 801f0241fc4SJames Collins $height = $this->getConf('navbarTitleIconHeight'); 802f0241fc4SJames Collins $styles = ''; 803f0241fc4SJames Collins 804f0241fc4SJames Collins if (strlen($width) > 0 || strlen($height) > 0) { 8059cff245bSJames Collins if (ctype_digit($width) === true) { 806f0241fc4SJames Collins $styles .= 'max-width:' . intval($width) . 'px;'; 8079cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $width) === 1) { 808f0241fc4SJames Collins $styles .= 'max-width:' . $width . ';'; 8099cff245bSJames Collins } elseif (strcasecmp($width, 'none') === 0) { 8107a92c19bSJames Collins $styles .= 'max-width:none;'; 811f0241fc4SJames Collins } 812f0241fc4SJames Collins 8139cff245bSJames Collins if (ctype_digit($height) === true) { 814f0241fc4SJames Collins $styles .= 'max-height:' . intval($height) . 'px;'; 8159cff245bSJames Collins } elseif (preg_match('/^\d+(px|rem|em|%)$/', $height) === 1) { 816f0241fc4SJames Collins $styles .= 'max-height:' . $height . ';'; 8179cff245bSJames Collins } elseif (strcasecmp($height, 'none') === 0) { 8187a92c19bSJames Collins $styles .= 'max-height:none;'; 819f0241fc4SJames Collins } 820f0241fc4SJames Collins 821f0241fc4SJames Collins if (strlen($styles) > 0) { 822f0241fc4SJames Collins $styles = ' style="' . $styles . '"'; 823f0241fc4SJames Collins } 8249cff245bSJames Collins }//end if 825f0241fc4SJames Collins 826f0241fc4SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image"' . $styles . '>'; 8279cff245bSJames Collins }//end if 8289cff245bSJames Collins }//end if 829ab45ba71SJames Collins 830ab45ba71SJames Collins // Brand title 8319cff245bSJames Collins if ($this->getConf('navbarUseTitleText') === true) { 832ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 833a8eebd82SJames Collins $html .= '<h1 class="mikio-navbar-brand-title-text">' . $conf['title'] . '</h1>'; 8349cff245bSJames Collins if ($this->getConf('navbarUseTaglineText') === true) { 835a8eebd82SJames Collins $html .= '<p class="claim mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</p>'; 836ab45ba71SJames Collins } 837ab45ba71SJames Collins $html .= '</div>'; 838ab45ba71SJames Collins } 8399cff245bSJames Collins }//end if 840ab45ba71SJames Collins $html .= '</a>'; 841660b2c71SJames Collins $html .= '<div class="mikio-navbar-toggle"><span class="icon"></span></div>'; 842ab45ba71SJames Collins 843ab45ba71SJames Collins // Menus 844ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 845ab45ba71SJames Collins 8469cff245bSJames Collins $menus = [$this->getConf('navbarPosLeft', 'none'), $this->getConf('navbarPosMiddle', 'none'), 8479cff245bSJames Collins $this->getConf('navbarPosRight', 'none') 8489cff245bSJames Collins ]; 849a8eebd82SJames Collins foreach ($menus as $menuType) { 850a8eebd82SJames Collins switch ($menuType) { 851a8eebd82SJames Collins case 'custom': 852a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('navbarCustomMenuText', '')); 853a8eebd82SJames Collins break; 854a8eebd82SJames Collins case 'search': 855ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 856ab45ba71SJames Collins $html .= $this->includeSearch(false); 857ab45ba71SJames Collins $html .= '</div>'; 858a8eebd82SJames Collins break; 859a8eebd82SJames Collins case 'dokuwiki': 8609cff245bSJames Collins $html .= $this->includeDWMenu(false); 861a8eebd82SJames Collins break; 862a8eebd82SJames Collins } 863a8eebd82SJames Collins } 864ab45ba71SJames Collins 865ab45ba71SJames Collins $html .= '</div>'; 866f8039bf2SJames Collins $html .= '</div>'; 867ab45ba71SJames Collins $html .= '</nav>'; 868ab45ba71SJames Collins 869a8eebd82SJames Collins // Sub Navbar 8709cff245bSJames Collins if ($showSub === true) { 8719cff245bSJames Collins $sub = $this->includePage('submenu', false); 8723a385f2cSJames Collins if (empty($sub) === false) { 8739cff245bSJames Collins $html .= '<nav class="mikio-navbar mikio-sub-navbar">' . $sub . '</nav>'; 8749cff245bSJames Collins } 875ab45ba71SJames Collins } 876ab45ba71SJames Collins 8779cff245bSJames Collins if ($print === true) { 8789cff245bSJames Collins echo $html; 8799cff245bSJames Collins } 880ab45ba71SJames Collins return $html; 881ab45ba71SJames Collins } 882ab45ba71SJames Collins 883ab45ba71SJames Collins 884a8eebd82SJames Collins /** 885a8eebd82SJames Collins * Is there a sidebar 886a8eebd82SJames Collins * 8879cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 888a8eebd82SJames Collins * @return boolean if sidebar exists 889a8eebd82SJames Collins */ 8909cff245bSJames Collins public function sidebarExists(string $prefix = '') 89110b40067Snomadjimbob { 892a8eebd82SJames Collins global $conf; 893a8eebd82SJames Collins 8943a385f2cSJames Collins if (strcasecmp($prefix, 'left') === 0) { 8959cff245bSJames Collins $prefix = ''; 8969cff245bSJames Collins } 897a8eebd82SJames Collins 898a8eebd82SJames Collins return $this->pageExists($conf['sidebar' . $prefix]); 899a8eebd82SJames Collins } 900a8eebd82SJames Collins 901a8eebd82SJames Collins 902a8eebd82SJames Collins /** 903ab45ba71SJames Collins * Print or return the sidebar content 904ab45ba71SJames Collins * 9059cff245bSJames Collins * @param string $prefix Sidebar prefix to use when searching. 9069cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 9079cff245bSJames Collins * @param boolean $parse Parse the content. 908ab45ba71SJames Collins * @return string generated content 909ab45ba71SJames Collins */ 9109cff245bSJames Collins public function includeSidebar(string $prefix = '', bool $print = true, bool $parse = true) 91110b40067Snomadjimbob { 912ab45ba71SJames Collins global $conf, $ID; 913ab45ba71SJames Collins 914ab45ba71SJames Collins $html = ''; 915ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 916ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 917ab45ba71SJames Collins 9183a385f2cSJames Collins if (empty($confPrefix) === true) { 9199cff245bSJames Collins $confPrefix = 'Left'; 9209cff245bSJames Collins } 9211cdedf28SJames Collins if (strcasecmp($prefix, 'left') === 0) { 9229cff245bSJames Collins $prefix = ''; 9239cff245bSJames Collins } 924ab45ba71SJames Collins 9251cdedf28SJames Collins $sidebarPage = empty($conf[$prefix . 'sidebar']) === true ? $prefix . 'sidebar' : $conf[$prefix . 'sidebar']; 926ab45ba71SJames Collins 9279cff245bSJames Collins if ( 9289cff245bSJames Collins $this->getConf('sidebarShow' . $confPrefix) === true && page_findnearest($sidebarPage) !== false && 9291cdedf28SJames Collins p_get_metadata($ID, 'nosidebar', false) === null 9309cff245bSJames Collins ) { 9319cff245bSJames Collins $content = $this->includePage($sidebarPage . 'header', false); 9323a385f2cSJames Collins if (empty($content) === false) { 9339cff245bSJames Collins $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 9349cff245bSJames Collins } 935ab45ba71SJames Collins 9363a385f2cSJames Collins if (empty($prefix) === true) { 9379cff245bSJames Collins $rows = [$this->getConf('sidebarLeftRow1'), $this->getConf('sidebarLeftRow2'), 9389cff245bSJames Collins $this->getConf('sidebarLeftRow3'), $this->getConf('sidebarLeftRow4') 9399cff245bSJames Collins ]; 940ab45ba71SJames Collins 941a8eebd82SJames Collins foreach ($rows as $row) { 942a8eebd82SJames Collins switch ($row) { 943a8eebd82SJames Collins case 'search': 9449cff245bSJames Collins $html .= $this->includeSearch(false); 945a8eebd82SJames Collins break; 946a8eebd82SJames Collins case 'logged in user': 9479cff245bSJames Collins $html .= $this->includeLoggedIn(false); 948a8eebd82SJames Collins break; 949a8eebd82SJames Collins case 'content': 9509cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9513a385f2cSJames Collins if (empty($content) === false) { 9529cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9539cff245bSJames Collins } 954a8eebd82SJames Collins break; 955a8eebd82SJames Collins case 'tags': 956a8eebd82SJames Collins $html .= '<div class="mikio-tags"></div>'; 957a8eebd82SJames Collins } 958a8eebd82SJames Collins } 959a8eebd82SJames Collins } else { 9609cff245bSJames Collins $content = $this->includePage($sidebarPage, false); 9613a385f2cSJames Collins if (empty($content) === false) { 9629cff245bSJames Collins $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 9639cff245bSJames Collins } 9649cff245bSJames Collins }//end if 9659cff245bSJames Collins 9669cff245bSJames Collins $content = $this->includePage($sidebarPage . 'footer', false); 9673a385f2cSJames Collins if (empty($content) === false) { 9689cff245bSJames Collins $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 9699cff245bSJames Collins } 9709cff245bSJames Collins }//end if 9719cff245bSJames Collins 9723a385f2cSJames Collins if (empty($html) === true) { 9733a385f2cSJames Collins if (empty($prefix) === true && $this->getConf('sidebarAlwaysShowLeft') === true) { 9749cff245bSJames Collins $html = ' '; 9759cff245bSJames Collins } 9769cff245bSJames Collins if ($this->getConf('sidebarAlwaysShow' . ucfirst($prefix)) === true) { 9779cff245bSJames Collins $html = ' '; 9789cff245bSJames Collins } 979a8eebd82SJames Collins } 980ab45ba71SJames Collins 9813a385f2cSJames Collins if (empty($html) === false) { 9821cdedf28SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . (empty($prefix) === true ? 'left' : $prefix) . 9839cff245bSJames Collins '"><a class="mikio-sidebar-toggle' . 9849cff245bSJames Collins ($this->getConf('sidebarMobileDefaultCollapse') === true ? ' closed' : '') . '" href="#">' . 9859cff245bSJames Collins tpl_getLang('sidebar-title') . ' <span class="icon"></span></a><div class="mikio-sidebar-collapse">' . 9869cff245bSJames Collins $html . '</div></aside>'; 987ab45ba71SJames Collins } 988ab45ba71SJames Collins 9899cff245bSJames Collins if ($parse === true) { 9909cff245bSJames Collins $html = $this->includeIcons($html); 9913a04a100SJames Collins } 9929cff245bSJames Collins if ($print === true) { 9939cff245bSJames Collins echo $html; 994ab45ba71SJames Collins } 995ab45ba71SJames Collins return $html; 996ab45ba71SJames Collins } 997ab45ba71SJames Collins 998ab45ba71SJames Collins 999a8eebd82SJames Collins /** 1000ab45ba71SJames Collins * Print or return the page tools content 1001ab45ba71SJames Collins * 10029cff245bSJames Collins * @param boolean $print Print the generated content to the output buffer. 10039cff245bSJames Collins * @param boolean $includeId Include the dw__pagetools id in the element. 1004ab45ba71SJames Collins * @return string generated content 1005ab45ba71SJames Collins */ 10069cff245bSJames Collins public function includePageTools(bool $print = true, bool $includeId = false) 100710b40067Snomadjimbob { 10081293ce10SJames Collins global $USERINFO; 10091293ce10SJames Collins 10109cff245bSJames Collins $loggedIn = (is_array($USERINFO) === true && count($USERINFO) > 0); 1011ab45ba71SJames Collins $html = ''; 1012ab45ba71SJames Collins 10139cff245bSJames Collins $html .= '<nav' . ($includeId === true ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 1014b9c0582bSJames Collins $html .= '<ul class="tools">'; 1015ab45ba71SJames Collins 1016ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 1017ab45ba71SJames Collins foreach ($items as $item) { 10189cff245bSJames Collins $classes = []; 10193fd763a0SJames Collins $classes[] = $item->getType(); 10203fd763a0SJames Collins $attr = $item->getLinkAttributes(); 10213fd763a0SJames Collins 10229cff245bSJames Collins if (empty($attr['class']) === false) { 10233fd763a0SJames Collins $classes = array_merge($classes, explode(' ', $attr['class'])); 1024ab45ba71SJames Collins } 1025ab45ba71SJames Collins 10263fd763a0SJames Collins $classes = array_unique($classes); 10273fd763a0SJames Collins 10281293ce10SJames Collins $showItem = $this->getConf('pageToolsShow' . ucfirst($item->getType())); 10299cff245bSJames Collins if ( 10303a385f2cSJames Collins $showItem !== false && (strcasecmp($showItem, 'always') === 0 || 10313a385f2cSJames Collins (strcasecmp($showItem, 'logged in') === 0 && $loggedIn === true) || 10323a385f2cSJames Collins (strcasecmp($showItem, 'logged out') === 0 && $loggedIn === true)) 10339cff245bSJames Collins ) { 10343fd763a0SJames Collins $html .= '<li class="' . implode(' ', $classes) . '">'; 10359cff245bSJames Collins $html .= '<a href="' . $item->getLink() . '" class="' . $item->getType() . '" title="' . 10369cff245bSJames Collins $item->getTitle() . '"><div class="icon">' . inlineSVG($item->getSvg()) . 10379cff245bSJames Collins '</div><span class="a11y">' . $item->getLabel() . '</span></a>'; 10383fd763a0SJames Collins $html .= '</li>'; 10393fd763a0SJames Collins } 10409cff245bSJames Collins }//end foreach 10413fd763a0SJames Collins 10423fd763a0SJames Collins $html .= '</ul>'; 1043ab45ba71SJames Collins $html .= '</nav>'; 1044ab45ba71SJames Collins 10459cff245bSJames Collins if ($print === true) { 10469cff245bSJames Collins echo $html; 10479cff245bSJames Collins } 1048ab45ba71SJames Collins return $html; 1049ab45ba71SJames Collins } 1050ab45ba71SJames Collins 1051ab45ba71SJames Collins 1052a8eebd82SJames Collins /** 1053a8eebd82SJames Collins * Print or return the search bar 1054a8eebd82SJames Collins * 10559cff245bSJames Collins * @param boolean $print Print content. 1056a8eebd82SJames Collins * @return string contents of the search bar 1057a8eebd82SJames Collins */ 10589cff245bSJames Collins public function includeSearch(bool $print = true) 105910b40067Snomadjimbob { 10609cff245bSJames Collins global $lang, $ID, $ACT, $QUERY; 1061ab45ba71SJames Collins $html = ''; 1062ab45ba71SJames Collins 10639cff245bSJames Collins $html .= '<form class="mikio-search search" action="' . wl() . 10649cff245bSJames Collins '" accept-charset="utf-8" method="get" role="search">'; 1065a8eebd82SJames Collins $html .= '<input type="hidden" name="do" value="search">'; 1066a8eebd82SJames Collins $html .= '<input type="hidden" name="id" value="' . $ID . '">'; 1067c1cb9f15SChris MacMackin $html .= '<input name="q" '; 10689cff245bSJames Collins if ($this->getConf('searchUseTypeahead') === true) { 1069c1cb9f15SChris MacMackin $html .= 'class="search_typeahead" '; 1070c1cb9f15SChris MacMackin } 10719cff245bSJames Collins $html .= 'autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . 10723a385f2cSJames Collins ((strcasecmp($ACT, 'search') === 0) ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 1073a8eebd82SJames Collins $html .= '<button type="submit" title="' . $lang['btn_search'] . '">'; 10743a385f2cSJames Collins if (strcasecmp($this->getConf('searchButton'), 'icon') === 0) { 1075a8eebd82SJames Collins $html .= $this->mikioInlineIcon('search'); 1076ab45ba71SJames Collins } else { 1077ab45ba71SJames Collins $html .= $lang['btn_search']; 1078ab45ba71SJames Collins } 1079ab45ba71SJames Collins $html .= '</button>'; 1080ab45ba71SJames Collins $html .= '</form>'; 1081ab45ba71SJames Collins 10829cff245bSJames Collins if ($print === true) { 10839cff245bSJames Collins echo $html; 10849cff245bSJames Collins } 1085ab45ba71SJames Collins return $html; 1086ab45ba71SJames Collins } 1087ab45ba71SJames Collins 1088ab45ba71SJames Collins 1089a8eebd82SJames Collins /** 1090a8eebd82SJames Collins * Print or return content 1091a8eebd82SJames Collins * 10929cff245bSJames Collins * @param boolean $print Print content. 1093a8eebd82SJames Collins * @return string contents 1094a8eebd82SJames Collins */ 10959cff245bSJames Collins public function includeContent(bool $print = true) 109610b40067Snomadjimbob { 1097ab45ba71SJames Collins ob_start(); 10989cff245bSJames Collins tpl_content(false); 1099ab45ba71SJames Collins $html = ob_get_contents(); 1100ab45ba71SJames Collins ob_end_clean(); 1101ab45ba71SJames Collins 1102ab45ba71SJames Collins $html = $this->includeIcons($html); 1103ab45ba71SJames Collins $html = $this->parseContent($html); 1104ab45ba71SJames Collins 1105ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 1106ab45ba71SJames Collins 11079cff245bSJames Collins if ($this->getConf('heroTitle') === false) { 11089cff245bSJames Collins $html = '<div class="mikio-tags"></div>' . $html; 11099cff245bSJames Collins } 1110a8eebd82SJames Collins 1111a8eebd82SJames Collins $html = '<div class="mikio-article-content">' . $html . '</div>'; 1112a8eebd82SJames Collins 11139cff245bSJames Collins if ($print === true) { 11149cff245bSJames Collins echo $html; 11159cff245bSJames Collins } 1116ab45ba71SJames Collins return $html; 1117ab45ba71SJames Collins } 1118ab45ba71SJames Collins 1119a8eebd82SJames Collins /** 1120ab45ba71SJames Collins * Print or return footer 1121ab45ba71SJames Collins * 11229cff245bSJames Collins * @param boolean $print Print footer. 11239cff245bSJames Collins * @return string HTML string containing footer 1124ab45ba71SJames Collins */ 11259cff245bSJames Collins public function includeFooter(bool $print = true) 112610b40067Snomadjimbob { 1127ab45ba71SJames Collins global $ACT; 1128ab45ba71SJames Collins 1129ab45ba71SJames Collins $html = ''; 1130ab45ba71SJames Collins 1131ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 11329cff245bSJames Collins $html .= '<div class="doc">' . tpl_pageinfo(true) . '</div>'; 11339cff245bSJames Collins $html .= $this->includePage('footer', false); 1134ab45ba71SJames Collins 1135a8eebd82SJames Collins $html .= $this->stringToNav($this->getConf('footerCustomMenuText')); 1136ab45ba71SJames Collins 11379cff245bSJames Collins if ($this->getConf('footerSearch') === true) { 1138ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 11399cff245bSJames Collins $html .= $this->includeSearch(false); 1140ab45ba71SJames Collins $html .= '</div>'; 1141ab45ba71SJames Collins } 1142ab45ba71SJames Collins 1143a8eebd82SJames Collins $showPageTools = $this->getConf('pageToolsFooter'); 11449cff245bSJames Collins if ( 11453a385f2cSJames Collins strcasecmp($ACT, 'show') === 0 && (strcasecmp($showPageTools, 'always') === 0 || 11463a385f2cSJames Collins $this->userCanEdit() === true && strcasecmp($showPageTools, 'page editors') === 0) 11479cff245bSJames Collins ) { 11489cff245bSJames Collins $html .= $this->includePageTools(false); 11499cff245bSJames Collins } 1150ab45ba71SJames Collins 11519cff245bSJames Collins $meta['licenseType'] = ['multichoice', '_choices' => ['none', 'badge', 'button']]; 11529cff245bSJames Collins $meta['licenseImageOnly'] = ['onoff']; 1153ab45ba71SJames Collins 1154ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 11559cff245bSJames Collins if ($licenseType !== 'none') { 11569cff245bSJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), true, true); 1157ab45ba71SJames Collins } 1158ab45ba71SJames Collins 1159ab45ba71SJames Collins $html .= '</footer>'; 1160ab45ba71SJames Collins 11619cff245bSJames Collins if ($print === true) { 11629cff245bSJames Collins echo $html; 11639cff245bSJames Collins } 1164ab45ba71SJames Collins return $html; 1165ab45ba71SJames Collins } 1166ab45ba71SJames Collins 1167ab45ba71SJames Collins 1168a8eebd82SJames Collins /** 1169ab45ba71SJames Collins * Print or return breadcrumb trail 1170ab45ba71SJames Collins * 11719cff245bSJames Collins * @param boolean $print Print out trail. 11729cff245bSJames Collins * @param boolean $parse Parse trail before printing. 11739cff245bSJames Collins * @return string HTML string containing breadcrumbs 1174ab45ba71SJames Collins */ 11759cff245bSJames Collins public function includeBreadcrumbs(bool $print = true, bool $parse = true) 117610b40067Snomadjimbob { 1177a8eebd82SJames Collins global $conf, $ID, $lang, $ACT; 1178a8eebd82SJames Collins 11793a385f2cSJames Collins if ( 11803a385f2cSJames Collins $this->getConf('breadcrumbHideHome') === true && strcasecmp($ID, 'start') === 0 && 118195372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['breadcrumbs'] === 0 11823a385f2cSJames Collins ) { 11839cff245bSJames Collins return ''; 11849cff245bSJames Collins } 1185ab45ba71SJames Collins 1186ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 1187f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 11883a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 118995372bffSJames Collins if ($conf['breadcrumbs'] !== 0) { 11909cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === false && $this->getConf('breadcrumbSep') === false) { 1191ab45ba71SJames Collins ob_start(); 119275adba86SJames Collins tpl_breadcrumbs(); 1193ab45ba71SJames Collins $html .= ob_get_contents(); 1194ab45ba71SJames Collins ob_end_clean(); 1195ab45ba71SJames Collins } else { 1196ab45ba71SJames Collins $sep = '•'; 1197ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 1198ab45ba71SJames Collins 11999cff245bSJames Collins if ($this->getConf('breadcrumbSep') === true) { 1200ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 12019cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-sep', false); 1202ab45ba71SJames Collins 12039cff245bSJames Collins if ($img !== false) { 1204ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1205ab45ba71SJames Collins } 120647161538SJames Collins } 120747161538SJames Collins 12089cff245bSJames Collins if ($this->getConf('breadcrumbPrefix') === true) { 1209ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 12109cff245bSJames Collins $img = $this->getMediaFile('breadcrumb-prefix', false); 1211ab45ba71SJames Collins 12129cff245bSJames Collins if ($img !== false) { 1213ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 1214ab45ba71SJames Collins } 1215ab45ba71SJames Collins } 1216ab45ba71SJames Collins 1217ab45ba71SJames Collins $crumbs = breadcrumbs(); 1218ab45ba71SJames Collins 1219ab45ba71SJames Collins $html .= '<ul>'; 12203a385f2cSJames Collins if (empty($prefix) === false) { 12219cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 12229cff245bSJames Collins } 1223ab45ba71SJames Collins 1224ab45ba71SJames Collins $last = count($crumbs); 1225ab45ba71SJames Collins $i = 0; 1226ab45ba71SJames Collins foreach ($crumbs as $id => $name) { 1227ab45ba71SJames Collins $i++; 122895372bffSJames Collins if ($i !== 1) { 1229ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 123095372bffSJames Collins } 12319cff245bSJames Collins $html .= '<li' . ($i === $last ? ' class="curid"' : '') . '>'; 12329cff245bSJames Collins $html .= tpl_pagelink($id, null, true); 1233ab45ba71SJames Collins $html .= '</li>'; 1234ab45ba71SJames Collins } 1235ab45ba71SJames Collins 1236ab45ba71SJames Collins $html .= '</ul>'; 12379cff245bSJames Collins }//end if 12389cff245bSJames Collins }//end if 12399cff245bSJames Collins }//end if 12403d11a778SJames Collins 12413d11a778SJames Collins $html .= '</div>'; 12423d11a778SJames Collins $html .= '</div>'; 12433d11a778SJames Collins 12449cff245bSJames Collins if ($parse === true) { 12459cff245bSJames Collins $html = $this->includeIcons($html); 12469cff245bSJames Collins } 12479cff245bSJames Collins if ($print === true) { 12489cff245bSJames Collins echo $html; 12499cff245bSJames Collins } 12503d11a778SJames Collins return $html; 12513d11a778SJames Collins } 12523d11a778SJames Collins 12533d11a778SJames Collins /** 12543d11a778SJames Collins * Print or return you are here trail 12553d11a778SJames Collins * 12569cff245bSJames Collins * @param boolean $print Print out trail. 12579cff245bSJames Collins * @param boolean $parse Parse trail before printing. 12589cff245bSJames Collins * @return string HTML string containing breadcrumbs 12593d11a778SJames Collins */ 12609cff245bSJames Collins public function includeYouAreHere(bool $print = true, bool $parse = true) 12613d11a778SJames Collins { 12623d11a778SJames Collins global $conf, $ID, $lang, $ACT; 12633d11a778SJames Collins 12643a385f2cSJames Collins if ( 12653a385f2cSJames Collins $this->getConf('youarehereHideHome') === true && strcasecmp($ID, 'start') === 0 && 126695372bffSJames Collins strcasecmp($ACT, 'show') === 0 || strcasecmp($ACT, 'showtag') === 0 || $conf['youarehere'] === 0 12673a385f2cSJames Collins ) { 12689cff245bSJames Collins return ''; 12699cff245bSJames Collins } 12703d11a778SJames Collins 12713d11a778SJames Collins $html = '<div class="mikio-youarehere">'; 12723d11a778SJames Collins $html .= '<div class="mikio-container">'; 12733a385f2cSJames Collins if (strcasecmp($ACT, 'show') === 0) { 127495372bffSJames Collins if ($conf['youarehere'] !== 0) { 12759cff245bSJames Collins if ($this->getConf('youareherePrefix') === false && $this->getConf('youarehereSep') === false) { 127695372bffSJames Collins $html .= '<div class="mikio-bcdw">'; 1277ab45ba71SJames Collins ob_start(); 127875adba86SJames Collins tpl_youarehere(); 1279ab45ba71SJames Collins $html .= ob_get_contents(); 1280ab45ba71SJames Collins ob_end_clean(); 128195372bffSJames Collins $html .= '</div>'; 1282ab45ba71SJames Collins } else { 1283ab45ba71SJames Collins $sep = ' » '; 1284ab45ba71SJames Collins $prefix = $lang['youarehere']; 1285ab45ba71SJames Collins 12869cff245bSJames Collins if ($this->getConf('youarehereSep') === true) { 12873d11a778SJames Collins $sep = $this->getConf('youarehereSepText'); 12889cff245bSJames Collins $img = $this->getMediaFile('youarehere-sep', false); 1289ab45ba71SJames Collins 12909cff245bSJames Collins if ($img !== false) { 1291ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 1292ab45ba71SJames Collins } 129375adba86SJames Collins } 129475adba86SJames Collins 12959cff245bSJames Collins if ($this->getConf('youareherePrefix') === true) { 12963d11a778SJames Collins $prefix = $this->getConf('youareherePrefixText'); 12979cff245bSJames Collins $img = $this->getMediaFile('youarehere-prefix', false); 1298ab45ba71SJames Collins 12999cff245bSJames Collins if ($img !== false) { 1300ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 130175adba86SJames Collins } 130247161538SJames Collins } 130347161538SJames Collins 1304ab45ba71SJames Collins $html .= '<ul>'; 13053a385f2cSJames Collins if (empty($prefix) === false) { 13069cff245bSJames Collins $html .= '<li class="prefix">' . $prefix . '</li>'; 13079cff245bSJames Collins } 13089cff245bSJames Collins $html .= '<li>' . tpl_pagelink(':' . $conf['start'], null, true) . '</li>'; 1309ab45ba71SJames Collins 1310ab45ba71SJames Collins $parts = explode(':', $ID); 1311ab45ba71SJames Collins $count = count($parts); 1312ab45ba71SJames Collins 1313ab45ba71SJames Collins $part = ''; 13149cff245bSJames Collins for ($i = 0; $i < ($count - 1); $i++) { 1315ab45ba71SJames Collins $part .= $parts[$i] . ':'; 1316ab45ba71SJames Collins $page = $part; 13179cff245bSJames Collins if ($page === $conf['start']) { 13189cff245bSJames Collins continue; 13199cff245bSJames Collins } 1320ab45ba71SJames Collins 1321ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13229cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1323ab45ba71SJames Collins } 1324ab45ba71SJames Collins 1325ab45ba71SJames Collins resolve_pageid('', $page, $exists); 13269cff245bSJames Collins if ((isset($page) === true && $page === $part . $parts[$i]) === false) { 1327ab45ba71SJames Collins $page = $part . $parts[$i]; 13289cff245bSJames Collins if ($page !== $conf['start']) { 1329ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 13309cff245bSJames Collins $html .= '<li>' . tpl_pagelink($page, null, true) . '</li>'; 1331ab45ba71SJames Collins } 1332ab45ba71SJames Collins } 1333ab45ba71SJames Collins 1334ab45ba71SJames Collins $html .= '</ul>'; 13359cff245bSJames Collins }//end if 13369cff245bSJames Collins }//end if 1337ab45ba71SJames Collins 13383d11a778SJames Collins $showLast = $this->getConf('youarehereShowLast'); 13399cff245bSJames Collins if ($showLast !== 0) { 1340a8eebd82SJames Collins preg_match_all('/(<li[^>]*>.+?<\/li>)/', $html, $matches); 13419cff245bSJames Collins if (count($matches) > 0 && count($matches[0]) > (($showLast * 2) + 2)) { 1342a8eebd82SJames Collins $count = count($matches[0]); 1343a8eebd82SJames Collins $list = ''; 1344a8eebd82SJames Collins 1345a8eebd82SJames Collins // Show Home 1346a8eebd82SJames Collins $list .= $matches[0][0] . $matches[0][1]; 1347a8eebd82SJames Collins 1348a8eebd82SJames Collins $list .= '<li>...</li>'; 13499cff245bSJames Collins for ($i = ($count - ($showLast * 2)); $i <= $count; $i++) { 1350a8eebd82SJames Collins $list .= $matches[0][$i]; 1351a8eebd82SJames Collins } 1352a8eebd82SJames Collins 1353a8eebd82SJames Collins $html = preg_replace('/<ul>.*<\/ul>/', '<ul>' . $list . '</ul>', $html); 1354a8eebd82SJames Collins } 1355a8eebd82SJames Collins } 1356a8eebd82SJames Collins 13573d11a778SJames Collins switch ($this->getConf('youarehereHome')) { 1358a8eebd82SJames Collins case 'none': 1359a8eebd82SJames Collins $html = preg_replace('/<li[^>]*>.+?<\/li>/', '', $html, 2); 1360a8eebd82SJames Collins break; 1361a8eebd82SJames Collins case 'home': 1362a8eebd82SJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . tpl_getlang('home') . '$3', $html, 1); 1363a8eebd82SJames Collins break; 1364a8eebd82SJames Collins case 'icon': 13659cff245bSJames Collins $html = preg_replace('/(<a[^>]*>)(.+?)(<\/a>)/', '$1' . 13669cff245bSJames Collins $this->mikioInlineIcon('home') . '$3', $html, 1); 1367a8eebd82SJames Collins break; 1368a8eebd82SJames Collins } 1369a8eebd82SJames Collins } else { 1370a8eebd82SJames Collins $html .= '≪ '; 13719cff245bSJames Collins if (isset($_GET['page']) === true) { 13729cff245bSJames Collins $html .= '<a href="' . wl($ID, ['do' => $ACT]) . '">Back</a> / '; 1373a8eebd82SJames Collins } 13744057121fSJames Collins $html .= '<a href="' . wl($ID) . '">View Page</a>'; 13759cff245bSJames Collins }//end if 13769cff245bSJames Collins 13779cff245bSJames Collins $html .= '</div>'; 13789cff245bSJames Collins $html .= '</div>'; 13799cff245bSJames Collins 13809cff245bSJames Collins if ($parse === true) { 13819cff245bSJames Collins $html = $this->includeIcons($html); 1382a8eebd82SJames Collins } 13839cff245bSJames Collins if ($print === true) { 13849cff245bSJames Collins echo $html; 13859cff245bSJames Collins } 1386ab45ba71SJames Collins return $html; 1387ab45ba71SJames Collins } 1388ab45ba71SJames Collins 13891785fc73SJames Collins /** 13901785fc73SJames Collins * Get Page Title 13919cff245bSJames Collins * 13929cff245bSJames Collins * @return string page title 13931785fc73SJames Collins */ 139410b40067Snomadjimbob public function parsePageTitle() 139510b40067Snomadjimbob { 13962060e56cSJames Collins global $ID; 13972060e56cSJames Collins 13982060e56cSJames Collins $title = p_get_first_heading($ID); 13999cff245bSJames Collins if (strlen($title) <= 0) { 14009cff245bSJames Collins $title = tpl_pagetitle(null, true); 14019cff245bSJames Collins } 14021785fc73SJames Collins $title = $this->includeIcons($title); 14031785fc73SJames Collins 14041785fc73SJames Collins return $title; 14051785fc73SJames Collins } 14061785fc73SJames Collins 1407ab45ba71SJames Collins 140875adba86SJames Collins /** 1409a8eebd82SJames Collins * Print or return hero block 141075adba86SJames Collins * 14119cff245bSJames Collins * @param boolean $print Print content. 1412a8eebd82SJames Collins * @return string contents of hero 141375adba86SJames Collins */ 14149cff245bSJames Collins public function includeHero(bool $print = true) 141510b40067Snomadjimbob { 1416a8eebd82SJames Collins $html = ''; 141747161538SJames Collins 14189cff245bSJames Collins if ($this->getConf('heroTitle') === true) { 1419a8eebd82SJames Collins $html .= '<div class="mikio-hero">'; 1420f8039bf2SJames Collins $html .= '<div class="mikio-container">'; 1421a8eebd82SJames Collins $html .= '<div class="mikio-hero-text">'; 14223a385f2cSJames Collins if (strcasecmp($this->getConf('youareherePosition'), 'hero') === 0) { 14239cff245bSJames Collins $html .= $this->includeYouAreHere(false); 14249cff245bSJames Collins } 14253a385f2cSJames Collins if (strcasecmp($this->getConf('breadcrumbPosition'), 'hero') === 0) { 14269cff245bSJames Collins $html .= $this->includeBreadcrumbs(false); 14279cff245bSJames Collins } 1428ab45ba71SJames Collins 1429a8eebd82SJames Collins $html .= '<h1 class="mikio-hero-title">'; 14301785fc73SJames Collins $html .= $this->parsePageTitle(); // No idea why this requires a blank space afterwards to work? 1431a8eebd82SJames Collins $html .= '</h1>'; 1432a8eebd82SJames Collins $html .= '<h2 class="mikio-hero-subtitle"></h2>'; 1433a8eebd82SJames Collins $html .= '</div>'; 143447161538SJames Collins 14359cff245bSJames Collins $hero_image = $this->getMediaFile('hero', true, $this->getConf('heroImagePropagation', true)); 1436a8eebd82SJames Collins $hero_image_resize_class = ''; 14373a385f2cSJames Collins if (empty($hero_image) === false) { 1438a8eebd82SJames Collins $hero_image = ' style="background-image:url(\'' . $hero_image . '\');"'; 1439a8eebd82SJames Collins $hero_image_resize_class = ' mikio-hero-image-resize'; 144047161538SJames Collins } 1441a8eebd82SJames Collins 14429cff245bSJames Collins $html .= '<div class="mikio-hero-image' . $hero_image_resize_class . '"' . $hero_image . 14439cff245bSJames Collins '><div class="mikio-tags"></div></div>'; 1444a8eebd82SJames Collins 1445a8eebd82SJames Collins $html .= '</div>'; 1446f8039bf2SJames Collins $html .= '</div>'; 14479cff245bSJames Collins }//end if 14489cff245bSJames Collins 14499cff245bSJames Collins if ($print === true) { 14509cff245bSJames Collins echo $html; 145175adba86SJames Collins } 1452a8eebd82SJames Collins 1453a8eebd82SJames Collins return $html; 145475adba86SJames Collins } 145575adba86SJames Collins 145675adba86SJames Collins 145775adba86SJames Collins /** 1458a8eebd82SJames Collins * Print or return out TOC 145975adba86SJames Collins * 14609cff245bSJames Collins * @param boolean $print Print TOC. 14619cff245bSJames Collins * @param boolean $parse Parse icons. 1462a8eebd82SJames Collins * @return string contents of TOC 146375adba86SJames Collins */ 14649cff245bSJames Collins public function includeTOC(bool $print = true, bool $parse = true) 146510b40067Snomadjimbob { 1466ab45ba71SJames Collins $html = ''; 14672b4583abSJames Collins 1468ab45ba71SJames Collins $tocHtml = tpl_toc(true); 1469ab45ba71SJames Collins 14703a385f2cSJames Collins if (empty($tocHtml) === false) { 1471f65a4e5eSJames Collins $tocHtml = preg_replace( 1472f65a4e5eSJames Collins '/(<h3.+?toggle.+?>)(.+?)<\/h3>/', 1473f65a4e5eSJames Collins '$1' . 1474f65a4e5eSJames Collins $this->mikioInlineIcon('hamburger', 'hamburger') . '$2' . 1475f65a4e5eSJames Collins $this->mikioInlineIcon('down-arrow', 'down-arrow') . '</h3>', 1476f65a4e5eSJames Collins $tocHtml 1477f65a4e5eSJames Collins ); 1478ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 1479a8eebd82SJames Collins $tocHtml = preg_replace('/<ul.*>\s*<\/ul>\s*/', '', $tocHtml); 1480ab45ba71SJames Collins 1481ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 1482ab45ba71SJames Collins $html .= $tocHtml; 1483ab45ba71SJames Collins $html .= '</div>'; 14842b4583abSJames Collins } 14852b4583abSJames Collins 14869cff245bSJames Collins if ($parse === true) { 14879cff245bSJames Collins $html = $this->includeIcons($html); 14889cff245bSJames Collins } 14899cff245bSJames Collins 14909cff245bSJames Collins if ($print === true) { 1491ab45ba71SJames Collins echo $html; 1492ab45ba71SJames Collins } 1493ab45ba71SJames Collins 14949cff245bSJames Collins return $html; 14959cff245bSJames Collins } 14969cff245bSJames Collins 1497ab45ba71SJames Collins 1498a8eebd82SJames Collins /** 1499ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 1500ab45ba71SJames Collins * 15019cff245bSJames Collins * @param string $str Content to parse. 1502ab45ba71SJames Collins * @return string parsed string 1503ab45ba71SJames Collins */ 15049cff245bSJames Collins public function includeIcons(string $str) 150510b40067Snomadjimbob { 1506ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 1507ab45ba71SJames Collins 1508ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 15093a385f2cSJames Collins if (empty($iconTag) === true) { 15109cff245bSJames Collins return $str; 15119cff245bSJames Collins } 1512ab45ba71SJames Collins 15139cff245bSJames Collins if ( 15149cff245bSJames Collins in_array($ACT, ['show', 'showtag', 'revisions', 'index', 'preview']) === true || 15153a385f2cSJames Collins strcasecmp($ACT, 'admin') === 0 && count($MIKIO_ICONS) > 0 15169cff245bSJames Collins ) { 1517a2005a27SJames Collins $content = $str; 1518a2005a27SJames Collins $preview = null; 1519a2005a27SJames Collins 15203a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15219cff245bSJames Collins $html = new \simple_html_dom(); 1522a2005a27SJames Collins $html->stripRNAttrValues = false; 1523a2005a27SJames Collins $html->load($str, true, false); 1524a2005a27SJames Collins 1525a2005a27SJames Collins $preview = $html->find('div.preview'); 15269cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1527a2005a27SJames Collins $content = $preview[0]->innertext; 1528a2005a27SJames Collins } 1529a2005a27SJames Collins } 1530a2005a27SJames Collins 15311785fc73SJames Collins $page_regex = '/(.*)/'; 15329cff245bSJames Collins if (stripos($str, '<pre') !== false) { 15331785fc73SJames Collins $page_regex = '/<(?!pre|\/).*?>(.*)[^<]*/'; 15341785fc73SJames Collins } 15351785fc73SJames Collins 15361785fc73SJames Collins $content = preg_replace_callback($page_regex, function ($icons) { 1537a2005a27SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 1538a2005a27SJames Collins 153910b40067Snomadjimbob return preg_replace_callback( 154010b40067Snomadjimbob '/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 1541ab45ba71SJames Collins function ($matches) { 1542ab45ba71SJames Collins global $MIKIO_ICONS; 1543ab45ba71SJames Collins 1544ab45ba71SJames Collins $s = $matches[0]; 1545ab45ba71SJames Collins 1546ab45ba71SJames Collins if (count($MIKIO_ICONS) > 0) { 1547ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 1548ab45ba71SJames Collins 1549ab45ba71SJames Collins if (count($matches) > 1) { 1550ab45ba71SJames Collins $e = explode(' ', $matches[1]); 1551ab45ba71SJames Collins 1552ab45ba71SJames Collins if (count($e) > 1) { 1553ab45ba71SJames Collins foreach ($MIKIO_ICONS as $iconItem) { 15549cff245bSJames Collins if (strcasecmp($iconItem['name'], $e[0]) === 0) { 1555ab45ba71SJames Collins $icon = $iconItem; 1556ab45ba71SJames Collins 1557ab45ba71SJames Collins $s = $icon['insert']; 1558ab45ba71SJames Collins for ($i = 1; $i < 9; $i++) { 15591cdedf28SJames Collins if (count($e) < $i || empty($e[$i]) === true) { 15609cff245bSJames Collins if (isset($icon['$' . $i]) === true) { 1561ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$' . $i], $s); 1562ab45ba71SJames Collins } 1563ab45ba71SJames Collins } else { 1564ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 1565ab45ba71SJames Collins } 1566ab45ba71SJames Collins } 1567ab45ba71SJames Collins 1568ab45ba71SJames Collins $dir = ''; 15699cff245bSJames Collins if (isset($icon['dir']) === true) { 15709cff245bSJames Collins $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 15719cff245bSJames Collins } 1572ab45ba71SJames Collins 1573ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 1574ab45ba71SJames Collins 1575ab45ba71SJames Collins break; 15769cff245bSJames Collins }//end if 15779cff245bSJames Collins }//end foreach 1578ab45ba71SJames Collins } else { 1579ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 15809cff245bSJames Collins }//end if 15819cff245bSJames Collins }//end if 15829cff245bSJames Collins }//end if 158375adba86SJames Collins 1584ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 15859cff245bSJames Collins if ($count === 0) { 1586ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 1587ab45ba71SJames Collins } 1588ab45ba71SJames Collins 1589ab45ba71SJames Collins return $s; 1590ab45ba71SJames Collins }, 159110b40067Snomadjimbob $icons[0] 159210b40067Snomadjimbob ); 1593a2005a27SJames Collins }, $content); 1594a2005a27SJames Collins 15953a385f2cSJames Collins if (strcasecmp($ACT, 'preview') === 0) { 15969cff245bSJames Collins if (is_array($preview) === true && count($preview) > 0) { 1597a2005a27SJames Collins $preview[0]->innertext = $content; 1598a2005a27SJames Collins } 1599a2005a27SJames Collins 1600a2005a27SJames Collins $str = $html->save(); 1601a2005a27SJames Collins $html->clear(); 1602a2005a27SJames Collins unset($html); 1603a2005a27SJames Collins } else { 1604a2005a27SJames Collins $str = $content; 1605a2005a27SJames Collins } 16069cff245bSJames Collins }//end if 1607ab45ba71SJames Collins 1608ab45ba71SJames Collins return $str; 1609ab45ba71SJames Collins } 161047161538SJames Collins 1611c165b184SJames Collins /** 1612a8eebd82SJames Collins * Parse HTML for theme 1613c165b184SJames Collins * 16149cff245bSJames Collins * @param string $content HTML content to parse. 1615a8eebd82SJames Collins * @return string Parsed content 1616c165b184SJames Collins */ 16179cff245bSJames Collins public function parseContent(string $content) 161810b40067Snomadjimbob { 1619ab45ba71SJames Collins global $INPUT, $ACT; 1620ab45ba71SJames Collins 1621a8eebd82SJames Collins // Add Mikio Section titles 16223a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 16239cff245bSJames Collins $admin_sections = [ 1624ab45ba71SJames Collins // Section Insert Before Icon 16259cff245bSJames Collins 'navbar' => ['navbarUseTitleIcon', ''], 16269cff245bSJames Collins 'search' => ['searchButton', ''], 16279cff245bSJames Collins 'hero' => ['heroTitle', ''], 16289cff245bSJames Collins 'tags' => ['tagsConsolidate', ''], 16299cff245bSJames Collins 'breadcrumb' => ['breadcrumbHideHome', ''], 16309cff245bSJames Collins 'youarehere' => ['youarehereHideHome', ''], 16319cff245bSJames Collins 'sidebar' => ['sidebarShowLeft', ''], 16329cff245bSJames Collins 'toc' => ['tocFull', ''], 16339cff245bSJames Collins 'pagetools' => ['pageToolsFloating', ''], 16349cff245bSJames Collins 'footer' => ['footerCustomMenuText', ''], 16359cff245bSJames Collins 'license' => ['licenseType', ''], 16369cff245bSJames Collins 'acl' => ['includePageUseACL', ''], 16379cff245bSJames Collins 'sticky' => ['stickyTopHeader', ''], 16389cff245bSJames Collins ]; 1639ab45ba71SJames Collins 1640ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 1641ab45ba71SJames Collins $search = $items[0]; 1642ab45ba71SJames Collins $icon = $items[1]; 1643ab45ba71SJames Collins 164410b40067Snomadjimbob $content = preg_replace( 1645adf52ebbSJames Collins '/<tr(.*)>\s*<td class="label">\s*<span class="outkey">(tpl»mikio»' . $search . ')<\/span>/', 16469cff245bSJames Collins '<tr$1><td class="mikio-config-table-header" colspan="2">' . $this->mikioInlineIcon($icon) . 16479cff245bSJames Collins tpl_getLang('config_' . $section) . 16489cff245bSJames Collins '</td></tr><tr class="default"><td class="label"><span class="outkey">tpl»mikio»' . 16499cff245bSJames Collins $search . '</span>', 165010b40067Snomadjimbob $content 165110b40067Snomadjimbob ); 1652ab45ba71SJames Collins } 1653bb5a3dd1SJames Collins } elseif (strcasecmp($INPUT->str('page'), 'styling') === 0) { 1654ad182e6dSnomadjimbob $mikioPluginMissing = true; 1655ad182e6dSnomadjimbob /* Hide plugin fields if not installed */ 16569ffe9161Snomadjimbob if (plugin_load('action', 'mikioplugin') !== null) { 1657ad182e6dSnomadjimbob $mikioPluginMissing = false; 1658ad182e6dSnomadjimbob } 1659ad182e6dSnomadjimbob 1660cee81679SJames Collins $style_headers = [ 1661f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__text_'], 1662f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__code_'], 1663f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__control_'], 1664f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__topheader_'], 1665f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__navbar_'], 1666f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__subnavbar_'], 1667f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__tag_background_color_'], 1668f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__breadcrumb_'], 1669f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__hero_'], 1670f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__sidebar_'], 1671f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__content_'], 1672f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__toc_'], 1673f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__pagetools_'], 1674f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__footer_'], 1675f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__table_'], 1676f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__dropdown_'], 1677f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__section_edit_'], 1678f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__tree_'], 1679f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__tab_'], 1680ad182e6dSnomadjimbob ['title' => 'Mikio Plugin', 'starts_with' => '__plugin_', 'heading' => 'h2', 16819ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 16829ffe9161Snomadjimbob ], 1683ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_primary_', 'hidden' => $mikioPluginMissing], 1684ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_secondary_', 16859ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 16869ffe9161Snomadjimbob ], 1687ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_success_', 'hidden' => $mikioPluginMissing], 1688ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_danger_', 'hidden' => $mikioPluginMissing], 1689ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_warning_', 'hidden' => $mikioPluginMissing], 1690ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_info_', 'hidden' => $mikioPluginMissing], 1691ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_light_', 'hidden' => $mikioPluginMissing], 1692ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_dark_', 'hidden' => $mikioPluginMissing], 1693ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_link_', 'hidden' => $mikioPluginMissing], 1694ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_carousel_', 'hidden' => $mikioPluginMissing], 1695ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_steps_', 'hidden' => $mikioPluginMissing], 1696ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_tabgroup_', 'hidden' => $mikioPluginMissing], 1697ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_tooltip_', 'hidden' => $mikioPluginMissing], 1698cee81679SJames Collins ['title' => 'Dark Mode', 'starts_with' => '__darkmode_', 'heading' => 'h2'], 1699f65a4e5eSJames Collins ['title' => 'Base', 'starts_with' => '__darkmode_text_'], 1700f65a4e5eSJames Collins ['title' => 'Code', 'starts_with' => '__darkmode_code_'], 1701f65a4e5eSJames Collins ['title' => 'Controls', 'starts_with' => '__darkmode_control_'], 1702f65a4e5eSJames Collins ['title' => 'Header', 'starts_with' => '__darkmode_topheader_'], 1703f65a4e5eSJames Collins ['title' => 'Navbar', 'starts_with' => '__darkmode_navbar_'], 1704f65a4e5eSJames Collins ['title' => 'Sub Navbar', 'starts_with' => '__darkmode_subnavbar_'], 1705f65a4e5eSJames Collins ['title' => 'Tags', 'starts_with' => '__darkmode_tag_background_color_'], 1706f65a4e5eSJames Collins ['title' => 'Breadcrumbs', 'starts_with' => '__darkmode_breadcrumb_'], 1707f65a4e5eSJames Collins ['title' => 'Hero', 'starts_with' => '__darkmode_hero_'], 1708f65a4e5eSJames Collins ['title' => 'Sidebar', 'starts_with' => '__darkmode_sidebar_'], 1709f65a4e5eSJames Collins ['title' => 'Content', 'starts_with' => '__darkmode_content_'], 1710f65a4e5eSJames Collins ['title' => 'TOC', 'starts_with' => '__darkmode_toc_'], 1711f65a4e5eSJames Collins ['title' => 'Page Tools', 'starts_with' => '__darkmode_pagetools_'], 1712f65a4e5eSJames Collins ['title' => 'Footer', 'starts_with' => '__darkmode_footer_'], 1713f65a4e5eSJames Collins ['title' => 'Table', 'starts_with' => '__darkmode_table_'], 1714f65a4e5eSJames Collins ['title' => 'Dropdown', 'starts_with' => '__darkmode_dropdown_'], 1715f65a4e5eSJames Collins ['title' => 'Section Edit', 'starts_with' => '__darkmode_section_edit_'], 1716f65a4e5eSJames Collins ['title' => 'Tree', 'starts_with' => '__darkmode_tree_'], 1717f65a4e5eSJames Collins ['title' => 'Tabs', 'starts_with' => '__darkmode_tab_'], 1718ad182e6dSnomadjimbob ['title' => 'Mikio Plugin (Dark mode)', 'starts_with' => '__plugin_darkmode_', 'heading' => 'h2', 17199ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17209ffe9161Snomadjimbob ], 1721ad182e6dSnomadjimbob ['title' => 'Primary Colours', 'starts_with' => '__plugin_darkmode_primary_', 17229ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17239ffe9161Snomadjimbob ], 1724ad182e6dSnomadjimbob ['title' => 'Secondary Colours', 'starts_with' => '__plugin_darkmode_secondary_', 17259ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17269ffe9161Snomadjimbob ], 1727ad182e6dSnomadjimbob ['title' => 'Success Colours', 'starts_with' => '__plugin_darkmode_success_', 17289ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17299ffe9161Snomadjimbob ], 1730ad182e6dSnomadjimbob ['title' => 'Danger Colours', 'starts_with' => '__plugin_darkmode_danger_', 17319ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17329ffe9161Snomadjimbob ], 1733ad182e6dSnomadjimbob ['title' => 'Warning Colours', 'starts_with' => '__plugin_darkmode_warning_', 17349ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17359ffe9161Snomadjimbob ], 1736ad182e6dSnomadjimbob ['title' => 'Info Colours', 'starts_with' => '__plugin_darkmode_info_', 17379ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17389ffe9161Snomadjimbob ], 1739ad182e6dSnomadjimbob ['title' => 'Light Colours', 'starts_with' => '__plugin_darkmode_light_', 17409ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17419ffe9161Snomadjimbob ], 1742ad182e6dSnomadjimbob ['title' => 'Dark Colours', 'starts_with' => '__plugin_darkmode_dark_', 17439ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17449ffe9161Snomadjimbob ], 1745ad182e6dSnomadjimbob ['title' => 'Link Colours', 'starts_with' => '__plugin_darkmode_link_', 17469ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17479ffe9161Snomadjimbob ], 1748ad182e6dSnomadjimbob ['title' => 'Carousel', 'starts_with' => '__plugin_darkmode_carousel_', 17499ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17509ffe9161Snomadjimbob ], 1751ad182e6dSnomadjimbob ['title' => 'Steps', 'starts_with' => '__plugin_darkmode_steps_', 'hidden' => $mikioPluginMissing], 1752ad182e6dSnomadjimbob ['title' => 'Tabgroup', 'starts_with' => '__plugin_darkmode_tabgroup_', 17539ffe9161Snomadjimbob 'hidden' => $mikioPluginMissing 17549ffe9161Snomadjimbob ], 1755ad182e6dSnomadjimbob ['title' => 'Tooltip', 'starts_with' => '__plugin_darkmode_tooltip_', 'hidden' => $mikioPluginMissing], 1756cee81679SJames Collins ]; 1757cee81679SJames Collins 1758cee81679SJames Collins foreach ($style_headers as $header) { 1759cee81679SJames Collins if (array_key_exists('heading', $header) === false) { 1760cee81679SJames Collins $header['heading'] = 'h3'; 1761cee81679SJames Collins } 1762cee81679SJames Collins 1763ad182e6dSnomadjimbob if (array_key_exists('hidden', $header) === false) { 1764ad182e6dSnomadjimbob $header['hidden'] = false; 1765ad182e6dSnomadjimbob } 1766ad182e6dSnomadjimbob 17671244e3ceSJames Collins $content = preg_replace( 1768f65a4e5eSJames Collins '/(<tr>\s*<td>\s*<label for="tpl__' . $header['starts_with'] . '.+?<\/tr>)/s', 17699ffe9161Snomadjimbob '</tbody></table><' . $header['heading'] . ' style="display:' . 17709ffe9161Snomadjimbob ($header['hidden'] === true ? 'none' : 'block') . '">' . 17719ffe9161Snomadjimbob $header['title'] . '</' . $header['heading'] . '> 1772ad182e6dSnomadjimbob <table style="display:' . ($header['hidden'] === true ? 'none' : 'table') . '"><tbody>$1', 17731244e3ceSJames Collins $content, 17741244e3ceSJames Collins 1 17751244e3ceSJames Collins ); 1776cee81679SJames Collins } 1777f65a4e5eSJames Collins 1778f65a4e5eSJames Collins $content = preg_replace('/type="color"/', 'type="text"', $content); 1779bb5a3dd1SJames Collins }//end if 1780ab45ba71SJames Collins 17813a385f2cSJames Collins if (strcasecmp($ACT, 'admin') === 0 && isset($_GET['page']) === false) { 1782a8eebd82SJames Collins $content = preg_replace('/(<ul.*?>.*?)<\/ul>.*?<ul.*?>(.*?<\/ul>)/s', '$1$2', $content); 1783a8eebd82SJames Collins } 1784ab45ba71SJames Collins 1785a8eebd82SJames Collins // Page Revisions - Table Fix 17869cff245bSJames Collins if (strpos($content, 'id="page__revisions"') !== false) { 17879cff245bSJames Collins $content = preg_replace( 17889cff245bSJames Collins '/(<span class="sum">\s.*<\/span>\s.*<span class="user">\s.*<\/span>)/', 17899cff245bSJames Collins '<span>$1</span>', 17909cff245bSJames Collins $content 17919cff245bSJames Collins ); 1792a8eebd82SJames Collins } 1793ab45ba71SJames Collins 17949cff245bSJames Collins $html = new \simple_html_dom(); 1795bc1032d9SJames Collins $html->stripRNAttrValues = false; 1796c165b184SJames Collins $html->load($content, true, false); 1797c165b184SJames Collins 17989cff245bSJames Collins if ($html === false) { 17999cff245bSJames Collins return $content; 18009cff245bSJames Collins } 1801ab45ba71SJames Collins 1802ab45ba71SJames Collins /* Buttons */ 1803ab45ba71SJames Collins foreach ($html->find('#config__manager button') as $node) { 1804ab45ba71SJames Collins $c = explode(' ', $node->class); 18059cff245bSJames Collins if (in_array('mikio-button', $c) === false) { 18069cff245bSJames Collins $c[] = 'mikio-button'; 18079cff245bSJames Collins } 1808ab45ba71SJames Collins $node->class = implode(' ', $c); 1809c165b184SJames Collins } 1810c165b184SJames Collins 1811ab45ba71SJames Collins 1812ab45ba71SJames Collins /* Buttons - Primary */ 1813ab45ba71SJames Collins foreach ($html->find('#config__manager [type=submit]') as $node) { 1814ab45ba71SJames Collins $c = explode(' ', $node->class); 18159cff245bSJames Collins if (in_array('mikio-primary', $c) === false) { 18169cff245bSJames Collins $c[] = 'mikio-primary'; 18179cff245bSJames Collins } 1818ab45ba71SJames Collins $node->class = implode(' ', $c); 1819ab45ba71SJames Collins } 1820ab45ba71SJames Collins 1821a8eebd82SJames Collins /* Hide page title if hero is enabled */ 18229cff245bSJames Collins if ($this->getConf('heroTitle') === true && $ACT !== 'preview') { 18231785fc73SJames Collins $pageTitle = $this->parsePageTitle(); 182447161538SJames Collins 182547161538SJames Collins foreach ($html->find('h1,h2,h3,h4') as $elm) { 18269cff245bSJames Collins if ($elm->innertext === $pageTitle) { 1827a8eebd82SJames Collins // $elm->innertext = ''; 1828a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1829a8eebd82SJames Collins 183047161538SJames Collins break; 183147161538SJames Collins } 183247161538SJames Collins } 183347161538SJames Collins } 1834c165b184SJames Collins 1835a8eebd82SJames Collins /* Hero subtitle */ 18362b4583abSJames Collins foreach ($html->find('p') as $elm) { 18372b4583abSJames Collins $i = stripos($elm->innertext, '~~hero-subtitle'); 18382b4583abSJames Collins if ($i !== false) { 18399cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 18402b4583abSJames Collins if ($j !== false) { 18419cff245bSJames Collins if ($j > ($i + 16)) { 18429cff245bSJames Collins $subtitle = substr($elm->innertext, ($i + 16), ($j - $i - 16)); 1843a8eebd82SJames Collins $this->footerScript['hero-subtitle'] = 'mikio.setHeroSubTitle(\'' . $subtitle . '\')'; 1844a8eebd82SJames Collins 1845a8eebd82SJames Collins // $elm->innertext = substr($elm->innertext, 0, $i + 2) . substr($elm->innertext, $j + 2); 1846a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-subtitle (.+?)~~.*/ui', '', $elm->innertext); 18472b4583abSJames Collins } 18482b4583abSJames Collins 18492b4583abSJames Collins break; 18502b4583abSJames Collins } 18512b4583abSJames Collins } 18522b4583abSJames Collins } 18532b4583abSJames Collins 1854a8eebd82SJames Collins /* Hero image */ 1855a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1856a8eebd82SJames Collins $image = ''; 1857a8eebd82SJames Collins preg_match('/~~hero-image (.+?)~~(?!.?")/ui', $elm->innertext, $matches); 1858a8eebd82SJames Collins if (count($matches) > 0) { 1859a8eebd82SJames Collins preg_match('/<img.*src="(.+?)"/ui', $matches[1], $imageTagMatches); 1860a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1861a8eebd82SJames Collins $image = $imageTagMatches[1]; 1862a8eebd82SJames Collins } else { 1863a8eebd82SJames Collins preg_match('/<a.+?>(.+?)[~<]/ui', $matches[1], $imageTagMatches); 1864a8eebd82SJames Collins if (count($imageTagMatches) > 0) { 1865a8eebd82SJames Collins $image = $imageTagMatches[1]; 1866a8eebd82SJames Collins } else { 1867a8eebd82SJames Collins $image = strip_tags($matches[1]); 18689cff245bSJames Collins if (stripos($image, ':') === false) { 18699cff245bSJames Collins $image = str_replace(['{', '}'], '', $image); 1870a8eebd82SJames Collins $i = stripos($image, '?'); 18719cff245bSJames Collins if ($i !== false) { 1872a8eebd82SJames Collins $image = substr($image, 0, $i); 1873c165b184SJames Collins } 1874c165b184SJames Collins 1875a8eebd82SJames Collins $image = ml($image, '', true, '', false); 1876ab45ba71SJames Collins } 1877ab45ba71SJames Collins } 1878ab45ba71SJames Collins } 1879ab45ba71SJames Collins 1880a8eebd82SJames Collins $this->footerScript['hero-image'] = 'mikio.setHeroImage(\'' . $image . '\')'; 1881a8eebd82SJames Collins 1882a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-image (.+?)~~.*/ui', '', $elm->innertext); 18839cff245bSJames Collins }//end if 18849cff245bSJames Collins }//end foreach 1885ab45ba71SJames Collins 18869cff245bSJames Collins /* Hero colors - ~~hero-colors [background-color] [hero-title-color] [hero-subtitle-color] 18879cff245bSJames Collins [breadcrumb-text-color] [breadcrumb-hover-color] (use 'initial' for original color) */ 1888a8eebd82SJames Collins foreach ($html->find('p') as $elm) { 1889a8eebd82SJames Collins $i = stripos($elm->innertext, '~~hero-colors'); 1890a8eebd82SJames Collins if ($i !== false) { 18919cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 1892a8eebd82SJames Collins if ($j !== false) { 18939cff245bSJames Collins if ($j > ($i + 14)) { 18949cff245bSJames Collins $color = substr($elm->innertext, ($i + 14), ($j - $i - 14)); 1895a8eebd82SJames Collins $this->footerScript['hero-colors'] = 'mikio.setHeroColor(\'' . $color . '\')'; 1896ab45ba71SJames Collins 1897a8eebd82SJames Collins $elm->innertext = preg_replace('/~~hero-colors (.+?)~~.*/ui', '', $elm->innertext); 1898ab45ba71SJames Collins } 1899ab45ba71SJames Collins 1900a8eebd82SJames Collins break; 1901ab45ba71SJames Collins } 1902ab45ba71SJames Collins } 1903ab45ba71SJames Collins } 1904ab45ba71SJames Collins 190596ec8e1eSJames Collins /* Hide parts - ~~hide-parts [parts]~~ */ 190696ec8e1eSJames Collins foreach ($html->find('p') as $elm) { 190796ec8e1eSJames Collins $i = stripos($elm->innertext, '~~hide-parts'); 190896ec8e1eSJames Collins if ($i !== false) { 19099cff245bSJames Collins $j = strpos($elm->innertext, '~~', ($i + 2)); 191096ec8e1eSJames Collins if ($j !== false) { 19119cff245bSJames Collins if ($j > ($i + 13)) { 19129cff245bSJames Collins $parts = explode(' ', substr($elm->innertext, ($i + 13), ($j - $i - 13))); 191396ec8e1eSJames Collins $script = ''; 191496ec8e1eSJames Collins 191596ec8e1eSJames Collins foreach ($parts as $part) { 191696ec8e1eSJames Collins // $part = trim($part); 191796ec8e1eSJames Collins if (strlen($part) > 0) { 191896ec8e1eSJames Collins $script .= 'mikio.hidePart(\'' . $part . '\');'; 191996ec8e1eSJames Collins } 192096ec8e1eSJames Collins } 192196ec8e1eSJames Collins 192296ec8e1eSJames Collins if (strlen($script) > 0) { 192396ec8e1eSJames Collins $this->footerScript['hide-parts'] = $script; 192496ec8e1eSJames Collins } 192596ec8e1eSJames Collins 192696ec8e1eSJames Collins $elm->innertext = preg_replace('/~~hide-parts (.+?)~~.*/ui', '', $elm->innertext); 192796ec8e1eSJames Collins } 192896ec8e1eSJames Collins 192996ec8e1eSJames Collins break; 19309cff245bSJames Collins }//end if 19319cff245bSJames Collins }//end if 19329cff245bSJames Collins }//end foreach 193396ec8e1eSJames Collins 193496ec8e1eSJames Collins 1935a8eebd82SJames Collins /* Page Tags (tag plugin) */ 19369cff245bSJames Collins if ($this->getConf('tagsConsolidate') === true) { 1937a8eebd82SJames Collins $tags = ''; 1938a8eebd82SJames Collins foreach ($html->find('div.tags a') as $elm) { 1939a8eebd82SJames Collins $tags .= $elm->outertext; 1940a8eebd82SJames Collins } 1941a8eebd82SJames Collins 1942a8eebd82SJames Collins foreach ($html->find('div.tags') as $elm) { 1943a8eebd82SJames Collins $elm->innertext = ''; 1944a8eebd82SJames Collins $elm->setAttribute('style', 'display:none'); 1945a8eebd82SJames Collins } 1946a8eebd82SJames Collins 19473a385f2cSJames Collins if (empty($tags) === false) { 1948a8eebd82SJames Collins $this->footerScript['tags'] = 'mikio.setTags(\'' . $tags . '\')'; 1949a8eebd82SJames Collins } 1950ab45ba71SJames Collins } 1951ab45ba71SJames Collins 1952ab45ba71SJames Collins // Configuration Manager 19533a385f2cSJames Collins if (strcasecmp($INPUT->str('page'), 'config') === 0) { 1954ab45ba71SJames Collins // Additional save buttons 1955ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1956ab45ba71SJames Collins $saveButtons = ''; 1957ab45ba71SJames Collins 1958ab45ba71SJames Collins foreach ($cm->find('p') as $elm) { 1959ab45ba71SJames Collins $saveButtons = $elm->outertext; 1960a8eebd82SJames Collins $saveButtons = str_replace('<p>', '<p style="text-align:right">', $saveButtons); 1961ab45ba71SJames Collins $elm->outertext = ''; 1962ab45ba71SJames Collins } 1963ab45ba71SJames Collins 1964ab45ba71SJames Collins foreach ($cm->find('fieldset') as $elm) { 1965ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1966ab45ba71SJames Collins } 1967ab45ba71SJames Collins } 1968ab45ba71SJames Collins } 1969ab45ba71SJames Collins 1970ab45ba71SJames Collins $content = $html->save(); 1971c165b184SJames Collins $html->clear(); 1972c165b184SJames Collins unset($html); 1973c165b184SJames Collins 1974c165b184SJames Collins return $content; 1975c165b184SJames Collins } 19762b4583abSJames Collins 19772b4583abSJames Collins 1978a8eebd82SJames Collins /** 1979a8eebd82SJames Collins * Get DokuWiki namespace/page/URI as link 1980a8eebd82SJames Collins * 19819cff245bSJames Collins * @param string $str String to parse. 19829cff245bSJames Collins * @return string parsed URI 1983a8eebd82SJames Collins */ 19849cff245bSJames Collins public function getLink(string $str) 198510b40067Snomadjimbob { 19862b4583abSJames Collins $i = strpos($str, '://'); 19879cff245bSJames Collins if ($i !== false) { 19889cff245bSJames Collins return $str; 19899cff245bSJames Collins } 19902b4583abSJames Collins 19912b4583abSJames Collins return wl($str); 19922b4583abSJames Collins } 1993ab45ba71SJames Collins 1994ab45ba71SJames Collins 1995a8eebd82SJames Collins /** 1996a8eebd82SJames Collins * Check if the user can edit current namespace/page 1997a8eebd82SJames Collins * 1998a8eebd82SJames Collins * @return boolean user can edit 1999a8eebd82SJames Collins */ 200010b40067Snomadjimbob public function userCanEdit() 200110b40067Snomadjimbob { 2002ab45ba71SJames Collins global $INFO; 2003ab45ba71SJames Collins global $ID; 2004ab45ba71SJames Collins 2005ab45ba71SJames Collins $wiki_file = wikiFN($ID); 20069cff245bSJames Collins if (@file_exists($wiki_file) === false) { 20079cff245bSJames Collins return true; 20089cff245bSJames Collins } 20099cff245bSJames Collins if ($INFO['isadmin'] === true || $INFO['ismanager'] === true) { 20109cff245bSJames Collins return true; 20119cff245bSJames Collins } 2012a8eebd82SJames Collins // $meta_file = metaFN($ID, '.meta'); 20139cff245bSJames Collins if ($INFO['meta']['user'] === false) { 20149cff245bSJames Collins return true; 20159cff245bSJames Collins } 20169cff245bSJames Collins if ($INFO['client'] === $INFO['meta']['user']) { 20179cff245bSJames Collins return true; 20189cff245bSJames Collins } 2019ab45ba71SJames Collins 2020ab45ba71SJames Collins return false; 2021c165b184SJames Collins } 202247161538SJames Collins 202347161538SJames Collins 2024a8eebd82SJames Collins /** 2025a8eebd82SJames Collins * Search for and return the uri of a media file 2026a8eebd82SJames Collins * 20279cff245bSJames Collins * @param string $image Image name to search for (without extension). 20289cff245bSJames Collins * @param boolean $searchCurrentNS Search the current namespace. 20299cff245bSJames Collins * @param boolean $propagate Propagate search through the namespace. 20309cff245bSJames Collins * @return string URI of the found media file 2031a8eebd82SJames Collins */ 20329cff245bSJames Collins public function getMediaFile(string $image, bool $searchCurrentNS = true, bool $propagate = true) 203310b40067Snomadjimbob { 2034ab45ba71SJames Collins global $INFO; 2035a8eebd82SJames Collins 20369cff245bSJames Collins $ext = ['png', 'jpg', 'gif', 'svg']; 2037ab45ba71SJames Collins 20389cff245bSJames Collins if ($searchCurrentNS === true) { 20399cff245bSJames Collins $prefix[] = ':' . $INFO['namespace'] . ':'; 20409cff245bSJames Collins } 20419cff245bSJames Collins if ($propagate === true) { 2042ab45ba71SJames Collins $prefix[] = ':'; 2043ab45ba71SJames Collins $prefix[] = ':wiki:'; 2044a8eebd82SJames Collins } 2045ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 20463a385f2cSJames Collins if (empty($theme) === false) { 20479cff245bSJames Collins $prefix[] = 'themes/' . $theme . '/images/'; 20489cff245bSJames Collins } 2049ab45ba71SJames Collins $prefix[] = 'images/'; 2050ab45ba71SJames Collins 20519cff245bSJames Collins $search = []; 2052ab45ba71SJames Collins foreach ($prefix as $pitem) { 2053ab45ba71SJames Collins foreach ($ext as $eitem) { 2054ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 2055ab45ba71SJames Collins } 2056ab45ba71SJames Collins } 2057ab45ba71SJames Collins 2058ab45ba71SJames Collins $img = ''; 2059ab45ba71SJames Collins $file = ''; 2060ab45ba71SJames Collins $url = ''; 2061ab45ba71SJames Collins $ismedia = false; 2062ab45ba71SJames Collins $found = false; 2063ab45ba71SJames Collins 2064ab45ba71SJames Collins foreach ($search as $img) { 20653a385f2cSJames Collins if (strcasecmp(substr($img, 0, 1), ':') === 0) { 2066ab45ba71SJames Collins $file = mediaFN($img); 2067ab45ba71SJames Collins $ismedia = true; 2068ab45ba71SJames Collins } else { 2069ab45ba71SJames Collins $file = tpl_incdir() . $img; 2070ab45ba71SJames Collins $ismedia = false; 2071ab45ba71SJames Collins } 2072ab45ba71SJames Collins 20739cff245bSJames Collins if (file_exists($file) === true) { 2074ab45ba71SJames Collins $found = true; 2075ab45ba71SJames Collins break; 2076ab45ba71SJames Collins } 2077ab45ba71SJames Collins } 2078ab45ba71SJames Collins 20799cff245bSJames Collins if ($found === false) { 20809cff245bSJames Collins return false; 20819cff245bSJames Collins } 2082ab45ba71SJames Collins 20839cff245bSJames Collins if ($ismedia === true) { 2084ab45ba71SJames Collins $url = ml($img, '', true, '', false); 2085ab45ba71SJames Collins } else { 2086ab45ba71SJames Collins $url = tpl_basedir() . $img; 2087ab45ba71SJames Collins } 2088ab45ba71SJames Collins 2089ab45ba71SJames Collins return $url; 2090ab45ba71SJames Collins } 2091ab45ba71SJames Collins 2092a8eebd82SJames Collins 2093a8eebd82SJames Collins /** 2094ab45ba71SJames Collins * Print or return the page title 2095ab45ba71SJames Collins * 20969cff245bSJames Collins * @param string $page Page id or empty string for current page. 2097ab45ba71SJames Collins * @return string generated content 2098ab45ba71SJames Collins */ 20999cff245bSJames Collins public function getPageTitle(string $page = '') 210010b40067Snomadjimbob { 2101ab45ba71SJames Collins global $ID, $conf; 2102ab45ba71SJames Collins 2103ab45ba71SJames Collins $html = ''; 2104ab45ba71SJames Collins 21053a385f2cSJames Collins if (empty($page) === true) { 21069cff245bSJames Collins $page = $ID; 21079cff245bSJames Collins } 2108ab45ba71SJames Collins 2109ab45ba71SJames Collins $html = p_get_first_heading($page); 2110ab45ba71SJames Collins $html = strip_tags($html); 2111ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 2112ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 2113ab45ba71SJames Collins $html = trim($html); 2114ab45ba71SJames Collins 2115ab45ba71SJames Collins return $html; 2116ab45ba71SJames Collins } 2117a8eebd82SJames Collins 2118a8eebd82SJames Collins 2119a8eebd82SJames Collins /** 2120a8eebd82SJames Collins * Return inline theme icon 2121a8eebd82SJames Collins * 21229cff245bSJames Collins * @param string $type Icon to retreive. 21239e41d878SJames Collins * @param string $class Classname to insert. 21249cff245bSJames Collins * @return string HTML icon content 2125a8eebd82SJames Collins */ 21269e41d878SJames Collins public function mikioInlineIcon(string $type, string $class = "") 212710b40067Snomadjimbob { 21289e41d878SJames Collins if (is_array($class) === true) { 21299e41d878SJames Collins $class = explode(' ', $class); 21309e41d878SJames Collins } 21319e41d878SJames Collins 21329e41d878SJames Collins if (strlen($class) > 0) { 21339e41d878SJames Collins $class = ' ' . $class; 21349e41d878SJames Collins } 21359e41d878SJames Collins 2136a8eebd82SJames Collins switch ($type) { 2137a8eebd82SJames Collins case 'wrench': 2138906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 -256 1792 2139906e1a13SJames 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, 2140906e1a13SJames 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, 2141906e1a13SJames 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, 2142906e1a13SJames 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 2143906e1a13SJames 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, 2144906e1a13SJames 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>'; 2145a8eebd82SJames Collins case 'file': 2146906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2147906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,235.38983,1277.8305)" id="g2991"> 2148906e1a13SJames 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 2149906e1a13SJames 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 2150906e1a13SJames 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" 21519cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 2152a8eebd82SJames Collins case 'gear': 2153906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2154906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,121.49153,1285.4237)" id="g3027"> 2155906e1a13SJames 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 2156906e1a13SJames 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 2157906e1a13SJames 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 2158906e1a13SJames 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 2159906e1a13SJames 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 2160906e1a13SJames 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, 2161906e1a13SJames 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 2162906e1a13SJames 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 2163906e1a13SJames 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" /> 2164906e1a13SJames Collins</g></svg>'; 2165a8eebd82SJames Collins case 'user': 2166906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2167906e1a13SJames CollinsviewBox="0 -256 1792 1792" style="fill:currentColor"><g transform="matrix(1,0,0,-1,197.42373,1300.6102)"><path d="M 2168906e1a13SJames 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 2169906e1a13SJames 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, 2170906e1a13SJames 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 2171906e1a13SJames 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 2172906e1a13SJames 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, 2173906e1a13SJames Collins1408 863,1408 975.5,1295.5 1088,1183 1088,1024 z"/></g></svg>'; 2174a8eebd82SJames Collins case 'search': 21759e41d878SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 21769cff245bSJames 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 21779cff245bSJames 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 21789cff245bSJames 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 21799cff245bSJames Collins6.195 0 0 1-6.188 6.188z"/></svg>'; 2180a8eebd82SJames Collins case 'home': 2181906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2182906e1a13SJames CollinsviewBox="0 -256 1792 1792" aria-hidden="true" style="fill:currentColor"><g 2183906e1a13SJames 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 2184906e1a13SJames 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 2185906e1a13SJames 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 2186906e1a13SJames 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, 2187906e1a13SJames 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" 21889cff245bSJames Collinsxmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /></g></svg>'; 21899e41d878SJames Collins case 'sun': 2190906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2191906e1a13SJames 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 2192906e1a13SJames 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 2193906e1a13SJames 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 2194906e1a13SJames 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 2195906e1a13SJames Collins0 0 1-.707.707z" /></svg>'; 21969e41d878SJames Collins case 'moon': 2197906e1a13SJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" 2198906e1a13SJames 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 2199906e1a13SJames 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 2200906e1a13SJames 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 2201906e1a13SJames 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 2202906e1a13SJames Collins0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286z" /></svg>'; 2203*34d5f19aSJames Collins case 'sunmoon': 2204*34d5f19aSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" style="fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" viewBox="0 0 32 32"><line x1="16" y1="3" x2="16" y2="29"/><path d="M16,23c-3.87,0-7-3.13-7-7s3.13-7,7-7"/><line x1="6.81" y1="6.81" x2="8.93" y2="8.93"/><line x1="3" y1="16" x2="6" y2="16"/><line x1="6.81" y1="25.19" x2="8.93" y2="23.07"/><path d="M16,12.55C17.2,10.43,19.48,9,22.09,9c0.16,0,0.31,0.01,0.47,0.02c-1.67,0.88-2.8,2.63-2.8,4.64c0,2.9,2.35,5.25,5.25,5.25c1.6,0,3.03-0.72,3.99-1.85C28.48,20.43,25.59,23,22.09,23c-2.61,0-4.89-1.43-6.09-3.55"/></svg>'; 2205f65a4e5eSJames Collins case 'hamburger': 2206f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" 2207f65a4e5eSJames 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 2208f65a4e5eSJames 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 2209f65a4e5eSJames 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 2210f65a4e5eSJames Collins16v40c0 8.837 7.163 16 16 16z"/></svg>'; 2211f65a4e5eSJames Collins case 'down-arrow': 2212f65a4e5eSJames Collins return '<svg class="mikio-iicon' . $class . '" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" 2213f65a4e5eSJames Collinsaria-hidden="true" style="fill:currentColor"><path d="M16.003 18.626l7.081-7.081L25 13.46l-8.997 8.998-9.003-9 2214f65a4e5eSJames Collins1.917-1.916z"/></svg>'; 22159cff245bSJames Collins }//end switch 2216ab45ba71SJames Collins 2217a8eebd82SJames Collins return ''; 2218a8eebd82SJames Collins } 2219ab45ba71SJames Collins 2220a8eebd82SJames Collins /** 2221a8eebd82SJames Collins * Finalize theme 22229cff245bSJames Collins * 22239cff245bSJames Collins * @return void 2224a8eebd82SJames Collins */ 222510b40067Snomadjimbob public function finalize() 222610b40067Snomadjimbob { 2227a8eebd82SJames Collins } 22281785fc73SJames Collins 22291785fc73SJames Collins /** 22301785fc73SJames Collins * Show Messages 22319cff245bSJames Collins * 22329cff245bSJames Collins * @return void 22331785fc73SJames Collins */ 223410b40067Snomadjimbob public function showMessages() 223510b40067Snomadjimbob { 22361785fc73SJames Collins global $ACT; 22371785fc73SJames Collins 22389cff245bSJames Collins if ($this->lessIgnored === true) { 22399cff245bSJames Collins msg( 22409cff245bSJames Collins 'useLESS is enabled on the Mikio template, however is not supported on this server', 22419cff245bSJames Collins 2, 22429cff245bSJames Collins '', 22439cff245bSJames Collins '', 22449cff245bSJames Collins MSG_ADMINS_ONLY 22459cff245bSJames Collins ); 2246a8df40efSJames Collins } 2247a8df40efSJames Collins 22481785fc73SJames Collins $show = $this->getConf('showNotifications'); 22493a385f2cSJames Collins if ( 22503a385f2cSJames Collins strcasecmp($show, 'always') === 0 || 22513a385f2cSJames Collins (strcasecmp($show, 'admin') === 0 && strcasecmp($ACT, 'admin') === 0) 22523a385f2cSJames Collins ) { 22531785fc73SJames Collins global $MSG, $MSG_shown; 22541785fc73SJames Collins 22559cff245bSJames Collins if (isset($MSG) === false) { 22561785fc73SJames Collins return; 22571785fc73SJames Collins } 22581785fc73SJames Collins 22599cff245bSJames Collins if (isset($MSG_shown) === false) { 22609cff245bSJames Collins $MSG_shown = []; 2261a8df40efSJames Collins } 22621785fc73SJames Collins 22631785fc73SJames Collins foreach ($MSG as $msg) { 22641785fc73SJames Collins $hash = md5($msg['msg']); 22659cff245bSJames Collins if (isset($MSG_shown[$hash]) === true) { 22661785fc73SJames Collins continue; 22671785fc73SJames Collins } 22681785fc73SJames Collins // skip double messages 22691785fc73SJames Collins 22709cff245bSJames Collins if (info_msg_allowed($msg) === true) { 22719cff245bSJames Collins echo '<div class="' . $msg['lvl'] . '">'; 22729cff245bSJames Collins echo $msg['msg']; 22739cff245bSJames Collins echo '</div>'; 22741785fc73SJames Collins } 22751785fc73SJames Collins 2276a8df40efSJames Collins $MSG_shown[$hash] = true; 22771785fc73SJames Collins } 22781785fc73SJames Collins 22791785fc73SJames Collins unset($GLOBALS['MSG']); 22809cff245bSJames Collins }//end if 22811785fc73SJames Collins } 22827ac0a6efSJames Collins 22837ac0a6efSJames Collins /** 22847ac0a6efSJames Collins * Dokuwiki version 22857ac0a6efSJames Collins * 22867ac0a6efSJames Collins * @return string the dw version name 22877ac0a6efSJames Collins */ 22889cff245bSJames Collins public function dwVersion() 22899cff245bSJames Collins { 22909cff245bSJames Collins if (function_exists('getVersionData') === true) { 22917ac0a6efSJames Collins $version_data = getVersionData(); 22929cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 22937ac0a6efSJames Collins $version_items = explode(' ', $version_data['date']); 22947ac0a6efSJames Collins if (count($version_items) >= 2) { 22957ac0a6efSJames Collins return preg_replace('/[^a-zA-Z0-9 ]+/', '', strtolower($version_items[1])); 22967ac0a6efSJames Collins } 22977ac0a6efSJames Collins } 22987ac0a6efSJames Collins } 22997ac0a6efSJames Collins 23007ac0a6efSJames Collins return 'unknown'; 23017ac0a6efSJames Collins } 2302e4c4fb13SJames Collins 2303e4c4fb13SJames Collins /** 2304e4c4fb13SJames Collins * Dokuwiki version number 2305e4c4fb13SJames Collins * 2306e4c4fb13SJames Collins * @return string the dw version date converted to integer 2307e4c4fb13SJames Collins */ 23089cff245bSJames Collins public function dwVersionNumber() 23099cff245bSJames Collins { 23109cff245bSJames Collins if (function_exists('getVersionData') === true) { 2311e4c4fb13SJames Collins $version_data = getVersionData(); 23129cff245bSJames Collins if (is_array($version_data) === true && array_key_exists('date', $version_data) === true) { 2313e4c4fb13SJames Collins $version_items = explode(' ', $version_data['date']); 2314e4c4fb13SJames Collins if (count($version_items) >= 1) { 2315e4c4fb13SJames Collins return intval(preg_replace('/[^0-9]+/', '', strtolower($version_items[0]))); 2316e4c4fb13SJames Collins } 2317e4c4fb13SJames Collins } 2318e4c4fb13SJames Collins } 2319e4c4fb13SJames Collins 2320e4c4fb13SJames Collins return 0; 2321e4c4fb13SJames Collins } 2322a8eebd82SJames Collins} 2323ab45ba71SJames Collins 2324ab45ba71SJames Collinsglobal $TEMPLATE; 232547161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 2326