1*2393fff5SJames Collins<?php 2*2393fff5SJames Collins/** 3*2393fff5SJames Collins * MikioPlugin CSS/LESS Engine 4*2393fff5SJames Collins * 5*2393fff5SJames Collins * @link http://dokuwiki.org/plugin:mikioplugin 6*2393fff5SJames Collins * @author James Collins <james.collins@outlook.com.au> 7*2393fff5SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html) 8*2393fff5SJames Collins */ 9*2393fff5SJames Collins 10*2393fff5SJames Collinsif(!function_exists('getallheaders')) { 11*2393fff5SJames Collins function getallheaders() { 12*2393fff5SJames Collins $headers = []; 13*2393fff5SJames Collins foreach($_SERVER as $name => $value) { 14*2393fff5SJames Collins if(substr($name, 0, 5) == 'HTTP_') { 15*2393fff5SJames Collins $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 16*2393fff5SJames Collins } 17*2393fff5SJames Collins } 18*2393fff5SJames Collins return $headers; 19*2393fff5SJames Collins } 20*2393fff5SJames Collins} 21*2393fff5SJames Collins 22*2393fff5SJames Collinsif(!function_exists('ctype_alnum')) { 23*2393fff5SJames Collins function ctype_alnum($var) { 24*2393fff5SJames Collins return preg_match('/^[a-zA-Z0-9]+$/', $var); 25*2393fff5SJames Collins } 26*2393fff5SJames Collins} 27*2393fff5SJames Collins 28*2393fff5SJames Collinsif(!function_exists('ctype_alpha')) { 29*2393fff5SJames Collins function ctype_alpha($var) { 30*2393fff5SJames Collins return preg_match('/^[a-zA-Z]+$/', $var); 31*2393fff5SJames Collins } 32*2393fff5SJames Collins} 33*2393fff5SJames Collins 34*2393fff5SJames Collinsif(!function_exists('ctype_cntrl')) { 35*2393fff5SJames Collins function ctype_cntrl($var) { 36*2393fff5SJames Collins return preg_match('/^[\x00-\x1F\x7F]+$/', $var); 37*2393fff5SJames Collins } 38*2393fff5SJames Collins} 39*2393fff5SJames Collins 40*2393fff5SJames Collinsif(!function_exists('ctype_digit')) { 41*2393fff5SJames Collins function ctype_digit($var) { 42*2393fff5SJames Collins return preg_match('/^[0-9]+$/', $var); 43*2393fff5SJames Collins } 44*2393fff5SJames Collins} 45*2393fff5SJames Collins 46*2393fff5SJames Collinsif(!function_exists('ctype_graph')) { 47*2393fff5SJames Collins function ctype_graph($var) { 48*2393fff5SJames Collins return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var); 49*2393fff5SJames Collins } 50*2393fff5SJames Collins} 51*2393fff5SJames Collins 52*2393fff5SJames Collinsif(!function_exists('ctype_lower')) { 53*2393fff5SJames Collins function ctype_lower($var) { 54*2393fff5SJames Collins return preg_match('/^[a-z]+$/', $var); 55*2393fff5SJames Collins } 56*2393fff5SJames Collins} 57*2393fff5SJames Collins 58*2393fff5SJames Collinsif(!function_exists('ctype_print')) { 59*2393fff5SJames Collins function ctype_print($var) { 60*2393fff5SJames Collins return preg_match('/^[\x20-\x7E\x80-\xFF]+$/', $var); 61*2393fff5SJames Collins } 62*2393fff5SJames Collins} 63*2393fff5SJames Collins 64*2393fff5SJames Collinsif(!function_exists('ctype_punct')) { 65*2393fff5SJames Collins function ctype_punct($var) { 66*2393fff5SJames Collins return preg_match('/^[^\w\s]+$/', $var); 67*2393fff5SJames Collins } 68*2393fff5SJames Collins} 69*2393fff5SJames Collins 70*2393fff5SJames Collinsif(!function_exists('ctype_space')) { 71*2393fff5SJames Collins function ctype_space($var) { 72*2393fff5SJames Collins return preg_match('/^[\r\t\n]+$/', $var); 73*2393fff5SJames Collins } 74*2393fff5SJames Collins} 75*2393fff5SJames Collins 76*2393fff5SJames Collinsif(!function_exists('ctype_upper')) { 77*2393fff5SJames Collins function ctype_upper($var) { 78*2393fff5SJames Collins return preg_match('/^[A-Z]+$/', $var); 79*2393fff5SJames Collins } 80*2393fff5SJames Collins} 81*2393fff5SJames Collins 82*2393fff5SJames Collinsif(!function_exists('ctype_xdigit')) { 83*2393fff5SJames Collins function ctype_upper($var) { 84*2393fff5SJames Collins return preg_match('/^[0-9A-Fa-f]+$/', $var); 85*2393fff5SJames Collins } 86*2393fff5SJames Collins} 87*2393fff5SJames Collins 88*2393fff5SJames Collinstry { 89*2393fff5SJames Collins if(!function_exists('ctype_digit')) { 90*2393fff5SJames Collins if(isset($_GET['css'])) { 91*2393fff5SJames Collins $baseDir = dirname(__FILE__) . '/'; 92*2393fff5SJames Collins $cssFile = realpath($baseDir . $_GET['css']); 93*2393fff5SJames Collins if(strtolower(substr($cssFile, -5)) == '.less') { 94*2393fff5SJames Collins $cssFile = substr($cssFile, 0, -5) . '.css'; 95*2393fff5SJames Collins if(file_exists($cssFile)) { 96*2393fff5SJames Collins echo file_get_contents($cssFile); 97*2393fff5SJames Collins exit; 98*2393fff5SJames Collins } 99*2393fff5SJames Collins } 100*2393fff5SJames Collins } 101*2393fff5SJames Collins 102*2393fff5SJames Collins throw new Exception('ctype extension not installed'); 103*2393fff5SJames Collins } 104*2393fff5SJames Collins 105*2393fff5SJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 106*2393fff5SJames Collins if(!file_exists($lesscLib)) 107*2393fff5SJames Collins $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php'; 108*2393fff5SJames Collins 109*2393fff5SJames Collins if(file_exists($lesscLib)) { 110*2393fff5SJames Collins @require_once($lesscLib); 111*2393fff5SJames Collins 112*2393fff5SJames Collins if(isset($_GET['css'])) { 113*2393fff5SJames Collins $baseDir = dirname(__FILE__) . '/'; 114*2393fff5SJames Collins $cssFile = realpath($baseDir . $_GET['css']); 115*2393fff5SJames Collins 116*2393fff5SJames Collins if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) { 117*2393fff5SJames Collins $rawVars = Array(); 118*2393fff5SJames Collins $file = 'style.ini'; 119*2393fff5SJames Collins if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE)); 120*2393fff5SJames Collins 121*2393fff5SJames Collins $file = '../../../conf/tpl/mikio/style.ini'; 122*2393fff5SJames Collins if(file_exists($file)) $rawVars = array_merge($rawVars, parse_ini_file($file, TRUE)); 123*2393fff5SJames Collins 124*2393fff5SJames Collins $css = file_get_contents($cssFile); 125*2393fff5SJames Collins 126*2393fff5SJames Collins header('Content-Type: text/css; charset=utf-8'); 127*2393fff5SJames Collins 128*2393fff5SJames Collins $less = new lessc(); 129*2393fff5SJames Collins $less->setPreserveComments(false); 130*2393fff5SJames Collins 131*2393fff5SJames Collins $vars = Array(); 132*2393fff5SJames Collins if(isset($rawVars['replacements'])) { 133*2393fff5SJames Collins foreach($rawVars['replacements'] as $key=>$val) { 134*2393fff5SJames Collins if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') { 135*2393fff5SJames Collins $vars['ini_' . substr($key, 2, -2)] = $val; 136*2393fff5SJames Collins } 137*2393fff5SJames Collins } 138*2393fff5SJames Collins } 139*2393fff5SJames Collins 140*2393fff5SJames Collins if(count($vars) > 0) { 141*2393fff5SJames Collins $less->setVariables($vars); 142*2393fff5SJames Collins } 143*2393fff5SJames Collins 144*2393fff5SJames Collins $css = $less->compile($css); 145*2393fff5SJames Collins echo $css; 146*2393fff5SJames Collins } else { 147*2393fff5SJames Collins header('HTTP/1.1 404 Not Found'); 148*2393fff5SJames Collins echo "The requested file could not be found"; 149*2393fff5SJames Collins } 150*2393fff5SJames Collins } else { 151*2393fff5SJames Collins header('HTTP/1.1 404 Not Found'); 152*2393fff5SJames Collins echo "The requested file could not be found"; 153*2393fff5SJames Collins } 154*2393fff5SJames Collins } else { 155*2393fff5SJames Collins throw new Exception('Lessc library not found'); 156*2393fff5SJames Collins } 157*2393fff5SJames Collins} 158*2393fff5SJames Collinscatch(Exception $e) { 159*2393fff5SJames Collins header('HTTP/1.1 500 Internal Server Error'); 160*2393fff5SJames Collins echo $e; 161*2393fff5SJames Collins} 162