xref: /plugin/mikioplugin/action.php (revision b007ca42f5dcac2e4da8e8ce8426ac9f91496844)
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
11*b007ca42SJames Collinsif (!defined('DOKU_INC')) { die();
12*b007ca42SJames Collins}
1317e6d639SJames Collins
14*b007ca42SJames Collinsrequire_once 'icons/icons.php';
15*b007ca42SJames 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'] != '') {
52*b007ca42SJames 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/*'));
66*b007ca42SJames 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
75dc121371SJames Collins        $stylesheets = array_unique($stylesheets);
76dc121371SJames Collins
77d273c192Snomadjimbob        $tpl_supported = false;
783a3eed7cSnomadjimbob        if($conf['template'] === 'mikio' && file_exists(tpl_incdir() . 'template.info.txt')) {
79d273c192Snomadjimbob            $tpl_info = [];
80d273c192Snomadjimbob            $tpl_data = file_get_contents(tpl_incdir() . 'template.info.txt');
81d273c192Snomadjimbob            foreach(preg_split("/(\r\n|\n|\r)/", $tpl_data) as $line){
82d273c192Snomadjimbob                if(preg_match("/([a-z]*)\s+(.*)/", $line, $matches)) {
83d273c192Snomadjimbob                    $tpl_info[$matches[1]] = $matches[2];
84d273c192Snomadjimbob                }
85d273c192Snomadjimbob            }
86d273c192Snomadjimbob
87d273c192Snomadjimbob            if(array_key_exists('date', $tpl_info)) {
88d273c192Snomadjimbob                $date = array_map('intval', explode('-', $tpl_info['date']));
89d273c192Snomadjimbob                if(count($date) === 3) {
90d273c192Snomadjimbob                    // Date of mikio template is > 2022-10-12
91d273c192Snomadjimbob                    if($date[0] > 2022 || ($date[0] == 2022 && ($date[1] > 10 || ($date[1] == 10 && $date[2] > 12)))) {
92d273c192Snomadjimbob                        $tpl_supported = true;
93d273c192Snomadjimbob                    }
94d273c192Snomadjimbob                }
95d273c192Snomadjimbob            }
96d273c192Snomadjimbob        }
97d273c192Snomadjimbob
98f187f861Snomadjimbob        if($tpl_supported == false) {
996c6465b5Snomadjimbob            array_unshift($stylesheets, $baseDir . 'assets/variables.css');
1003a3eed7cSnomadjimbob        }
1013a3eed7cSnomadjimbob
1029601f5f4Snomadjimbob        array_unshift($stylesheets, $baseDir . 'assets/styles.less');
103d273c192Snomadjimbob
104dc121371SJames Collins        // css
1053deaf3a5SJames Collins        foreach ($stylesheets as $style) {
106dc121371SJames Collins            if (strtolower(substr($style, -5)) == '.less') {
107dc121371SJames Collins                $less[] = $style;
108dc121371SJames Collins            } else {
109*b007ca42SJames Collins                array_unshift(
110*b007ca42SJames Collins                    $event->data['link'], array(
1113deaf3a5SJames Collins                    'type' => 'text/css',
1123deaf3a5SJames Collins                    'rel'  => 'stylesheet',
1136c6465b5Snomadjimbob                    'href' => $style
114*b007ca42SJames Collins                    )
115*b007ca42SJames Collins                );
1163deaf3a5SJames Collins            }
117dc121371SJames Collins        }
11817e6d639SJames Collins
1199601f5f4Snomadjimbob        $lessPath = implode(',', $less);
120dc121371SJames Collins
121fd0b763cSnomadjimbob        if(strlen($lessPath) > 0) {
122*b007ca42SJames Collins            array_unshift(
123*b007ca42SJames Collins                $event->data['link'], array(
124dc121371SJames Collins                'type' => 'text/css',
125dc121371SJames Collins                'rel'  => 'stylesheet',
126dc121371SJames Collins                'href' => $baseDir . 'css.php?css=' . str_replace($baseDir, '', $lessPath)
127*b007ca42SJames Collins                )
128*b007ca42SJames Collins            );
129fd0b763cSnomadjimbob        }
130dc121371SJames Collins
131dc121371SJames Collins        // js
1323deaf3a5SJames Collins        foreach ($scripts as $script) {
1333deaf3a5SJames Collins            $event->data['script'][] = array(
1343deaf3a5SJames Collins            'type'  => 'text/javascript',
1353deaf3a5SJames Collins            '_data' => '',
1363deaf3a5SJames Collins            'src'   => $script
1373deaf3a5SJames Collins            );
1383deaf3a5SJames Collins        }
1393deaf3a5SJames Collins    }
1403deaf3a5SJames Collins}
141