5.56KiB; PHP | 2020-08-26 15:35:48+02 | SLOC 147
1
<?php
2
3
/**
4
 * DokuWiki Bootstrap3 Template: Compatibility functions
5
 *
6
 * @link     http://dokuwiki.org/template:bootstrap3
7
 * @author   Giuseppe Di Terlizzi <giuseppe.diterlizzi@gmail.com>
8
 * @license  GPL 2 (http://www.gnu.org/licenses/gpl.html)
9
 */
10
11
global $updateVersion;
12
$dokuwiki_version = floatval($updateVersion);
13
14
define('DOKU_VERSION', $dokuwiki_version);
15
define('DOKU_VERSION_HOGFATHER',          51); // 2020-07-29
16
define('DOKU_VERSION_GREEBO',             50); // 2018-04-22 (PHP >= 5.6)
17
define('DOKU_VERSION_FRUSTERICK_MANNERS', 49); // 2017-02-19 (PHP >= 5.4 ???)
18
define('DOKU_VERSION_ELENOR_OF_TSORT',    48); // 2016-06-26␣
19
define('DOKU_VERSION_DETRITUS',           47); // 2015-08-10 (PHP >= 5.3.3)
20
21
22
// Load compatibility Menu classes for pre-Greebo releases
23
if (DOKU_VERSION < DOKU_VERSION_GREEBO) {
24
25
    define('DOKU_INC_COMPAT', realpath(dirname(__FILE__) . '/../') . '/');
26
27
    require DOKU_INC_COMPAT . "inc/Menu/MenuInterface.php";
28
    require DOKU_INC_COMPAT . "inc/Menu/AbstractMenu.php";
29
    require DOKU_INC_COMPAT . "inc/Menu/Item/AbstractItem.php";
30
31
    require DOKU_INC_COMPAT . "inc/Menu/UserMenu.php";
32
    require DOKU_INC_COMPAT . "inc/Menu/MobileMenu.php";
33
    require DOKU_INC_COMPAT . "inc/Menu/PageMenu.php";
34
    require DOKU_INC_COMPAT . "inc/Menu/SiteMenu.php";
35
    require DOKU_INC_COMPAT . "inc/Menu/DetailMenu.php";
36
37
    require DOKU_INC_COMPAT . "inc/Menu/Item/ImgBackto.php";
38
    require DOKU_INC_COMPAT . "inc/Menu/Item/Top.php";
39
    require DOKU_INC_COMPAT . "inc/Menu/Item/Edit.php";
40
    require DOKU_INC_COMPAT . "inc/Menu/Item/Profile.php";
41
    require DOKU_INC_COMPAT . "inc/Menu/Item/Revisions.php";
42
    require DOKU_INC_COMPAT . "inc/Menu/Item/Backlink.php";
43
    require DOKU_INC_COMPAT . "inc/Menu/Item/Back.php";
44
    require DOKU_INC_COMPAT . "inc/Menu/Item/Login.php";
45
    require DOKU_INC_COMPAT . "inc/Menu/Item/Index.php";
46
    require DOKU_INC_COMPAT . "inc/Menu/Item/Register.php";
47
    require DOKU_INC_COMPAT . "inc/Menu/Item/MediaManager.php";
48
    require DOKU_INC_COMPAT . "inc/Menu/Item/Subscribe.php";
49
    require DOKU_INC_COMPAT . "inc/Menu/Item/Recent.php";
50
    require DOKU_INC_COMPAT . "inc/Menu/Item/Media.php";
51
    require DOKU_INC_COMPAT . "inc/Menu/Item/Resendpwd.php";
52
    require DOKU_INC_COMPAT . "inc/Menu/Item/Admin.php";
53
    require DOKU_INC_COMPAT . "inc/Menu/Item/Revert.php";
54
55
}
56
57
// Load template class for previous "Frusterick Manners" (2017-02-19) releases
58
if (DOKU_VERSION < DOKU_VERSION_FRUSTERICK_MANNERS) {
59
60
    $tpl_incdir = tpl_incdir();
61
62
    require $tpl_incdir . 'Template.php';
63
    require $tpl_incdir . 'SVG.php';
64
65
}
66
67
/**
68
 * copied from core (available since Greebo)
69
 */
