ILIAS  release_7 Revision v7.30-3-g800a261c036
ILIAS\Filesystem\Finder\Finder Class Reference
+ Inheritance diagram for ILIAS\Filesystem\Finder\Finder:
+ Collaboration diagram for ILIAS\Filesystem\Finder\Finder:

Public Member Functions

 __construct (Filesystem $filesystem)
 Finder constructor. More...
 
 files ()
 
 directories ()
 
 allTypes ()
 
 exclude (array $directories)
 
 in (array $directories)
 
 depth ($level)
 Adds tests for the directory depth. More...
 
 date (string $date)
 Adds tests for file dates. More...
 
 size ($sizes)
 Adds tests for file sizes. More...
 
 reverseSorting ()
 
 ignoreVCS (bool $ignoreVCS)
 
 addVCSPattern (array $pattern)
 
 sort (\Closure $closure)
 Sorts files and directories by an anonymous function. More...
 
 sortByName (bool $useNaturalSort=false)
 
 sortByType ()
 
 sortByTime ()
 
 append (iterable $iterator)
 Appends an existing set of files/directories to the finder. More...
 
 getIterator ()
 
 count ()
 

Data Fields

const IGNORE_VCS_FILES = 1
 
const IGNORE_DOT_FILES = 2
 

Protected Attributes

 $dirs = []
 

Private Member Functions

 searchInDirectory (string $dir)
 

Private Attributes

 $filesystem
 
 $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']
 
 $iterators = []
 
 $exclude = []
 
 $ignore = 0
 
 $mode = Iterator\FileTypeFilterIterator::ALL
 
 $reverseSorting = false
 
 $dates = []
 
 $sizes = []
 
 $depths = []
 
 $sort = false
 

Detailed Description

Definition at line 17 of file Finder.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\Filesystem\Finder\Finder::__construct ( Filesystem  $filesystem)

Finder constructor.

Parameters
Filesystem$filesystem

Definition at line 62 of file Finder.php.

63 {
64 $this->filesystem = $filesystem;
65 $this->ignore = static::IGNORE_VCS_FILES|static::IGNORE_DOT_FILES;
66 }

References ILIAS\Filesystem\Finder\Finder\$filesystem.

Member Function Documentation

◆ addVCSPattern()

ILIAS\Filesystem\Finder\Finder::addVCSPattern ( array  $pattern)
Parameters
string[]$pattern
Returns
Finder

Definition at line 243 of file Finder.php.

243 : self
244 {
245 array_walk($pattern, function ($p) {
246 if (!is_string($p)) {
247 if (is_object($p)) {
248 throw new \InvalidArgumentException(sprintf('Invalid pattern given: %s', get_class($p)));
249 }
250
251 throw new \InvalidArgumentException(sprintf('Invalid pattern given: %s', gettype($p)));
252 }
253 });
254
255 $clone = clone $this;
256 foreach ($pattern as $p) {
257 $clone->vcsPatterns[] = $p;
258 }
259
260 $clone->vcsPatterns = array_unique($clone->vcsPatterns);
261
262 return $clone;
263 }

◆ allTypes()

ILIAS\Filesystem\Finder\Finder::allTypes ( )
Returns
Finder

Definition at line 93 of file Finder.php.

93 : self
94 {
95 $clone = clone $this;
97
98 return $clone;
99 }

References ILIAS\Filesystem\Finder\Iterator\FileTypeFilterIterator\ALL.

◆ append()

ILIAS\Filesystem\Finder\Finder::append ( iterable  $iterator)

Appends an existing set of files/directories to the finder.

The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array.

Parameters
iterable$iterator
Returns
Finder
Exceptions

InvalidArgumentException when the given argument is not iterable

Definition at line 324 of file Finder.php.

324 : self
325 {
326 $clone = clone $this;
327
328 if ($iterator instanceof \IteratorAggregate) {
329 $clone->iterators[] = $iterator->getIterator();
330 } elseif ($iterator instanceof \Iterator) {
331 $clone->iterators[] = $iterator;
332 } elseif ($iterator instanceof \Traversable || is_array($iterator)) {
333 $it = new \ArrayIterator();
334 foreach ($iterator as $file) {
335 if ($file instanceof MetadataType) {
336 $it->append($file);
337 } else {
338 throw new \InvalidArgumentException('Finder::append() method wrong argument type in passed iterator.');
339 }
340 }
341 $clone->iterators[] = $it;
342 } else {
343 throw new \InvalidArgumentException('Finder::append() method wrong argument type.');
344 }
345
346 return $clone;
347 }

