1111use PE \Enums \ActionVariable ;
1212use PE \Exceptions \EncoderException ;
1313use PE \Options \EncoderOptions ;
14+ use PE \Variables \Types \NodeAccessor ;
15+ use PE \Variables \Types \ObjectAccessor ;
1416
1517/**
1618 * Class Encoder
@@ -141,19 +143,20 @@ protected function _decodeNode($nodeName, $nodeData, EncoderOptions $options, En
141143 }
142144
143145 $ preNodeStaticOptions = array (
144- ActionVariable::SETTER_NODE_DATA => $ nodeDataItem ,
145- ActionVariable::SETTER_NODE => $ type ,
146- ActionVariable::SETTER_PARENT => $ parentObject
146+ NodeAccessor::VARIABLE_NODE => $ type ,
147+ NodeAccessor::VARIABLE_PARENT => $ parentObject
147148 );
148149 // call node methods. It can be useful when you want to change the outcome of the node data in the node
149150 // that does not have a certain setter but is used in other ways
150151 $ nodeMethodVariables = $ variableCollection ->getPreNodeSetterVariables ();
151- foreach ($ nodeMethodVariables as $ variableId => $ nodeMethodVariable ) {
152- $ preNodeSetter = $ nodeMethodVariable ->getPreNodeSetter ();
152+ foreach ($ nodeMethodVariables as $ objectSetterVariable ) {
153+ $ variableId = $ objectSetterVariable ->getId ();
154+ $ preNodeSetter = $ objectSetterVariable ->getPreNodeSetter ();
153155 if (isset ($ nodeDataItem [$ variableId ]) || $ preNodeSetter ->alwaysExecute ()) {
154156 $ setterOptions = array_merge ($ preNodeStaticOptions , array (
155- ActionVariable::SETTER_NAME => $ variableId ,
156- ActionVariable::SETTER_VALUE => $ nodeDataItem [$ variableId ]
157+ NodeAccessor::VARIABLE_NODE_DATA => $ nodeDataItem ,
158+ NodeAccessor::VARIABLE_NAME => $ variableId ,
159+ NodeAccessor::VARIABLE_VALUE => $ nodeDataItem [$ variableId ]
157160 ));
158161 if ($ newNode = $ preNodeSetter ->apply ($ setterOptions )) {
159162 $ nodeDataItem = $ newNode ;
@@ -188,7 +191,8 @@ protected function _decodeNode($nodeName, $nodeData, EncoderOptions $options, En
188191 throw new EncoderException (sprintf ('Variable "%s" for "%s" does not exist but is required to create an object for node "%s" (Node type: "%s") at index "%s" ' , $ processedVariable , $ nodeClassName , $ nodeName , $ type ->getNodeName (), $ nodeIndex ));
189192 }
190193 $ requiredValue = $ nodeDataItem [$ processedVariable ];
191- $ processedRequiredValue = $ type ->processValue ($ processedVariable , $ requiredValue );
194+ $ objectSetter = $ variableCollection ->getVariableById ($ processedVariable )->getObjectSetter ();
195+ $ processedRequiredValue = $ objectSetter ->processValue ($ requiredValue );
192196 if ($ processedRequiredValue === null ) {
193197 throw new EncoderException (sprintf ('Variable "%s" for "%s" cannot process its value (%s). Presumably because the NodeType does not recognize the variable ' , $ processedVariable , $ nodeClassName , $ requiredValue ));
194198 }
@@ -208,16 +212,44 @@ protected function _decodeNode($nodeName, $nodeData, EncoderOptions $options, En
208212 $ parentNode ->addChildrenToObject ($ nodeName , $ parentObject , array ($ nodeInstance ));
209213 }
210214
211- foreach ($ nodeDataItem as $ name => $ value ) {
212- $ type ->applyToVariable ($ name , array (
213- ActionVariable::SETTER_NODE_DATA => $ nodeDataItem ,
214- ActionVariable::SETTER_OBJECT => $ nodeInstance ,
215- ActionVariable::SETTER_PARENT => $ parentObject ,
216- ActionVariable::SETTER_NAME => $ name ,
217- ActionVariable::SETTER_VALUE => $ value
218- ));
215+ $ objectStaticOptions = array_merge ($ preNodeStaticOptions , array (
216+ ObjectAccessor::VARIABLE_NODE_DATA => $ nodeDataItem ,
217+ ObjectAccessor::VARIABLE_OBJECT => $ nodeInstance ,
218+ ));
219+
220+ $ objectSetterVariables = $ variableCollection ->getObjectSetterVariables ();
221+ foreach ($ objectSetterVariables as $ objectSetterVariable ) {
222+ $ variableId = $ objectSetterVariable ->getId ();
223+ $ variableIsset = isset ($ nodeDataItem [$ variableId ]);
224+ $ objectSetter = $ objectSetterVariable ->getObjectSetter ();
225+ if ($ variableIsset || $ objectSetter ->alwaysExecute ()) {
226+ $ objectSetter ->apply ($ nodeInstance , $ variableIsset ? $ nodeDataItem [$ variableId ] : null );
227+ }
219228 }
220229
230+
231+ /*$setterOptionsStatic = array(
232+ ActionVariable::SETTER_NODE_DATA => $nodeDataItem,
233+ ActionVariable::SETTER_OBJECT => $nodeInstance,
234+ ActionVariable::SETTER_PARENT => $parentObject
235+ );
236+
237+ $nodeMethodVariables = $type->getVariables();
238+ foreach ($nodeMethodVariables as $nodeMethodVariable) {
239+ $variableId = $nodeMethodVariable->getId();
240+ $variableIsset = isset($nodeDataItem[$variableId]);
241+ if (($variableIsset || $nodeMethodVariable->alwaysExecute()) && $nodeMethodVariable->setterIsActive()) {
242+ $setterOptions = array_merge($setterOptionsStatic, array(
243+ ActionVariable::SETTER_NAME => $variableId,
244+ ActionVariable::SETTER_VALUE => $variableIsset ? $nodeDataItem[$variableId] : null
245+ ));
246+ $type->applyToVariable($variableId, $setterOptions);
247+ }
248+ }*/
249+
250+
251+
252+
221253 if (!$ addAfterDecode && $ addAfterAttributes ) {
222254 $ parentNode ->addChildrenToObject ($ nodeName , $ parentObject , array ($ nodeInstance ));
223255 }
0 commit comments