 509f27e5c6
			
		
	
	
		509f27e5c6
		
	
	
	
	
		
			
			git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@59884 2327b42d-5241-43d6-9e2a-de5ac946f064
		
			
				
	
	
		
			336 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			336 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * PHPExcel
 | |
|  *
 | |
|  * Copyright (c) 2006 - 2010 PHPExcel
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 of the License, or (at your option) any later version.
 | |
|  * 
 | |
|  * This library is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * Lesser General Public License for more details.
 | |
|  * 
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | |
|  *
 | |
|  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
 | |
|  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
 | |
|  * @version    ##VERSION##, ##DATE##
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * This file creates a build of PHPExcel
 | |
|  */
 | |
| 
 | |
| // Build parameters
 | |
| $sVersion	= "";
 | |
| $sDate		= "";
 | |
| 
 | |
| // Read build parameters from STDIN
 | |
| $stdin = fopen("php://stdin", 'r');
 | |
| echo "PHPExcel build script\n";
 | |
| echo "---------------------\n";
 | |
| echo "Enter the version number you want to add to the build:\t\t\t";
 | |
| $sVersion	= rtrim(fread($stdin, 1024));
 | |
| 
 | |
| echo "Enter the date number you want to add to the build: (YYYY-MM-DD)\t";
 | |
| $sDate 		= rtrim(fread($stdin, 1024));
 | |
| 
 | |
| echo "\n\n";
 | |
| 
 | |
| // Specify paths and files to include
 | |
| $aFilesToInclude 	= array('../changelog.txt', '../install.txt', '../license.txt');
 | |
| $aPathsToInclude 	= array('../Classes', '../Tests', '../Documentation');
 | |
| $aIgnorePatterns 	= array('/\.svn/i', '/\.settings/i', '/\.project/i', '/\.projectOptions/i', '/\.cache/i', '/assets/i');
 | |
| $sClassPath		 	= '../Classes';
 | |
| $sPEARPath		 	= 'C:\php\5.2.9\pear';
 | |
| $sAPIDocumentation	= '../Documentation/API/';
 | |
| 
 | |
| // Create API documentation folder and tell to create documentation
 | |
| @mkdir($sAPIDocumentation);
 | |
| echo "Please, generate API documentation using phpDocumentor.\r\n";
 | |
| 
 | |
| $finished = '';
 | |
| while (strtolower($finished) != 'y') {
 | |
| 	$finished = '';
 | |
| 	echo "Has documentation generation finished? (y/n)\t";
 | |
| 	$finished	= rtrim(fread($stdin, 1024));
 | |
| }
 | |
| 
 | |
| echo "\n\n\n";
 | |
| 
 | |
| // Resulting file
 | |
| $strResultingFile = $sVersion . '.zip';
 | |
| 
 | |
| // Starting build
 | |
| echo date('H:i:s') . " Starting build...\n";
 | |
| 
 | |
| // Create new ZIP file and open it for writing
 | |
| echo date('H:i:s') . " Creating ZIP archive...\n";
 | |
| $objZip = new ZipArchive();
 | |
| 			
 | |
| // Try opening the ZIP file
 | |
| if ($objZip->open($strResultingFile, ZIPARCHIVE::OVERWRITE) !== true) {
 | |
| 	throw new Exeption("Could not open " . $strResultingFile . " for writing!");
 | |
| }
 | |
| 
 | |
| // Add files to include
 | |
| foreach ($aFilesToInclude as $strFile) {
 | |
| 	echo date('H:i:s') . " Adding file $strFile\n";
 | |
| 	addFileToZIP($strFile, $objZip, $sVersion, $sDate);
 | |
| }
 | |
| 
 | |
| // Add paths to include
 | |
| foreach ($aPathsToInclude as $strPath) {
 | |
| 	addPathToZIP($strPath, $objZip, $sVersion, $sDate);
 | |
| }
 | |
| 
 | |
| // Set archive comment...
 | |
| echo date('H:i:s') . " Set archive comment...\n";
 | |
| $objZip->setArchiveComment('PHPExcel - http://www.codeplex.com/PHPExcel');
 | |
| 
 | |
| // Close file
 | |
| echo date('H:i:s') . " Saving ZIP archive...\n";
 | |
| $objZip->close();
 | |
| 
 | |
| // Copy classes directory
 | |
| echo date('H:i:s') . " Copying class directory...\n";
 | |
| mkdir('./tmp');
 | |
| dircopy($sClassPath, './tmp');
 | |
| 
 | |
| // Create PEAR package.xml
 | |
| echo date('H:i:s') . " Creating PEAR package.xml...\n";
 | |
| $packageFile = file_get_contents('package.xml');
 | |
| $packageFile = replaceMetaData($packageFile, $sVersion, $sDate);
 | |
| 
 | |
| $packageFile = str_replace('##PEAR_DIR##', addPathToPEAR('./tmp', '', $sVersion, $sDate), $packageFile);
 | |
