Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 81 |
|
0.00% |
0 / 20 |
CRAP | |
0.00% |
0 / 5 |
DocumentIterator | |
0.00% |
0 / 31 |
|
0.00% |
0 / 7 |
506 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
2 | |||
rewind | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
valid | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
next | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
key | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
current | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
12 | |||
populate | |
0.00% |
0 / 15 |
|
0.00% |
0 / 1 |
210 | |||
FolderIterator | |
0.00% |
0 / 31 |
|
0.00% |
0 / 7 |
506 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
2 | |||
rewind | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
valid | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
next | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
key | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
current | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
12 | |||
populate | |
0.00% |
0 / 15 |
|
0.00% |
0 / 1 |
210 | |||
FolderFilterIterator | |
0.00% |
0 / 5 |
|
0.00% |
0 / 2 |
6 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
accept | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
RecursiveFolderIterator | |
0.00% |
0 / 7 |
|
0.00% |
0 / 2 |
20 | |
0.00% |
0 / 1 |
hasChildren | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
12 | |||
getChildren | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
RecursiveFolderFilterIterator | |
0.00% |
0 / 7 |
|
0.00% |
0 / 2 |
20 | |
0.00% |
0 / 1 |
hasChildren | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
12 | |||
getChildren | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | namespace SeedDMS\Core; |
3 | |
4 | /** |
5 | * Implementation of the document iterartor |
6 | * |
7 | * @category DMS |
8 | * @package SeedDMS_Core |
9 | * @license GPL 2 |
10 | * @version @version@ |
11 | * @author Uwe Steinmann <uwe@steinmann.cx> |
12 | * @copyright Copyright (C) 2010, Uwe Steinmann |
13 | * @version Release: @package_version@ |
14 | */ |
15 | |
16 | class DocumentIterator implements \Iterator { |
17 | /** |
18 | * @var object folder |
19 | */ |
20 | protected $_folder; |
21 | |
22 | /** |
23 | * @var object dms |
24 | */ |
25 | protected $_dms; |
26 | |
27 | /** |
28 | * @var array documents |
29 | */ |
30 | protected $_documents; |
31 | |
32 | /** |
33 | * @var int $_pointer |
34 | */ |
35 | protected $_pointer; |
36 | |
37 | /** |
38 | * @var array $_cache |
39 | */ |
40 | protected $_cache; |
41 | |
42 | public function __construct($folder) { |
43 | $this->_folder = $folder; |
44 | $this->_dms = $folder->getDMS(); |
45 | $this->_documents = array(); |
46 | $this->_pointer = 0; |
47 | $this->_cache = array(); |
48 | $this->populate(); |
49 | } |
50 | |
51 | public function rewind(): void { |
52 | $this->_pointer = 0; |
53 | } |
54 | |
55 | public function valid(): bool { |
56 | return isset($this->_documents[$this->_pointer]); |
57 | } |
58 | |
59 | public function next(): void { |
60 | $this->_pointer++; |
61 | } |
62 | |
63 | public function key(): mixed { |
64 | return $this->_folders[$this->_pointer]; |
65 | } |
66 | |
67 | public function current(): mixed { |
68 | if($this->_documents[$this->_pointer]) { |
69 | $documentid = $this->_documents[$this->_pointer]['id']; |
70 | if(!isset($this->_cache[$documentid])) { |
71 | // echo $documentid." not cached<br />"; |
72 | $this->_cache[$documentid] = $this->_dms->getdocument($documentid); |
73 | } |
74 | return $this->_cache[$documentid]; |
75 | } |
76 | return null; |
77 | } |
78 | |
79 | private function populate($orderby="", $dir="asc", $limit=0, $offset=0) { /* {{{ */ |
80 | $db = $this->_dms->getDB(); |
81 | |
82 | $queryStr = "SELECT `id` FROM `tblDocuments` WHERE `folder` = " . $this->_folder->getID(); |
83 | |
84 | if ($orderby && $orderby[0]=="n") $queryStr .= " ORDER BY `name`"; |
85 | elseif ($orderby && $orderby[0]=="s") $queryStr .= " ORDER BY `sequence`"; |
86 | elseif ($orderby && $orderby[0]=="d") $queryStr .= " ORDER BY `date`"; |
87 | if($dir == 'desc') |
88 | $queryStr .= " DESC"; |
89 | if(is_int($limit) && $limit > 0) { |
90 | $queryStr .= " LIMIT ".$limit; |
91 | if(is_int($offset) && $offset > 0) |
92 | $queryStr .= " OFFSET ".$offset; |
93 | } |
94 | |
95 | $resArr = $db->getResultArray($queryStr); |
96 | if (is_bool($resArr) && $resArr == false) |
97 | return false; |
98 | |
99 | $this->_documents = $resArr; |
100 | } /* }}} */ |
101 | } |
102 | |
103 | class FolderIterator implements \Iterator { /* {{{ */ |
104 | /** |
105 | * @var object folder |
106 | */ |
107 | protected $_folder; |
108 | |
109 | /** |
110 | * @var object dms |
111 | */ |
112 | protected $_dms; |
113 | |
114 | /** |
115 | * @var array documents |
116 | */ |
117 | protected $_folders; |
118 | |
119 | /** |
120 | * @var int $_pointer |
121 | */ |
122 | protected $_pointer; |
123 | |
124 | /** |
125 | * @var array $_cache |
126 | */ |
127 | protected $_cache; |
128 | |
129 | public function __construct($folder) { /* {{{ */ |
130 | $this->_folder = $folder; |
131 | $this->_dms = $folder->getDMS(); |
132 | $this->_folders = array(); |
133 | $this->_pointer = 0; |
134 | $this->_cache = array(); |
135 | $this->populate(); |
136 | } /* }}} */ |
137 | |
138 | #[\ReturnTypeWillChange] |
139 | public function rewind() { /* {{{ */ |
140 | $this->_pointer = 0; |
141 | } /* }}} */ |
142 | |
143 | #[\ReturnTypeWillChange] |
144 | public function valid() { /* {{{ */ |
145 | return isset($this->_folders[$this->_pointer]); |
146 | } /* }}} */ |
147 | |
148 | #[\ReturnTypeWillChange] |
149 | public function next() { /* {{{ */ |
150 | $this->_pointer++; |
151 | } /* }}} */ |
152 | |
153 | #[\ReturnTypeWillChange] |
154 | public function key() { /* {{{ */ |
155 | return $this->_folders[$this->_pointer]; |
156 | } /* }}} */ |
157 | |
158 | #[\ReturnTypeWillChange] |
159 | public function current() { /* {{{ */ |
160 | if($this->_folders[$this->_pointer]) { |
161 | $folderid = $this->_folders[$this->_pointer]['id']; |
162 | if(!isset($this->_cache[$folderid])) { |
163 | // echo $folderid." not cached<br />"; |
164 | $this->_cache[$folderid] = $this->_dms->getFolder($folderid); |
165 | } |
166 | return $this->_cache[$folderid]; |
167 | } |
168 | return null; |
169 | } /* }}} */ |
170 | |
171 | private function populate($orderby="", $dir="asc", $limit=0, $offset=0) { /* {{{ */ |
172 | $db = $this->_dms->getDB(); |
173 | |
174 | $queryStr = "SELECT `id` FROM `tblFolders` WHERE `parent` = " . $this->_folder->getID(); |
175 | |
176 | if ($orderby && $orderby[0]=="n") $queryStr .= " ORDER BY `name`"; |
177 | elseif ($orderby && $orderby[0]=="s") $queryStr .= " ORDER BY `sequence`"; |
178 | elseif ($orderby && $orderby[0]=="d") $queryStr .= " ORDER BY `date`"; |
179 | if($dir == 'desc') |
180 | $queryStr .= " DESC"; |
181 | if(is_int($limit) && $limit > 0) { |
182 | $queryStr .= " LIMIT ".$limit; |
183 | if(is_int($offset) && $offset > 0) |
184 | $queryStr .= " OFFSET ".$offset; |
185 | } |
186 | |
187 | $resArr = $db->getResultArray($queryStr); |
188 | if (is_bool($resArr) && $resArr == false) |
189 | return false; |
190 | |
191 | $this->_folders = $resArr; |
192 | } /* }}} */ |
193 | } /* }}} */ |
194 | |
195 | /** |
196 | * The FolderFilterIterator checks if the given user has access on |
197 | * the current folder. |
198 | * FilterIterator uses an inner iterator passed to the constructor |
199 | * to iterate over the sub folders of a folder. |
200 | * |
201 | $iter = new FolderIterator($folder); |
202 | $iter2 = new FolderFilterIterator($iter, $user); |
203 | foreach($iter2 as $ff) { |
204 | echo $ff->getName()."<br />"; |
205 | } |
206 | */ |
207 | class FolderFilterIterator extends \FilterIterator { /* {{{ */ |
208 | public function __construct(Iterator $iterator , $filter ) { |
209 | parent::__construct($iterator); |
210 | $this->userFilter = $filter; |
211 | } |
212 | public function accept(): bool { /* {{{ */ |
213 | $folder = $this->getInnerIterator()->current(); |
214 | echo "accept() for ".$folder->getName()."<br />"; |
215 | return true; |
216 | } /* }}} */ |
217 | } /* }}} */ |
218 | |
219 | /** |
220 | $iter = new RecursiveFolderIterator($folder); |
221 | $iter2 = new RecursiveIteratorIterator($iter, RecursiveIteratorIterator::SELF_FIRST); |
222 | foreach($iter2 as $ff) { |
223 | echo $ff->getID().': '.$ff->getName()."<br />"; |
224 | } |
225 | */ |
226 | class RecursiveFolderIterator extends FolderIterator implements \RecursiveIterator { /* {{{ */ |
227 | |
228 | #[\ReturnTypeWillChange] |
229 | public function hasChildren() { /* {{{ */ |
230 | $db = $this->_dms->getDB(); |
231 | $queryStr = "SELECT id FROM `tblFolders` WHERE `parent` = ".(int) $this->current()->getID(); |
232 | $resArr = $db->getResultArray($queryStr); |
233 | if (is_bool($resArr) && !$resArr) |
234 | return false; |
235 | return true; |
236 | } /* }}} */ |
237 | |
238 | #[\ReturnTypeWillChange] |
239 | public function getChildren() { /* {{{ */ |
240 | return new RecursiveFolderIterator($this->current()); |
241 | } /* }}} */ |
242 | } /* }}} */ |
243 | |
244 | class RecursiveFolderFilterIterator extends FolderFilterIterator { /* {{{ */ |
245 | public function hasChildren() { /* {{{ */ |
246 | $db = $this->_dms->getDB(); |
247 | $queryStr = "SELECT id FROM `tblFolders` WHERE `parent` = ".(int) $this->current()->getID(); |
248 | $resArr = $db->getResultArray($queryStr); |
249 | if (is_bool($resArr) && !$resArr) |
250 | return false; |
251 | return true; |
252 | } /* }}} */ |
253 | |
254 | public function getChildren() { /* {{{ */ |
255 | return new RecursiveFolderIterator($this->current()); |
256 | } /* }}} */ |
257 | |
258 | } /* }}} */ |