vendor/ibexa/content-forms/src/lib/Form/Processor/User/UserCreateFormProcessor.php line 49

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\ContentForms\Form\Processor\User;
  8. use Ibexa\ContentForms\Data\User\UserCreateData;
  9. use Ibexa\ContentForms\Event\ContentFormEvents;
  10. use Ibexa\ContentForms\Event\FormActionEvent;
  11. use Ibexa\Contracts\Core\Repository\UserService;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. /**
  16. * Listens for and processes User create events.
  17. */
  18. class UserCreateFormProcessor implements EventSubscriberInterface
  19. {
  20. /** @var \Ibexa\Contracts\Core\Repository\UserService */
  21. private $userService;
  22. /** @var \Symfony\Component\Routing\Generator\UrlGeneratorInterface */
  23. private $urlGenerator;
  24. /**
  25. * @param \Ibexa\Contracts\Core\Repository\UserService $userService
  26. * @param \Symfony\Component\Routing\Generator\UrlGeneratorInterface $urlGenerator
  27. */
  28. public function __construct(
  29. UserService $userService,
  30. UrlGeneratorInterface $urlGenerator
  31. ) {
  32. $this->userService = $userService;
  33. $this->urlGenerator = $urlGenerator;
  34. }
  35. public static function getSubscribedEvents()
  36. {
  37. return [
  38. ContentFormEvents::USER_CREATE => ['processCreate', 20],
  39. ];
  40. }
  41. public function processCreate(FormActionEvent $event)
  42. {
  43. $data = $data = $event->getData();
  44. if (!$data instanceof UserCreateData) {
  45. return;
  46. }
  47. $form = $event->getForm();
  48. $languageCode = $form->getConfig()->getOption('languageCode');
  49. $this->setContentFields($data, $languageCode);
  50. $user = $this->userService->createUser($data, $data->getParentGroups());
  51. $redirectUrl = $form['redirectUrlAfterPublish']->getData() ?: $this->urlGenerator->generate(
  52. 'ibexa.content.view',
  53. [
  54. 'contentId' => $user->id,
  55. 'locationId' => $user->contentInfo->mainLocationId,
  56. ],
  57. UrlGeneratorInterface::ABSOLUTE_URL
  58. );
  59. $event->setResponse(new RedirectResponse($redirectUrl));
  60. }
  61. /**
  62. * @param \Ibexa\ContentForms\Data\User\UserCreateData $data
  63. * @param string $languageCode
  64. */
  65. private function setContentFields(UserCreateData $data, string $languageCode): void
  66. {
  67. foreach ($data->fieldsData as $fieldDefIdentifier => $fieldData) {
  68. $data->setField($fieldDefIdentifier, $fieldData->value, $languageCode);
  69. }
  70. }
  71. }
  72. class_alias(UserCreateFormProcessor::class, 'EzSystems\EzPlatformContentForms\Form\Processor\User\UserCreateFormProcessor');