102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Class Minify_Build  
 | |
|  * @package Minify
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Maintain a single last modification time for a group of Minify sources to
 | |
|  * allow use of far off Expires headers in Minify.
 | |
|  * 
 | |
|  * <code>
 | |
|  * // in config file
 | |
|  * $groupSources = array(
 | |
|  *   'js' => array('file1.js', 'file2.js')
 | |
|  *   ,'css' => array('file1.css', 'file2.css', 'file3.css')
 | |
|  * )
 | |
|  * 
 | |
|  * // during HTML generation
 | |
|  * $jsBuild = new Minify_Build($groupSources['js']);
 | |
|  * $cssBuild = new Minify_Build($groupSources['css']);
 | |
|  * 
 | |
|  * $script = "<script type='text/javascript' src='"
 | |
|  *     . $jsBuild->uri('/min.php/js') . "'></script>";
 | |
|  * $link = "<link rel='stylesheet' type='text/css' href='"
 | |
|  *     . $cssBuild->uri('/min.php/css') . "'>";
 | |
|  * 
 | |
|  * // in min.php
 | |
|  * Minify::serve('Groups', array(
 | |
|  *   'groups' => $groupSources
 | |
|  *   ,'setExpires' => (time() + 86400 * 365)
 | |
|  * ));
 | |
|  * </code>
 | |
|  * 
 | |
|  * @package Minify
 | |
|  * @author Stephen Clay <steve@mrclay.org>
 | |
|  */
 | |
| class Minify_Build {
 | |
|     
 | |
|     /**
 | |
|      * Last modification time of all files in the build
 | |
|      * 
 | |
|      * @var int 
 | |
|      */
 | |
|     public $lastModified = 0;
 | |
|     
 | |
|     /**
 | |
|      * String to use as ampersand in uri(). Set this to '&' if
 | |
|      * you are not HTML-escaping URIs.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     public static $ampersand = '&';
 | |
|     
 | |
|     /**
 | |
|      * Get a time-stamped URI
 | |
|      * 
 | |
|      * <code>
 | |
|      * echo $b->uri('/site.js');
 | |
|      * // outputs "/site.js?1678242"
 | |
|      * 
 | |
|      * echo $b->uri('/scriptaculous.js?load=effects');
 | |
|      * // outputs "/scriptaculous.js?load=effects&1678242"
 | |
|      * </code>
 | |
|      *
 | |
|      * @param string $uri
 | |
|      * @param boolean $forceAmpersand (default = false) Force the use of ampersand to 
 | |
|      * append the timestamp to the URI.
 | |
|      * @return string
 | |
|      */
 | |
|     public function uri($uri, $forceAmpersand = false) {
 | |
|         $sep = ($forceAmpersand || strpos($uri, '?') !== false)
 | |
|             ? self::$ampersand
 | |
|             : '?';
 | |
|         return "{$uri}{$sep}{$this->lastModified}";
 | |
|     }
 | |
| 
 | |
| 	/**
 | |
|      * Create a build object
 | |
|      * 
 | |
|      * @param array $sources array of Minify_Source objects and/or file paths
 | |
|      * 
 | |
|      * @return null
 | |
|      */
 | |
|     public function __construct($sources) 
 | |
|     {
 | |
|         $max = 0;
 | |
|         foreach ((array)$sources as $source) {
 | |
|             if ($source instanceof Minify_Source) {
 | |
|                 $max = max($max, $source->lastModified);
 | |
|             } elseif (is_string($source)) {
 | |
|                 if (0 === strpos($source, '//')) {
 | |
|                     $source = $_SERVER['DOCUMENT_ROOT'] . substr($source, 1);
 | |
|                 }
 | |
|                 if (is_file($source)) {
 | |
|                     $max = max($max, filemtime($source));
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         $this->lastModified = $max;
 | |
|     }
 | |
| }
 | 
