ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
DiscISAM.php
Go to the documentation of this file.
1<?php
37
43 private $_fileName = NULL;
44
50 private $_fileHandle = NULL;
51
57 private $_cacheDirectory = NULL;
58
59
67 protected function _storeData() {
68 if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
69 $this->_currentObject->detach();
70
71 fseek($this->_fileHandle,0,SEEK_END);
72
73 $this->_cellCache[$this->_currentObjectID] = array(
74 'ptr' => ftell($this->_fileHandle),
75 'sz' => fwrite($this->_fileHandle, serialize($this->_currentObject))
76 );
77 $this->_currentCellIsDirty = false;
78 }
79 $this->_currentObjectID = $this->_currentObject = null;
80 } // function _storeData()
81
82
91 public function addCacheData($pCoord, PHPExcel_Cell $cell) {
92 if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
93 $this->_storeData();
94 }
95
96 $this->_currentObjectID = $pCoord;
97 $this->_currentObject = $cell;
98 $this->_currentCellIsDirty = true;
99
100 return $cell;
101 } // function addCacheData()
102
103
111 public function getCacheData($pCoord) {
112 if ($pCoord === $this->_currentObjectID) {
114 }
115 $this->_storeData();
116
117 // Check if the entry that has been requested actually exists
118 if (!isset($this->_cellCache[$pCoord])) {
119 // Return null if requested entry doesn't exist in cache
120 return null;
121 }
122
123 // Set current entry to the requested entry
124 $this->_currentObjectID = $pCoord;
125 fseek($this->_fileHandle, $this->_cellCache[$pCoord]['ptr']);
126 $this->_currentObject = unserialize(fread($this->_fileHandle, $this->_cellCache[$pCoord]['sz']));
127 // Re-attach this as the cell's parent
128 $this->_currentObject->attach($this);
129
130 // Return requested entry
132 } // function getCacheData()
133
134
140 public function getCellList() {
141 if ($this->_currentObjectID !== null) {
142 $this->_storeData();
143 }
144
145 return parent::getCellList();
146 }
147
148
155 public function copyCellCollection(PHPExcel_Worksheet $parent) {
156 parent::copyCellCollection($parent);
157 // Get a new id for the new file name
158 $baseUnique = $this->_getUniqueID();
159 $newFileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
160 // Copy the existing cell cache file
161 copy ($this->_fileName,$newFileName);
162 $this->_fileName = $newFileName;
163 // Open the copied cell cache file
164 $this->_fileHandle = fopen($this->_fileName,'a+');
165 } // function copyCellCollection()
166
167
173 public function unsetWorksheetCells() {
174 if(!is_null($this->_currentObject)) {
175 $this->_currentObject->detach();
176 $this->_currentObject = $this->_currentObjectID = null;
177 }
178 $this->_cellCache = array();
179
180 // detach ourself from the worksheet, so that it can then delete this object successfully
181 $this->_parent = null;
182
183 // Close down the temporary cache file
184 $this->__destruct();
185 } // function unsetWorksheetCells()
186
187
194 public function __construct(PHPExcel_Worksheet $parent, $arguments) {
195 $this->_cacheDirectory = ((isset($arguments['dir'])) && ($arguments['dir'] !== NULL))
196 ? $arguments['dir']
198
199 parent::__construct($parent);
200 if (is_null($this->_fileHandle)) {
201 $baseUnique = $this->_getUniqueID();
202 $this->_fileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
203 $this->_fileHandle = fopen($this->_fileName,'a+');
204 }
205 } // function __construct()
206
207
211 public function __destruct() {
212 if (!is_null($this->_fileHandle)) {
213 fclose($this->_fileHandle);
214 unlink($this->_fileName);
215 }
216 $this->_fileHandle = null;
217 } // function __destruct()
218
219}
An exception for terminatinating execution or to throw for unit testing.
_getUniqueID()
Generate a unique ID for cache referencing.
Definition: CacheBase.php:311
getCacheData($pCoord)
Get cell at a specific coordinate.
Definition: DiscISAM.php:111
addCacheData($pCoord, PHPExcel_Cell $cell)
Add or Update a cell in cache identified by coordinate address.
Definition: DiscISAM.php:91
unsetWorksheetCells()
Clear the cell collection and disconnect from our parent.
Definition: DiscISAM.php:173
_storeData()
Store cell data in cache for the current cell object if it's "dirty", and the 'nullify' the current c...
Definition: DiscISAM.php:67
__destruct()
Destroy this cell collection.
Definition: DiscISAM.php:211
getCellList()
Get a list of all cell addresses currently held in cache.
Definition: DiscISAM.php:140
copyCellCollection(PHPExcel_Worksheet $parent)
Clone the cell collection.
Definition: DiscISAM.php:155
__construct(PHPExcel_Worksheet $parent, $arguments)
Initialise this new cell collection.
Definition: DiscISAM.php:194
static sys_get_temp_dir()
Get the systems temporary directory.
Definition: File.php:135