]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php
Added minify plugin
[quix0rs-gnu-social.git] / plugins / Minify / extlib / minify / min / lib / Minify / Controller / Version1.php
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php
new file mode 100644 (file)
index 0000000..1861aab
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Class Minify_Controller_Version1  
+ * @package Minify
+ */
+
+require_once 'Minify/Controller/Base.php';
+
+/**
+ * Controller class for emulating version 1 of minify.php
+ * 
+ * <code>
+ * Minify::serve('Version1');
+ * </code>
+ * 
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Controller_Version1 extends Minify_Controller_Base {
+    
+    /**
+     * 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
+                : '';
+            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'])
+            // verify at least one file, files are single comma separated, 
+            // and are all same extension
+            || ! preg_match('/^[^,]+\\.(css|js)(,[^,]+\\.\\1)*$/', $_GET['files'], $m)
+            // no "//" (makes URL rewriting easier)
+            || strpos($_GET['files'], '//') !== false
+            // no "\"
+            || strpos($_GET['files'], '\\') !== false
+            // no "./"
+            || 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 Minify_Source($srcOptions);
+            } else {
+                $hasBadSource = true;
+                break;
+            }
+        }
+        if ($hasBadSource) {
+            $this->sources = array();
+        }
+        if (! MINIFY_REWRITE_CSS_URLS) {
+            $options['rewriteCssUris'] = false;
+        }
+        return $options;
+    }
+    
+    private static function _setupDefines()
+    {
+        $defaults = array(
+            'MINIFY_BASE_DIR' => realpath($_SERVER['DOCUMENT_ROOT'])
+            ,'MINIFY_ENCODING' => 'utf-8'
+            ,'MINIFY_MAX_FILES' => 16
+            ,'MINIFY_REWRITE_CSS_URLS' => true
+            ,'MINIFY_USE_CACHE' => true
+        );
+        foreach ($defaults as $const => $val) {
+            if (! defined($const)) {
+                define($const, $val);
+            }
+        }
+    }
+}
+