/** * Modifies the given query and adds the parameters necessary * for result grouping. * * @param Query $query The query to modify * @return Query The modified query with grouping parameters */ public function modifyQuery(Query $query) { $query->setGrouping(); $query->setNumberOfResultsPerGroup($this->findHighestGroupResultsLimit()); if (!empty($this->groupingConfiguration['numberOfGroups'])) { $query->setNumberOfGroups($this->groupingConfiguration['numberOfGroups']); } $configuredGroups = $this->groupingConfiguration['groups.']; foreach ($configuredGroups as $groupName => $groupConfiguration) { if (isset($groupConfiguration['field'])) { $query->addGroupField($groupConfiguration['field']); } elseif (isset($groupConfiguration['query'])) { $query->addGroupQuery($groupConfiguration['query']); } if (isset($groupConfiguration['sortBy'])) { $query->addGroupSorting($groupConfiguration['sortBy']); } } return $query; }
/** * @test * @depends settingGroupingTrueActivatesGrouping */ public function settingGroupingFalseDeactivatesGrouping(Query $query) { $query->setGrouping(false); $queryParameters = $query->getQueryParameters(); foreach ($queryParameters as $queryParameter => $value) { $this->assertTrue(!GeneralUtility::isFirstPartOfStr($queryParameter, 'group'), 'Query contains grouping parameter "' . $queryParameter . '"'); } }