[TASK] Remove ext:dbal from installation steps
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Database / Query / Restriction / FrontendRestrictionContainer.php
1 <?php
2 declare (strict_types = 1);
3 namespace TYPO3\CMS\Core\Database\Query\Restriction;
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
18 use TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression;
19 use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder;
20 use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
21
22 /**
23 * A collection of restrictions to be used in frontend context.
24 * This is a replacement for PageRepository::enableFields()
25 */
26 class FrontendRestrictionContainer extends AbstractRestrictionContainer
27 {
28 /**
29 * @var QueryRestrictionInterface[]
30 */
31 protected $defaultRestrictionTypes = [
32 DeletedRestriction::class,
33 FrontendWorkspaceRestriction::class,
34 HiddenRestriction::class,
35 StartTimeRestriction::class,
36 EndTimeRestriction::class,
37 FrontendGroupRestriction::class,
38 ];
39
40 /**
41 * FrontendRestrictionContainer constructor.
42 * Initializes the default restrictions for frontend requests
43 */
44 public function __construct()
45 {
46 foreach ($this->defaultRestrictionTypes as $restrictionType) {
47 $this->add($this->createRestriction($restrictionType));
48 }
49 }
50
51 /**
52 * Main method to build expressions for given tables
53 * Iterates over all registered restrictions and removes the hidden restriction if preview is requested
54 *
55 * @param array $queriedTables Array of tables, where array key is table name and value potentially an alias
56 * @param ExpressionBuilder $expressionBuilder Expression builder instance to add restrictions with
57 * @return CompositeExpression The result of query builder expression(s)
58 */
59 public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder): CompositeExpression
60 {
61 $constraints = [];
62 /** @var TypoScriptFrontendController $typoScriptFrontendController */
63 $typoScriptFrontendController = $GLOBALS['TSFE'];
64 foreach ($this->restrictions as $restriction) {
65 foreach ($queriedTables as $tableName => $tableAlias) {
66 $disableRestriction = false;
67 if ($restriction instanceof HiddenRestriction) {
68 // If display of hidden records is requested, we must disable the hidden restriction.
69 $disableRestriction = $tableName === 'pages' ? $typoScriptFrontendController->showHiddenPage : $typoScriptFrontendController->showHiddenRecords;
70 }
71 if (!$disableRestriction) {
72 $constraints[] = $restriction->buildExpression([$tableName => $tableAlias], $expressionBuilder);
73 }
74 }
75 }
76 return $expressionBuilder->andX(...$constraints);
77 }
78 }