‪TYPO3CMS  ‪main
PagesRepository.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 
26 
33 {
34  protected const ‪TABLE = 'pages';
35 
43  public function ‪doesRootLineContainHiddenPages(array $pageInfo, int $recursionLevel = 0): bool
44  {
45  $pid = (int)($pageInfo['pid'] ?? 0);
46  $isHidden = (bool)($pageInfo['hidden'] ?? false);
47  $extendToSubpages = (bool)($pageInfo['extendToSubpages'] ?? false);
48 
49  // is current page hidden ($recursionLevel=0) or is page in rootline hidden and $extendToSubpages=true
50  if ($isHidden === true && ($extendToSubpages === true || $recursionLevel === 0)) {
51  return true;
52  }
53 
54  if ($pid === 0) {
55  // has no (further) parent pages and no hidden pages detected
56  return false;
57  }
58 
59  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
60  ->getQueryBuilderForTable(self::TABLE);
61  $queryBuilder->getRestrictions()->removeAll();
62 
63  $row = $queryBuilder
64  ->select('uid', 'pid', 'title', 'hidden', 'extendToSubpages')
65  ->from(self::TABLE)
66  ->where(
67  $queryBuilder->expr()->eq(
68  'uid',
69  $queryBuilder->createNamedParameter($pid, ‪Connection::PARAM_INT)
70  )
71  )
72  ->executeQuery()
73  ->fetchAssociative();
74 
75  if ($row !== false) {
76  return $this->‪doesRootLineContainHiddenPages($row, ++$recursionLevel);
77  }
78  return false;
79  }
80 
93  public function ‪getAllSubpagesForPage(
94  int $id,
95  int $depth,
96  string $permsClause,
97  bool $considerHidden = false
98  ): array {
99  $subPageIds = [];
100  if ($depth === 0) {
101  return $subPageIds;
102  }
103 
104  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
105  ->getQueryBuilderForTable(self::TABLE);
106  $queryBuilder->getRestrictions()
107  ->removeAll()
108  ->add(GeneralUtility::makeInstance(DeletedRestriction::class));
109 
110  $result = $queryBuilder
111  ->select('uid', 'title', 'hidden', 'extendToSubpages')
112  ->from(self::TABLE)
113  ->where(
114  $queryBuilder->expr()->eq(
115  'pid',
116  $queryBuilder->createNamedParameter($id, ‪Connection::PARAM_INT)
117  ),
119  )
120  ->executeQuery();
121 
122  while ($row = $result->fetchAssociative()) {
123  $subpageId = (int)$row['uid'];
124  $isHidden = (bool)$row['hidden'];
125  if (!$isHidden || $considerHidden) {
126  $subPageIds[] = $subpageId;
127  }
128  if ($depth > 1 && (!($isHidden && $row['extendToSubpages'] == 1) || $considerHidden)) {
129  $subPageIds = array_merge($subPageIds, $this->‪getAllSubpagesForPage(
130  $subpageId,
131  $depth - 1,
132  $permsClause,
133  $considerHidden
134  ));
135  }
136  }
137  return $subPageIds;
138  }
139 
151  public function ‪getTranslationForPage(
152  int $currentPage,
153  string $permsClause,
154  bool $considerHiddenPages,
155  array $limitToLanguageIds = []
156  ): array {
157  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(self::TABLE);
158  $queryBuilder->getRestrictions()
159  ->removeAll()
160  ->add(GeneralUtility::makeInstance(DeletedRestriction::class));
161  if (!$considerHiddenPages) {
162  $queryBuilder->getRestrictions()->add(GeneralUtility::makeInstance(HiddenRestriction::class));
163  }
164  $constraints = [
165  $queryBuilder->expr()->eq(
166  'l10n_parent',
167  $queryBuilder->createNamedParameter($currentPage, ‪Connection::PARAM_INT)
168  ),
169  ];
170  if (!empty($limitToLanguageIds)) {
171  $constraints[] = $queryBuilder->expr()->in(
172  'sys_language_uid',
173  $queryBuilder->createNamedParameter($limitToLanguageIds, ‪Connection::PARAM_INT_ARRAY)
174  );
175  }
176  if ($permsClause) {
177  $constraints[] = ‪QueryHelper::stripLogicalOperatorPrefix($permsClause);
178  }
179 
180  $result = $queryBuilder
181  ->select('uid', 'title', 'hidden')
182  ->from(self::TABLE)
183  ->where(...$constraints)
184  ->executeQuery();
185 
186  $translatedPages = [];
187  while ($row = $result->fetchAssociative()) {
188  $translatedPages[] = (int)$row['uid'];
189  }
190 
191  return $translatedPages;
192  }
193 }
‪TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction
Definition: HiddenRestriction.php:27
‪TYPO3\CMS\Linkvalidator\Repository\PagesRepository\getAllSubpagesForPage
‪int[] getAllSubpagesForPage(int $id, int $depth, string $permsClause, bool $considerHidden=false)
Definition: PagesRepository.php:93
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:52
‪TYPO3\CMS\Linkvalidator\Repository\PagesRepository\getTranslationForPage
‪int[] getTranslationForPage(int $currentPage, string $permsClause, bool $considerHiddenPages, array $limitToLanguageIds=[])
Definition: PagesRepository.php:151
‪TYPO3\CMS\Linkvalidator\Repository\PagesRepository
Definition: PagesRepository.php:33
‪TYPO3\CMS\Linkvalidator\Repository\PagesRepository\TABLE
‪const TABLE
Definition: PagesRepository.php:34
‪TYPO3\CMS\Linkvalidator\Repository\PagesRepository\doesRootLineContainHiddenPages
‪bool doesRootLineContainHiddenPages(array $pageInfo, int $recursionLevel=0)
Definition: PagesRepository.php:43
‪TYPO3\CMS\Core\Database\Query\QueryHelper
Definition: QueryHelper.php:32
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪TYPO3\CMS\Core\Database\Query\QueryHelper\stripLogicalOperatorPrefix
‪static string stripLogicalOperatorPrefix(string $constraint)
Definition: QueryHelper.php:171
‪TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction
Definition: DeletedRestriction.php:28
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT_ARRAY
‪const PARAM_INT_ARRAY
Definition: Connection.php:72
‪TYPO3\CMS\Linkvalidator\Repository
Definition: BrokenLinkRepository.php:18