<?php declare(strict_types=1);
namespace RhiemMassMail;
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;
class RhiemNextMassMail extends Plugin
{
public function install(InstallContext $installContext): void
{
$context = $installContext->getContext();
$languageRepo = $this->container->get('language.repository');
$mailTemplateTypeRepo = $this->getMailTemplateTypeRepo();
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('name', 'English'));
$english = $languageRepo->search($criteria, $context);
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('name', 'Deutsch'));
$german = $languageRepo->search($criteria, $context);
if ($english->getTotal() > 0 && $german->getTotal() > 0) {
$translation = [$english->first()->getId() => 'Massmail', $german->first()->getId() => 'Massenmail'];
} else {
$translation = 'Massmail';
}
$mailTemplateTypeRepo->create([
[
'technicalName' => 'mass_mail',
'availableEntities' => $this->availableEntities(),
'name' => $translation
]
],
$context
);
}
public function uninstall(UninstallContext $uninstallContext): void
{
$context = $uninstallContext->getContext();
$mailTemplateTypeRepo = $this->getMailTemplateTypeRepo();
$mailTemplateRepo = $this->container->get('mail_template.repository');
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter(
'technicalName',
'mass_mail'
));
$massMailType = $mailTemplateTypeRepo->search($criteria, $context);
$id = $massMailType->first()->getId();
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter(
'mailTemplateTypeId',
$id
));
$massMailTemplateIds = [];
foreach ($mailTemplateRepo->searchIds($criteria, $context)->getIds() as $templateId) {
$massMailTemplateIds[] = ['id' => $templateId];
}
if (!empty($massMailTemplateIds)) {
$mailTemplateRepo->delete($massMailTemplateIds,
$context
);
}
$mailTemplateTypeRepo->delete([
[
'id' => $id
]
],
$context
);
}
private function getMailTemplateTypeRepo()
{
return $this->container->get('mail_template_type.repository');
}
private function availableEntities()
{
return json_decode('{"customer":"customer","salesChannel":"sales_channel"}', true);
}
}