xref: /plugin/mikioplugin/action.php (revision f51f4f12e7d8324d30279c7ca19d10c248b93c46)
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) {
22*f51f4f12SJames Collins            $subFiles = glob_recursive($dir . '/' . basename($pattern), $flags);
23*f51f4f12SJames Collins            foreach ($subFiles as $file) {
24*f51f4f12SJames Collins                $files[] = $file;
25*f51f4f12SJames Collins            }
26dc121371SJames Collins        }
27dc121371SJames Collins        return $files;
28dc121371SJames Collins    }
29dc121371SJames Collins}
30dc121371SJames Collins
3100ce90d5SJames Collinsclass action_plugin_mikioplugin extends DokuWiki_Action_Plugin
3200ce90d5SJames Collins{
3300ce90d5SJames Collins    public function register(Doku_Event_Handler $controller)
3400ce90d5SJames Collins    {
3517e6d639SJames Collins        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_load');
3617e6d639SJames Collins    }
3717e6d639SJames Collins
3800ce90d5SJames Collins    public function _load(Doku_Event $event, $param)
3900ce90d5SJames Collins    {
4017e6d639SJames Collins        global $conf;
417935713eSJames Collins        global $MIKIO_ICONS;
423deaf3a5SJames Collins
4391d1557bSJames Collins        $baseDir = str_replace('\\', '/', DOKU_BASE . 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/');
443deaf3a5SJames Collins        $stylesheets = [];
45dc121371SJames Collins        $less = [];
463deaf3a5SJames Collins        $scripts = [];
473deaf3a5SJames Collins
487935713eSJames Collins        if (is_array($MIKIO_ICONS)) {
4900ce90d5SJames Collins            $icons = array();
507935713eSJames Collins            foreach ($MIKIO_ICONS as $icon) {
517935713eSJames Collins                if (isset($icon['name']) && isset($icon['css']) && isset($icon['insert'])) {
527935713eSJames Collins                    $icons[] = $icon;
533deaf3a5SJames Collins
547935713eSJames Collins                    if ($icon['css'] != '') {
55b007ca42SJames Collins                        if (strpos($icon['css'], '//') === false) {
567935713eSJames Collins                            $stylesheets[] = $baseDir . 'icons/' . $icon['css'];
577935713eSJames Collins                        } else {
587935713eSJames Collins                            $stylesheets[] = $icon['css'];
5917e6d639SJames Collins                        }
6017e6d639SJames Collins                    }
617935713eSJames Collins                }
627935713eSJames Collins            }
637935713eSJames Collins            $MIKIO_ICONS = $icons;
647935713eSJames Collins        } else {
657935713eSJames Collins            $MIKIO_ICONS = [];
667935713eSJames Collins        }
6717e6d639SJames Collins
6891d1557bSJames Collins        $stylesList = glob_recursive(str_replace('\\', '/', 'lib/plugins' . str_replace(dirname(dirname(__FILE__)), '', dirname(__FILE__)) . '/styles/*'));
69b007ca42SJames Collins        if ($stylesList !== false) {
70dc121371SJames Collins            foreach ($stylesList as $value) {
71dc121371SJames Collins                $filename = strtolower($value);
7251890c1cSnomadjimbob                if (substr($filename, -5) == '.less' || substr($filename, -4) == '.css') {
736c6465b5Snomadjimbob                    $stylesheets[] = DOKU_BASE . $filename;
74dc121371SJames Collins                }
75dc121371SJames Collins            }
76dc121371SJames Collins        }
77dc121371SJames Collins
786a8ce132SJames Collins        $stylesheets[] = $baseDir . 'assets/variables.css';
796a8ce132SJames Collins
80dc121371SJames Collins        $stylesheets = array_unique($stylesheets);
81dc121371SJames Collins
82d273c192Snomadjimbob        $tpl_supported = false;
833a3eed7cSnomadjimbob        if($conf['template'] === 'mikio' && file_exists(tpl_incdir() . 'template.info.txt')) {
84d273c192Snomadjimbob            $tpl_info = [];
85d273c192Snomadjimbob            $tpl_data = file_get_contents(tpl_incdir() . 'template.info.txt');
86d273c192Snomadjimbob            foreach(preg_split("/(\r\n|\n|\r)/", $tpl_data) as $line){
87d273c192Snomadjimbob                if(preg_match("/([a-z]*)\s+(.*)/", $line, $matches)) {
88d273c192Snomadjimbob                    $tpl_info[$matches[1]] = $matches[2];
89d273c192Snomadjimbob                }
90d273c192Snomadjimbob            }
91d273c192Snomadjimbob
92d273c192Snomadjimbob            if(array_key_exists('date', $tpl_info)) {
93d273c192Snomadjimbob                $date = array_map('intval', explode('-', $tpl_info['date']));
94d273c192Snomadjimbob                if(count($date) === 3) {
95d273c192Snomadjimbob                    // Date of mikio template is > 2022-10-12
96d273c192Snomadjimbob                    if($date[0] > 2022 || ($date[0] == 2022 && ($date[1] > 10 || ($date[1] == 10 && $date[2] > 12)))) {
97d273c192Snomadjimbob                        $tpl_supported = true;
98d273c192Snomadjimbob                    }
99d273c192Snomadjimbob                }
100d273c192Snomadjimbob            }
101d273c192Snomadjimbob        }
102d273c192Snomadjimbob
103f187f861Snomadjimbob        if($tpl_supported == false) {
1046c6465b5Snomadjimbob            array_unshift($stylesheets, $baseDir . 'assets/variables.css');
1053a3eed7cSnomadjimbob        }
1063a3eed7cSnomadjimbob
1079601f5f4Snomadjimbob        array_unshift($stylesheets, $baseDir . 'assets/styles.less');
108d273c192Snomadjimbob
109dc121371SJames Collins        // css
1103deaf3a5SJames Collins        foreach ($stylesheets as $style) {
111dc121371SJames Collins            if (strtolower(substr($style, -5)) == '.less') {
112dc121371SJames Collins                $less[] = $style;
113dc121371SJames Collins            } else {
114b007ca42SJames Collins                array_unshift(
115b007ca42SJames Collins                    $event->data['link'], array(
1163deaf3a5SJames Collins                    'type' => 'text/css',
1173deaf3a5SJames Collins                    'rel'  => 'stylesheet',
1186c6465b5Snomadjimbob                    'href' => $style
119b007ca42SJames Collins                    )
120b007ca42SJames Collins                );
1213deaf3a5SJames Collins            }
122dc121371SJames Collins        }
12317e6d639SJames Collins
1249601f5f4Snomadjimbob        $lessPath = implode(',', $less);
125dc121371SJames Collins
126fd0b763cSnomadjimbob        if(strlen($lessPath) > 0) {
127b007ca42SJames Collins            array_unshift(
128b007ca42SJames Collins                $event->data['link'], array(
129dc121371SJames Collins                'type' => 'text/css',
130dc121371SJames Collins                'rel'  => 'stylesheet',
131dc121371SJames Collins                'href' => $baseDir . 'css.php?css=' . str_replace($baseDir, '', $lessPath)
132b007ca42SJames Collins                )
133b007ca42SJames Collins            );
134fd0b763cSnomadjimbob        }
135dc121371SJames Collins
136dc121371SJames Collins        // js
1373deaf3a5SJames Collins        foreach ($scripts as $script) {
1383deaf3a5SJames Collins            $event->data['script'][] = array(
1393deaf3a5SJames Collins            'type'  => 'text/javascript',
1403deaf3a5SJames Collins            '_data' => '',
1413deaf3a5SJames Collins            'src'   => $script
1423deaf3a5SJames Collins            );
1433deaf3a5SJames Collins        }
1443deaf3a5SJames Collins    }
1453deaf3a5SJames Collins}
146