#!/usr/bin/php description = "Make symlinks for Joomla extensions."; $parser->version = '$Id$'; // Arguments $parser->addArgument('source', array( 'description' => 'The source dir (usually from an IDE workspace)', 'help_name' => 'SOURCE' )); $parser->addArgument('target', array( 'description' => "the target dir (usually where a joomla installation resides)", 'help_name' => 'TARGET' )); // Parse input try { $result = $parser->parse(); $srcdir = realpath($result->args['source']); $tgtdir = realpath($result->args['target']); } catch (Exception $exc) { $parser->displayError($exc->getMessage()); die; } // Defines define('DS', DIRECTORY_SEPARATOR); define('SRCDIR', $srcdir); $srcdirs = array( SRCDIR.DS.'administrator'.DS.'components', SRCDIR.DS.'administrator'.DS.'language'.DS.'en-GB', SRCDIR.DS.'administrator'.DS.'modules', SRCDIR.DS.'components', SRCDIR.DS.'media', SRCDIR.DS.'language'.DS.'en-GB', SRCDIR.DS.'modules', SRCDIR.DS.'plugins'.DS.'authentication', SRCDIR.DS.'plugins'.DS.'content', SRCDIR.DS.'plugins'.DS.'editors', SRCDIR.DS.'plugins'.DS.'editors-xtd', SRCDIR.DS.'plugins'.DS.'search', SRCDIR.DS.'plugins'.DS.'system', SRCDIR.DS.'plugins'.DS.'user', SRCDIR.DS.'plugins'.DS.'xmlrpc', ); // Make symlinks foreach($srcdirs as $srcdir) { if(file_exists($srcdir)) { $it = new DirectoryIterator($srcdir); foreach (new IteratorIterator($it) as $src) { $filename = $src->getFilename(); $full = realpath($src->getPathName()); if (!$src->isDot() && $filename != '.svn') { $tgt = realpath($tgtdir.str_replace(SRCDIR, '', $srcdir)).DS.$filename; if(!is_link($tgt)) removeRessource($tgt); exec("ln -sf $full $tgt"); echo $full.PHP_EOL."\t--> $tgt".PHP_EOL; } } } } // Functions // SOURCE http://be2.php.net/manual/en/function.rmdir.php#86112 function removeRessource( $_target ) { //file? if( is_file($_target) ) { if( is_writable($_target) ) { if( @unlink($_target) ) { return true; } } return false; } //dir? if( is_dir($_target) ) { if( is_writeable($_target) ) { foreach( new DirectoryIterator($_target) as $_res ) { if( $_res->isDot() ) { unset($_res); continue; } if( $_res->isFile() ) { removeRessource( $_res->getPathName() ); } elseif( $_res->isDir() ) { removeRessource( $_res->getRealPath() ); } unset($_res); } if( @rmdir($_target) ) { return true; } } return false; } }