Пример #1
0
 /**
  * Compile a less file to css and add to css folder
  *
  * @param string $file                  Path to less file
  * @param string $media                 Media type
  * @param string $conditionalStylesheet Load condition for file
  *
  * @return void
  */
 public function addLessStylesheet($file, $media = 'all', $conditionalStylesheet = false)
 {
     $relPath = 'less/' . $file;
     $urlHelper = $this->getView()->plugin('url');
     $currentTheme = $this->themeInfo->findContainingTheme($relPath);
     $helperHome = $urlHelper('home');
     $home = APPLICATION_PATH . '/themes/' . $currentTheme . '/';
     $cssDirectory = $helperHome . 'themes/' . $currentTheme . '/css/less/';
     try {
         $less_files = [APPLICATION_PATH . '/themes/' . $currentTheme . '/' . $relPath => $cssDirectory];
         $themeParents = array_keys($this->themeInfo->getThemeInfo());
         $directories = [];
         foreach ($themeParents as $theme) {
             $directories[APPLICATION_PATH . '/themes/' . $theme . '/less/'] = $helperHome . 'themes/' . $theme . '/css/less/';
         }
         $css_file_name = \Less_Cache::Get($less_files, ['cache_dir' => $home . 'css/less/', 'cache_method' => false, 'compress' => true, 'import_dirs' => $directories, 'output' => str_replace('.less', '.css', $file)]);
         $this->prependStylesheet($cssDirectory . $css_file_name, $media, $conditionalStylesheet);
     } catch (\Exception $e) {
         error_log($e->getMessage());
         list($fileName, ) = explode('.', $file);
         $this->prependStylesheet($urlHelper('home') . "themes/{$currentTheme}/css/{$fileName}.css");
     }
 }
Пример #2
0
 /**
  * Initialize the theme.  This needs to be triggered as part of the dispatch
  * event.
  *
  * @throws \Exception
  * @return void
  */
 public function init()
 {
     // Determine the current theme:
     $currentTheme = $this->pickTheme($this->event->getRequest());
     // Determine theme options:
     $this->sendThemeOptionsToView();
     // Make sure the current theme is set correctly in the tools object:
     try {
         $this->tools->setTheme($currentTheme);
     } catch (\Exception $error) {
         // If an illegal value is passed in, the setter may throw an exception.
         // We should ignore it for now and throw it after we have set up the
         // theme (the setter will use a safe value instead of the illegal one).
     }
     // Using the settings we initialized above, actually configure the themes; we
     // need to do this even if there is an error, since we need a theme in order
     // to display an error message!
     $this->setUpThemes(array_reverse($this->tools->getThemeInfo()));
     // If we encountered an error loading theme settings, fail now.
     if (isset($error)) {
         throw new \Exception($error->getMessage());
     }
 }
Пример #3
0
 /**
  * Compile a LESS file inside a theme.
  *
  * @param string $theme Theme containing file
  * @param string $less  Relative path to LESS file
  *
  * @return void
  */
 protected function compileFile($theme, $less)
 {
     $parts = explode(':', $less);
     $less = $parts[0];
     $finalOutDir = $this->basePath . '/themes/' . $theme . '/css/';
     list($fileName, ) = explode('.', $less);
     $finalFile = $finalOutDir . $fileName . '.css';
     $this->logMessage("\tcompiling '" . $less . "' into '" . $finalFile . "'");
     $start = microtime(true);
     $directories = [];
     $info = new ThemeInfo($this->basePath . '/themes', $theme);
     foreach (array_keys($info->getThemeInfo()) as $curTheme) {
         $directories["{$this->basePath}/themes/{$curTheme}/less/"] = $this->fakePath . "themes/{$curTheme}/css/less";
     }
     $lessDir = $this->basePath . '/themes/' . $theme . '/less/';
     if (!file_exists($lessDir . $less)) {
         $this->logMessage("\t\t" . $lessDir . $less . ' does not exist; skipping.');
         return;
     }
     $outFile = \Less_Cache::Get([$lessDir . $less => $this->fakePath . "themes/{$theme}/css/less"], ['cache_dir' => $this->tempPath, 'cache_method' => 'php', 'compress' => true, 'import_dirs' => $directories]);
     $css = file_get_contents($this->tempPath . '/' . $outFile);
     if (!is_dir(dirname($finalFile))) {
         mkdir(dirname($finalFile));
     }
     file_put_contents($finalFile, $this->makeRelative($css, $less));
     $this->logMessage("\t\t" . (microtime(true) - $start) . ' sec');
 }