xref: /plugin/mikioplugin/css.php (revision 3cffc6f466f403e5993ad6d174b57d9e6e2a42ae)
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
24try {
25  $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php';
26  if(!file_exists($lesscLib))
27    $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/vendor/marcusschwarz/lesserphp/lessc.inc.php';
28  if(!file_exists($lesscLib))
29    $lesscLib = '../../../../../app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
30  if(!file_exists($lesscLib))
31    $lesscLib = $_SERVER['DOCUMENT_ROOT'] . '/app/dokuwiki/vendor/marcusschwarz/lesserphp/lessc.inc.php';
32
33  if(file_exists($lesscLib)) {
34    @require_once($lesscLib);
35
36    if(isset($_GET['css'])) {
37      $failed = false;
38      $cssFileList = explode(',', $_GET['css']);
39      $baseDir = dirname(__FILE__) . '/';
40      $css = '';
41
42      foreach($cssFileList as $cssFileItem) {
43        $cssFile = realpath($baseDir . $cssFileItem);
44
45        if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) {
46          $css .= file_get_contents($cssFile);
47        } else {
48          $failed = true;
49        }
50      }
51
52      if(!$failed) {
53        $rawVars = Array();
54
55        header('Content-Type: text/css; charset=utf-8');
56
57        $less = new lessc();
58        $less->setPreserveComments(false);
59
60        $vars = Array();
61        if(isset($rawVars['replacements'])) {
62          foreach($rawVars['replacements'] as $key=>$val) {
63            if(substr($key, 0, 2) == '__' && substr($key, -2) == '__') {
64              $vars['ini_' . substr($key, 2, -2)] = $val;
65            }
66          }
67        }
68
69        if(count($vars) > 0) {
70          $less->setVariables($vars);
71        }
72
73        $css = $less->compile($css);
74        echo $css;
75      } else {
76        header('HTTP/1.1 404 Not Found');
77        echo "The requested file could not be found";
78      }
79    } else {
80      header('HTTP/1.1 404 Not Found');
81      echo "The requested file could not be found";
82    }
83  } else {
84    throw new Exception('MikioPlugin could not find the LESSC engine in DokuWiki');
85  }
86}
87catch(Exception $e) {
88  header('Content-Type: text/css; charset=utf-8');
89  include(dirname(__FILE__) . '/assets/mikioplugin.css');
90}
91