<?php declare(strict_types=1);
namespace PixAdditionalProductDescription;
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\ActivateContext;
use Shopware\Core\Framework\Plugin\Context\DeactivateContext;
use Shopware\Core\Framework\Plugin\Context\InstallContext;
use Shopware\Core\Framework\Plugin\Context\UninstallContext;
use Shopware\Core\System\CustomField\CustomFieldTypes;
class PixAdditionalProductDescription extends Plugin
{
/**
* @param InstallContext $context
*/
public function install(InstallContext $context): void
{
parent::install($context);
$this->addCustomFields($context);
}
/**
* @param UninstallContext $context
*/
public function uninstall(UninstallContext $context): void
{
// Only set the payment method to inactive when uninstalling. Removing the payment method would
// cause data consistency issues, since the payment method might have been used in several orders
$this->deleteCustomFields($context);
}
/**
* @param ActivateContext $context
*/
public function activate(ActivateContext $context): void
{
parent::activate($context);
}
/**
* @param DeactivateContext $context
*/
public function deactivate(DeactivateContext $context): void
{
parent::deactivate($context);
}
/**
* @return string|null
*/
private function customFieldExists($context, $name): ?string
{
/** @var EntityRepositoryInterface $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$criteria = (new Criteria())->addFilter(new EqualsFilter('name', $name));
return $customFieldSetRepository->searchIds($criteria, $context->getContext())->firstId();
}
private function deleteCustomFields($context)
{
/** @var EntityRepositoryInterface $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$customFieldsetId = $this->customFieldExists($context, 'detail_additional_description');
if ($customFieldsetId) {
$customFieldSetRepository->delete([
['id' => $customFieldsetId],
],$context->getContext());
}
}
private function addCustomFields($context)
{
/** @var EntityRepositoryInterface $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
if ($this->customFieldExists($context, 'detail_additional_description')) {
return;
}
$customFieldSetRepository->upsert([
[
'name' => 'detail_additional_description',
'config' => [
'label' => [
'en-GB' => 'Additional Description',
'de-DE' => 'Zusätzliche Beschreibung',
],
],
'customFields' => [
[
'name' => 'content',
'type' => CustomFieldTypes::TEXT,
'config' => [
'label' => [
'en-GB' => 'Content',
'de-DE' => 'Inhalt',
],
'componentName' => 'sw-text-editor',
'customFieldType' => 'textEditor',
'customFieldPosition' => 1,
],
],
],
'relations' => [
[
'entityName' => 'product',
],
],
],
], $context->getContext());
}
}