◆ count()

ILIAS\Filesystem\Finder\Finder::count ( )

Definition at line 425 of file Finder.php.

426 {
427 return iterator_count($this->getIterator());
428 }

References ILIAS\Filesystem\Finder\Finder\getIterator().

Referenced by ILIAS\Filesystem\Finder\Finder\getIterator().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ date()

ILIAS\Filesystem\Finder\Finder::date ( string  $date)

Adds tests for file dates.

The date must be something that strtotime() is able to parse: $finder->date('since yesterday'); $finder->date('until 2 days ago'); $finder->date('> now - 2 hours'); $finder->date('>= 2005-10-15');

Parameters
string$dateA date range string
Returns
Finder
See also
strtotime
DateRangeFilterIterator
DateComparator
\ILIAS\FileSystem\Filesystem::getTimestamp()

Definition at line 177 of file Finder.php.

177 : self
178 {
179 $clone = clone $this;
180 $clone->dates[] = new Comparator\DateComparator($date);
181
182 return $clone;
183 }

◆ depth()

ILIAS\Filesystem\Finder\Finder::depth (   $level)

Adds tests for the directory depth.

Usage: $finder->depth('> 1') // the Finder will start matching at level 1. $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.

Parameters
string | int$levelThe depth level expression
Returns
Finder
See also
DepthRangeFilterIterator
NumberComparator

Definition at line 155 of file Finder.php.

155 : self
156 {
157 $clone = clone $this;
158 $clone->depths[] = new Comparator\NumberComparator((string) $level);
159
160 return $clone;
161 }

◆ directories()

ILIAS\Filesystem\Finder\Finder::directories ( )
Returns
Finder

Definition at line 82 of file Finder.php.

82 : self
83 {
84 $clone = clone $this;
86
87 return $clone;
88 }

References ILIAS\Filesystem\Finder\Iterator\FileTypeFilterIterator\ONLY_DIRECTORIES.

◆ exclude()

ILIAS\Filesystem\Finder\Finder::exclude ( array  $directories)
Parameters
string[]$directories
Returns
Finder

Definition at line 105 of file Finder.php.

105 : self
106 {
107 array_walk($directories, function ($directory) {
108 if (!is_string($directory)) {
109 if (is_object($directory)) {
110 throw new \InvalidArgumentException(sprintf('Invalid directory given: %s', get_class($directory)));
111 }
112
113 throw new \InvalidArgumentException(sprintf('Invalid directory given: %s', gettype($directory)));
114 }
115 });
116
117 $clone = clone $this;
118 $clone->exclude = array_merge($clone->exclude, $directories);
119
120 return $clone;
121 }

Referenced by ILIAS\Filesystem\Finder\Finder\searchInDirectory().

+ Here is the caller graph for this function:

◆ files()

◆ getIterator()

ILIAS\Filesystem\Finder\Finder::getIterator ( )

Returns
\Iterator|Metadata[]

Definition at line 400 of file Finder.php.

401 {
402 if (0 === count($this->dirs) && 0 === count($this->iterators)) {
403 throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.');
404 }
405
406 if (1 === count($this->dirs) && 0 === count($this->iterators)) {
407 return $this->searchInDirectory($this->dirs[0]);
408 }
409
410 $iterator = new \AppendIterator();
411 foreach ($this->dirs as $dir) {
412 $iterator->append($this->searchInDirectory($dir));
413 }
414
415 foreach ($this->iterators as $it) {
416 $iterator->append($it);
417 }
418
419 return $iterator;
420 }
searchInDirectory(string $dir)
Definition: Finder.php:353

References ILIAS\Filesystem\Finder\Finder\count(), and ILIAS\Filesystem\Finder\Finder\searchInDirectory().

Referenced by ILIAS\Filesystem\Finder\Finder\count().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ignoreVCS()

ILIAS\Filesystem\Finder\Finder::ignoreVCS ( bool  $ignoreVCS)
Parameters
bool$ignoreVCS
Returns
Finder

Definition at line 227 of file Finder.php.

