/** * 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; }
/** * 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; }
/** * @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; }
/** * Overwrites createQuery method to overwrite storage pid */ public function createQuery() { $query = parent::createQuery(); if ($this->bookmarkStoragePid > 0) { $query->getQuerySettings()->setRespectStoragePage(FALSE); } return $query; }
/** * 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; }
/** * @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); }
/** * @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()); }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }