ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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.

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

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

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.

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

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

◆ 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

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.

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

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

432  {
433  return iterator_count($this->getIterator());
434  }
+ 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
::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.

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

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

◆ exclude()

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

Definition at line 105 of file Finder.php.

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

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  }
+ Here is the caller graph for this function:

◆ files()

◆ getIterator()

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

Returns
|Metadata[]

Definition at line 406 of file Finder.php.

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

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

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
+ 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.

References ILIAS\Filesystem\Finder\Finder\IGNORE_VCS_FILES.

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  }

◆ 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.

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

221  : self
222  {
223  $clone = clone $this;
224  $clone->reverseSorting = true;
225 
226  return $clone;
227  }
+ Here is the caller graph for this function:

◆ searchInDirectory()

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

Definition at line 359 of file Finder.php.

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

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

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  }
sort(\Closure $closure)
Sorts files and directories by an anonymous function.
Definition: Finder.php:278
exclude(array $directories)
Definition: Finder.php:105
+ 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[]$sizes A size range string or an integer or an array of size ranges
Returns
Finder
See also
SizeRangeFilterIterator
NumberComparator
::getSize()

Definition at line 203 of file Finder.php.

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

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

◆ 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.

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

278  : self
279  {
280  $clone = clone $this;
281  $clone->sort = $closure;
282 
283  return $clone;
284  }
+ 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.

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

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

◆ sortByTime()

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

Definition at line 315 of file Finder.php.

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

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

◆ sortByType()

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

Definition at line 304 of file Finder.php.

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

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

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: