public function testRewriteFieldLookup() { /** @var \Pharborist\ArrayLookupNode $lookup */ $lookup = Parser::parseExpression('$node->field_foo[LANGUAGE_NONE][0]["value"]'); $rewritten = GenericRewriter::rewriteFieldLookup($lookup); $this->assertInstanceOf('\\Pharborist\\Objects\\ObjectPropertyNode', $rewritten); $this->assertEquals('$node->field_foo[0]->value', $rewritten->getText()); $lookup = Parser::parseExpression('$node->field_foo[\\Drupal\\Core\\Language\\Language::LANGCODE_NOT_SPECIFIED][0]["value"]'); $rewritten = GenericRewriter::rewriteFieldLookup($lookup); $this->assertInstanceOf('\\Pharborist\\Objects\\ObjectPropertyNode', $rewritten); $this->assertEquals('$node->field_foo[0]->value', $rewritten->getText()); $lookup = Parser::parseExpression('$node->field_foo["und"][0]["value"]'); $rewritten = GenericRewriter::rewriteFieldLookup($lookup); $this->assertInstanceOf('\\Pharborist\\Objects\\ObjectPropertyNode', $rewritten); $this->assertEquals('$node->field_foo[0]->value', $rewritten->getText()); $lookup = Parser::parseExpression('$node->field_foo["en"][0]["value"]'); $rewritten = GenericRewriter::rewriteFieldLookup($lookup); $this->assertInstanceOf('\\Pharborist\\Objects\\ObjectPropertyNode', $rewritten); $this->assertEquals('$node->getTranslation("en")->field_foo[0]->value', $rewritten->getText()); $lookup = Parser::parseExpression('$node->field_foo["und"][2]["wambooli"]'); $rewritten = GenericRewriter::rewriteFieldLookup($lookup); $this->assertInstanceOf('\\Pharborist\\Objects\\ObjectPropertyNode', $rewritten); $this->assertEquals('$node->field_foo[2]->wambooli', $rewritten->getText()); }
/** * {@inheritdoc} */ public function rewriteAsSetter(ExpressionNode $expr, $property, AssignNode $assignment) { /** @var \Pharborist\ArrayLookupNode $expr */ $object = clone $expr->getRootArray(); $keys = $expr->getKeys(); $value = clone $assignment->getRightOperand(); // $form_state['values']['baz'] = 'foo' --> $form_state->setValue(['baz'], 'foo') if ($property == 'values') { array_shift($keys); return ObjectMethodCallNode::create($object, 'setValue')->appendArgument(ArrayNode::create($keys))->appendArgument($value); } elseif (isset($this->pluginDefinition['properties'][$property]['set'])) { return parent::rewriteAsSetter($expr, $property, $assignment); } else { return ObjectMethodCallNode::create($object, 'set')->appendArgument(ArrayNode::create($keys))->appendArgument($value); } }