12393fff5SJames Collins<?php 22393fff5SJames Collins/** 33cffc6f4SJames Collins * Mikio CSS/LESS Engine 42393fff5SJames Collins * 53cffc6f4SJames Collins * @link http://dokuwiki.org/template:mikio 62393fff5SJames Collins * @author James Collins <james.collins@outlook.com.au> 72393fff5SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html) 82393fff5SJames Collins */ 92393fff5SJames Collins 103cffc6f4SJames Collinsrequire(dirname(__FILE__) . '/inc/polyfill-ctype.php'); 113cffc6f4SJames Collins 122393fff5SJames Collinsif(!function_exists('getallheaders')) { 132393fff5SJames Collins function getallheaders() { 142393fff5SJames Collins $headers = []; 152393fff5SJames Collins foreach($_SERVER as $name => $value) { 162393fff5SJames Collins if(substr($name, 0, 5) == 'HTTP_') { 172393fff5SJames Collins $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 182393fff5SJames Collins } 192393fff5SJames Collins } 202393fff5SJames Collins return $headers; 212393fff5SJames Collins } 222393fff5SJames Collins} 232393fff5SJames Collins 24*17dbafb6SJames Collinsif(!function_exists('platformSlashes')) { 25*17dbafb6SJames Collins function platformSlashes($path) { 26*17dbafb6SJames Collins return str_replace('/', DIRECTORY_SEPARATOR, $path); 27*17dbafb6SJames Collins } 28*17dbafb6SJames Collins} 29*17dbafb6SJames Collins 302393fff5SJames Collinstry { 31*17dbafb6SJames Collins $lesscLib = platformSlashes('../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'); 322393fff5SJames Collins if(!file_exists($lesscLib)) 33*17dbafb6SJames Collins $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php'); 343cffc6f4SJames Collins if(!file_exists($lesscLib)) 35*17dbafb6SJames Collins $lesscLib = platformSlashes('../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'); 363cffc6f4SJames Collins if(!file_exists($lesscLib)) 37*17dbafb6SJames Collins $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'); 382393fff5SJames Collins 392393fff5SJames Collins if(file_exists($lesscLib)) { 402393fff5SJames Collins @require_once($lesscLib); 412393fff5SJames Collins 422393fff5SJames Collins if(isset($_GET['css'])) { 433cffc6f4SJames Collins $failed = false; 44*17dbafb6SJames Collins $cssFileList = platformSlashes(explode(',', $_GET['css'])); 45*17dbafb6SJames Collins $baseDir = platformSlashes(dirname(__FILE__) . '/'); 463cffc6f4SJames Collins $css = ''; 473cffc6f4SJames Collins 48518c05ebSJames Collins foreach($cssFileList as $cssFileItem) { 49*17dbafb6SJames Collins $cssFile = platformSlashes(realpath($baseDir . $cssFileItem)); 502393fff5SJames Collins 512393fff5SJames Collins if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) { 52518c05ebSJames Collins $css .= file_get_contents($cssFile); 533cffc6f4SJames Collins } else { 543cffc6f4SJames Collins $failed = true; 55518c05ebSJames Collins } 56518c05ebSJames Collins } 572393fff5SJames Collins 583cffc6f4SJames Collins if(!$failed) { 593cffc6f4SJames Collins $rawVars = Array(); 603cffc6f4SJames Collins 612393fff5SJames Collins header('Content-Type: text/css; charset=utf-8'); 622393fff5SJames Collins 632393fff5SJames Collins $less = new lessc(); 642393fff5SJames Collins $less->setPreserveComments(false); 652393fff5SJames Collins 663cffc6f4SJames Collins $vars = Array(); 673cffc6f4SJames Collins if(isset($rawVars['replacements'])) { 683cffc6f4SJames Collins foreach($rawVars['replacements'] as $key=>$val) { 693cffc6f4SJames Collins if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') { 703cffc6f4SJames Collins $vars['ini_' . substr($key, 2, -2)] = $val; 713cffc6f4SJames Collins } 723cffc6f4SJames Collins } 733cffc6f4SJames Collins } 743cffc6f4SJames Collins 753cffc6f4SJames Collins if(count($vars) > 0) { 763cffc6f4SJames Collins $less->setVariables($vars); 773cffc6f4SJames Collins } 783cffc6f4SJames Collins 792393fff5SJames Collins $css = $less->compile($css); 802393fff5SJames Collins echo $css; 812393fff5SJames Collins } else { 822393fff5SJames Collins header('HTTP/1.1 404 Not Found'); 832393fff5SJames Collins echo "The requested file could not be found"; 842393fff5SJames Collins } 852393fff5SJames Collins } else { 863cffc6f4SJames Collins header('HTTP/1.1 404 Not Found'); 873cffc6f4SJames Collins echo "The requested file could not be found"; 883cffc6f4SJames Collins } 893cffc6f4SJames Collins } else { 903cffc6f4SJames Collins throw new Exception('MikioPlugin could not find the LESSC engine in DokuWiki'); 912393fff5SJames Collins } 922393fff5SJames Collins} 932393fff5SJames Collinscatch(Exception $e) { 943cffc6f4SJames Collins header('Content-Type: text/css; charset=utf-8'); 953cffc6f4SJames Collins include(dirname(__FILE__) . '/assets/mikioplugin.css'); 962393fff5SJames Collins} 97