‪TYPO3CMS  ‪main
CategoryCollection.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
25 
32 class ‪CategoryCollection extends CoreCategoryCollection
33 {
44  public static function ‪create(array $collectionRecord, $fillItems = false)
45  {
46  $collection = GeneralUtility::makeInstance(
47  __CLASS__,
48  $collectionRecord['table_name'],
49  $collectionRecord['field_name']
50  );
51  $collection->fromArray($collectionRecord);
52  if ($fillItems) {
53  $collection->loadContents();
54  }
55  return $collection;
56  }
57 
72  public static function ‪load($id, $fillItems = false, $tableName = '', $fieldName = '')
73  {
74  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
75  ->getQueryBuilderForTable(static::$storageTableName);
76  $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
77 
78  $collectionRecord = $queryBuilder
79  ->select('*')
80  ->from(static::$storageTableName)
81  ->where(
82  $queryBuilder->expr()->eq(
83  'uid',
84  $queryBuilder->createNamedParameter($id, ‪Connection::PARAM_INT)
85  )
86  )
87  ->setMaxResults(1)
88  ->executeQuery()
89  ->fetchAssociative();
90 
91  $collectionRecord['table_name'] = $tableName;
92  $collectionRecord['field_name'] = $fieldName;
93 
94  return ‪self::create($collectionRecord, $fillItems);
95  }
96 
107  protected function ‪getCollectedRecords()
108  {
109  $relatedRecords = [];
110 
111  $queryBuilder = $this->‪getCollectedRecordsQueryBuilder();
112  $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));
113  $context = GeneralUtility::makeInstance(Context::class);
114  $pageRepository = GeneralUtility::makeInstance(PageRepository::class, $context);
115  $languageId = $context->getPropertyFromAspect('language', 'contentId', 0);
116 
117  // If language handling is defined for item table, add language condition
118  if (isset(‪$GLOBALS['TCA'][$this->‪getItemTableName()]['ctrl']['languageField'])) {
119  // Consider default or "all" language
120  $languageField = sprintf(
121  '%s.%s',
122  $this->‪getItemTableName(),
123  ‪$GLOBALS['TCA'][$this->‪getItemTableName()]['ctrl']['languageField']
124  );
125 
126  $languageConstraint = $queryBuilder->expr()->in(
127  $languageField,
128  $queryBuilder->createNamedParameter([0, -1], ‪Connection::PARAM_INT_ARRAY)
129  );
130 
131  // If not in default language, also consider items in current language with no original
132  if ($languageId > 0) {
133  $transOrigPointerField = sprintf(
134  '%s.%s',
135  $this->‪getItemTableName(),
136  ‪$GLOBALS['TCA'][$this->‪getItemTableName()]['ctrl']['transOrigPointerField']
137  );
138 
139  $languageConstraint = $queryBuilder->expr()->or(
140  $languageConstraint,
141  $queryBuilder->expr()->and(
142  $queryBuilder->expr()->eq(
143  $languageField,
144  $queryBuilder->createNamedParameter($languageId, ‪Connection::PARAM_INT)
145  ),
146  $queryBuilder->expr()->eq(
147  $transOrigPointerField,
148  $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)
149  )
150  )
151  );
152  }
153 
154  $queryBuilder->andWhere($languageConstraint);
155  }
156 
157  // Get the related records from the database
158  $result = $queryBuilder->executeQuery();
159 
160  while (‪$record = $result->fetchAssociative()) {
161  // Overlay the record for workspaces
162  $pageRepository->versionOL(
163  $this->‪getItemTableName(),
164  ‪$record
165  );
166 
167  // Overlay the record for translations
168  if (is_array(‪$record)) {
169  ‪$record = $pageRepository->getLanguageOverlay($this->‪getItemTableName(), ‪$record);
170  }
171 
172  // Record may have been unset during the overlay process
173  if (is_array(‪$record)) {
174  $relatedRecords[] = ‪$record;
175  }
176  }
177 
178  return $relatedRecords;
179  }
180 }
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:52
‪TYPO3\CMS\Frontend\Category\Collection\CategoryCollection\create
‪static CategoryCollection create(array $collectionRecord, $fillItems=false)
Definition: CategoryCollection.php:44
‪TYPO3\CMS\Frontend\Category\Collection
Definition: CategoryCollection.php:16
‪TYPO3\CMS\Core\Category\Collection\CategoryCollection
Definition: CategoryCollection.php:32
‪TYPO3\CMS\Frontend\Category\Collection\CategoryCollection\load
‪static CategoryCollection load($id, $fillItems=false, $tableName='', $fieldName='')
Definition: CategoryCollection.php:72
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:54
‪TYPO3\CMS\Frontend\Category\Collection\CategoryCollection\getCollectedRecords
‪array getCollectedRecords()
Definition: CategoryCollection.php:107
‪TYPO3\CMS\Core\Collection\AbstractRecordCollection\getItemTableName
‪string getItemTableName()
Definition: AbstractRecordCollection.php:221
‪TYPO3\CMS\Webhooks\Message\$record
‪identifier readonly int readonly array $record
Definition: PageModificationMessage.php:36
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Domain\Repository\PageRepository
Definition: PageRepository.php:69
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Database\Query\Restriction\FrontendRestrictionContainer
Definition: FrontendRestrictionContainer.php:30
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT_ARRAY
‪const PARAM_INT_ARRAY
Definition: Connection.php:72
‪TYPO3\CMS\Frontend\Category\Collection\CategoryCollection
Definition: CategoryCollection.php:33
‪TYPO3\CMS\Core\Category\Collection\CategoryCollection\getCollectedRecordsQueryBuilder
‪QueryBuilder getCollectedRecordsQueryBuilder()
Definition: CategoryCollection.php:130