vendor/ibexa/admin-ui/src/lib/Form/Processor/User/UserOnTheFlyProcessor.php line 54

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\AdminUi\Form\Processor\User;
  8. use Ibexa\ContentForms\Data\User\UserCreateData;
  9. use Ibexa\ContentForms\Event\FormActionEvent;
  10. use Ibexa\ContentForms\Form\Processor\User\UserUpdateFormProcessor;
  11. use Ibexa\Contracts\AdminUi\Event\UserOnTheFlyEvents;
  12. use Ibexa\Contracts\Core\Repository\UserService;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Twig\Environment;
  16. class UserOnTheFlyProcessor implements EventSubscriberInterface
  17. {
  18.     /** @var \Ibexa\Contracts\Core\Repository\UserService */
  19.     private $userService;
  20.     /** @var \Twig\Environment */
  21.     private $twig;
  22.     /** @var \Ibexa\ContentForms\Form\Processor\User\UserUpdateFormProcessor */
  23.     private $innerUserUpdateFormProcessor;
  24.     public function __construct(
  25.         UserService $userService,
  26.         Environment $twig,
  27.         UserUpdateFormProcessor $innerUserUpdateFormProcessor
  28.     ) {
  29.         $this->userService $userService;
  30.         $this->twig $twig;
  31.         $this->innerUserUpdateFormProcessor $innerUserUpdateFormProcessor;
  32.     }
  33.     /**
  34.      * Returns an array of event names this subscriber wants to listen to.
  35.      *
  36.      * @return array The event names to listen to
  37.      */
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             UserOnTheFlyEvents::USER_CREATE_PUBLISH => ['processCreate'10],
  42.             UserOnTheFlyEvents::USER_EDIT_PUBLISH => ['processEdit'10],
  43.         ];
  44.     }
  45.     public function processCreate(FormActionEvent $event)
  46.     {
  47.         $data $event->getData();
  48.         if (!$data instanceof UserCreateData) {
  49.             return;
  50.         }
  51.         $form $event->getForm();
  52.         $languageCode $form->getConfig()->getOption('languageCode');
  53.         $this->setContentFields($data$languageCode);
  54.         $user $this->userService->createUser($data$data->getParentGroups());
  55.         $event->setResponse(
  56.             new Response(
  57.                 $this->twig->render('@ibexadesign/ui/on_the_fly/user_create_response.html.twig', [
  58.                     'locationId' => $user->contentInfo->mainLocationId,
  59.                 ])
  60.             )
  61.         );
  62.     }
  63.     public function processEdit(FormActionEvent $event): void
  64.     {
  65.         // Rely on User Form Processor from ContentForms to avoid unncessary code duplication
  66.         $this->innerUserUpdateFormProcessor->processUpdate($event);
  67.         $referrerLocation $event->getOption('referrerLocation');
  68.         // We only need to change the response so it's compatible with UDW
  69.         $event->setResponse(
  70.             new Response(
  71.                 $this->twig->render('@ibexadesign/ui/on_the_fly/user_edit_response.html.twig', [
  72.                     'locationId' => $referrerLocation->id,
  73.                 ])
  74.             )
  75.         );
  76.     }
  77.     /**
  78.      * @param \Ibexa\ContentForms\Data\User\UserCreateData $data
  79.      * @param string $languageCode
  80.      */
  81.     private function setContentFields(UserCreateData $datastring $languageCode): void
  82.     {
  83.         foreach ($data->fieldsData as $fieldDefIdentifier => $fieldData) {
  84.             $data->setField($fieldDefIdentifier$fieldData->value$languageCode);
  85.         }
  86.     }
  87. }
  88. class_alias(UserOnTheFlyProcessor::class, 'EzSystems\EzPlatformAdminUi\Form\Processor\User\UserOnTheFlyProcessor');