vendor/ezsystems/repository-forms/lib/Form/Processor/User/UserUpdateFormProcessor.php line 52

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the eZ RepositoryForms package.
  4.  *
  5.  * @copyright Copyright (C) eZ Systems AS. All rights reserved.
  6.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  7.  *
  8.  * @version //autogentag//
  9.  */
  10. namespace EzSystems\RepositoryForms\Form\Processor\User;
  11. use eZ\Publish\API\Repository\ContentService;
  12. use eZ\Publish\API\Repository\UserService;
  13. use EzSystems\RepositoryForms\Data\User\UserUpdateData;
  14. use EzSystems\RepositoryForms\Event\FormActionEvent;
  15. use EzSystems\RepositoryForms\Event\RepositoryFormEvents;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Symfony\Component\HttpFoundation\RedirectResponse;
  18. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  19. /**
  20.  * Listens for and processes User update events.
  21.  */
  22. class UserUpdateFormProcessor implements EventSubscriberInterface
  23. {
  24.     /** @var UserService */
  25.     private $userService;
  26.     /** @var ContentService */
  27.     private $contentService;
  28.     /** @var UrlGeneratorInterface */
  29.     private $urlGenerator;
  30.     public function __construct(
  31.         UserService $userService,
  32.         ContentService $contentService,
  33.         UrlGeneratorInterface $urlGenerator
  34.     ) {
  35.         $this->userService $userService;
  36.         $this->contentService $contentService;
  37.         $this->urlGenerator $urlGenerator;
  38.     }
  39.     public static function getSubscribedEvents()
  40.     {
  41.         return [
  42.             RepositoryFormEvents::USER_UPDATE => ['processUpdate'20],
  43.         ];
  44.     }
  45.     public function processUpdate(FormActionEvent $event)
  46.     {
  47.         $data $data $event->getData();
  48.         if (!$data instanceof UserUpdateData) {
  49.             return;
  50.         }
  51.         $form $event->getForm();
  52.         $languageCode $form->getConfig()->getOption('languageCode');
  53.         $this->setContentFields($data$languageCode);
  54.         $user $this->userService->updateUser($data->user$data);
  55.         $redirectUrl $form['redirectUrlAfterPublish']->getData() ?: $this->urlGenerator->generate(
  56.             '_ezpublishLocation',
  57.             ['locationId' => $user->contentInfo->mainLocationId],
  58.             UrlGeneratorInterface::ABSOLUTE_URL
  59.         );
  60.         $event->setResponse(new RedirectResponse($redirectUrl));
  61.     }
  62.     /**
  63.      * @param 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. }