‪TYPO3CMS  ‪main
RecordFinder.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 
22 use TYPO3\CMS\Core\Database\Query\QueryBuilder;
30 
37 final class ‪RecordFinder
38 {
44  public function ‪findUidsOfStyleguideEntryPages(): array
45  {
46  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
47  $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
48  $result = $queryBuilder->select('uid')
49  ->from('pages')
50  ->where(
51  $queryBuilder->expr()->eq(
52  'pid',
53  $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)
54  ),
55  $queryBuilder->expr()->eq(
56  'tx_styleguide_containsdemo',
57  $queryBuilder->createNamedParameter('tx_styleguide')
58  )
59  )
60  ->executeQuery();
61  $uidList = [];
62  while ($row = $result->fetchAssociative()) {
63  $uidList[] = (int)$row['uid'];
64  }
65  return $uidList;
66  }
67 
77  public function ‪findPidOfMainTableRecord(string $tableName): int
78  {
79  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
80  $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
81  $row = $queryBuilder->select('uid')
82  ->from('pages')
83  ->where(
84  $queryBuilder->expr()->eq(
85  'tx_styleguide_containsdemo',
86  $queryBuilder->createNamedParameter($tableName)
87  ),
88  // only default language pages needed
89  $queryBuilder->expr()->eq(
90  'sys_language_uid',
91  $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)
92  )
93  )
94  ->orderBy('pid', 'DESC')
95  // add uid as deterministic last sorting, as not all dbms in all versions do that
96  ->addOrderBy('uid', 'ASC')
97  ->executeQuery()
98  ->fetchAssociative();
99  if (count($row) !== 1) {
100  throw new ‪Exception(
101  'Found no page for main table ' . $tableName,
102  1457690656
103  );
104  }
105  return (int)$row['uid'];
106  }
107 
113  public function ‪findIdsOfDemoLanguages(): array
114  {
115  try {
116  $site = GeneralUtility::makeInstance(SiteFinder::class)->getSiteByRootPageId($this->‪findUidsOfStyleguideEntryPages()[0]);
117  } catch (‪SiteNotFoundException $e) {
118  return [];
119  }
120 
121  $result = [];
122  foreach ($site->getAllLanguages() as $language) {
123  if ($language->getLanguageId() === 0) {
124  continue;
125  }
126  $result[] = $language->getLanguageId();
127  }
128  return $result;
129  }
130 
136  public function ‪findHighestLanguageId(): int
137  {
138  $lastLanguageId = 0;
139  foreach (GeneralUtility::makeInstance(SiteFinder::class)->getAllSites() as $site) {
140  foreach ($site->getAllLanguages() as $language) {
141  if ($language->getLanguageId() > $lastLanguageId) {
142  $lastLanguageId = $language->getLanguageId();
143  }
144  }
145  }
146  return $lastLanguageId;
147  }
148 
154  public function ‪findUidsOfDemoBeGroups(): array
155  {
156  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('be_groups');
157  $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
158  $rows = $queryBuilder->select('uid')
159  ->from('be_groups')
160  ->where(
161  $queryBuilder->expr()->eq(
162  'tx_styleguide_isdemorecord',
163  $queryBuilder->createNamedParameter(1, ‪Connection::PARAM_INT)
164  )
165  )
166  ->executeQuery()
167  ->fetchAllAssociative();
168  $result = [];
169  if (is_array($rows)) {
170  foreach ($rows as $row) {
171  $result[] = $row['uid'];
172  }
173  }
174  return $result;
175  }
176 
182  public function ‪findUidsOfDemoBeUsers(): array
183  {
184  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('be_users');
185  $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
186  $rows = $queryBuilder->select('uid')
187  ->from('be_users')
188  ->where(
189  $queryBuilder->expr()->eq(
190  'tx_styleguide_isdemorecord',
191  $queryBuilder->createNamedParameter(1, ‪Connection::PARAM_INT)
192  )
193  )
194  ->executeQuery()
195  ->fetchAllAssociative();
196  $result = [];
197  if (is_array($rows)) {
198  foreach ($rows as $row) {
199  $result[] = $row['uid'];
200  }
201  }
202  return $result;
203  }
204 
210  public function ‪findUidsOfStaticdata(): array
211  {
212  $pageUid = $this->‪findPidOfMainTableRecord('tx_styleguide_staticdata');
213  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_styleguide_staticdata');
214  $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
215  $rows = $queryBuilder->select('uid')
216  ->from('tx_styleguide_staticdata')
217  ->where(
218  $queryBuilder->expr()->eq(
219  'pid',
220  $queryBuilder->createNamedParameter($pageUid, ‪Connection::PARAM_INT)
221  )
222  )
223  ->executeQuery()
224  ->fetchAllAssociative();
225  $result = [];
226  if (is_array($rows)) {
227  foreach ($rows as $row) {
228  $result[] = $row['uid'];
229  }
230  }
231  return $result;
232  }
233 
239  public function ‪findDemoFileObjects(string $path = 'styleguide'): array
240  {
241  $storageRepository = GeneralUtility::makeInstance(StorageRepository::class);
242  $storage = $storageRepository->findByUid(1);
243  $folder = $storage->getRootLevelFolder();
244  $folder = $folder->getSubfolder($path);
245  return $folder->getFiles();
246  }
247 
254  {
255  $storageRepository = GeneralUtility::makeInstance(StorageRepository::class);
256  $storage = $storageRepository->findByUid(1);
257  $folder = $storage->getRootLevelFolder();
258  return $folder->getSubfolder('styleguide');
259  }
260 
267  public function ‪findUidsOfFrontendPages(array $types = ['tx_styleguide_frontend_root', 'tx_styleguide_frontend'], array $doktype = []): array
268  {
269  $allowedTypes = ['tx_styleguide_frontend_root', 'tx_styleguide_frontend'];
270  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
271  $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
272 
274  $queryBuilder->select('uid')
275  ->from('pages');
276 
277  foreach ($types as $type) {
278  if (!in_array($type, $allowedTypes)) {
279  continue;
280  }
281 
282  if (!empty($doktype)) {
283  $queryBuilder->orWhere(
284  $queryBuilder->expr()->and(
285  $queryBuilder->expr()->eq(
286  'tx_styleguide_containsdemo',
287  $queryBuilder->createNamedParameter((string)$type),
288  ),
289  $queryBuilder->expr()->eq(
290  'doktype',
291  $queryBuilder->createNamedParameter('254')
292  )
293  )
294  );
295  } else {
296  $queryBuilder->orWhere(
297  $queryBuilder->expr()->eq(
298  'tx_styleguide_containsdemo',
299  $queryBuilder->createNamedParameter((string)$type)
300  )
301  );
302  }
303  }
304 
305  $rows = $queryBuilder->orderBy('pid', 'DESC')->executeQuery()->fetchAllAssociative();
306  $result = [];
307  if (is_array($rows)) {
308  $result = array_column($rows, 'uid');
309  sort($result);
310  }
311 
312  return $result;
313  }
314 
322  public function ‪findTtContent(array $types = ['textmedia', 'textpic', 'image', 'uploads'], string ‪$identifier = 'tx_styleguide_frontend'): array
323  {
324  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
325 
327  $queryBuilder->select('uid', 'pid', 'CType')
328  ->from('tt_content')->where(
329  $queryBuilder->expr()->eq(
330  'tx_styleguide_containsdemo',
331  $queryBuilder->createNamedParameter(‪$identifier)
332  )
333  );
334 
335  if (!empty($types)) {
336  $orExpression = $queryBuilder->expr()->or();
337  foreach ($types as $type) {
338  $orExpression = $orExpression->with($queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter($type)));
339  }
340  $queryBuilder->andWhere((string)$orExpression);
341  }
342 
343  return $queryBuilder->orderBy('uid', 'DESC')->executeQuery()->fetchAllAssociative();
344  }
345 
346  public function ‪findFeUserGroups(): array
347  {
348  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('fe_groups');
349 
351  $queryBuilder->select('uid', 'pid', 'title')
352  ->from('fe_groups')->where(
353  $queryBuilder->expr()->eq(
354  'tx_styleguide_containsdemo',
355  $queryBuilder->createNamedParameter('tx_styleguide_frontend')
356  )
357  );
358 
359  return $queryBuilder->orderBy('uid', 'DESC')->executeQuery()->fetchAllAssociative();
360  }
361 
362  public function ‪findFeUsers(): array
363  {
364  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('fe_users');
365 
367  $queryBuilder->select('uid', 'pid', 'username')
368  ->from('fe_users')->where(
369  $queryBuilder->expr()->eq(
370  'tx_styleguide_containsdemo',
371  $queryBuilder->createNamedParameter('tx_styleguide_frontend')
372  )
373  );
374 
375  return $queryBuilder->orderBy('uid', 'DESC')->executeQuery()->fetchAllAssociative();
376  }
377 }
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:52
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findUidsOfStyleguideEntryPages
‪findUidsOfStyleguideEntryPages()
Definition: RecordFinder.php:44
‪TYPO3\CMS\Core\Exception\SiteNotFoundException
Definition: SiteNotFoundException.php:25
‪TYPO3\CMS\Core\Site\SiteFinder
Definition: SiteFinder.php:31
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findHighestLanguageId
‪int findHighestLanguageId()
Definition: RecordFinder.php:136
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findUidsOfFrontendPages
‪array findUidsOfFrontendPages(array $types=['tx_styleguide_frontend_root', 'tx_styleguide_frontend'], array $doktype=[])
Definition: RecordFinder.php:267
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findFeUsers
‪findFeUsers()
Definition: RecordFinder.php:362
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findDemoFolderObject
‪Folder findDemoFolderObject()
Definition: RecordFinder.php:253
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findUidsOfStaticdata
‪array findUidsOfStaticdata()
Definition: RecordFinder.php:210
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findDemoFileObjects
‪File[] findDemoFileObjects(string $path='styleguide')
Definition: RecordFinder.php:239
‪TYPO3\CMS\Core\Resource\Folder
Definition: Folder.php:38
‪TYPO3\CMS\Core\Resource\StorageRepository
Definition: StorageRepository.php:38
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:26
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findPidOfMainTableRecord
‪int findPidOfMainTableRecord(string $tableName)
Definition: RecordFinder.php:77
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findUidsOfDemoBeUsers
‪array findUidsOfDemoBeUsers()
Definition: RecordFinder.php:182
‪TYPO3\CMS\Styleguide\TcaDataGenerator
Definition: AbstractGenerator.php:18
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findIdsOfDemoLanguages
‪array findIdsOfDemoLanguages()
Definition: RecordFinder.php:113
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findTtContent
‪array findTtContent(array $types=['textmedia', 'textpic', 'image', 'uploads'], string $identifier='tx_styleguide_frontend')
Definition: RecordFinder.php:322
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findUidsOfDemoBeGroups
‪array findUidsOfDemoBeGroups()
Definition: RecordFinder.php:154
‪TYPO3\CMS\Styleguide\TcaDataGenerator\Exception
Definition: Exception.php:25
‪TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction
Definition: DeletedRestriction.php:28
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder\findFeUserGroups
‪findFeUserGroups()
Definition: RecordFinder.php:346
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder
Definition: RecordFinder.php:38
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37