diff --git a/VERSION b/VERSION index fb2c0766..ccc99d02 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.13.0 +2.12.3 diff --git a/src/Entity/Parts/InfoProviderReference.php b/src/Entity/Parts/InfoProviderReference.php index 8f6874b9..810aef0c 100644 --- a/src/Entity/Parts/InfoProviderReference.php +++ b/src/Entity/Parts/InfoProviderReference.php @@ -28,11 +28,9 @@ use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping\Column; use Doctrine\ORM\Mapping\Embeddable; use Symfony\Component\Serializer\Annotation\Groups; -use Symfony\Component\Validator\Constraints as Assert; -use Symfony\Component\Validator\Context\ExecutionContextInterface; /** - * This class represents a reference to an info provider inside a part. + * This class represents a reference to a info provider inside a part. * @see \App\Tests\Entity\Parts\InfoProviderReferenceTest */ #[Embeddable] @@ -159,44 +157,4 @@ class InfoProviderReference $ref->last_updated = new \DateTimeImmutable(); return $ref; } - - /** - * Creates a reference to an info provider based on the given parameters. - * @param string|null $provider_key - * @param string|null $provider_id - * @param string|null $provider_url - * @param \DateTimeImmutable|null $last_updated - * @return self - */ - public static function create(?string $provider_key, ?string $provider_id, ?string $provider_url, ?\DateTimeImmutable $last_updated): self - { - $ref = new InfoProviderReference(); - $ref->provider_key = $provider_key; - $ref->provider_id = $provider_id; - $ref->provider_url = $provider_url; - $ref->last_updated = $last_updated; - return $ref; - } - - #[Assert\Callback()] - public function validate(ExecutionContextInterface $context, mixed $payload): void - { - if ($this->provider_key === null && $this->provider_id !== null) { - $context->buildViolation('info_providers.validation.provider_id_without_key') - ->atPath('provider_key') - ->addViolation(); - } - - if ($this->provider_key === null && $this->provider_url !== null) { - $context->buildViolation('info_providers.validation.provider_url_without_key') - ->atPath('provider_url') - ->addViolation(); - } - - if ($this->provider_key !== null && $this->provider_id === null) { - $context->buildViolation('info_providers.validation.provider_key_without_id') - ->atPath('provider_id') - ->addViolation(); - } - } } diff --git a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php index 9fa41f93..065469b5 100644 --- a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php +++ b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php @@ -75,7 +75,6 @@ trait AdvancedPropertyTrait */ #[ORM\Embedded(class: InfoProviderReference::class, columnPrefix: 'provider_reference_')] #[Groups(['full', 'part:read'])] - #[Assert\Valid()] protected InfoProviderReference $providerReference; /** diff --git a/src/Form/InfoProviderSystem/InfoProviderReferenceType.php b/src/Form/InfoProviderSystem/InfoProviderReferenceType.php deleted file mode 100644 index 73fc8fe3..00000000 --- a/src/Form/InfoProviderSystem/InfoProviderReferenceType.php +++ /dev/null @@ -1,113 +0,0 @@ -. - */ - -declare(strict_types=1); - - -namespace App\Form\InfoProviderSystem; - -use App\Entity\Parts\InfoProviderReference; -use Symfony\Component\Form\AbstractType; -use Symfony\Component\Form\DataMapperInterface; -use Symfony\Component\Form\Extension\Core\Type\TextType; -use Symfony\Component\Form\Extension\Core\Type\UrlType; -use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\Form\FormInterface; -use Symfony\Component\OptionsResolver\OptionsResolver; - -class InfoProviderReferenceType extends AbstractType implements DataMapperInterface -{ - public function buildForm(FormBuilderInterface $builder, array $options): void - { - $builder - ->setDataMapper($this) - ->add('provider_key', ProviderSelectType::class, [ - 'label' => 'info_providers.provider_key', - 'input' => 'string', - 'multiple' => false, - 'required' => false, - 'only_active' => false, - ]) - ->add('provider_id', TextType::class, [ - 'label' => 'info_providers.provider_id', - 'required' => false, - ]) - ->add('provider_url', UrlType::class, [ - 'label' => 'info_providers.provider_url', - 'required' => false, - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => InfoProviderReference::class, - ]); - } - - - public function mapDataToForms(mixed $viewData, \Traversable $forms): void - { - if ($viewData === null) { - return; - } - - if (!$viewData instanceof InfoProviderReference) { - return; - } - - /** @var FormInterface[] $forms */ - $forms = iterator_to_array($forms); - - $forms['provider_key']->setData($viewData->getProviderKey()); - $forms['provider_id']->setData($viewData->getProviderId()); - $forms['provider_url']->setData($viewData->getProviderUrl()); - } - - public function mapFormsToData(\Traversable $forms, mixed &$viewData): void - { - /** @var FormInterface[] $forms */ - $forms = iterator_to_array($forms); - - $providerKey = $forms['provider_key']->getData(); - $providerId = $forms['provider_id']->getData(); - $providerUrl = $forms['provider_url']->getData(); - - if ($viewData === null) { - $viewData = InfoProviderReference::noProvider(); - } - - if (!$viewData instanceof InfoProviderReference) { - return; - } - - $oldDate = $viewData->getLastUpdated(); - - //If all fields are empty, we set the view data to a new instance without provider information - if ($providerKey === null && $providerId === null && $providerUrl === null) { - $viewData = InfoProviderReference::noProvider(); - return; - } - - $viewData = InfoProviderReference::create($providerKey, $providerId, $providerUrl, $oldDate); - - } -} diff --git a/src/Form/InfoProviderSystem/ProviderSelectType.php b/src/Form/InfoProviderSystem/ProviderSelectType.php index e59dc85f..bad3edaa 100644 --- a/src/Form/InfoProviderSystem/ProviderSelectType.php +++ b/src/Form/InfoProviderSystem/ProviderSelectType.php @@ -31,12 +31,12 @@ use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Translation\StaticMessage; -use Symfony\Component\Translation\TranslatableMessage; class ProviderSelectType extends AbstractType { public function __construct(private readonly ProviderRegistry $providerRegistry) { + } public function getParent(): string @@ -46,22 +46,17 @@ class ProviderSelectType extends AbstractType public function configureOptions(OptionsResolver $resolver): void { + $providers = $this->providerRegistry->getActiveProviders(); + $resolver->setDefault('input', 'object'); $resolver->setAllowedTypes('input', 'string'); //Either the form returns the provider objects or their keys $resolver->setAllowedValues('input', ['object', 'string']); $resolver->setDefault('multiple', true); - //Only show active providers in the list, or also inactive ones - $resolver->setDefault('only_active', true); - $resolver->setAllowedTypes('only_active', 'bool'); - - - $resolver->setDefault('choices', function (Options $options) { - $providers = $options['only_active'] ? $this->providerRegistry->getActiveProviders() : $this->providerRegistry->getProviders(); - + $resolver->setDefault('choices', function (Options $options) use ($providers) { if ('object' === $options['input']) { - return $providers; + return $this->providerRegistry->getActiveProviders(); } $tmp = []; @@ -74,35 +69,20 @@ class ProviderSelectType extends AbstractType }); //The choice_label and choice_value only needs to be set if we want the objects - $resolver->setDefault('choice_label', function (Options $options) { + $resolver->setDefault('choice_label', function (Options $options){ if ('object' === $options['input']) { - return ChoiceList::label($this, static fn(?InfoProviderInterface $choice - ) => new StaticMessage($choice?->getProviderInfo()['name'])); + return ChoiceList::label($this, static fn (?InfoProviderInterface $choice) => new StaticMessage($choice?->getProviderInfo()['name'])); } - return static fn($choice, $key, $value) => new StaticMessage($key); + return static fn ($choice, $key, $value) => new StaticMessage($key); }); $resolver->setDefault('choice_value', function (Options $options) { if ('object' === $options['input']) { - return ChoiceList::value($this, - static fn(?InfoProviderInterface $choice) => $choice?->getProviderKey()); + return ChoiceList::value($this, static fn(?InfoProviderInterface $choice) => $choice?->getProviderKey()); } return null; }); - $resolver->setDefault('group_by', function (Options $options) { - //Do not show groups when only active providers are shown, because then all providers are active and the group would be useless - if ($options['only_active']) { - return null; - } - - return function ($choice, $key, string $value) { - if ($this->providerRegistry->getProviderByKey($value)->isActive()) { - return new TranslatableMessage('info_providers.providers_list.active'); - } - return new TranslatableMessage('info_providers.providers_list.disabled'); - }; - }); } } diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php index afef8fdb..a31f2469 100644 --- a/src/Form/Part/PartBaseType.php +++ b/src/Form/Part/PartBaseType.php @@ -33,7 +33,6 @@ use App\Entity\Parts\Part; use App\Entity\Parts\PartCustomState; use App\Entity\PriceInformations\Orderdetail; use App\Form\AttachmentFormType; -use App\Form\InfoProviderSystem\InfoProviderReferenceType; use App\Form\ParameterType; use App\Form\Part\EDA\EDAPartInfoType; use App\Form\Type\MasterPictureAttachmentType; @@ -226,10 +225,6 @@ class PartBaseType extends AbstractType 'empty_data' => null, 'label' => 'part.gtin', ]) - ->add('providerReference', InfoProviderReferenceType::class, [ - 'label' => false, - 'required' => false, - ]) ; //Comment section diff --git a/templates/parts/edit/_advanced.html.twig b/templates/parts/edit/_advanced.html.twig index f18dba58..30479d11 100644 --- a/templates/parts/edit/_advanced.html.twig +++ b/templates/parts/edit/_advanced.html.twig @@ -15,24 +15,3 @@ {{ form_row(form.partUnit) }} {{ form_row(form.partCustomState) }} {{ form_row(form.gtin) }} - -