xref: /plugin/mikioplugin/css.php (revision 17dbafb65a56ef48d112815ed978861899ff4cca)
1<?php
2/**
3 * Mikio CSS/LESS Engine
4 *
5 * @link  http://dokuwiki.org/template:mikio
6 * @author  James Collins <james.collins@outlook.com.au>
7 * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html)
8 */
9
10require(dirname(__FILE__) . '/inc/polyfill-ctype.php');
11
12if(!function_exists('getallheaders')) {
13  function getallheaders() {
14    $headers = [];
15    foreach($_SERVER as $name => $value) {
16      if(substr($name, 0, 5) == 'HTTP_') {
17        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
18      }
19    }
20    return $headers;
21  }
22}
23
24if(!function_exists('platformSlashes')) {
25	function platformSlashes($path) {
26		return str_replace('/', DIRECTORY_SEPARATOR, $path);
27	}
28}
29
30try {
31  $lesscLib = platformSlashes('../../../vendor/marcusschwarz/lesserphp/lessc.inc.php');
32  if(!file_exists($lesscLib))
33    $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php');
34  if(!file_exists($lesscLib))
35    $lesscLib = platformSlashes('../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php');
36  if(!file_exists($lesscLib))
37    $lesscLib = platformSlashes($_SERVER['DOCUMENT_ROOT'] . '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php');
38
39  if(file_exists($lesscLib)) {
40    @require_once($lesscLib);
41
42    if(isset($_GET['css'])) {
43      $failed = false;
44      $cssFileList = platformSlashes(explode(',', $_GET['css']));
45      $baseDir = platformSlashes(dirname(__FILE__) . '/');
46      $css = '';
47
48      foreach($cssFileList as $cssFileItem) {
49        $cssFile = platformSlashes(realpath($baseDir . $cssFileItem));
50
51        if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
52          $css .= file_get_contents($cssFile);
53        } else {
54          $failed = true;
55        }
56      }
57
58      if(!$failed) {
59        $rawVars = Array();
60
61        header('Content-Type: text/css; charset=utf-8');
62
63        $less = new lessc();
64        $less->setPreserveComments(false);
65
66        $vars = Array();
67        if(isset($rawVars['replacements'])) {
68          foreach($rawVars['replacements'] as $key=>$val) {
69            if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
70              $vars['ini_' . substr($key, 2, -2)] = $val;
71            }
72          }
73        }
74
75        if(count($vars) > 0) {
76          $less->setVariables($vars);
77        }
78
79        $css = $less->compile($css);
80        echo $css;
81      } else {
82        header('HTTP/1.1 404 Not Found');
83        echo "The requested file could not be found";
84      }
85    } else {
86      header('HTTP/1.1 404 Not Found');
87      echo "The requested file could not be found";
88    }
89  } else {
90    throw new Exception('MikioPlugin could not find the LESSC engine in DokuWiki');
91  }
92}
93catch(Exception $e) {
94  header('Content-Type: text/css; charset=utf-8');
95  include(dirname(__FILE__) . '/assets/mikioplugin.css');
96}
97