/**
  * 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));
 }