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

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. }