Spaces:
No application file
No application file
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(); | |
} | |
} | |