3 namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Rewriter;
5 use Pharborist\ExpressionNode;
7 use Pharborist\Functions\ParameterNode;
8 use Pharborist\Objects\ObjectMethodCallNode;
9 use Pharborist\Operators\AssignNode;
11 use Pharborist\Types\ArrayNode;
16 * type_hint = "\Drupal\Core\Form\FormStateInterface",
18 * "always_process" = {
19 * "get" = "getAlwaysProcess",
20 * "set" = "setAlwaysProcess"
23 * "get" = "getBuildInfo",
24 * "set" = "setBuildInfo"
27 * "get" = "getButtons",
28 * "set" = "setButtons"
35 * "get" = "getCompleteForm"
38 * "get" = "isExecuted",
39 * "set" = "setExecuted"
42 * "get" = "getGroups",
45 * "has_file_element" = {
46 * "get" = "hasFileElement",
47 * "set" = "setHasFileElement"
50 * "get" = "getUserInput",
51 * "set" = "setUserInput"
53 * "limit_validation_errors" = {
54 * "get" = "getLimitValidationErrors",
55 * "set" = "setLimitValidationErrors"
58 * "get" = "isValidationEnforced",
59 * "set" = "setValidationEnforced"
62 * "get" = "isProcessingInput",
63 * "set" = "setProcessInput"
66 * "get" = "isProgrammed",
67 * "set" = "setProgrammed"
69 * "programmed_bypass_access_check" = {
70 * "get" = "isBypassingProgrammedAccessChecks",
71 * "set" = "setProgrammedBypassAccessCheck"
74 * "get" = "isRebuilding",
75 * "set" = "setRebuild"
78 * "get" = "getResponse",
79 * "set" = "setResponse"
82 * "get" = "getStorage",
83 * "set" = "setStorage"
85 * "submit_handlers" = {
86 * "get" = "getSubmitHandlers",
87 * "set" = "setSubmitHandlers"
90 * "get" = "isSubmitted",
91 * "set" = "getSubmitted"
94 * "get" = "getTemporary",
95 * "set" = "setTemporary"
97 * "triggering_element" = {
98 * "get" = "getTriggeringElement",
99 * "set" = "setTriggeringElement"
101 * "validate_handlers" = {
102 * "get" = "getValidateHandlers",
103 * "set" = "setValidateHandlers"
105 * "validation_complete" = {
106 * "get" = "isValidationComplete",
107 * "set" = "setValidationComplete"
112 class FormState extends Generic {
117 public function rewrite(ParameterNode $parameter) {
118 parent::rewrite($parameter);
120 $function = $parameter->getFunction();
121 $form_state = Token::variable('$' . $parameter->getName());
123 $set_errors = $function->find(Filter::isFunctionCall('form_set_error', 'form_error'));
124 /** @var \Pharborist\Functions\FunctionCallNode $set_error */
125 foreach ($set_errors as $set_error) {
126 $arguments = $set_error->getArguments();
127 $method = $set_error->getName()->getText() == 'form_set_error' ? 'setErrorByName' : 'setError';
129 $rewrite = ObjectMethodCallNode::create(clone $form_state, $method)
130 ->appendArgument(clone $arguments[0])
131 ->appendArgument(clone $arguments[1]);
133 $set_error->replaceWith($rewrite);
136 // form_clear_error() --> $form_state->clearErrors().
137 $clear_errors = $function->find(Filter::isFunctionCall('form_clear_error'));
138 foreach ($clear_errors as $clear_error) {
139 $clear_error->replaceWith(ObjectMethodCallNode::create(clone $form_state, 'clearErrors'));
142 // form_get_errors() --> $form_state->getErrors()
143 $get_errors = $function->find(Filter::isFunctionCall('form_get_errors'));
144 foreach ($get_errors as $get_error) {
145 $get_error->replaceWith(ObjectMethodCallNode::create(clone $form_state, 'getErrors'));
148 // form_get_error() --> $form_state->getError()
149 $get_errors = $function->find(Filter::isFunctionCall('form_get_error'));
150 /** @var \Pharborist\Functions\FunctionCallNode $get_error */
151 foreach ($get_errors as $get_error) {
152 $rewrite = ObjectMethodCallNode::create(clone $form_state, 'getError')
153 ->appendArgument($get_error->getArguments()->get(0));
154 $get_error->replaceWith($rewrite);
161 public function rewriteAsGetter(ExpressionNode $expr, $property) {
162 /** @var \Pharborist\ArrayLookupNode $expr */
163 $object = clone $expr->getRootArray();
164 $keys = $expr->getKeys();
166 // $foo = $form_state['values'] --> $foo = $form_state->getValues()
167 // $foo = $form_state['values']['baz'] --> $form_state->getValue(['baz'])
168 if ($property == 'values') {
169 if (sizeof($keys) == 1) {
170 return ObjectMethodCallNode::create($object, 'getValues');
174 return ObjectMethodCallNode::create($object, 'getValue')->appendArgument(ArrayNode::create($keys));
177 elseif (isset($this->pluginDefinition['properties'][$property]['get'])) {
178 return parent::rewriteAsGetter($expr, $property);
180 // $foo = $form_state['arbitrary_key'] --> $foo = $form_state->get(['arbitrary_key'])
182 return ObjectMethodCallNode::create($object, 'get')
183 ->appendArgument(ArrayNode::create($keys));
190 public function rewriteAsSetter(ExpressionNode $expr, $property, AssignNode $assignment) {
191 /** @var \Pharborist\ArrayLookupNode $expr */
192 $object = clone $expr->getRootArray();
193 $keys = $expr->getKeys();
194 $value = clone $assignment->getRightOperand();
196 // $form_state['values']['baz'] = 'foo' --> $form_state->setValue(['baz'], 'foo')
197 if ($property == 'values') {
199 return ObjectMethodCallNode::create($object, 'setValue')
200 ->appendArgument(ArrayNode::create($keys))
201 ->appendArgument($value);
203 elseif (isset($this->pluginDefinition['properties'][$property]['set'])) {
204 return parent::rewriteAsSetter($expr, $property, $assignment);
206 // $form_state['arbitrary_key'] = 'baz' --> $form_state->set(['arbitrary_key'], 'baz')
208 return ObjectMethodCallNode::create($object, 'set')
209 ->appendArgument(ArrayNode::create($keys))
210 ->appendArgument($value);