custom/plugins/FourtwosixRecommendationForm/src/FourtwosixRecommendationForm.php line 15

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace FourtwosixRecommendationForm;
  3. use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
  4. use Shopware\Core\Content\MailTemplate\Aggregate\MailTemplateType\MailTemplateTypeEntity;
  5. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  8. use Shopware\Core\Framework\Plugin;
  9. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  10. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  11. use Shopware\Core\Framework\Uuid\Uuid;
  12. class FourtwosixRecommendationForm extends Plugin
  13. {
  14.     public const TEMPLATE_TYPE_NAME 'RecommendationForm';
  15.     public const TEMPLATE_TYPE_TECHNICAL_NAME 'recommendation_form';
  16.     public const MAIL_TEMPLATE_NAME 'RecommendationFormTemplate';
  17.     
  18.     public function install(InstallContext $installContext): void
  19.     {
  20.         /** @var EntityRepositoryInterface $mailTemplateTypeRepository */
  21.         $mailTemplateTypeRepository $this->container->get('mail_template_type.repository');
  22.         /** @var EntityRepositoryInterface $mailTemplateRepository */
  23.         $mailTemplateRepository $this->container->get('mail_template.repository');
  24.         $mailTemplateTypeId Uuid::randomHex();
  25.         $mailTemplateType = [
  26.             [
  27.                 'id' => $mailTemplateTypeId,
  28.                 'name' => self::TEMPLATE_TYPE_NAME,
  29.                 'technicalName' => self::TEMPLATE_TYPE_TECHNICAL_NAME,
  30.                 'availableEntities' => [
  31.                     'product' => 'product',
  32.                     'salesChannel' => 'sales_channel',
  33.                     'customer' => 'customer'
  34.                 ]
  35.             ]
  36.         ];
  37.         $mailTemplate = [
  38.             [
  39.                 'id' => Uuid::randomHex(),
  40.                 'mailTemplateTypeId' => $mailTemplateTypeId,
  41.                 'subject' => [
  42.                     'en-GB' => '{{ recommendationFormData.sName }} recommends you {{ recommendationFormData.sProduct }}',
  43.                     'de-DE' => '{{ recommendationFormData.sName }} empfiehlt Ihnen {{ recommendationFormData.sProduct }}',
  44.                     'it-IT' => '{{ recommendationFormData.sName }} consiglia {{ recommendationFormData.sProduct }}'
  45.                     ],
  46.                 'contentPlain' => [
  47.                     'en-GB' => 'Hello,\n\n{{ recommendationFormData.sName }} has found an interesting product for you at {{ salesChannel.name }} that you should take a look at:\n\n{{ recommendationFormData.sProduct }}\n{{ recommendationFormData.sProductLink }}\n\n{{ recommendationFormData.sComment }}',
  48.                     'de-DE' => 'Hallo,\n\n{{ recommendationFormData.sName }} hat für Sie bei {{ salesChannel.name }} ein interessantes Produkt gefunden, das Sie sich anschauen sollten:\n\n{{ recommendationFormData.sProduct }}\n{{ recommendationFormData.sProductLink }}\n\n{{ recommendationFormData.sComment }}',
  49.                     'it-IT' => 'Ciao,\n\n{{ recommendationFormData.sName }} ha trovato un prodotto interessante per lei da {{ salesChannel.name }} che dovreste guardare:\n\n{{ recommendationFormData.sProduct }}\n{{ recommendationFormData.sProductLink }}\n\n{{ recommendationFormData.sComment }}'
  50.                 ],
  51.                 'contentHtml' => [
  52.                     'en-GB' => '<div style="font-family:arial; font-size:12px;"><br/><br/><p>Hello,<br/><br/>{{ recommendationFormData.sName }} has found an interesting product for you at {{ salesChannel.name }} that you should take a look at:<br/><br/><strong><a href="{{ recommendationFormData.sProductLink }}">{{ recommendationFormData.sProduct }}</a></strong></p>{% if recommendationFormData.sComment %}<div style="border:2px solid black; border-radius: 5px; padding: 5px;">{{ recommendationFormData.sComment }}</div>{% endif %}</div>',
  53.                     'de-DE' => '<div style="font-family:arial; font-size:12px;"><br/><br/><p>Hallo,<br/><br/>{{ recommendationFormData.sName }} hat für Sie bei {{ salesChannel.name }} ein interessantes Produkt gefunden, das Sie sich anschauen sollten:<br/><br/><strong><a href="{{ recommendationFormData.sProductLink }}">{{ recommendationFormData.sProduct }}</a></strong></p>{% if recommendationFormData.sComment %}<div style="border:2px solid black; border-radius: 5px; padding: 5px;">{{ recommendationFormData.sComment }}</div>{% endif %}</div>',
  54.                     'it-IT' => '<div style="font-family:arial; font-size:12px;"><br/><br/><p>Ciao,<br/><br/>{{ recommendationFormData.sName }} ha trovato un prodotto interessante per lei da {{ salesChannel.name }} che dovreste guardare:<br/><br/><strong><a href="{{ recommendationFormData.sProductLink }}">{{ recommendationFormData.sProduct }}</a></strong></p>{% if recommendationFormData.sComment %}<div style="border:2px solid black; border-radius: 5px; padding: 5px;">{{ recommendationFormData.sComment }}</div>{% endif %}</div>'
  55.                 ]
  56.             ]
  57.         ];
  58.         try {
  59.             $mailTemplateTypeRepository->create($mailTemplateType$installContext->getContext());
  60.             $mailTemplateRepository->create($mailTemplate$installContext->getContext());
  61.         } catch (UniqueConstraintViolationException $exception) {
  62.             
  63.         }
  64.     }
  65.     public function uninstall(UninstallContext $uninstallContext): void
  66.     {
  67.         if ($uninstallContext->keepUserData()) {
  68.             return;
  69.         }
  70.         /** @var EntityRepositoryInterface $mailTemplateTypeRepository */
  71.         $mailTemplateTypeRepository $this->container->get('mail_template_type.repository');
  72.         /** @var EntityRepositoryInterface $mailTemplateRepository */
  73.         $mailTemplateRepository $this->container->get('mail_template.repository');
  74.         /** @var MailTemplateTypeEntity $myCustomMailTemplateType */
  75.         $myCustomMailTemplateType $mailTemplateTypeRepository->search(
  76.             (new Criteria())
  77.                 ->addFilter(new EqualsFilter('technicalName'self::TEMPLATE_TYPE_TECHNICAL_NAME)),
  78.             $uninstallContext
  79.                 ->getContext()
  80.         )->first();
  81.             
  82.         $mailTemplateIds $mailTemplateRepository->searchIds(
  83.             (new Criteria())
  84.                 ->addFilter(new EqualsFilter('mailTemplateTypeId'$myCustomMailTemplateType->getId())),
  85.             $uninstallContext
  86.                 ->getContext()
  87.         )->getIds();
  88.         $ids array_map(static function ($id) {
  89.             return ['id' => $id];
  90.         }, $mailTemplateIds);
  91.         $mailTemplateRepository->delete($ids$uninstallContext->getContext());
  92.         //Delete the TemplateType which were added by this Plugin
  93.         $mailTemplateTypeRepository->delete([
  94.             ['id' => $myCustomMailTemplateType->getId()]
  95.         ], $uninstallContext->getContext());
  96.     }
  97. }