xref: /template/mikio/css.php (revision bad3cd1d0da2f281895dc9643b2d2a1457e1c6ce)
1<?php
2/**
3 * Mikio CSS/LESS Engine
4 *
5 * @link    http://dokuwiki.org/template:mikio
6 * @author  James Collins <james.collins@outlook.com.au>
7 * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html)
8 */
9
10require(dirname(__FILE__) . '/inc/polyfill-ctype.php');
11
12if(!function_exists('getallheaders')) {
13	function getallheaders() {
14		$headers = [];
15		foreach($_SERVER as $name => $value) {
16			if(substr($name, 0, 5) == 'HTTP_') {
17				$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
18			}
19		}
20		return $headers;
21	}
22}
23
24if(!function_exists('platformSlashes')) {
25	function platformSlashes($path) {
26		return str_replace('/', DIRECTORY_SEPARATOR, $path);
27	}
28}
29
30try {
31    $lesscLib = platformSlashes('../../../vendor/marcusschwarz/lesserphp/lessc.inc.php');
32    if(!file_exists($lesscLib))
33        $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php');
34    if(!file_exists($lesscLib))
35        $lesscLib = platformSlashes('../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php');
36    if(!file_exists($lesscLib))
37        $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php');
38
39    if(file_exists($lesscLib)) {
40        @require_once($lesscLib);
41
42        if(isset($_GET['css'])) {
43            $baseDir = platformSlashes(dirname(__FILE__) . '/');
44            $cssFile = platformSlashes(realpath($baseDir . $_GET['css']));
45
46            if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
47                $rawVars = Array();
48                $file = 'style.ini';
49                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
50
51                $file = platformSlashes('../../../conf/tpl/mikio/style.ini');
52                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
53
54                $file = ($_SERVER['DOCUMENT_ROOT'] . '/conf/tpl/mikio/style.ini');
55                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
56
57                $css = file_get_contents($cssFile);
58
59                header('Content-Type: text/css; charset=utf-8');
60
61                $less = new lessc();
62                $less->setPreserveComments(false);
63
64                $vars = Array();
65                if(isset($rawVars['replacements'])) {
66                    foreach($rawVars['replacements'] as $key=>$val) {
67                        if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
68                            $vars['ini_' . substr($key, 2, -2)] = $val;
69                        }
70                    }
71                }
72
73                if(count($vars) > 0) {
74                    $less->setVariables($vars);
75                }
76
77                $css = $less->compile($css);
78                echo $css;
79            } else {
80                header('HTTP/1.1 404 Not Found');
81                echo "The requested file could not be found";
82            }
83        } else {
84            header('HTTP/1.1 404 Not Found');
85            echo "The requested file could not be found";
86        }
87    } else {
88        throw new Exception('Mikio could not find the LESSC engine in DokuWiki');
89    }
90}
91catch(Exception $e) {
92    header('Content-Type: text/css; charset=utf-8');
93    include(dirname(__FILE__) . '/assets/mikio.css');
94}
95