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)) { 50 $rawVars = arrayDeepMerge($rawVars, parse_ini_file($file, TRUE)); 51 } 52 53 $file = platformSlashes('../../../conf/tpl/mikio/style.ini'); 54 if(file_exists($file)) { 55 $rawVars = arrayDeepMerge($rawVars, parse_ini_file($file, TRUE)); 56 } 57 58 $file = ($_SERVER['DOCUMENT_ROOT'] . '/conf/tpl/mikio/style.ini'); 59 if(file_exists($file)) { 60 $rawVars = arrayDeepMerge($rawVars, parse_ini_file($file, TRUE)); 61 } 62 63 $css = file_get_contents($cssFile); 64 65 header('Content-Type: text/css; charset=utf-8'); 66 67 $less = new lessc(); 68 $less->setPreserveComments(false); 69 70 $vars = Array(); 71 if(isset($rawVars['replacements'])) { 72 foreach($rawVars['replacements'] as $key=>$val) { 73 if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') { 74 $vars['ini_' . substr($key, 2, -2)] = $val; 75 } 76 } 77 } 78 79 if(count($vars) > 0) { 80 $less->setVariables($vars); 81 } 82 83 $css = $less->compile($css); 84 echo $css; 85 } else { 86 header('HTTP/1.1 404 Not Found'); 87 echo "The requested file could not be found"; 88 } 89 } else { 90 header('HTTP/1.1 404 Not Found'); 91 echo "The requested file could not be found"; 92 } 93 } else { 94 throw new Exception('Mikio could not find the LESSC engine in DokuWiki'); 95 } 96} 97catch(Exception $e) { 98 // echo $e; 99 header('Content-Type: text/css; charset=utf-8'); 100 include(dirname(__FILE__) . '/assets/mikio.css'); 101} 102 103function arrayDeepMerge($arr1, $arr2) { 104 foreach ($arr2 as $key => $value){ 105 if(array_key_exists($key, $arr1)) { 106 $arr1[$key] = array_merge($arr1[$key], $value); 107 } else { 108 $arr1[$key] = $value; 109 } 110 } 111 return $arr1; 112}