| $fh = fopen('./tmp/package.xml', 'w');
 | |
| fwrite($fh, $packageFile);
 | |
| fclose($fh);
 | |
| 
 | |
| // Create PEAR package
 | |
| echo date('H:i:s') . " Creating PEAR package...\n";
 | |
| echo shell_exec("$sPEARPath package ./tmp/package.xml");
 | |
| 
 | |
| // Wait a minute (TortoiseSVN on USB stick is slow!)
 | |
| echo date('H:i:s') . " Waiting...\n";
 | |
| sleep(120);
 | |
| 
 | |
| // Clean temporary files
 | |
| echo date('H:i:s') . " Cleaning temporary files...\n";
 | |
| unlink('./tmp/package.xml');
 | |
| rm('./tmp');
 | |
| 
 | |
| // Finished build
 | |
| echo date('H:i:s') . " Finished build!\n";
 | |
| fclose($stdin);
 | |
| 
 | |
| /**
 | |
|  * Add a specific path's files and folders to a ZIP object
 | |
|  *
 | |
|  * @param string 		$strPath		Path to add
 | |
|  * @param ZipArchive 	$objZip			ZipArchive object
 | |
|  * @param string		$strVersion		Version string
 | |
|  * @param string		$strDate		Date string
 | |
|  */
 | |
