custom/plugins/ProductModelExtension/src/ProductModelExtension.php line 15

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Virgin\ProductModelExtension;
  3. use Shopware\Core\Defaults;
  4. use Shopware\Core\Framework\Context;
  5. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  8. use Shopware\Core\Framework\Plugin;
  9. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  10. use Shopware\Core\Framework\Plugin\Context\UpdateContext;
  11. use Shopware\Core\System\CustomField\CustomFieldTypes;
  12. class ProductModelExtension extends Plugin
  13. {
  14. public function install(InstallContext $installContext): void
  15. {
  16. parent::install($installContext);
  17. }
  18. public function update(UpdateContext $updateContext): void
  19. {
  20. //parent::update($updateContext);
  21. $newProductFields = [
  22. [
  23. 'name' => 'saved_money',
  24. 'type' => CustomFieldTypes::INT,
  25. 'config' => [
  26. 'type' => 'number',
  27. 'customFieldType' => 'number',
  28. 'numbertype'=> 'float',
  29. "label" => [
  30. "en-GB" => "Saved money multiplier (Oggi risparmi)"
  31. ],
  32. "helpText" => [
  33. "en-GB" => "Oggi risparmi moltiplicatore"
  34. ],
  35. "customFieldPosition" => 9
  36. ],
  37. ]
  38. ];
  39. $this->addProductFields($newProductFields, 'virgin_product_attributes', 'virgin attributes');
  40. }
  41. private function addProductFields($newProductCustomFields, $setName, $label)
  42. {
  43. /** @var EntityRepositoryInterface $customFieldSetRepository */
  44. $customFieldSetRepository = $this->container->get('custom_field_set.repository');
  45. $customFieldRepository = $this->container->get('custom_field.repository');
  46. $context = Context::createDefaultContext();
  47. foreach ($newProductCustomFields as $newProductCustomField) {
  48. $criteria = new Criteria();
  49. $criteria->addFilter(
  50. new EqualsFilter('custom_field.name', $newProductCustomField['name'])
  51. );
  52. $fieldId = $customFieldRepository->searchIds($criteria, $context)->firstId();
  53. if ($fieldId == null) {
  54. $createCustomFields[] = $newProductCustomField;
  55. }
  56. }
  57. $criteria = new Criteria();
  58. $criteria->addFilter(
  59. new EqualsFilter('name', $setName)
  60. );
  61. $customFieldSetId = $customFieldSetRepository->searchIds($criteria, $context)->firstId();
  62. if (!empty($createCustomFields)) {
  63. if (null == $customFieldSetId) {
  64. $customFieldSetRepository->create([
  65. [
  66. 'name' => $setName,
  67. 'customFields' => $createCustomFields,
  68. 'config' => [
  69. 'label' => [
  70. 'en-GB' => $label,
  71. ],
  72. ],
  73. 'relations' => [
  74. ['entityName' => 'product'],
  75. ],
  76. ],
  77. ], $context);
  78. } else {
  79. $customFieldSetRepository->update([
  80. [
  81. 'id' => $customFieldSetId,
  82. 'customFields' => $createCustomFields
  83. ]
  84. ], $context);
  85. }
  86. }
  87. }
  88. }