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