‪TYPO3CMS  ‪main
DriverFilteredSearchResult.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use TYPO3\CMS\Core\Resource\Driver\DriverInterface;
23 
29 {
33  private ‪$searchResult;
34 
38  private ‪$driver;
39 
43  private ‪$filters;
44 
48  private ‪$result;
49 
51  {
52  $this->searchResult = ‪$searchResult;
53  $this->driver = ‪$driver;
54  $this->filters = ‪$filters;
55  }
56 
60  public function ‪count(): int
61  {
62  $this->‪initialize();
63 
64  return ‪count($this->result);
65  }
66 
70  public function ‪current(): ‪File
71  {
72  $this->‪initialize();
73 
74  return ‪current($this->result);
75  }
76 
80  public function ‪key(): int
81  {
82  $this->‪initialize();
83 
84  return ‪key($this->result);
85  }
86 
90  public function ‪next(): void
91  {
92  $this->‪initialize();
93  ‪next($this->result);
94  }
95 
99  public function ‪rewind(): void
100  {
101  $this->‪initialize();
102  reset($this->result);
103  }
104 
108  public function ‪valid(): bool
109  {
110  $this->‪initialize();
111 
112  return ‪current($this->result) !== false;
113  }
114 
115  private function ‪initialize(): void
116  {
117  if ($this->result === null) {
118  $this->result = $this->applyFilters(...iterator_to_array($this->searchResult));
119  }
120  }
121 
127  private function applyFilters(‪File ...$files): array
128  {
130  foreach ($files as $file) {
131  $itemIdentifier = $file->getIdentifier();
132  ‪$itemName = ‪PathUtility::basename($itemIdentifier);
134  ‪$matches = true;
135  foreach ($this->filters as $filter) {
136  if (!is_callable($filter)) {
137  continue;
138  }
139  ‪$result = $filter(‪$itemName, $itemIdentifier, ‪$parentIdentifier, [], $this->driver);
140  // We use -1 as the "don't include“ return value, for historic reasons,
141  // as call_user_func() used to return FALSE if calling the method failed.
142  if (‪$result === -1) {
143  ‪$matches = false;
144  }
145  if (‪$result === false) {
146  throw new \RuntimeException(
147  'Could not apply file/folder name filter ' . $filter[0] . '::' . $filter[1],
148  1543617278
149  );
150  }
151  }
152  if (‪$matches) {
153  ‪$filteredFiles[] = $file;
154  }
155  }
156 
157  return ‪$filteredFiles;
158  }
159 }
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\current
‪current()
Definition: DriverFilteredSearchResult.php:66
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$itemName
‪$itemName
Definition: DriverFilteredSearchResult.php:128
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:27
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\rewind
‪rewind()
Definition: DriverFilteredSearchResult.php:95
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$result
‪array $result
Definition: DriverFilteredSearchResult.php:44
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$driver
‪DriverInterface $driver
Definition: DriverFilteredSearchResult.php:36
‪TYPO3\CMS\Core\Resource\Search\Result
Definition: DriverFilteredSearchResult.php:18
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\valid
‪valid()
Definition: DriverFilteredSearchResult.php:104
‪TYPO3\CMS\Core\Utility\PathUtility\basename
‪static basename(string $path)
Definition: PathUtility.php:219
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$matches
‪$matches
Definition: DriverFilteredSearchResult.php:130
‪TYPO3\CMS\Core\Utility\PathUtility\dirname
‪static dirname(string $path)
Definition: PathUtility.php:243
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\count
‪count()
Definition: DriverFilteredSearchResult.php:56
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult
Definition: DriverFilteredSearchResult.php:29
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$filteredFiles
‪foreach($this->filters as $filter) if($matches) return $filteredFiles
Definition: DriverFilteredSearchResult.php:148
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:26
‪TYPO3\CMS\Core\Resource\Search\Result\FileSearchResultInterface
Definition: FileSearchResultInterface.php:24
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\__construct
‪__construct(FileSearchResultInterface $searchResult, DriverInterface $driver, array $filters)
Definition: DriverFilteredSearchResult.php:46
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\next
‪next()
Definition: DriverFilteredSearchResult.php:86
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$filters
‪callable[] $filters
Definition: DriverFilteredSearchResult.php:40
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\initialize
‪initialize()
Definition: DriverFilteredSearchResult.php:111
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$searchResult
‪FileSearchResultInterface $searchResult
Definition: DriverFilteredSearchResult.php:32
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\key
‪key()
Definition: DriverFilteredSearchResult.php:76
‪TYPO3\CMS\Core\Resource\Search\Result\DriverFilteredSearchResult\$parentIdentifier
‪$parentIdentifier
Definition: DriverFilteredSearchResult.php:129