| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | /** | 
					
						
							|  |  |  |  * PHPExcel | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (c) 2006 - 2012 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 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category   PHPExcel | 
					
						
							|  |  |  |  * @package    PHPExcel | 
					
						
							|  |  |  |  * @copyright  Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel) | 
					
						
							|  |  |  |  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL | 
					
						
							|  |  |  |  * @version    ##VERSION##, ##DATE##
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  |  * PHPExcel_CachedObjectStorageFactory | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  |  * @category	PHPExcel | 
					
						
							|  |  |  |  * @package		PHPExcel_CachedObjectStorage | 
					
						
							|  |  |  |  * @copyright	Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel) | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | class PHPExcel_CachedObjectStorageFactory | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	const cache_in_memory				= 'Memory'; | 
					
						
							|  |  |  | 	const cache_in_memory_gzip			= 'MemoryGZip'; | 
					
						
							|  |  |  | 	const cache_in_memory_serialized	= 'MemorySerialized'; | 
					
						
							| 
									
										
										
										
											2011-12-05 23:41:49 +00:00
										 |  |  | 	const cache_igbinary				= 'Igbinary'; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	const cache_to_discISAM				= 'DiscISAM'; | 
					
						
							|  |  |  | 	const cache_to_apc					= 'APC'; | 
					
						
							|  |  |  | 	const cache_to_memcache				= 'Memcache'; | 
					
						
							|  |  |  | 	const cache_to_phpTemp				= 'PHPTemp'; | 
					
						
							|  |  |  | 	const cache_to_wincache				= 'Wincache'; | 
					
						
							| 
									
										
										
										
											2011-12-03 00:24:44 +00:00
										 |  |  | 	const cache_to_sqlite				= 'SQLite'; | 
					
						
							|  |  |  | 	const cache_to_sqlite3				= 'SQLite3'; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Name of the method used for cell cacheing | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @var string | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	private static $_cacheStorageMethod = NULL; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Name of the class used for cell cacheing | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @var string | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	private static $_cacheStorageClass = NULL; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * List of all possible cache storage methods | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @var string[] | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	private static $_storageMethods = array( | 
					
						
							|  |  |  | 		self::cache_in_memory, | 
					
						
							|  |  |  | 		self::cache_in_memory_gzip, | 
					
						
							|  |  |  | 		self::cache_in_memory_serialized, | 
					
						
							| 
									
										
										
										
											2011-12-05 23:41:49 +00:00
										 |  |  | 		self::cache_igbinary, | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		self::cache_to_phpTemp, | 
					
						
							|  |  |  | 		self::cache_to_discISAM, | 
					
						
							|  |  |  | 		self::cache_to_apc, | 
					
						
							|  |  |  | 		self::cache_to_memcache, | 
					
						
							|  |  |  | 		self::cache_to_wincache, | 
					
						
							| 
									
										
										
										
											2011-12-03 00:24:44 +00:00
										 |  |  | 		self::cache_to_sqlite, | 
					
						
							|  |  |  | 		self::cache_to_sqlite3, | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Default arguments for each cache storage method | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @var array of mixed array | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	private static $_storageMethodDefaultParameters = array( | 
					
						
							|  |  |  | 		self::cache_in_memory				=> array( | 
					
						
							|  |  |  | 													), | 
					
						
							|  |  |  | 		self::cache_in_memory_gzip			=> array( | 
					
						
							|  |  |  | 													), | 
					
						
							|  |  |  | 		self::cache_in_memory_serialized	=> array( | 
					
						
							|  |  |  | 													), | 
					
						
							| 
									
										
										
										
											2011-12-05 23:41:49 +00:00
										 |  |  | 		self::cache_igbinary				=> array( | 
					
						
							|  |  |  | 													), | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		self::cache_to_phpTemp				=> array( 'memoryCacheSize'	=> '1MB' | 
					
						
							|  |  |  | 													), | 
					
						
							| 
									
										
										
										
											2011-10-26 16:16:43 +00:00
										 |  |  | 		self::cache_to_discISAM				=> array( 'dir'				=> NULL | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 													), | 
					
						
							|  |  |  | 		self::cache_to_apc					=> array( 'cacheTime'		=> 600 | 
					
						
							|  |  |  | 													), | 
					
						
							|  |  |  | 		self::cache_to_memcache				=> array( 'memcacheServer'	=> 'localhost', | 
					
						
							|  |  |  | 													  'memcachePort'	=> 11211, | 
					
						
							|  |  |  | 													  'cacheTime'		=> 600 | 
					
						
							|  |  |  | 													), | 
					
						
							|  |  |  | 		self::cache_to_wincache				=> array( 'cacheTime'		=> 600 | 
					
						
							| 
									
										
										
										
											2011-12-03 00:24:44 +00:00
										 |  |  | 													), | 
					
						
							|  |  |  | 		self::cache_to_sqlite				=> array( | 
					
						
							|  |  |  | 													), | 
					
						
							|  |  |  | 		self::cache_to_sqlite3				=> array( | 
					
						
							|  |  |  | 													), | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Arguments for the active cache storage method | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @var array of mixed array | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	private static $_storageMethodParameters = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Return the current cache storage method | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @return string|NULL | 
					
						
							|  |  |  | 	 **/ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	public static function getCacheStorageMethod() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-01-25 23:07:22 +00:00
										 |  |  | 		if (self::$_cacheStorageMethod !== NULL) { | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 			return self::$_cacheStorageMethod; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	}	//	function getCacheStorageMethod()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Return the current cache storage class | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @return PHPExcel_CachedObjectStorage_ICache|NULL | 
					
						
							|  |  |  | 	 **/ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	public static function getCacheStorageClass() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-01-25 23:07:22 +00:00
										 |  |  | 		if (self::$_cacheStorageClass !== NULL) { | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 			return self::$_cacheStorageClass; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	}	//	function getCacheStorageClass()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Return the list of all possible cache storage methods | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @return string[] | 
					
						
							|  |  |  | 	 **/ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	public static function getAllCacheStorageMethods() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		return self::$_storageMethods; | 
					
						
							|  |  |  | 	}	//	function getCacheStorageMethods()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Return the list of all available cache storage methods | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @return string[] | 
					
						
							|  |  |  | 	 **/ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	public static function getCacheStorageMethods() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2011-12-09 12:10:46 +00:00
										 |  |  | 		$activeMethods = array(); | 
					
						
							|  |  |  | 		foreach(self::$_storageMethods as $storageMethod) { | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 			$cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $storageMethod; | 
					
						
							|  |  |  | 			if (call_user_func(array($cacheStorageClass, 'cacheMethodIsAvailable'))) { | 
					
						
							| 
									
										
										
										
											2011-12-09 12:10:46 +00:00
										 |  |  | 				$activeMethods[] = $storageMethod; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return $activeMethods; | 
					
						
							|  |  |  | 	}	//	function getCacheStorageMethods()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Identify the cache storage method to use | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param	string			$method		Name of the method to use for cell cacheing | 
					
						
							|  |  |  | 	 * @param	array of mixed	$arguments	Additional arguments to pass to the cell caching class | 
					
						
							|  |  |  | 	 *										when instantiating | 
					
						
							|  |  |  | 	 * @return boolean | 
					
						
							|  |  |  | 	 **/ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	public static function initialize($method = self::cache_in_memory, $arguments = array()) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		if (!in_array($method,self::$_storageMethods)) { | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 			return FALSE; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 12:10:46 +00:00
										 |  |  | 		$cacheStorageClass = 'PHPExcel_CachedObjectStorage_'.$method; | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 		if (!call_user_func(array( $cacheStorageClass, | 
					
						
							|  |  |  | 								   'cacheMethodIsAvailable'))) { | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 			return FALSE; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		self::$_storageMethodParameters[$method] = self::$_storageMethodDefaultParameters[$method]; | 
					
						
							|  |  |  | 		foreach($arguments as $k => $v) { | 
					
						
							|  |  |  | 			if (isset(self::$_storageMethodParameters[$method][$k])) { | 
					
						
							|  |  |  | 				self::$_storageMethodParameters[$method][$k] = $v; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-25 23:07:22 +00:00
										 |  |  | 		if (self::$_cacheStorageMethod === NULL) { | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 			self::$_cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $method; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 			self::$_cacheStorageMethod = $method; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 		return TRUE; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	}	//	function initialize()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Initialise the cache storage | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param	PHPExcel_Worksheet 	$parent		Enable cell caching for this worksheet | 
					
						
							|  |  |  | 	 * @return	PHPExcel_CachedObjectStorage_ICache | 
					
						
							|  |  |  | 	 **/ | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 	public static function getInstance(PHPExcel_Worksheet $parent) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2011-12-09 14:55:47 +00:00
										 |  |  | 		$cacheMethodIsAvailable = TRUE; | 
					
						
							| 
									
										
										
										
											2012-01-25 23:07:22 +00:00
										 |  |  | 		if (self::$_cacheStorageMethod === NULL) { | 
					
						
							| 
									
										
										
										
											2011-12-09 12:19:54 +00:00
										 |  |  | 			$cacheMethodIsAvailable = self::initialize(); | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 12:19:54 +00:00
										 |  |  | 		if ($cacheMethodIsAvailable) { | 
					
						
							| 
									
										
										
										
											2012-03-21 23:55:54 +00:00
										 |  |  | 			$instance = new self::$_cacheStorageClass( $parent, | 
					
						
							|  |  |  | 													   self::$_storageMethodParameters[self::$_cacheStorageMethod] | 
					
						
							|  |  |  | 													 ); | 
					
						
							| 
									
										
										
										
											2012-01-25 23:07:22 +00:00
										 |  |  | 			if ($instance !== NULL) { | 
					
						
							| 
									
										
										
										
											2011-12-09 12:19:54 +00:00
										 |  |  | 				return $instance; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-03 21:29:01 +00:00
										 |  |  | 		return FALSE; | 
					
						
							| 
									
										
										
										
											2010-08-26 19:14:53 +00:00
										 |  |  | 	}	//	function getInstance()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |