vendor/store.shopware.com/dvsnticketsystem/src/Subscriber/TicketFormWrittenSubscriber.php line 87

Open in your IDE?
  1. <?php
  2. /**
  3.  * digitvision
  4.  *
  5.  * @category  digitvision
  6.  * @package   Shopware\Plugins\DvsnTicketSystem
  7.  * @copyright (c) 2020 digitvision
  8.  */
  9. namespace Dvsn\TicketSystem\Subscriber;
  10. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  11. use Shopware\Core\Framework\DataAbstractionLayer\EntityWriteResult;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Write\EntityExistence;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. class TicketFormWrittenSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * ...
  20.      *
  21.      * @var EntityRepositoryInterface
  22.      */
  23.     protected $ticketRepository;
  24.     /**
  25.      * ...
  26.      *
  27.      * @var EntityRepositoryInterface
  28.      */
  29.     protected $ticketFormRepository;
  30.     /**
  31.      * ...
  32.      *
  33.      * @var EntityRepositoryInterface
  34.      */
  35.     protected $ticketFormElementRepository;
  36.     /**
  37.      * ...
  38.      *
  39.      * @var RequestStack
  40.      */
  41.     protected $requestStack;
  42.     /**
  43.      * ...
  44.      *
  45.      * @param EntityRepositoryInterface $ticketRepository
  46.      * @param EntityRepositoryInterface $ticketFormRepository
  47.      * @param EntityRepositoryInterface $ticketFormElementRepository
  48.      * @param RequestStack $requestStack
  49.      */
  50.     public function __construct(
  51.         EntityRepositoryInterface $ticketRepository,
  52.         EntityRepositoryInterface $ticketFormRepository,
  53.         EntityRepositoryInterface $ticketFormElementRepository,
  54.         RequestStack $requestStack
  55.     ) {
  56.         // set params
  57.         $this->ticketRepository $ticketRepository;
  58.         $this->ticketFormRepository $ticketFormRepository;
  59.         $this->ticketFormElementRepository $ticketFormElementRepository;
  60.         $this->requestStack $requestStack;
  61.     }
  62.     /**
  63.      * {@inheritDoc}
  64.      */
  65.     public static function getSubscribedEvents(): array
  66.     {
  67.         return [
  68.             'dvsn_ticket_form_element.written' => 'onTicketFormElementWritten',
  69.             'dvsn_ticket_form_element.deleted' => 'onTicketFormElementDeleted'
  70.         ];
  71.     }
  72.     /**
  73.      * ...
  74.      *
  75.      * @param EntityWrittenEvent $event
  76.      */
  77.     public function onTicketFormElementWritten(EntityWrittenEvent $event)
  78.     {
  79.         // loop every answer
  80.         foreach ($event->getWriteResults() as $writeResult) {
  81.             // has to be valid
  82.             if (!$writeResult->getExistence() instanceof EntityExistence) {
  83.                 // ignore
  84.                 continue;
  85.             }
  86.             // switch if we created or updated an answer
  87.             switch ($writeResult->getOperation()) {
  88.                 case EntityWriteResult::OPERATION_UPDATE:
  89.                     // get the payload
  90.                     $payload $writeResult->getPayload();
  91.                     // get the request
  92.                     $request $this->requestStack->getCurrentRequest();
  93.                     // do we even have valid elements in the request?
  94.                     if (!$request->request->has('elements')) {
  95.                         // we dont
  96.                         break;
  97.                     }
  98.                     // get them
  99.                     $elements = (array) $request->request->get('elements');
  100.                     // the request params for our elements
  101.                     $params null;
  102.                     // find the request for our element
  103.                     foreach ($elements as $element) {
  104.                         if ($element['id'] === $payload['id']) {
  105.                             $params $element;
  106.                             break;
  107.                         }
  108.                     }
  109.                     // not found?
  110.                     if (!is_array($params)) {
  111.                         // weird...
  112.                         break;
  113.                     }
  114.                     // if we set form id to null, we want to delete our element
  115.                     $hasFormId false;
  116.                     $formId null;
  117.                     // find the id
  118.                     foreach ($params as $key => $value) {
  119.                         if ($key === 'formId') {
  120.                             $hasFormId true;
  121.                             $formId $value;
  122.                         }
  123.                     }
  124.                     // are we removing the form id?! this means we want to remove the element
  125.                     if ($hasFormId === true && $formId === null) {
  126.                         // delete it
  127.                         $this->ticketFormElementRepository->delete([
  128.                             ['id' => $payload['id']]
  129.                         ], $event->getContext());
  130.                     }
  131.                     // done
  132.                     break;
  133.             }
  134.         }
  135.     }
  136.     /**
  137.      * ...
  138.      *
  139.      * @param EntityWrittenEvent $event
  140.      */
  141.     public function onTicketFormElementDeleted(EntityWrittenEvent $event)
  142.     {
  143.     }
  144. }