<?php
declare(strict_types=1);
namespace Asbs\TrustedShopsReviews;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
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\System\CustomField\CustomFieldTypes;
class AsbsTrustedShopsReviews extends Plugin
{
public function install(InstallContext $installContext): void
{
$this->createCustomFields($installContext->getContext());
}
public function uninstall(UninstallContext $uninstallContext): void
{
if ($uninstallContext->keepUserData()) {
return;
}
$this->removeCustomFields($uninstallContext->getContext());
}
private function removeCustomFields(Context $context): void
{
/** @var EntityRepository $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('name', 'asbs_trustedshops_reviews'));
$customFieldSetId = $customFieldSetRepository->searchIds($criteria, $context)->firstId();
if ($customFieldSetId) {
$customFieldSetRepository->delete([
[
'id' => $customFieldSetId
]
], $context);
}
}
private function createCustomFields(Context $context): void
{
/** @var EntityRepository $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
/** @var EntityRepository $customFieldRepository */
$customFieldRepository = $this->container->get('custom_field.repository');
// First create the custom field set
$customFieldSetId = null;
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('name', 'asbs_trustedshops_reviews'));
$existingSet = $customFieldSetRepository->search($criteria, $context)->first();
if ($existingSet) {
$customFieldSetId = $existingSet->getId();
} else {
$result = $customFieldSetRepository->create([
[
'name' => 'asbs_trustedshops_reviews',
'config' => [
'label' => [
'de-DE' => 'TrustedShops Bewertungen',
'en-GB' => 'TrustedShops Reviews'
]
],
'relations' => [
[
'entityName' => 'order'
]
]
]
], $context);
$customFieldSetId = $result->getEventByEntityName('custom_field_set')->getIds()[0];
}
// Then create individual custom fields
$customFieldRepository->upsert([
[
'name' => 'asbs_review_email_sent',
'type' => CustomFieldTypes::BOOL,
'setId' => $customFieldSetId,
'config' => [
'label' => [
'de-DE' => 'Bewertungsmail versendet',
'en-GB' => 'Review email sent'
],
'helpText' => [
'de-DE' => 'Zeigt an, ob bereits eine TrustedShops Bewertungsmail für diese Bestellung versendet wurde',
'en-GB' => 'Indicates whether a TrustedShops review email has been sent for this order'
],
'componentName' => 'sw-field',
'customFieldType' => 'checkbox'
]
],
[
'name' => 'asbs_review_email_sent_at',
'type' => CustomFieldTypes::DATETIME,
'setId' => $customFieldSetId,
'config' => [
'label' => [
'de-DE' => 'Bewertungsmail versendet am',
'en-GB' => 'Review email sent at'
],
'helpText' => [
'de-DE' => 'Zeitpunkt, zu dem die TrustedShops Bewertungsmail versendet wurde',
'en-GB' => 'Timestamp when the TrustedShops review email was sent'
],
'componentName' => 'sw-field',
'customFieldType' => 'datetime'
]
]
], $context);
}
}