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