<?php require_once("phing/tasks/system/CopyTask.php"); require_once(dirname(__FILE__)."/packer/class.JavaScriptPacker.php"); class PackerTask extends CopyTask { protected $filesets = array(); // all fileset objects assigned to this task /** * Nested creator, creates a FileSet for this task * * @access public * @return object The created fileset object */ function createFileSet() { $num = array_push($this->filesets, new FileSet()); return $this->filesets[$num-1]; } /** * Validates attributes coming in from XML * * @access private * @return void * @throws BuildException */ protected function validateAttributes() { if (count($this->filesets) === 0) throw new BuildException("PackerTask. Specify a fileset."); } public function init() { } public function pack($file) { $file = realpath($file); $home = dirname(__FILE__); $jar = realpath("$home/compiler.jar"); $java = "java"; exec("$java -version", &$output, &$result); if ($result != 0) throw new BuildException("Java not found."); // first we pack the file using DOJO shrinksafe $cmd = "$java -jar \"$jar\" --js=\"$file\" --js_output_file=\"$file.tmp\""; exec($cmd, &$output, &$result); if ($result != 0) throw new BuildException("Java error."); unlink($file); rename("$file.tmp", $file); // after DOJO, we use the Packer to tighten it up. $script = file_get_contents($file); $packer = new JavaScriptPacker($script, 62, true, false); $packed = $packer->pack(); file_put_contents($file, $packed); $this->log("$file packed.", Project::MSG_INFO); } public function main() { foreach($this->filesets as $fs) { $ds = $fs->getDirectoryScanner($this->project); $files = $ds->getIncludedFiles(); $dir = $fs->getDir($this->project); foreach($files as $file) $this->pack("$dir/$file"); } } }