xref: /template/mikio/css.php (revision e876e764b353e1af40252785b0f2ffea77e05a01)
1ab45ba71SJames Collins<?php
2ab45ba71SJames Collins/**
3a8eebd82SJames Collins * Mikio CSS/LESS Engine
4ab45ba71SJames Collins *
5ab45ba71SJames Collins * @link    http://dokuwiki.org/template:mikio
6ab45ba71SJames Collins * @author  James Collins <james.collins@outlook.com.au>
7ab45ba71SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html)
8ab45ba71SJames Collins */
9d24f6ec2SJames Collins
10d24f6ec2SJames Collinsif(!function_exists('getallheaders')) {
11d24f6ec2SJames Collins	function getallheaders() {
12d24f6ec2SJames Collins		$headers = [];
13d24f6ec2SJames Collins		foreach($_SERVER as $name => $value) {
14d24f6ec2SJames Collins			if(substr($name, 0, 5) == 'HTTP_') {
15d24f6ec2SJames Collins				$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
16d24f6ec2SJames Collins			}
17d24f6ec2SJames Collins		}
18d24f6ec2SJames Collins		return $headers;
19d24f6ec2SJames Collins	}
20d24f6ec2SJames Collins}
21d24f6ec2SJames Collins
22703d73e0SJames Collinsif(!function_exists('ctype_alnum')) {
23703d73e0SJames Collins    function ctype_alnum($var) {
24703d73e0SJames Collins        return preg_match('/^[a-zA-Z0-9]+$/', $var);
25703d73e0SJames Collins    }
26703d73e0SJames Collins}
27703d73e0SJames Collins
28703d73e0SJames Collinsif(!function_exists('ctype_alpha')) {
29703d73e0SJames Collins    function ctype_alpha($var) {
30703d73e0SJames Collins        return preg_match('/^[a-zA-Z]+$/', $var);
31703d73e0SJames Collins    }
32703d73e0SJames Collins}
33703d73e0SJames Collins
34703d73e0SJames Collinsif(!function_exists('ctype_cntrl')) {
35703d73e0SJames Collins    function ctype_cntrl($var) {
36703d73e0SJames Collins        return preg_match('/^[\x00-\x1F\x7F]+$/', $var);
37703d73e0SJames Collins    }
38703d73e0SJames Collins}
39703d73e0SJames Collins
40703d73e0SJames Collinsif(!function_exists('ctype_digit')) {
41703d73e0SJames Collins    function ctype_digit($var) {
42703d73e0SJames Collins        return preg_match('/^[0-9]+$/', $var);
43703d73e0SJames Collins    }
44703d73e0SJames Collins}
45703d73e0SJames Collins
46703d73e0SJames Collinsif(!function_exists('ctype_graph')) {
47703d73e0SJames Collins    function ctype_graph($var) {
48703d73e0SJames Collins        return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var);
49703d73e0SJames Collins    }
50703d73e0SJames Collins}
51703d73e0SJames Collins
52703d73e0SJames Collinsif(!function_exists('ctype_lower')) {
53703d73e0SJames Collins    function ctype_lower($var) {
54703d73e0SJames Collins        return preg_match('/^[a-z]+$/', $var);
55703d73e0SJames Collins    }
56703d73e0SJames Collins}
57703d73e0SJames Collins
58703d73e0SJames Collinsif(!function_exists('ctype_print')) {
59703d73e0SJames Collins    function ctype_print($var) {
60703d73e0SJames Collins        return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var);
61703d73e0SJames Collins    }
62703d73e0SJames Collins}
63703d73e0SJames Collins
64703d73e0SJames Collinsif(!function_exists('ctype_punct')) {
65703d73e0SJames Collins    function ctype_punct($var) {
66703d73e0SJames Collins        return preg_match('/^[^\w\s]+$/', $var);
67703d73e0SJames Collins    }
68703d73e0SJames Collins}
69703d73e0SJames Collins
70703d73e0SJames Collinsif(!function_exists('ctype_space')) {
71703d73e0SJames Collins    function ctype_space($var) {
72703d73e0SJames Collins        return preg_match('/^[\r\t\n]+$/', $var);
73703d73e0SJames Collins    }
74703d73e0SJames Collins}
75703d73e0SJames Collins
76703d73e0SJames Collinsif(!function_exists('ctype_upper')) {
77703d73e0SJames Collins    function ctype_upper($var) {
78703d73e0SJames Collins        return preg_match('/^[A-Z]+$/', $var);
79703d73e0SJames Collins    }
80703d73e0SJames Collins}
81703d73e0SJames Collins
82703d73e0SJames Collinsif(!function_exists('ctype_xdigit')) {
83703d73e0SJames Collins    function ctype_upper($var) {
84703d73e0SJames Collins        return preg_match('/^[0-9A-Fa-f]+$/', $var);
85703d73e0SJames Collins    }
86703d73e0SJames Collins}
87d24f6ec2SJames Collins
88ab45ba71SJames Collinstry {
8979f12da2SJames Collins    if(!function_exists('ctype_digit')) {
9029118ed7SJames Collins        if(isset($_GET['css'])) {
9129118ed7SJames Collins            $baseDir = dirname(__FILE__) . '/';
9229118ed7SJames Collins            $cssFile = realpath($baseDir . $_GET['css']);
9329118ed7SJames Collins            if(strtolower(substr($cssFile, -5)) == '.less') {
9429118ed7SJames Collins                $cssFile = substr($cssFile, 0, -5) . '.css';
9529118ed7SJames Collins                if(file_exists($cssFile)) {
9629118ed7SJames Collins                    echo file_get_contents($cssFile);
9729118ed7SJames Collins                    exit;
9829118ed7SJames Collins                }
9929118ed7SJames Collins            }
10029118ed7SJames Collins        }
10129118ed7SJames Collins
10229118ed7SJames Collins        throw new Exception('ctype extension not installed');
10329118ed7SJames Collins    }
10429118ed7SJames Collins
105ab45ba71SJames Collins    $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php';
10629118ed7SJames Collins    if(!file_exists($lesscLib))
10729118ed7SJames Collins        $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
10829118ed7SJames Collins
109ab45ba71SJames Collins    if(file_exists($lesscLib)) {
11079f12da2SJames Collins        @require_once($lesscLib);
111ab45ba71SJames Collins
112ab45ba71SJames Collins        if(isset($_GET['css'])) {
113ab45ba71SJames Collins            $baseDir = dirname(__FILE__) . '/';
114ab45ba71SJames Collins            $cssFile = realpath($baseDir . $_GET['css']);
115ab45ba71SJames Collins
116ab45ba71SJames Collins            if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
117*e876e764SJames Collins                $rawVars = Array();
118*e876e764SJames Collins                $file = 'style.ini';
119*e876e764SJames Collins                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
120ab45ba71SJames Collins
121*e876e764SJames Collins                $file = '../../../conf/tpl/mikio/style.ini';
122*e876e764SJames Collins                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
123ab45ba71SJames Collins
124ab45ba71SJames Collins                $css = file_get_contents($cssFile);
125ab45ba71SJames Collins
126*e876e764SJames Collins                header('Content-Type: text/css; charset=utf-8');
127*e876e764SJames Collins
128ab45ba71SJames Collins                $less = new lessc();
129ab45ba71SJames Collins                $less->setPreserveComments(false);
130a8eebd82SJames Collins
131a8eebd82SJames Collins                $vars = Array();
132a8eebd82SJames Collins                if(isset($rawVars['replacements'])) {
133a8eebd82SJames Collins                    foreach($rawVars['replacements'] as $key=>$val) {
134a8eebd82SJames Collins                        if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
135a8eebd82SJames Collins                            $vars['ini_' . substr($key, 2, -2)] = $val;
136a8eebd82SJames Collins                        }
137a8eebd82SJames Collins                    }
138a8eebd82SJames Collins                }
139a8eebd82SJames Collins
140a8eebd82SJames Collins                if(count($vars) > 0) {
141a8eebd82SJames Collins                    $less->setVariables($vars);
142a8eebd82SJames Collins                }
143a8eebd82SJames Collins
144ab45ba71SJames Collins                $css = $less->compile($css);
145ab45ba71SJames Collins                echo $css;
146ab45ba71SJames Collins            } else {
147ab45ba71SJames Collins                header('HTTP/1.1 404 Not Found');
148ab45ba71SJames Collins                echo "The requested file could not be found";
149ab45ba71SJames Collins            }
150ab45ba71SJames Collins        } else {
151ab45ba71SJames Collins            header('HTTP/1.1 404 Not Found');
152ab45ba71SJames Collins            echo "The requested file could not be found";
153ab45ba71SJames Collins        }
154ab45ba71SJames Collins    } else {
155ab45ba71SJames Collins        throw new Exception('Lessc library not found');
156ab45ba71SJames Collins    }
157ab45ba71SJames Collins}
158ab45ba71SJames Collinscatch(Exception $e) {
1591bdbd903SJames Collins    header('HTTP/1.1 500 Internal Server Error');
160a8eebd82SJames Collins    echo $e;
161a8eebd82SJames Collins}
162