cbc960acbb55790949d100770a64057ae5192ca5
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Database / Query / Restriction / StartTimeRestriction.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
21 /**
22 * Restriction to filter records, that should not be shown until the start time has been reached
23 */
24 class StartTimeRestriction implements QueryRestrictionInterface
25 {
26 /**
27 * @param int $accessTimeStamp
28 */
29 public function __construct(int $accessTimeStamp = null)
30 {
31 $this->accessTimeStamp = $accessTimeStamp ?: ($GLOBALS['SIM_ACCESS_TIME'] ?? null);
32 }
33
34 /**
35 * @var int
36 */
37 protected $accessTimeStamp;
38
39 /**
40 * Main method to build expressions for given tables
41 * Evaluates the ctrl/enablecolumns/starttime flag of the table and adds the according restriction if set
42 *
43 * @param array $queriedTables Array of tables, where array key is table name and value potentially an alias
44 * @param ExpressionBuilder $expressionBuilder Expression builder instance to add restrictions with
45 * @return CompositeExpression The result of query builder expression(s)
46 * @throws \RuntimeException
47 */
48 public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder): CompositeExpression
49 {
50 $constraints = [];
51 foreach ($queriedTables as $tableName => $tableAlias) {
52 $startTimeFieldName = $GLOBALS['TCA'][$tableName]['ctrl']['enablecolumns']['starttime'] ?? null;
53 if (!empty($startTimeFieldName)) {
54 if (empty($this->accessTimeStamp)) {
55 throw new \RuntimeException(
56 'accessTimeStamp needs to be set to an integer value, but is empty! Maybe $GLOBALS[\'SIM_ACCESS_TIME\'] has been overridden somewhere?',
57 1462820645
58 );
59 }
60 $tablePrefix = $tableAlias ?: $tableName;
61 $constraints[] = $expressionBuilder->lte(
62 $tablePrefix . '.' . $startTimeFieldName,
63 (int)$this->accessTimeStamp
64 );
65 }
66 }
67 return $expressionBuilder->andX(...$constraints);
68 }
69 }