PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.1.0
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.1.0
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / vendor / phpoffice / phpexcel / Classes / PHPExcel / CachedObjectStorage / CacheBase.php

CacheBase.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.1.0, at vendor/phpoffice/phpexcel/Classes/PHPExcel/CachedObjectStorage/CacheBase.php

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