コード例 #1
0
 /**
  * Translates a query an manipulates given query object
  *
  * @param Tx_PtExtlist_Domain_QueryObject_Criteria $criteria Criteria to be translated
  * @param \TYPO3\CMS\Extbase\Persistence\Generic\Query $extbaseQuery Query to add criteria to
  * @param \TYPO3\CMS\Extbase\Persistence\Repository $extbaseRepository Associated repository
  * @throws Exception
  * @return \TYPO3\CMS\Extbase\Persistence\Generic\Query
  */
 public static function translateCriteria(Tx_PtExtlist_Domain_QueryObject_Criteria $criteria, \TYPO3\CMS\Extbase\Persistence\Generic\Query $extbaseQuery, \TYPO3\CMS\Extbase\Persistence\Repository $extbaseRepository)
 {
     if (!is_a($criteria, 'Tx_PtExtlist_Domain_QueryObject_OrCriteria')) {
         throw new Exception('Given criteria is not of type Tx_PtExtlist_Domain_QueryObject_Criteria --> cannot be translated by or criteria translator! 1326466193');
     }
     /**
      * This is a little ugly here:
      *
      * As we do not create Extbase criterias from our generic pt_extlist criterias
      * but set the criterias directly on the created extbase query, we have to cheat
      * here and generate two helper queries, whenever a OR query has to be translated.
      *
      * After having translated the two criterias of the generic OR criteria, we
      * put them together again in a single extbase query.
      */
     $tmpQuery1 = $extbaseRepository->createQuery();
     $tmpQuery2 = $extbaseRepository->createQuery();
     // translate first OR criteria by creating a new extbase query
     $tmpQuery1 = Tx_PtExtlist_Domain_DataBackend_ExtBaseDataBackend_ExtBaseInterpreter_ExtBaseInterpreter::setCriteriaOnExtBaseQueryByCriteria($criteria->getFirstCriteria(), $tmpQuery1, $extbaseRepository);
     // translate second OR criteria by creating a new extbase query
     $tmpQuery2 = Tx_PtExtlist_Domain_DataBackend_ExtBaseDataBackend_ExtBaseInterpreter_ExtBaseInterpreter::setCriteriaOnExtBaseQueryByCriteria($criteria->getSecondCriteria(), $tmpQuery2, $extbaseRepository);
     // put both translated criterias together again in a single extbase query
     if ($extbaseQuery->getConstraint()) {
         $extbaseQuery->matching($extbaseQuery->logicalAnd($extbaseQuery->getConstraint(), $extbaseQuery->logicalOr($tmpQuery1->getConstraint(), $tmpQuery2->getConstraint())));
     } else {
         $extbaseQuery->matching($extbaseQuery->logicalOr($tmpQuery1->getConstraint(), $tmpQuery2->getConstraint()));
     }
     return $extbaseQuery;
 }
コード例 #2
0
 /**
  * All Queries withoud storagePID
  *
  * @return Tx_Extbase_Persistence_QueryInterface
  */
 public function createQuery()
 {
     $query = parent::createQuery();
     $query->getQuerySettings()->setRespectStoragePage(FALSE);
     $query->getQuerySettings()->setRespectSysLanguage(FALSE);
     return $query;
 }
コード例 #3
0
 /**
  * @param null $pageUid
  *
  * @return \TYPO3\CMS\Extbase\Persistence\QueryInterface
  */
 public function createQuery($pageUid = NULL)
 {
     $query = parent::createQuery();
     if ($pageUid !== NULL) {
         $query->getQuerySettings()->setStoragePageIds(array($pageUid));
     }
     return $query;
 }
コード例 #4
0
 /**
  * Overwrites createQuery method to overwrite storage pid
  */
 public function createQuery()
 {
     $query = parent::createQuery();
     if ($this->bookmarkStoragePid > 0) {
         $query->getQuerySettings()->setRespectStoragePage(FALSE);
     }
     return $query;
 }
コード例 #5
0
 /**
  * Translates a query into an extbase query
  *
  * @param Tx_PtExtlist_Domain_QueryObject_Query $query
  * @param \TYPO3\CMS\Extbase\Persistence\Repository $repository
  * @return \TYPO3\CMS\Extbase\Persistence\Generic\Query
  */
 public static function interpretQueryByRepository(Tx_PtExtlist_Domain_QueryObject_Query $query, \TYPO3\CMS\Extbase\Persistence\Repository $repository)
 {
     $emptyExtbaseQuery = $repository->createQuery();
     /* @var $emptyExtbaseQuery \TYPO3\CMS\Extbase\Persistence\Generic\Query */
     $constrainedExtbaseQuery = self::setAllCriteriasOnExtBaseQueryByQueryObject($query, $emptyExtbaseQuery, $repository);
     $limitedExtbaseQuery = self::setLimitOnExtBaseQueryByQueryObject($query, $constrainedExtbaseQuery);
     $orderedExtbaseQuery = self::setSortingOnExtBaseQueryByQueryObject($query, $limitedExtbaseQuery);
     return $orderedExtbaseQuery;
 }
