Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / src / Plugin / DMU / Rewriter / FormState.php
1 <?php
2
3 namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Rewriter;
4
5 use Pharborist\ExpressionNode;
6 use Pharborist\Filter;
7 use Pharborist\Functions\ParameterNode;
8 use Pharborist\Objects\ObjectMethodCallNode;
9 use Pharborist\Operators\AssignNode;
10 use Pharborist\Token;
11 use Pharborist\Types\ArrayNode;
12
13 /**
14  * @Rewriter(
15  *  id = "form_state",
16  *  type_hint = "\Drupal\Core\Form\FormStateInterface",
17  *  properties = {
18  *    "always_process" = {
19  *      "get" = "getAlwaysProcess",
20  *      "set" = "setAlwaysProcess"
21  *    },
22  *    "build_info" = {
23  *      "get" = "getBuildInfo",
24  *      "set" = "setBuildInfo"
25  *    },
26  *    "buttons" = {
27  *      "get" = "getButtons",
28  *      "set" = "setButtons"
29  *    },
30  *    "cache" = {
31  *      "get" = "isCached",
32  *      "set" = "setCached"
33  *    },
34  *    "complete_form" = {
35  *      "get" = "getCompleteForm"
36  *    },
37  *    "executed" = {
38  *      "get" = "isExecuted",
39  *      "set" = "setExecuted"
40  *    },
41  *    "groups" = {
42  *      "get" = "getGroups",
43  *      "set" = "setGroups"
44  *    },
45  *    "has_file_element" = {
46  *      "get" = "hasFileElement",
47  *      "set" = "setHasFileElement"
48  *    },
49  *    "input" = {
50  *      "get" = "getUserInput",
51  *      "set" = "setUserInput"
52  *    },
53  *    "limit_validation_errors" = {
54  *      "get" = "getLimitValidationErrors",
55  *      "set" = "setLimitValidationErrors"
56  *    },
57  *    "must_validate" = {
58  *      "get" = "isValidationEnforced",
59  *      "set" = "setValidationEnforced"
60  *    },
61  *    "process_input" = {
62  *      "get" = "isProcessingInput",
63  *      "set" = "setProcessInput"
64  *    },
65  *    "programmed" = {
66  *      "get" = "isProgrammed",
67  *      "set" = "setProgrammed"
68  *    },
69  *    "programmed_bypass_access_check" = {
70  *      "get" = "isBypassingProgrammedAccessChecks",
71  *      "set" = "setProgrammedBypassAccessCheck"
72  *    },
73  *    "rebuild" = {
74  *      "get" = "isRebuilding",
75  *      "set" = "setRebuild"
76  *    },
77  *    "response" = {
78  *      "get" = "getResponse",
79  *      "set" = "setResponse"
80  *    },
81  *    "storage" = {
82  *      "get" = "getStorage",
83  *      "set" = "setStorage"
84  *    },
85  *    "submit_handlers" = {
86  *      "get" = "getSubmitHandlers",
87  *      "set" = "setSubmitHandlers"
88  *    },
89  *    "submitted" = {
90  *      "get" = "isSubmitted",
91  *      "set" = "getSubmitted"
92  *    },
93  *    "temporary" = {
94  *      "get" = "getTemporary",
95  *      "set" = "setTemporary"
96  *    },
97  *    "triggering_element" = {
98  *      "get" = "getTriggeringElement",
99  *      "set" = "setTriggeringElement"
100  *    },
101  *    "validate_handlers" = {
102  *      "get" = "getValidateHandlers",
103  *      "set" = "setValidateHandlers"
104  *    },
105  *    "validation_complete" = {
106  *      "get" = "isValidationComplete",
107  *      "set" = "setValidationComplete"
108  *    }
109  *  }
110  * )
111  */
112 class FormState extends Generic {
113
114   /**
115    * {@inheritdoc}
116    */
117   public function rewrite(ParameterNode $parameter) {
118     parent::rewrite($parameter);
119
120     $function = $parameter->getFunction();
121     $form_state = Token::variable('$' . $parameter->getName());
122
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';
128
129       $rewrite = ObjectMethodCallNode::create(clone $form_state, $method)
130         ->appendArgument(clone $arguments[0])
131         ->appendArgument(clone $arguments[1]);
132
133       $set_error->replaceWith($rewrite);
134     }
135
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'));
140     }
141
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'));
146     }
147
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);
155     }
156   }
157
158   /**
159    * {@inheritdoc}
160    */
161   public function rewriteAsGetter(ExpressionNode $expr, $property) {
162     /** @var \Pharborist\ArrayLookupNode $expr */
163     $object = clone $expr->getRootArray();
164     $keys = $expr->getKeys();
165
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');
171       }
172       else {
173         array_shift($keys);
174         return ObjectMethodCallNode::create($object, 'getValue')->appendArgument(ArrayNode::create($keys));
175       }
176     }
177     elseif (isset($this->pluginDefinition['properties'][$property]['get'])) {
178       return parent::rewriteAsGetter($expr, $property);
179     }
180     // $foo = $form_state['arbitrary_key'] --> $foo = $form_state->get(['arbitrary_key'])
181     else {
182       return ObjectMethodCallNode::create($object, 'get')
183         ->appendArgument(ArrayNode::create($keys));
184     }
185   }
186
187   /**
188    * {@inheritdoc}
189    */
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();
195
196     // $form_state['values']['baz'] = 'foo' --> $form_state->setValue(['baz'], 'foo')
197     if ($property == 'values') {
198       array_shift($keys);
199       return ObjectMethodCallNode::create($object, 'setValue')
200         ->appendArgument(ArrayNode::create($keys))
201         ->appendArgument($value);
202     }
203     elseif (isset($this->pluginDefinition['properties'][$property]['set'])) {
204       return parent::rewriteAsSetter($expr, $property, $assignment);
205     }
206     // $form_state['arbitrary_key'] = 'baz' --> $form_state->set(['arbitrary_key'], 'baz')
207     else {
208       return ObjectMethodCallNode::create($object, 'set')
209         ->appendArgument(ArrayNode::create($keys))
210         ->appendArgument($value);
211     }
212   }
213
214 }