diff -r 877f952ae2bd -r 6b6c2214f778 web/lib/Zend/Service/WindowsAzure/CommandLine/PackageScaffolder/PackageScaffolderAbstract.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Service/WindowsAzure/CommandLine/PackageScaffolder/PackageScaffolderAbstract.php Thu Mar 21 19:52:38 2013 +0100 @@ -0,0 +1,249 @@ +deleteDirectory($path); + $phar->extractTo($path); + @unlink($path . '/index.php'); + @unlink($path . '/build.bat'); + $this->copyDirectory($path . '/resources', $path, false); + $this->deleteDirectory($path . '/resources'); + } + + /** + * Apply file transforms. + * + * @param string $rootPath Root path. + * @param array $values Key/value array. + */ + protected function applyTransforms($rootPath, $values) + { + if (is_null($rootPath) || !is_string($rootPath) || empty($rootPath)) { + throw new InvalidArgumentException("Undefined \"rootPath\""); + } + + if (is_dir($rootPath)) { + $d = dir($rootPath); + while ( false !== ( $entry = $d->read() ) ) { + if ( $entry == '.' || $entry == '..' ) { + continue; + } + $entry = $rootPath . '/' . $entry; + + $this->applyTransforms($entry, $values); + } + $d->close(); + } else { + $contents = file_get_contents($rootPath); + foreach ($values as $key => $value) { + $contents = str_replace('$' . $key . '$', $value, $contents); + } + file_put_contents($rootPath, $contents); + } + + return true; + } + + /** + * Create directory + * + * @param string $path Path of directory to create. + * @param boolean $abortIfExists Abort if directory exists. + * @param boolean $recursive Create parent directories if not exist. + * + * @return boolean + */ + protected function createDirectory($path, $abortIfExists = true, $recursive = true) { + if (is_null($path) || !is_string($path) || empty($path)) { + throw new InvalidArgumentException ("Undefined \"path\"" ); + } + + if (is_dir($path) && $abortIfExists) { + return false; + } + + if (is_dir($path) ) { + @chmod($path, '0777'); + if (!self::deleteDirectory($path) ) { + throw new RuntimeException("Failed to delete \"{$path}\"."); + } + } + + if (!mkdir($path, '0777', $recursive) || !is_dir($path)) { + throw new RuntimeException( "Failed to create directory \"{$path}\"." ); + } + + return true; + } + + /** + * Fully copy a source directory to a target directory. + * + * @param string $sourcePath Source directory + * @param string $destinationPath Target directory + * @param boolean $abortIfExists Query re-creating target directory if exists + * @param octal $mode Changes access mode + * + * @return boolean + */ + protected function copyDirectory($sourcePath, $destinationPath, $abortIfExists = true, $mode = '0777') { + if (is_null($sourcePath) || !is_string($sourcePath) || empty($sourcePath)) { + throw new InvalidArgumentException("Undefined \"sourcePath\""); + } + + if (is_null($destinationPath) || !is_string($destinationPath) || empty($destinationPath)) { + throw new InvalidArgumentException("Undefined \"destinationPath\""); + } + + if (is_dir($destinationPath) && $abortIfExists) { + return false; + } + + if (is_dir($sourcePath)) { + if (!is_dir($destinationPath) && !mkdir($destinationPath, $mode)) { + throw new RuntimeException("Failed to create target directory \"{$destinationPath}\"" ); + } + $d = dir($sourcePath); + while ( false !== ( $entry = $d->read() ) ) { + if ( $entry == '.' || $entry == '..' ) { + continue; + } + $strSourceEntry = $sourcePath . '/' . $entry; + $strTargetEntry = $destinationPath . '/' . $entry; + if (is_dir($strSourceEntry) ) { + $this->copyDirectory( + $strSourceEntry, + $strTargetEntry, + false, + $mode + ); + continue; + } + if (!copy($strSourceEntry, $strTargetEntry) ) { + throw new RuntimeException ( + "Failed to copy" + . " file \"{$strSourceEntry}\"" + . " to \"{$strTargetEntry}\"" + ); + } + } + $d->close(); + } else { + if (!copy($sourcePath, $destinationPath)) { + throw new RuntimeException ( + "Failed to copy" + . " file \"{$sourcePath}\"" + . " to \"{$destinationPath}\"" + + ); + } + } + + return true; + } + + /** + * Delete directory and all of its contents; + * + * @param string $path Directory path + * @return boolean + */ + protected function deleteDirectory($path) + { + if (is_null($path) || !is_string($path) || empty($path)) { + throw new InvalidArgumentException( "Undefined \"path\"" ); + } + + $handleDir = false; + if (is_dir($path) ) { + $handleDir = @opendir($path); + } + if (!$handleDir) { + return false; + } + @chmod($path, 0777); + while ($file = readdir($handleDir)) { + if ($file == '.' || $file == '..') { + continue; + } + + $fsEntity = $path . "/" . $file; + + if (is_dir($fsEntity)) { + $this->deleteDirectory($fsEntity); + continue; + } + + if (is_file($fsEntity)) { + @unlink($fsEntity); + continue; + } + + throw new LogicException ( + "Unexpected file type: \"{$fsEntity}\"" + ); + } + + @chmod($path, 0777); + closedir($handleDir); + @rmdir($path); + + return true; + } +}