vendor/ibexa/content-forms/src/lib/Form/Processor/User/UserUpdateFormProcessor.php line 51

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