parser = new BaseQueryParser(); } /** * @throws FireflyException * @throws FilesystemException */ public function parse(string $query): NodeGroup { try { $result = $this->parser->parse($query); $nodes = array_map($this->convertNode(...), $result->getNodes()); return new NodeGroup($nodes); } catch (LogicException|TypeError $e) { fwrite(STDERR, "Setting up GdbotsQueryParserTest\n"); Log::error($e->getMessage()); Log::error(sprintf('Could not parse search: "%s".', $query)); throw new FireflyException(sprintf('Invalid search value "%s". See the logs.', e($query)), 0, $e); } } private function convertNode(GdbotsNode\Node $node): Node { switch (true) { case $node instanceof GdbotsNode\Word: return new StringNode($node->getValue(), BoolOperator::PROHIBITED === $node->getBoolOperator()); case $node instanceof GdbotsNode\Field: return new FieldNode($node->getValue(), (string) $node->getNode()->getValue(), BoolOperator::PROHIBITED === $node->getBoolOperator()); case $node instanceof GdbotsNode\Subquery: Log::debug('Subquery'); return new NodeGroup(array_map($this->convertNode(...), $node->getNodes())); case $node instanceof GdbotsNode\Phrase: case $node instanceof GdbotsNode\Numbr: case $node instanceof GdbotsNode\Date: case $node instanceof GdbotsNode\Url: case $node instanceof GdbotsNode\Hashtag: case $node instanceof GdbotsNode\Mention: case $node instanceof GdbotsNode\Emoticon: case $node instanceof GdbotsNode\Emoji: return new StringNode((string) $node->getValue(), BoolOperator::PROHIBITED === $node->getBoolOperator()); default: throw new FireflyException(sprintf('Unsupported node type: %s', $node::class)); } } }