xref: /template/mikio/css.php (revision 8ddabb4e1fff3c654b83e1fb3218a6719351b6a5)
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
24fd3ef33aSJames Collinsif(!function_exists('platformSlashes')) {
25fd3ef33aSJames Collins	function platformSlashes($path) {
26fd3ef33aSJames Collins		return str_replace('/', DIRECTORY_SEPARATOR, $path);
27fd3ef33aSJames Collins	}
28fd3ef33aSJames Collins}
29fd3ef33aSJames Collins
30ab45ba71SJames Collinstry {
31fd3ef33aSJames Collins    $lesscLib = platformSlashes('../../../vendor/marcusschwarz/lesserphp/lessc.inc.php');
3229118ed7SJames Collins    if(!file_exists($lesscLib))
33fd3ef33aSJames Collins        $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php');
34692c64c6SJames Collins    if(!file_exists($lesscLib))
35fd3ef33aSJames Collins        $lesscLib = platformSlashes('../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php');
36692c64c6SJames Collins    if(!file_exists($lesscLib))
37fd3ef33aSJames 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'])) {
43fd3ef33aSJames Collins            $baseDir = platformSlashes(dirname(__FILE__) . '/');
44fd3ef33aSJames 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';
49*8ddabb4eSJames Collins                if(file_exists($file)) {
50*8ddabb4eSJames Collins                    $rawVars = arrayDeepMerge($rawVars, parse_ini_file($file, TRUE));
51*8ddabb4eSJames Collins                }
52ab45ba71SJames Collins
53fd3ef33aSJames Collins                $file = platformSlashes('../../../conf/tpl/mikio/style.ini');
54*8ddabb4eSJames Collins                if(file_exists($file)) {
55*8ddabb4eSJames Collins                    $rawVars = arrayDeepMerge($rawVars, parse_ini_file($file, TRUE));
56*8ddabb4eSJames Collins                }
57ab45ba71SJames Collins
58fd3ef33aSJames Collins                $file = ($_SERVER['DOCUMENT_ROOT'] . '/conf/tpl/mikio/style.ini');
59*8ddabb4eSJames Collins                if(file_exists($file)) {
60*8ddabb4eSJames Collins                    $rawVars = arrayDeepMerge($rawVars, parse_ini_file($file, TRUE));
61*8ddabb4eSJames Collins                }
62692c64c6SJames Collins
63ab45ba71SJames Collins                $css = file_get_contents($cssFile);
64ab45ba71SJames Collins
65e876e764SJames Collins                header('Content-Type: text/css; charset=utf-8');
66e876e764SJames Collins
67ab45ba71SJames Collins                $less = new lessc();
68ab45ba71SJames Collins                $less->setPreserveComments(false);
69a8eebd82SJames Collins
70a8eebd82SJames Collins                $vars = Array();
71a8eebd82SJames Collins                if(isset($rawVars['replacements'])) {
72a8eebd82SJames Collins                    foreach($rawVars['replacements'] as $key=>$val) {
73a8eebd82SJames Collins                        if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
74a8eebd82SJames Collins                            $vars['ini_' . substr($key, 2, -2)] = $val;
75a8eebd82SJames Collins                        }
76a8eebd82SJames Collins                    }
77a8eebd82SJames Collins                }
78a8eebd82SJames Collins
79a8eebd82SJames Collins                if(count($vars) > 0) {
80a8eebd82SJames Collins                    $less->setVariables($vars);
81a8eebd82SJames Collins                }
82a8eebd82SJames Collins
83ab45ba71SJames Collins                $css = $less->compile($css);
84ab45ba71SJames Collins                echo $css;
85ab45ba71SJames Collins            } else {
86ab45ba71SJames Collins                header('HTTP/1.1 404 Not Found');
87ab45ba71SJames Collins                echo "The requested file could not be found";
88ab45ba71SJames Collins            }
89ab45ba71SJames Collins        } else {
90ab45ba71SJames Collins            header('HTTP/1.1 404 Not Found');
91ab45ba71SJames Collins            echo "The requested file could not be found";
92ab45ba71SJames Collins        }
93ab45ba71SJames Collins    } else {
94692c64c6SJames Collins        throw new Exception('Mikio could not find the LESSC engine in DokuWiki');
95ab45ba71SJames Collins    }
96ab45ba71SJames Collins}
97ab45ba71SJames Collinscatch(Exception $e) {
98*8ddabb4eSJames Collins    // echo $e;
99692c64c6SJames Collins    header('Content-Type: text/css; charset=utf-8');
100692c64c6SJames Collins    include(dirname(__FILE__) . '/assets/mikio.css');
101a8eebd82SJames Collins}
102*8ddabb4eSJames Collins
103*8ddabb4eSJames Collinsfunction arrayDeepMerge($arr1, $arr2) {
104*8ddabb4eSJames Collins    foreach ($arr2 as $key => $value){
105*8ddabb4eSJames Collins        if(array_key_exists($key, $arr1)) {
106*8ddabb4eSJames Collins            $arr1[$key] = array_merge($arr1[$key], $value);
107*8ddabb4eSJames Collins        } else {
108*8ddabb4eSJames Collins            $arr1[$key] = $value;
109*8ddabb4eSJames Collins        }
110*8ddabb4eSJames Collins    }
111*8ddabb4eSJames Collins    return $arr1;
112*8ddabb4eSJames Collins}