ILIAS  release_7 Revision v7.30-3-g800a261c036
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 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.

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

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

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

426  {
427  return iterator_count($this->getIterator());
428  }
+ 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 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.

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

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

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

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

References ILIAS\Filesystem\Finder\Finder\IGNORE_VCS_FILES.

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  }

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

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

215  : self
216  {
217  $clone = clone $this;
218  $clone->reverseSorting = true;
219 
220  return $clone;
221  }
+ Here is the caller graph for this function:

◆ searchInDirectory()

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

Definition at line 353 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().

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  }
sort(\Closure $closure)
Sorts files and directories by an anonymous function.
Definition: Finder.php:272
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 197 of file Finder.php.

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

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

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

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

272  : self
273  {
274  $clone = clone $this;
275  $clone->sort = $closure;
276 
277  return $clone;
278  }
+ 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.

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

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

◆ sortByTime()

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

Definition at line 309 of file Finder.php.

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

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

◆ sortByType()

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

Definition at line 298 of file Finder.php.

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

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

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: