TYPO3 CMS  TYPO3_6-2
ExtensionRepository.php
Go to the documentation of this file.
1 <?php
3 
22 
26  const TABLE_NAME = 'tx_extensionmanager_domain_model_extension';
27 
32 
37  protected $dataMapper;
38 
44  public function initializeObject() {
46  $defaultQuerySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\QuerySettingsInterface');
47  $defaultQuerySettings->setRespectStoragePage(FALSE);
49  $this->databaseConnection = $GLOBALS['TYPO3_DB'];
50  }
51 
57  public function countAll() {
58  $query = $this->createQuery();
59  $query = $this->addDefaultConstraints($query);
60  return $query->execute()->count();
61  }
62 
68  public function findAll() {
69  $query = $this->createQuery();
70  $query = $this->addDefaultConstraints($query);
71  $query->setOrderings(
72  array(
73  'lastUpdated' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
74  )
75  );
76  return $query->execute();
77  }
78 
85  public function findByExtensionKeyOrderedByVersion($extensionKey) {
86  $query = $this->createQuery();
87  $query->matching($query->logicalAnd($query->equals('extensionKey', $extensionKey), $query->greaterThanOrEqual('reviewState', 0)));
88  $query->setOrderings(array('version' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING));
89  return $query->execute();
90  }
91 
98  public function findOneByCurrentVersionByExtensionKey($extensionKey) {
99  $query = $this->createQuery();
100  $query->matching(
101  $query->logicalAnd(
102  $query->equals('extensionKey', $extensionKey),
103  $query->greaterThanOrEqual('reviewState', 0),
104  $query->equals('currentVersion', 1)
105  )
106  );
107  $query->setLimit(1);
108  return $query->execute()->getFirst();
109  }
110 
118  public function findOneByExtensionKeyAndVersion($extensionKey, $version) {
119  $query = $this->createQuery();
120  // Hint: This method must not filter out insecure extensions, if needed,
121  // it should be done on a different level, or with a helper method.
122  $query->matching($query->logicalAnd(
123  $query->equals('extensionKey', $extensionKey),
124  $query->equals('version', $version)
125  ));
126  return $query->setLimit(1)->execute()->getFirst();
127  }
128 
138  public function findByTitleOrAuthorNameOrExtensionKey($searchString) {
139  $quotedSearchString = $this->databaseConnection->escapeStrForLike($this->databaseConnection->quoteStr($searchString, 'tx_extensionmanager_domain_model_extension'), 'tx_extensionmanager_domain_model_extension');
140  $quotedSearchStringForLike = '\'%' . $quotedSearchString . '%\'';
141  $quotedSearchString = '\'' . $quotedSearchString . '\'';
142  $select =
143  self::TABLE_NAME . '.*, ' .
144  'CASE ' .
145  'WHEN extension_key = ' . $quotedSearchString . ' THEN 16 ' .
146  'WHEN extension_key LIKE ' . $quotedSearchStringForLike . ' THEN 8 ' .
147  'WHEN title LIKE ' . $quotedSearchStringForLike . ' THEN 4 ' .
148  'WHEN description LIKE ' . $quotedSearchStringForLike . ' THEN 2 ' .
149  'WHEN author_name LIKE ' . $quotedSearchStringForLike . ' THEN 1 ' .
150  'END AS position';
151  $where = '(
152  extension_key = ' . $quotedSearchString . ' OR
153  extension_key LIKE ' . $quotedSearchStringForLike . ' OR
154  title LIKE ' . $quotedSearchStringForLike . ' OR
155  description LIKE ' . $quotedSearchStringForLike . ' OR
156  author_name LIKE ' . $quotedSearchStringForLike . '
157  )
158  AND current_version = 1 AND review_state >= 0';
159  $order = 'position DESC';
160  $result = $this->databaseConnection->exec_SELECTgetRows($select, self::TABLE_NAME, $where, '', $order);
161  return $this->dataMapper->map('TYPO3\\CMS\\Extensionmanager\\Domain\\Model\\Extension', $result);
162  }
163 
173  public function findByVersionRangeAndExtensionKeyOrderedByVersion($extensionKey, $lowestVersion = 0, $highestVersion = 0, $includeCurrentVersion = TRUE) {
174  $query = $this->createQuery();
175  $constraint = NULL;
176  if ($lowestVersion !== 0 && $highestVersion !== 0) {
177  if ($includeCurrentVersion) {
178  $constraint = $query->logicalAnd($query->lessThanOrEqual('integerVersion', $highestVersion), $query->greaterThanOrEqual('integerVersion', $lowestVersion), $query->equals('extensionKey', $extensionKey));
179  } else {
180  $constraint = $query->logicalAnd($query->lessThanOrEqual('integerVersion', $highestVersion), $query->greaterThan('integerVersion', $lowestVersion), $query->equals('extensionKey', $extensionKey));
181  }
182  } elseif ($lowestVersion === 0 && $highestVersion !== 0) {
183  if ($includeCurrentVersion) {
184  $constraint = $query->logicalAnd($query->lessThanOrEqual('integerVersion', $highestVersion), $query->equals('extensionKey', $extensionKey));
185  } else {
186  $constraint = $query->logicalAnd($query->lessThan('integerVersion', $highestVersion), $query->equals('extensionKey', $extensionKey));
187  }
188  } elseif ($lowestVersion !== 0 && $highestVersion === 0) {
189  if ($includeCurrentVersion) {
190  $constraint = $query->logicalAnd($query->greaterThanOrEqual('integerVersion', $lowestVersion), $query->equals('extensionKey', $extensionKey));
191  } else {
192  $constraint = $query->logicalAnd($query->greaterThan('integerVersion', $lowestVersion), $query->equals('extensionKey', $extensionKey));
193  }
194  } elseif ($lowestVersion === 0 && $highestVersion === 0) {
195  $constraint = $query->equals('extensionKey', $extensionKey);
196  }
197  if ($constraint) {
198  $query->matching($query->logicalAnd($constraint, $query->greaterThanOrEqual('reviewState', 0)));
199  }
200  $query->setOrderings(array(
201  'integerVersion' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
202  ));
203  return $query->execute();
204  }
205 
211  public function findAllCommunityDistributions() {
212  $query = $this->createQuery();
213  $query->matching(
214  $query->logicalAnd(
215  $query->equals('category', \TYPO3\CMS\Extensionmanager\Domain\Model\Extension::DISTRIBUTION_CATEGORY),
216  $query->equals('currentVersion', 1),
217  $query->logicalNot($query->equals('ownerusername', 'typo3v4'))
218  )
219  );
220 
221  $query->setOrderings(array(
222  'alldownloadcounter' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
223  ));
224 
225  return $query->execute();
226  }
227 
233  public function findAllOfficialDistributions() {
234  $query = $this->createQuery();
235  $query->matching(
236  $query->logicalAnd(
237  $query->equals('category', \TYPO3\CMS\Extensionmanager\Domain\Model\Extension::DISTRIBUTION_CATEGORY),
238  $query->equals('currentVersion', 1),
239  $query->equals('ownerusername', 'typo3v4')
240  )
241  );
242 
243  $query->setOrderings(array(
244  'alldownloadcounter' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
245  ));
246 
247  return $query->execute();
248  }
249 
258  public function countByVersionRangeAndExtensionKey($extensionKey, $lowestVersion = 0, $highestVersion = 0) {
259  return $this->findByVersionRangeAndExtensionKeyOrderedByVersion($extensionKey, $lowestVersion, $highestVersion)->count();
260  }
261 
268  public function findHighestAvailableVersion($extensionKey) {
269  $query = $this->createQuery();
270  $query->matching($query->logicalAnd($query->equals('extensionKey', $extensionKey), $query->greaterThanOrEqual('reviewState', 0)));
271  $query->setOrderings(array(
272  'integerVersion' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
273  ));
274  return $query->setLimit(1)->execute()->getFirst();
275  }
276 
283  public function insertLastVersion($repositoryUid = 1) {
284  $this->markExtensionWithMaximumVersionAsCurrent($repositoryUid);
285 
286  return $this->getNumberOfCurrentExtensions();
287  }
288 
297  protected function markExtensionWithMaximumVersionAsCurrent($repositoryUid) {
298  $uidsOfCurrentVersion = $this->fetchMaximalVersionsForAllExtensions($repositoryUid);
299 
300  $this->databaseConnection->exec_UPDATEquery(
301  self::TABLE_NAME,
302  'uid IN (' . implode(',', $uidsOfCurrentVersion) . ')',
303  array(
304  'current_version' => 1,
305  )
306  );
307  }
308 
317  protected function fetchMaximalVersionsForAllExtensions($repositoryUid) {
318  $queryResult = $this->databaseConnection->sql_query(
319  'SELECT a.uid AS uid ' .
320  'FROM ' . self::TABLE_NAME . ' a ' .
321  'LEFT JOIN ' . self::TABLE_NAME . ' b ON a.repository = b.repository AND a.extension_key = b.extension_key AND a.integer_version < b.integer_version ' .
322  'WHERE a.repository = ' . (int)$repositoryUid . ' AND b.extension_key IS NULL ' .
323  'ORDER BY a.uid'
324  );
325 
326  $extensionUids = array();
327  while ($row = $this->databaseConnection->sql_fetch_assoc($queryResult)) {
328  $extensionUids[] = $row['uid'];
329  }
330  $this->databaseConnection->sql_free_result($queryResult);
331  return $extensionUids;
332  }
333 
339  protected function getNumberOfCurrentExtensions() {
340  return $this->databaseConnection->exec_SELECTcountRows(
341  '*',
342  self::TABLE_NAME,
343  'current_version = 1'
344  );
345  }
346 
354  protected function addDefaultConstraints(\TYPO3\CMS\Extbase\Persistence\Generic\Query $query) {
355  if ($query->getConstraint()) {
356  $query->matching($query->logicalAnd(
357  $query->getConstraint(),
358  $query->equals('current_version', TRUE),
359  $query->greaterThanOrEqual('reviewState', 0)
360  ));
361  } else {
362  $query->matching($query->logicalAnd(
363  $query->equals('current_version', TRUE),
364  $query->greaterThanOrEqual('reviewState', 0)
365  ));
366  }
367  return $query;
368  }
369 }
addDefaultConstraints(\TYPO3\CMS\Extbase\Persistence\Generic\Query $query)
findByVersionRangeAndExtensionKeyOrderedByVersion($extensionKey, $lowestVersion=0, $highestVersion=0, $includeCurrentVersion=TRUE)
countByVersionRangeAndExtensionKey($extensionKey, $lowestVersion=0, $highestVersion=0)
if($list_of_literals) if(!empty($literals)) if(!empty($literals)) $result
Analyse literals to prepend the N char to them if their contents aren&#39;t numeric.
setDefaultQuerySettings(\TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface $defaultQuerySettings)
Definition: Repository.php:240
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]