Spaces:
No application file
No application file
namespace Mautic\WebhookBundle\Event; | |
use Symfony\Component\Process\Exception\InvalidArgumentException; | |
use Symfony\Contracts\EventDispatcher\Event; | |
use Symfony\Contracts\Translation\TranslatorInterface; | |
class WebhookBuilderEvent extends Event | |
{ | |
private array $events = []; | |
public function __construct( | |
private TranslatorInterface $translator | |
) { | |
} | |
/** | |
* Add an event for the event list. | |
* | |
* @param string $key - a unique identifier; it is recommended that it be namespaced i.e. lead.mytrigger | |
* @param array $event - can contain the following keys: | |
* 'label' => (required) what to display in the list | |
* 'description' => (optional) short description of event | |
*/ | |
public function addEvent($key, array $event): void | |
{ | |
if (array_key_exists($key, $this->events)) { | |
throw new InvalidArgumentException("The key, '$key' is already used by another webhook event. Please use a different key."); | |
} | |
$event['label'] = $this->translator->trans($event['label']); | |
$event['description'] = (isset($event['description'])) ? $this->translator->trans($event['description']) : ''; | |
$this->events[$key] = $event; | |
} | |
/** | |
* Get webhook events. | |
* | |
* @return array | |
*/ | |
public function getEvents() | |
{ | |
static $sorted = false; | |
if (empty($sorted)) { | |
uasort($this->events, fn ($a, $b): int => strnatcasecmp( | |
$a['label'], $b['label'])); | |
$sorted = true; | |
} | |
return $this->events; | |
} | |
} | |