70
if (!function_exists('inlineSVG')) {
71
72
    function inlineSVG($file, $maxsize = 2048)
73
    {
74
        $file = trim($file);
75
        if ($file === '') {
76
            return false;
77
        }
78
79
        if (!file_exists($file)) {
80
            return false;
81
        }
82
83
        if (filesize($file) > $maxsize) {
84
            return false;
85
        }
86
87
        if (!is_readable($file)) {
88
            return false;
89
        }
90
91
        $content = file_get_contents($file);
92
        $content = preg_replace('/<!--.*?(-->)/s', '', $content); // comments
93
        $content = preg_replace('/<\?xml .*?\?>/i', '', $content); // xml header
94
        $content = preg_replace('/<!DOCTYPE .*?>/i', '', $content); // doc type
95
        $content = preg_replace('/>\s+</s', '><', $content); // newlines between tags
96
        $content = trim($content);
97
        if (substr($content, 0, 5) !== '<svg ') {
98
            return false;
99
        }
100
101
        return $content;
102
    }
103
104
}
105
106
/**
107
 * copied from core (available since Detritus)
108
 */
109
if (!function_exists('tpl_toolsevent')) {
110
111
    function tpl_toolsevent($toolsname, $items, $view = 'main')
112
    {
113
        $data = array(
114
            'view'  => $view,
115
            'items' => $items,
116
        );
117
118
        $hook = 'TEMPLATE_' . strtoupper($toolsname) . '_DISPLAY';
119
        $evt  = new Doku_Event($hook, $data);
120
121
        if ($evt->advise_before()) {
122 1
            foreach ($evt->data['items'] as $k => $html) {
123
                echo $html;
124
            }
125
        }
126
        $evt->advise_after();
127
    }
128
129
}
130
131
/**
132
 * copied from core (available since Binky)
133
 */
134
if (!function_exists('tpl_classes')) {
135
136 7
    function tpl_classes()
137
    {
138 1
        global $ACT, $conf, $ID, $INFO;
139
140
        $classes = array(
141
            'dokuwiki',
142
            'mode_' . $ACT,
143
            'tpl_' . $conf['template'],
144
            !empty($_SERVER['REMOTE_USER']) ? 'loggedIn' : '',
145
            $INFO['exists'] ? '' : 'notFound',
146
            ($ID == $conf['start']) ? 'home' : '',
147
        );
148
149
        return join(' ', $classes);
150
    }
151
152
}
153
154
/**
155
 * copied from core (available since Detritus)
156
 */
157
if (!function_exists('plugin_getRequestAdminPlugin')) {
158
159 5
    function plugin_getRequestAdminPlugin()
IfStatementAssignment Avoid assigning values to variables in if clauses and the like (line '39', column '165'). (kritika/PHPMD) Filter like this
CamelCaseVariableName The variable $admin_plugin is not named in camelCase. (kritika/PHPMD) Filter like this
Too many violations of this type for this file. The rest of the violations were hidden.
CamelCaseVariableName The variable $INFO is not named in camelCase. (kritika/PHPMD) Filter like this
CamelCaseVariableName The variable $INPUT is not named in camelCase. (kritika/PHPMD) Filter like this
CamelCaseVariableName The variable $ACT is not named in camelCase. (kritika/PHPMD) Filter like this
160
    {
161
        static $admin_plugin = false;
162
        global $ACT, $INPUT, $INFO;
163
164
        if ($admin_plugin === false) {
165
            if (($ACT == 'admin') && ($page = $INPUT->str('page', '', true)) != '') {
166
                $pluginlist = plugin_list('admin');
167
                if (in_array($page, $pluginlist)) {
168
                    // attempt to load the plugin
169
                    /** @var $admin_plugin DokuWiki_Admin_Plugin */
170
                    $admin_plugin = plugin_load('admin', $page);
171
                    // verify
172
                    if ($admin_plugin && $admin_plugin->forAdminOnly() && !$INFO['isadmin']) {
173
                        $admin_plugin = null;
174
                        $INPUT->remove('page');
175
                        msg('For admins only', -1);
176
                    }
177
                }
178
            }
179
        }
180
181
        return $admin_plugin;
182
    }
183
184
}