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