00001 <?php 00002 /* 00003 * This file is part of NOALYSS. 00004 * 00005 * NOALYSS is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * NOALYSS is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with NOALYSS; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 */ 00019 00020 // Copyright Author Dany De Bontridder danydb@aevalys.eu 00021 00022 /*!\file 00023 * \brief extends the Zip object 00024 */ 00025 00026 class Zip_Extended extends ZipArchive 00027 { 00028 /** 00029 * Function to recursively add a directory, 00030 * sub-directories and files to a zip archive 00031 *@note 00032 * ODS format expect unix / instead of DIRECTORY_SEPARATOR 00033 * otherwise, new file can not be read by OpenOffice 00034 * see PHP Bug #48763 ZipArchive produces corrupt OpenOffice.org files 00035 */ 00036 function add_recurse_folder($dir,$zipdir='') 00037 { 00038 if (is_dir($dir)) 00039 { 00040 if ($dh = opendir($dir)) 00041 { 00042 // Loop through all the files 00043 $filenct = 0; 00044 while (($file = readdir($dh)) !== false) 00045 { 00046 //If it's a folder, run the function again! 00047 if(!is_file($dir . $file)) 00048 { 00049 // Skip parent and root directories 00050 if( ($file !== ".") && ($file !== "..")) 00051 { 00052 $this->add_recurse_folder($dir . $file . '/', $zipdir . $file . '/'); 00053 } 00054 } 00055 else 00056 { 00057 // Add the files 00058 $this->addFile($dir . $file, $zipdir . $file); 00059 $filenct +=1; 00060 } 00061 } 00062 //Add the directory when folder was empty 00063 if( (!empty($zipdir)) && ($filenct==0)) 00064 { 00065 // remove directory separator before addEmptyDir 00066 // otherwhisen create double folder in zip 00067 $this->addEmptyDir(substr($zipdir, 0, -1)); 00068 } 00069 } 00070 } 00071 } 00072 00073 }