vendor/ibexa/corporate-account/src/lib/Form/Processor/CompanyFormProcessor.php line 31

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\Data\Content\ContentCreateData;
  9. use Ibexa\ContentForms\Data\Content\ContentUpdateData;
  10. use Ibexa\ContentForms\Event\FormActionEvent;
  11. use Ibexa\Contracts\CorporateAccount\Values\Company;
  12. use Ibexa\Core\Base\Exceptions\InvalidArgumentException;
  13. use Ibexa\CorporateAccount\Event\DispatcherEvents;
  14. use Symfony\Component\HttpFoundation\RedirectResponse;
  15. class CompanyFormProcessor extends FormProcessor
  16. {
  17.     /**
  18.      * @return array<string, mixed>
  19.      */
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             DispatcherEvents::COMPANY_PUBLISH => ['processPublish'10],
  24.         ];
  25.     }
  26.     public function processPublish(FormActionEvent $event): void
  27.     {
  28.         /** @var \Ibexa\Contracts\Core\Repository\Values\Content\ContentStruct $data */
  29.         $data $event->getData();
  30.         $form $event->getForm();
  31.         if (!$data instanceof ContentUpdateData && !$data instanceof ContentCreateData) {
  32.             throw new InvalidArgumentException(
  33.                 '$data',
  34.                 'Expected ContentUpdateData or ContentCreateData'
  35.             );
  36.         }
  37.         $languageCode $form->getConfig()->getOption('languageCode');
  38.         if ($data->isNew()) {
  39.             /** @var \Ibexa\ContentForms\Data\Content\ContentCreateData $data */
  40.             $company $this->createCompany($data$languageCode);
  41.         } else {
  42.             /** @var \Ibexa\ContentForms\Data\Content\ContentUpdateData $data */
  43.             $company $this->updateCompany($data$languageCode);
  44.         }
  45.         if ($data->isNew()) {
  46.             $this->companyService->createCompanyMembersUserGroup($company);
  47.             $this->companyService->createCompanyAddressBookFolder($company);
  48.             $company $this->companyService->getCompany($company->getId());
  49.             $this->companyService->setDefaultShippingAddress(
  50.                 $company,
  51.                 $this->shippingAddressService->createShippingAddressFromCompanyBillingAddress($company)
  52.             );
  53.         }
  54.         $redirectUrl = ($form['redirectUrlAfterPublish'] && $form['redirectUrlAfterPublish']->getData())
  55.             ? $form['redirectUrlAfterPublish']->getData()
  56.             : $this->urlGenerator->generate(
  57.                 'ibexa.corporate_account.company.details',
  58.                 [
  59.                     'companyId' => $company->getId(),
  60.                 ]
  61.             );
  62.         $event->setResponse(new RedirectResponse($redirectUrl));
  63.     }
  64.     public function createCompany(
  65.         ContentCreateData $contentCreateData,
  66.         string $languageCode
  67.     ): Company {
  68.         $companyCreateStruct $this->companyService->newCompanyCreateStruct();
  69.         $companyCreateStruct->contentType $contentCreateData->contentType;
  70.         $companyCreateStruct->mainLanguageCode $contentCreateData->mainLanguageCode;
  71.         $companyCreateStruct->alwaysAvailable $contentCreateData->alwaysAvailable;
  72.         $mainLanguageCode $this->resolveMainLanguageCode($contentCreateData);
  73.         foreach ($contentCreateData->fieldsData as $fieldDefIdentifier => $fieldData) {
  74.             if ($mainLanguageCode != $languageCode && !$fieldData->fieldDefinition->isTranslatable) {
  75.                 continue;
  76.             }
  77.             $companyCreateStruct->setField($fieldDefIdentifier$fieldData->value$languageCode);
  78.         }
  79.         return $this->companyService->createCompany($companyCreateStruct);
  80.     }
  81.     public function updateCompany(
  82.         ContentUpdateData $contentUpdateData,
  83.         string $languageCode
  84.     ): Company {
  85.         $companyUpdateStruct $this->companyService->newCompanyUpdateStruct();
  86.         $companyUpdateStruct->initialLanguageCode $contentUpdateData->initialLanguageCode;
  87.         $companyUpdateStruct->creatorId $contentUpdateData->creatorId;
  88.         $mainLanguageCode $this->resolveMainLanguageCode($contentUpdateData);
  89.         foreach ($contentUpdateData->fieldsData as $fieldDefIdentifier => $fieldData) {
  90.             if ($mainLanguageCode != $languageCode && !$fieldData->fieldDefinition->isTranslatable) {
  91.                 continue;
  92.             }
  93.             $companyUpdateStruct->setField($fieldDefIdentifier$fieldData->value$languageCode);
  94.         }
  95.         $company $this->companyService->getCompany($contentUpdateData->contentDraft->id);
  96.         return $this->companyService->updateCompany($company$companyUpdateStruct);
  97.     }
  98. }