xref: /plugin/mikioplugin/css.php (revision 518c05ebc60af037db771724d2bb3dcc6937a196)
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