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