diff --git a/src/Controller/AdminPages/AttachmentTypeController.php b/src/Controller/AdminPages/AttachmentTypeController.php index f87242fb..8a62609b 100644 --- a/src/Controller/AdminPages/AttachmentTypeController.php +++ b/src/Controller/AdminPages/AttachmentTypeController.php @@ -44,6 +44,7 @@ namespace App\Controller\AdminPages; use App\Entity\Attachments\AttachmentType; use App\Entity\Attachments\AttachmentTypeAttachment; +use App\Entity\Parameters\AttachmentTypeParameter; use App\Form\AdminPages\AttachmentTypeAdminForm; use App\Services\EntityExporter; use App\Services\EntityImporter; @@ -64,6 +65,7 @@ class AttachmentTypeController extends BaseAdminController protected $form_class = AttachmentTypeAdminForm::class; protected $route_base = 'attachment_type'; protected $attachment_class = AttachmentTypeAttachment::class; + protected $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 0785304a..9fb05dea 100644 --- a/src/Controller/AdminPages/BaseAdminController.php +++ b/src/Controller/AdminPages/BaseAdminController.php @@ -77,6 +77,7 @@ abstract class BaseAdminController extends AbstractController protected $twig_template = ''; protected $route_base = ''; protected $attachment_class = ''; + protected $parameter_class = ''; protected $passwordEncoder; protected $translator; @@ -101,6 +102,10 @@ abstract class BaseAdminController extends AbstractController throw new InvalidArgumentException('You have to override the $attachment_class value in your subclass!'); } + if ('' === $this->parameter_class) { + throw new InvalidArgumentException('You have to override the $parameter_class value in your subclass!'); + } + $this->translator = $translator; $this->passwordEncoder = $passwordEncoder; $this->attachmentHelper = $attachmentHelper; @@ -149,6 +154,7 @@ abstract class BaseAdminController extends AbstractController $form = $this->createForm($this->form_class, $entity, [ 'attachment_class' => $this->attachment_class, + 'parameter_class' => $this->parameter_class, 'disabled' => null !== $timeTravel_timestamp ? true : null, ]); @@ -189,7 +195,10 @@ abstract class BaseAdminController extends AbstractController //Rebuild form, so it is based on the updated data. Important for the parent field! //We can not use dynamic form events here, because the parent entity list is build from database! - $form = $this->createForm($this->form_class, $entity, ['attachment_class' => $this->attachment_class]); + $form = $this->createForm($this->form_class, $entity, [ + 'attachment_class' => $this->attachment_class, + 'parameter_class' => $this->parameter_class + ]); } elseif ($form->isSubmitted() && ! $form->isValid()) { $this->addFlash('error', 'entity.edit_flash.invalid'); } @@ -212,7 +221,10 @@ abstract class BaseAdminController extends AbstractController $this->denyAccessUnlessGranted('read', $new_entity); //Basic edit form - $form = $this->createForm($this->form_class, $new_entity, ['attachment_class' => $this->attachment_class]); + $form = $this->createForm($this->form_class, $new_entity, [ + 'attachment_class' => $this->attachment_class, + 'parameter_class' => $this->parameter_class, + ]); $form->handleRequest($request); diff --git a/src/Controller/AdminPages/CategoryController.php b/src/Controller/AdminPages/CategoryController.php index d7463b26..05ce64f6 100644 --- a/src/Controller/AdminPages/CategoryController.php +++ b/src/Controller/AdminPages/CategoryController.php @@ -43,6 +43,7 @@ declare(strict_types=1); namespace App\Controller\AdminPages; use App\Entity\Attachments\CategoryAttachment; +use App\Entity\Parameters\CategoryParameter; use App\Entity\Parts\Category; use App\Form\AdminPages\CategoryAdminForm; use App\Services\EntityExporter; @@ -64,6 +65,7 @@ class CategoryController extends BaseAdminController protected $form_class = CategoryAdminForm::class; protected $route_base = 'category'; protected $attachment_class = CategoryAttachment::class; + protected $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 c8921c71..757c9896 100644 --- a/src/Controller/AdminPages/CurrencyController.php +++ b/src/Controller/AdminPages/CurrencyController.php @@ -43,6 +43,7 @@ declare(strict_types=1); namespace App\Controller\AdminPages; use App\Entity\Attachments\CurrencyAttachment; +use App\Entity\Parameters\CurrencyParameter; use App\Entity\PriceInformations\Currency; use App\Form\AdminPages\CurrencyAdminForm; use App\Services\EntityExporter; @@ -66,6 +67,7 @@ class CurrencyController extends BaseAdminController protected $form_class = CurrencyAdminForm::class; protected $route_base = 'currency'; protected $attachment_class = CurrencyAttachment::class; + protected $parameter_class = CurrencyParameter::class; /** * @Route("/{id}", name="currency_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/DeviceController.php b/src/Controller/AdminPages/DeviceController.php index 9dcba49d..ad99243b 100644 --- a/src/Controller/AdminPages/DeviceController.php +++ b/src/Controller/AdminPages/DeviceController.php @@ -44,6 +44,7 @@ namespace App\Controller\AdminPages; use App\Entity\Attachments\DeviceAttachment; use App\Entity\Devices\Device; +use App\Entity\Parameters\DeviceParameter; use App\Form\AdminPages\BaseEntityAdminForm; use App\Services\EntityExporter; use App\Services\EntityImporter; @@ -64,6 +65,7 @@ class DeviceController extends BaseAdminController protected $form_class = BaseEntityAdminForm::class; protected $route_base = 'device'; protected $attachment_class = DeviceAttachment::class; + protected $parameter_class = DeviceParameter::class; /** * @Route("/{id}", name="device_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/FootprintController.php b/src/Controller/AdminPages/FootprintController.php index 561058ac..e60caba1 100644 --- a/src/Controller/AdminPages/FootprintController.php +++ b/src/Controller/AdminPages/FootprintController.php @@ -44,6 +44,7 @@ namespace App\Controller\AdminPages; use App\Entity\Attachments\AttachmentType; use App\Entity\Attachments\FootprintAttachment; +use App\Entity\Parameters\FootprintParameter; use App\Entity\Parts\Footprint; use App\Form\AdminPages\FootprintAdminForm; use App\Services\EntityExporter; @@ -64,6 +65,7 @@ class FootprintController extends BaseAdminController protected $form_class = FootprintAdminForm::class; protected $route_base = 'footprint'; protected $attachment_class = FootprintAttachment::class; + protected $parameter_class = FootprintParameter::class; /** * @Route("/{id}", name="footprint_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/ManufacturerController.php b/src/Controller/AdminPages/ManufacturerController.php index 9e5e6bbf..047b9b4f 100644 --- a/src/Controller/AdminPages/ManufacturerController.php +++ b/src/Controller/AdminPages/ManufacturerController.php @@ -43,6 +43,7 @@ declare(strict_types=1); namespace App\Controller\AdminPages; use App\Entity\Attachments\ManufacturerAttachment; +use App\Entity\Parameters\ManufacturerParameter; use App\Entity\Parts\Manufacturer; use App\Form\AdminPages\CompanyForm; use App\Services\EntityExporter; @@ -63,6 +64,7 @@ class ManufacturerController extends BaseAdminController protected $form_class = CompanyForm::class; protected $route_base = 'manufacturer'; protected $attachment_class = ManufacturerAttachment::class; + protected $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 053348dc..7ada3e31 100644 --- a/src/Controller/AdminPages/MeasurementUnitController.php +++ b/src/Controller/AdminPages/MeasurementUnitController.php @@ -44,6 +44,7 @@ namespace App\Controller\AdminPages; use App\Entity\Attachments\AttachmentType; use App\Entity\Attachments\MeasurementUnitAttachment; +use App\Entity\Parameters\MeasurementUnitParameter; use App\Entity\Parts\MeasurementUnit; use App\Form\AdminPages\MeasurementUnitAdminForm; use App\Services\EntityExporter; @@ -64,6 +65,7 @@ class MeasurementUnitController extends BaseAdminController protected $form_class = MeasurementUnitAdminForm::class; protected $route_base = 'measurement_unit'; protected $attachment_class = MeasurementUnitAttachment::class; + protected $parameter_class = MeasurementUnitParameter::class; /** * @Route("/{id}", name="measurement_unit_delete", methods={"DELETE"}) diff --git a/src/Controller/AdminPages/StorelocationController.php b/src/Controller/AdminPages/StorelocationController.php index 47b34b17..703fe58a 100644 --- a/src/Controller/AdminPages/StorelocationController.php +++ b/src/Controller/AdminPages/StorelocationController.php @@ -42,6 +42,7 @@ declare(strict_types=1); namespace App\Controller\AdminPages; +use App\Entity\Parameters\StorelocationParameter; use App\Entity\Parts\Storelocation; use App\Form\AdminPages\StorelocationAdminForm; use App\Services\EntityExporter; @@ -62,6 +63,7 @@ class StorelocationController extends BaseAdminController protected $form_class = StorelocationAdminForm::class; protected $route_base = 'store_location'; protected $attachment_class = StorelocationAdminForm::class; + protected $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 6e176e38..8424f137 100644 --- a/src/Controller/AdminPages/SupplierController.php +++ b/src/Controller/AdminPages/SupplierController.php @@ -43,6 +43,7 @@ declare(strict_types=1); namespace App\Controller\AdminPages; use App\Entity\Attachments\SupplierAttachment; +use App\Entity\Parameters\SupplierParameter; use App\Entity\Parts\Supplier; use App\Form\AdminPages\SupplierForm; use App\Services\EntityExporter; @@ -63,6 +64,7 @@ class SupplierController extends BaseAdminController protected $form_class = SupplierForm::class; protected $route_base = 'supplier'; protected $attachment_class = SupplierAttachment::class; + protected $parameter_class = SupplierParameter::class; /** * @Route("/{id}", name="supplier_delete", methods={"DELETE"}) diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index b868b715..97738de0 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -43,6 +43,7 @@ declare(strict_types=1); namespace App\Controller; use App\Entity\Attachments\UserAttachment; +use App\Entity\Parameters\PartParameter; use App\Entity\UserSystem\User; use App\Form\Permissions\PermissionsType; use App\Form\UserAdminForm; @@ -67,6 +68,8 @@ class UserController extends AdminPages\BaseAdminController 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 = "not used"; /** * @Route("/{id}/edit/{timestamp}", requirements={"id"="\d+"}, name="user_edit") diff --git a/src/Form/AdminPages/BaseEntityAdminForm.php b/src/Form/AdminPages/BaseEntityAdminForm.php index da9dfcfe..09368459 100644 --- a/src/Form/AdminPages/BaseEntityAdminForm.php +++ b/src/Form/AdminPages/BaseEntityAdminForm.php @@ -45,7 +45,9 @@ namespace App\Form\AdminPages; use App\Entity\Attachments\Attachment; use App\Entity\Base\AbstractNamedDBElement; use App\Entity\Base\AbstractStructuralDBElement; +use App\Entity\Parameters\PartParameter; use App\Form\AttachmentFormType; +use App\Form\ParameterType; use App\Form\Type\MasterPictureAttachmentType; use App\Form\Type\StructuralEntityType; use FOS\CKEditorBundle\Form\Type\CKEditorType; @@ -74,8 +76,9 @@ class BaseEntityAdminForm extends AbstractType public function configureOptions(OptionsResolver $resolver): void { - parent::configureOptions($resolver); // TODO: Change the autogenerated stub + parent::configureOptions($resolver); $resolver->setRequired('attachment_class'); + $resolver->setRequired('parameter_class'); } public function buildForm(FormBuilderInterface $builder, array $options): void @@ -151,6 +154,18 @@ class BaseEntityAdminForm extends AbstractType 'empty_data' => null, ]); + $builder->add('parameters', CollectionType::class, [ + 'entry_type' => ParameterType::class, + 'allow_add' => true, + 'allow_delete' => true, + 'label' => false, + 'by_reference' => false, + 'prototype_data' => new $options['parameter_class'], + 'entry_options' => [ + 'data_class' => $options['parameter_class'], + ], + ]); + //Buttons $builder->add('save', SubmitType::class, [ 'label' => $is_new ? 'entity.create' : 'entity.edit.save', diff --git a/src/Form/UserAdminForm.php b/src/Form/UserAdminForm.php index ec356710..e7ede3b1 100644 --- a/src/Form/UserAdminForm.php +++ b/src/Form/UserAdminForm.php @@ -79,6 +79,7 @@ class UserAdminForm extends AbstractType { parent::configureOptions($resolver); // TODO: Change the autogenerated stub $resolver->setRequired('attachment_class'); + $resolver->setDefault('parameter_class', false); } public function buildForm(FormBuilderInterface $builder, array $options): void diff --git a/templates/AdminPages/EntityAdminBase.html.twig b/templates/AdminPages/EntityAdminBase.html.twig index f298b841..ef4d335c 100644 --- a/templates/AdminPages/EntityAdminBase.html.twig +++ b/templates/AdminPages/EntityAdminBase.html.twig @@ -85,6 +85,11 @@ + {% if entity.parameters is defined %} + + {% endif %} @@ -113,6 +118,12 @@ {{ form_row(form.master_picture_attachment) }} {% endblock %} + + {% if entity.parameters is defined %} +
+ {% include "AdminPages/_parameters.html.twig" %} +
+ {% endif %}
@@ -176,13 +187,7 @@ {% endif %} - -
- - - - diff --git a/templates/AdminPages/_parameters.html.twig b/templates/AdminPages/_parameters.html.twig new file mode 100644 index 00000000..75f63cbf --- /dev/null +++ b/templates/AdminPages/_parameters.html.twig @@ -0,0 +1,54 @@ +{% form_theme form with ['Parts/edit/edit_form_styles.html.twig', "bootstrap_4_layout.html.twig"] %} + + + + + + + + + + + + + + + + + {% for param in form.parameters %} + {{ form_widget(param) }} + {% endfor %} + +
{% trans %}specifications.property{% endtrans %}{% trans %}specifications.symbol{% endtrans %}{% trans %}specifications.value_min{% endtrans %}{% trans %}specifications.value_typ{% endtrans %}{% trans %}specifications.value_max{% endtrans %}{% trans %}specifications.unit{% endtrans %}{% trans %}specifications.text{% endtrans %}{% trans %}specifications.group{% endtrans %}
+ + + + \ No newline at end of file diff --git a/templates/Parts/edit/_specifications.html.twig b/templates/Parts/edit/_specifications.html.twig index 78ed67a8..61cdbcfd 100644 --- a/templates/Parts/edit/_specifications.html.twig +++ b/templates/Parts/edit/_specifications.html.twig @@ -28,7 +28,7 @@