Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
OperationDefinitionObjectHandler.php
Go to the documentation of this file.
1 <?php
7 
15 
17 {
18  const ENTITY_OPERATION_ROOT_TAG = 'operation';
19  const ENTITY_OPERATION_TYPE = 'type';
20  const ENTITY_OPERATION_DATA_TYPE = 'dataType';
21  const ENTITY_OPERATION_URL = 'url';
22  const ENTITY_OPERATION_METHOD = 'method';
23  const ENTITY_OPERATION_AUTH = 'auth';
24  const ENTITY_OPERATION_URL_AREA = 'area';
25  const ENTITY_OPERATION_STORE_CODE = 'storeCode';
26  const ENTITY_OPERATION_SUCCESS_REGEX = 'successRegex';
27  const ENTITY_OPERATION_RETURN_REGEX = 'returnRegex';
28  const ENTITY_OPERATION_HEADER = 'header';
29  const ENTITY_OPERATION_CONTENT_TYPE = 'contentType';
32  const ENTITY_OPERATION_URL_PARAM = 'param';
35  const ENTITY_OPERATION_ENTRY = 'field';
38  const ENTITY_OPERATION_ARRAY = 'array';
41  const ENTITY_OPERATION_OBJECT = 'object';
44  const ENTITY_OPERATION_REQUIRED = 'required';
45  const ENTITY_OPERATION_BACKEND_REMOVE = 'removeBackend';
46 
52  private static $INSTANCE;
53 
59  private $operationDefinitionObjects = [];
60 
66  private $operationElementExtractor;
67 
71  private function __construct()
72  {
73  $this->operationElementExtractor = new OperationElementExtractor();
74  }
75 
81  public static function getInstance()
82  {
83  if (!self::$INSTANCE) {
84  self::$INSTANCE = new OperationDefinitionObjectHandler();
85  self::$INSTANCE->initialize();
86  }
87 
88  return self::$INSTANCE;
89  }
90 
97  public function getObject($name)
98  {
99  return $this->getAllObjects()[$name];
100  }
101 
107  public function getAllObjects()
108  {
109  return $this->operationDefinitionObjects;
110  }
111 
119  public function getOperationDefinition($operation, $dataType)
120  {
121  return $this->getObject($operation . $dataType);
122  }
123 
136  private function initialize()
137  {
138  //TODO: Reduce CyclomaticComplexity/NPathComplexity/Length of method, remove warning suppression.
140  $parser = $objectManager->create(OperationDefinitionParser::class);
141  $parserOutput = $parser->readOperationMetadata()[OperationDefinitionObjectHandler::ENTITY_OPERATION_ROOT_TAG];
142  foreach ($parserOutput as $dataDefName => $opDefArray) {
147  $auth = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_AUTH] ?? null;
148  $successRegex = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_SUCCESS_REGEX] ?? null;
149  $returnRegex = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_RETURN_REGEX] ?? null;
150  $contentType = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_CONTENT_TYPE][0]['value']
151  ?? null;
152  $headers = [];
153  $params = [];
154  $operationElements = [];
155  $removeBackend = $opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_BACKEND_REMOVE] ?? false;
156 
157  if (array_key_exists(OperationDefinitionObjectHandler::ENTITY_OPERATION_HEADER, $opDefArray)) {
158  foreach ($opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_HEADER] as $headerEntry) {
162  . ': '
164  }
165  }
166  }
167 
168  if (array_key_exists(OperationDefinitionObjectHandler::ENTITY_OPERATION_URL_PARAM, $opDefArray)) {
169  foreach ($opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_URL_PARAM] as $paramEntry) {
172  }
173  }
174 
175  // extract relevant OperationObjects as OperationElements
176  if (array_key_exists(OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT, $opDefArray)) {
177  foreach ($opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT] as $opElementArray) {
178  $operationElements[] = $this->operationElementExtractor->extractOperationElement($opElementArray);
179  }
180  }
181 
182  //handle loose operation fields
183  if (array_key_exists(OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY, $opDefArray)) {
184  foreach ($opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_ENTRY] as $operationField) {
185  $operationElements[] = new OperationElement(
190  );
191  }
192  }
193 
194  // handle loose json arrays
195  if (array_key_exists(OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY, $opDefArray)) {
196  foreach ($opDefArray[OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY] as $operationField) {
197  $subOperationElements = [];
198  $value = null;
199  $type = null;
200 
201  if (array_key_exists(
203  $operationField
204  )) {
205  $nestedDataElement = $this->operationElementExtractor->extractOperationElement(
207  );
208  $subOperationElements[$nestedDataElement->getKey()] = $nestedDataElement;
209  $value = $nestedDataElement->getValue();
210  $type = $nestedDataElement->getKey();
211  } else {
215  }
216 
217  $operationElements[] = new OperationElement(
219  $value,
220  $type,
222  $subOperationElements
223  );
224  }
225  }
226 
227  $this->operationDefinitionObjects[$operation . $dataType] = new OperationDefinitionObject(
228  $dataDefName,
229  $operation,
230  $dataType,
231  $method,
232  $url,
233  $auth,
234  $headers,
235  $params,
236  $operationElements,
237  $contentType,
238  $removeBackend,
239  $successRegex,
240  $returnRegex
241  );
242  }
243  }
244 }
$objectManager
Definition: bootstrap.php:17
$type
Definition: item.phtml:13
$value
Definition: gender.phtml:16
$method
Definition: info.phtml:13
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18
if(!isset($_GET['name'])) $name
Definition: log.php:14