Spaces:
No application file
No application file
| namespace Mautic\ChannelBundle\Helper; | |
| use Mautic\ChannelBundle\ChannelEvents; | |
| use Mautic\ChannelBundle\Event\ChannelEvent; | |
| use Mautic\CoreBundle\Translation\Translator; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| class ChannelListHelper | |
| { | |
| /** | |
| * @var array<string,string> | |
| */ | |
| private array $channels = []; | |
| /** | |
| * @var array<string,string[]> | |
| */ | |
| private array $featureChannels = []; | |
| public function __construct( | |
| private EventDispatcherInterface $dispatcher, | |
| private Translator $translator | |
| ) { | |
| } | |
| /** | |
| * Get contact channels. | |
| */ | |
| public function getChannelList(): array | |
| { | |
| $channels = []; | |
| foreach ($this->getChannels() as $channel => $details) { | |
| $channelName = isset($details['label']) ? $this->translator->trans($details['label']) : $this->getChannelLabel($channel); | |
| $channels[$channelName] = $channel; | |
| } | |
| return $channels; | |
| } | |
| /** | |
| * @param bool $listOnly | |
| */ | |
| public function getFeatureChannels($features, $listOnly = false): array | |
| { | |
| $this->setupChannels(); | |
| if (!is_array($features)) { | |
| $features = [$features]; | |
| } | |
| $channels = []; | |
| foreach ($features as $feature) { | |
| $featureChannels = $this->featureChannels[$feature] ?? []; | |
| $returnChannels = []; | |
| foreach ($featureChannels as $channel => $details) { | |
| if (!isset($details['label'])) { | |
| $featureChannels[$channel]['label'] = $this->getChannelLabel($channel); | |
| } | |
| if ($listOnly) { | |
| $returnChannels[$featureChannels[$channel]['label']] = $channel; | |
| } else { | |
| $returnChannels[$channel] = $featureChannels[$channel]; | |
| } | |
| } | |
| unset($featureChannels); | |
| $channels[$feature] = $returnChannels; | |
| } | |
| if (1 === count($features)) { | |
| $channels = $channels[$features[0]]; | |
| } | |
| return $channels; | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getChannels() | |
| { | |
| $this->setupChannels(); | |
| return $this->channels; | |
| } | |
| public function getChannelLabel($channel): string | |
| { | |
| return match (true) { | |
| $this->translator->hasId('mautic.channel.'.$channel) => $this->translator->trans('mautic.channel.'.$channel), | |
| $this->translator->hasId('mautic.'.$channel.'.'.$channel) => $this->translator->trans('mautic.'.$channel.'.'.$channel), | |
| default => ucfirst($channel), | |
| }; | |
| } | |
| public function getName(): string | |
| { | |
| return 'chanel'; | |
| } | |
| /** | |
| * Setup channels. | |
| * | |
| * Done this way to avoid a circular dependency error with LeadModel | |
| */ | |
| private function setupChannels(): void | |
| { | |
| if (!empty($this->channels)) { | |
| return; | |
| } | |
| $event = $this->dispatcher->dispatch(new ChannelEvent(), ChannelEvents::ADD_CHANNEL); | |
| $this->channels = $event->getChannelConfigs(); | |
| $this->featureChannels = $event->getFeatureChannels(); | |
| unset($event); | |
| } | |
| } | |