TYPO3 CMS  TYPO3_8-7
CategoryCollection.php
Go to the documentation of this file.
1 <?php
3 
4 /*
5  * This file is part of the TYPO3 CMS project.
6  *
7  * It is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License, either version 2
9  * of the License, or any later version.
10  *
11  * For the full copyright and license information, please read the
12  * LICENSE.txt file that was distributed with this source code.
13  *
14  * The TYPO3 project - inspiring people to share!
15  */
16 
21 
27 {
38  public static function create(array $collectionRecord, $fillItems = false)
39  {
41  $collection = GeneralUtility::makeInstance(
42  __CLASS__,
43  $collectionRecord['table_name'],
44  $collectionRecord['field_name']
45  );
46  $collection->fromArray($collectionRecord);
47  if ($fillItems) {
48  $collection->loadContents();
49  }
50  return $collection;
51  }
52 
67  public static function load($id, $fillItems = false, $tableName = '', $fieldName = '')
68  {
69  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
70  ->getQueryBuilderForTable(static::$storageTableName);
71  $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
72 
73  $collectionRecord = $queryBuilder
74  ->select('*')
75  ->from(static::$storageTableName)
76  ->where(
77  $queryBuilder->expr()->eq(
78  'uid',
79  $queryBuilder->createNamedParameter($id, \PDO::PARAM_INT)
80  )
81  )
82  ->setMaxResults(1)
83  ->execute()
84  ->fetch();
85 
86  $collectionRecord['table_name'] = $tableName;
87  $collectionRecord['field_name'] = $fieldName;
88 
89  return self::create($collectionRecord, $fillItems);
90  }
91 
102  protected function getCollectedRecords()
103  {
104  $relatedRecords = [];
105 
106  $queryBuilder = $this->getCollectedRecordsQueryBuilder();
107  $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
108  $tsfe = self::getTypoScriptFrontendController();
109 
110  // If language handling is defined for item table, add language condition
111  if (isset($GLOBALS['TCA'][$this->getItemTableName()]['ctrl']['languageField'])) {
112  // Consider default or "all" language
113  $languageField = sprintf(
114  '%s.%s',
115  $this->getItemTableName(),
116  $GLOBALS['TCA'][$this->getItemTableName()]['ctrl']['languageField']
117  );
118 
119  $languageConstraint = $queryBuilder->expr()->in(
120  $languageField,
121  $queryBuilder->createNamedParameter([0, -1], Connection::PARAM_INT_ARRAY)
122  );
123 
124  // If not in default language, also consider items in current language with no original
125  if ($tsfe->sys_language_content > 0) {
126  $transOrigPointerField = sprintf(
127  '%s.%s',
128  $this->getItemTableName(),
129  $GLOBALS['TCA'][$this->getItemTableName()]['ctrl']['transOrigPointerField']
130  );
131 
132  $languageConstraint = $queryBuilder->expr()->orX(
133  $languageConstraint,
134  $queryBuilder->expr()->andX(
135  $queryBuilder->expr()->eq(
136  $languageField,
137  $queryBuilder->createNamedParameter($tsfe->sys_language_content, \PDO::PARAM_INT)
138  ),
139  $queryBuilder->expr()->eq(
140  $transOrigPointerField,
141  $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)
142  )
143  )
144  );
145  }
146 
147  $queryBuilder->andWhere($languageConstraint);
148  }
149 
150  // Get the related records from the database
151  $result = $queryBuilder->execute();
152 
153  while ($record = $result->fetch()) {
154  // Overlay the record for workspaces
155  $tsfe->sys_page->versionOL(
156  $this->getItemTableName(),
157  $record
158  );
159 
160  // Overlay the record for translations
161  if (is_array($record) && $tsfe->sys_language_contentOL) {
162  if ($this->getItemTableName() === 'pages') {
163  $record = $tsfe->sys_page->getPageOverlay($record);
164  } else {
165  $record = $tsfe->sys_page->getRecordOverlay(
166  $this->getItemTableName(),
167  $record,
168  $tsfe->sys_language_content,
169  $tsfe->sys_language_contentOL
170  );
171  }
172  }
173 
174  // Record may have been unset during the overlay process
175  if (is_array($record)) {
176  $relatedRecords[] = $record;
177  }
178  }
179 
180  return $relatedRecords;
181  }
182 
188  protected static function getTypoScriptFrontendController()
189  {
190  return $GLOBALS['TSFE'];
191  }
192 }
static load($id, $fillItems=false, $tableName='', $fieldName='')
static create(array $collectionRecord, $fillItems=false)
static makeInstance($className,... $constructorArguments)
if(TYPO3_MODE==='BE') $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['frontendEditingController']['default']