/** * @param $inputFilename * @param null $outputFilename * * @return string * * @todo add typehinting */ public function compileFile($inputFilename, $outputFilename = null) { if (!$this->prepareEnvironment($inputFilename)) { return $inputFilename; } if ($outputFilename === null) { $outputFilename = PATH_site . $this->cachePath . basename($inputFilename); } $outputFilenamePathInfo = pathinfo($outputFilename); $noExtensionFilename = $outputFilename . '-' . hash('crc32b', $inputFilename) . '-' . hash('crc32b', serialize($this->overrides)) . '-' . hash('crc32b', filemtime($inputFilename)); $preparedFilename = $noExtensionFilename . '.' . $outputFilenamePathInfo['extension']; $cacheFilename = $noExtensionFilename . '.cache'; $outputFilename = $noExtensionFilename . '.css'; $this->inputFilename = $inputFilename; $this->outputFilename = $outputFilename; $this->cacheFilename = $cacheFilename; // exit if a precompiled version already exists if (file_exists($outputFilename) && (!ApplicationContext::isDevelopmentModeActive() && !$this->config['enableDebugMode'])) { return $outputFilename; } //write intermediate file, if the source has been changed, the rest is done by the cache management if (@filemtime($preparedFilename) < @filemtime($inputFilename) || $this->_checkIfCompileNeeded($inputFilename)) { file_put_contents($preparedFilename, $this->_prepareCompile(file_get_contents($inputFilename))); $fileContent = $this->_postCompile($this->_compileFile($inputFilename, $preparedFilename, $outputFilename, $cacheFilename)); if ($fileContent !== false) { file_put_contents($outputFilename, $fileContent); // important for some cache clearing scenarios if (file_exists($preparedFilename)) { unlink($preparedFilename); } } } return $outputFilename; }
/** * @return bool */ public static function isDevelopmentModeActive() { $applicationContext = new ApplicationContext(); return $applicationContext->isDevelopmentApplicationContext() || $applicationContext->isDevelopPresetActive(); }