227 : self
228 {
229 $clone = clone $this;
230 if ($ignoreVCS) {
231 $clone->ignore |= static::IGNORE_VCS_FILES;
232 } else {
233 $clone->ignore &= ~static::IGNORE_VCS_FILES;
234 }
235
236 return $clone;
237 }

References ILIAS\Filesystem\Finder\Finder\IGNORE_VCS_FILES.

◆ in()

ILIAS\Filesystem\Finder\Finder::in ( array  $directories)
Parameters
string[]$directories
Returns
Finder

Definition at line 127 of file Finder.php.

127 : self
128 {
129 array_walk($directories, function ($directory) {
130 if (!is_string($directory)) {
131 if (is_object($directory)) {
132 throw new \InvalidArgumentException(sprintf('Invalid directory given: %s', get_class($directory)));
133 }
134
135 throw new \InvalidArgumentException(sprintf('Invalid directory given: %s', gettype($directory)));
136 }
137 });
138
139 $clone = clone $this;
140 $clone->dirs = array_unique(array_merge($clone->dirs, $directories));
141
142 return $clone;
143 }

◆ reverseSorting()

ILIAS\Filesystem\Finder\Finder::reverseSorting ( )
Returns
Finder

Definition at line 215 of file Finder.php.

215 : self
216 {
217 $clone = clone $this;
218 $clone->reverseSorting = true;
219
220 return $clone;
221 }

Referenced by ILIAS\Filesystem\Finder\Finder\searchInDirectory().

+ Here is the caller graph for this function:

◆ searchInDirectory()

ILIAS\Filesystem\Finder\Finder::searchInDirectory ( string  $dir)
private
Parameters
string$dir
Returns
\Iterator

Definition at line 353 of file Finder.php.

353 : \Iterator
354 {
355 if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES&$this->ignore)) {
356 $this->exclude = array_merge($this->exclude, $this->vcsPatterns);
357 }
358
359 $iterator = new Iterator\RecursiveDirectoryIterator($this->filesystem, $dir);
360
361 if ($this->exclude) {
362 $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $this->exclude);
363 }
364
365 $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);
366
367 if ($this->depths) {
368 $iterator = new Iterator\DepthRangeFilterIterator($iterator, $this->depths);
369 }
370
371 if ($this->mode) {
372 $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode);
373 }
374
375 if ($this->dates) {
376 $iterator = new Iterator\DateRangeFilterIterator($this->filesystem, $iterator, $this->dates);
377 }
378
379 if ($this->sizes) {
380 $iterator = new Iterator\SizeRangeFilterIterator($this->filesystem, $iterator, $this->sizes);
381 }
382
383 if ($this->sort || $this->reverseSorting) {
384 $iteratorAggregate = new Iterator\SortableIterator(
385 $this->filesystem,
386 $iterator,
387 $this->sort,
388 $this->reverseSorting
389 );
390 $iterator = $iteratorAggregate->getIterator();
391 }
392
393 return $iterator;
394 }
exclude(array $directories)
Definition: Finder.php:105
sort(\Closure $closure)
Sorts files and directories by an anonymous function.
Definition: Finder.php:272

References ILIAS\Filesystem\Finder\Finder\exclude(), ILIAS\Filesystem\Finder\Finder\reverseSorting(), and ILIAS\Filesystem\Finder\Finder\sort().

Referenced by ILIAS\Filesystem\Finder\Finder\getIterator().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ size()

ILIAS\Filesystem\Finder\Finder::size (   $sizes)

Adds tests for file sizes.

$finder->size('> 10K'); $finder->size('<= 1Ki'); $finder->size(4); $finder->size(['> 10K', '< 20K'])

Parameters
string | int | string[] | int[]$sizesA size range string or an integer or an array of size ranges
Returns
Finder
See also
SizeRangeFilterIterator
NumberComparator
\ILIAS\FileSystem\Filesystem::getSize()

Definition at line 197 of file Finder.php.

197 : self
198 {
199 if (!is_array($sizes)) {
200 $sizes = [$sizes];
201 }
202
203 $clone = clone $this;
204
205 foreach ($sizes as $size) {
206 $clone->sizes[] = new Comparator\NumberComparator((string) $size);
207 }
208
209 return $clone;
210 }
$size
Definition: RandomTest.php:84

References $size, and ILIAS\Filesystem\Finder\Finder\$sizes.

◆ sort()

