xref: /plugin/mikioplugin/action.php (revision fd0b763c6861a9e2b9df068e61f5ce938ab99469)
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
75d273c192Snomadjimbob    array_unshift($stylesheets, '/assets/variables.css');
76d273c192Snomadjimbob    if($conf['template'] === 'mikio' && file_exists(tpl_incdir() . 'template.info.txt')) {
77d273c192Snomadjimbob      $tpl_supported = false;
78d273c192Snomadjimbob      $tpl_info = [];
79d273c192Snomadjimbob      $tpl_data = file_get_contents(tpl_incdir() . 'template.info.txt');
80d273c192Snomadjimbob      foreach(preg_split("/(\r\n|\n|\r)/", $tpl_data) as $line){
81d273c192Snomadjimbob        if(preg_match("/([a-z]*)\s+(.*)/", $line, $matches)) {
82d273c192Snomadjimbob          $tpl_info[$matches[1]] = $matches[2];
83d273c192Snomadjimbob        }
84d273c192Snomadjimbob      }
85d273c192Snomadjimbob
86d273c192Snomadjimbob      if(array_key_exists('date', $tpl_info)) {
87d273c192Snomadjimbob        $date = array_map('intval', explode('-', $tpl_info['date']));
88d273c192Snomadjimbob        if(count($date) === 3) {
89d273c192Snomadjimbob          // Date of mikio template is > 2022-10-12
90d273c192Snomadjimbob          if($date[0] > 2022 || ($date[0] == 2022 && ($date[1] > 10 || ($date[1] == 10 && $date[2] > 12)))) {
91d273c192Snomadjimbob            $tpl_supported = true;
92d273c192Snomadjimbob          }
93d273c192Snomadjimbob        }
94d273c192Snomadjimbob      }
95d273c192Snomadjimbob
96d273c192Snomadjimbob      if($tpl_supported === true && ($key = array_search('/assets/variables.css', $stylesheets)) !== false) {
97d273c192Snomadjimbob        unset($stylesheets[$key]);
98d273c192Snomadjimbob      }
99d273c192Snomadjimbob    }
100d273c192Snomadjimbob
101d273c192Snomadjimbob    array_unshift($stylesheets, '/assets/plugin.css');
102d273c192Snomadjimbob
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
127*fd0b763cSnomadjimbob    if(strlen($lessPath) > 0) {
128dc121371SJames Collins      array_unshift($event->data['link'], array(
129dc121371SJames Collins        'type' => 'text/css',
130dc121371SJames Collins        'rel'  => 'stylesheet',
131dc121371SJames Collins        'href' => $baseDir . 'css.php?css=' . str_replace($baseDir, '', $lessPath)
132dc121371SJames Collins      ));
133*fd0b763cSnomadjimbob    }
134dc121371SJames Collins
135dc121371SJames Collins    // js
1363deaf3a5SJames Collins    foreach ($scripts as $script) {
1373deaf3a5SJames Collins      $event->data['script'][] = array(
1383deaf3a5SJames Collins        'type'  => 'text/javascript',
1393deaf3a5SJames Collins        '_data' => '',
1403deaf3a5SJames Collins        'src'   => $script
1413deaf3a5SJames Collins      );
1423deaf3a5SJames Collins    }
1433deaf3a5SJames Collins  }
1443deaf3a5SJames Collins}
145