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 $datastring $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');