ILIAS\Filesystem\Finder\Finder::sort ( \Closure  $closure)

Sorts files and directories by an anonymous function.

The anonymous function receives two Metadata instances to compare. This can be slow as all the matching files and directories must be retrieved for comparison.

Parameters
\Closure$closure
Returns
Finder

Definition at line 272 of file Finder.php.

272 : self
273 {
274 $clone = clone $this;
275 $clone->sort = $closure;
276
277 return $clone;
278 }

Referenced by ILIAS\Filesystem\Finder\Iterator\SortableIterator\__construct(), ILIAS\Filesystem\Finder\Iterator\SortableIterator\getIterator(), and ILIAS\Filesystem\Finder\Finder\searchInDirectory().

+ Here is the caller graph for this function:

◆ sortByName()

ILIAS\Filesystem\Finder\Finder::sortByName ( bool  $useNaturalSort = false)
Parameters
bool$useNaturalSort
Returns
Finder

Definition at line 284 of file Finder.php.

284 : self
285 {
286 $clone = clone $this;
288 if ($useNaturalSort) {
290 }
291
292 return $clone;
293 }

References ILIAS\Filesystem\Finder\Iterator\SortableIterator\SORT_BY_NAME, and ILIAS\Filesystem\Finder\Iterator\SortableIterator\SORT_BY_NAME_NATURAL.

◆ sortByTime()

ILIAS\Filesystem\Finder\Finder::sortByTime ( )
Returns
Finder

Definition at line 309 of file Finder.php.

309 : self
310 {
311 $clone = clone $this;
313
314 return $clone;
315 }

References ILIAS\Filesystem\Finder\Iterator\SortableIterator\SORT_BY_TIME.

◆ sortByType()

ILIAS\Filesystem\Finder\Finder::sortByType ( )
Returns
Finder

Definition at line 298 of file Finder.php.

298 : self
299 {
300 $clone = clone $this;
302
303 return $clone;
304 }

References ILIAS\Filesystem\Finder\Iterator\SortableIterator\SORT_BY_TYPE.

Field Documentation

◆ $dates

ILIAS\Filesystem\Finder\Finder::$dates = []
private

Definition at line 47 of file Finder.php.

◆ $depths

ILIAS\Filesystem\Finder\Finder::$depths = []
private

Definition at line 53 of file Finder.php.

◆ $dirs

ILIAS\Filesystem\Finder\Finder::$dirs = []
protected

Definition at line 32 of file Finder.php.

◆ $exclude

ILIAS\Filesystem\Finder\Finder::$exclude = []
private

Definition at line 35 of file Finder.php.

◆ $filesystem

ILIAS\Filesystem\Finder\Finder::$filesystem
private

Definition at line 23 of file Finder.php.

Referenced by ILIAS\Filesystem\Finder\Finder\__construct().

◆ $ignore

ILIAS\Filesystem\Finder\Finder::$ignore = 0
private

Definition at line 38 of file Finder.php.

◆ $iterators

ILIAS\Filesystem\Finder\Finder::$iterators = []
private

Definition at line 29 of file Finder.php.

◆ $mode

ILIAS\Filesystem\Finder\Finder::$mode = Iterator\FileTypeFilterIterator::ALL
private

Definition at line 41 of file Finder.php.

◆ $reverseSorting

ILIAS\Filesystem\Finder\Finder::$reverseSorting = false
private

Definition at line 44 of file Finder.php.

◆ $sizes

ILIAS\Filesystem\Finder\Finder::$sizes = []
private

Definition at line 50 of file Finder.php.

Referenced by ILIAS\Filesystem\Finder\Finder\size().

◆ $sort

ILIAS\Filesystem\Finder\Finder::$sort = false
private

Definition at line 56 of file Finder.php.

◆ $vcsPatterns

ILIAS\Filesystem\Finder\Finder::$vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']
private

Definition at line 26 of file Finder.php.

◆ IGNORE_DOT_FILES

const ILIAS\Filesystem\Finder\Finder::IGNORE_DOT_FILES = 2

Definition at line 20 of file Finder.php.

◆ IGNORE_VCS_FILES

const ILIAS\Filesystem\Finder\Finder::IGNORE_VCS_FILES = 1

Definition at line 19 of file Finder.php.

Referenced by ILIAS\Filesystem\Finder\Finder\ignoreVCS().


The documentation for this class was generated from the following file: