/**
  * Returns an array of constraints created from a given demand object.
  *
  * @param Tx_Extbase_Persistence_QueryInterface $query
  * @param Tx_News_Domain_Model_DemandInterface $demand
  * @return array<Tx_Extbase_Persistence_QOM_Constrain>
  */
 protected function createConstraintsFromDemand(Tx_Extbase_Persistence_QueryInterface $query, Tx_News_Domain_Model_DemandInterface $demand)
 {
     $constraints = array();
     // Storage page
     if ($demand->getStoragePage() != 0) {
         $pidList = t3lib_div::intExplode(',', $demand->getStoragePage(), TRUE);
         $constraints[] = $query->in('pid', $pidList);
     }
     // Clean not used constraints
     foreach ($constraints as $key => $value) {
         if (is_null($value)) {
             unset($constraints[$key]);
         }
     }
     return $constraints;
 }
 /**
  * @test
  */
 public function magicCallMethodAcceptsCountBySomethingCallsAndExecutesAQueryWithThatCriteria()
 {
     $mockQueryResult = $this->getMock('Tx_Extbase_Persistence_QueryResultInterface');
     $mockQueryResult->expects($this->once())->method('count')->will($this->returnValue(2));
     $this->mockQuery->expects($this->once())->method('equals')->with('foo', 'bar')->will($this->returnValue('matchCriteria'));
     $this->mockQuery->expects($this->once())->method('matching')->with('matchCriteria')->will($this->returnValue($this->mockQuery));
     $this->mockQuery->expects($this->once())->method('execute')->will($this->returnValue($mockQueryResult));
     $this->assertSame(2, $this->repository->countByFoo('bar'));
 }
Example #3
0
 /**
  * Loads the objects this QueryResult is supposed to hold
  *
  * @return void
  */
 protected function initialize()
 {
     if (!is_array($this->queryResult)) {
         $this->queryResult = $this->dataMapper->map($this->query->getType(), $this->persistenceManager->getObjectDataByQuery($this->query));
     }
 }
 /**
  * Return the contrains
  *
  * @param Tx_Extbase_Persistence_QueryInterface $query The filter the references must apply to
  * @param Tx_Typo3Agencies_Domain_Model_Filter $filter The filter the references must apply to
  * @return array The references
  */
 protected function getConstraints(Tx_Extbase_Persistence_QueryInterface $query, Tx_Typo3Agencies_Domain_Model_Filter $filter)
 {
     $constrains = array();
     // Special case: remove certain type of record from the result set
     $_constrains = array();
     $_constrains[] = $query->logicalNot($query->equals('first_name', ''));
     $_constrains[] = $query->logicalNot($query->equals('last_name', ''));
     $_constrains[] = $query->logicalNot($query->equals('name', ''));
     $constrains[] = $query->logicalOr($_constrains);
     // Membership case
     $members = $filter->getMembers();
     if (!empty($members)) {
         $_constrains = array();
         foreach ($members as $member) {
             $_constrains[] = $query->equals('member', $member);
         }
         $constrains[] = $query->logicalOr($_constrains);
     } else {
         // get all membershiptypes
         $constrains[] = $query->greaterThan('member', 0);
     }
     // Service case
     if ($filter->getTrainingService()) {
         $constrains[] = $query->equals('training_service', $filter->getTrainingService());
     }
     if ($filter->getHostingService()) {
         $constrains[] = $query->equals('hosting_service', $filter->getHostingService());
     }
     if ($filter->getDevelopmentService()) {
         $constrains[] = $query->equals('development_service', $filter->getDevelopmentService());
     }
     // Country case
     if ($filter->getCountry()) {
         $constrains[] = $query->equals('country', $filter->getCountry());
     }
     if ($filter->getFeUser()) {
         $constrains[] = $query->logicalOr($query->equals('administrator', $filter->getFeUser()), $query->logicalAnd($query->equals('approved', true), $query->logicalOr($query->equals('payed_until_date', 0), $query->greaterThanOrEqual('payed_until_date', time()))));
     } else {
         $constrains[] = $query->logicalAnd($query->equals('approved', true), $query->logicalOr($query->equals('payed_until_date', 0), $query->greaterThanOrEqual('payed_until_date', time())));
     }
     return $constrains;
 }
 /**
  * Parses the query and returns the SQL statement parts.
  *
  * @param Tx_Extbase_Persistence_QueryInterface $query The query
  * @return array The SQL statement parts
  */
 public function parseQuery(Tx_Extbase_Persistence_QueryInterface $query, array &$parameters)
 {
     $sql = array();
     $sql['keywords'] = array();
     $sql['tables'] = array();
     $sql['unions'] = array();
     $sql['fields'] = array();
     $sql['where'] = array();
     $sql['additionalWhereClause'] = array();
     $sql['orderings'] = array();
     $sql['limit'] = array();
     $source = $query->getSource();
     $this->parseSource($source, $sql, $parameters);
     $this->parseConstraint($query->getConstraint(), $source, $sql, $parameters);
     $this->parseOrderings($query->getOrderings(), $source, $sql);
     $this->parseLimitAndOffset($query->getLimit(), $query->getOffset(), $sql);
     $tableNames = array_unique(array_keys($sql['tables'] + $sql['unions']));
     foreach ($tableNames as $tableName) {
         if (is_string($tableName) && strlen($tableName) > 0) {
             $this->addAdditionalWhereClause($query->getQuerySettings(), $tableName, $sql);
         }
     }
     return $sql;
 }
Example #6
0
 /**
  * Builds and returns the constraint for multi value properties.
  *
  * @param Tx_Extbase_Persistence_QueryInterface $query
  * @param Tx_Extbase_DomainObject_DomainObjectInterface $parentObject
  * @param string $propertyName
  * @param string $fieldValue
  * @param array $relationTableMatchFields
  * @return Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint
  */
 protected function getConstraint(Tx_Extbase_Persistence_QueryInterface $query, Tx_Extbase_DomainObject_DomainObjectInterface $parentObject, $propertyName, $fieldValue = '', $relationTableMatchFields = array())
 {
     $columnMap = $this->getDataMap(get_class($parentObject))->getColumnMap($propertyName);
     if ($columnMap->getParentKeyFieldName() !== NULL) {
         $constraint = $query->equals($columnMap->getParentKeyFieldName(), $parentObject);
         if ($columnMap->getParentTableFieldName() !== NULL) {
             $constraint = $query->logicalAnd($constraint, $query->equals($columnMap->getParentTableFieldName(), $this->getDataMap(get_class($parentObject))->getTableName()));
         }
     } else {
         $constraint = $query->in('uid', t3lib_div::intExplode(',', $fieldValue));
     }
     if (count($relationTableMatchFields) > 0) {
         foreach ($relationTableMatchFields as $relationTableMatchFieldName => $relationTableMatchFieldValue) {
             $constraint = $query->logicalAnd($constraint, $query->equals($relationTableMatchFieldName, $relationTableMatchFieldValue));
         }
     }
     return $constraint;
 }
 /**
  * Returns a category constraint created by
  * a given list of categories and a junction string
  *
  * @param Tx_Extbase_Persistence_QueryInterface $query
  * @param  array $categories
  * @param  string $conjunction
  * @param  boolean $includeSubCategories
  * @return Tx_Extbase_Persistence_QOM_Constraint|null
  */
 protected function createCategoryConstraint(Tx_Extbase_Persistence_QueryInterface $query, $categories, $conjunction, $includeSubCategories = FALSE)
 {
     $constraint = NULL;
     $categoryConstraints = array();
     // If "ignore category selection" is used, nothing needs to be done
     if (empty($conjunction)) {
         return $constraint;
     }
     if (!is_array($categories)) {
         $categories = t3lib_div::intExplode(',', $categories, TRUE);
     }
     foreach ($categories as $category) {
         if ($includeSubCategories) {
             $subCategories = t3lib_div::trimExplode(',', Tx_News_Service_CategoryService::getChildrenCategories($category, 0, '', TRUE), TRUE);
             $subCategoryConstraint = array();
             $subCategoryConstraint[] = $query->contains('categories', $category);
             if (count($subCategories) > 0) {
                 foreach ($subCategories as $subCategory) {
                     $subCategoryConstraint[] = $query->contains('categories', $subCategory);
                 }
             }
             if ($subCategoryConstraint) {
                 $categoryConstraints[] = $query->logicalOr($subCategoryConstraint);
             }
         } else {
             $categoryConstraints[] = $query->contains('categories', $category);
         }
     }
     if ($categoryConstraints) {
         switch (strtolower($conjunction)) {
             case 'or':
                 $constraint = $query->logicalOr($categoryConstraints);
                 break;
             case 'notor':
                 $constraint = $query->logicalNot($query->logicalOr($categoryConstraints));
                 break;
             case 'notand':
                 $constraint = $query->logicalNot($query->logicalAnd($categoryConstraints));
                 break;
             case 'and':
             default:
                 $constraint = $query->logicalAnd($categoryConstraints);
         }
     }
     return $constraint;
 }