/**
  * Set up groups of files as sources
  * 
  * @param array $options controller and Minify options
  * @return array Minify options
  * 
  */
 public function setupSources($options)
 {
     self::_setupDefines();
     if (MINIFY_USE_CACHE) {
         $cacheDir = defined('MINIFY_CACHE_DIR') ? MINIFY_CACHE_DIR : '';
         Diglin_Minify::setCache($cacheDir);
     }
     $options['badRequestHeader'] = 'HTTP/1.0 404 Not Found';
     $options['contentTypeCharset'] = MINIFY_ENCODING;
     // The following restrictions are to limit the URLs that minify will
     // respond to. Ideally there should be only one way to reference a file.
     if (!isset($_GET['files']) || !preg_match('/^[^,]+\\.(css|js)(,[^,]+\\.\\1)*$/', $_GET['files'], $m) || strpos($_GET['files'], '//') !== false || strpos($_GET['files'], '\\') !== false || preg_match('/(?:^|[^\\.])\\.\\//', $_GET['files'])) {
         return $options;
     }
     $extension = $m[1];
     $files = explode(',', $_GET['files']);
     if (count($files) > MINIFY_MAX_FILES) {
         return $options;
     }
     // strings for prepending to relative/absolute paths
     $prependRelPaths = dirname($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR;
     $prependAbsPaths = $_SERVER['DOCUMENT_ROOT'];
     $sources = array();
     $goodFiles = array();
     $hasBadSource = false;
     $allowDirs = isset($options['allowDirs']) ? $options['allowDirs'] : MINIFY_BASE_DIR;
     foreach ($files as $file) {
         // prepend appropriate string for abs/rel paths
         $file = ($file[0] === '/' ? $prependAbsPaths : $prependRelPaths) . $file;
         // make sure a real file!
         $file = realpath($file);
         // don't allow unsafe or duplicate files
         if (parent::_fileIsSafe($file, $allowDirs) && !in_array($file, $goodFiles)) {
             $goodFiles[] = $file;
             $srcOptions = array('filepath' => $file);
             $this->sources[] = new Diglin_Minify_Source($srcOptions);
         } else {
             $hasBadSource = true;
             break;
         }
     }
     if ($hasBadSource) {
         $this->sources = array();
     }
     if (!MINIFY_REWRITE_CSS_URLS) {
         $options['rewriteCssUris'] = false;
     }
     return $options;
 }
Exemple #2
0
 /**
  * Compress JS files and write them to media/js folders
  * 
  * @param string $name
  * @param string|array $mergeCallback
  * @param bool $static
  * @return string
  */
 protected function _prepareJsCompression($name, $mergeCallback = null, $static = false)
 {
     $config = Mage::getStoreConfig('uioptimization/jscompression');
     $uiHelper = Mage::helper('uioptimization');
     $options = array();
     $info = $uiHelper->getCompressedInfo($name, 'js', $static);
     if (!isset($info['result']) || $info['result'] != false) {
         $info['result'] = true;
     }
     if (!file_exists($info['targetPathFile']) && $info['result'] || !Mage::getStoreConfigFlag('uioptimization/general/cronupdate') && $info['result'] && filemtime($info['orgskin_path']) > filemtime($info['targetPathFile'])) {
         switch ($config['type']) {
             case 'packer':
                 $minifier = 'Diglin_Minify_Packer';
                 $method = 'minify';
                 break;
             case 'yuicompressor':
                 $minifier = 'Diglin_Minify_YUICompressor';
                 $method = 'minifyJs';
                 Diglin_Minify_YUICompressor::$jarFile = Mage::getBaseDir('lib') . DS . 'Diglin' . DS . 'yuicompressor' . DS . 'yuicompressor.jar';
                 Diglin_Minify_YUICompressor::$tempDir = Mage::getBaseDir('tmp');
                 if (strlen($config['java_path']) > 0) {
                     Diglin_Minify_YUICompressor::$javaExecutable = $config['java_path'];
                 }
                 $options = array('minifierOptions' => array(Diglin_Minify::TYPE_JS => array('disable-optimizations' => $config['disable_alloptimisation'], 'preserve-semi' => $config['preserve_semic'], 'nomunge' => $config['minify_only'])));
                 break;
             case 'jsmin':
             default:
                 $minifier = 'Diglin_JSMin';
                 $method = 'minify';
                 break;
         }
         $options += array('quiet' => true, 'minifiers' => array(Diglin_Minify::TYPE_JS => array($minifier, $method)), 'files' => array($info['orgskin_path']), 'encodeMethod' => '');
         $results = Diglin_Minify::serve('Files', $options);
         if ($results['success']) {
             $io = new Diglin_Io_File();
             $info['result'] = $io->write($info['targetPathFile'], $results['content'], 0644);
         } else {
             $info['result'] = false;
         }
     }
     return $uiHelper->getResultPath($info, $mergeCallback);
 }
 /**
  * Return combined minified content for a set of sources
  *
  * No internal caching will be used and the content will not be HTTP encoded.
  * 
  * @param array $sources array of filepaths and/or Minify_Source objects
  * 
  * @param array $options (optional) array of options for serve. By default
  * these are already set: quiet = true, encodeMethod = '', lastModifiedTime = 0.
  * 
  * @return string
  */
 public static function combine($sources, $options = array())
 {
     $cache = self::$_cache;
     self::$_cache = null;
     $options = array_merge(array('files' => (array) $sources, 'quiet' => true, 'encodeMethod' => '', 'lastModifiedTime' => 0), $options);
     $out = self::serve('Files', $options);
     self::$_cache = $cache;
     return $out['content'];
 }