/** * Cache Less asset files and retrieve cached asset files * @return array */ protected function cacheLessAssetFiles() { // Create tmp asset file \Zend\Stdlib\ErrorHandler::stop(true); $sTmpAssetFilePath = tempnam($this->getOptions()->getTmpDirPath(), ''); \Zend\Stdlib\ErrorHandler::start(); $oTmpAssetFile = new \AssetsBundle\AssetFile\AssetFile(array('asset_file_type' => \AssetsBundle\AssetFile\AssetFile::ASSET_LESS, 'asset_file_path' => $sTmpAssetFilePath)); if (file_exists($sTmpAssetFilePath)) { } // Retrieve Asset file cache manager; $oAssetFilesCacheManager = $this->getAssetFilesCacheManager(); // Production don't need to cache less asset file if ($this->getOptions()->isProduction()) { $oTmpAssetFile->setAssetFileType(\AssetsBundle\AssetFile\AssetFile::ASSET_CSS); } // Retrieve asset file cached if exists if (file_exists($sAssetFileCachedPath = $oAssetFilesCacheManager->getAssetFileCachePath($oTmpAssetFile))) { \Zend\Stdlib\ErrorHandler::start(); $iAssetFileCachedFilemtime = filemtime($sAssetFileCachedPath); \Zend\Stdlib\ErrorHandler::stop(true); } else { $iAssetFileCachedFilemtime = null; } // Build import less file \Zend\Stdlib\ErrorHandler::start(); $bIsUpdated = !$this->getAssetFilesConfiguration()->assetsConfigurationHasChanged(array(\AssetsBundle\AssetFile\AssetFile::ASSET_LESS)); foreach ($this->getAssetFilesConfiguration()->getAssetFiles(\AssetsBundle\AssetFile\AssetFile::ASSET_LESS) as $oAssetFile) { if ($iAssetFileCachedFilemtime && $bIsUpdated) { $bIsUpdated = $iAssetFileCachedFilemtime >= $oAssetFile->getAssetFileLastModified(); } $oTmpAssetFile->setAssetFileContents('@import "' . str_replace(array(getcwd(), DIRECTORY_SEPARATOR), array('', '/'), $oAssetFile->getAssetFilePath()) . '";' . PHP_EOL); } \Zend\Stdlib\ErrorHandler::stop(true); // If less file is updated return cached asset file if ($iAssetFileCachedFilemtime && $bIsUpdated) { return array($oTmpAssetFile->setAssetFilePath($sAssetFileCachedPath)->setAssetFileType(\AssetsBundle\AssetFile\AssetFile::ASSET_CSS)); } // Run less asset file filter $sAssetFileFilteredContent = $this->getAssetFileFiltersManager()->get(\AssetsBundle\AssetFile\AssetFile::ASSET_LESS)->filterAssetFile($oTmpAssetFile); // Set new content to temp asset file contents $oTmpAssetFile->setAssetFileContents($sAssetFileFilteredContent, false); // Development need to cache less asset file return array($this->getAssetFilesCacheManager()->cacheAssetFile($oTmpAssetFile)->setAssetFileType(\AssetsBundle\AssetFile\AssetFile::ASSET_CSS)); }
/** * @param array $aAssetFileOptions * @return \AssetsBundle\AssetFile\AssetFilesConfiguration * @throws \InvalidArgumentException */ public function addAssetFileFromOptions(array $aAssetFileOptions) { if (empty($aAssetFileOptions['asset_file_type'])) { throw new \InvalidArgumentException('Asset file type is empty'); } // Initialize asset file $oAssetFile = new \AssetsBundle\AssetFile\AssetFile(); $oAssetFile->setAssetFileType($aAssetFileOptions['asset_file_type']); unset($aAssetFileOptions['asset_file_type']); // Retrieve asset file path if (empty($aAssetFileOptions['asset_file_path'])) { throw new \InvalidArgumentException('Asset file path is empty'); } if (!is_string($aAssetFileOptions['asset_file_path'])) { throw new \InvalidArgumentException('Asset file path expects string, "' . gettype($aAssetFileOptions['asset_file_path']) . '" given'); } // Retrieve asset file realpath $sAssetRealPath = $this->getOptions()->getRealPath($aAssetFileOptions['asset_file_path']) ?: $aAssetFileOptions['asset_file_path']; if (is_dir($sAssetRealPath)) { foreach ($this->getAssetFilesPathFromDirectory($sAssetRealPath, $oAssetFile->getAssetFileType()) as $sChildAssetRealPath) { $oNewAssetFile = clone $oAssetFile; $this->addAssetFile($oNewAssetFile->setAssetFilePath($sChildAssetRealPath)); } return $this; } return $this->addAssetFile($oAssetFile->setAssetFilePath($sAssetRealPath)); }