ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
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 249 of file Finder.php.

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

◆ 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 330 of file Finder.php.

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

◆ count()

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

Definition at line 431 of file Finder.php.

432 {
433 return iterator_count($this->getIterator());
434 }

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 181 of file Finder.php.

181 : self
182 {
183 $clone = clone $this;
184 $clone->dates[] = new Comparator\DateComparator($date);
185
186 return $clone;
187 }

◆ 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 157 of file Finder.php.

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

◆ 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 406 of file Finder.php.

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

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 233 of file Finder.php.

233 : self
234 {
235 $clone = clone $this;
236 if ($ignoreVCS) {
237 $clone->ignore |= static::IGNORE_VCS_FILES;
238 } else {
239 $clone->ignore &= ~static::IGNORE_VCS_FILES;
240 }
241
242 return $clone;
243 }

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 221 of file Finder.php.

221 : self
222 {
223 $clone = clone $this;
224 $clone->reverseSorting = true;
225
226 return $clone;
227 }

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 359 of file Finder.php.

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

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 203 of file Finder.php.

203 : self
204 {
205 if (!is_array($sizes)) {
206 $sizes = [$sizes];
207 }
208
209 $clone = clone $this;
210
211 foreach ($sizes as $size) {
212 $clone->sizes[] = new Comparator\NumberComparator((string) $size);
213 }
214
215 return $clone;
216 }
$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 278 of file Finder.php.

278 : self
279 {
280 $clone = clone $this;
281 $clone->sort = $closure;
282
283 return $clone;
284 }

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 290 of file Finder.php.

290 : self
291 {
292 $clone = clone $this;
294 if ($useNaturalSort) {
296 }
297
298 return $clone;
299 }

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 315 of file Finder.php.

315 : self
316 {
317 $clone = clone $this;
319
320 return $clone;
321 }

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

◆ sortByType()

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

Definition at line 304 of file Finder.php.

304 : self
305 {
306 $clone = clone $this;
308
309 return $clone;
310 }

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: