public static function parseFilterGroup($filter)
{
$parser = new FizzleParser($filter);
$parsedFilter = $parser->match_FilterGroup();
if ($parser->pos !== strlen($filter)) {
throw new FizzleException(sprintf('The Selector "%s" could not be parsed. Error at character %d.', $filter, $parser->pos + 1), 1327649317);
}
return $parsedFilter;
}
/** * {@inheritdoc} * * @param FlowQuery $flowQuery the FlowQuery object * @param array $arguments the arguments for this operation * @return void */ public function evaluate(FlowQuery $flowQuery, array $arguments) { $output = array(); $outputNodePaths = array(); if (isset($arguments[0]) && !empty($arguments[0])) { $parsedFilter = FizzleParser::parseFilterGroup($arguments[0]); if ($this->earlyOptimizationOfFilters($flowQuery, $parsedFilter)) { return; } } /** @var NodeInterface $contextNode */ foreach ($flowQuery->getContext() as $contextNode) { /** @var NodeInterface $childNode */ foreach ($contextNode->getChildNodes() as $childNode) { if (!isset($outputNodePaths[$childNode->getPath()])) { $output[] = $childNode; $outputNodePaths[$childNode->getPath()] = true; } } } $flowQuery->setContext($output); if (isset($arguments[0]) && !empty($arguments[0])) { $flowQuery->pushOperation('filter', $arguments); } }