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\BuilderInterface; | |
| use Mautic\PluginBundle\Entity\Integration; | |
| class BuilderIntegrationsHelper | |
| { | |
| /** | |
| * @var BuilderInterface[] | |
| */ | |
| private array $builders = []; | |
| public function __construct( | |
| private IntegrationsHelper $integrationsHelper | |
| ) { | |
| } | |
| /** | |
| * Returns the first enabled builder that supports the given feature. | |
| * | |
| * @throws IntegrationNotFoundException | |
| */ | |
| public function getBuilder(string $feature): BuilderInterface | |
| { | |
| foreach ($this->builders as $builder) { | |
| // Ensure the configuration is hydrated | |
| $this->integrationsHelper->getIntegrationConfiguration($builder); | |
| if ($builder->isSupported($feature) && $builder->getIntegrationConfiguration()->getIsPublished()) { | |
| return $builder; | |
| } | |
| } | |
| throw new IntegrationNotFoundException(); | |
| } | |
| public function getBuilderNames(): array | |
| { | |
| $names = []; | |
| foreach ($this->builders as $builder) { | |
| $names[$builder->getName()] = $builder->getDisplayName(); | |
| } | |
| return $names; | |
| } | |
| public function addIntegration(BuilderInterface $integration): void | |
| { | |
| $this->builders[$integration->getName()] = $integration; | |
| } | |
| /** | |
| * @throws IntegrationNotFoundException | |
| */ | |
| public function getIntegration(string $integration): BuilderInterface | |
| { | |
| if (!isset($this->builders[$integration])) { | |
| throw new IntegrationNotFoundException("$integration either doesn't exist or has not been tagged with mautic.builder_integration"); | |
| } | |
| // Ensure the configuration is hydrated | |
| $this->integrationsHelper->getIntegrationConfiguration($this->builders[$integration]); | |
| return $this->builders[$integration]; | |
| } | |
| public function saveIntegrationConfiguration(Integration $integrationConfiguration): void | |
| { | |
| $this->integrationsHelper->saveIntegrationConfiguration($integrationConfiguration); | |
| } | |
| } | |