Spaces:
No application file
No application file
File size: 3,317 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
<?php
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);
}
}
|