/** * {@inheritdoc} * * @param \TYPO3\Eel\FlowQuery\FlowQuery $flowQuery the FlowQuery object * @param array $arguments the filter expression to use (in index 0) * @return void * @throws \TYPO3\Eel\FlowQuery\FizzleException */ public function evaluate(\TYPO3\Eel\FlowQuery\FlowQuery $flowQuery, array $arguments) { if (!isset($arguments[0]) || empty($arguments[0])) { if ($flowQuery->peekOperationName() === 'filter') { $filterOperation = $flowQuery->popOperation(); if (count($filterOperation['arguments']) === 0 || empty($filterOperation['arguments'][0])) { throw new \TYPO3\Eel\FlowQuery\FizzleException('Filter() needs arguments if it follows an empty children(): children().filter()', 1332489382); } $selectorAndFilter = $filterOperation['arguments'][0]; } else { throw new \TYPO3\Eel\FlowQuery\FizzleException('children() needs at least a Property Name filter specified, or must be followed by filter().', 1332489399); } } else { $selectorAndFilter = $arguments[0]; } $parsedFilter = \TYPO3\Eel\FlowQuery\FizzleParser::parseFilterGroup($selectorAndFilter); if (count($parsedFilter['Filters']) === 0) { throw new \TYPO3\Eel\FlowQuery\FizzleException('filter needs to be specified in children()', 1332489416); } elseif (count($parsedFilter['Filters']) === 1) { $filter = $parsedFilter['Filters'][0]; if (isset($filter['PropertyNameFilter'])) { $this->evaluatePropertyNameFilter($flowQuery, $filter['PropertyNameFilter']); if (isset($filter['AttributeFilters'])) { foreach ($filter['AttributeFilters'] as $attributeFilter) { $flowQuery->pushOperation('filter', array($attributeFilter['text'])); } } } elseif (isset($filter['AttributeFilters'])) { throw new \TYPO3\Eel\FlowQuery\FizzleException('children() must have a property name filter and cannot only have an attribute filter.', 1332489432); } } else { throw new \TYPO3\Eel\FlowQuery\FizzleException('children() only supports a single filter group right now, i.e. nothing of the form "filter1, filter2"', 1332489489); } }