コード例 #6
0
ファイル: RepositoryTest.php プロジェクト: plan2net/TYPO3.CMS
 /**
  * @test
  */
 public function createQueryReturnsQueryWithUnmodifiedDefaultQuerySettings()
 {
     $this->mockQuery = new \TYPO3\CMS\Extbase\Persistence\Generic\Query('foo');
     $mockDefaultQuerySettings = $this->getMock(\TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface::class);
     $this->repository->setDefaultQuerySettings($mockDefaultQuerySettings);
     $query = $this->repository->createQuery();
     $instanceQuerySettings = $query->getQuerySettings();
     $this->assertEquals($mockDefaultQuerySettings, $instanceQuerySettings);
     $this->assertNotSame($mockDefaultQuerySettings, $instanceQuerySettings);
 }
コード例 #7
0
 /**
  * @test
  */
 public function orderingByTitleRespectsEnglishTitles()
 {
     $query = $this->postRepository->createQuery();
     $querySettings = $query->getQuerySettings();
     $querySettings->setStoragePageIds(array(1));
     $querySettings->setRespectSysLanguage(TRUE);
     $querySettings->setLanguageUid(1);
     $query->setOrderings(array('title' => QueryInterface::ORDER_ASCENDING));
     /** @var Post[] $posts */
     $posts = $query->execute()->toArray();
     $this->assertCount(3, $posts);
     $this->assertSame('A EN:Post2', $posts[0]->getTitle());
     $this->assertSame('B EN:Post1', $posts[1]->getTitle());
     $this->assertSame('Post3', $posts[2]->getTitle());
 }
コード例 #8
0
 /**
  * Overwrite createQuery to don't respect enable fields
  *
  * @return \TYPO3\CMS\Extbase\Persistence\QueryInterface
  */
 public function createQuery()
 {
     $query = parent::createQuery();
     $query->getQuerySettings()->setIgnoreEnableFields(TRUE);
     return $query;
 }
コード例 #9
0
 /**
  * Creates query and makes sure that no Extbase magic is performed with
  * pid, languages, etc.
  *
  * Magic is cool but not on this case.
  *
  * @return \TYPO3\CMS\Extbase\Persistence\QueryInterface
  */
 public function createQuery()
 {
     $query = parent::createQuery();
     $query->getQuerySettings()->setRespectStoragePage(false)->setIgnoreEnableFields(true)->setRespectSysLanguage(false);
     return $query;
 }
コード例 #10
0
ファイル: DocumentRepository.php プロジェクト: pkerling/rest
 /**
  * Returns a query for objects of this repository
  *
  * @return \TYPO3\CMS\Extbase\Persistence\QueryInterface
  * @api
  */
 public function createQuery()
 {
     $query = parent::createQuery();
     $query->getQuerySettings()->setRespectSysLanguage(FALSE);
     $query->getQuerySettings()->setRespectStoragePage(FALSE);
     $query->getQuerySettings()->setReturnRawQueryResult($this->useRawQueryResults);
     return $query;
     $query = $this->persistenceManager->createQueryForType($this->objectType);
     if ($this->defaultOrderings !== array()) {
         $query->setOrderings($this->defaultOrderings);
     }
     if ($this->defaultQuerySettings !== NULL) {
         $query->setQuerySettings(clone $this->defaultQuerySettings);
     }
     $query->getQuerySettings()->setRespectSysLanguage(FALSE);
     $query->getQuerySettings()->setRespectStoragePage(FALSE);
     $query->getQuerySettings()->setReturnRawQueryResult($this->useRawQueryResults);
     return $query;
 }
コード例 #11
0
ファイル: DocumentRepository.php プロジェクト: tritumRz/rest
 /**
  * Returns a query for objects of this repository
  *
  * @return \TYPO3\CMS\Extbase\Persistence\QueryInterface
  * @api
  */
 public function createQuery()
 {
     $query = parent::createQuery();
     $querySettings = $query->getQuerySettings();
     $querySettings->setRespectSysLanguage(FALSE);
     $querySettings->setRespectStoragePage(FALSE);
     if (method_exists($querySettings, 'setReturnRawQueryResult')) {
         $querySettings->setReturnRawQueryResult($this->useRawQueryResults);
     }
     return $query;
 }