* @copyright 1997-2005 The PHP Group * @license http://www.gnu.org/copyleft/lesser.html LGPL * @version CVS: $Id: AddDirectory.php 2 2010-11-23 14:32:26Z oldperl $ * @link http://pear.php.net/package/File_Archive */ require_once "File/Archive/Reader/ChangeName.php"; /** * Add a directory to the public name of all the files of a reader * * Example: * If archive.tar is a file archive containing files a.txt and foo/b.txt * new File_Archive_Reader_ChangeName_AddDirectory('bar', * new File_Archive_Reader_Tar( * new File_Archive_Reader_File('archive.tar') * ) * ) is a reader containing files bar/a.txt and bar/foo/b.txt */ class File_Archive_Reader_ChangeName_AddDirectory extends File_Archive_Reader_ChangeName { var $baseName; function File_Archive_Reader_ChangeName_AddDirectory($baseName, &$source) { // see http://pear.php.net/bugs/bug.php?id=17046&edit=12&patch=AddDirectory.php.patch&revision=1264868437 // parent::File_Archive_Reader_ChangeName($source); parent::__construct($source); $this->baseName = $this->getStandardURL($baseName); } /** * Modify the name by adding baseName to it */ function modifyName($name) { return $this->baseName. (empty($this->baseName) || empty($name) ? '': '/'). $name; } /** * Remove baseName from the name * Return false if the name doesn't start with baseName */ function unmodifyName($name) { if (strncmp($name, $this->baseName.'/', strlen($this->baseName)+1) == 0) { $res = substr($name, strlen($this->baseName)+1); if ($res === false) { return ''; } else { return $res; } } else if (empty($this->baseName)) { return $name; } else if ($name == $this->baseName) { return ''; } else { return false; } } } ?>