xref: /plugin/mikioplugin/action.php (revision 6a8ce132ee7f679af64d1f8610f000730ef93359)
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
11b007ca42SJames Collinsif (!defined('DOKU_INC')) { die();
12b007ca42SJames Collins}
1317e6d639SJames Collins
14b007ca42SJames Collinsrequire_once 'icons/icons.php';
15b007ca42SJames Collinsrequire_once dirname(__FILE__) . '/inc/polyfill-array-key-first.php';
167935713eSJames Collins
17dc121371SJames Collinsif (!function_exists('glob_recursive')) {
1800ce90d5SJames Collins    function glob_recursive($pattern, $flags = 0)
1900ce90d5SJames Collins    {
20dc121371SJames Collins        $files = glob($pattern, $flags);
21dc121371SJames Collins        foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
22dc121371SJames Collins            $files = array_merge($files, glob_recursive($dir . '/' . basename($pattern), $flags));
23dc121371SJames Collins        }
24dc121371SJames Collins        return $files;
25dc121371SJames Collins    }
26dc121371SJames Collins}
27dc121371SJames Collins
2800ce90d5SJames Collinsclass action_plugin_mikioplugin extends DokuWiki_Action_Plugin
2900ce90d5SJames Collins{
3000ce90d5SJames Collins    public function register(Doku_Event_Handler $controller)
3100ce90d5SJames Collins    {
3217e6d639SJames Collins        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_load');
3317e6d639SJames Collins    }
3417e6d639SJames Collins
3500ce90d5SJames Collins    public function _load(Doku_Event $event, $param)
3600ce90d5SJames Collins    {
3717e6d639SJames Collins        global $conf;
387935713eSJames Collins        global $MIKIO_ICONS;
393deaf3a5SJames Collins
4091d1557bSJames Collins        $baseDir = str_replace('\\', '/', DOKU_BASE . 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/');
413deaf3a5SJames Collins        $stylesheets = [];
42dc121371SJames Collins        $less = [];
433deaf3a5SJames Collins        $scripts = [];
443deaf3a5SJames Collins
457935713eSJames Collins        if (is_array($MIKIO_ICONS)) {
4600ce90d5SJames Collins            $icons = array();
477935713eSJames Collins            foreach ($MIKIO_ICONS as $icon) {
487935713eSJames Collins                if (isset($icon['name']) && isset($icon['css']) && isset($icon['insert'])) {
497935713eSJames Collins                    $icons[] = $icon;
503deaf3a5SJames Collins
517935713eSJames Collins                    if ($icon['css'] != '') {
52b007ca42SJames Collins                        if (strpos($icon['css'], '//') === false) {
537935713eSJames Collins                            $stylesheets[] = $baseDir . 'icons/' . $icon['css'];
547935713eSJames Collins                        } else {
557935713eSJames Collins                            $stylesheets[] = $icon['css'];
5617e6d639SJames Collins                        }
5717e6d639SJames Collins                    }
587935713eSJames Collins                }
597935713eSJames Collins            }
607935713eSJames Collins            $MIKIO_ICONS = $icons;
617935713eSJames Collins        } else {
627935713eSJames Collins            $MIKIO_ICONS = [];
637935713eSJames Collins        }
6417e6d639SJames Collins
6591d1557bSJames Collins        $stylesList = glob_recursive(str_replace('\\', '/', 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/styles/*'));
66b007ca42SJames Collins        if ($stylesList !== false) {
67dc121371SJames Collins            foreach ($stylesList as $value) {
68dc121371SJames Collins                $filename = strtolower($value);
6951890c1cSnomadjimbob                if (substr($filename, -5) == '.less' || substr($filename, -4) == '.css') {
706c6465b5Snomadjimbob                    $stylesheets[] = DOKU_BASE . $filename;
71dc121371SJames Collins                }
72dc121371SJames Collins            }
73dc121371SJames Collins        }
74dc121371SJames Collins
75*6a8ce132SJames Collins        $stylesheets[] = $baseDir . 'assets/variables.css';
76*6a8ce132SJames Collins
77dc121371SJames Collins        $stylesheets = array_unique($stylesheets);
78dc121371SJames Collins
79d273c192Snomadjimbob        $tpl_supported = false;
803a3eed7cSnomadjimbob        if($conf['template'] === 'mikio' && file_exists(tpl_incdir() . 'template.info.txt')) {
81d273c192Snomadjimbob            $tpl_info = [];
82d273c192Snomadjimbob            $tpl_data = file_get_contents(tpl_incdir() . 'template.info.txt');
83d273c192Snomadjimbob            foreach(preg_split("/(\r\n|\n|\r)/", $tpl_data) as $line){
84d273c192Snomadjimbob                if(preg_match("/([a-z]*)\s+(.*)/", $line, $matches)) {
85d273c192Snomadjimbob                    $tpl_info[$matches[1]] = $matches[2];
86d273c192Snomadjimbob                }
87d273c192Snomadjimbob            }
88d273c192Snomadjimbob
89d273c192Snomadjimbob            if(array_key_exists('date', $tpl_info)) {
90d273c192Snomadjimbob                $date = array_map('intval', explode('-', $tpl_info['date']));
91d273c192Snomadjimbob                if(count($date) === 3) {
92d273c192Snomadjimbob                    // Date of mikio template is > 2022-10-12
93d273c192Snomadjimbob                    if($date[0] > 2022 || ($date[0] == 2022 && ($date[1] > 10 || ($date[1] == 10 && $date[2] > 12)))) {
94d273c192Snomadjimbob                        $tpl_supported = true;
95d273c192Snomadjimbob                    }
96d273c192Snomadjimbob                }
97d273c192Snomadjimbob            }
98d273c192Snomadjimbob        }
99d273c192Snomadjimbob
100f187f861Snomadjimbob        if($tpl_supported == false) {
1016c6465b5Snomadjimbob            array_unshift($stylesheets, $baseDir . 'assets/variables.css');
1023a3eed7cSnomadjimbob        }
1033a3eed7cSnomadjimbob
1049601f5f4Snomadjimbob        array_unshift($stylesheets, $baseDir . 'assets/styles.less');
105d273c192Snomadjimbob
106dc121371SJames Collins        // css
1073deaf3a5SJames Collins        foreach ($stylesheets as $style) {
108dc121371SJames Collins            if (strtolower(substr($style, -5)) == '.less') {
109dc121371SJames Collins                $less[] = $style;
110dc121371SJames Collins            } else {
111b007ca42SJames Collins                array_unshift(
112b007ca42SJames Collins                    $event->data['link'], array(
1133deaf3a5SJames Collins                    'type' => 'text/css',
1143deaf3a5SJames Collins                    'rel'  => 'stylesheet',
1156c6465b5Snomadjimbob                    'href' => $style
116b007ca42SJames Collins                    )
117b007ca42SJames Collins                );
1183deaf3a5SJames Collins            }
119dc121371SJames Collins        }
12017e6d639SJames Collins
1219601f5f4Snomadjimbob        $lessPath = implode(',', $less);
122dc121371SJames Collins
123fd0b763cSnomadjimbob        if(strlen($lessPath) > 0) {
124b007ca42SJames Collins            array_unshift(
125b007ca42SJames Collins                $event->data['link'], array(
126dc121371SJames Collins                'type' => 'text/css',
127dc121371SJames Collins                'rel'  => 'stylesheet',
128dc121371SJames Collins                'href' => $baseDir . 'css.php?css=' . str_replace($baseDir, '', $lessPath)
129b007ca42SJames Collins                )
130b007ca42SJames Collins            );
131fd0b763cSnomadjimbob        }
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