1c165b184SJames Collins<?php 2c165b184SJames Collins/** 3c165b184SJames Collins * DokuWiki Mikio Template 4c165b184SJames Collins * 5c165b184SJames Collins * @link http://dokuwiki.org/template:mikio 6c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 7*ab45ba71SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html) 8c165b184SJames Collins */ 9*ab45ba71SJames Collinsnamespace dokuwiki\template\mikio; 10c165b184SJames Collins 11c165b184SJames Collinsif (!defined('DOKU_INC')) die(); 12c165b184SJames Collins 13*ab45ba71SJames Collinsrequire_once('icons/icons.php'); 14c165b184SJames Collinsrequire_once('inc/simple_html_dom.php'); 15c165b184SJames Collins 1647161538SJames Collinsclass Template { 17c165b184SJames Collins public $tplDir = ''; 18c165b184SJames Collins public $baseDir = ''; 19c165b184SJames Collins 20c165b184SJames Collins 21c165b184SJames Collins /** 22c165b184SJames Collins * Class constructor 23c165b184SJames Collins */ 24c165b184SJames Collins public function __construct() { 25c165b184SJames Collins $this->tplDir = tpl_incdir(); 26c165b184SJames Collins $this->baseDir = tpl_basedir(); 27c165b184SJames Collins 28c165b184SJames Collins $this->_registerHooks(); 29c165b184SJames Collins } 30c165b184SJames Collins 31c165b184SJames Collins 32c165b184SJames Collins /** 33*ab45ba71SJames Collins * Returns the instance of the class 3447161538SJames Collins * 35*ab45ba71SJames Collins * @return Template class instance 3647161538SJames Collins */ 3747161538SJames Collins public static function getInstance() 3847161538SJames Collins { 3947161538SJames Collins static $instance = null; 4047161538SJames Collins 4147161538SJames Collins if ($instance === null) { 4247161538SJames Collins $instance = new Template(); 4347161538SJames Collins } 4447161538SJames Collins 4547161538SJames Collins return $instance; 4647161538SJames Collins } 4747161538SJames Collins 48*ab45ba71SJames Collins 4947161538SJames Collins /** 50*ab45ba71SJames Collins * Register the themes hooks into Dokuwiki 51c165b184SJames Collins */ 52c165b184SJames Collins private function _registerHooks() { 53c165b184SJames Collins global $EVENT_HANDLER; 54c165b184SJames Collins 55c165b184SJames Collins $events_dispatcher = array( 56*ab45ba71SJames Collins 'TPL_METAHEADER_OUTPUT' => 'metaheadersHandler' 57c165b184SJames Collins ); 58c165b184SJames Collins 59c165b184SJames Collins foreach ($events_dispatcher as $event => $method) { 60c165b184SJames Collins $EVENT_HANDLER->register_hook($event, 'BEFORE', $this, $method); 61c165b184SJames Collins } 62c165b184SJames Collins } 63c165b184SJames Collins 64c165b184SJames Collins 65c165b184SJames Collins /** 66*ab45ba71SJames Collins * Meta handler hook for DokuWiki 67c165b184SJames Collins * 68*ab45ba71SJames Collins * @param Doku_Event $event 69c165b184SJames Collins */ 7047161538SJames Collins public function metaHeadersHandler(\Doku_Event $event) { 71*ab45ba71SJames Collins global $MIKIO_ICONS; 72*ab45ba71SJames Collins 73c165b184SJames Collins $stylesheets = array(); 74c165b184SJames Collins $scripts = array(); 75c165b184SJames Collins 76*ab45ba71SJames Collins if($this->getConf('customTheme') != '') { 77*ab45ba71SJames Collins if(file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/style.css')) { 78*ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/style.css'; 792b4583abSJames Collins } 80*ab45ba71SJames Collins if(file_exists($this->tplDir . 'themes/' . $this->getConf('customTheme') . '/script.js')) { 81*ab45ba71SJames Collins $scripts[] = $this->baseDir . 'themes/' . $this->getConf('customTheme') . '/script.js'; 82c165b184SJames Collins } 83c165b184SJames Collins } 84c165b184SJames Collins 85*ab45ba71SJames Collins if(is_array($MIKIO_ICONS)) { 86*ab45ba71SJames Collins $icons = Array(); 87*ab45ba71SJames Collins foreach($MIKIO_ICONS as $icon) { 88*ab45ba71SJames Collins if(isset($icon['name']) && isset($icon['css']) && isset($icon['insert'])) { 89*ab45ba71SJames Collins $icons[] = $icon; 90c165b184SJames Collins 91*ab45ba71SJames Collins if($icon['css'] != '') { 92*ab45ba71SJames Collins if(strpos($icon['css'], '//') === FALSE) { 93*ab45ba71SJames Collins // $stylesheets[] = $this->baseDir . 'icons/' . $icon['css']; 94*ab45ba71SJames Collins } else { 95*ab45ba71SJames Collins // $stylesheets[] = $icon['css']; 96*ab45ba71SJames Collins } 97*ab45ba71SJames Collins } 98*ab45ba71SJames Collins } 99*ab45ba71SJames Collins } 100*ab45ba71SJames Collins $MIKIO_ICONS = $icons; 101*ab45ba71SJames Collins } else { 102*ab45ba71SJames Collins $MIKIO_ICONS = []; 103*ab45ba71SJames Collins } 104c165b184SJames Collins 105*ab45ba71SJames Collins $scripts[] = $this->baseDir . 'assets/mikio.js'; 106*ab45ba71SJames Collins $stylesheets[] = $this->baseDir . 'assets/mikio.less'; 107*ab45ba71SJames Collins 108*ab45ba71SJames Collins $set = []; 109c165b184SJames Collins foreach ($stylesheets as $style) { 110*ab45ba71SJames Collins if(in_array($style, $set) == FALSE) { 111*ab45ba71SJames Collins if(strtolower(substr($style, -5)) == '.less') { 112*ab45ba71SJames Collins $style = $this->baseDir . 'css.php?css=' . str_replace($this->baseDir, '', $style); 113*ab45ba71SJames Collins } 114*ab45ba71SJames Collins 115c165b184SJames Collins array_unshift($event->data['link'], array( 116c165b184SJames Collins 'type' => 'text/css', 117c165b184SJames Collins 'rel' => 'stylesheet', 118c165b184SJames Collins 'href' => $style 119c165b184SJames Collins )); 120c165b184SJames Collins } 121*ab45ba71SJames Collins $set[] = $style; 122*ab45ba71SJames Collins } 123c165b184SJames Collins 124*ab45ba71SJames Collins $set = []; 125c165b184SJames Collins foreach ($scripts as $script) { 126*ab45ba71SJames Collins if(in_array($script, $set) == FALSE) { 127c165b184SJames Collins $event->data['script'][] = array( 128c165b184SJames Collins 'type' => 'text/javascript', 129c165b184SJames Collins '_data' => '', 130*ab45ba71SJames Collins 'src' => $script); 131*ab45ba71SJames Collins } 132*ab45ba71SJames Collins $set[] = $script; 133c165b184SJames Collins } 134c165b184SJames Collins } 135c165b184SJames Collins 136c165b184SJames Collins 137c165b184SJames Collins /** 138c165b184SJames Collins * DokuWiki content event handler 139c165b184SJames Collins * 140c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 141c165b184SJames Collins */ 142*ab45ba71SJames Collins /*public function contentHandler(\Doku_Event $event) 143c165b184SJames Collins { 14475adba86SJames Collins $event->data = $this->parseContent($event->data); 145*ab45ba71SJames Collins }*/ 146c165b184SJames Collins 147c165b184SJames Collins 148*ab45ba71SJames Collins /** ---- 149*ab45ba71SJames Collins * Retreive and parse theme configuration options 150c165b184SJames Collins * 151*ab45ba71SJames Collins * @param string $key the configuration key to retreive 152*ab45ba71SJames Collins * @param mixed $default if key doesn't exist, return this value 153*ab45ba71SJames Collins * @return mixed parsed value of configuration 154c165b184SJames Collins */ 155*ab45ba71SJames Collins public function getConf($key, $default = FALSE) { 156c165b184SJames Collins 157c165b184SJames Collins $value = tpl_getConf($key, $default); 158c165b184SJames Collins 159*ab45ba71SJames Collins // switch($key) { 160c165b184SJames Collins 161*ab45ba71SJames Collins // } 162c165b184SJames Collins 163c165b184SJames Collins return $value; 164c165b184SJames Collins } 165c165b184SJames Collins 166c165b184SJames Collins 167c165b184SJames Collins /** 168c165b184SJames Collins * Icon 169c165b184SJames Collins * 170c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 171c165b184SJames Collins * 172c165b184SJames Collins * @param string $type The type of icon to return 173c165b184SJames Collins * @return string HTML for icon element 174c165b184SJames Collins */ 175c165b184SJames Collins public function icon($type) { 176c165b184SJames Collins return '<i class="fa fa-' . $type . '" aria-hidden="true"></i>'; 177c165b184SJames Collins } 178c165b184SJames Collins 179c165b184SJames Collins 180c165b184SJames Collins 181c165b184SJames Collins 182c165b184SJames Collins /** 183c165b184SJames Collins * Add class to first DOM element 184c165b184SJames Collins * 185c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 186c165b184SJames Collins * 187c165b184SJames Collins * @param string $content HTML DOM 188c165b184SJames Collins * @param string $class Class to add DOM elements 189c165b184SJames Collins * @return string HTML DOM with class added 190c165b184SJames Collins */ 191c165b184SJames Collins public function elementAddClass($html, $class) { 192c165b184SJames Collins preg_match('/class.*?".*?"/', $html, $matches); 193c165b184SJames Collins if(count($matches) > 0) { 194c165b184SJames Collins preg_match('/[" ]'.$class.'[" ]/', $matches[0], $matches); 195c165b184SJames Collins if(count($matches) == 0) { 196c165b184SJames Collins return preg_replace('/(class.*?=.*?")/', '${1}'.$class.' ', $html, 1); 197c165b184SJames Collins } 198c165b184SJames Collins } else { 199c165b184SJames Collins return preg_replace('/>/', 'class="'.$class.'">', $html, 1); 200c165b184SJames Collins } 201c165b184SJames Collins 202c165b184SJames Collins return $html; 203c165b184SJames Collins } 204c165b184SJames Collins 205c165b184SJames Collins 206*ab45ba71SJames Collins public function includeFile($file, $print = true) { 207*ab45ba71SJames Collins $html = ''; 208*ab45ba71SJames Collins 209*ab45ba71SJames Collins if(!$print) { 210*ab45ba71SJames Collins ob_start(); 211*ab45ba71SJames Collins } 212*ab45ba71SJames Collins 213*ab45ba71SJames Collins tpl_includeFile($file); 214*ab45ba71SJames Collins 215*ab45ba71SJames Collins if(!$print) { 216*ab45ba71SJames Collins $html = ob_get_contents(); 217*ab45ba71SJames Collins ob_end_clean(); 218*ab45ba71SJames Collins } 219*ab45ba71SJames Collins 220*ab45ba71SJames Collins return $html; 221*ab45ba71SJames Collins } 222*ab45ba71SJames Collins 223c165b184SJames Collins /** 224*ab45ba71SJames Collins * include page from namespace 2252b4583abSJames Collins * 2262b4583abSJames Collins * @author James Collins <james.collins@outlook.com.au> 2272b4583abSJames Collins * 228*ab45ba71SJames Collins * @param string $page namespace to include 229*ab45ba71SJames Collins * @param boolean $print print content 230*ab45ba71SJames Collins * @param boolean $parse parse content before printing/returning 231*ab45ba71SJames Collins * @return string contents of page found 2322b4583abSJames Collins */ 233*ab45ba71SJames Collins public function includePage($page, $print = TRUE, $parse = TRUE) 2342b4583abSJames Collins { 235*ab45ba71SJames Collins $useACL = TRUE; // TODO Add these as config options? 236*ab45ba71SJames Collins $propagate = TRUE; 237*ab45ba71SJames Collins $checkPropagate = TRUE; // TODO Add these as config options? 238*ab45ba71SJames Collins $html = ''; 2392b4583abSJames Collins 240*ab45ba71SJames Collins $html = tpl_include_page($page, false, $propagate, $useACL); 241*ab45ba71SJames Collins if($html == '' && $checkPropagate) { 242*ab45ba71SJames Collins $html = tpl_include_page($page, false, false, $useACL); 243*ab45ba71SJames Collins } 2442b4583abSJames Collins 245*ab45ba71SJames Collins if($html != '' && $parse) { 246*ab45ba71SJames Collins $html = $this->parseContent($html); 247*ab45ba71SJames Collins } 2482b4583abSJames Collins 249*ab45ba71SJames Collins if($print) echo $html; 2502b4583abSJames Collins 251*ab45ba71SJames Collins return $html; 2522b4583abSJames Collins } 2532b4583abSJames Collins 2542b4583abSJames Collins public function includeLoggedIn() { 2552b4583abSJames Collins if (!empty($_SERVER['REMOTE_USER'])) { 2562b4583abSJames Collins echo '<li class="user navbar-text text-nowrap">'; 2572b4583abSJames Collins tpl_userinfo(); /* 'Logged in as ...' */ 2582b4583abSJames Collins echo '</li>'; 2592b4583abSJames Collins } 2602b4583abSJames Collins } 2612b4583abSJames Collins 2622b4583abSJames Collins 263*ab45ba71SJames Collins public function includeMenu($type, $print = true, $class = '') { 2642b4583abSJames Collins global $lang; 2652b4583abSJames Collins global $USERINFO; 266*ab45ba71SJames Collins $html = '<ul class="mikio-nav ' . $class . '">'; 267c165b184SJames Collins 268c165b184SJames Collins switch($type) { 2692b4583abSJames Collins 270*ab45ba71SJames Collins case 'none'; 271*ab45ba71SJames Collins return ''; 2722b4583abSJames Collins 273*ab45ba71SJames Collins case 'custom': 274*ab45ba71SJames Collins case 'footer': 275*ab45ba71SJames Collins $items = []; 2762b4583abSJames Collins 277*ab45ba71SJames Collins if($type == 'footer') { 278*ab45ba71SJames Collins $items = explode(';', $this->getConf('footerCustomMenuText', '')); 279*ab45ba71SJames Collins } else { 280*ab45ba71SJames Collins $items = explode(';', $this->getConf('navbarCustomMenuText', '')); 2812b4583abSJames Collins } 282c165b184SJames Collins 283*ab45ba71SJames Collins foreach($items as $item) { 284*ab45ba71SJames Collins $parts = explode('|', $item); 285*ab45ba71SJames Collins if($parts > 1) { 286*ab45ba71SJames Collins $html .= '<li class="mikio-nav-item"><a class="mikio-nav-link" href="' . strip_tags($this->getLink(trim($parts[0]))) . '">' . strip_tags(trim($parts[1])) . '</a></li>'; 287*ab45ba71SJames Collins } 288c165b184SJames Collins } 289c165b184SJames Collins 290*ab45ba71SJames Collins break; 291c165b184SJames Collins 292*ab45ba71SJames Collins case 'dokuwiki': 293*ab45ba71SJames Collins $pageToolsMenu = []; 294*ab45ba71SJames Collins $siteToolsMenu = []; 295*ab45ba71SJames Collins $userToolsMenu = []; 296c165b184SJames Collins 297*ab45ba71SJames Collins $showIcons = ($this->getConf('navbarDWMenuType') != 'text'); 298*ab45ba71SJames Collins $showText = ($this->getConf('navbarDWMenuType') != 'icons'); 299*ab45ba71SJames Collins $isDropDown = ($this->getConf('navbarDWMenuCombine') != 'seperate'); 3002b4583abSJames Collins 3012b4583abSJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 3022b4583abSJames Collins foreach($items as $item) { 303*ab45ba71SJames Collins if($item->getType() != 'top') { 304*ab45ba71SJames Collins $itemHtml = ''; 3052b4583abSJames Collins 306*ab45ba71SJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown ? 'mikio-dropdown-item' : '') . '" href="'.$item->getLink().'" title="'.$item->getTitle().'">'; 307*ab45ba71SJames Collins if($showIcons) $itemHtml .= '<span class="mikio-icon">'.inlineSVG($item->getSvg()).'</span>'; 308*ab45ba71SJames Collins if($showText || $isDropDown) $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 309*ab45ba71SJames Collins $itemHtml .= '</a>'; 310*ab45ba71SJames Collins 311*ab45ba71SJames Collins $pageToolsMenu[] = $itemHtml; 3122b4583abSJames Collins } 3132b4583abSJames Collins } 3142b4583abSJames Collins 315*ab45ba71SJames Collins $items = (new \dokuwiki\Menu\SiteMenu())->getItems('action '); 316*ab45ba71SJames Collins foreach($items as $item) { 317*ab45ba71SJames Collins $itemHtml = ''; 3182b4583abSJames Collins 319*ab45ba71SJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown ? 'mikio-dropdown-item' : '') . '" href="'.$item->getLink().'" title="'.$item->getTitle().'">'; 320*ab45ba71SJames Collins if($showIcons) $itemHtml .= '<span class="mikio-icon">'.inlineSVG($item->getSvg()).'</span>'; 321*ab45ba71SJames Collins if($showText || $isDropDown) $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 322*ab45ba71SJames Collins $itemHtml .= '</a>'; 3232b4583abSJames Collins 324*ab45ba71SJames Collins $siteToolsMenu[] = $itemHtml; 3252b4583abSJames Collins } 3262b4583abSJames Collins 327*ab45ba71SJames Collins $items = (new \dokuwiki\Menu\UserMenu())->getItems('action'); 328*ab45ba71SJames Collins foreach($items as $item) { 329*ab45ba71SJames Collins $itemHtml = ''; 330*ab45ba71SJames Collins 331*ab45ba71SJames Collins $itemHtml .= '<a class="mikio-nav-link ' . ($isDropDown ? 'mikio-dropdown-item' : '') . '" href="'.$item->getLink().'" title="'.$item->getTitle().'">'; 332*ab45ba71SJames Collins if($showIcons) $itemHtml .= '<span class="mikio-icon">'.inlineSVG($item->getSvg()).'</span>'; 333*ab45ba71SJames Collins if($showText || $isDropDown) $itemHtml .= '<span>' . $item->getLabel() . '</span>'; 334*ab45ba71SJames Collins $itemHtml .= '</a>'; 335*ab45ba71SJames Collins 336*ab45ba71SJames Collins $userToolsMenu[] = $itemHtml; 337*ab45ba71SJames Collins } 338*ab45ba71SJames Collins 339*ab45ba71SJames Collins 340*ab45ba71SJames Collins switch($this->getConf('navbarDWMenuCombine')) { 341*ab45ba71SJames Collins case 'dropdown': 342*ab45ba71SJames Collins $html .= '<li id="dokuwiki__pagetools" class="mikio-nav-dropdown">'; 343*ab45ba71SJames Collins $html .= '<a id="mikio_dropdown_pagetools" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . ($showIcons ? $this->icon('file') : '') . ($showText ? $lang['page_tools'] : '') . '</a>'; 344*ab45ba71SJames Collins $html .= '<div class="dropdown-menu dropdown-menu-right" aria-labelledby="mikio_dropdown_pagetools">'; 345*ab45ba71SJames Collins 346*ab45ba71SJames Collins foreach($pageToolsMenu as $item) { 347*ab45ba71SJames Collins $html .= $item; 348*ab45ba71SJames Collins } 349*ab45ba71SJames Collins 350*ab45ba71SJames Collins $html .= '</div>'; 351*ab45ba71SJames Collins $html .= '</li>'; 352*ab45ba71SJames Collins 353*ab45ba71SJames Collins $html .= '<li id="dokuwiki__sitetools" class="nav-item dropdown mikio-navbar-dropdown">'; 354*ab45ba71SJames Collins $html .= '<a id="mikio_dropdown_sitetools" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . ($showIcons ? $this->icon('gear') : '') . ($showText ? $lang['site_tools'] : '') . '</a>'; 355*ab45ba71SJames Collins $html .= '<div class="dropdown-menu dropdown-menu-right">'; 356*ab45ba71SJames Collins 357*ab45ba71SJames Collins foreach($siteToolsMenu as $item) { 358*ab45ba71SJames Collins $html .= $item; 359*ab45ba71SJames Collins } 360*ab45ba71SJames Collins 361*ab45ba71SJames Collins $html .= '</div>'; 362*ab45ba71SJames Collins $html .= '</li>'; 363*ab45ba71SJames Collins 364*ab45ba71SJames Collins $html .= '<li id="dokuwiki__usertools" class="nav-item dropdown mikio-navbar-dropdown">'; 365*ab45ba71SJames Collins $html .= '<a id="mikio_dropdown_usertools" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . ($showIcons ? $this->icon('user') : '') . ($showText ? $lang['user_tools'] : '') . '</a>'; 366*ab45ba71SJames Collins $html .= '<div class="dropdown-menu dropdown-menu-right">'; 367*ab45ba71SJames Collins 368*ab45ba71SJames Collins foreach($userToolsMenu as $item) { 369*ab45ba71SJames Collins $html .= $item; 370*ab45ba71SJames Collins } 371*ab45ba71SJames Collins 372*ab45ba71SJames Collins $html .= '</div>'; 373*ab45ba71SJames Collins $html .= '</li>'; 374*ab45ba71SJames Collins 375*ab45ba71SJames Collins break; 376*ab45ba71SJames Collins 377*ab45ba71SJames Collins case 'combine': 378*ab45ba71SJames Collins $html .= '<li class="mikio-nav-dropdown">'; 379*ab45ba71SJames Collins $html .= '<a class="mikio-nav-link" href="#">' . ($showIcons ? $this->icon('wrench') : '') . '' . '</a>'; // TODO change $lang 380*ab45ba71SJames Collins $html .= '<div class="mikio-dropdown">'; 381*ab45ba71SJames Collins 382*ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['page_tools'] . '</h6>'; 383*ab45ba71SJames Collins foreach($pageToolsMenu as $item) { 384*ab45ba71SJames Collins $html .= $item; 385*ab45ba71SJames Collins } 386*ab45ba71SJames Collins 387*ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 388*ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['site_tools'] . '</h6>'; 389*ab45ba71SJames Collins foreach($siteToolsMenu as $item) { 390*ab45ba71SJames Collins $html .= $item; 391*ab45ba71SJames Collins } 392*ab45ba71SJames Collins 393*ab45ba71SJames Collins $html .= '<div class="mikio-dropdown-divider"></div>'; 394*ab45ba71SJames Collins $html .= '<h6 class="mikio-dropdown-header">' . $lang['user_tools'] . '</h6>'; 395*ab45ba71SJames Collins foreach($userToolsMenu as $item) { 396*ab45ba71SJames Collins $html .= $item; 397*ab45ba71SJames Collins } 398*ab45ba71SJames Collins 399*ab45ba71SJames Collins $html .= '</div>'; 400*ab45ba71SJames Collins $html .= '</li>'; 401*ab45ba71SJames Collins break; 402*ab45ba71SJames Collins 403*ab45ba71SJames Collins default: // seperate 404*ab45ba71SJames Collins foreach($userToolsMenu as $item) { 405*ab45ba71SJames Collins $html .= '<li class="nav-item mikio-navbar-seperate">' . $item . '<li>'; 406*ab45ba71SJames Collins } 407*ab45ba71SJames Collins 408*ab45ba71SJames Collins foreach($siteToolsMenu as $item) { 409*ab45ba71SJames Collins $html .= '<li class="nav-item mikio-navbar-seperate">' . $item . '<li>'; 410*ab45ba71SJames Collins } 411*ab45ba71SJames Collins 412*ab45ba71SJames Collins foreach($pageToolsMenu as $item) { 413*ab45ba71SJames Collins $html .= '<li class="nav-item mikio-navbar-seperate">' . $item . '<li>'; 414*ab45ba71SJames Collins } 415*ab45ba71SJames Collins 416*ab45ba71SJames Collins break; 417*ab45ba71SJames Collins } 418*ab45ba71SJames Collins 419*ab45ba71SJames Collins 420*ab45ba71SJames Collins break; 421*ab45ba71SJames Collins 422*ab45ba71SJames Collins } 423*ab45ba71SJames Collins 424*ab45ba71SJames Collins $html .= '</ul>'; 425*ab45ba71SJames Collins 4262b4583abSJames Collins if($print) { 427*ab45ba71SJames Collins echo $html; 4282b4583abSJames Collins return ''; 4292b4583abSJames Collins } 4302b4583abSJames Collins 431*ab45ba71SJames Collins return $html; 4322b4583abSJames Collins } 4332b4583abSJames Collins 4342b4583abSJames Collins 435*ab45ba71SJames Collins /** ---- 436*ab45ba71SJames Collins * print or return the main navbar 4372b4583abSJames Collins * 438*ab45ba71SJames Collins * @param boolean $print print the 4392b4583abSJames Collins * 440*ab45ba71SJames Collins * @return string generated content 4412b4583abSJames Collins */ 442*ab45ba71SJames Collins public function includeNavbar($print = TRUE) { 44347161538SJames Collins global $conf; 444*ab45ba71SJames Collins $html = ''; 445*ab45ba71SJames Collins $class = ''; 44647161538SJames Collins 447*ab45ba71SJames Collins $html .= '<nav class="mikio-navbar">'; 448*ab45ba71SJames Collins $html .= '<a class="mikio-navbar-brand" href="' . wl() . '">'; 449*ab45ba71SJames Collins if($this->getConf('navbarUseTitleIcon') || $this->getConf('navbarUseTitleText')) { 450*ab45ba71SJames Collins 451*ab45ba71SJames Collins // Brand image 452*ab45ba71SJames Collins if($this->getConf('navbarUseTitleIcon')) { 453*ab45ba71SJames Collins $logo = tpl_getMediaFile(array(':wiki:logo.png', ':logo.png', 'images/logo.png', 'images/logo.jpg', 'images/logo.gif'), false); 454*ab45ba71SJames Collins if($logo != '') { 455*ab45ba71SJames Collins $html .= '<img src="' . $logo . '" class="mikio-navbar-brand-image">'; 456*ab45ba71SJames Collins } 457*ab45ba71SJames Collins } 458*ab45ba71SJames Collins 459*ab45ba71SJames Collins // Brand title 460*ab45ba71SJames Collins if($this->getConf('navbarUseTitleText')) { 461*ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title">'; 462*ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title-text">' . $conf['title'] . '</div>'; 463*ab45ba71SJames Collins if($this->getConf('navbarUseTaglineText')) { 464*ab45ba71SJames Collins $html .= '<div class="mikio-navbar-brand-title-tagline">' . $conf['tagline'] . '</div>'; 465*ab45ba71SJames Collins } 466*ab45ba71SJames Collins $html .= '</div>'; 467*ab45ba71SJames Collins } 468*ab45ba71SJames Collins } 469*ab45ba71SJames Collins $html .= '</a>'; 470*ab45ba71SJames Collins $html .= '<div class="mikio-navbar-toggle"><svg viewBox="0 0 32 32" preserveAspectRatio="xMidYMin" aria-hidden="true"><path d="M6.001 7.128L6 10.438l19.998-.005L26 7.124zM6.001 21.566L6 24.876l19.998-.006.002-3.308zM6.001 14.341L6 17.65l19.998-.004.002-3.309z"></path></svg></div>'; 471*ab45ba71SJames Collins // $html .= '</div>'; 472*ab45ba71SJames Collins 473*ab45ba71SJames Collins // Menus 474*ab45ba71SJames Collins $html .= '<div class="mikio-navbar-collapse">'; 475*ab45ba71SJames Collins 476*ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 477*ab45ba71SJames Collins $html .= $this->includeSearch(false); 478*ab45ba71SJames Collins $html .= '</div>'; 479*ab45ba71SJames Collins 480*ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 481*ab45ba71SJames Collins $menu = $this->getConf('navbarPosRightRight'); 482*ab45ba71SJames Collins $html .= $this->includeMenu($menu, false); 483*ab45ba71SJames Collins $html .= '</div>'; 484*ab45ba71SJames Collins 485*ab45ba71SJames Collins $html .= '</div>'; 486*ab45ba71SJames Collins 487*ab45ba71SJames Collins $html .= '</nav>'; 488*ab45ba71SJames Collins 489*ab45ba71SJames Collins // Seperate Menubar 490*ab45ba71SJames Collins if($this->getConf('navbarLowerMenu') != 'none') { 491*ab45ba71SJames Collins $class = $this->getConf('navbarLowerBackground'); 492*ab45ba71SJames Collins if($class == 'none') { 493*ab45ba71SJames Collins $class = ''; 494*ab45ba71SJames Collins } else { 495*ab45ba71SJames Collins $class = 'navbar-' . $class; 496*ab45ba71SJames Collins } 497*ab45ba71SJames Collins 498*ab45ba71SJames Collins $pos = $this->getConf('navbarLowerMenuPos'); 499*ab45ba71SJames Collins if($pos == 'right') { 500*ab45ba71SJames Collins $class .= ' justify-content-end'; 501*ab45ba71SJames Collins } else if($pos == 'center') { 502*ab45ba71SJames Collins $class .= ' justify-content-center'; 503*ab45ba71SJames Collins } 504*ab45ba71SJames Collins 505*ab45ba71SJames Collins $html .= '<nav class="mikio-lower-navbar navbar navbar-expand flex-column flex-md-row ' . $class . '">'; 506*ab45ba71SJames Collins 507*ab45ba71SJames Collins $menu = $this->getConf('navbarLowerMenu'); 508*ab45ba71SJames Collins if($menu != 'none' && $menu != 'search') { 509*ab45ba71SJames Collins $html .= '<div class="mikio-nav-item navbar-nav-scroll">'; 510*ab45ba71SJames Collins $html .= $this->includeMenu($menu, false); 511*ab45ba71SJames Collins $html .= '</div>'; 512*ab45ba71SJames Collins $class = ''; 513*ab45ba71SJames Collins } else if($menu == 'search') { 514*ab45ba71SJames Collins $html .= '<div class="mikio-nav-item">'; 515*ab45ba71SJames Collins $html .= $this->includeSearch(false); 516*ab45ba71SJames Collins $html .= '</div>'; 517*ab45ba71SJames Collins $class = ''; 518*ab45ba71SJames Collins } 519*ab45ba71SJames Collins 520*ab45ba71SJames Collins $html .= '</nav>'; 521*ab45ba71SJames Collins } 522*ab45ba71SJames Collins 523*ab45ba71SJames Collins if($print) { 524*ab45ba71SJames Collins echo $html; 525*ab45ba71SJames Collins return ''; 526*ab45ba71SJames Collins } 527*ab45ba71SJames Collins 528*ab45ba71SJames Collins return $html; 529*ab45ba71SJames Collins } 530*ab45ba71SJames Collins 531*ab45ba71SJames Collins 532*ab45ba71SJames Collins /** ---- 533*ab45ba71SJames Collins * Print or return the sidebar content 534*ab45ba71SJames Collins * 535*ab45ba71SJames Collins * @param string $prefix sidebar prefix to use when searching 536*ab45ba71SJames Collins * @param boolean $print print the generated content to the output buffer 537*ab45ba71SJames Collins * @param boolean $parse parse the content 538*ab45ba71SJames Collins * 539*ab45ba71SJames Collins * @return string generated content 540*ab45ba71SJames Collins */ 541*ab45ba71SJames Collins public function includeSidebar($prefix = '', $print = TRUE, $parse = TRUE) { 542*ab45ba71SJames Collins global $conf, $ID; 543*ab45ba71SJames Collins 544*ab45ba71SJames Collins $html = ''; 545*ab45ba71SJames Collins $confPrefix = preg_replace('/[^a-zA-Z0-9]/', '', ucwords($prefix)); 546*ab45ba71SJames Collins $prefix = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($prefix)); 547*ab45ba71SJames Collins 548*ab45ba71SJames Collins if($confPrefix == '') $confPrefix = 'Left'; 549*ab45ba71SJames Collins if($prefix == 'Left') $prefix = ''; 550*ab45ba71SJames Collins 551*ab45ba71SJames Collins if($this->getConf('sidebarShow' . $confPrefix) && page_findnearest($conf[$prefix . 'sidebar']) != FALSE && p_get_metadata($ID, 'nosidebar', FALSE) == FALSE) { 552*ab45ba71SJames Collins 553*ab45ba71SJames Collins $content = $this->includeFile('sidebar' . $prefix . 'header.html', FALSE); 554*ab45ba71SJames Collins if($content != '') $html .= '<div class="mikio-sidebar-header">' . $content . '</div>'; 555*ab45ba71SJames Collins 556*ab45ba71SJames Collins if($prefix == '' && $this->getConf('sidebarLeftSearch') == 'top') $html .= $this->includeSearch(FALSE); 557*ab45ba71SJames Collins 558*ab45ba71SJames Collins $content = $this->includePage($conf[$prefix . 'sidebar'], FALSE); 559*ab45ba71SJames Collins if($content != '') $html .= '<div class="mikio-sidebar-content">' . $content . '</div>'; 560*ab45ba71SJames Collins 561*ab45ba71SJames Collins if($prefix == '' && $this->getConf('sidebarLeftSearch') == 'bottom') $html .= $this->includeSearch(FALSE); 562*ab45ba71SJames Collins 563*ab45ba71SJames Collins $content = $this->includeFile('sidebar' . $prefix . 'footer.html', FALSE); 564*ab45ba71SJames Collins if($content != '') $html .= '<div class="mikio-sidebar-footer">' . $content . '</div>'; 565*ab45ba71SJames Collins } 566*ab45ba71SJames Collins 567*ab45ba71SJames Collins if($html != '') { 568*ab45ba71SJames Collins $html = '<aside class="mikio-sidebar mikio-sidebar-' . ($prefix == '' ? 'left' : $prefix) . '"><a class="mikio-sidebar-toggle" href="#">' . tpl_getLang('sidebar-title') . '</a><div class="mikio-sidebar-collapse">'. $html . '</div></aside>'; 569*ab45ba71SJames Collins } 570*ab45ba71SJames Collins 571*ab45ba71SJames Collins if($parse) $html = $this->includeIcons($html); 572*ab45ba71SJames Collins if($print) echo $html; 573*ab45ba71SJames Collins return $html; 574*ab45ba71SJames Collins } 575*ab45ba71SJames Collins 576*ab45ba71SJames Collins 577*ab45ba71SJames Collins /** ---- 578*ab45ba71SJames Collins * Print or return the page tools content 579*ab45ba71SJames Collins * 580*ab45ba71SJames Collins * @param boolean $print print the generated content to the output buffer 581*ab45ba71SJames Collins * @param boolean $includeId include the dw__pagetools id in the element 582*ab45ba71SJames Collins * 583*ab45ba71SJames Collins * @return string generated content 584*ab45ba71SJames Collins */ 585*ab45ba71SJames Collins public function includePageTools($print = TRUE, $includeId = FALSE) { 586*ab45ba71SJames Collins $html = ''; 587*ab45ba71SJames Collins 588*ab45ba71SJames Collins $html .= '<nav' . ($includeId ? ' id="dw__pagetools"' : '') . ' class="hidden-print dw__pagetools">'; 589*ab45ba71SJames Collins 590*ab45ba71SJames Collins $items = (new \dokuwiki\Menu\PageMenu())->getItems(); 591*ab45ba71SJames Collins foreach($items as $item) { 592*ab45ba71SJames Collins $html .= '<a href="'.$item->getLink().'" title="'.$item->getTitle().'"><span class="icon">'.inlineSVG($item->getSvg()).'</span><span class="a11y">'.$item->getLabel().'</span></a>'; 593*ab45ba71SJames Collins } 594*ab45ba71SJames Collins 595*ab45ba71SJames Collins $html .= '</nav>'; 596*ab45ba71SJames Collins 597*ab45ba71SJames Collins if($print) echo $html; 598*ab45ba71SJames Collins return $html; 599*ab45ba71SJames Collins } 600*ab45ba71SJames Collins 601*ab45ba71SJames Collins 602*ab45ba71SJames Collins public function includeSearch($print = TRUE, $class = '') { 603*ab45ba71SJames Collins global $lang; 604*ab45ba71SJames Collins $html = ''; 605*ab45ba71SJames Collins 606*ab45ba71SJames Collins // $html .= '<div class="mikio-search">'; 607*ab45ba71SJames Collins $html .= '<form class="mikio-search" action="' . wl($ID) . '" accept-charset="utf-8" method="get" role="search">'; 608*ab45ba71SJames Collins $html .= '<input class="mikio-control" autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . (($ACT == 'search') ? htmlspecialchars($QUERY) : '') . '" accesskey="f" title="[F]" />'; 609*ab45ba71SJames Collins $html .= '<button class="mikio-control" type="submit" title="' . $lang['btn_search'] . '">'; 610*ab45ba71SJames Collins if($this->getConf('searchButton') == 'icon') { 611*ab45ba71SJames Collins $html .= $this->icon('search'); 612*ab45ba71SJames Collins } else { 613*ab45ba71SJames Collins $html .= $lang['btn_search']; 614*ab45ba71SJames Collins } 615*ab45ba71SJames Collins $html .= '</button>'; 616*ab45ba71SJames Collins $html .= '</form>'; 617*ab45ba71SJames Collins // $html .= '</div>'; 618*ab45ba71SJames Collins 619*ab45ba71SJames Collins // $html .= '<div class="mikio-search ' . $class . '">'; 620*ab45ba71SJames Collins // $html .= '<form action="' . wl($ID) . '" accept-charset="utf-8" class="form-inline search" method="get" role="search">'; 621*ab45ba71SJames Collins // $html .= '<div class="input-group"><input id="sqsearch" autocomplete="off" type="search" placeholder="' . $lang['btn_search'] . '" value="' . (($ACT == 'search') ? htmlspecialchars($QUERY) : '') . '" accesskey="f" name="q" class="form-control" title="[F]" />'; 622*ab45ba71SJames Collins // $html .= '<div class="input-group-append"><button class="btn btn-secondary" type="submit" title="' . $lang['btn_search'] . '">'; 623*ab45ba71SJames Collins // if($this->getConf('searchButton') == 'icon') { 624*ab45ba71SJames Collins // $html .= $this->icon('search'); 625*ab45ba71SJames Collins // } else { 626*ab45ba71SJames Collins // $html .= $lang['btn_search']; 627*ab45ba71SJames Collins // } 628*ab45ba71SJames Collins // $html .= '</button></div></div>'; 629*ab45ba71SJames Collins // $html .= '<input type="hidden" name="do" value="search" />'; 630*ab45ba71SJames Collins // $html .= '</form>'; 631*ab45ba71SJames Collins // $html .= '</div>'; 632*ab45ba71SJames Collins 633*ab45ba71SJames Collins if($print) { 634*ab45ba71SJames Collins print $html; 635*ab45ba71SJames Collins return ''; 636*ab45ba71SJames Collins } 637*ab45ba71SJames Collins 638*ab45ba71SJames Collins return $html; 639*ab45ba71SJames Collins } 640*ab45ba71SJames Collins 641*ab45ba71SJames Collins 642*ab45ba71SJames Collins public function includeContent($print = FALSE) { 643*ab45ba71SJames Collins ob_start(); 644*ab45ba71SJames Collins tpl_content(false); 645*ab45ba71SJames Collins $html = ob_get_contents(); 646*ab45ba71SJames Collins ob_end_clean(); 647*ab45ba71SJames Collins 648*ab45ba71SJames Collins $html = $this->includeIcons($html); 649*ab45ba71SJames Collins $html = $this->parseContent($html); 650*ab45ba71SJames Collins 651*ab45ba71SJames Collins $html .= '<div style="clear:both"></div>'; 652*ab45ba71SJames Collins 653*ab45ba71SJames Collins if($print) echo $html; 654*ab45ba71SJames Collins return $html; 655*ab45ba71SJames Collins } 656*ab45ba71SJames Collins 657*ab45ba71SJames Collins /** ---- 658*ab45ba71SJames Collins * Print or return footer 659*ab45ba71SJames Collins * 660*ab45ba71SJames Collins * @param boolean $print print footer 661*ab45ba71SJames Collins * @return string html string containing footer 662*ab45ba71SJames Collins */ 663*ab45ba71SJames Collins public function includeFooter($print = TRUE) { 664*ab45ba71SJames Collins global $ACT; 665*ab45ba71SJames Collins 666*ab45ba71SJames Collins $html = ''; 667*ab45ba71SJames Collins 668*ab45ba71SJames Collins $html .= '<footer class="mikio-footer">'; 669*ab45ba71SJames Collins $html .= '<div class="doc">' . tpl_pageinfo(TRUE) . '</div>'; 670*ab45ba71SJames Collins $html .= $this->includeFile(TRUE); 671*ab45ba71SJames Collins if($ACT == 'show') { 672*ab45ba71SJames Collins $this->includePage('footer'); 673*ab45ba71SJames Collins } 674*ab45ba71SJames Collins 675*ab45ba71SJames Collins if($this->getConf('footerCustomMenuText') != '') { 676*ab45ba71SJames Collins $html .= $this->includeMenu('footer', FALSE); 677*ab45ba71SJames Collins } 678*ab45ba71SJames Collins 679*ab45ba71SJames Collins if($this->getConf('footerSearch')) { 680*ab45ba71SJames Collins $html .= '<div class="mikio-footer-search">'; 681*ab45ba71SJames Collins $html .= $this->includeSearch(FALSE); 682*ab45ba71SJames Collins $html .= '</div>'; 683*ab45ba71SJames Collins } 684*ab45ba71SJames Collins 685*ab45ba71SJames Collins if($this->getConf('pageToolsFooter') != '' && $ACT == 'show') { 686*ab45ba71SJames Collins $html .= $this->includePageTools(FALSE); 687*ab45ba71SJames Collins } 688*ab45ba71SJames Collins 689*ab45ba71SJames Collins $meta['licenseType'] = array('multichoice', '_choices' => array('none', 'badge', 'button')); 690*ab45ba71SJames Collins $meta['licenseImageOnly'] = array('onoff'); 691*ab45ba71SJames Collins 692*ab45ba71SJames Collins $licenseType = $this->getConf('licenseType'); 693*ab45ba71SJames Collins if($licenseType != 'none') { 694*ab45ba71SJames Collins $html .= tpl_license($licenseType, $this->getConf('licenseImageOnly'), TRUE, TRUE); 695*ab45ba71SJames Collins } 696*ab45ba71SJames Collins 697*ab45ba71SJames Collins $html .= '</footer>'; 698*ab45ba71SJames Collins 699*ab45ba71SJames Collins if($print) echo $html; 700*ab45ba71SJames Collins return $html; 701*ab45ba71SJames Collins } 702*ab45ba71SJames Collins 703*ab45ba71SJames Collins 704*ab45ba71SJames Collins /** ---- 705*ab45ba71SJames Collins * Print or return breadcrumb trail 706*ab45ba71SJames Collins * 707*ab45ba71SJames Collins * @param boolean $print print out trail 708*ab45ba71SJames Collins * @param boolean $parse parse trail before printing 709*ab45ba71SJames Collins * @return string html string containing breadcrumbs 710*ab45ba71SJames Collins */ 711*ab45ba71SJames Collins public function includeBreadcrumbs($print = TRUE, $parse = TRUE) { 712*ab45ba71SJames Collins global $conf, $ID, $lang; 713*ab45ba71SJames Collins 714*ab45ba71SJames Collins $html = '<div class="mikio-breadcrumbs">'; 71575adba86SJames Collins 71647161538SJames Collins if($conf['breadcrumbs']) { 717*ab45ba71SJames Collins if(!$this->getConf('breadcrumbPrefix') && !$this->getConf('breadcrumbSep')) { 718*ab45ba71SJames Collins ob_start(); 71975adba86SJames Collins tpl_breadcrumbs(); 720*ab45ba71SJames Collins $html .= ob_get_contents(); 721*ab45ba71SJames Collins ob_end_clean(); 722*ab45ba71SJames Collins } else { 723*ab45ba71SJames Collins $sep = '•'; 724*ab45ba71SJames Collins $prefix = $lang['breadcrumb']; 725*ab45ba71SJames Collins 726*ab45ba71SJames Collins if($this->getConf('breadcrumbSep')) { 727*ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 728*ab45ba71SJames Collins $img = $this->getMediaFile('breadcrumb-sep'); 729*ab45ba71SJames Collins 730*ab45ba71SJames Collins if($img !== FALSE) { 731*ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 732*ab45ba71SJames Collins } 73347161538SJames Collins } 73447161538SJames Collins 735*ab45ba71SJames Collins if($this->getConf('breadcrumbPrefix')) { 736*ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 737*ab45ba71SJames Collins $img = $this->getMediaFile('breadcrumb-prefix'); 738*ab45ba71SJames Collins 739*ab45ba71SJames Collins if($img !== FALSE) { 740*ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 741*ab45ba71SJames Collins } 742*ab45ba71SJames Collins } 743*ab45ba71SJames Collins 744*ab45ba71SJames Collins $crumbs = breadcrumbs(); 745*ab45ba71SJames Collins 746*ab45ba71SJames Collins $html .= '<ul>'; 747*ab45ba71SJames Collins if($prefix != '') $html .= '<li class="prefix">' . $prefix . '</li>'; 748*ab45ba71SJames Collins 749*ab45ba71SJames Collins $last = count($crumbs); 750*ab45ba71SJames Collins $i = 0; 751*ab45ba71SJames Collins foreach($crumbs as $id => $name) { 752*ab45ba71SJames Collins $i++; 753*ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 754*ab45ba71SJames Collins $html .= '<li' . ($i == $last ? ' class="curid"' : '') . '>'; 755*ab45ba71SJames Collins $html .= tpl_pagelink($id, NULL, TRUE); 756*ab45ba71SJames Collins $html .= '</li>'; 757*ab45ba71SJames Collins } 758*ab45ba71SJames Collins 759*ab45ba71SJames Collins $html .= '</ul>'; 760*ab45ba71SJames Collins } 761*ab45ba71SJames Collins } else if($conf['youarehere']) { 762*ab45ba71SJames Collins if(!$this->getConf('breadcrumbPrefix') && !$this->getConf('breadcrumbSep')) { 763*ab45ba71SJames Collins ob_start(); 76475adba86SJames Collins tpl_youarehere(); 765*ab45ba71SJames Collins $html .= ob_get_contents(); 766*ab45ba71SJames Collins ob_end_clean(); 767*ab45ba71SJames Collins } else { 768*ab45ba71SJames Collins $sep = ' » '; 769*ab45ba71SJames Collins $prefix = $lang['youarehere']; 770*ab45ba71SJames Collins 771*ab45ba71SJames Collins if($this->getConf('breadcrumbSep')) { 772*ab45ba71SJames Collins $sep = $this->getConf('breadcrumbSepText'); 773*ab45ba71SJames Collins $img = $this->getMediaFile('breadcrumb-sep'); 774*ab45ba71SJames Collins 775*ab45ba71SJames Collins if($img !== FALSE) { 776*ab45ba71SJames Collins $sep = '<img src="' . $img . '">'; 777*ab45ba71SJames Collins } 77875adba86SJames Collins } 77975adba86SJames Collins 780*ab45ba71SJames Collins if($this->getConf('breadcrumbPrefix')) { 781*ab45ba71SJames Collins $prefix = $this->getConf('breadcrumbPrefixText'); 782*ab45ba71SJames Collins $img = $this->getMediaFile('breadcrumb-prefix'); 783*ab45ba71SJames Collins 784*ab45ba71SJames Collins if($img !== FALSE) { 785*ab45ba71SJames Collins $prefix = '<img src="' . $img . '">'; 78675adba86SJames Collins } 78747161538SJames Collins } 78847161538SJames Collins 789*ab45ba71SJames Collins $html .= '<ul>'; 790*ab45ba71SJames Collins if($prefix != '') $html .= '<li class="prefix">' . $prefix . '</li>'; 791*ab45ba71SJames Collins $html .= '<li>' . tpl_pagelink(':'.$conf['start'], NULL, TRUE) . '</li>'; 792*ab45ba71SJames Collins 793*ab45ba71SJames Collins $parts = explode(':', $ID); 794*ab45ba71SJames Collins $count = count($parts); 795*ab45ba71SJames Collins 796*ab45ba71SJames Collins $part = ''; 797*ab45ba71SJames Collins for($i = 0; $i < $count - 1; $i++) { 798*ab45ba71SJames Collins $part .= $parts[$i].':'; 799*ab45ba71SJames Collins $page = $part; 800*ab45ba71SJames Collins if($page == $conf['start']) continue; 801*ab45ba71SJames Collins 802*ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 803*ab45ba71SJames Collins $html .= '<li>' . tpl_pagelink($page, NULL, TRUE) . '</li>'; 804*ab45ba71SJames Collins } 805*ab45ba71SJames Collins 806*ab45ba71SJames Collins resolve_pageid('', $page, $exists); 807*ab45ba71SJames Collins if(!(isset($page) && $page == $part.$parts[$i])) { 808*ab45ba71SJames Collins $page = $part.$parts[$i]; 809*ab45ba71SJames Collins if($page != $conf['start']) { 810*ab45ba71SJames Collins $html .= '<li class="sep">' . $sep . '</li>'; 811*ab45ba71SJames Collins $html .= '<li>' . tpl_pagelink($page, NULL, TRUE) . '</li>'; 812*ab45ba71SJames Collins } 813*ab45ba71SJames Collins } 814*ab45ba71SJames Collins 815*ab45ba71SJames Collins $html .= '</ul>'; 816*ab45ba71SJames Collins } 817*ab45ba71SJames Collins } 818*ab45ba71SJames Collins 819*ab45ba71SJames Collins $html .= '</div>'; 820*ab45ba71SJames Collins 821*ab45ba71SJames Collins if($parse) $html = $this->includeIcons($html); 822*ab45ba71SJames Collins if($print) echo $html; 823*ab45ba71SJames Collins return $html; 824*ab45ba71SJames Collins } 825*ab45ba71SJames Collins 826*ab45ba71SJames Collins 82747161538SJames Collins 82875adba86SJames Collins /** 82975adba86SJames Collins * Print out hero 83075adba86SJames Collins * 83175adba86SJames Collins * @author James Collins <james.collins@outlook.com.au> 83275adba86SJames Collins */ 83375adba86SJames Collins public function includeHero() { 83475adba86SJames Collins global $ACT; 8352b4583abSJames Collins global $INFO; 83647161538SJames Collins 8372b4583abSJames Collins // file_put_contents('output.txt', print_r($INFO, true)); 8382b4583abSJames Collins 8392b4583abSJames Collins if($ACT == 'show') { 840*ab45ba71SJames Collins if($this->getConf('heroTitle')) { 84175adba86SJames Collins print '<div class="mikio-hero d-flex flex-row">'; 84275adba86SJames Collins print '<div class="mikio-hero-text flex-grow-1">'; 843*ab45ba71SJames Collins if ($ACT == 'show' && $this->getConf('breadcrumbPos') == 'hero') print $this->includeBreadcrumbs(); 844*ab45ba71SJames Collins 84575adba86SJames Collins print '<h1 id="mikio-hero-title">'; 8462b4583abSJames Collins print tpl_pagetitle(null, true).' '; // No idea why this requires a blank space afterwards to work? 84775adba86SJames Collins print '</h1>'; 8482b4583abSJames Collins print '<h2 class="mikio-hero-subtext">'; 8492b4583abSJames Collins // print $this->heroSubtitle; // TODO scrape page for hero subtitle 85075adba86SJames Collins print '</h2>'; 85175adba86SJames Collins print '</div>'; 85247161538SJames Collins 8532b4583abSJames Collins 8542b4583abSJames Collins $hero_image = tpl_getMediaFile(array(':' . $INFO['namespace'] . ':hero.png', ':' . $INFO['namespace'] . ':hero.jpg', ':hero.png', ':hero.jpg', ':wiki:hero.png', ':wiki:hero.jpg', 'images/hero.png', 'images/hero.jpg'), false); 85575adba86SJames Collins if($hero_image != '') $hero_image = ' style="background-image:url(\''.$hero_image.'\');"'; 85647161538SJames Collins 85775adba86SJames Collins print '<div class="mikio-hero-image"' . $hero_image . '></div>'; 85875adba86SJames Collins print '</div>'; 85947161538SJames Collins } 86075adba86SJames Collins } 86175adba86SJames Collins } 86275adba86SJames Collins 86375adba86SJames Collins 86475adba86SJames Collins /** 86575adba86SJames Collins * Print out TOC 86675adba86SJames Collins * 867*ab45ba71SJames Collins * @param boolean 868*ab45ba71SJames Collins * 86975adba86SJames Collins * @author James Collins <james.collins@outlook.com.au> 87075adba86SJames Collins */ 871*ab45ba71SJames Collins public function includeTOC($parse = TRUE) { 872*ab45ba71SJames Collins $html = ''; 8732b4583abSJames Collins 874*ab45ba71SJames Collins $tocHtml = tpl_toc(true); 875*ab45ba71SJames Collins 876*ab45ba71SJames Collins if($tocHtml != '') { 877*ab45ba71SJames Collins $tocHtml = preg_replace('/<li.*><div.*><a.*><\/a><\/div><\/li>\s*/', '', $tocHtml); 878*ab45ba71SJames Collins 879*ab45ba71SJames Collins $html .= '<div class="mikio-toc">'; 880*ab45ba71SJames Collins $html .= $tocHtml; 881*ab45ba71SJames Collins $html .= '</div>'; 8822b4583abSJames Collins } 8832b4583abSJames Collins 884*ab45ba71SJames Collins if($parse) $html = $this->includeIcons($html); 885*ab45ba71SJames Collins echo $html; 886*ab45ba71SJames Collins } 887*ab45ba71SJames Collins 888*ab45ba71SJames Collins 889*ab45ba71SJames Collins /** ---- 890*ab45ba71SJames Collins * Parse the string and replace icon elements with included icon libraries 891*ab45ba71SJames Collins * 892*ab45ba71SJames Collins * @param string $str content to parse 893*ab45ba71SJames Collins * @return string parsed string 894*ab45ba71SJames Collins */ 895*ab45ba71SJames Collins public function includeIcons($str) { 896*ab45ba71SJames Collins global $ACT, $MIKIO_ICONS; 897*ab45ba71SJames Collins 898*ab45ba71SJames Collins $iconTag = $this->getConf('iconTag', 'icon'); 899*ab45ba71SJames Collins 900*ab45ba71SJames Collins if($ACT == 'show' || $ACT == 'admin' && count($MIKIO_ICONS) > 0) { 901*ab45ba71SJames Collins $str = preg_replace_callback('/<' . $iconTag . ' ([\w\- #]*)>(?=[^>]*(<|$))/', 902*ab45ba71SJames Collins function ($matches) { 903*ab45ba71SJames Collins global $MIKIO_ICONS; 904*ab45ba71SJames Collins 905*ab45ba71SJames Collins $s = $matches[0]; 906*ab45ba71SJames Collins 907*ab45ba71SJames Collins if(count($MIKIO_ICONS) > 0) { 908*ab45ba71SJames Collins $icon = $MIKIO_ICONS[0]; 909*ab45ba71SJames Collins 910*ab45ba71SJames Collins if(count($matches) > 1) { 911*ab45ba71SJames Collins $e = explode(' ', $matches[1]); 912*ab45ba71SJames Collins 913*ab45ba71SJames Collins if(count($e) > 1) { 914*ab45ba71SJames Collins foreach($MIKIO_ICONS as $iconItem) { 915*ab45ba71SJames Collins if(strcasecmp($iconItem['name'], $e[0]) == 0) { 916*ab45ba71SJames Collins $icon = $iconItem; 917*ab45ba71SJames Collins 918*ab45ba71SJames Collins $s = $icon['insert']; 919*ab45ba71SJames Collins for($i = 1; $i < 9; $i++) { 920*ab45ba71SJames Collins if(count($e) < $i || $e[$i] == '') { 921*ab45ba71SJames Collins if(isset($icon['$'.$i])) { 922*ab45ba71SJames Collins $s = str_replace('$' . $i, $icon['$'.$i], $s); 923*ab45ba71SJames Collins } 924*ab45ba71SJames Collins } else { 925*ab45ba71SJames Collins $s = str_replace('$' . $i, $e[$i], $s); 926*ab45ba71SJames Collins } 927*ab45ba71SJames Collins } 928*ab45ba71SJames Collins 929*ab45ba71SJames Collins $dir = ''; 930*ab45ba71SJames Collins if(isset($icon['dir'])) $dir = $this->baseDir . 'icons/' . $icon['dir'] . '/'; 931*ab45ba71SJames Collins 932*ab45ba71SJames Collins $s = str_replace('$0', $dir, $s); 933*ab45ba71SJames Collins 934*ab45ba71SJames Collins break; 935*ab45ba71SJames Collins } 936*ab45ba71SJames Collins } 937*ab45ba71SJames Collins } else { 938*ab45ba71SJames Collins $s = str_replace('$1', $matches[1], $icon['insert']); 93975adba86SJames Collins } 94075adba86SJames Collins } 9412b4583abSJames Collins } 94275adba86SJames Collins 943*ab45ba71SJames Collins $s = preg_replace('/(class=")(.*)"/', '$1mikio-icon $2"', $s, -1, $count); 944*ab45ba71SJames Collins if($count == 0) { 945*ab45ba71SJames Collins $s = preg_replace('/(<\w* )/', '$1class="mikio-icon" ', $s); 946*ab45ba71SJames Collins } 947*ab45ba71SJames Collins 948*ab45ba71SJames Collins return $s; 949*ab45ba71SJames Collins }, 950*ab45ba71SJames Collins $str); 951*ab45ba71SJames Collins } 952*ab45ba71SJames Collins 953*ab45ba71SJames Collins return $str; 954*ab45ba71SJames Collins } 95547161538SJames Collins 956c165b184SJames Collins /** 957c165b184SJames Collins * Parse HTML for bootstrap 958c165b184SJames Collins * 959c165b184SJames Collins * @author James Collins <james.collins@outlook.com.au> 960c165b184SJames Collins * 961c165b184SJames Collins * @param string $content HTML content to parse 962c165b184SJames Collins * @return string Parsed HTML for bootstrap 963c165b184SJames Collins */ 96475adba86SJames Collins public function parseContent($content) { 965*ab45ba71SJames Collins global $INPUT, $ACT; 966*ab45ba71SJames Collins 967*ab45ba71SJames Collins 968*ab45ba71SJames Collins 969*ab45ba71SJames Collins /* 970*ab45ba71SJames Collins return $content; 971*ab45ba71SJames Collins 972*ab45ba71SJames Collins if($INPUT->str('page') == 'config') { 973*ab45ba71SJames Collins // Mikio sections 974*ab45ba71SJames Collins $admin_sections = array( 975*ab45ba71SJames Collins // Section Insert Before Icon 976*ab45ba71SJames Collins 'navbar' => array('navbarUseTitleIcon', 'mdi:palette'), 977*ab45ba71SJames Collins ); 978*ab45ba71SJames Collins 979*ab45ba71SJames Collins foreach ($admin_sections as $section => $items) { 980*ab45ba71SJames Collins 981*ab45ba71SJames Collins $search = $items[0]; 982*ab45ba71SJames Collins $icon = $items[1]; 983*ab45ba71SJames Collins 984*ab45ba71SJames Collins // $content = preg_replace('/<tr(.*)>\s+<td(.*)>\s+<span(.*)>(tpl»mikio»' . $search . ')<\/span>/', 985*ab45ba71SJames Collins // '</table></div></fieldset><fieldset id="bootstrap3__' . $section . '"><legend>' . $icon . ' ' . tpl_getLang("config_$section") . '</legend><div class="table-responsive"><table class="table table-hover table-condensed inline"><tr$1><td$2><span$3>$4</span>', $content); 986*ab45ba71SJames Collins 987*ab45ba71SJames Collins $content = preg_replace('/<tr(.*)>\s+<td(.*)>\s+<span(.*)>(tpl»mikio»' . $search . ')<\/span>/', 988*ab45ba71SJames Collins '<tr class="default"><td class="mikio-config-table-header" colspan="2">' . tpl_getLang('config_' . $section) . '</td></tr><tr$1><td$2><span$3>$4</span>', $content); 989*ab45ba71SJames Collins 990*ab45ba71SJames Collins 991*ab45ba71SJames Collins 992*ab45ba71SJames Collins 993*ab45ba71SJames Collins } 994*ab45ba71SJames Collins } 995*ab45ba71SJames Collins*/ 996*ab45ba71SJames Collins 997*ab45ba71SJames Collins 998*ab45ba71SJames Collins 99947161538SJames Collins $html = new \simple_html_dom; 1000c165b184SJames Collins $html->load($content, true, false); 1001c165b184SJames Collins 1002*ab45ba71SJames Collins if (!$html) return $content; 1003*ab45ba71SJames Collins 1004*ab45ba71SJames Collins /* Buttons */ 1005*ab45ba71SJames Collins foreach($html->find('#config__manager button') as $node) { 1006*ab45ba71SJames Collins $c = explode(' ', $node->class); 1007*ab45ba71SJames Collins if(!in_array('mikio-button', $c)) $c[] = 'mikio-button'; 1008*ab45ba71SJames Collins $node->class = implode(' ', $c); 1009c165b184SJames Collins } 1010c165b184SJames Collins 1011*ab45ba71SJames Collins 1012*ab45ba71SJames Collins /* Buttons - Primary */ 1013*ab45ba71SJames Collins foreach($html->find('#config__manager [type=submit]') as $node) { 1014*ab45ba71SJames Collins $c = explode(' ', $node->class); 1015*ab45ba71SJames Collins if(!in_array('mikio-primary', $c)) $c[] = 'mikio-primary'; 1016*ab45ba71SJames Collins $node->class = implode(' ', $c); 1017*ab45ba71SJames Collins } 1018*ab45ba71SJames Collins 1019*ab45ba71SJames Collins 1020*ab45ba71SJames Collins 1021*ab45ba71SJames Collins 1022*ab45ba71SJames Collins $content = $html->save(); 1023*ab45ba71SJames Collins $html->clear(); 1024*ab45ba71SJames Collins unset($html); 1025*ab45ba71SJames Collins 1026*ab45ba71SJames Collins return $content; 1027*ab45ba71SJames Collins 1028*ab45ba71SJames Collins 1029*ab45ba71SJames Collins 1030*ab45ba71SJames Collins 1031*ab45ba71SJames Collins 1032*ab45ba71SJames Collins 1033*ab45ba71SJames Collins 103447161538SJames Collins # Hide page title if hero is enabled 1035*ab45ba71SJames Collins if($this->getConf('heroTitle')) { 103647161538SJames Collins $pageTitle = tpl_pagetitle(null, true); 103747161538SJames Collins 103847161538SJames Collins foreach($html->find('h1,h2,h3,h4') as $elm) { 103947161538SJames Collins if($elm->innertext == $pageTitle) { 104047161538SJames Collins $elm->innertext = ''; 104147161538SJames Collins break; 104247161538SJames Collins } 104347161538SJames Collins } 104447161538SJames Collins } 1045c165b184SJames Collins 10462b4583abSJames Collins # Hero subtitle 10472b4583abSJames Collins foreach($html->find('p') as $elm) { 10482b4583abSJames Collins $i = stripos($elm->innertext, '~~hero-subtitle'); 10492b4583abSJames Collins if($i !== false) { 10502b4583abSJames Collins $j = strpos($elm->innertext, '~~', $i + 2); 10512b4583abSJames Collins if($j !== false) { 10522b4583abSJames Collins if($j > $i + 16) { 10532b4583abSJames Collins $subtitle = substr($elm->innertext, $i + 16, $j - $i - 16); 10542b4583abSJames Collins foreach($html->find('.mikio-hero-subtext') as $subtitleElm) { 10552b4583abSJames Collins $subtitleElm->innertext = $subtitle; 10562b4583abSJames Collins } 10572b4583abSJames Collins } 10582b4583abSJames Collins 10592b4583abSJames Collins $elm->innertext = substr($elm->innertext, $j + 2); 10602b4583abSJames Collins break; 10612b4583abSJames Collins } 10622b4583abSJames Collins } 10632b4583abSJames Collins } 10642b4583abSJames Collins 1065*ab45ba71SJames Collins // Buttons 1066*ab45ba71SJames Collins // foreach($html->find('.button') as $elm) { 1067*ab45ba71SJames Collins // if ($elm->tag == 'form') { 1068*ab45ba71SJames Collins // continue; 1069*ab45ba71SJames Collins // } 1070*ab45ba71SJames Collins // $elm->class .= ' btn'; 1071*ab45ba71SJames Collins // } 1072*ab45ba71SJames Collins 1073*ab45ba71SJames Collins foreach($html->find('#config__manager [type=submit], #edbtn__save, #dw__login [type=submit]') as $elm) { 1074*ab45ba71SJames Collins if(stripos($elm->class, 'btn') === FALSE) { 1075*ab45ba71SJames Collins $elm->class .= ' btn btn-primary'; 1076c165b184SJames Collins } 1077c165b184SJames Collins } 1078c165b184SJames Collins 1079*ab45ba71SJames Collins foreach($html->find('button, [type=button], [type=submit], [type=reset]') as $elm) { 1080*ab45ba71SJames Collins if(stripos($elm->class, 'btn') === FALSE) { 1081c165b184SJames Collins $elm->class .= ' btn btn-outline-secondary'; 1082c165b184SJames Collins } 10832b4583abSJames Collins } 1084c165b184SJames Collins 1085c165b184SJames Collins foreach($html->find('.btn_secedit [type=submit]') as $elm) { 1086c165b184SJames Collins $elm->class .= ' btn-sm'; 1087c165b184SJames Collins } 1088c165b184SJames Collins 1089*ab45ba71SJames Collins 1090c165b184SJames Collins # Section Edit icons 1091c165b184SJames Collins foreach($html->find('.secedit.editbutton_section button') as $elm) { 1092c165b184SJames Collins $elm->innertext = '<i class="fa fa-edit" aria-hidden="true"></i> ' . $elm->innertext; 1093c165b184SJames Collins } 1094c165b184SJames Collins 1095*ab45ba71SJames Collins // Success 1096*ab45ba71SJames Collins foreach($html->find('div.success') as $elm) { 1097*ab45ba71SJames Collins $elm->class = 'alert alert-success'; //str_ireplace('success', 'alert alert-success', $elm->class); 1098*ab45ba71SJames Collins } 1099c165b184SJames Collins 1100*ab45ba71SJames Collins // Error 1101*ab45ba71SJames Collins foreach($html->find('div.error') as $elm) { 1102*ab45ba71SJames Collins $elm->class = 'alert alert-danger'; //str_ireplace('success', 'alert alert-success', $elm->class); 1103*ab45ba71SJames Collins } 1104*ab45ba71SJames Collins 1105*ab45ba71SJames Collins // Forms 1106*ab45ba71SJames Collins foreach($html->find('input, select') as $elm) { 1107*ab45ba71SJames Collins $elm->class .= ' form-control'; 1108*ab45ba71SJames Collins } 1109*ab45ba71SJames Collins 1110*ab45ba71SJames Collins foreach($html->find('h1, h2, h3, h4, h5') as $elm) { 1111*ab45ba71SJames Collins preg_match_all('/<(.*)>/iU', $elm->innertext, $matches); 1112*ab45ba71SJames Collins if(count($matches) >= 2 && (count($matches[0]) == count($matches[1]))) { 1113*ab45ba71SJames Collins for($i = 0; $i < count($matches[0]); $i++) { 1114*ab45ba71SJames Collins $icon = ''; 1115*ab45ba71SJames Collins 1116*ab45ba71SJames Collins $class = explode(' ', $matches[1][$i]); 1117*ab45ba71SJames Collins if(count($class) >= 2) { 1118*ab45ba71SJames Collins $icon = '<i class="fa fa-' . $class[1] . '"></i>'; 1119*ab45ba71SJames Collins } 1120*ab45ba71SJames Collins 1121*ab45ba71SJames Collins $elm->innertext = str_ireplace($matches[0][$i], $icon, $elm->innertext); 1122*ab45ba71SJames Collins } 1123*ab45ba71SJames Collins } 1124*ab45ba71SJames Collins } 1125*ab45ba71SJames Collins 1126*ab45ba71SJames Collins // Tables 1127*ab45ba71SJames Collins foreach($html->find('table') as $elm) { 1128*ab45ba71SJames Collins $elm->class .= ' table-striped'; 1129*ab45ba71SJames Collins } 1130*ab45ba71SJames Collins 1131*ab45ba71SJames Collins // Tabs 1132*ab45ba71SJames Collins foreach($html->find('ul.tabs') as $tabs) { 1133*ab45ba71SJames Collins $tabs->class = 'nav nav-tabs'; 1134*ab45ba71SJames Collins foreach($tabs->find('li') as $tab) { 1135*ab45ba71SJames Collins $tab->class .= ' nav-item'; 1136*ab45ba71SJames Collins 1137*ab45ba71SJames Collins foreach($tab->find('a') as $link) { 1138*ab45ba71SJames Collins if(stripos($tab->class, 'active') !== FALSE) { 1139*ab45ba71SJames Collins $link->class .= 'active'; 1140*ab45ba71SJames Collins } 1141*ab45ba71SJames Collins 1142*ab45ba71SJames Collins $link->class .= ' nav-link'; 1143*ab45ba71SJames Collins } 1144*ab45ba71SJames Collins } 1145*ab45ba71SJames Collins } 1146*ab45ba71SJames Collins 1147*ab45ba71SJames Collins // Toolbar 1148*ab45ba71SJames Collins foreach($html->find('.tool__bar') as $toolbar) { 1149*ab45ba71SJames Collins $toolbar->class .= ' btn-group'; 1150*ab45ba71SJames Collins } 1151*ab45ba71SJames Collins 1152*ab45ba71SJames Collins // Configuration Manager 1153*ab45ba71SJames Collins if($INPUT->str('page') == 'config') { 1154*ab45ba71SJames Collins 1155*ab45ba71SJames Collins // Additional save buttons 1156*ab45ba71SJames Collins foreach ($html->find('#config__manager') as $cm) { 1157*ab45ba71SJames Collins $saveButtons = ''; 1158*ab45ba71SJames Collins 1159*ab45ba71SJames Collins foreach($cm->find('p') as $elm) { 1160*ab45ba71SJames Collins $saveButtons = $elm->outertext; 1161*ab45ba71SJames Collins $elm->outertext = ''; 1162*ab45ba71SJames Collins } 1163*ab45ba71SJames Collins 1164*ab45ba71SJames Collins foreach($cm->find('fieldset') as $elm) { 1165*ab45ba71SJames Collins $elm->innertext .= $saveButtons; 1166*ab45ba71SJames Collins } 1167*ab45ba71SJames Collins } 1168*ab45ba71SJames Collins 1169*ab45ba71SJames Collins } 1170*ab45ba71SJames Collins 1171*ab45ba71SJames Collins $content = $html->save(); 1172c165b184SJames Collins $html->clear(); 1173c165b184SJames Collins unset($html); 1174c165b184SJames Collins 1175*ab45ba71SJames Collins // Remove icons 1176*ab45ba71SJames Collins // $content = preg_replace('/<icon .*>[ +]/', '', $content); 1177*ab45ba71SJames Collins $content = $this->includeIcons($content); 1178*ab45ba71SJames Collins 1179c165b184SJames Collins return $content; 1180c165b184SJames Collins } 11812b4583abSJames Collins 11822b4583abSJames Collins 11832b4583abSJames Collins /*** GET LINK ***/ 11842b4583abSJames Collins public function getLink($str) { 11852b4583abSJames Collins $i = strpos($str, '://'); 11862b4583abSJames Collins if($i !== false) return $str; 11872b4583abSJames Collins 11882b4583abSJames Collins return wl($str); 11892b4583abSJames Collins } 1190*ab45ba71SJames Collins 1191*ab45ba71SJames Collins 1192*ab45ba71SJames Collins public function userCanEdit() { 1193*ab45ba71SJames Collins global $INFO; 1194*ab45ba71SJames Collins global $ID; 1195*ab45ba71SJames Collins 1196*ab45ba71SJames Collins $wiki_file = wikiFN($ID); 1197*ab45ba71SJames Collins if (@!file_exists($wiki_file)) return true; 1198*ab45ba71SJames Collins if ($INFO['isadmin'] || $INFO['ismanager']) return true; 1199*ab45ba71SJames Collins $meta_file = metaFN($ID, '.meta'); 1200*ab45ba71SJames Collins if (!$INFO['meta']['user']) return true; 1201*ab45ba71SJames Collins if ($INFO['client'] == $INFO['meta']['user']) return true; 1202*ab45ba71SJames Collins 1203*ab45ba71SJames Collins return false; 1204c165b184SJames Collins } 120547161538SJames Collins 120647161538SJames Collins 1207*ab45ba71SJames Collins public function getMediaFile($image) { 1208*ab45ba71SJames Collins global $INFO; 1209*ab45ba71SJames Collins $prefix = array(':'.$INFO['namespace'].':', ':', ':wiki:'); 1210*ab45ba71SJames Collins $ext = array('png', 'jpg', 'gif', 'svg'); 1211*ab45ba71SJames Collins 1212*ab45ba71SJames Collins $prefix[] = ':'.$INFO['namespace'].':'; 1213*ab45ba71SJames Collins $prefix[] = ':'; 1214*ab45ba71SJames Collins $prefix[] = ':wiki:'; 1215*ab45ba71SJames Collins $theme = $this->getConf('customTheme'); 1216*ab45ba71SJames Collins if($theme != '') $prefix[] = $this->tplDir . 'themes/' . $theme . '/images/'; 1217*ab45ba71SJames Collins $prefix[] = 'images/'; 1218*ab45ba71SJames Collins 1219*ab45ba71SJames Collins $search = array(); 1220*ab45ba71SJames Collins foreach($prefix as $pitem) { 1221*ab45ba71SJames Collins foreach($ext as $eitem) { 1222*ab45ba71SJames Collins $search[] = $pitem . $image . '.' . $eitem; 1223*ab45ba71SJames Collins } 1224*ab45ba71SJames Collins } 1225*ab45ba71SJames Collins 1226*ab45ba71SJames Collins $img = ''; 1227*ab45ba71SJames Collins $file = ''; 1228*ab45ba71SJames Collins $url = ''; 1229*ab45ba71SJames Collins $ismedia = false; 1230*ab45ba71SJames Collins $found = false; 1231*ab45ba71SJames Collins 1232*ab45ba71SJames Collins foreach($search as $img) { 1233*ab45ba71SJames Collins if(substr($img, 0, 1) == ':') { 1234*ab45ba71SJames Collins $file = mediaFN($img); 1235*ab45ba71SJames Collins $ismedia = true; 1236*ab45ba71SJames Collins } else { 1237*ab45ba71SJames Collins $file = tpl_incdir().$img; 1238*ab45ba71SJames Collins $ismedia = false; 1239*ab45ba71SJames Collins } 1240*ab45ba71SJames Collins 1241*ab45ba71SJames Collins if(file_exists($file)) { 1242*ab45ba71SJames Collins $found = true; 1243*ab45ba71SJames Collins break; 1244*ab45ba71SJames Collins } 1245*ab45ba71SJames Collins } 1246*ab45ba71SJames Collins 1247*ab45ba71SJames Collins if(!$found) return false; 1248*ab45ba71SJames Collins 1249*ab45ba71SJames Collins if($ismedia) { 1250*ab45ba71SJames Collins $url = ml($img, '', true, '', false); 1251*ab45ba71SJames Collins } else { 1252*ab45ba71SJames Collins $url = tpl_basedir().$img; 1253*ab45ba71SJames Collins } 1254*ab45ba71SJames Collins 1255*ab45ba71SJames Collins return $url; 1256*ab45ba71SJames Collins } 1257*ab45ba71SJames Collins 1258*ab45ba71SJames Collins /** ---- 1259*ab45ba71SJames Collins * Print or return the page title 1260*ab45ba71SJames Collins * 1261*ab45ba71SJames Collins * @param string $page page id or empty string for current page 1262*ab45ba71SJames Collins * @param boolean $print print the generated content to the output buffer 1263*ab45ba71SJames Collins * 1264*ab45ba71SJames Collins * @return string generated content 1265*ab45ba71SJames Collins */ 1266*ab45ba71SJames Collins public function includePageTitle($page = '', $print = TRUE) { 1267*ab45ba71SJames Collins global $ID, $conf; 1268*ab45ba71SJames Collins 1269*ab45ba71SJames Collins $html = ''; 1270*ab45ba71SJames Collins 1271*ab45ba71SJames Collins if($page == '') $page = $ID; 1272*ab45ba71SJames Collins 1273*ab45ba71SJames Collins $html = p_get_first_heading($page); 1274*ab45ba71SJames Collins $html = strip_tags($html); 1275*ab45ba71SJames Collins $html = preg_replace('/\s+/', ' ', $html); 1276*ab45ba71SJames Collins $html .= ' [' . strip_tags($conf['title']) . ']'; 1277*ab45ba71SJames Collins $html = trim($html); 1278*ab45ba71SJames Collins 1279*ab45ba71SJames Collins if($print) echo $html; 1280*ab45ba71SJames Collins return $html; 1281*ab45ba71SJames Collins } 1282*ab45ba71SJames Collins} 1283*ab45ba71SJames Collins 1284*ab45ba71SJames Collins 1285*ab45ba71SJames Collins 1286*ab45ba71SJames Collinsglobal $TEMPLATE; 128747161538SJames Collins$TEMPLATE = \dokuwiki\template\mikio\Template::getInstance(); 1288