Mini Shell

Direktori : /home/brasafestival/www/old/bkp_2023/app/Plugin/Less/View/Helper/
Upload File :
Current File : /home/brasafestival/www/old/bkp_2023/app/Plugin/Less/View/Helper/LessHelper.php

<?php
/**
 * LESS to CSS Converter Plugin
 *
 * This plugin compiles your .less files to regular CSS withouth relying on
 * client- or serverside JavaScript
 *
 * Relies on the lessify.inc.php class in Vendor/lessphp
 *
 * PHP versions 4 and 5
 *
 * Mindthecode: http://www.mindthecode.com
 * Copyright 2011, Stef van den Ham
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @author        Stef van den Ham
 * @copyright     Copyright 2011, Mindthecode (http://www.mindthecode.com)
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */
App::uses('Folder', 'Utility');
App::uses('File', 'Utility');
App::uses('Component', 'Controller');
App::import('Vendor', 'Less.Lessify',
      array(
            'file' => 'lessphp' . DS . 'lessify.inc.php'
      )
);

class LessHelper extends AppHelper {

      public $helpers = array('Html');

      public function __construct(View $View, $options = array()) {
            parent::__construct($View, $options);
            $this->lessFolder = new Folder(WWW_ROOT.'less');
            $this->cssFolder = new Folder(WWW_ROOT.'css');
      }

      /**
       * When called, will reset lessFolder for specific theme
       *
       * @note Note that it assumes themes are stored in app/View/Themed
       *
       * @param string $theme_name
       */
      private function set_theme($theme_name) {

            $app_root = ROOT . DS . APP_DIR;

            $theme_path = DS.$app_root.DS.'View'.DS.'Themed'.DS.$theme_name.DS.'webroot'.DS;
            $this->lessFolder = new Folder($theme_path.'less');
            $this->cssFolder = new Folder($theme_path.'css');

      }

      public function css($file, $options = array()) {

            if (isset($options['theme']) and trim($options['theme'])) {
                  $this->set_theme($options['theme']);
            }

            if (is_array($file)) {
                  foreach ($file as $candidate) {
                        $source = $this->lessFolder->path.DS.$candidate.'.less';
                        $target = str_replace('.less', '.css', str_replace($this->lessFolder->path, $this->cssFolder->path, $source));
                        $this->auto_compile_less($source, $target);
                  }
            } else {
                  if (isset($options['plugin']) and trim($options['plugin'])){
                        $this->lessFolder= new Folder(APP.'Plugin'.DS.$options['plugin'].DS.'webroot'.DS.'less');
                  }
                  $source = $this->lessFolder->path.DS.$file.'.less';
                  $target = str_replace('.less', '.css', str_replace($this->lessFolder->path, $this->cssFolder->path, $source));
                  $this->auto_compile_less($source, $target);
            }
            echo $this->Html->css($file);
      }

      public function auto_compile_less($lessFilename, $cssFilename) {
            // Check if cache & output folders are writable and the less file exists.
            if (!is_writable(CACHE.'less')) {
                  trigger_error(__d('cake_dev', '"%s" directory is NOT writable.', CACHE.'less'), E_USER_NOTICE);
                  return;
            }
            if (file_exists($lessFilename) == false) {
                  trigger_error(__d('cake_dev', 'File: "%s" not found.', $lessFilename), E_USER_NOTICE);
                  return;
            }

            // Cache location
            $cacheFilename = CACHE.'less'.DS.str_replace('/', '_', str_replace($this->lessFolder->path, '', $lessFilename).".cache");

            // Load the cache
            if (file_exists($cacheFilename)) {
                  $cache = unserialize(file_get_contents($cacheFilename));
            } else {
                  $cache = $lessFilename;
            }

            $new_cache = Lessify::cexecute($cache);
            if (!is_array($cache) || $new_cache['updated'] > $cache['updated'] || file_exists($cssFilename) === false) {
                  $cssFile = new File($cssFilename, true);
                  if ($cssFile->write($new_cache['compiled']) === false) {
                        if (!is_writable(dirname($cssFilename))) {
                              trigger_error(__d('cake_dev', '"%s" directory is NOT writable.', dirname($cssFilename)), E_USER_NOTICE);
                        }
                        trigger_error(__d('cake_dev', 'Failed to write "%s"', $cssFilename), E_USER_NOTICE);
                  }

                  $cacheFile = new File($cacheFilename, true);
                  $cacheFile->write(serialize($new_cache));
            }
      }

}

Zerion Mini Shell 1.0