Spaces:
No application file
No application file
File size: 2,167 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 |
<?php
declare(strict_types=1);
namespace Mautic\LeadBundle\Provider;
use Mautic\LeadBundle\Event\ListFieldChoicesEvent;
use Mautic\LeadBundle\Exception\ChoicesNotFoundException;
use Mautic\LeadBundle\LeadEvents;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
final class FieldChoicesProvider implements FieldChoicesProviderInterface
{
/**
* @var mixed[]
*/
private array $cachedTypeChoices = [];
/**
* @var mixed[]
*/
private array $cachedAliasChoices = [];
public function __construct(
private EventDispatcherInterface $dispatcher
) {
}
/**
* @return mixed[]
*/
public function getChoicesForField(string $fieldType, string $fieldAlias, string $search = ''): array
{
$aliasChoices = $this->getAllChoicesForListFieldAliases($search);
$typeChoices = $this->getAllChoicesForListFieldTypes();
if (isset($aliasChoices[$fieldAlias])) {
return $aliasChoices[$fieldAlias];
}
if (isset($typeChoices[$fieldType])) {
return $typeChoices[$fieldType];
}
throw new ChoicesNotFoundException("No choices for field type {$fieldType} nor alias {$fieldAlias} were found");
}
/**
* @return mixed[]
*/
private function getAllChoicesForListFieldTypes(): array
{
$this->lookForFieldChoices();
return $this->cachedTypeChoices;
}
/**
* @return mixed[]
*/
private function getAllChoicesForListFieldAliases(string $search = ''): array
{
$this->lookForFieldChoices($search);
return $this->cachedAliasChoices;
}
private function lookForFieldChoices(string $search = ''): void
{
if (empty($this->cachedTypeChoices)) {
$event = new ListFieldChoicesEvent();
$event->setSearchTerm($search);
$this->dispatcher->dispatch($event, LeadEvents::COLLECT_FILTER_CHOICES_FOR_LIST_FIELD_TYPE);
$this->cachedTypeChoices = $event->getChoicesForAllListFieldTypes();
$this->cachedAliasChoices = $event->getChoicesForAllListFieldAliases();
}
}
}
|