<?php
declare(strict_types=1);
namespace Tmms\CmsElementPeriodRequestForm;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use Shopware\Core\Content\MailTemplate\Aggregate\MailTemplateType\MailTemplateTypeEntity;
use Shopware\Core\Defaults;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\Plugin;
use Shopware\Core\Framework\Plugin\Context\InstallContext;
use Shopware\Core\Framework\Plugin\Context\UninstallContext;
use Shopware\Core\Framework\Uuid\Uuid;
class TmmsCmsElementPeriodRequestForm extends Plugin
{
public const TEMPLATE_TYPE_NAME_DE = 'Anfrageformular';
public const TEMPLATE_TYPE_NAME_EN = 'request form';
public const TEMPLATE_TYPE_TECHNICAL_NAME = 'tmms_request_form';
public function install(InstallContext $installContext): void
{
$this->addMailTemplate($installContext->getContext());
parent::install($installContext);
}
private function addMailTemplate($installContext){
/** @var EntityRepositoryInterface $mailTemplateTypeRepository */
$mailTemplateTypeRepository = $this->container->get('mail_template_type.repository');
/** @var EntityRepositoryInterface $mailTemplateRepository */
$mailTemplateRepository = $this->container->get('mail_template.repository');
$mailTemplateTypeId = Uuid::randomHex();
$mailTemplateType = [
[
'id' => $mailTemplateTypeId,
'name' => [
'en-GB' => self::TEMPLATE_TYPE_NAME_EN,
'de-DE' => self::TEMPLATE_TYPE_NAME_DE,
Defaults::LANGUAGE_SYSTEM => self::TEMPLATE_TYPE_NAME_EN,
],
'technicalName' => self::TEMPLATE_TYPE_TECHNICAL_NAME,
'availableEntities' => [
'salesChannel' => 'sales_channel',
],
],
];
$mailTemplate = [
[
'id' => Uuid::randomHex(),
'mailTemplateTypeId' => $mailTemplateTypeId,
'subject' => [
'en-GB' => 'request form received - {{ salesChannel.name }}',
'de-DE' => 'Anfrage erhalten - {{ salesChannel.name }}',
Defaults::LANGUAGE_SYSTEM => 'request form received - {{ salesChannel.name }}',
],
'description' => [
'en-GB' => self::TEMPLATE_TYPE_NAME_EN,
'de-DE' => self::TEMPLATE_TYPE_NAME_DE,
Defaults::LANGUAGE_SYSTEM => self::TEMPLATE_TYPE_NAME_EN,
],
'senderName' => [
'en-GB' => '{{ salesChannel.name }}',
'de-DE' => '{{ salesChannel.name }}',
Defaults::LANGUAGE_SYSTEM => '{{ salesChannel.name }}',
],
'contentPlain' => [
'en-GB' => "Hello, following data were transmitted.\n\nOrigin: {{ periodRequestFormData.origin }} \nOrigin value: {{ periodRequestFormData.originName }} ({{ periodRequestFormData.originId }}) \n{% if periodRequestFormData.salutation != \"\" %}Salutation: {{ periodRequestFormData.salutation }} \n{% endif %}{% if periodRequestFormData.firstname != \"\" %}Firstname: {{ periodRequestFormData.firstname }} \n{% endif %}{% if periodRequestFormData.lastname != \"\" %}Lastname: {{ periodRequestFormData.lastname }} \n{% endif %}{% if periodRequestFormData.street != \"\" %}Street address: {{ periodRequestFormData.street }} \n{% endif %}{% if periodRequestFormData.zipcode != \"\" %}Postal code: {{ periodRequestFormData.zipcode }} \n{% endif %}{% if periodRequestFormData.city != \"\" %}City: {{ periodRequestFormData.city }} \n{% endif %}{% if periodRequestFormData.country != \"\" %}Country: {{ periodRequestFormData.country }} \n{% endif %}{% if periodRequestFormData.email != \"\" %}Mail: {{ periodRequestFormData.email }} \n{% endif %}{% if periodRequestFormData.phone != \"\" %}Phone: {{ periodRequestFormData.phone }} \n{% endif %}{% if periodRequestFormData.comment != \"\" %}Comment: {{ periodRequestFormData.comment }} \n{% endif %}{% if periodRequestFormData.date != \"\" %}Period: {{ periodRequestFormData.date }}\n{% endif %}{% if periodRequestFormData.freeInput != \"\" %}{{ periodRequestFormData.freeInputLabel }}: {{ periodRequestFormData.freeInput }}\n{% endif %}{% if periodRequestFormData.freeInput2 != \"\" %}{{ periodRequestFormData.freeInput2Label }}: {{ periodRequestFormData.freeInput2 }}\n{% endif %}{% if periodRequestFormData.freeInput3 != \"\" %}{{ periodRequestFormData.freeInput3Label }}: {{ periodRequestFormData.freeInput3 }}\n{% endif %}{% if periodRequestFormData.freeInput4 != \"\" %}{{ periodRequestFormData.freeInput4Label }}: {{ periodRequestFormData.freeInput4 }}\n{% endif %}\nKind Regards,\nYours",
'de-DE' => "Hallo, die nachfolgenden Daten wurden übermittelt.\n\nHerkunft: {{ periodRequestFormData.origin }} \nHerkunftswert: {{ periodRequestFormData.originName }} ({{ periodRequestFormData.originId }}) \n{% if periodRequestFormData.salutation != \"\" %}Anrede: {{ periodRequestFormData.salutation }} \n{% endif %}{% if periodRequestFormData.firstname != \"\" %}Vorname: {{ periodRequestFormData.firstname }} \n{% endif %}{% if periodRequestFormData.lastname != \"\" %}Nachname: {{ periodRequestFormData.lastname }} \n{% endif %}{% if periodRequestFormData.street != \"\" %}Straße: {{ periodRequestFormData.street }} \n{% endif %}{% if periodRequestFormData.zipcode != \"\" %}Postleitzahl: {{ periodRequestFormData.zipcode }} \n{% endif %}{% if periodRequestFormData.city != \"\" %}Ort: {{ periodRequestFormData.city }} \n{% endif %}{% if periodRequestFormData.country != \"\" %}Land: {{ periodRequestFormData.country }} \n{% endif %}{% if periodRequestFormData.email != \"\" %}E-Mail: {{ periodRequestFormData.email }} \n{% endif %}{% if periodRequestFormData.phone != \"\" %}Telefon: {{ periodRequestFormData.phone }} \n{% endif %}{% if periodRequestFormData.comment != \"\" %}Kommentar: {{ periodRequestFormData.comment }} \n{% endif %}{% if periodRequestFormData.date != \"\" %}Zeitraum: {{ periodRequestFormData.date }}\n{% endif %}{% if periodRequestFormData.freeInput != \"\" %}{{ periodRequestFormData.freeInputLabel }}: {{ periodRequestFormData.freeInput }}\n{% endif %}{% if periodRequestFormData.freeInput2 != \"\" %}{{ periodRequestFormData.freeInput2Label }}: {{ periodRequestFormData.freeInput2 }}\n{% endif %}{% if periodRequestFormData.freeInput3 != \"\" %}{{ periodRequestFormData.freeInput3Label }}: {{ periodRequestFormData.freeInput3 }}\n{% endif %}{% if periodRequestFormData.freeInput4 != \"\" %}{{ periodRequestFormData.freeInput4Label }}: {{ periodRequestFormData.freeInput4 }}\n{% endif %}\nViele Grüße,\nIhr",
Defaults::LANGUAGE_SYSTEM => "Hello, following data were transmitted.\n\nOrigin: {{ periodRequestFormData.origin }} \nOrigin value: {{ periodRequestFormData.originName }} ({{ periodRequestFormData.originId }}) \n{% if periodRequestFormData.salutation != \"\" %}Salutation: {{ periodRequestFormData.salutation }} \n{% endif %}{% if periodRequestFormData.firstname != \"\" %}Firstname: {{ periodRequestFormData.firstname }} \n{% endif %}{% if periodRequestFormData.lastname != \"\" %}Lastname: {{ periodRequestFormData.lastname }} \n{% endif %}{% if periodRequestFormData.street != \"\" %}Street address: {{ periodRequestFormData.street }} \n{% endif %}{% if periodRequestFormData.zipcode != \"\" %}Postal code: {{ periodRequestFormData.zipcode }} \n{% endif %}{% if periodRequestFormData.city != \"\" %}City: {{ periodRequestFormData.city }} \n{% endif %}{% if periodRequestFormData.country != \"\" %}Country: {{ periodRequestFormData.country }} \n{% endif %}{% if periodRequestFormData.email != \"\" %}Mail: {{ periodRequestFormData.email }} \n{% endif %}{% if periodRequestFormData.phone != \"\" %}Phone: {{ periodRequestFormData.phone }} \n{% endif %}{% if periodRequestFormData.comment != \"\" %}Comment: {{ periodRequestFormData.comment }} \n{% endif %}{% if periodRequestFormData.date != \"\" %}Period: {{ periodRequestFormData.date }}\n{% endif %}{% if periodRequestFormData.freeInput != \"\" %}{{ periodRequestFormData.freeInputLabel }}: {{ periodRequestFormData.freeInput }}\n{% endif %}{% if periodRequestFormData.freeInput2 != \"\" %}{{ periodRequestFormData.freeInput2Label }}: {{ periodRequestFormData.freeInput2 }}\n{% endif %}{% if periodRequestFormData.freeInput3 != \"\" %}{{ periodRequestFormData.freeInput3Label }}: {{ periodRequestFormData.freeInput3 }}\n{% endif %}{% if periodRequestFormData.freeInput4 != \"\" %}{{ periodRequestFormData.freeInput4Label }}: {{ periodRequestFormData.freeInput4 }}\n{% endif %}\nKind Regards,\nYours",
],
'contentHtml' => [
'en-GB' => '<div style="font-size:12px;">Hello,<br>the following data were transmitted.<br/><br/>Origin: {{ periodRequestFormData.origin }}<br/>Origin value: {{ periodRequestFormData.originName }} ({{ periodRequestFormData.originId }})<br/>{% if periodRequestFormData.salutation != "" %}Salutation: {{ periodRequestFormData.salutation }}<br/>{% endif %}{% if periodRequestFormData.firstname != "" %}Firstname: {{ periodRequestFormData.firstname }}<br/>{% endif %}{% if periodRequestFormData.lastname != "" %}Lastname: {{ periodRequestFormData.lastname }}<br/>{% endif %}{% if periodRequestFormData.street != "" %}Street address: {{ periodRequestFormData.street }}<br/>{% endif %}{% if periodRequestFormData.zipcode != "" %}Postal code: {{ periodRequestFormData.zipcode }}<br/>{% endif %}{% if periodRequestFormData.city != "" %}City: {{ periodRequestFormData.city }}<br/>{% endif %}{% if periodRequestFormData.country != "" %}Country: {{ periodRequestFormData.country }}<br/>{% endif %}{% if periodRequestFormData.email != "" %}Mail: {{ periodRequestFormData.email }}<br/>{% endif %}{% if periodRequestFormData.phone != "" %}Phone: {{ periodRequestFormData.phone }}<br/>{% endif %}{% if periodRequestFormData.comment != "" %}Comment: {{ periodRequestFormData.comment }}<br/>{% endif %}{% if periodRequestFormData.date != "" %}Period: {{ periodRequestFormData.date }}<br/>{% endif %}{% if periodRequestFormData.freeInput != "" %}{{ periodRequestFormData.freeInputLabel }}: {{ periodRequestFormData.freeInput }}<br/>{% endif %}{% if periodRequestFormData.freeInput2 != "" %}{{ periodRequestFormData.freeInput2Label }}: {{ periodRequestFormData.freeInput2 }}<br/>{% endif %}{% if periodRequestFormData.freeInput3 != "" %}{{ periodRequestFormData.freeInput3Label }}: {{ periodRequestFormData.freeInput3 }}<br/>{% endif %}{% if periodRequestFormData.freeInput4 != "" %}{{ periodRequestFormData.freeInput4Label }}: {{ periodRequestFormData.freeInput4 }}<br/>{% endif %}<br/>Kind Regards,<br/>Yours</div>',
'de-DE' => '<div style="font-size:12px;">Hallo,<br>die nachfolgenden Daten wurden übermittelt.<br/><br/>Herkunft: {{ periodRequestFormData.origin }}<br/>Herkunftswert: {{ periodRequestFormData.originName }} ({{ periodRequestFormData.originId }})<br/>{% if periodRequestFormData.salutation != "" %}Anrede: {{ periodRequestFormData.salutation }}<br/>{% endif %}{% if periodRequestFormData.firstname != "" %}Vorname: {{ periodRequestFormData.firstname }}<br/>{% endif %}{% if periodRequestFormData.lastname != "" %}Nachname: {{ periodRequestFormData.lastname }}<br/>{% endif %}{% if periodRequestFormData.street != "" %}Straße: {{ periodRequestFormData.street }}<br/>{% endif %}{% if periodRequestFormData.zipcode != "" %}Postleitzahl: {{ periodRequestFormData.zipcode }}<br/>{% endif %}{% if periodRequestFormData.city != "" %}Ort: {{ periodRequestFormData.city }}<br/>{% endif %}{% if periodRequestFormData.country != "" %}Land: {{ periodRequestFormData.country }}<br/>{% endif %}{% if periodRequestFormData.email != "" %}E-Mail: {{ periodRequestFormData.email }}<br/>{% endif %}{% if periodRequestFormData.phone != "" %}Telefon: {{ periodRequestFormData.phone }}<br/>{% endif %}{% if periodRequestFormData.comment != "" %}Kommentar: {{ periodRequestFormData.comment }}<br/>{% endif %}{% if periodRequestFormData.date != "" %}Zeitraum: {{ periodRequestFormData.date }}<br/>{% endif %}{% if periodRequestFormData.freeInput != "" %}{{ periodRequestFormData.freeInputLabel }}: {{ periodRequestFormData.freeInput }}<br/>{% endif %}{% if periodRequestFormData.freeInput2 != "" %}{{ periodRequestFormData.freeInput2Label }}: {{ periodRequestFormData.freeInput2 }}<br/>{% endif %}{% if periodRequestFormData.freeInput3 != "" %}{{ periodRequestFormData.freeInput3Label }}: {{ periodRequestFormData.freeInput3 }}<br/>{% endif %}{% if periodRequestFormData.freeInput4 != "" %}{{ periodRequestFormData.freeInput4Label }}: {{ periodRequestFormData.freeInput4 }}<br/>{% endif %}<br/>Viele Grüße,<br/>Ihr</div>',
Defaults::LANGUAGE_SYSTEM => '<div style="font-size:12px;">Hello,<br>the following data were transmitted.<br/><br/>Origin: {{ periodRequestFormData.origin }}<br/>Origin value: {{ periodRequestFormData.originName }} ({{ periodRequestFormData.originId }})<br/>{% if periodRequestFormData.salutation != "" %}Salutation: {{ periodRequestFormData.salutation }}<br/>{% endif %}{% if periodRequestFormData.firstname != "" %}Firstname: {{ periodRequestFormData.firstname }}<br/>{% endif %}{% if periodRequestFormData.lastname != "" %}Lastname: {{ periodRequestFormData.lastname }}<br/>{% endif %}{% if periodRequestFormData.street != "" %}Street address: {{ periodRequestFormData.street }}<br/>{% endif %}{% if periodRequestFormData.zipcode != "" %}Postal code: {{ periodRequestFormData.zipcode }}<br/>{% endif %}{% if periodRequestFormData.city != "" %}City: {{ periodRequestFormData.city }}<br/>{% endif %}{% if periodRequestFormData.country != "" %}Country: {{ periodRequestFormData.country }}<br/>{% endif %}{% if periodRequestFormData.email != "" %}Mail: {{ periodRequestFormData.email }}<br/>{% endif %}{% if periodRequestFormData.phone != "" %}Phone: {{ periodRequestFormData.phone }}<br/>{% endif %}{% if periodRequestFormData.comment != "" %}Comment: {{ periodRequestFormData.comment }}<br/>{% endif %}{% if periodRequestFormData.date != "" %}Period: {{ periodRequestFormData.date }}<br/>{% endif %}{% if periodRequestFormData.freeInput != "" %}{{ periodRequestFormData.freeInputLabel }}: {{ periodRequestFormData.freeInput }}<br/>{% endif %}{% if periodRequestFormData.freeInput2 != "" %}{{ periodRequestFormData.freeInput2Label }}: {{ periodRequestFormData.freeInput2 }}<br/>{% endif %}{% if periodRequestFormData.freeInput3 != "" %}{{ periodRequestFormData.freeInput3Label }}: {{ periodRequestFormData.freeInput3 }}<br/>{% endif %}{% if periodRequestFormData.freeInput4 != "" %}{{ periodRequestFormData.freeInput4Label }}: {{ periodRequestFormData.freeInput4 }}<br/>{% endif %}<br/>Kind Regards,<br/>Yours</div>',
],
],
];
try {
$mailTemplateTypeRepository->create($mailTemplateType, $installContext);
$mailTemplateRepository->create($mailTemplate, $installContext);
} catch (UniqueConstraintViolationException $exception) {
}
}
public function uninstall(UninstallContext $uninstallContext): void
{
if ($uninstallContext->keepUserData()) {
parent::uninstall($uninstallContext);
return;
}
$this->deleteMailTemplate($uninstallContext->getContext());
parent::uninstall($uninstallContext);
}
private function deleteMailTemplate($uninstallContext){
/** @var EntityRepositoryInterface $mailTemplateTypeRepository */
$mailTemplateTypeRepository = $this->container->get('mail_template_type.repository');
/** @var EntityRepositoryInterface $mailTemplateRepository */
$mailTemplateRepository = $this->container->get('mail_template.repository');
/** @var MailTemplateTypeEntity $requestFormMailTemplateType */
$requestFormMailTemplateType = $mailTemplateTypeRepository->search(
(new Criteria())->addFilter(new EqualsFilter('technicalName', self::TEMPLATE_TYPE_TECHNICAL_NAME)),
$uninstallContext
)->first();
$mailTemplateIds = $mailTemplateRepository->searchIds(
(new Criteria())->addFilter(new EqualsFilter('mailTemplateTypeId', $requestFormMailTemplateType->getId())),
$uninstallContext
)->getIds();
$ids = array_map(static function ($id) { return ['id' => $id]; }, $mailTemplateIds);
$mailTemplateRepository->delete($ids, $uninstallContext);
$mailTemplateTypeRepository->delete([['id' => $requestFormMailTemplateType->getId()]], $uninstallContext);
$connection = $this->container->get(Connection::class);
$connection->executeStatement('DROP TABLE IF EXISTS `periodrequestform`');
}
}