| function addPathToZIP($strPath, $objZip, $strVersion, $strDate) {
 | |
| 	global $aIgnorePatterns;
 | |
| 	
 | |
| 	echo date('H:i:s') . " Adding path $strPath...\n";
 | |
| 	
 | |
| 	$currentDir = opendir($strPath);
 | |
| 	while ($strFile = readdir($currentDir)) {
 | |
| 		if ($strFile != '.' && $strFile != '..') {
 | |
| 			if (is_file($strPath . '/' . $strFile)) {
 | |
| 				addFileToZIP($strPath . '/' . $strFile, $objZip, $strVersion, $strDate);
 | |
| 			} else if (is_dir($strPath . '/' . $strFile)) {
 | |
| 				if (!shouldIgnore($strFile)) {
 | |
| 					addPathToZIP( ($strPath . '/' . $strFile), $objZip, $strVersion, $strDate );
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Add a specific file to ZIP
 | |
|  *
 | |
|  * @param string 		$strFile		File to add
 | |
|  * @param ZipArchive 	$objZip			ZipArchive object
 | |
|  * @param string		$strVersion		Version string
 | |
|  * @param string		$strDate		Date string
 | |
|  */
 | |
| function addFileToZIP($strFile, $objZip, $strVersion, $strDate) {
 | |
| 	if (!shouldIgnore($strFile)) {
 | |
| 		$fileContents = file_get_contents($strFile);
 | |
| 		$fileContents = replaceMetaData($fileContents, $strVersion, $strDate);
 | |
| 		
 | |
| 		//$objZip->addFile($strFile, cleanFileName($strFile));
 | |
| 		$objZip->addFromString( cleanFileName($strFile), $fileContents );
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Cleanup a filename
 | |
|  *
 | |
|  * @param 	string	$strFile			Filename
 | |
|  * @return	string	Filename
 | |
|  */
 | |
| function cleanFileName($strFile) {
 | |
| 	 $strFile = str_replace('../', '', $strFile);
 | |
| 	 $strFile = str_replace('WINDOWS', '', $strFile);
 | |
| 	 
 | |
| 	 while (preg_match('/\/\//i', $strFile)) {
 | |
| 	 	$strFile = str_replace('//', '/', $strFile);
 | |
| 	 }
 | |
| 	 
 | |
| 	 return $strFile;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Replace metadata in string
 | |
|  *
 | |
|  * @param string 		$strString		String contents
 | |
|  * @param string		$strVersion		Version string
 | |
|  * @param string		$strDate		Date string
 | |
|  * @return string		String contents
 | |
|  */
 | |
| function replaceMetaData($strString, $strVersion, $strDate) {
 | |
| 	$strString = str_replace('##VERSION##', $strVersion, $strString);
 | |
| 	$strString = str_replace('##DATE##', $strDate, $strString);
 | |
| 	return $strString;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Add a specific path's files and folders to a PEAR dir list
 | |
|  *
 | |
|  * @param 	string 		$strPath		Path to add
 | |
|  * @param 	string 		$strPEAR		String containing PEAR dir definitions
 | |
|  * @param 	string		$strVersion		Version string
 | |
|  * @param 	string		$strDate		Date string
 | |
|  * @return 	string		String containing PEAR dir definitions
 | |
|  */
 | |
| function addPathToPEAR($strPath, $strPEAR, $strVersion, $strDate) {     
 | |
| 	global $aIgnorePatterns;
 | |
| 	  
 | |
| 	$currentDir = opendir($strPath);
 | |
| 	while ($strFile = readdir($currentDir)) {
 | |
| 		if ($strFile != '.' && $strFile != '..') {
 | |
| 			if (is_file($strPath . '/' . $strFile) && !preg_match('/package.xml/i', $strFile)) {
 | |
| 				$strPEAR .= addFileToPEAR($strPath . '/' . $strFile, '', $strVersion, $strDate);
 | |
| 			} else if (is_dir($strPath . '/' . $strFile)) {
 | |
| 				if (!shouldIgnore($strFile)) {
 | |
| 					$strPEAR .= '<dir name="' . $strFile . '">';
 | |
| 					$strPEAR .= addPathToPEAR( ($strPath . '/' . $strFile), '', $strVersion, $strDate );
 | |
| 					$strPEAR .= '</dir>';
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	return $strPEAR;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Add a specific file to a PEAR dir list
 | |
|  *
 | |
|  * @param 	string 		$strFile		File to add
 | |
|  * @param 	string 		$strPEAR		String containing PEAR dir definitions
 | |
|  * @param 	string		$strVersion		Version string
 | |
|  * @param 	string		$strDate		Date string
 | |
|  * @return 	string		String containing PEAR dir definitions
 | |
|  */
 | |
| function addFileToPEAR($strFile, $strPEAR, $strVersion, $strDate) {
 | |
| 	if (!shouldIgnore($strFile)) {
 | |
| 		$fileContents = file_get_contents($strFile);
 | |
| 		$fileContents = replaceMetaData($fileContents, $strVersion, $strDate);
 | |
| 		$fh = fopen($strFile, 'w');
 | |
| 		fwrite($fh, $fileContents);
 | |
| 		fclose($fh);
 | |
| 		
 | |
| 		$strPEAR .= '<file name="' . basename($strFile) . '" role="php" />';
 | |
| 		
 | |
| 		return $strPEAR;
 | |
| 	} else {
 | |
| 		return '';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Copy a complete directory
 | |
|  *
 | |
|  * @param  string	$srcdir		Source directory
 | |
|  * @param  string	$dstdir		Destination directory
 | |
|  * @return int		Number of copied files
 | |
|  */
 | |
| function dircopy($srcdir, $dstdir, $verbose = false) {	
 | |
|   $num = 0;
 | |
|   if(!is_dir($dstdir) && !shouldIgnore($dstdir)) mkdir($dstdir);
 | |
|   if($curdir = opendir($srcdir)) {
 | |
|     while($file = readdir($curdir)) {
 | |
|       if($file != '.' && $file != '..') {
 | |
|         $srcfile = $srcdir . '\\' . $file;
 | |
|         $dstfile = $dstdir . '\\' . $file;
 | |
|         if(is_file($srcfile)  && !shouldIgnore($srcfile)) {
 | |
|           if(is_file($dstfile)) $ow = filemtime($srcfile) - filemtime($dstfile); else $ow = 1;
 | |
|           if($ow > 0) {
 | |
|             if($verbose) echo "Copying '$srcfile' to '$dstfile'...";
 | |
|             if(copy($srcfile, $dstfile)) {
 | |
|               touch($dstfile, filemtime($srcfile)); $num++;
 | |
|               if($verbose) echo "OK\n";
 | |
|             }
 | |
|             else echo "Error: File '$srcfile' could not be copied!\n";
 | |
|           }                  
 | |
|         }
 | |
|         else if(is_dir($srcfile) && !shouldIgnore($srcfile)) {
 | |
|           $num += dircopy($srcfile, $dstfile, $verbose);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     closedir($curdir);
 | |
|   }
 | |
|   return $num;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * rm() -- Very Vigorously erase files and directories. Also hidden files !!!!
 | |
|  *
 | |
|  * @param $dir string
 | |
|  *                   be carefull to:
 | |
|  *                         if($obj=='.' || $obj=='..') continue;
 | |
|  *                    if not it will erase all the server...it happened to me ;)
 | |
|  *                     the function is permission dependent.    
 | |
|  */
 | |
| function rm($dir) {
 | |
|     if(!$dh = @opendir($dir)) return;
 | |
|     while (($obj = readdir($dh))) {
 | |
|         if($obj=='.' || $obj=='..') continue;
 | |
|         @chmod($dir.'/'.$obj, 0777);
 | |
|         if (!@unlink($dir.'/'.$obj)) rm($dir.'/'.$obj);
 | |
|     }
 | |
|    @rmdir($dir);
 | |
|    @shell_exec('rmdir /S /Q "' . $dir . '"');
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Should a file/folder be ignored?
 | |
|  *
 | |
|  * @param 	string	$pName
 | |
|  * @return 	boolean
 | |
|  */
 | |
| function shouldIgnore($pName = '') {
 | |
| 	global $aIgnorePatterns;
 | |
| 	
 | |
| 	$ignore = false;
 | |
| 	foreach ($aIgnorePatterns as $ignorePattern) {
 | |
| 		if (preg_match($ignorePattern, $pName)) {
 | |
| 			$ignore = true;
 | |
| 		}
 | |
| 	}
 | |
| 	return $ignore;
 | |
| } |