vendor/ibexa/corporate-account/src/lib/Form/Processor/MemberFormProcessor.php line 33

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\CorporateAccount\Form\Processor;
  8. use Ibexa\ContentForms\Event\FormActionEvent;
  9. use Ibexa\CorporateAccount\Event\DispatcherEvents;
  10. use Ibexa\CorporateAccount\Form\Data\Member\MemberCreateData;
  11. use Ibexa\CorporateAccount\Form\Data\Member\MemberRoleChangeData;
  12. use Ibexa\CorporateAccount\Form\Data\Member\MemberUpdateData;
  13. use LogicException;
  14. use Symfony\Component\HttpFoundation\RedirectResponse;
  15. class MemberFormProcessor extends FormProcessor
  16. {
  17.     /**
  18.      * @return array<string, mixed>
  19.      */
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             DispatcherEvents::MEMBER_CREATE => ['processCreate'10],
  24.             DispatcherEvents::MEMBER_UPDATE => ['processUpdate'10],
  25.             DispatcherEvents::MEMBER_CHANGE_CORPORATE_ROLE => ['changeMemberRole'10],
  26.         ];
  27.     }
  28.     public function processCreate(FormActionEvent $event): void
  29.     {
  30.         $data $event->getData();
  31.         $form $event->getForm();
  32.         if (!$data instanceof MemberCreateData) {
  33.             return;
  34.         }
  35.         /** @var \Ibexa\Contracts\CorporateAccount\Values\Company $company */
  36.         $company $event->getOption('company');
  37.         $languageCode $form->getConfig()->getOption('languageCode');
  38.         $role $data->getRole();
  39.         if ($role === null) {
  40.             throw new LogicException('Creating user with role is not possible');
  41.         }
  42.         $memberCreateStruct $this->memberService->newMemberCreateStruct(
  43.             $data->login,
  44.             $data->email,
  45.             $data->password,
  46.             $data->contentType
  47.         );
  48.         foreach ($data->fieldsData as $fieldDefIdentifier => $fieldData) {
  49.             $memberCreateStruct->setField($fieldDefIdentifier$fieldData->value$languageCode);
  50.         }
  51.         $this->memberService->createMember(
  52.             $company,
  53.             $memberCreateStruct,
  54.             $role
  55.         );
  56.         $redirectUrl = ($form['redirectUrlAfterPublish'] && $form['redirectUrlAfterPublish']->getData())
  57.             ? $form['redirectUrlAfterPublish']->getData()
  58.             : $this->urlGenerator->generate(
  59.                 'ibexa.corporate_account.company.details',
  60.                 [
  61.                     'companyId' => $company->getId(),
  62.                     '_fragment' => 'ibexa-tab-members',
  63.                 ]
  64.             );
  65.         $event->setResponse(new RedirectResponse($redirectUrl));
  66.     }
  67.     public function processUpdate(FormActionEvent $event): void
  68.     {
  69.         $data $event->getData();
  70.         $form $event->getForm();
  71.         if (!$data instanceof MemberUpdateData) {
  72.             return;
  73.         }
  74.         /** @var \Ibexa\Contracts\CorporateAccount\Values\Company $company */
  75.         $company $event->getOption('company');
  76.         $languageCode $form->getConfig()->getOption('languageCode');
  77.         $role $data->getRole();
  78.         $memberUpdateStruct $this->memberService->newMemberUpdateStruct();
  79.         foreach ($data->fieldsData as $fieldDefIdentifier => $fieldData) {
  80.             $memberUpdateStruct->contentUpdateStruct->setField($fieldDefIdentifier$fieldData->value$languageCode);
  81.         }
  82.         $member $this->memberService->getMember($data->user->id$company);
  83.         $this->memberService->updateMember($member$memberUpdateStruct);
  84.         if ($data->getMember()->getRole()->identifier !== $data->getRole()->identifier) {
  85.             $this->memberService->setMemberRole($data->getMember(), $data->getRole());
  86.         }
  87.         $redirectUrl = ($form['redirectUrlAfterPublish'] && $form['redirectUrlAfterPublish']->getData())
  88.             ? $form['redirectUrlAfterPublish']->getData()
  89.             : $this->urlGenerator->generate(
  90.                 'ibexa.corporate_account.company.details',
  91.                 [
  92.                     'companyId' => $company->getId(),
  93.                     '_fragment' => 'ibexa-tab-members',
  94.                 ]
  95.             );
  96.         $event->setResponse(new RedirectResponse($redirectUrl));
  97.     }
  98.     public function changeMemberRole(FormActionEvent $event): void
  99.     {
  100.         $data $event->getData();
  101.         if (!$data instanceof MemberRoleChangeData) {
  102.             return;
  103.         }
  104.         if ($data->getMember() === null || $data->getNewRole() === null) {
  105.             return;
  106.         }
  107.         if ($data->getMember()->getRole()->identifier !== $data->getNewRole()->identifier) {
  108.             $this->memberService->setMemberRole($data->getMember(), $data->getNewRole());
  109.         }
  110.     }
  111. }