<?php declare(strict_types=1);
namespace Virgin\ProductModelExtension;
use Shopware\Core\Defaults;
use Shopware\Core\Framework\Context;
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\UpdateContext;
use Shopware\Core\System\CustomField\CustomFieldTypes;
class ProductModelExtension extends Plugin
{
public function install(InstallContext $installContext): void
{
parent::install($installContext);
}
public function update(UpdateContext $updateContext): void
{
//parent::update($updateContext);
$newProductFields = [
[
'name' => 'saved_money',
'type' => CustomFieldTypes::INT,
'config' => [
'type' => 'number',
'customFieldType' => 'number',
'numbertype'=> 'float',
"label" => [
"en-GB" => "Saved money multiplier (Oggi risparmi)"
],
"helpText" => [
"en-GB" => "Oggi risparmi moltiplicatore"
],
"customFieldPosition" => 9
],
]
];
$this->addProductFields($newProductFields, 'virgin_product_attributes', 'virgin attributes');
}
private function addProductFields($newProductCustomFields, $setName, $label)
{
/** @var EntityRepositoryInterface $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$customFieldRepository = $this->container->get('custom_field.repository');
$context = Context::createDefaultContext();
foreach ($newProductCustomFields as $newProductCustomField) {
$criteria = new Criteria();
$criteria->addFilter(
new EqualsFilter('custom_field.name', $newProductCustomField['name'])
);
$fieldId = $customFieldRepository->searchIds($criteria, $context)->firstId();
if ($fieldId == null) {
$createCustomFields[] = $newProductCustomField;
}
}
$criteria = new Criteria();
$criteria->addFilter(
new EqualsFilter('name', $setName)
);
$customFieldSetId = $customFieldSetRepository->searchIds($criteria, $context)->firstId();
if (!empty($createCustomFields)) {
if (null == $customFieldSetId) {
$customFieldSetRepository->create([
[
'name' => $setName,
'customFields' => $createCustomFields,
'config' => [
'label' => [
'en-GB' => $label,
],
],
'relations' => [
['entityName' => 'product'],
],
],
], $context);
} else {
$customFieldSetRepository->update([
[
'id' => $customFieldSetId,
'customFields' => $createCustomFields
]
], $context);
}
}
}
}