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_EMAIL = 'email';
17  const KEY_AUTHENTICATION_ENDPOINT_URL = 'endpoint_url';
18  const KEY_IDENTITY_LINKING_URL = 'identity_link_url';
19  const API_RESOURCES = 'resource';
20  const API_RESOURCE_NAME = 'name';
21 
25  protected $resourceProvider;
26 
32  public function __construct(
33  \Magento\Framework\Acl\AclResource\ProviderInterface $resourceProvider
34  ) {
35  $this->resourceProvider = $resourceProvider;
36  }
37 
41  public function convert($source)
42  {
43  $result = [];
44  $allResources = $this->resourceProvider->getAclResources();
45  $hashAclResourcesTree = $this->hashResources($allResources[1]['children']);
47  $integrations = $source->getElementsByTagName('integration');
49  foreach ($integrations as $integration) {
50  if ($integration->nodeType != XML_ELEMENT_NODE) {
51  continue;
52  }
53  $integrationName = $integration->attributes->getNamedItem('name')->nodeValue;
54  $result[$integrationName] = [];
55  $result[$integrationName][self::API_RESOURCES] = [];
56 
58  $email = $integration->getElementsByTagName('email')->item(0)->nodeValue;
60  $resources = $integration->getElementsByTagName('resource');
61  $result[$integrationName][self::KEY_EMAIL] = $email;
62  if ($integration->getElementsByTagName('endpoint_url')->length) {
64  $endpointUrl = $integration->getElementsByTagName('endpoint_url')->item(0)->nodeValue;
65  $result[$integrationName][self::KEY_AUTHENTICATION_ENDPOINT_URL] = $endpointUrl;
66  }
67  if ($integration->getElementsByTagName('identity_link_url')->length) {
69  $identityLinkUrl = $integration->getElementsByTagName('identity_link_url')->item(0)->nodeValue;
70  $result[$integrationName][self::KEY_IDENTITY_LINKING_URL] = $identityLinkUrl;
71  }
73  foreach ($resources as $resource) {
74  if ($resource->nodeType != XML_ELEMENT_NODE) {
75  continue;
76  }
77  $resource = $resource->attributes->getNamedItem('name')->nodeValue;
78  $resourceNames = $this->addParentsToResource($hashAclResourcesTree, $resource);
79  foreach ($resourceNames as $name) {
80  $result[$integrationName][self::API_RESOURCES][] = $name;
81  }
82  }
83  // Remove any duplicates added parents
84  $result[$integrationName][self::API_RESOURCES] =
85  array_values(array_unique($result[$integrationName][self::API_RESOURCES]));
86  }
87  return $result;
88  }
89 
96  private function hashResources(array $resources)
97  {
98  $output = [];
99  foreach ($resources as $resource) {
100  if (isset($resource['children'])) {
101  $item = $this->hashResources($resource['children']);
102  } else {
103  $item = [];
104  }
105  $output[$resource['id']] = $item;
106  }
107  return $output;
108  }
109 
117  private function addParentsToResource(array $resourcesHash, $nodeName)
118  {
119  $output = [];
120  foreach ($resourcesHash as $resource => $children) {
121  if ($resource == $nodeName) {
122  $output = [$resource];
123  break;
124  }
125  if (!empty($children)) {
126  $names = $this->addParentsToResource($children, $nodeName);
127  if (!empty($names)) {
128  $output = array_merge([$resource], $names);
129  break;
130  } else {
131  continue;
132  }
133  }
134  }
135  return $output;
136  }
137 }
$email
Definition: details.phtml:13
$source
Definition: source.php:23
$resource
Definition: bulk.php:12
$children
Definition: actions.phtml:11
__construct(\Magento\Framework\Acl\AclResource\ProviderInterface $resourceProvider)
Definition: Converter.php:32
if(!isset($_GET['name'])) $name
Definition: log.php:14