diff --git a/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/create.yaml b/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/create.yaml index 9118c4210b..fe1635d2b8 100644 --- a/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/create.yaml +++ b/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/create.yaml @@ -49,6 +49,9 @@ sylius_twig_hooks: code: template: '@SyliusAdmin/product_option/form/sections/values/value/code.html.twig' priority: 200 + position: + template: '@SyliusAdmin/product_option/form/sections/values/value/position.html.twig' + priority: 150 translations: template: '@SyliusAdmin/product_option/form/sections/values/value/translations.html.twig' priority: 100 diff --git a/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/update.yaml b/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/update.yaml index aa55a233cd..a3211e296d 100644 --- a/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/update.yaml +++ b/src/Sylius/Bundle/AdminBundle/Resources/config/app/twig_hooks/product_option/update.yaml @@ -51,6 +51,9 @@ sylius_twig_hooks: code: template: '@SyliusAdmin/product_option/form/sections/values/value/code.html.twig' priority: 200 + position: + template: '@SyliusAdmin/product_option/form/sections/values/value/position.html.twig' + priority: 150 translations: template: '@SyliusAdmin/product_option/form/sections/values/value/translations.html.twig' priority: 100 diff --git a/src/Sylius/Bundle/AdminBundle/templates/product_option/form/sections/values/value/position.html.twig b/src/Sylius/Bundle/AdminBundle/templates/product_option/form/sections/values/value/position.html.twig new file mode 100644 index 0000000000..f6859af5ef --- /dev/null +++ b/src/Sylius/Bundle/AdminBundle/templates/product_option/form/sections/values/value/position.html.twig @@ -0,0 +1,3 @@ +
+ {{ form_row(hookable_metadata.context.value_form.position, sylius_test_form_attribute('position')) }} +
diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/api_platform/resources/admin/ProductOptionValue.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/api_platform/resources/admin/ProductOptionValue.xml index 7b8e4fed4b..919dd5a3a7 100644 --- a/src/Sylius/Bundle/ApiBundle/Resources/config/api_platform/resources/admin/ProductOptionValue.xml +++ b/src/Sylius/Bundle/ApiBundle/Resources/config/api_platform/resources/admin/ProductOptionValue.xml @@ -59,6 +59,9 @@ + + sylius_api.order_filter.admin.product_option_value + diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/ProductOptionValue.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/ProductOptionValue.xml index a62e884f09..8f5e7032c4 100644 --- a/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/ProductOptionValue.xml +++ b/src/Sylius/Bundle/ApiBundle/Resources/config/serialization/ProductOptionValue.xml @@ -34,6 +34,14 @@ sylius:shop:product_option_value:index sylius:shop:product_option_value:show + + sylius:admin:product_option_value:index + sylius:admin:product_option_value:show + sylius:admin:product_option:index + sylius:admin:product_option:show + sylius:admin:product_option:create + sylius:admin:product_option:update + sylius:admin:product_option_value:show sylius:admin:product_option:create diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/services/admin/filters.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/services/admin/filters.xml index dd1fb1754a..fc6cc3e722 100644 --- a/src/Sylius/Bundle/ApiBundle/Resources/config/services/admin/filters.xml +++ b/src/Sylius/Bundle/ApiBundle/Resources/config/services/admin/filters.xml @@ -393,6 +393,13 @@ + + + + + + + partial diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20260623000000.php b/src/Sylius/Bundle/CoreBundle/Migrations/Version20260623000000.php new file mode 100644 index 0000000000..d3607bb6f5 --- /dev/null +++ b/src/Sylius/Bundle/CoreBundle/Migrations/Version20260623000000.php @@ -0,0 +1,57 @@ +hasTable(self::TABLE_NAME)) { + return; + } + + $table = $schema->getTable(self::TABLE_NAME); + + if ($table->hasColumn('position')) { + return; + } + + $this->addSql('ALTER TABLE ' . self::TABLE_NAME . ' ADD position INT NOT NULL DEFAULT 0'); + } + + public function down(Schema $schema): void + { + if (!$schema->hasTable(self::TABLE_NAME)) { + return; + } + + $table = $schema->getTable(self::TABLE_NAME); + + if (!$table->hasColumn('position')) { + return; + } + + $this->addSql('ALTER TABLE ' . self::TABLE_NAME . ' DROP COLUMN position'); + } +} diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20260623000001.php b/src/Sylius/Bundle/CoreBundle/Migrations/Version20260623000001.php new file mode 100644 index 0000000000..b8f66be694 --- /dev/null +++ b/src/Sylius/Bundle/CoreBundle/Migrations/Version20260623000001.php @@ -0,0 +1,57 @@ +hasTable(self::TABLE_NAME)) { + return; + } + + $table = $schema->getTable(self::TABLE_NAME); + + if ($table->hasColumn('position')) { + return; + } + + $this->addSql('ALTER TABLE ' . self::TABLE_NAME . ' ADD position INT NOT NULL DEFAULT 0'); + } + + public function down(Schema $schema): void + { + if (!$schema->hasTable(self::TABLE_NAME)) { + return; + } + + $table = $schema->getTable(self::TABLE_NAME); + + if (!$table->hasColumn('position')) { + return; + } + + $this->addSql('ALTER TABLE ' . self::TABLE_NAME . ' DROP COLUMN position'); + } +} diff --git a/src/Sylius/Bundle/ProductBundle/Form/Type/ProductOptionValueType.php b/src/Sylius/Bundle/ProductBundle/Form/Type/ProductOptionValueType.php index df7d3db4ae..d112a5270c 100644 --- a/src/Sylius/Bundle/ProductBundle/Form/Type/ProductOptionValueType.php +++ b/src/Sylius/Bundle/ProductBundle/Form/Type/ProductOptionValueType.php @@ -16,6 +16,7 @@ namespace Sylius\Bundle\ProductBundle\Form\Type; use Sylius\Bundle\ResourceBundle\Form\EventSubscriber\AddCodeFormSubscriber; use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; use Sylius\Bundle\ResourceBundle\Form\Type\ResourceTranslationsType; +use Symfony\Component\Form\Extension\Core\Type\IntegerType; use Symfony\Component\Form\FormBuilderInterface; final class ProductOptionValueType extends AbstractResourceType @@ -27,6 +28,10 @@ final class ProductOptionValueType extends AbstractResourceType 'entry_type' => ProductOptionValueTranslationType::class, 'label' => 'sylius.form.option.name', ]) + ->add('position', IntegerType::class, [ + 'label' => 'sylius.form.option_value.position', + 'required' => false, + ]) ->addEventSubscriber(new AddCodeFormSubscriber()) ; } diff --git a/src/Sylius/Bundle/ProductBundle/Resources/config/doctrine/model/ProductOptionValue.orm.xml b/src/Sylius/Bundle/ProductBundle/Resources/config/doctrine/model/ProductOptionValue.orm.xml index 1db0ced238..a95f6a7ece 100644 --- a/src/Sylius/Bundle/ProductBundle/Resources/config/doctrine/model/ProductOptionValue.orm.xml +++ b/src/Sylius/Bundle/ProductBundle/Resources/config/doctrine/model/ProductOptionValue.orm.xml @@ -20,6 +20,8 @@ + + diff --git a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en.yml b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en.yml index 1cc05f9773..4759a37471 100644 --- a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en.yml +++ b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en.yml @@ -29,3 +29,4 @@ sylius: option_value: add_value: Add value value: Value + position: Position diff --git a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en_GB.yml b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en_GB.yml index b22d0cb796..e7dd515441 100644 --- a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en_GB.yml +++ b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.en_GB.yml @@ -26,3 +26,4 @@ sylius: option_value: add_value: Add value value: Value + position: Position diff --git a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr.yml b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr.yml index c384935793..c45282154c 100644 --- a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr.yml +++ b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr.yml @@ -29,3 +29,4 @@ sylius: option_value: add_value: Ajouter une valeur value: Valeur + position: Emplacement diff --git a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_BE.yml b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_BE.yml index c384935793..c45282154c 100644 --- a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_BE.yml +++ b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_BE.yml @@ -29,3 +29,4 @@ sylius: option_value: add_value: Ajouter une valeur value: Valeur + position: Emplacement diff --git a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_CA.yml b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_CA.yml index afc1f5de99..14c151a044 100644 --- a/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_CA.yml +++ b/src/Sylius/Bundle/ProductBundle/Resources/translations/messages.fr_CA.yml @@ -29,3 +29,4 @@ sylius: option_value: add_value: Ajouter une valeur value: Valeur + position: Emplacement diff --git a/src/Sylius/Component/Product/Model/ProductOptionValue.php b/src/Sylius/Component/Product/Model/ProductOptionValue.php index dd044bfdaa..4b82a8d993 100644 --- a/src/Sylius/Component/Product/Model/ProductOptionValue.php +++ b/src/Sylius/Component/Product/Model/ProductOptionValue.php @@ -32,6 +32,9 @@ class ProductOptionValue implements ProductOptionValueInterface, \Stringable /** @var ProductOptionInterface|null */ protected $option; + /** @var int|null */ + protected $position; + public function __construct() { $this->initializeTranslationCollection(); @@ -67,6 +70,16 @@ class ProductOptionValue implements ProductOptionValueInterface, \Stringable $this->option = $option; } + public function getPosition(): ?int + { + return $this->position; + } + + public function setPosition(?int $position): void + { + $this->position = $position; + } + public function getValue(): ?string { return $this->getTranslation()->getValue(); diff --git a/src/Sylius/Component/Product/Model/ProductOptionValueInterface.php b/src/Sylius/Component/Product/Model/ProductOptionValueInterface.php index a00abd17cc..addf83f5a7 100644 --- a/src/Sylius/Component/Product/Model/ProductOptionValueInterface.php +++ b/src/Sylius/Component/Product/Model/ProductOptionValueInterface.php @@ -32,6 +32,10 @@ interface ProductOptionValueInterface extends ResourceInterface, CodeAwareInterf public function getName(): ?string; + public function getPosition(): ?int; + + public function setPosition(?int $position): void; + /** * @return ProductOptionValueTranslationInterface */