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

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 $data, string $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');