<?php declare(strict_types=1);
namespace AbasBecoCustomizations;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException;
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\Plugin\Context\UpdateContext;
use Shopware\Core\System\CustomField\CustomFieldTypes;
use Sms\SmsBecoCustomerGroupPopup\bootstrap\InstallUninstall;
class AbasBecoCustomizations extends Plugin
{
private const SW_FIELD_COMPONENT_NAME = 'sw-field';
private const CUSTOM_FIELDS = [
[
'name' => 'sms_beco_technic_order_custom_fields',
'customFields' => [
[
'name' => 'sms_beco_technic_order_global_commission_number',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Global Commission Number for Cart',
'de-DE' => 'Globale Warenkorbkommissionsnummer',
],
],
],
[
'name' => 'sms_beco_technic_order_comment',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Comment for current Cart',
'de-DE' => 'Kommentar zur Bestellung',
],
],
],[
'name' => 'sms_beco_technic_order_commission_number',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Global Commission Number',
'de-DE' => 'Globale Kommissionsnummer',
],
],
]
],
'config' => [
'label' => [
'en-GB' => 'Order Custom Fields',
'de-DE' => 'Order Custom Fields',
],
'translated' => true,
],
'relations' => [[
'entityName' => 'order'
]]
], [
'name' => 'sms_beco_technic_category_custom_fields',
'customFields' => [
[
'name' => 'sms_beco_technic_category_type',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'SMS Beco Category Type',
'de-DE' => 'SMS Beco Kategorietyp',
],
],
],
[
'name' => 'sms_beco_technic_product_listing_not_visible',
'type' => CustomFieldTypes::SWITCH,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::SWITCH,
'customFieldType' => CustomFieldTypes::SWITCH,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Dont show Products in Listing',
'de-DE' => 'Produkt im Listing ausblenden',
],
'value' => false
],
],
[
'name' => 'sms_beco_technic_category_table_field_one',
'type' => CustomFieldTypes::JSON,
'config' => [
'componentName' => 'sw-entity-single-select',
'entity' => 'property_group',
'customFieldType' => CustomFieldTypes::JSON,
'customFieldPosition' => 2,
'label' => [
'en-GB' => 'Table Listing Column Header One',
'de-DE' => 'Tabellenlisting: Erste Eigenschaft',
],
],
],
[
'name' => 'sms_beco_technic_category_table_field_two',
'type' => CustomFieldTypes::JSON,
'config' => [
'componentName' => 'sw-entity-single-select',
'entity' => 'property_group',
'customFieldType' => CustomFieldTypes::JSON,
'customFieldPosition' => 3,
'label' => [
'en-GB' => 'Table Listing Column Header Two',
'de-DE' => 'Tabellenlisting: Zweite Eigenschaft',
],
],
],
[
'name' => 'sms_beco_technic_category_table_field_three',
'type' => CustomFieldTypes::JSON,
'config' => [
'componentName' => 'sw-entity-single-select',
'entity' => 'property_group',
'customFieldType' => CustomFieldTypes::JSON,
'customFieldPosition' => 4,
'label' => [
'en-GB' => 'Table Listing Column Header Three',
'de-DE' => 'Tabellenlisting: Dritte Eigenschaft',
],
],
],
[
'name' => 'sms_beco_technic_category_table_field_four',
'type' => CustomFieldTypes::JSON,
'config' => [
'componentName' => 'sw-entity-single-select',
'entity' => 'property_group',
'customFieldType' => CustomFieldTypes::JSON,
'customFieldPosition' => 5,
'label' => [
'en-GB' => 'Table Listing Column Header Four',
'de-DE' => 'Tabellenlisting: Vierte Eigenschaft',
],
],
],
[
'name' => 'sms_beco_technic_category_table_field_five',
'type' => CustomFieldTypes::JSON,
'config' => [
'componentName' => 'sw-entity-single-select',
'entity' => 'property_group',
'customFieldType' => CustomFieldTypes::JSON,
'customFieldPosition' => 6,
'label' => [
'en-GB' => 'Table Listing Column Header Five',
'de-DE' => 'Tabellenlisting: Fünfte Eigenschaft',
],
],
],
[
'name' => 'sms_beco_technic_category_table_field_six',
'type' => CustomFieldTypes::JSON,
'config' => [
'componentName' => 'sw-entity-single-select',
'entity' => 'property_group',
'customFieldType' => CustomFieldTypes::JSON,
'customFieldPosition' => 7,
'label' => [
'en-GB' => 'Table Listing Column Header Six',
'de-DE' => 'Tabellenlisting: Sechste Eigenschaft',
],
],
],
[
'name' => 'sms_beco_technic_category_table_primary_property_option',
'type' => CustomFieldTypes::ENTITY,
'config' => [
'componentName' => 'sw-entity-single-select',
'entity' => 'property_group_option',
'customFieldType' => CustomFieldTypes::ENTITY,
'customFieldPosition' => 8,
'label' => [
'en-GB' => 'Primary Property Option for Table (2) Listing',
'de-DE' => 'Tabellenlisting: Eigenschaft, die definiert ob Artikel in erster Tabelle gelistet wird (Kat_Tabelle_2) / Priorisierte Sortierung bei Standartlisting',
],
],
],
[
'name' => 'sms_beco_technic_category_table_primary_property_option_name',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Tabellenlisting Kat_Tabelle_Zwei 1. Tabelle Name',
'de-DE' => 'Tabellenlisting Kat_Tabelle_Zwei 1. Tabelle Name',
],
],
],
],
'config' => [
'label' => [
'en-GB' => 'SMS Beco Category Custom Fields',
'de-DE' => 'SMS Beco Category Custom Fields',
],
'translated' => true,
],
'relations' => [[
'entityName' => 'category'
]]
],
[
'name' => 'sms_beco_technic_product_custom_fields',
'customFields' => [
[
'name' => 'sms_beco_technic_product_bbesch',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Abas Feld: BBesch',
'de-DE' => 'Abas Feld: BBesch',
],
],
],
[
'name' => 'sms_beco_technic_product_bstnr',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Abas Feld: Bstnr',
'de-DE' => 'Abas Feld: Bstnr',
],
],
],
[
'name' => 'sms_beco_technic_product_bstnr2',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Abas Feld: Bstnr 2',
'de-DE' => 'Abas Feld: Bstnr 2',
],
],
],
[
'name' => 'sms_beco_technic_product_bstnr3',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'Abas Feld: Bstnr 3',
'de-DE' => 'Abas Feld: Bstnr 3',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf2',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 2,
'label' => [
'en-GB' => 'Abas Feld: Pdf2',
'de-DE' => 'Abas Feld: Pdf2',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf3',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 3,
'label' => [
'en-GB' => 'Abas Feld: Pdf3',
'de-DE' => 'Abas Feld: Pdf2',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf4',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 4,
'label' => [
'en-GB' => 'Abas Feld: Pdf4',
'de-DE' => 'Abas Feld: Pdf4',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf5',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 5,
'label' => [
'en-GB' => 'Abas Feld: Pdf5',
'de-DE' => 'Abas Feld: Pdf5',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf6',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 6,
'label' => [
'en-GB' => 'Abas Feld: Pdf6',
'de-DE' => 'Abas Feld: Pdf6',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf7',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 7,
'label' => [
'en-GB' => 'Abas Feld: Pdf7',
'de-DE' => 'Abas Feld: Pdf7',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf8',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 8,
'label' => [
'en-GB' => 'Abas Feld: Pdf8',
'de-DE' => 'Abas Feld: Pdf8',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf9',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 9,
'label' => [
'en-GB' => 'Abas Feld: Pdf9',
'de-DE' => 'Abas Feld: Pdf9',
],
],
],
[
'name' => 'sms_beco_technic_product_ypdf10',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 10,
'label' => [
'en-GB' => 'Abas Feld: Pdf10',
'de-DE' => 'Abas Feld: Pdf10',
],
],
],
[
'name' => 'sms_beco_technic_product_catmeta',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 11,
'label' => [
'en-GB' => 'Abas Feld: Catmeta',
'de-DE' => 'Abas Feld: Catmeta',
],
],
],
[
'name' => 'sms_beco_technic_product_ykaliberalt',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 12,
'label' => [
'en-GB' => 'Abas Feld: ykaliberalt',
'de-DE' => 'Abas Feld: ykaliberalt',
],
],
],
[
'name' => 'sms_beco_technic_product_ywerkreserve1',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => self::SW_FIELD_COMPONENT_NAME,
'type' => CustomFieldTypes::TEXT,
'customFieldType' => CustomFieldTypes::TEXT,
'customFieldPosition' => 13,
'label' => [
'en-GB' => 'Abas Feld: ywerkreserve1',
'de-DE' => 'Abas Feld: ywerkreserve1',
],
],
]
],
'config' => [
'label' => [
'en-GB' => 'SMS Beco Product Custom Fields',
'de-DE' => 'SMS Beco Product Custom Fields',
],
'translated' => true,
],
'relations' => [[
'entityName' => 'product'
]]
],
];
public function install(InstallContext $installContext): void
{
parent::install($installContext);
$this->installOrUpdateCustomFields($installContext);
}
public function update(UpdateContext $updateContext): void
{
parent::update($updateContext);
$this->installOrUpdateCustomFields($updateContext);
}
/**
*
* @param UninstallContext $uninstallContext
* @throws InconsistentCriteriaIdsException
*/
public function uninstall(UninstallContext $uninstallContext): void
{
parent::uninstall($uninstallContext);
if ($uninstallContext->keepUserData()) {
return;
}
(new InstallUninstall($this->container))->uninstall($uninstallContext->getContext());
}
public function installOrUpdateCustomFields($context)
{
/** @var EntityRepositoryInterface $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
foreach (self::CUSTOM_FIELDS as $customFieldSet) {
$criteria = (new Criteria())
->addFilter(new EqualsFilter('name', $customFieldSet["name"]));
$existingCustomFieldSets = $customFieldSetRepository
->search($criteria, $context->getContext());
//var_dump($existingCustomFieldSets->getTotal());
if ($existingCustomFieldSets->getTotal() >= 1) {
$ids = $existingCustomFieldSets->getIds();
$customFieldSet["id"] = array_key_first($ids);
$customFieldSetRepository->delete([$customFieldSet], $context->getContext());
// foreach($ids as $id){
// $key = [0 => $id];
//
// }
}
$customFieldSetRepository->upsert([$customFieldSet], $context->getContext());
}
}
}