1<?php 2/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ 3 4/** 5 * Add a directory to the public name of all the files of a reader 6 * 7 * PHP versions 4 and 5 8 * 9 * This library is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU Lesser General Public 11 * License as published by the Free Software Foundation; either 12 * version 2.1 of the License, or (at your option) any later version. 13 * 14 * This library is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with this library; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330,Boston,MA 02111-1307 USA 22 * 23 * @category File Formats 24 * @package File_Archive 25 * @author Vincent Lascaux <vincentlascaux@php.net> 26 * @copyright 1997-2005 The PHP Group 27 * @license http://www.gnu.org/copyleft/lesser.html LGPL 28 * @version CVS: $Id$ 29 * @link http://pear.php.net/package/File_Archive 30 */ 31 32require_once "File/Archive/Reader/ChangeName.php"; 33 34/** 35 * Change a directory name to another 36 * 37 * Example: 38 * If archive.tar is a file archive containing files a.txt and foo/b.txt 39 * new File_Archive_Reader_ChangeName_Directory('foo', 'bar' 40 * new File_Archive_Reader_Tar( 41 * new File_Archive_Reader_File('archive.tar') 42 * ) 43 * ) is a reader containing files a.txt and bar/b.txt 44 */ 45class File_Archive_Reader_ChangeName_Directory extends File_Archive_Reader_ChangeName 46{ 47 var $oldBaseName; 48 var $newBaseName; 49 50 function File_Archive_Reader_ChangeName_Directory 51 ($oldBaseName, $newBaseName, &$source) 52 { 53 parent::File_Archive_Reader_ChangeName($source); 54 $this->oldBaseName = $this->getStandardURL($oldBaseName); 55 if (substr($this->oldBaseName, -1) == '/') { 56 $this->oldBaseName = substr($this->oldBaseName, 0, -1); 57 } 58 59 $this->newBaseName = $this->getStandardURL($newBaseName); 60 if (substr($this->newBaseName, -1) == '/') { 61 $this->newBaseName = substr($this->newBaseName, 0, -1); 62 } 63 } 64 65 function modifyName($name) 66 { 67 if (empty($this->oldBaseName) || 68 !strncmp($name, $this->oldBaseName.'/', strlen($this->oldBaseName)+1) || 69 strcmp($name, $this->oldBaseName) == 0) { 70 return $this->newBaseName. 71 ( 72 empty($this->newBaseName) || 73 strlen($name)<=strlen($this->oldBaseName)+1 ? 74 '' : '/' 75 ). 76 substr($name, strlen($this->oldBaseName)+1); 77 } else { 78 return $name; 79 } 80 } 81 function unmodifyName($name) 82 { 83 if (empty($this->newBaseName) || 84 !strncmp($name, $this->newBaseName.'/', strlen($this->newBaseName)+1) || 85 strcmp($name, $this->newBaseName) == 0) { 86 return $this->oldBaseName. 87 ( 88 empty($this->oldBaseName) || 89 strlen($name)<=strlen($this->newBaseName)+1 ? 90 '' : '/' 91 ). 92 substr($name, strlen($this->newBaseName)+1); 93 } else { 94 return $name; 95 } 96 } 97} 98 99?>