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
11global $updateVersion;
12$dokuwiki_version = floatval($updateVersion);
13
14define('DOKU_VERSION', $dokuwiki_version);
15define('DOKU_VERSION_HOGFATHER',          51); // 2020-07-29
16define('DOKU_VERSION_GREEBO',             50); // 2018-04-22 (PHP >= 5.6)
17define('DOKU_VERSION_FRUSTERICK_MANNERS', 49); // 2017-02-19 (PHP >= 5.4 ???)
18define('DOKU_VERSION_ELENOR_OF_TSORT',    48); // 2016-06-26
19define('DOKU_VERSION_DETRITUS',           47); // 2015-08-10 (PHP >= 5.3.3)
20
21
22// Load compatibility Menu classes for pre-Greebo releases
23if (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
58if (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 */
70if (!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 */
109if (!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            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 */
134if (!function_exists('tpl_classes')) {
135
136    function tpl_classes()
137    {
138        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 */
157if (!function_exists('plugin_getRequestAdminPlugin')) {
158
159    function plugin_getRequestAdminPlugin()
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}
185