117e6d639SJames Collins<?php 200ce90d5SJames Collins 317e6d639SJames Collins/** 417e6d639SJames Collins * Mikio Plugin 517e6d639SJames Collins * 63deaf3a5SJames Collins * @version 1.0 73deaf3a5SJames Collins * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 817e6d639SJames Collins * @author James Collins <james.collins@outlook.com.au> 917e6d639SJames Collins */ 1017e6d639SJames Collins 1117e6d639SJames Collinsif (!defined('DOKU_INC')) die(); 1217e6d639SJames Collins 137935713eSJames Collinsrequire_once('icons/icons.php'); 147935713eSJames Collins 15dc121371SJames Collinsif (!function_exists('glob_recursive')) { 1600ce90d5SJames Collins function glob_recursive($pattern, $flags = 0) 1700ce90d5SJames Collins { 18dc121371SJames Collins $files = glob($pattern, $flags); 19dc121371SJames Collins foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) { 20dc121371SJames Collins $files = array_merge($files, glob_recursive($dir . '/' . basename($pattern), $flags)); 21dc121371SJames Collins } 22dc121371SJames Collins return $files; 23dc121371SJames Collins } 24dc121371SJames Collins} 25dc121371SJames Collins 2600ce90d5SJames Collinsclass action_plugin_mikioplugin extends DokuWiki_Action_Plugin 2700ce90d5SJames Collins{ 2800ce90d5SJames Collins public function register(Doku_Event_Handler $controller) 2900ce90d5SJames Collins { 3017e6d639SJames Collins $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_load'); 3117e6d639SJames Collins } 3217e6d639SJames Collins 3300ce90d5SJames Collins public function _load(Doku_Event $event, $param) 3400ce90d5SJames Collins { 3517e6d639SJames Collins global $conf; 367935713eSJames Collins global $MIKIO_ICONS; 373deaf3a5SJames Collins 3891d1557bSJames Collins $baseDir = str_replace('\\', '/', DOKU_BASE . 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/'); 393deaf3a5SJames Collins $stylesheets = []; 40dc121371SJames Collins $less = []; 413deaf3a5SJames Collins $scripts = []; 423deaf3a5SJames Collins 437935713eSJames Collins if (is_array($MIKIO_ICONS)) { 4400ce90d5SJames Collins $icons = array(); 457935713eSJames Collins foreach ($MIKIO_ICONS as $icon) { 467935713eSJames Collins if (isset($icon['name']) && isset($icon['css']) && isset($icon['insert'])) { 477935713eSJames Collins $icons[] = $icon; 483deaf3a5SJames Collins 497935713eSJames Collins if ($icon['css'] != '') { 507935713eSJames Collins if (strpos($icon['css'], '//') === FALSE) { 517935713eSJames Collins $stylesheets[] = $baseDir . 'icons/' . $icon['css']; 527935713eSJames Collins } else { 537935713eSJames Collins $stylesheets[] = $icon['css']; 5417e6d639SJames Collins } 5517e6d639SJames Collins } 567935713eSJames Collins } 577935713eSJames Collins } 587935713eSJames Collins $MIKIO_ICONS = $icons; 597935713eSJames Collins } else { 607935713eSJames Collins $MIKIO_ICONS = []; 617935713eSJames Collins } 6217e6d639SJames Collins 6391d1557bSJames Collins $stylesList = glob_recursive(str_replace('\\', '/', 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/styles/*')); 64dc121371SJames Collins if ($stylesList !== FALSE) { 65dc121371SJames Collins foreach ($stylesList as $value) { 66dc121371SJames Collins $filename = strtolower($value); 6751890c1cSnomadjimbob if (substr($filename, -5) == '.less' || substr($filename, -4) == '.css') { 68dc121371SJames Collins $stylesheets[] = '/' . $filename; 69dc121371SJames Collins } 70dc121371SJames Collins } 71dc121371SJames Collins } 72dc121371SJames Collins 73dc121371SJames Collins $stylesheets = array_unique($stylesheets); 74dc121371SJames Collins 75*d273c192Snomadjimbob array_unshift($stylesheets, '/assets/variables.css'); 76*d273c192Snomadjimbob if($conf['template'] === 'mikio' && file_exists(tpl_incdir() . 'template.info.txt')) { 77*d273c192Snomadjimbob $tpl_supported = false; 78*d273c192Snomadjimbob $tpl_info = []; 79*d273c192Snomadjimbob $tpl_data = file_get_contents(tpl_incdir() . 'template.info.txt'); 80*d273c192Snomadjimbob foreach(preg_split("/(\r\n|\n|\r)/", $tpl_data) as $line){ 81*d273c192Snomadjimbob if(preg_match("/([a-z]*)\s+(.*)/", $line, $matches)) { 82*d273c192Snomadjimbob $tpl_info[$matches[1]] = $matches[2]; 83*d273c192Snomadjimbob } 84*d273c192Snomadjimbob } 85*d273c192Snomadjimbob 86*d273c192Snomadjimbob if(array_key_exists('date', $tpl_info)) { 87*d273c192Snomadjimbob $date = array_map('intval', explode('-', $tpl_info['date'])); 88*d273c192Snomadjimbob if(count($date) === 3) { 89*d273c192Snomadjimbob // Date of mikio template is > 2022-10-12 90*d273c192Snomadjimbob if($date[0] > 2022 || ($date[0] == 2022 && ($date[1] > 10 || ($date[1] == 10 && $date[2] > 12)))) { 91*d273c192Snomadjimbob $tpl_supported = true; 92*d273c192Snomadjimbob } 93*d273c192Snomadjimbob } 94*d273c192Snomadjimbob } 95*d273c192Snomadjimbob 96*d273c192Snomadjimbob if($tpl_supported === true && ($key = array_search('/assets/variables.css', $stylesheets)) !== false) { 97*d273c192Snomadjimbob unset($stylesheets[$key]); 98*d273c192Snomadjimbob } 99*d273c192Snomadjimbob } 100*d273c192Snomadjimbob 101*d273c192Snomadjimbob array_unshift($stylesheets, '/assets/plugin.css'); 102*d273c192Snomadjimbob 103dc121371SJames Collins // css 1043deaf3a5SJames Collins foreach ($stylesheets as $style) { 105dc121371SJames Collins if (strtolower(substr($style, -5)) == '.less') { 106dc121371SJames Collins $less[] = $style; 107dc121371SJames Collins } else { 1083deaf3a5SJames Collins array_unshift($event->data['link'], array( 1093deaf3a5SJames Collins 'type' => 'text/css', 1103deaf3a5SJames Collins 'rel' => 'stylesheet', 1113deaf3a5SJames Collins 'href' => $style 1123deaf3a5SJames Collins )); 1133deaf3a5SJames Collins } 114dc121371SJames Collins } 11517e6d639SJames Collins 116dc121371SJames Collins $lessSorted = []; 117dc121371SJames Collins foreach ($less as $key => $value) { 118dc121371SJames Collins if (substr(strtolower($value), -14) == 'variables.less') { 119dc121371SJames Collins $lessSorted[] = $value; 120dc121371SJames Collins unset($less[$key]); 121dc121371SJames Collins } 122dc121371SJames Collins } 123dc121371SJames Collins 124dc121371SJames Collins $lessSorted = array_merge($lessSorted, $less); 125dc121371SJames Collins $lessPath = implode(',', $lessSorted); 126dc121371SJames Collins 127dc121371SJames Collins array_unshift($event->data['link'], array( 128dc121371SJames Collins 'type' => 'text/css', 129dc121371SJames Collins 'rel' => 'stylesheet', 130dc121371SJames Collins 'href' => $baseDir . 'css.php?css=' . str_replace($baseDir, '', $lessPath) 131dc121371SJames Collins )); 132dc121371SJames Collins 133dc121371SJames Collins // js 1343deaf3a5SJames Collins foreach ($scripts as $script) { 1353deaf3a5SJames Collins $event->data['script'][] = array( 1363deaf3a5SJames Collins 'type' => 'text/javascript', 1373deaf3a5SJames Collins '_data' => '', 1383deaf3a5SJames Collins 'src' => $script 1393deaf3a5SJames Collins ); 1403deaf3a5SJames Collins } 1413deaf3a5SJames Collins } 1423deaf3a5SJames Collins} 143