12393fff5SJames Collins<?php 22393fff5SJames Collins/** 32393fff5SJames Collins * MikioPlugin CSS/LESS Engine 42393fff5SJames Collins * 52393fff5SJames Collins * @link http://dokuwiki.org/plugin:mikioplugin 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 102393fff5SJames Collinsif(!function_exists('getallheaders')) { 112393fff5SJames Collins function getallheaders() { 122393fff5SJames Collins $headers = []; 132393fff5SJames Collins foreach($_SERVER as $name => $value) { 142393fff5SJames Collins if(substr($name, 0, 5) == 'HTTP_') { 152393fff5SJames Collins $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 162393fff5SJames Collins } 172393fff5SJames Collins } 182393fff5SJames Collins return $headers; 192393fff5SJames Collins } 202393fff5SJames Collins} 212393fff5SJames Collins 222393fff5SJames Collinsif(!function_exists('ctype_alnum')) { 232393fff5SJames Collins function ctype_alnum($var) { 242393fff5SJames Collins return preg_match('/^[a-zA-Z0-9]+$/', $var); 252393fff5SJames Collins } 262393fff5SJames Collins} 272393fff5SJames Collins 282393fff5SJames Collinsif(!function_exists('ctype_alpha')) { 292393fff5SJames Collins function ctype_alpha($var) { 302393fff5SJames Collins return preg_match('/^[a-zA-Z]+$/', $var); 312393fff5SJames Collins } 322393fff5SJames Collins} 332393fff5SJames Collins 342393fff5SJames Collinsif(!function_exists('ctype_cntrl')) { 352393fff5SJames Collins function ctype_cntrl($var) { 362393fff5SJames Collins return preg_match('/^[\x00-\x1F\x7F]+$/', $var); 372393fff5SJames Collins } 382393fff5SJames Collins} 392393fff5SJames Collins 402393fff5SJames Collinsif(!function_exists('ctype_digit')) { 412393fff5SJames Collins function ctype_digit($var) { 422393fff5SJames Collins return preg_match('/^[0-9]+$/', $var); 432393fff5SJames Collins } 442393fff5SJames Collins} 452393fff5SJames Collins 462393fff5SJames Collinsif(!function_exists('ctype_graph')) { 472393fff5SJames Collins function ctype_graph($var) { 482393fff5SJames Collins return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var); 492393fff5SJames Collins } 502393fff5SJames Collins} 512393fff5SJames Collins 522393fff5SJames Collinsif(!function_exists('ctype_lower')) { 532393fff5SJames Collins function ctype_lower($var) { 542393fff5SJames Collins return preg_match('/^[a-z]+$/', $var); 552393fff5SJames Collins } 562393fff5SJames Collins} 572393fff5SJames Collins 582393fff5SJames Collinsif(!function_exists('ctype_print')) { 592393fff5SJames Collins function ctype_print($var) { 602393fff5SJames Collins return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var); 612393fff5SJames Collins } 622393fff5SJames Collins} 632393fff5SJames Collins 642393fff5SJames Collinsif(!function_exists('ctype_punct')) { 652393fff5SJames Collins function ctype_punct($var) { 662393fff5SJames Collins return preg_match('/^[^\w\s]+$/', $var); 672393fff5SJames Collins } 682393fff5SJames Collins} 692393fff5SJames Collins 702393fff5SJames Collinsif(!function_exists('ctype_space')) { 712393fff5SJames Collins function ctype_space($var) { 722393fff5SJames Collins return preg_match('/^[\r\t\n]+$/', $var); 732393fff5SJames Collins } 742393fff5SJames Collins} 752393fff5SJames Collins 762393fff5SJames Collinsif(!function_exists('ctype_upper')) { 772393fff5SJames Collins function ctype_upper($var) { 782393fff5SJames Collins return preg_match('/^[A-Z]+$/', $var); 792393fff5SJames Collins } 802393fff5SJames Collins} 812393fff5SJames Collins 822393fff5SJames Collinsif(!function_exists('ctype_xdigit')) { 832393fff5SJames Collins function ctype_upper($var) { 842393fff5SJames Collins return preg_match('/^[0-9A-Fa-f]+$/', $var); 852393fff5SJames Collins } 862393fff5SJames Collins} 872393fff5SJames Collins 882393fff5SJames Collinstry { 892393fff5SJames Collins if(!function_exists('ctype_digit')) { 902393fff5SJames Collins if(isset($_GET['css'])) { 912393fff5SJames Collins $baseDir = dirname(__FILE__) . '/'; 922393fff5SJames Collins $cssFile = realpath($baseDir . $_GET['css']); 932393fff5SJames Collins if(strtolower(substr($cssFile, -5)) == '.less') { 942393fff5SJames Collins $cssFile = substr($cssFile, 0, -5) . '.css'; 952393fff5SJames Collins if(file_exists($cssFile)) { 962393fff5SJames Collins echo file_get_contents($cssFile); 972393fff5SJames Collins exit; 982393fff5SJames Collins } 992393fff5SJames Collins } 1002393fff5SJames Collins } 1012393fff5SJames Collins 1022393fff5SJames Collins throw new Exception('ctype extension not installed'); 1032393fff5SJames Collins } 1042393fff5SJames Collins 1052393fff5SJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 1062393fff5SJames Collins if(!file_exists($lesscLib)) 1072393fff5SJames Collins $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 1082393fff5SJames Collins 1092393fff5SJames Collins if(file_exists($lesscLib)) { 1102393fff5SJames Collins @require_once($lesscLib); 1112393fff5SJames Collins 1122393fff5SJames Collins if(isset($_GET['css'])) { 113*518c05ebSJames Collins $css = ''; 1142393fff5SJames Collins $baseDir = dirname(__FILE__) . '/'; 115*518c05ebSJames Collins $cssFileList = explode(',', $_GET['css']); 116*518c05ebSJames Collins foreach($cssFileList as $cssFileItem) { 117*518c05ebSJames Collins $cssFile = realpath($baseDir . $cssFileItem); 1182393fff5SJames Collins 1192393fff5SJames Collins if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) { 120*518c05ebSJames Collins $css .= file_get_contents($cssFile); 121*518c05ebSJames Collins } 122*518c05ebSJames Collins } 1232393fff5SJames Collins 1242393fff5SJames Collins header('Content-Type: text/css; charset=utf-8'); 1252393fff5SJames Collins 1262393fff5SJames Collins $less = new lessc(); 1272393fff5SJames Collins $less->setPreserveComments(false); 1282393fff5SJames Collins 1292393fff5SJames Collins $css = $less->compile($css); 1302393fff5SJames Collins echo $css; 1312393fff5SJames Collins } else { 1322393fff5SJames Collins header('HTTP/1.1 404 Not Found'); 1332393fff5SJames Collins echo "The requested file could not be found"; 1342393fff5SJames Collins } 1352393fff5SJames Collins } else { 1362393fff5SJames Collins throw new Exception('Lessc library not found'); 1372393fff5SJames Collins } 1382393fff5SJames Collins} 1392393fff5SJames Collinscatch(Exception $e) { 1402393fff5SJames Collins header('HTTP/1.1 500 Internal Server Error'); 1412393fff5SJames Collins echo $e; 1422393fff5SJames Collins} 143