xref: /plugin/mikioplugin/css.php (revision 3cffc6f466f403e5993ad6d174b57d9e6e2a42ae)
12393fff5SJames Collins<?php
22393fff5SJames Collins/**
3*3cffc6f4SJames Collins * Mikio CSS/LESS Engine
42393fff5SJames Collins *
5*3cffc6f4SJames 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
10*3cffc6f4SJames Collinsrequire(dirname(__FILE__) . '/inc/polyfill-ctype.php');
11*3cffc6f4SJames 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
242393fff5SJames Collinstry {
252393fff5SJames Collins  $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php';
262393fff5SJames Collins  if(!file_exists($lesscLib))
27*3cffc6f4SJames Collins    $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php';
28*3cffc6f4SJames Collins  if(!file_exists($lesscLib))
292393fff5SJames Collins    $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
30*3cffc6f4SJames Collins  if(!file_exists($lesscLib))
31*3cffc6f4SJames Collins    $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
322393fff5SJames Collins
332393fff5SJames Collins  if(file_exists($lesscLib)) {
342393fff5SJames Collins    @require_once($lesscLib);
352393fff5SJames Collins
362393fff5SJames Collins    if(isset($_GET['css'])) {
37*3cffc6f4SJames Collins      $failed = false;
38518c05ebSJames Collins      $cssFileList = explode(',', $_GET['css']);
39*3cffc6f4SJames Collins      $baseDir = dirname(__FILE__) . '/';
40*3cffc6f4SJames Collins      $css = '';
41*3cffc6f4SJames Collins
42518c05ebSJames Collins      foreach($cssFileList as $cssFileItem) {
43518c05ebSJames Collins        $cssFile = realpath($baseDir . $cssFileItem);
442393fff5SJames Collins
452393fff5SJames Collins        if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
46518c05ebSJames Collins          $css .= file_get_contents($cssFile);
47*3cffc6f4SJames Collins        } else {
48*3cffc6f4SJames Collins          $failed = true;
49518c05ebSJames Collins        }
50518c05ebSJames Collins      }
512393fff5SJames Collins
52*3cffc6f4SJames Collins      if(!$failed) {
53*3cffc6f4SJames Collins        $rawVars = Array();
54*3cffc6f4SJames Collins
552393fff5SJames Collins        header('Content-Type: text/css; charset=utf-8');
562393fff5SJames Collins
572393fff5SJames Collins        $less = new lessc();
582393fff5SJames Collins        $less->setPreserveComments(false);
592393fff5SJames Collins
60*3cffc6f4SJames Collins        $vars = Array();
61*3cffc6f4SJames Collins        if(isset($rawVars['replacements'])) {
62*3cffc6f4SJames Collins          foreach($rawVars['replacements'] as $key=>$val) {
63*3cffc6f4SJames Collins            if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
64*3cffc6f4SJames Collins              $vars['ini_' . substr($key, 2, -2)] = $val;
65*3cffc6f4SJames Collins            }
66*3cffc6f4SJames Collins          }
67*3cffc6f4SJames Collins        }
68*3cffc6f4SJames Collins
69*3cffc6f4SJames Collins        if(count($vars) > 0) {
70*3cffc6f4SJames Collins          $less->setVariables($vars);
71*3cffc6f4SJames Collins        }
72*3cffc6f4SJames Collins
732393fff5SJames Collins        $css = $less->compile($css);
742393fff5SJames Collins        echo $css;
752393fff5SJames Collins      } else {
762393fff5SJames Collins        header('HTTP/1.1 404 Not Found');
772393fff5SJames Collins        echo "The requested file could not be found";
782393fff5SJames Collins      }
792393fff5SJames Collins    } else {
80*3cffc6f4SJames Collins      header('HTTP/1.1 404 Not Found');
81*3cffc6f4SJames Collins      echo "The requested file could not be found";
82*3cffc6f4SJames Collins    }
83*3cffc6f4SJames Collins  } else {
84*3cffc6f4SJames Collins    throw new Exception('MikioPlugin could not find the LESSC engine in DokuWiki');
852393fff5SJames Collins  }
862393fff5SJames Collins}
872393fff5SJames Collinscatch(Exception $e) {
88*3cffc6f4SJames Collins  header('Content-Type: text/css; charset=utf-8');
89*3cffc6f4SJames Collins  include(dirname(__FILE__) . '/assets/mikioplugin.css');
902393fff5SJames Collins}
91