![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/IntegrationsBundle/Helper/ |
<?php declare(strict_types=1); namespace Mautic\IntegrationsBundle\Helper; use Mautic\IntegrationsBundle\Exception\IntegrationNotFoundException; use Mautic\IntegrationsBundle\Integration\Interfaces\ConfigFormFeaturesInterface; use Mautic\IntegrationsBundle\Integration\Interfaces\SyncInterface; use Mautic\IntegrationsBundle\Sync\DAO\Mapping\MappingManualDAO; use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotFoundException; use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\ObjectProvider; use Mautic\IntegrationsBundle\Sync\SyncDataExchange\SyncDataExchangeInterface; class SyncIntegrationsHelper { /** * @var SyncInterface[] */ private array $integrations = []; /** * @var array<int,string>|null */ private ?array $enabled = null; public function __construct( private IntegrationsHelper $integrationsHelper, private ObjectProvider $objectProvider ) { } public function addIntegration(SyncInterface $integration): void { $this->integrations[$integration->getName()] = $integration; } /** * @return SyncInterface * * @throws IntegrationNotFoundException */ public function getIntegration(string $integration) { if (!isset($this->integrations[$integration])) { throw new IntegrationNotFoundException("$integration either doesn't exist or has not been tagged with mautic.sync_integration"); } return $this->integrations[$integration]; } /** * @return array<int,string>|null * * @throws IntegrationNotFoundException */ public function getEnabledIntegrations() { if (null !== $this->enabled) { return $this->enabled; } $this->enabled = []; foreach ($this->integrations as $name => $syncIntegration) { try { $integrationConfiguration = $this->integrationsHelper->getIntegrationConfiguration($syncIntegration); if ($integrationConfiguration->getIsPublished()) { $this->enabled[] = $name; } } catch (IntegrationNotFoundException) { // Just ignore as the plugin hasn't been installed yet } } return $this->enabled; } /** * @throws IntegrationNotFoundException * @throws ObjectNotFoundException */ public function hasObjectSyncEnabled(string $mauticObject): bool { // Ensure the internal object exists. $this->objectProvider->getObjectByName($mauticObject); $enabledIntegrations = $this->getEnabledIntegrations(); foreach ($enabledIntegrations as $integration) { $syncIntegration = $this->getIntegration($integration); $integrationConfiguration = $syncIntegration->getIntegrationConfiguration(); // Sync is enabled $enabledFeatures = $integrationConfiguration->getSupportedFeatures(); if (!in_array(ConfigFormFeaturesInterface::FEATURE_SYNC, $enabledFeatures)) { continue; } // At least one object is enabled $featureSettings = $integrationConfiguration->getFeatureSettings(); if (empty($featureSettings['sync']['objects'])) { continue; } try { // Find what object is mapped to Mautic's object $mappingManual = $syncIntegration->getMappingManual(); $mappedObjectNames = $mappingManual->getMappedIntegrationObjectsNames($mauticObject); foreach ($mappedObjectNames as $mappedObjectName) { if (in_array($mappedObjectName, $featureSettings['sync']['objects'])) { return true; } } } catch (ObjectNotFoundException) { // Object is not supported so just continue } } return false; } /** * @throws IntegrationNotFoundException */ public function getMappingManual(string $integration): MappingManualDAO { $integration = $this->getIntegration($integration); return $integration->getMappingManual(); } /** * @throws IntegrationNotFoundException */ public function getSyncDataExchange(string $integration): SyncDataExchangeInterface { $integration = $this->getIntegration($integration); return $integration->getSyncDataExchange(); } }