xref: /plugin/mikioplugin/css.php (revision 2393fff5e9ba3fd9fb7ba9e577bdc42f00e7cc3d)
1*2393fff5SJames Collins<?php
2*2393fff5SJames Collins/**
3*2393fff5SJames Collins * MikioPlugin CSS/LESS Engine
4*2393fff5SJames Collins *
5*2393fff5SJames Collins * @link    http://dokuwiki.org/plugin:mikioplugin
6*2393fff5SJames Collins * @author  James Collins <james.collins@outlook.com.au>
7*2393fff5SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html)
8*2393fff5SJames Collins */
9*2393fff5SJames Collins
10*2393fff5SJames Collinsif(!function_exists('getallheaders')) {
11*2393fff5SJames Collins	function getallheaders() {
12*2393fff5SJames Collins		$headers = [];
13*2393fff5SJames Collins		foreach($_SERVER as $name => $value) {
14*2393fff5SJames Collins			if(substr($name, 0, 5) == 'HTTP_') {
15*2393fff5SJames Collins				$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
16*2393fff5SJames Collins			}
17*2393fff5SJames Collins		}
18*2393fff5SJames Collins		return $headers;
19*2393fff5SJames Collins	}
20*2393fff5SJames Collins}
21*2393fff5SJames Collins
22*2393fff5SJames Collinsif(!function_exists('ctype_alnum')) {
23*2393fff5SJames Collins    function ctype_alnum($var) {
24*2393fff5SJames Collins        return preg_match('/^[a-zA-Z0-9]+$/', $var);
25*2393fff5SJames Collins    }
26*2393fff5SJames Collins}
27*2393fff5SJames Collins
28*2393fff5SJames Collinsif(!function_exists('ctype_alpha')) {
29*2393fff5SJames Collins    function ctype_alpha($var) {
30*2393fff5SJames Collins        return preg_match('/^[a-zA-Z]+$/', $var);
31*2393fff5SJames Collins    }
32*2393fff5SJames Collins}
33*2393fff5SJames Collins
34*2393fff5SJames Collinsif(!function_exists('ctype_cntrl')) {
35*2393fff5SJames Collins    function ctype_cntrl($var) {
36*2393fff5SJames Collins        return preg_match('/^[\x00-\x1F\x7F]+$/', $var);
37*2393fff5SJames Collins    }
38*2393fff5SJames Collins}
39*2393fff5SJames Collins
40*2393fff5SJames Collinsif(!function_exists('ctype_digit')) {
41*2393fff5SJames Collins    function ctype_digit($var) {
42*2393fff5SJames Collins        return preg_match('/^[0-9]+$/', $var);
43*2393fff5SJames Collins    }
44*2393fff5SJames Collins}
45*2393fff5SJames Collins
46*2393fff5SJames Collinsif(!function_exists('ctype_graph')) {
47*2393fff5SJames Collins    function ctype_graph($var) {
48*2393fff5SJames Collins        return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var);
49*2393fff5SJames Collins    }
50*2393fff5SJames Collins}
51*2393fff5SJames Collins
52*2393fff5SJames Collinsif(!function_exists('ctype_lower')) {
53*2393fff5SJames Collins    function ctype_lower($var) {
54*2393fff5SJames Collins        return preg_match('/^[a-z]+$/', $var);
55*2393fff5SJames Collins    }
56*2393fff5SJames Collins}
57*2393fff5SJames Collins
58*2393fff5SJames Collinsif(!function_exists('ctype_print')) {
59*2393fff5SJames Collins    function ctype_print($var) {
60*2393fff5SJames Collins        return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var);
61*2393fff5SJames Collins    }
62*2393fff5SJames Collins}
63*2393fff5SJames Collins
64*2393fff5SJames Collinsif(!function_exists('ctype_punct')) {
65*2393fff5SJames Collins    function ctype_punct($var) {
66*2393fff5SJames Collins        return preg_match('/^[^\w\s]+$/', $var);
67*2393fff5SJames Collins    }
68*2393fff5SJames Collins}
69*2393fff5SJames Collins
70*2393fff5SJames Collinsif(!function_exists('ctype_space')) {
71*2393fff5SJames Collins    function ctype_space($var) {
72*2393fff5SJames Collins        return preg_match('/^[\r\t\n]+$/', $var);
73*2393fff5SJames Collins    }
74*2393fff5SJames Collins}
75*2393fff5SJames Collins
76*2393fff5SJames Collinsif(!function_exists('ctype_upper')) {
77*2393fff5SJames Collins    function ctype_upper($var) {
78*2393fff5SJames Collins        return preg_match('/^[A-Z]+$/', $var);
79*2393fff5SJames Collins    }
80*2393fff5SJames Collins}
81*2393fff5SJames Collins
82*2393fff5SJames Collinsif(!function_exists('ctype_xdigit')) {
83*2393fff5SJames Collins    function ctype_upper($var) {
84*2393fff5SJames Collins        return preg_match('/^[0-9A-Fa-f]+$/', $var);
85*2393fff5SJames Collins    }
86*2393fff5SJames Collins}
87*2393fff5SJames Collins
88*2393fff5SJames Collinstry {
89*2393fff5SJames Collins    if(!function_exists('ctype_digit')) {
90*2393fff5SJames Collins        if(isset($_GET['css'])) {
91*2393fff5SJames Collins            $baseDir = dirname(__FILE__) . '/';
92*2393fff5SJames Collins            $cssFile = realpath($baseDir . $_GET['css']);
93*2393fff5SJames Collins            if(strtolower(substr($cssFile, -5)) == '.less') {
94*2393fff5SJames Collins                $cssFile = substr($cssFile, 0, -5) . '.css';
95*2393fff5SJames Collins                if(file_exists($cssFile)) {
96*2393fff5SJames Collins                    echo file_get_contents($cssFile);
97*2393fff5SJames Collins                    exit;
98*2393fff5SJames Collins                }
99*2393fff5SJames Collins            }
100*2393fff5SJames Collins        }
101*2393fff5SJames Collins
102*2393fff5SJames Collins        throw new Exception('ctype extension not installed');
103*2393fff5SJames Collins    }
104*2393fff5SJames Collins
105*2393fff5SJames Collins    $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php';
106*2393fff5SJames Collins    if(!file_exists($lesscLib))
107*2393fff5SJames Collins        $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
108*2393fff5SJames Collins
109*2393fff5SJames Collins    if(file_exists($lesscLib)) {
110*2393fff5SJames Collins        @require_once($lesscLib);
111*2393fff5SJames Collins
112*2393fff5SJames Collins        if(isset($_GET['css'])) {
113*2393fff5SJames Collins            $baseDir = dirname(__FILE__) . '/';
114*2393fff5SJames Collins            $cssFile = realpath($baseDir . $_GET['css']);
115*2393fff5SJames Collins
116*2393fff5SJames Collins            if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
117*2393fff5SJames Collins                $rawVars = Array();
118*2393fff5SJames Collins                $file = 'style.ini';
119*2393fff5SJames Collins                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
120*2393fff5SJames Collins
121*2393fff5SJames Collins                $file = '../../../conf/tpl/mikio/style.ini';
122*2393fff5SJames Collins                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
123*2393fff5SJames Collins
124*2393fff5SJames Collins                $css = file_get_contents($cssFile);
125*2393fff5SJames Collins
126*2393fff5SJames Collins                header('Content-Type: text/css; charset=utf-8');
127*2393fff5SJames Collins
128*2393fff5SJames Collins                $less = new lessc();
129*2393fff5SJames Collins                $less->setPreserveComments(false);
130*2393fff5SJames Collins
131*2393fff5SJames Collins                $vars = Array();
132*2393fff5SJames Collins                if(isset($rawVars['replacements'])) {
133*2393fff5SJames Collins                    foreach($rawVars['replacements'] as $key=>$val) {
134*2393fff5SJames Collins                        if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
135*2393fff5SJames Collins                            $vars['ini_' . substr($key, 2, -2)] = $val;
136*2393fff5SJames Collins                        }
137*2393fff5SJames Collins                    }
138*2393fff5SJames Collins                }
139*2393fff5SJames Collins
140*2393fff5SJames Collins                if(count($vars) > 0) {
141*2393fff5SJames Collins                    $less->setVariables($vars);
142*2393fff5SJames Collins                }
143*2393fff5SJames Collins
144*2393fff5SJames Collins                $css = $less->compile($css);
145*2393fff5SJames Collins                echo $css;
146*2393fff5SJames Collins            } else {
147*2393fff5SJames Collins                header('HTTP/1.1 404 Not Found');
148*2393fff5SJames Collins                echo "The requested file could not be found";
149*2393fff5SJames Collins            }
150*2393fff5SJames Collins        } else {
151*2393fff5SJames Collins            header('HTTP/1.1 404 Not Found');
152*2393fff5SJames Collins            echo "The requested file could not be found";
153*2393fff5SJames Collins        }
154*2393fff5SJames Collins    } else {
155*2393fff5SJames Collins        throw new Exception('Lessc library not found');
156*2393fff5SJames Collins    }
157*2393fff5SJames Collins}
158*2393fff5SJames Collinscatch(Exception $e) {
159*2393fff5SJames Collins    header('HTTP/1.1 500 Internal Server Error');
160*2393fff5SJames Collins    echo $e;
161*2393fff5SJames Collins}
162