Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2390 jpm 1
<?php
2
/**
3
 * PHPExcel
4
 *
5
 * Copyright (c) 2006 - 2013 PHPExcel
6
 *
7
 * This library is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * This library is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20
 *
21
 * @category   PHPExcel
22
 * @package    PHPExcel_CachedObjectStorage
23
 * @copyright  Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
24
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
25
 * @version    ##VERSION##, ##DATE##
26
 */
27
 
28
 
29
/**
30
 * PHPExcel_CachedObjectStorage_CacheBase
31
 *
32
 * @category   PHPExcel
33
 * @package    PHPExcel_CachedObjectStorage
34
 * @copyright  Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
35
 */
36
abstract class PHPExcel_CachedObjectStorage_CacheBase {
37
 
38
	/**
39
	 * Parent worksheet
40
	 *
41
	 * @var PHPExcel_Worksheet
42
	 */
43
	protected $_parent;
44
 
45
	/**
46
	 * The currently active Cell
47
	 *
48
	 * @var PHPExcel_Cell
49
	 */
50
	protected $_currentObject = null;
51
 
52
	/**
53
	 * Coordinate address of the currently active Cell
54
	 *
55
	 * @var string
56
	 */
57
	protected $_currentObjectID = null;
58
 
59
 
60
	/**
61
	 * Flag indicating whether the currently active Cell requires saving
62
	 *
63
	 * @var boolean
64
	 */
65
	protected $_currentCellIsDirty = true;
66
 
67
	/**
68
	 * An array of cells or cell pointers for the worksheet cells held in this cache,
69
	 *		and indexed by their coordinate address within the worksheet
70
	 *
71
	 * @var array of mixed
72
	 */
73
	protected $_cellCache = array();
74
 
75
 
76
	/**
77
	 * Initialise this new cell collection
78
	 *
79
	 * @param	PHPExcel_Worksheet	$parent		The worksheet for this cell collection
80
	 */
81
	public function __construct(PHPExcel_Worksheet $parent) {
82
		//	Set our parent worksheet.
83
		//	This is maintained within the cache controller to facilitate re-attaching it to PHPExcel_Cell objects when
84
		//		they are woken from a serialized state
85
		$this->_parent = $parent;
86
	}	//	function __construct()
87
 
88
 
89
	/**
90
	 * Return the parent worksheet for this cell collection
91
	 *
92
	 * @return	PHPExcel_Worksheet
93
	 */
94
	public function getParent()
95
	{
96
		return $this->_parent;
97
	}
98
 
99
	/**
100
	 * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
101
	 *
102
	 * @param	string		$pCoord		Coordinate address of the cell to check
103
	 * @return	boolean
104
	 */
105
	public function isDataSet($pCoord) {
106
		if ($pCoord === $this->_currentObjectID) {
107
			return true;
108
		}
109
		//	Check if the requested entry exists in the cache
110
		return isset($this->_cellCache[$pCoord]);
111
	}	//	function isDataSet()
112
 
113
 
114
	/**
115
	 * Move a cell object from one address to another
116
	 *
117
	 * @param	string		$fromAddress	Current address of the cell to move
118
	 * @param	string		$toAddress		Destination address of the cell to move
119
	 * @return	boolean
120
	 */
121
	public function moveCell($fromAddress, $toAddress) {
122
		if ($fromAddress === $this->_currentObjectID) {
123
			$this->_currentObjectID = $toAddress;
124
		}
125
		$this->_currentCellIsDirty = true;
126
		if (isset($this->_cellCache[$fromAddress])) {
127
			$this->_cellCache[$toAddress] = &$this->_cellCache[$fromAddress];
128
			unset($this->_cellCache[$fromAddress]);
129
		}
130
 
131
		return TRUE;
132
	}	//	function moveCell()
133
 
134
 
135
    /**
136
     * Add or Update a cell in cache
137
     *
138
     * @param	PHPExcel_Cell	$cell		Cell to update
139
	 * @return	void
140
     * @throws	PHPExcel_Exception
141
     */
142
	public function updateCacheData(PHPExcel_Cell $cell) {
143
		return $this->addCacheData($cell->getCoordinate(),$cell);
144
	}	//	function updateCacheData()
145
 
146
 
147
    /**
148
     * Delete a cell in cache identified by coordinate address
149
     *
150
     * @param	string			$pCoord		Coordinate address of the cell to delete
151
     * @throws	PHPExcel_Exception
152
     */
153
	public function deleteCacheData($pCoord) {
154
		if ($pCoord === $this->_currentObjectID) {
155
			$this->_currentObject->detach();
156
			$this->_currentObjectID = $this->_currentObject = null;
157
		}
158
 
159
		if (is_object($this->_cellCache[$pCoord])) {
160
			$this->_cellCache[$pCoord]->detach();
161
			unset($this->_cellCache[$pCoord]);
162
		}
163
		$this->_currentCellIsDirty = false;
164
	}	//	function deleteCacheData()
165
 
166
 
167
	/**
168
	 * Get a list of all cell addresses currently held in cache
169
	 *
170
	 * @return	array of string
171
	 */
172
	public function getCellList() {
173
		return array_keys($this->_cellCache);
174
	}	//	function getCellList()
175
 
176
 
177
	/**
178
	 * Sort the list of all cell addresses currently held in cache by row and column
179
	 *
180
	 * @return	void
181
	 */
182
	public function getSortedCellList() {
183
		$sortKeys = array();
184
		foreach ($this->getCellList() as $coord) {
185
			sscanf($coord,'%[A-Z]%d', $column, $row);
186
			$sortKeys[sprintf('%09d%3s',$row,$column)] = $coord;
187
		}
188
		ksort($sortKeys);
189
 
190
		return array_values($sortKeys);
191
	}	//	function sortCellList()
192
 
193
 
194
 
195
	/**
196
	 * Get highest worksheet column and highest row that have cell records
197
	 *
198
	 * @return array Highest column name and highest row number
199
	 */
200
	public function getHighestRowAndColumn()
201
	{
202
		// Lookup highest column and highest row
203
		$col = array('A' => '1A');
204
		$row = array(1);
205
		foreach ($this->getCellList() as $coord) {
206
			sscanf($coord,'%[A-Z]%d', $c, $r);
207
			$row[$r] = $r;
208
			$col[$c] = strlen($c).$c;
209
		}
210
		if (!empty($row)) {
211
			// Determine highest column and row
212
			$highestRow = max($row);
213
			$highestColumn = substr(max($col),1);
214
		}
215
 
216
		return array( 'row'	   => $highestRow,
217
					  'column' => $highestColumn
218
					);
219
	}
220
 
221
 
222
	/**
223
	 * Return the cell address of the currently active cell object
224
	 *
225
	 * @return	string
226
	 */
227
	public function getCurrentAddress()
228
	{
229
		return $this->_currentObjectID;
230
	}
231
 
232
	/**
233
	 * Return the column address of the currently active cell object
234
	 *
235
	 * @return	string
236
	 */
237
	public function getCurrentColumn()
238
	{
239
		sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row);
240
		return $column;
241
	}
