diff --git a/src/Controller/AdminPages/AttachmentTypeController.php b/src/Controller/AdminPages/AttachmentTypeController.php index 9bb37b7d..b1f59706 100644 --- a/src/Controller/AdminPages/AttachmentTypeController.php +++ b/src/Controller/AdminPages/AttachmentTypeController.php @@ -41,12 +41,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class AttachmentTypeController extends BaseAdminController { - protected $entity_class = AttachmentType::class; - protected $twig_template = 'AdminPages/AttachmentTypeAdmin.html.twig'; - protected $form_class = AttachmentTypeAdminForm::class; - protected $route_base = 'attachment_type'; - protected $attachment_class = AttachmentTypeAttachment::class; - protected $parameter_class = AttachmentTypeParameter::class; + protected string $entity_class = AttachmentType::class; + protected string $twig_template = 'AdminPages/AttachmentTypeAdmin.html.twig'; + protected string $form_class = AttachmentTypeAdminForm::class; + protected string $route_base = 'attachment_type'; + protected string $attachment_class = AttachmentTypeAttachment::class; + protected ?string $parameter_class = AttachmentTypeParameter::class; /** * @Route("/{id}", name="attachment_type_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/BaseAdminController.php b/src/Controller/AdminPages/BaseAdminController.php index 3f6b78da..cf365d5c 100644 --- a/src/Controller/AdminPages/BaseAdminController.php +++ b/src/Controller/AdminPages/BaseAdminController.php @@ -65,12 +65,12 @@ use function Symfony\Component\Translation\t; abstract class BaseAdminController extends AbstractController { - protected $entity_class = ''; - protected $form_class = ''; - protected $twig_template = ''; - protected $route_base = ''; - protected $attachment_class = ''; - protected $parameter_class = ''; + protected string $entity_class = ''; + protected string $form_class = ''; + protected string $twig_template = ''; + protected string $route_base = ''; + protected string $attachment_class = ''; + protected ?string $parameter_class = ''; protected UserPasswordHasherInterface $passwordEncoder; protected TranslatorInterface $translator; @@ -103,7 +103,7 @@ abstract class BaseAdminController extends AbstractController throw new InvalidArgumentException('You have to override the $attachment_class value with a valid Attachment class in your subclass!'); } - if ('' === $this->parameter_class || !is_a($this->parameter_class, AbstractParameter::class, true)) { + if ('' === $this->parameter_class || ($this->parameter_class && !is_a($this->parameter_class, AbstractParameter::class, true))) { throw new InvalidArgumentException('You have to override the $parameter_class value with a valid Parameter class in your subclass!'); } diff --git a/src/Controller/AdminPages/CategoryController.php b/src/Controller/AdminPages/CategoryController.php index df2b7012..4e170892 100644 --- a/src/Controller/AdminPages/CategoryController.php +++ b/src/Controller/AdminPages/CategoryController.php @@ -40,12 +40,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class CategoryController extends BaseAdminController { - protected $entity_class = Category::class; - protected $twig_template = 'AdminPages/CategoryAdmin.html.twig'; - protected $form_class = CategoryAdminForm::class; - protected $route_base = 'category'; - protected $attachment_class = CategoryAttachment::class; - protected $parameter_class = CategoryParameter::class; + protected string $entity_class = Category::class; + protected string $twig_template = 'AdminPages/CategoryAdmin.html.twig'; + protected string $form_class = CategoryAdminForm::class; + protected string $route_base = 'category'; + protected string $attachment_class = CategoryAttachment::class; + protected ?string $parameter_class = CategoryParameter::class; /** * @Route("/{id}", name="category_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/CurrencyController.php b/src/Controller/AdminPages/CurrencyController.php index e1ae62c1..89174874 100644 --- a/src/Controller/AdminPages/CurrencyController.php +++ b/src/Controller/AdminPages/CurrencyController.php @@ -58,12 +58,12 @@ use Symfony\Contracts\Translation\TranslatorInterface; */ class CurrencyController extends BaseAdminController { - protected $entity_class = Currency::class; - protected $twig_template = 'AdminPages/CurrencyAdmin.html.twig'; - protected $form_class = CurrencyAdminForm::class; - protected $route_base = 'currency'; - protected $attachment_class = CurrencyAttachment::class; - protected $parameter_class = CurrencyParameter::class; + protected string $entity_class = Currency::class; + protected string $twig_template = 'AdminPages/CurrencyAdmin.html.twig'; + protected string $form_class = CurrencyAdminForm::class; + protected string $route_base = 'currency'; + protected string $attachment_class = CurrencyAttachment::class; + protected ?string $parameter_class = CurrencyParameter::class; protected ExchangeRateUpdater $exchangeRateUpdater; diff --git a/src/Controller/AdminPages/FootprintController.php b/src/Controller/AdminPages/FootprintController.php index 21caac39..9496b157 100644 --- a/src/Controller/AdminPages/FootprintController.php +++ b/src/Controller/AdminPages/FootprintController.php @@ -41,12 +41,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class FootprintController extends BaseAdminController { - protected $entity_class = Footprint::class; - protected $twig_template = 'AdminPages/FootprintAdmin.html.twig'; - protected $form_class = FootprintAdminForm::class; - protected $route_base = 'footprint'; - protected $attachment_class = FootprintAttachment::class; - protected $parameter_class = FootprintParameter::class; + protected string $entity_class = Footprint::class; + protected string $twig_template = 'AdminPages/FootprintAdmin.html.twig'; + protected string $form_class = FootprintAdminForm::class; + protected string $route_base = 'footprint'; + protected string $attachment_class = FootprintAttachment::class; + protected ?string $parameter_class = FootprintParameter::class; /** * @Route("/{id}", name="footprint_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/LabelProfileController.php b/src/Controller/AdminPages/LabelProfileController.php index 0681145b..46ee11ce 100644 --- a/src/Controller/AdminPages/LabelProfileController.php +++ b/src/Controller/AdminPages/LabelProfileController.php @@ -40,13 +40,13 @@ use Symfony\Component\Routing\Annotation\Route; */ class LabelProfileController extends BaseAdminController { - protected $entity_class = LabelProfile::class; - protected $twig_template = 'AdminPages/LabelProfileAdmin.html.twig'; - protected $form_class = LabelProfileAdminForm::class; - protected $route_base = 'label_profile'; - protected $attachment_class = LabelAttachment::class; + protected string $entity_class = LabelProfile::class; + protected string $twig_template = 'AdminPages/LabelProfileAdmin.html.twig'; + protected string $form_class = LabelProfileAdminForm::class; + protected string $route_base = 'label_profile'; + protected string $attachment_class = LabelAttachment::class; //Just a placeholder - protected $parameter_class = AbstractParameter::class; + protected ?string $parameter_class = null; /** * @Route("/{id}", name="label_profile_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/ManufacturerController.php b/src/Controller/AdminPages/ManufacturerController.php index 03b651f2..bd9d2c11 100644 --- a/src/Controller/AdminPages/ManufacturerController.php +++ b/src/Controller/AdminPages/ManufacturerController.php @@ -40,12 +40,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class ManufacturerController extends BaseAdminController { - protected $entity_class = Manufacturer::class; - protected $twig_template = 'AdminPages/ManufacturerAdmin.html.twig'; - protected $form_class = CompanyForm::class; - protected $route_base = 'manufacturer'; - protected $attachment_class = ManufacturerAttachment::class; - protected $parameter_class = ManufacturerParameter::class; + protected string $entity_class = Manufacturer::class; + protected string $twig_template = 'AdminPages/ManufacturerAdmin.html.twig'; + protected string $form_class = CompanyForm::class; + protected string $route_base = 'manufacturer'; + protected string $attachment_class = ManufacturerAttachment::class; + protected ?string $parameter_class = ManufacturerParameter::class; /** * @Route("/{id}", name="manufacturer_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/MeasurementUnitController.php b/src/Controller/AdminPages/MeasurementUnitController.php index 3ea3962c..9b233a1c 100644 --- a/src/Controller/AdminPages/MeasurementUnitController.php +++ b/src/Controller/AdminPages/MeasurementUnitController.php @@ -41,12 +41,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class MeasurementUnitController extends BaseAdminController { - protected $entity_class = MeasurementUnit::class; - protected $twig_template = 'AdminPages/MeasurementUnitAdmin.html.twig'; - protected $form_class = MeasurementUnitAdminForm::class; - protected $route_base = 'measurement_unit'; - protected $attachment_class = MeasurementUnitAttachment::class; - protected $parameter_class = MeasurementUnitParameter::class; + protected string $entity_class = MeasurementUnit::class; + protected string $twig_template = 'AdminPages/MeasurementUnitAdmin.html.twig'; + protected string $form_class = MeasurementUnitAdminForm::class; + protected string $route_base = 'measurement_unit'; + protected string $attachment_class = MeasurementUnitAttachment::class; + protected ?string $parameter_class = MeasurementUnitParameter::class; /** * @Route("/{id}", name="measurement_unit_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/ProjectAdminController.php b/src/Controller/AdminPages/ProjectAdminController.php index 982c5b6c..a97f58c8 100644 --- a/src/Controller/AdminPages/ProjectAdminController.php +++ b/src/Controller/AdminPages/ProjectAdminController.php @@ -41,12 +41,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class ProjectAdminController extends BaseAdminController { - protected $entity_class = Project::class; - protected $twig_template = 'AdminPages/ProjectAdmin.html.twig'; - protected $form_class = ProjectAdminForm::class; - protected $route_base = 'project'; - protected $attachment_class = ProjectAttachment::class; - protected $parameter_class = ProjectParameter::class; + protected string $entity_class = Project::class; + protected string $twig_template = 'AdminPages/ProjectAdmin.html.twig'; + protected string $form_class = ProjectAdminForm::class; + protected string $route_base = 'project'; + protected string $attachment_class = ProjectAttachment::class; + protected ?string $parameter_class = ProjectParameter::class; /** * @Route("/{id}", name="project_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/StorelocationController.php b/src/Controller/AdminPages/StorelocationController.php index c48f7b80..a38d4ce3 100644 --- a/src/Controller/AdminPages/StorelocationController.php +++ b/src/Controller/AdminPages/StorelocationController.php @@ -40,12 +40,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class StorelocationController extends BaseAdminController { - protected $entity_class = Storelocation::class; - protected $twig_template = 'AdminPages/StorelocationAdmin.html.twig'; - protected $form_class = StorelocationAdminForm::class; - protected $route_base = 'store_location'; - protected $attachment_class = StorelocationAttachment::class; - protected $parameter_class = StorelocationParameter::class; + protected string $entity_class = Storelocation::class; + protected string $twig_template = 'AdminPages/StorelocationAdmin.html.twig'; + protected string $form_class = StorelocationAdminForm::class; + protected string $route_base = 'store_location'; + protected string $attachment_class = StorelocationAttachment::class; + protected ?string $parameter_class = StorelocationParameter::class; /** * @Route("/{id}", name="store_location_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/SupplierController.php b/src/Controller/AdminPages/SupplierController.php index 643ab2e7..1939bd53 100644 --- a/src/Controller/AdminPages/SupplierController.php +++ b/src/Controller/AdminPages/SupplierController.php @@ -40,12 +40,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class SupplierController extends BaseAdminController { - protected $entity_class = Supplier::class; - protected $twig_template = 'AdminPages/SupplierAdmin.html.twig'; - protected $form_class = SupplierForm::class; - protected $route_base = 'supplier'; - protected $attachment_class = SupplierAttachment::class; - protected $parameter_class = SupplierParameter::class; + protected string $entity_class = Supplier::class; + protected string $twig_template = 'AdminPages/SupplierAdmin.html.twig'; + protected string $form_class = SupplierForm::class; + protected string $route_base = 'supplier'; + protected string $attachment_class = SupplierAttachment::class; + protected ?string $parameter_class = SupplierParameter::class; /** * @Route("/{id}", name="supplier_delete", methods={"DELETE"}) diff --git a/src/Controller/GroupController.php b/src/Controller/GroupController.php index 63d32c7b..ee21fb6a 100644 --- a/src/Controller/GroupController.php +++ b/src/Controller/GroupController.php @@ -44,12 +44,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class GroupController extends BaseAdminController { - protected $entity_class = Group::class; - protected $twig_template = 'AdminPages/GroupAdmin.html.twig'; - protected $form_class = GroupAdminForm::class; - protected $route_base = 'group'; - protected $attachment_class = GroupAttachment::class; - protected $parameter_class = GroupParameter::class; + protected string $entity_class = Group::class; + protected string $twig_template = 'AdminPages/GroupAdmin.html.twig'; + protected string $form_class = GroupAdminForm::class; + protected string $route_base = 'group'; + protected string $attachment_class = GroupAttachment::class; + protected ?string $parameter_class = GroupParameter::class; /** * @Route("/{id}/edit/{timestamp}", requirements={"id"="\d+"}, name="group_edit") diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 88e39c12..359c5a30 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -53,13 +53,12 @@ use Symfony\Component\Routing\Annotation\Route; */ class UserController extends AdminPages\BaseAdminController { - protected $entity_class = User::class; - protected $twig_template = 'AdminPages/UserAdmin.html.twig'; - protected $form_class = UserAdminForm::class; - protected $route_base = 'user'; - protected $attachment_class = UserAttachment::class; - //Just define a value here to prevent error. It is not used. - protected $parameter_class = AbstractParameter::class; + protected string $entity_class = User::class; + protected string $twig_template = 'AdminPages/UserAdmin.html.twig'; + protected string $form_class = UserAdminForm::class; + protected string $route_base = 'user'; + protected string $attachment_class = UserAttachment::class; + protected ?string $parameter_class = null; protected function additionalActionEdit(FormInterface $form, AbstractNamedDBElement $entity): bool { diff --git a/src/Form/AdminPages/BaseEntityAdminForm.php b/src/Form/AdminPages/BaseEntityAdminForm.php index 392702c3..a28e0211 100644 --- a/src/Form/AdminPages/BaseEntityAdminForm.php +++ b/src/Form/AdminPages/BaseEntityAdminForm.php @@ -25,6 +25,7 @@ namespace App\Form\AdminPages; use App\Entity\Base\AbstractNamedDBElement; use App\Entity\Base\AbstractStructuralDBElement; use App\Entity\LabelSystem\LabelProfile; +use App\Entity\Parameters\AbstractParameter; use App\Form\AttachmentFormType; use App\Form\ParameterType; use App\Form\Type\MasterPictureAttachmentType; @@ -56,6 +57,7 @@ class BaseEntityAdminForm extends AbstractType parent::configureOptions($resolver); $resolver->setRequired('attachment_class'); $resolver->setRequired('parameter_class'); + $resolver->setAllowedTypes('parameter_class', ['string', 'null']); } public function buildForm(FormBuilderInterface $builder, array $options): void @@ -143,7 +145,9 @@ class BaseEntityAdminForm extends AbstractType 'empty_data' => null, ]); - if ($entity instanceof AbstractStructuralDBElement) { + if ($options['parameter_class']) { + $prototype = new $options['parameter_class'](); + $builder->add( 'parameters', CollectionType::class, @@ -155,7 +159,7 @@ class BaseEntityAdminForm extends AbstractType 'reindex_enable' => true, 'label' => false, 'by_reference' => false, - 'prototype_data' => new $options['parameter_class'](), + 'prototype_data' => $prototype, 'entry_options' => [ 'data_class' => $options['parameter_class'], ],