示例#1
0
文件: Data.php 项目: mygento/minify
 /**
  * Merge specified files into one
  *
  * By default will not merge, if there is already merged file exists and it
  * was modified after its components
  * If target file is specified, will attempt to write merged contents into it,
  * otherwise will return merged content
  * May apply callback to each file contents. Callback gets parameters:
  * (<existing system filename>, <file contents>)
  * May filter files by specified extension(s)
  * Returns false on error
  *
  * @param array $srcFiles
  * @param string|false $targetFile - file path to be written
  * @param bool $mustMerge
  * @param callback $beforeMergeCallback
  * @param array|string $extensionsFilter
  * @return bool|string
  */
 public function mergeFiles(array $srcFiles, $targetFile = false, $mustMerge = false, $beforeMergeCallback = null, $extensionsFilter = array())
 {
     $content_type = pathinfo($targetFile, PATHINFO_EXTENSION);
     if (!Mage::getStoreConfig('minify/general/enabled') || $content_type != 'css' && $content_type != 'js') {
         return parent::mergeFiles($srcFiles, $targetFile, $mustMerge, $beforeMergeCallback, $extensionsFilter);
     }
     if (!Mage::getStoreConfig('minify/general/' . $content_type)) {
         return parent::mergeFiles($srcFiles, $targetFile, $mustMerge, $beforeMergeCallback, $extensionsFilter);
     }
     try {
         $shouldMinify = $this->shouldMinify($mustMerge, $targetFile, $srcFiles);
         if ($shouldMinify) {
             $result = parent::mergeFiles($srcFiles, false, $mustMerge, $beforeMergeCallback, $extensionsFilter);
             Varien_Profiler::start('minify_file_' . $targetFile);
             switch ($content_type) {
                 case 'css':
                     $minifier = new MatthiasMullie\Minify\CSS($result);
                     break;
                 case 'js':
                     $minifier = new MatthiasMullie\Minify\JS($result);
                     break;
             }
             $minifier->minify($targetFile);
             Varien_Profiler::stop('minify_file_' . $targetFile);
         }
         return true;
     } catch (Exception $e) {
         Mage::logException($e);
     }
     return false;
 }
示例#2
0
 public function mergeFiles(array $srcFiles, $targetFile = false, $mustMerge = false, $beforeMergeCallback = null, $extensionsFilter = array(), $mimeType = null)
 {
     if (!Mage::helper('magefm_cdn')->isEnabled()) {
         return parent::mergeFiles($srcFiles, $targetFile, $mustMerge, $beforeMergeCallback, $extensionsFilter);
     }
     $targetPath = '/' . $targetFile;
     try {
         $cacheKey = 'magefm_cdn|' . $targetFile;
         if (Mage::app()->getCache()->load($cacheKey)) {
             return true;
         }
         // filter by extensions
         if ($extensionsFilter) {
             if (!is_array($extensionsFilter)) {
                 $extensionsFilter = array($extensionsFilter);
             }
             if (!empty($srcFiles)) {
                 foreach ($srcFiles as $key => $file) {
                     $fileExt = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                     if (!in_array($fileExt, $extensionsFilter)) {
                         unset($srcFiles[$key]);
                     }
                 }
             }
         }
         if (empty($srcFiles)) {
             // no translation intentionally
             throw new Exception('No files to compile.');
         }
         $data = '';
         foreach ($srcFiles as $file) {
             if (!file_exists($file)) {
                 continue;
             }
             $contents = file_get_contents($file) . "\n";
             if ($beforeMergeCallback && is_callable($beforeMergeCallback)) {
                 $contents = call_user_func($beforeMergeCallback, $file, $contents);
             }
             $data .= $contents;
         }
         if (!$data) {
             // no translation intentionally
             throw new Exception(sprintf("No content found in files:\n%s", implode("\n", $srcFiles)));
         }
         $storage = Mage::helper('magefm_cdn/storage');
         $storage->saveFileFromContent($targetPath, $data, $mimeType, true);
         Mage::app()->getCache()->save('1', $cacheKey, array('magefm_cdn'));
         return true;
     } catch (Exception $e) {
         die($e->getMessage());
     }
     return false;
 }
示例#3
0
 /**
  * Merge specified files into one
  *
  * By default will not merge, if there is already merged file exists and it
  * was modified after its components
  * If target file is specified, will attempt to write merged contents into it,
  * otherwise will return merged content
  * May apply callback to each file contents. Callback gets parameters:
  * (<existing system filename>, <file contents>)
  * May filter files by specified extension(s)
  * Returns false on error
  *
  * @param array $srcFiles
  * @param string|false $targetFile - file path to be written
  * @param bool $mustMerge
  * @param callback $beforeMergeCallback
  * @param array|string $extensionsFilter
  * @return bool|string
  */
 public function mergeFiles(array $srcFiles, $targetFile = false, $mustMerge = false, $beforeMergeCallback = null, $extensionsFilter = array())
 {
     if (!Mage::helper('uaudio_storage')->isEnabled()) {
         return parent::mergeFiles($srcFiles, $targetFile, $mustMerge, $beforeMergeCallback, $extensionsFilter);
     }
     $storageModel = Mage::getSingleton('core/file_storage')->getStorageModel();
     try {
         // check whether merger is required
         $shouldMerge = $mustMerge || !$targetFile;
         if (!$shouldMerge) {
             if (!$storageModel->fileExists($targetFile)) {
                 $shouldMerge = true;
             } else {
                 $targetMtime = $storageModel->getTimestamp($targetFile);
                 foreach ($srcFiles as $file) {
                     if (!file_exists($file) || @filemtime($file) > $targetMtime) {
                         $shouldMerge = true;
                         break;
                     }
                 }
             }
         }
         // merge contents into the file
         if ($shouldMerge) {
             if ($targetFile && !is_writeable(dirname($targetFile))) {
                 // no translation intentionally
                 throw new Exception(sprintf('Path %s is not writeable.', dirname($targetFile)));
             }
             // filter by extensions
             if ($extensionsFilter) {
                 if (!is_array($extensionsFilter)) {
                     $extensionsFilter = array($extensionsFilter);
                 }
                 if (!empty($srcFiles)) {
                     foreach ($srcFiles as $key => $file) {
                         $fileExt = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                         if (!in_array($fileExt, $extensionsFilter)) {
                             unset($srcFiles[$key]);
                         }
                     }
                 }
             }
             if (empty($srcFiles)) {
                 // no translation intentionally
                 throw new Exception('No files to compile.');
             }
             $data = '';
             foreach ($srcFiles as $file) {
                 if (!file_exists($file)) {
                     continue;
                 }
                 $contents = file_get_contents($file) . "\n";
                 if ($beforeMergeCallback && is_callable($beforeMergeCallback)) {
                     $contents = call_user_func($beforeMergeCallback, $file, $contents);
                 }
                 $data .= $contents;
             }
             if (!$data) {
                 // no translation intentionally
                 throw new Exception(sprintf("No content found in files:\n%s", implode("\n", $srcFiles)));
             }
             if ($targetFile) {
                 file_put_contents($targetFile, $data, LOCK_EX);
             } else {
                 return $data;
                 // no need to write to file, just return data
             }
         }
         return true;
         // no need in merger or merged into file successfully
     } catch (Exception $e) {
         Mage::logException($e);
     }
     return false;
 }