xref: /template/mikio/css.php (revision 660b2c71ffbf1e81e90be7ed77ca21dba1f209ce)
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
24try {
25    $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php';
26    if(!file_exists($lesscLib))
27        $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php';
28    if(!file_exists($lesscLib))
29        $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
30    if(!file_exists($lesscLib))
31        $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
32
33    if(file_exists($lesscLib)) {
34        @require_once($lesscLib);
35
36        if(isset($_GET['css'])) {
37            $baseDir = dirname(__FILE__) . '/';
38            $cssFile = realpath($baseDir . $_GET['css']);
39
40            if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
41                $rawVars = Array();
42                $file = 'style.ini';
43                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
44
45                $file = '../../../conf/tpl/mikio/style.ini';
46                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
47
48                $file = $_SERVER['DOCUMENT_ROOT'] . '/conf/tpl/mikio/style.ini';
49                if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE));
50
51                $css = file_get_contents($cssFile);
52
53                header('Content-Type: text/css; charset=utf-8');
54
55                $less = new lessc();
56                $less->setPreserveComments(false);
57
58                $vars = Array();
59                if(isset($rawVars['replacements'])) {
60                    foreach($rawVars['replacements'] as $key=>$val) {
61                        if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
62                            $vars['ini_' . substr($key, 2, -2)] = $val;
63                        }
64                    }
65                }
66
67                if(count($vars) > 0) {
68                    $less->setVariables($vars);
69                }
70
71                $css = $less->compile($css);
72                echo $css;
73            } else {
74                header('HTTP/1.1 404 Not Found');
75                echo "The requested file could not be found";
76            }
77        } else {
78            header('HTTP/1.1 404 Not Found');
79            echo "The requested file could not be found";
80        }
81    } else {
82        throw new Exception('Mikio could not find the LESSC engine in DokuWiki');
83    }
84}
85catch(Exception $e) {
86  header('Content-Type: text/css; charset=utf-8');
87  include(dirname(__FILE__) . '/assets/mikio.css');
88}
89