Spaces:
No application file
No application file
File size: 1,909 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 |
<?php
namespace Mautic\WebhookBundle\Form\DataTransformer;
use Doctrine\Common\Collections\Collection;
use Mautic\WebhookBundle\Entity\Event;
use Mautic\WebhookBundle\Entity\Webhook;
use Symfony\Component\Form\DataTransformerInterface;
/**
* @implements DataTransformerInterface<Collection<int, Event>, array<int, string>>
*/
class EventsToArrayTransformer implements DataTransformerInterface
{
public function __construct(
private Webhook $webhook
) {
}
/**
* Convert from the PersistentCollection of Event entities to a simple array.
*
* @param $events Collection<int, Event>
*
* @return array<int, string>
*/
public function transform($events)
{
$eventArray = [];
foreach ($events as $event) {
$eventArray[] = $event->getEventType();
}
return $eventArray;
}
/**
* Convert a simple array into a PersistentCollection of Event entities.
*
* @param $submittedArray array<int, string>
*
* @return Collection<int, Event>
*/
public function reverseTransform($submittedArray)
{
// Get a list of existing events and types
$events = $this->webhook->getEvents();
$eventTypes = $events->getKeys();
// Check to see what events have been removed
$removed = array_diff($eventTypes, $submittedArray);
foreach ($removed as $type) {
$this->webhook->removeEvent($events[$type]);
}
// Now check to see what events have been added
$added = array_diff($submittedArray, $eventTypes);
foreach ($added as $type) {
// Create a new entity
$event = new Event();
$event->setWebhook($this->webhook)->setEventType($type);
$events[] = $event;
}
$this->webhook->setEvents($events);
return $events;
}
}
|