Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Converter.php
Go to the documentation of this file.
1 <?php
7 
12 {
16  const KEY_SERVICE_CLASS = 'class';
17  const KEY_URL = 'url';
18  const KEY_SERVICE_METHOD = 'method';
19  const KEY_SECURE = 'secure';
20  const KEY_ROUTES = 'routes';
21  const KEY_ACL_RESOURCES = 'resources';
22  const KEY_SERVICE = 'service';
23  const KEY_SERVICES = 'services';
24  const KEY_FORCE = 'force';
25  const KEY_VALUE = 'value';
26  const KEY_DATA_PARAMETERS = 'parameters';
27  const KEY_SOURCE = 'source';
28  const KEY_METHOD = 'method';
29  const KEY_METHODS = 'methods';
30  const KEY_DESCRIPTION = 'description';
38  public function convert($source)
39  {
40  $result = [];
42  $routes = $source->getElementsByTagName('route');
44  foreach ($routes as $route) {
45  if ($route->nodeType != XML_ELEMENT_NODE) {
46  continue;
47  }
49  $service = $route->getElementsByTagName('service')->item(0);
50  $serviceClass = $service->attributes->getNamedItem('class')->nodeValue;
51  $serviceMethod = $service->attributes->getNamedItem('method')->nodeValue;
52  $url = trim($route->attributes->getNamedItem('url')->nodeValue);
53  $version = $this->convertVersion($url);
54 
55  $serviceClassData = [];
56  if (isset($result[self::KEY_SERVICES][$serviceClass][$version])) {
57  $serviceClassData = $result[self::KEY_SERVICES][$serviceClass][$version];
58  }
59 
60  $resources = $route->getElementsByTagName('resource');
61  $resourceReferences = [];
62  $resourcePermissionSet = [];
64  foreach ($resources as $resource) {
65  if ($resource->nodeType != XML_ELEMENT_NODE) {
66  continue;
67  }
68  $ref = $resource->attributes->getNamedItem('ref')->nodeValue;
69  $resourceReferences[$ref] = true;
70  // For SOAP
71  $resourcePermissionSet[] = $ref;
72  }
73 
74  if (!isset($serviceClassData[self::KEY_METHODS][$serviceMethod])) {
75  $serviceClassData[self::KEY_METHODS][$serviceMethod][self::KEY_ACL_RESOURCES] = $resourcePermissionSet;
76  } else {
77  $serviceClassData[self::KEY_METHODS][$serviceMethod][self::KEY_ACL_RESOURCES] =
78  array_unique(
79  array_merge(
80  $serviceClassData[self::KEY_METHODS][$serviceMethod][self::KEY_ACL_RESOURCES],
81  $resourcePermissionSet
82  )
83  );
84  }
85 
86  $method = $route->attributes->getNamedItem('method')->nodeValue;
87  $secureNode = $route->attributes->getNamedItem('secure');
88  $secure = $secureNode ? (bool)trim($secureNode->nodeValue) : false;
89  $data = $this->convertMethodParameters($route->getElementsByTagName('parameter'));
90 
91  // We could handle merging here by checking if the route already exists
93  self::KEY_SECURE => $secure,
94  self::KEY_SERVICE => [
95  self::KEY_SERVICE_CLASS => $serviceClass,
96  self::KEY_SERVICE_METHOD => $serviceMethod,
97  ],
98  self::KEY_ACL_RESOURCES => $resourceReferences,
99  self::KEY_DATA_PARAMETERS => $data,
100  ];
101 
102  $serviceSecure = false;
103  if (isset($serviceClassData[self::KEY_METHODS][$serviceMethod][self::KEY_SECURE])) {
104  $serviceSecure = $serviceClassData[self::KEY_METHODS][$serviceMethod][self::KEY_SECURE];
105  }
106  $serviceClassData[self::KEY_METHODS][$serviceMethod][self::KEY_SECURE] = $serviceSecure || $secure;
107 
108  $result[self::KEY_SERVICES][$serviceClass][$version] = $serviceClassData;
109  }
110  return $result;
111  }
112 
120  protected function convertMethodParameters($parameters)
121  {
122  $data = [];
124  foreach ($parameters as $parameter) {
125  if ($parameter->nodeType != XML_ELEMENT_NODE) {
126  continue;
127  }
128  $name = $parameter->attributes->getNamedItem('name')->nodeValue;
129  $forceNode = $parameter->attributes->getNamedItem('force');
130  $force = $forceNode ? (bool)$forceNode->nodeValue : false;
131  $value = $parameter->nodeValue;
132  $data[$name] = [
133  self::KEY_FORCE => $force,
134  self::KEY_VALUE => ($value === 'null') ? null : $value,
135  ];
136  $sourceNode = $parameter->attributes->getNamedItem('source');
137  if ($sourceNode) {
138  $data[$name][self::KEY_SOURCE] = $sourceNode->nodeValue;
139  }
140  $methodNode = $parameter->attributes->getNamedItem('method');
141  if ($methodNode) {
142  $data[$name][self::KEY_METHOD] = $methodNode->nodeValue;
143  }
144  }
145  return $data;
146  }
147 
155  protected function convertVersion($url)
156  {
157  return substr($url, 1, strpos($url, '/', 1)-1);
158  }
159 }
$source
Definition: source.php:23
$resource
Definition: bulk.php:12
$value
Definition: gender.phtml:16
$method
Definition: info.phtml:13
if(!isset($_GET['name'])) $name
Definition: log.php:14