custom/plugins/AcrisCmsCS/src/AcrisCmsCS.php line 22

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Acris\Cms;
  3. use Acris\Cms\Core\Content\FormBuilder\Event\FormBuilderSendEvent;
  4. use Shopware\Core\Content\Flow\Dispatching\Action\SendMailAction;
  5. use Shopware\Core\Defaults;
  6. use Shopware\Core\Framework\Context;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Search\IdSearchResult;
  13. use Shopware\Core\Framework\Plugin;
  14. use Shopware\Core\Framework\Plugin\Context\ActivateContext;
  15. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  16. use Shopware\Core\Framework\Plugin\Context\UpdateContext;
  17. use Shopware\Core\Framework\Uuid\Uuid;
  18. use Shopware\Core\System\SalesChannel\Aggregate\SalesChannelType\SalesChannelTypeEntity;
  19. class AcrisCmsCS extends Plugin
  20. {
  21.     const DEFAULT_SALES_CHANNEL_TYPE_ICON 'default-building-shop';
  22.     const DEFAULT_SALES_CHANNEL_TYPE_ICON_NEW 'regular-storefront';
  23.     const DEFAULT_MAIL_TEMPLATE_TYPE_FORM_BUILDER 'acrisFormBuilder';
  24.     const DEFAULT_FLOW_EVENT_FORM_BUILDER_WAS_SENT_NAME 'ACRIS Form builder was sent';
  25.     public function activate(ActivateContext $context): void
  26.     {
  27.         $this->insertDefaultData($context->getContext());
  28.     }
  29.     public function update(UpdateContext $updateContext): void
  30.     {
  31.         $this->insertDefaultData($updateContext->getContext());
  32.     }
  33.     private function insertDefaultData(Context $context): void
  34.     {
  35.         $this->insertDefaultMailTemplateAndFlow($context);
  36.     }
  37.     private function insertDefaultMailTemplateAndFlow(Context $context)
  38.     {
  39.         $mailTemplateTypeRepository $this->container->get('mail_template_type.repository');
  40.         /** @var IdSearchResult $mailTemplateTypeFormBuilderSearchResult */
  41.         $mailTemplateTypeFormBuilderSearchResult $mailTemplateTypeRepository->searchIds((new Criteria())->addFilter(new EqualsFilter('technicalName'self::DEFAULT_MAIL_TEMPLATE_TYPE_FORM_BUILDER)), $context);
  42.         if (empty($mailTemplateTypeFormBuilderSearchResult->firstId())) {
  43.             $mailTemplateTypeFormBuilderId Uuid::randomHex();
  44.             $mailTemplateFormBuilderId Uuid::randomHex();
  45.             $mailTemplateTypeFormBuilderData = [
  46.                 'id' => $mailTemplateTypeFormBuilderId,
  47.                 'technicalName' => self::DEFAULT_MAIL_TEMPLATE_TYPE_FORM_BUILDER,
  48.                 'availableEntities' => ['salesChannel' => 'sales_channel''mailSubject' => null],
  49.                 'translations' => [
  50.                     'de-DE' => [
  51.                         'name' => 'ACRIS Form builder'
  52.                     ],
  53.                     'en-GB' => [
  54.                         'name' => 'ACRIS Formular Builder'
  55.                     ],
  56.                     [
  57.                         'name' => 'ACRIS Form builder',
  58.                         'languageId' => Defaults::LANGUAGE_SYSTEM
  59.                     ]
  60.                 ],
  61.                 'mailTemplates' => [
  62.                     [
  63.                         'id' => $mailTemplateFormBuilderId,
  64.                         'systemDefault' => true,
  65.                         'translations' => [
  66.                             'de-DE' => [
  67.                                 'senderName' => '{{ salesChannel.name }}',
  68.                                 'subject' => '{{ mailSubject }}',
  69.                                 'description' => 'E-Mail mit der Information, dass eine neue Nachricht vom Formular Builder gesendet wurde',
  70.                                 'contentHtml' => file_get_contents($this->path '/Resources/mail-template/html/de-DE/acris-form-builder.html.twig'),
  71.                                 'contentPlain' => 'Kein Inhalt.'
  72.                             ],
  73.                             'en-GB' => [
  74.                                 'senderName' => '{{ salesChannel.name }}',
  75.                                 'subject' => '{{ mailSubject }}',
  76.                                 'description' => 'E-mail informing that a new message was sent from the form builder',
  77.                                 'contentHtml' => file_get_contents($this->path '/Resources/mail-template/html/en-GB/acris-form-builder.html.twig'),
  78.                                 'contentPlain' => 'No content.'
  79.                             ],
  80.                             [
  81.                                 'senderName' => '{{ salesChannel.name }}',
  82.                                 'subject' => '{{ mailSubject }}',
  83.                                 'description' => 'E-mail informing that a new message was sent from the form builder',
  84.                                 'contentHtml' => file_get_contents($this->path '/Resources/mail-template/html/en-GB/acris-form-builder.html.twig'),
  85.                                 'contentPlain' => 'No content.',
  86.                                 'languageId' => Defaults::LANGUAGE_SYSTEM
  87.                             ]
  88.                         ]
  89.                     ]
  90.                 ]
  91.             ];
  92.             $mailTemplateTypeRepository->upsert([$mailTemplateTypeFormBuilderData], $context);
  93.             $this->upsertFlowBuilder(self::DEFAULT_FLOW_EVENT_FORM_BUILDER_WAS_SENT_NAMEFormBuilderSendEvent::EVENT_NAME$mailTemplateFormBuilderId$mailTemplateTypeFormBuilderId$context);
  94.         }
  95.     }
  96.     private function upsertFlowBuilder(string $namestring $eventNamestring $mailTemplateIdstring $mailTemplateTypeIdContext $context): void
  97.     {
  98.         $flowRepository $this->container->get('flow.repository');
  99.         $flowRepository->upsert([[
  100.             "name" => $name,
  101.             "eventName" => $eventName,
  102.             "priority" => 1,
  103.             "active" => true,
  104.             "sequences" => [
  105.                 [
  106.                     "actionName" => SendMailAction::getName(),
  107.                     "config" => [
  108.                         "mailTemplateId" => $mailTemplateId,
  109.                         'mail_template_type_id' => $mailTemplateTypeId,
  110.                         "recipient" => [
  111.                             "type" => "default",
  112.                             "data" => []
  113.                         ]
  114.                     ],
  115.                     "position" => 2
  116.                 ]
  117.             ]
  118.         ]], $context);
  119.     }
  120.     public function uninstall(UninstallContext $context): void
  121.     {
  122.         if ($context->keepUserData()) {
  123.             return;
  124.         }
  125.         $this->removeDefaultMailTemplateAndFlow($context->getContext());
  126.     }
  127.     private function removeDefaultMailTemplateAndFlow(Context $context)
  128.     {
  129.         $mailTemplateTypeRepository $this->container->get('mail_template_type.repository');
  130.         /** @var IdSearchResult $mailTemplateTypeFormBuilderSearchResult */
  131.         $mailTemplateTypeFormBuilderSearchResult $mailTemplateTypeRepository->searchIds((new Criteria())->addFilter(new EqualsFilter('technicalName'self::DEFAULT_MAIL_TEMPLATE_TYPE_FORM_BUILDER)), $context);
  132.         if($mailTemplateTypeFormBuilderSearchResult->firstId()) {
  133.             $mailTemplateRepository $this->container->get('mail_template.repository');
  134.             $mailTemplateSearchResult $mailTemplateRepository->searchIds((new Criteria())->addFilter(new EqualsFilter('mailTemplateTypeId'$mailTemplateTypeFormBuilderSearchResult->firstId())), $context);
  135.             foreach ($mailTemplateSearchResult->getIds() as $id) {
  136.                 $mailTemplateRepository->delete([['id'=>$id]], $context);
  137.             }
  138.             $mailTemplateTypeRepository->delete([['id'=>$mailTemplateTypeFormBuilderSearchResult->firstId()]], $context);
  139.         }
  140.         $flowRepository $this->container->get('flow.repository');
  141.         /** @var IdSearchResult $flowSearchResult */
  142.         $flowSearchResult $flowRepository->searchIds((new Criteria())->addFilter(new EqualsAnyFilter('eventName', [FormBuilderSendEvent::EVENT_NAME])), $context);
  143.         if($flowSearchResult->firstId()) {
  144.             $deleteBusinessEvents = [];
  145.             foreach ($flowSearchResult->getIds() as $id) {
  146.                 $deleteBusinessEvents[] = ['id' => $id];
  147.             }
  148.             if (!empty($deleteBusinessEvents)) {
  149.                 $flowRepository->delete($deleteBusinessEvents$context);
  150.             }
  151.         }
  152.     }
  153. }