xref: /plugin/mikioplugin/css.php (revision 4afa967a510d822e06d2b135bc09c53f7901556f)
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
12*4afa967aSJames Collinsif(!class_exists('lessc')) {
13*4afa967aSJames Collins    require(dirname(__FILE__) . '/inc/marcusschwarz/lesserphp/lessc.inc.php');
14*4afa967aSJames Collins}
15*4afa967aSJames Collins
162393fff5SJames Collinsif(!function_exists('getallheaders')) {
172393fff5SJames Collins    function getallheaders() {
182393fff5SJames Collins        $headers = [];
192393fff5SJames Collins        foreach($_SERVER as $name => $value) {
202393fff5SJames Collins            if(substr($name, 0, 5) == 'HTTP_') {
212393fff5SJames Collins                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
222393fff5SJames Collins            }
232393fff5SJames Collins        }
242393fff5SJames Collins        return $headers;
252393fff5SJames Collins    }
262393fff5SJames Collins}
272393fff5SJames Collins
2817dbafb6SJames Collinsif(!function_exists('platformSlashes')) {
2917dbafb6SJames Collins    function platformSlashes($path) {
3017dbafb6SJames Collins        return str_replace('/', DIRECTORY_SEPARATOR, $path);
3117dbafb6SJames Collins    }
3217dbafb6SJames Collins}
3317dbafb6SJames Collins
342393fff5SJames Collinstry {
352393fff5SJames Collins    if(isset($_GET['css'])) {
363cffc6f4SJames Collins        $failed = false;
3717dbafb6SJames Collins        $cssFileList = platformSlashes(explode(',', $_GET['css']));
3817dbafb6SJames Collins        $baseDir = platformSlashes(dirname(__FILE__) . '/');
393cffc6f4SJames Collins        $css = '';
403cffc6f4SJames Collins
41518c05ebSJames Collins        foreach($cssFileList as $cssFileItem) {
4217dbafb6SJames Collins            $cssFile = platformSlashes(realpath($baseDir . $cssFileItem));
432393fff5SJames Collins
442393fff5SJames Collins            if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
45518c05ebSJames Collins                $css .= file_get_contents($cssFile);
463cffc6f4SJames Collins            } else {
473cffc6f4SJames Collins                $failed = true;
48518c05ebSJames Collins            }
49518c05ebSJames Collins        }
502393fff5SJames Collins
513cffc6f4SJames Collins        if(!$failed) {
523cffc6f4SJames Collins            $rawVars = Array();
533cffc6f4SJames Collins
542393fff5SJames Collins            header('Content-Type: text/css; charset=utf-8');
552393fff5SJames Collins
562393fff5SJames Collins            $less = new lessc();
572393fff5SJames Collins            $less->setPreserveComments(false);
582393fff5SJames Collins
593cffc6f4SJames Collins            $vars = Array();
603cffc6f4SJames Collins            if(isset($rawVars['replacements'])) {
613cffc6f4SJames Collins                foreach($rawVars['replacements'] as $key=>$val) {
623cffc6f4SJames Collins                    if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
633cffc6f4SJames Collins                        $vars['ini_' . substr($key, 2, -2)] = $val;
643cffc6f4SJames Collins                    }
653cffc6f4SJames Collins                }
663cffc6f4SJames Collins            }
673cffc6f4SJames Collins
683cffc6f4SJames Collins            if(count($vars) > 0) {
693cffc6f4SJames Collins                $less->setVariables($vars);
703cffc6f4SJames Collins            }
713cffc6f4SJames Collins
722393fff5SJames Collins            $css = $less->compile($css);
732393fff5SJames Collins            echo $css;
742393fff5SJames Collins        } else {
752393fff5SJames Collins            header('HTTP/1.1 404 Not Found');
762393fff5SJames Collins            echo "The requested file could not be found";
772393fff5SJames Collins        }
782393fff5SJames Collins    } else {
793cffc6f4SJames Collins        header('HTTP/1.1 404 Not Found');
803cffc6f4SJames Collins        echo "The requested file could not be found";
813cffc6f4SJames Collins    }
822393fff5SJames Collins}
832393fff5SJames Collinscatch(Exception $e) {
843cffc6f4SJames Collins    header('Content-Type: text/css; charset=utf-8');
85a42d1e7eSnomadjimbob    echo ".error_in_mikio_plugin_with_less_file {
86a42d1e7eSnomadjimbob/**
87a42d1e7eSnomadjimbob" . $e . "
88a42d1e7eSnomadjimbob**/
89a42d1e7eSnomadjimbob}";
902393fff5SJames Collins}
91