Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DataPersistenceHandler.php
Go to the documentation of this file.
1 <?php
8 
12 
17 {
23  private $entityObject;
24 
30  private $createdObject;
31 
36  private $dependentObjects;
37 
43  private $storeCode;
44 
52  public function __construct($entityObject, $dependentObjects = [], $customFields = [])
53  {
54  // merge any custom fields into a new EntityDataObject for the persistence handler
55  if (!empty($customFields)) {
56  $this->entityObject = new EntityDataObject(
57  $entityObject->getName(),
58  $entityObject->getType(),
59  array_merge($entityObject->getAllData(), $customFields),
60  $entityObject->getLinkedEntities(),
61  $this->stripCustomFieldsFromUniquenessData($entityObject->getUniquenessData(), $customFields),
62  $entityObject->getVarReferences()
63  );
64  } else {
65  $this->entityObject = clone $entityObject;
66  }
67  $this->storeCode = null;
68 
69  foreach ($dependentObjects as $dependentObject) {
70  $this->dependentObjects[] = $dependentObject->getCreatedObject();
71  }
72  }
73 
81  public function createEntity($storeCode = null)
82  {
83  if (!empty($storeCode)) {
84  $this->storeCode = $storeCode;
85  }
86  $curlHandler = new CurlHandler('create', $this->entityObject, $this->storeCode);
87  $result = $curlHandler->executeRequest($this->dependentObjects);
88  $this->setCreatedObject(
89  $result,
90  null,
91  $curlHandler->getRequestDataArray(),
92  $curlHandler->isContentTypeJson()
93  );
94  }
95 
105  public function updateEntity($updateDataName, $updateDependentObjects = [])
106  {
107  foreach ($updateDependentObjects as $dependentObject) {
108  $this->dependentObjects[] = $dependentObject->getCreatedObject();
109  }
110  $updateEntityObject = DataObjectHandler::getInstance()->getObject($updateDataName);
111  $curlHandler = new CurlHandler('update', $updateEntityObject, $this->storeCode);
112  $result = $curlHandler->executeRequest(array_merge($this->dependentObjects, [$this->createdObject]));
113  $this->setCreatedObject(
114  $result,
115  null,
116  $curlHandler->getRequestDataArray(),
117  $curlHandler->isContentTypeJson()
118  );
119  }
120 
129  public function getEntity($index = null, $storeCode = null)
130  {
131  if (!empty($storeCode)) {
132  $this->storeCode = $storeCode;
133  }
134  $curlHandler = new CurlHandler('get', $this->entityObject, $this->storeCode);
135  $result = $curlHandler->executeRequest($this->dependentObjects);
136  $this->setCreatedObject(
137  $result,
138  $index,
139  $curlHandler->getRequestDataArray(),
140  $curlHandler->isContentTypeJson()
141  );
142  }
143 
150  public function deleteEntity()
151  {
152  $curlHandler = new CurlHandler('delete', $this->createdObject, $this->storeCode);
153  $curlHandler->executeRequest($this->dependentObjects);
154  }
155 
161  public function getCreatedObject()
162  {
163  return $this->createdObject;
164  }
165 
172  public function getCreatedDataByName($dataName)
173  {
174  return $this->createdObject->getDataByName($dataName, EntityDataObject::NO_UNIQUE_PROCESS);
175  }
176 
186  private function setCreatedObject($response, $index, $requestDataArray, $isJson)
187  {
188  if ($isJson) {
189  $responseData = json_decode($response, true);
190  if (is_array($responseData) && (null !== $index)) {
191  $responseData = $responseData[$index];
192  }
193  if (is_array($responseData)) {
194  $persistedData = $this->convertToFlatArray(array_merge(
195  $requestDataArray,
196  $this->convertCustomAttributesArray($responseData)
197  ));
198  } else {
199  $persistedData = $this->convertToFlatArray(array_merge($requestDataArray, ['return' => $responseData]));
200  }
201  } else {
202  $persistedData = array_merge($this->convertToFlatArray($requestDataArray), ['return' => $response]);
203  }
204 
205  $this->createdObject = new EntityDataObject(
206  $this->entityObject->getName(),
207  $this->entityObject->getType(),
208  $persistedData,
209  null,
210  null
211  );
212  }
213 
221  private function convertToFlatArray($arrayIn, $rootKey = '')
222  {
223  $arrayOut = [];
224  foreach ($arrayIn as $key => $value) {
225  if (is_array($value)) {
226  if (!empty($rootKey)) {
227  $newRootKey = $rootKey . '[' . $key . ']';
228  } else {
229  $newRootKey = $key;
230  }
231  $arrayOut = array_merge($arrayOut, $this->convertToFlatArray($value, $newRootKey));
232  } elseif (!empty($rootKey)) {
233  $arrayOut[$rootKey . '[' . $key . ']'] = $value;
234  } else {
235  $arrayOut[$key] = $value;
236  }
237  }
238  return $arrayOut;
239  }
240 
265  private function convertCustomAttributesArray($arrayIn)
266  {
267  $keys = ['custom_attributes'];
268  foreach ($keys as $key) {
269  if (!array_key_exists($key, $arrayIn)) {
270  continue;
271  }
272  $arrayCopy = $arrayIn[$key];
273  foreach ($arrayCopy as $index => $attributes) {
274  $arrayIn[$key][$attributes['attribute_code']] = $attributes['value'];
275  }
276  }
277  return $arrayIn;
278  }
279 
288  private function stripCustomFieldsFromUniquenessData($uniquenessData, $customFields)
289  {
290  $newUniquenessArray = $uniquenessData;
291  $intersectingKeys = array_intersect_key($uniquenessData, $customFields);
292  foreach ($intersectingKeys as $customFieldKey => $customFieldValue) {
293  unset($newUniquenessArray[$customFieldKey]);
294  }
295 
296  return $newUniquenessArray;
297  }
298 }
$response
Definition: 404.php:11
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$value
Definition: gender.phtml:16
$attributes
Definition: matrix.phtml:13
$index
Definition: list.phtml:44