xref: /template/mikio/css.php (revision fd3ef33af53c791f49e0143c3112e4e274fadaf7)
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
10692c64c6SJames Collinsrequire(dirname(__FILE__) . '/inc/polyfill-ctype.php');
11692c64c6SJames Collins
12d24f6ec2SJames Collinsif(!function_exists('getallheaders')) {
13d24f6ec2SJames Collins	function getallheaders() {
14d24f6ec2SJames Collins		$headers = [];
15d24f6ec2SJames Collins		foreach($_SERVER as $name => $value) {
16d24f6ec2SJames Collins			if(substr($name, 0, 5) == 'HTTP_') {
17d24f6ec2SJames Collins				$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
18d24f6ec2SJames Collins			}
19d24f6ec2SJames Collins		}
20d24f6ec2SJames Collins		return $headers;
21d24f6ec2SJames Collins	}
22d24f6ec2SJames Collins}
23d24f6ec2SJames Collins
24*fd3ef33aSJames Collinsif(!function_exists('platformSlashes')) {
25*fd3ef33aSJames Collins	function platformSlashes($path) {
26*fd3ef33aSJames Collins		return str_replace('/', DIRECTORY_SEPARATOR, $path);
27*fd3ef33aSJames Collins	}
28*fd3ef33aSJames Collins}
29*fd3ef33aSJames Collins
30ab45ba71SJames Collinstry {
31*fd3ef33aSJames Collins    $lesscLib = platformSlashes('../../../vendor/marcusschwarz/lesserphp/lessc.inc.php');
3229118ed7SJames Collins    if(!file_exists($lesscLib))
33*fd3ef33aSJames Collins        $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php');
34692c64c6SJames Collins    if(!file_exists($lesscLib))
35*fd3ef33aSJames Collins        $lesscLib = platformSlashes('../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php');
36692c64c6SJames Collins    if(!file_exists($lesscLib))
37*fd3ef33aSJames Collins        $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php');
3829118ed7SJames Collins
39ab45ba71SJames Collins    if(file_exists($lesscLib)) {
4079f12da2SJames Collins        @require_once($lesscLib);
41ab45ba71SJames Collins
42ab45ba71SJames Collins        if(isset($_GET['css'])) {
43*fd3ef33aSJames Collins            $baseDir = platformSlashes(dirname(__FILE__) . '/');
44*fd3ef33aSJames Collins            $cssFile = platformSlashes(realpath($baseDir . $_GET['css']));
45ab45ba71SJames Collins
46ab45ba71SJames Collins            if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
47e876e764SJames Collins                $rawVars = Array();
48e876e764SJames Collins                $file = 'style.ini';
49e876e764SJames Collins                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
50ab45ba71SJames Collins
51*fd3ef33aSJames Collins                $file = platformSlashes('../../../conf/tpl/mikio/style.ini');
52e876e764SJames Collins                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
53ab45ba71SJames Collins
54*fd3ef33aSJames Collins                $file = ($_SERVER['DOCUMENT_ROOT'] . '/conf/tpl/mikio/style.ini');
55692c64c6SJames Collins                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
56692c64c6SJames Collins
57ab45ba71SJames Collins                $css = file_get_contents($cssFile);
58ab45ba71SJames Collins
59e876e764SJames Collins                header('Content-Type: text/css; charset=utf-8');
60e876e764SJames Collins
61ab45ba71SJames Collins                $less = new lessc();
62ab45ba71SJames Collins                $less->setPreserveComments(false);
63a8eebd82SJames Collins
64a8eebd82SJames Collins                $vars = Array();
65a8eebd82SJames Collins                if(isset($rawVars['replacements'])) {
66a8eebd82SJames Collins                    foreach($rawVars['replacements'] as $key=>$val) {
67a8eebd82SJames Collins                        if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
68a8eebd82SJames Collins                            $vars['ini_' . substr($key, 2, -2)] = $val;
69a8eebd82SJames Collins                        }
70a8eebd82SJames Collins                    }
71a8eebd82SJames Collins                }
72a8eebd82SJames Collins
73a8eebd82SJames Collins                if(count($vars) > 0) {
74a8eebd82SJames Collins                    $less->setVariables($vars);
75a8eebd82SJames Collins                }
76a8eebd82SJames Collins
77ab45ba71SJames Collins                $css = $less->compile($css);
78ab45ba71SJames Collins                echo $css;
79ab45ba71SJames Collins            } else {
80ab45ba71SJames Collins                header('HTTP/1.1 404 Not Found');
81ab45ba71SJames Collins                echo "The requested file could not be found";
82ab45ba71SJames Collins            }
83ab45ba71SJames Collins        } else {
84ab45ba71SJames Collins            header('HTTP/1.1 404 Not Found');
85ab45ba71SJames Collins            echo "The requested file could not be found";
86ab45ba71SJames Collins        }
87ab45ba71SJames Collins    } else {
88692c64c6SJames Collins        throw new Exception('Mikio could not find the LESSC engine in DokuWiki');
89ab45ba71SJames Collins    }
90ab45ba71SJames Collins}
91ab45ba71SJames Collinscatch(Exception $e) {
92692c64c6SJames Collins  header('Content-Type: text/css; charset=utf-8');
93692c64c6SJames Collins  include(dirname(__FILE__) . '/assets/mikio.css');
94a8eebd82SJames Collins}
95