Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ConfigBasedIntegrationManager.php
Go to the documentation of this file.
1 <?php
7 
11 
17 {
24 
28  protected $aclRetriever;
29 
35  protected $integrationConfig;
36 
42  public function __construct(
43  \Magento\Integration\Api\IntegrationServiceInterface $integrationService,
46  ) {
47  $this->integrationService = $integrationService;
48  $this->aclRetriever = $aclRetriever;
49  $this->integrationConfig = $integrationConfig;
50  }
51 
59  public function processIntegrationConfig(array $integrationNames)
60  {
61  if (empty($integrationNames)) {
62  return [];
63  }
65  $integrations = $this->integrationConfig->getIntegrations();
66  foreach ($integrationNames as $name) {
67  $integrationDetails = $integrations[$name];
68  $integrationData = [Integration::NAME => $name];
69  if (isset($integrationDetails[Converter::KEY_EMAIL])) {
70  $integrationData[Integration::EMAIL] = $integrationDetails[Converter::KEY_EMAIL];
71  }
72  if (isset($integrationDetails[Converter::KEY_AUTHENTICATION_ENDPOINT_URL])) {
73  $integrationData[Integration::ENDPOINT] =
74  $integrationDetails[Converter::KEY_AUTHENTICATION_ENDPOINT_URL];
75  }
76  if (isset($integrationDetails[Converter::KEY_IDENTITY_LINKING_URL])) {
77  $integrationData[Integration::IDENTITY_LINK_URL] =
78  $integrationDetails[Converter::KEY_IDENTITY_LINKING_URL];
79  }
81  // If it already exists, update it
82  $integration = $this->integrationService->findByName($name);
83  if ($integration->getId()) {
84  //If Integration already exists, update it.
85  //For now we will just overwrite the integration with same name but we will need a long term solution
86  $integrationData[Integration::ID] = $integration->getId();
87  $this->integrationService->update($integrationData);
88  } else {
89  $this->integrationService->create($integrationData);
90  }
91  }
92  return $integrationNames;
93  }
94 
102  public function processConfigBasedIntegrations(array $integrations)
103  {
104  if (empty($integrations)) {
105  return [];
106  }
107 
108  foreach (array_keys($integrations) as $name) {
109  $integrationDetails = $integrations[$name];
110  $integrationData = [Integration::NAME => $name];
111 
112  if (isset($integrationDetails[Converter::KEY_EMAIL])) {
113  $integrationData[Integration::EMAIL] = $integrationDetails[Converter::KEY_EMAIL];
114  }
115  if (isset($integrationDetails[Converter::KEY_AUTHENTICATION_ENDPOINT_URL])) {
116  $integrationData[Integration::ENDPOINT] =
117  $integrationDetails[Converter::KEY_AUTHENTICATION_ENDPOINT_URL];
118  }
119  if (isset($integrationDetails[Converter::KEY_IDENTITY_LINKING_URL])) {
120  $integrationData[Integration::IDENTITY_LINK_URL] =
121  $integrationDetails[Converter::KEY_IDENTITY_LINKING_URL];
122  }
123  if (isset($integrationDetails[$name]['resource'])) {
124  $integrationData['resource'] = $integrationDetails[$name]['resource'];
125  }
127 
128  $integration = $this->integrationService->findByName($name);
129  if ($integration->getId()) {
130  $originalResources = $this->aclRetriever->getAllowedResourcesByUser(
132  $integration->getId()
133  );
134  $updateData = $integrationData;
135  $updateData[Integration::ID] = $integration->getId();
136  $integration = $this->integrationService->update($updateData);
137 
138  // If there were any changes, delete then recreate integration
139  if ($this->hasDataChanged($integration, $originalResources)) {
140  $this->integrationService->delete($integration->getId());
142  } else {
143  continue;
144  }
145  }
146  $this->integrationService->create($integrationData);
147  }
148  return $integrations;
149  }
150 
158  private function hasDataChanged(Integration $integration, $originalResources)
159  {
160  if (!$integration->getOrigData()) {
161  return true;
162  }
163 
164  // Check if resources have changed
165  $newResources = $integration->getData('resource');
166  $commonResources = array_intersect(
167  $originalResources,
168  $newResources
169  );
170 
171  if (count($commonResources) != count($originalResources) || count($commonResources) != count($newResources)) {
172  return true;
173  }
174 
175  // Check if other data has changed
176  $fields = [
184  ];
185  foreach ($fields as $field) {
186  if ($integration->getOrigData($field) != $integration->getData($field)) {
187  return true;
188  }
189  }
190 
191  return false;
192  }
193 }
__construct(\Magento\Integration\Api\IntegrationServiceInterface $integrationService, AclRetriever $aclRetriever, Config $integrationConfig)
$fields
Definition: details.phtml:14
if(!isset($_GET['name'])) $name
Definition: log.php:14