|  |  |  | @ -14,6 +14,20 @@ use yii\console\Controller; | 
			
		
	
		
			
				
					|  |  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  |  |  * This command allows you to combine and compress your JavaScript and CSS files. | 
			
		
	
		
			
				
					|  |  |  |  |  * | 
			
		
	
		
			
				
					|  |  |  |  |  * Usage: | 
			
		
	
		
			
				
					|  |  |  |  |  * 1. Create a configuration file using 'template' action: | 
			
		
	
		
			
				
					|  |  |  |  |  *    yii asset/template /path/to/myapp/config.php | 
			
		
	
		
			
				
					|  |  |  |  |  * 2. Edit the created config file, adjusting it for your web application needs. | 
			
		
	
		
			
				
					|  |  |  |  |  * 3. Run the 'compress' action, using created config: | 
			
		
	
		
			
				
					|  |  |  |  |  *    yii asset /path/to/myapp/config.php /path/to/myapp/config/assets_compressed.php | 
			
		
	
		
			
				
					|  |  |  |  |  * 4. Adjust your web application config to use compressed assets. | 
			
		
	
		
			
				
					|  |  |  |  |  * | 
			
		
	
		
			
				
					|  |  |  |  |  * Note: in the console environment some path aliases like '@wwwroot' and '@www' may not exist, | 
			
		
	
		
			
				
					|  |  |  |  |  * so corresponding paths inside the configuration should be specified directly. | 
			
		
	
		
			
				
					|  |  |  |  |  * | 
			
		
	
		
			
				
					|  |  |  |  |  * Note: by default this command relies on an external tools to perform actual files compression, | 
			
		
	
		
			
				
					|  |  |  |  |  * check [[jsCompressor]] and [[cssCompressor]] for more details. | 
			
		
	
		
			
				
					|  |  |  |  |  * | 
			
		
	
		
			
				
					|  |  |  |  |  * @property array|\yii\web\AssetManager $assetManager asset manager, which will be used for assets processing. | 
			
		
	
		
			
				
					|  |  |  |  |  * | 
			
		
	
		
			
				
					|  |  |  |  |  * @author Qiang Xue <qiang.xue@gmail.com> | 
			
		
	
	
		
			
				
					|  |  |  | @ -43,7 +57,7 @@ class AssetController extends Controller | 
			
		
	
		
			
				
					|  |  |  |  | 	 * ~~~ | 
			
		
	
		
			
				
					|  |  |  |  | 	 * 'all' => array( | 
			
		
	
		
			
				
					|  |  |  |  | 	 *     'css' => 'all.css', | 
			
		
	
		
			
				
					|  |  |  |  | 	 *     'js' => 'js.css', | 
			
		
	
		
			
				
					|  |  |  |  | 	 *     'js' => 'all.js', | 
			
		
	
		
			
				
					|  |  |  |  | 	 *     'depends' => array( ... ), | 
			
		
	
		
			
				
					|  |  |  |  | 	 * ) | 
			
		
	
		
			
				
					|  |  |  |  | 	 * ~~~ | 
			
		
	
	
		
			
				
					|  |  |  | @ -57,7 +71,7 @@ class AssetController extends Controller | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	private $_assetManager = array(); | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @var string|callback Java Script file compressor. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @var string|callback JavaScript file compressor. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * If a string, it is treated as shell command template, which should contain | 
			
		
	
		
			
				
					|  |  |  |  | 	 * placeholders {from} - source file name - and {to} - output file name. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Otherwise, it is treated as PHP callback, which should perform the compression. | 
			
		
	
	
		
			
				
					|  |  |  | @ -159,7 +173,7 @@ class AssetController extends Controller | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->getAssetManager(); // check asset manager configuration | 
			
		
	
		
			
				
					|  |  |  |  | 		$this->getAssetManager(); // check if asset manager configuration is correct | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
	
		
			
				
					|  |  |  | @ -308,7 +322,7 @@ class AssetController extends Controller | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Builds output asset bundle. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param \yii\web\AssetBundle $target output asset bundle | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param string $type either "js" or "css". | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param string $type either 'js' or 'css'. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param \yii\web\AssetBundle[] $bundles source asset bundles. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param integer $timestamp current timestamp. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @throws Exception on failure. | 
			
		
	
	
		
			
				
					|  |  |  | @ -420,24 +434,23 @@ class AssetController extends Controller | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		$array = var_export($array, true); | 
			
		
	
		
			
				
					|  |  |  |  | 		$version = date('Y-m-d H:i:s', time()); | 
			
		
	
		
			
				
					|  |  |  |  | 		$bytesWritten = file_put_contents($bundleFile, <<<EOD | 
			
		
	
		
			
				
					|  |  |  |  | 		$bundleFileContent = <<<EOD | 
			
		
	
		
			
				
					|  |  |  |  | <?php | 
			
		
	
		
			
				
					|  |  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  |  |  * This file is generated by the "yii script" command. | 
			
		
	
		
			
				
					|  |  |  |  |  * This file is generated by the "yii {$this->id}" command. | 
			
		
	
		
			
				
					|  |  |  |  |  * DO NOT MODIFY THIS FILE DIRECTLY. | 
			
		
	
		
			
				
					|  |  |  |  |  * @version $version | 
			
		
	
		
			
				
					|  |  |  |  |  * @version {$version} | 
			
		
	
		
			
				
					|  |  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  |  | return $array; | 
			
		
	
		
			
				
					|  |  |  |  | EOD | 
			
		
	
		
			
				
					|  |  |  |  | 		); | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($bytesWritten <= 0) { | 
			
		
	
		
			
				
					|  |  |  |  | return {$array}; | 
			
		
	
		
			
				
					|  |  |  |  | EOD; | 
			
		
	
		
			
				
					|  |  |  |  | 		if (!file_put_contents($bundleFile, $bundleFileContent)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			throw new Exception("Unable to write output bundle configuration at '{$bundleFile}'."); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		echo "Output bundle configuration created at '{$bundleFile}'.\n"; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Compresses given Java Script files and combines them into the single one. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Compresses given JavaScript files and combines them into the single one. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param array $inputFiles list of source file names. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param string $outputFile output file name. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @throws \yii\console\Exception on failure | 
			
		
	
	
		
			
				
					|  |  |  | @ -495,9 +508,10 @@ EOD | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Combines Java Script files into a single one. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Combines JavaScript files into a single one. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param array $inputFiles source file names. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param string $outputFile output file name. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @throws \yii\console\Exception on failure. | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	public function combineJsFiles($inputFiles, $outputFile) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
	
		
			
				
					|  |  |  | @ -507,13 +521,16 @@ EOD | 
			
		
	
		
			
				
					|  |  |  |  | 				. file_get_contents($file) | 
			
		
	
		
			
				
					|  |  |  |  | 				. "/*** END FILE: $file ***/\n"; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		file_put_contents($outputFile, $content); | 
			
		
	
		
			
				
					|  |  |  |  | 		if (!file_put_contents($outputFile, $content)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			throw new Exception("Unable to write output JavaScript file '{$outputFile}'."); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Combines CSS files into a single one. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param array $inputFiles source file names. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param string $outputFile output file name. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @throws \yii\console\Exception on failure. | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	public function combineCssFiles($inputFiles, $outputFile) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
	
		
			
				
					|  |  |  | @ -523,7 +540,9 @@ EOD | 
			
		
	
		
			
				
					|  |  |  |  | 				. $this->adjustCssUrl(file_get_contents($file), dirname($file), dirname($outputFile)) | 
			
		
	
		
			
				
					|  |  |  |  | 				. "/*** END FILE: $file ***/\n"; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		file_put_contents($outputFile, $content); | 
			
		
	
		
			
				
					|  |  |  |  | 		if (!file_put_contents($outputFile, $content)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			throw new Exception("Unable to write output CSS file '{$outputFile}'."); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
	
		
			
				
					|  |  |  | @ -590,18 +609,23 @@ EOD | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  |  | 	 * Creates template of configuration file for [[actionCompress]]. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @param string $configFile output file name. | 
			
		
	
		
			
				
					|  |  |  |  | 	 * @throws \yii\console\Exception on failure. | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	public function actionTemplate($configFile) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		$template = <<<EOD | 
			
		
	
		
			
				
					|  |  |  |  | <?php | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  |  |  * Configuration file for the "yii asset" console command. | 
			
		
	
		
			
				
					|  |  |  |  |  * Note: in the console environment some path aliases like '@wwwroot' and '@www' may not exist, | 
			
		
	
		
			
				
					|  |  |  |  |  * so corresponding paths should be specified directly. | 
			
		
	
		
			
				
					|  |  |  |  |  */ | 
			
		
	
		
			
				
					|  |  |  |  | return array( | 
			
		
	
		
			
				
					|  |  |  |  | 	// | 
			
		
	
		
			
				
					|  |  |  |  | 	// The list of asset bundles to compress: | 
			
		
	
		
			
				
					|  |  |  |  | 	'bundles' => require('path/to/bundles.php'), | 
			
		
	
		
			
				
					|  |  |  |  | 	// | 
			
		
	
		
			
				
					|  |  |  |  | 	// The list of extensions to compress: | 
			
		
	
		
			
				
					|  |  |  |  | 	'extensions' => require('path/to/namespaces.php'), | 
			
		
	
		
			
				
					|  |  |  |  | 	// | 
			
		
	
		
			
				
					|  |  |  |  | 	// Asset bundle for compression output: | 
			
		
	
		
			
				
					|  |  |  |  | 	'targets' => array( | 
			
		
	
		
			
				
					|  |  |  |  | 		'all' => array( | 
			
		
	
		
			
				
					|  |  |  |  | 			'basePath' => __DIR__, | 
			
		
	
	
		
			
				
					|  |  |  | @ -610,7 +634,7 @@ return array( | 
			
		
	
		
			
				
					|  |  |  |  | 			'css' => 'all-{ts}.css', | 
			
		
	
		
			
				
					|  |  |  |  | 		), | 
			
		
	
		
			
				
					|  |  |  |  | 	), | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// Asset manager configuration: | 
			
		
	
		
			
				
					|  |  |  |  | 	'assetManager' => array( | 
			
		
	
		
			
				
					|  |  |  |  | 		'basePath' => __DIR__, | 
			
		
	
		
			
				
					|  |  |  |  | 		'baseUrl' => '/test', | 
			
		
	
	
		
			
				
					|  |  |  | @ -622,9 +646,8 @@ EOD; | 
			
		
	
		
			
				
					|  |  |  |  | 				return; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		$bytesWritten = file_put_contents($configFile, $template); | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($bytesWritten<=0) { | 
			
		
	
		
			
				
					|  |  |  |  | 			echo "Error: unable to write file '{$configFile}'!\n\n"; | 
			
		
	
		
			
				
					|  |  |  |  | 		if (!file_put_contents($configFile, $template)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			throw new Exception("Unable to write template file '{$configFile}'."); | 
			
		
	
		
			
				
					|  |  |  |  | 		} else { | 
			
		
	
		
			
				
					|  |  |  |  | 			echo "Configuration file template created at '{$configFile}'.\n\n"; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
	
		
			
				
					|  |  |  | 
 |