* @copyright 1997-2005 The PHP Group * @license http://www.gnu.org/copyleft/lesser.html LGPL * @version CVS: $Id: Archive.php 2 2010-11-23 14:32:26Z oldperl $ * @link http://pear.php.net/package/File_Archive */ require_once "File/Archive/Writer.php"; /** * Base class for all the transformation writers that will generate one single * file */ class File_Archive_Writer_Archive extends File_Archive_Writer { /** * @var File_Archive_Writer The compressed data will be written to this * writer * @access protected */ var $innerWriter; /** * @var bool If true, the innerWriter will be closed when closing this * @access private */ var $autoClose; /** * @var Array List of empty folders that will be added when closing the archive */ var $emptyFolders = array(); /** * @param String $filename Name to give to the archive (the name will * be used by the inner writer) * If $filename is null, the innerWriter is considered already * opened (and thus newFile will not be called) * @param File_Archive_Writer $innerWriter The inner writer to which the * compressed data will be written * @param array $stat The stat of the archive (see the PHP stat() function). * No element are required in this array * @param bool $autoClose Indicate if the inner writer must be closed when * closing this */ function File_Archive_Writer_Archive($filename, &$innerWriter, $stat = array(), $autoClose = true) { $this->innerWriter =& $innerWriter; $this->autoClose = $autoClose; if ($filename !== null) { $this->innerWriter->newFile($filename, $stat, $this->getMime()); } } function newFile($filename, $stat = array(), $mime = 'application/octet-stream') { if (substr($filename, -1) == '/') { $this->emptyFolders[$filename] = array($stat, $mime); } else { // Remove the folders that may no longer be empty $current = ''; foreach (explode('/', $filename) as $folder) { $current .= $folder.'/'; unset($this->emptyFolders[$current]); } $err = $this->_newFile($filename, $stat, $mime); if (PEAR::isError($err)) { return $err; } } } //MUST REWRITE FUNCTIONS function _newFile($filename, $stat, $mime) {} /** * @return the MIME extension of the files generated by this writer */ function getMime() { return "application/octet-stream"; } /** * @see File_Archive_Writer::close() */ function close() { foreach ($this->emptyFolders as $folder => $info) { $err = $this->_newFile($folder, $info[0], $info[1]); if (PEAR::isError($err)) { return $err; } } if ($this->autoClose) { return $this->innerWriter->close(); } } // function writeData($data) //SHOULD REWRITE FUNCTIONS // function writeFile($filename) } ?>