242
 
243
	/**
244
	 * Return the row address of the currently active cell object
245
	 *
246
	 * @return	string
247
	 */
248
	public function getCurrentRow()
249
	{
250
		sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row);
251
		return $row;
252
	}
253
 
254
	/**
255
	 * Get highest worksheet column
256
	 *
257
	 * @return string Highest column name
258
	 */
259
	public function getHighestColumn()
260
	{
261
		$colRow = $this->getHighestRowAndColumn();
262
		return $colRow['column'];
263
	}
264
 
265
	/**
266
	 * Get highest worksheet row
267
	 *
268
	 * @return int Highest row number
269
	 */
270
	public function getHighestRow()
271
	{
272
		$colRow = $this->getHighestRowAndColumn();
273
		return $colRow['row'];
274
	}
275
 
276
 
277
	/**
278
	 * Generate a unique ID for cache referencing
279
	 *
280
	 * @return string Unique Reference
281
	 */
282
	protected function _getUniqueID() {
283
		if (function_exists('posix_getpid')) {
284
			$baseUnique = posix_getpid();
285
		} else {
286
			$baseUnique = mt_rand();
287
		}
288
		return uniqid($baseUnique,true);
289
	}
290
 
291
	/**
292
	 * Clone the cell collection
293
	 *
294
	 * @param	PHPExcel_Worksheet	$parent		The new worksheet
295
	 * @return	void
296
	 */
297
	public function copyCellCollection(PHPExcel_Worksheet $parent) {
298
		$this->_currentCellIsDirty;
299
        $this->_storeData();
300
 
301
		$this->_parent = $parent;
302
		if (($this->_currentObject !== NULL) && (is_object($this->_currentObject))) {
303
			$this->_currentObject->attach($this);
304
		}
305
	}	//	function copyCellCollection()
306
 
307
 
308
	/**
309
	 * Identify whether the caching method is currently available
310
	 * Some methods are dependent on the availability of certain extensions being enabled in the PHP build
311
	 *
312
	 * @return	boolean
313
	 */
314
	public static function cacheMethodIsAvailable() {
315
		return true;
316
	}
317
 
318
}