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 $failed = false; 44 $cssFileList = platformSlashes(explode(',', $_GET['css'])); 45 $baseDir = platformSlashes(dirname(__FILE__) . '/'); 46 $css = ''; 47 48 foreach($cssFileList as $cssFileItem) { 49 $cssFile = platformSlashes(realpath($baseDir . $cssFileItem)); 50 51 if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) { 52 $css .= file_get_contents($cssFile); 53 } else { 54 $failed = true; 55 } 56 } 57 58 if(!$failed) { 59 $rawVars = Array(); 60 61 header('Content-Type: text/css; charset=utf-8'); 62 63 $less = new lessc(); 64 $less->setPreserveComments(false); 65 66 $vars = Array(); 67 if(isset($rawVars['replacements'])) { 68 foreach($rawVars['replacements'] as $key=>$val) { 69 if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') { 70 $vars['ini_' . substr($key, 2, -2)] = $val; 71 } 72 } 73 } 74 75 if(count($vars) > 0) { 76 $less->setVariables($vars); 77 } 78 79 $css = $less->compile($css); 80 echo $css; 81 } else { 82 header('HTTP/1.1 404 Not Found'); 83 echo "The requested file could not be found"; 84 } 85 } else { 86 header('HTTP/1.1 404 Not Found'); 87 echo "The requested file could not be found"; 88 } 89 } else { 90 throw new Exception('MikioPlugin could not find the LESSC engine in DokuWiki'); 91 } 92} 93catch(Exception $e) { 94 header('Content-Type: text/css; charset=utf-8'); 95 include(dirname(__FILE__) . '/assets/mikioplugin.css'); 96} 97