From 4b5779510dd451447194c20a4e69d57140d64861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Parafi=C5=84ski?= Date: Wed, 11 May 2022 16:49:12 +0200 Subject: [PATCH 1/7] IBX-2829: Added option to remove fields from register form --- .../Configuration/Parser/UserRegistration.php | 17 +++++++++++++ .../config/ezplatform_default_settings.yaml | 4 +++ src/lib/Form/Type/UserRegisterType.php | 25 +++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php b/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php index 30364cb..54cc74d 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php @@ -44,6 +44,15 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder) ->end() ->end() ->end() + ->arrayNode('form') + ->info('User registration form configuration.') + ->children() + ->arrayNode('allowed_field_definitions_id') + ->requiresAtLeastOneElement() + ->defaultValue(['user_account']) + ->prototype('scalar')->end() + ->end() + ->end() ->end() ->end(); } @@ -87,6 +96,14 @@ public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerIn $settings['templates']['confirmation'] ); } + + if (!empty($settings['form']['allowed_field_definitions_id'])) { + $contextualizer->setContextualParameter( + 'user_registration.form.allowed_field_definitions_id', + $currentScope, + $settings['form']['allowed_field_definitions_id'] + ); + } } } diff --git a/src/bundle/Resources/config/ezplatform_default_settings.yaml b/src/bundle/Resources/config/ezplatform_default_settings.yaml index 2800c3c..5b33a9d 100644 --- a/src/bundle/Resources/config/ezplatform_default_settings.yaml +++ b/src/bundle/Resources/config/ezplatform_default_settings.yaml @@ -16,6 +16,10 @@ parameters: ibexa.site_access.config.default.user_registration.user_type_identifier: 'user' ibexa.site_access.config.default.user_registration.templates.form: "@@IbexaContentForms/Content/content_edit.html.twig" ibexa.site_access.config.default.user_registration.templates.confirmation: "@@IbexaUser/register/register_confirmation.html.twig" + ibexa.site_access.config.default.user_registration.form.allowed_field_definitions_id: + - first_name + - last_name + - user_account # Invitation ibexa.site_access.config.default.user_invitation.templates.form: "@@IbexaUser/invitation/form.html.twig" diff --git a/src/lib/Form/Type/UserRegisterType.php b/src/lib/Form/Type/UserRegisterType.php index bb21522..35ee1d3 100644 --- a/src/lib/Form/Type/UserRegisterType.php +++ b/src/lib/Form/Type/UserRegisterType.php @@ -8,10 +8,13 @@ use Ibexa\ContentForms\Form\EventSubscriber\UserFieldsSubscriber; use Ibexa\ContentForms\Form\Type\Content\BaseContentType; +use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; use Ibexa\User\Form\Data\UserRegisterData; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Form\FormEvent; +use Symfony\Component\Form\FormEvents; use Symfony\Component\OptionsResolver\OptionsResolver; /** @@ -21,6 +24,13 @@ */ class UserRegisterType extends AbstractType { + private ConfigResolverInterface $configResolver; + + public function __construct(ConfigResolverInterface $configResolver) + { + $this->configResolver = $configResolver; + } + public function getName() { return $this->getBlockPrefix(); @@ -38,9 +48,24 @@ public function getParent() public function buildForm(FormBuilderInterface $builder, array $options) { + $allowedFieldsId = $this + ->configResolver + ->getParameter('user_registration.form.allowed_field_definitions_id'); + $builder ->add('register', SubmitType::class, ['label' => /** @Desc("Register") */ 'user.register_button']) ->addEventSubscriber(new UserFieldsSubscriber()); + + $builder->get('fieldsData')->addEventListener( + FormEvents::PRE_SET_DATA, + function (FormEvent $event) use ($allowedFieldsId) { + $fieldsData = $event->getForm(); + foreach ($fieldsData as $fieldData) { + if (!in_array($fieldData->getName(), $allowedFieldsId, true)) { + $fieldsData->remove($fieldData->getName()); + } + } + }, -10); } public function configureOptions(OptionsResolver $resolver) From f87cb238e075d396c97c9310368af3d8f8e6701a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Parafi=C5=84ski?= Date: Fri, 27 May 2022 15:04:10 +0200 Subject: [PATCH 2/7] Replaced choice_loader with choices, as it seems symfony broke something --- src/lib/Form/Type/Invitation/SiteAccessChoiceType.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php b/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php index a339ced..e57f218 100644 --- a/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php +++ b/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php @@ -27,10 +27,7 @@ public function configureOptions(OptionsResolver $resolver): void { $resolver ->setDefaults([ - 'choice_loader' => ChoiceList::lazy( - $this, - fn () => $this->siteAccessService->getAll(), - ), + 'choices' => $this->siteAccessService->getAll(), 'choice_label' => 'name', 'choice_name' => 'name', 'choice_value' => 'name', From 317d1e6d77f92e611d353c80d0932a2eafe43ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Parafi=C5=84ski?= Date: Mon, 30 May 2022 14:06:07 +0200 Subject: [PATCH 3/7] Fixed CS --- src/lib/Form/Type/Invitation/SiteAccessChoiceType.php | 1 - src/lib/Form/Type/UserRegisterType.php | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php b/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php index e57f218..6448a98 100644 --- a/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php +++ b/src/lib/Form/Type/Invitation/SiteAccessChoiceType.php @@ -10,7 +10,6 @@ use Ibexa\Core\MVC\Symfony\SiteAccess\SiteAccessServiceInterface; use Symfony\Component\Form\AbstractType; -use Symfony\Component\Form\ChoiceList\ChoiceList; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\OptionsResolver\OptionsResolver; diff --git a/src/lib/Form/Type/UserRegisterType.php b/src/lib/Form/Type/UserRegisterType.php index 35ee1d3..070647e 100644 --- a/src/lib/Form/Type/UserRegisterType.php +++ b/src/lib/Form/Type/UserRegisterType.php @@ -58,14 +58,16 @@ public function buildForm(FormBuilderInterface $builder, array $options) $builder->get('fieldsData')->addEventListener( FormEvents::PRE_SET_DATA, - function (FormEvent $event) use ($allowedFieldsId) { + static function (FormEvent $event) use ($allowedFieldsId) { $fieldsData = $event->getForm(); foreach ($fieldsData as $fieldData) { if (!in_array($fieldData->getName(), $allowedFieldsId, true)) { $fieldsData->remove($fieldData->getName()); } } - }, -10); + }, + -10 + ); } public function configureOptions(OptionsResolver $resolver) From bcf8c9e45315398a1507e58e78b6cc333f0a1847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Parafi=C5=84ski?= Date: Mon, 13 Jun 2022 12:04:00 +0200 Subject: [PATCH 4/7] Renamed `id` to `identifiers` --- .../Configuration/Parser/UserRegistration.php | 8 ++++---- .../Resources/config/ezplatform_default_settings.yaml | 2 +- src/lib/Form/Type/UserRegisterType.php | 2 +- src/lib/Permission/UserPermissionsLimitationType.php | 5 +++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php b/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php index 54cc74d..14c6c64 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/UserRegistration.php @@ -47,7 +47,7 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder) ->arrayNode('form') ->info('User registration form configuration.') ->children() - ->arrayNode('allowed_field_definitions_id') + ->arrayNode('allowed_field_definitions_identifiers') ->requiresAtLeastOneElement() ->defaultValue(['user_account']) ->prototype('scalar')->end() @@ -97,11 +97,11 @@ public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerIn ); } - if (!empty($settings['form']['allowed_field_definitions_id'])) { + if (!empty($settings['form']['allowed_field_definitions_identifiers'])) { $contextualizer->setContextualParameter( - 'user_registration.form.allowed_field_definitions_id', + 'user_registration.form.allowed_field_definitions_identifiers', $currentScope, - $settings['form']['allowed_field_definitions_id'] + $settings['form']['allowed_field_definitions_identifiers'] ); } } diff --git a/src/bundle/Resources/config/ezplatform_default_settings.yaml b/src/bundle/Resources/config/ezplatform_default_settings.yaml index 5b33a9d..232eaef 100644 --- a/src/bundle/Resources/config/ezplatform_default_settings.yaml +++ b/src/bundle/Resources/config/ezplatform_default_settings.yaml @@ -16,7 +16,7 @@ parameters: ibexa.site_access.config.default.user_registration.user_type_identifier: 'user' ibexa.site_access.config.default.user_registration.templates.form: "@@IbexaContentForms/Content/content_edit.html.twig" ibexa.site_access.config.default.user_registration.templates.confirmation: "@@IbexaUser/register/register_confirmation.html.twig" - ibexa.site_access.config.default.user_registration.form.allowed_field_definitions_id: + ibexa.site_access.config.default.user_registration.form.allowed_field_definitions_identifiers: - first_name - last_name - user_account diff --git a/src/lib/Form/Type/UserRegisterType.php b/src/lib/Form/Type/UserRegisterType.php index 070647e..e106b27 100644 --- a/src/lib/Form/Type/UserRegisterType.php +++ b/src/lib/Form/Type/UserRegisterType.php @@ -50,7 +50,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $allowedFieldsId = $this ->configResolver - ->getParameter('user_registration.form.allowed_field_definitions_id'); + ->getParameter('user_registration.form.allowed_field_definitions_identifiers'); $builder ->add('register', SubmitType::class, ['label' => /** @Desc("Register") */ 'user.register_button']) diff --git a/src/lib/Permission/UserPermissionsLimitationType.php b/src/lib/Permission/UserPermissionsLimitationType.php index ec0a435..5318946 100644 --- a/src/lib/Permission/UserPermissionsLimitationType.php +++ b/src/lib/Permission/UserPermissionsLimitationType.php @@ -13,6 +13,7 @@ use Ibexa\Contracts\Core\Repository\Values\User\Limitation as APILimitationValue; use Ibexa\Contracts\Core\Repository\Values\User\Role; use Ibexa\Contracts\Core\Repository\Values\User\UserGroup; +use Ibexa\Contracts\Core\Repository\Values\Content\Content; use Ibexa\Contracts\Core\Repository\Values\User\UserReference as APIUserReference; use Ibexa\Contracts\Core\Repository\Values\ValueObject; use Ibexa\Core\Base\Exceptions\InvalidArgumentException; @@ -154,7 +155,7 @@ public function evaluate(APILimitationValue $value, APIUserReference $currentUse throw new InvalidArgumentException('$value', 'Must be of type: APISiteAccessLimitation'); } - if (!$object instanceof Role && !$object instanceof UserGroup) { + if (!$object instanceof Role && !$object instanceof Content) { return self::ACCESS_ABSTAIN; } @@ -164,7 +165,7 @@ public function evaluate(APILimitationValue $value, APIUserReference $currentUse return self::ACCESS_GRANTED; } - if ($object instanceof UserGroup + if ($object instanceof Content && ($value->limitationValues['user_groups'] === null || in_array($object->id, $value->limitationValues['user_groups'])) ) { return self::ACCESS_GRANTED; From 1d6195dd4b41e7d98f73e611a6d93d7ddcd8cec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Parafi=C5=84ski?= Date: Mon, 13 Jun 2022 12:08:33 +0200 Subject: [PATCH 5/7] fixed CS --- src/lib/Permission/UserPermissionsLimitationType.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/Permission/UserPermissionsLimitationType.php b/src/lib/Permission/UserPermissionsLimitationType.php index 5318946..9d3c2e0 100644 --- a/src/lib/Permission/UserPermissionsLimitationType.php +++ b/src/lib/Permission/UserPermissionsLimitationType.php @@ -10,10 +10,9 @@ use Ibexa\Contracts\Core\Limitation\Type as SPILimitationTypeInterface; use Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException; use Ibexa\Contracts\Core\Repository\Exceptions\NotImplementedException; +use Ibexa\Contracts\Core\Repository\Values\Content\Content; use Ibexa\Contracts\Core\Repository\Values\User\Limitation as APILimitationValue; use Ibexa\Contracts\Core\Repository\Values\User\Role; -use Ibexa\Contracts\Core\Repository\Values\User\UserGroup; -use Ibexa\Contracts\Core\Repository\Values\Content\Content; use Ibexa\Contracts\Core\Repository\Values\User\UserReference as APIUserReference; use Ibexa\Contracts\Core\Repository\Values\ValueObject; use Ibexa\Core\Base\Exceptions\InvalidArgumentException; From aee2337835a2258e2ca2724fa28780faa64b85b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Parafi=C5=84ski?= Date: Mon, 13 Jun 2022 13:29:44 +0200 Subject: [PATCH 6/7] Aligned test with changes to limitation type --- .../lib/Permission/UserPermissionsLimitationTypeTest.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/lib/Permission/UserPermissionsLimitationTypeTest.php b/tests/lib/Permission/UserPermissionsLimitationTypeTest.php index bdbdd7f..02d36ae 100644 --- a/tests/lib/Permission/UserPermissionsLimitationTypeTest.php +++ b/tests/lib/Permission/UserPermissionsLimitationTypeTest.php @@ -298,11 +298,9 @@ public function providerForTestEvaluate() 'user_groups' => [14, 18], ], ]), - 'object' => new Content([ - 'versionInfo' => new VersionInfo([ - 'contentInfo' => new ContentInfo([ - 'id' => 14, - ]), + 'object' => new VersionInfo([ + 'contentInfo' => new ContentInfo([ + 'id' => 14, ]), ]), 'expected' => null, From e5355d57c7081eef3efb7e7a5bac47bfc11c0ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Parafi=C5=84ski?= Date: Tue, 14 Jun 2022 13:16:16 +0200 Subject: [PATCH 7/7] Minor improvs after CR --- src/lib/Form/Type/UserRegisterType.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/Form/Type/UserRegisterType.php b/src/lib/Form/Type/UserRegisterType.php index e106b27..861d6d9 100644 --- a/src/lib/Form/Type/UserRegisterType.php +++ b/src/lib/Form/Type/UserRegisterType.php @@ -48,17 +48,17 @@ public function getParent() public function buildForm(FormBuilderInterface $builder, array $options) { - $allowedFieldsId = $this - ->configResolver - ->getParameter('user_registration.form.allowed_field_definitions_identifiers'); - $builder ->add('register', SubmitType::class, ['label' => /** @Desc("Register") */ 'user.register_button']) ->addEventSubscriber(new UserFieldsSubscriber()); $builder->get('fieldsData')->addEventListener( FormEvents::PRE_SET_DATA, - static function (FormEvent $event) use ($allowedFieldsId) { + function (FormEvent $event): void { + $allowedFieldsId = $this + ->configResolver + ->getParameter('user_registration.form.allowed_field_definitions_identifiers'); + $fieldsData = $event->getForm(); foreach ($fieldsData as $fieldData) { if (!in_array($fieldData->getName(), $allowedFieldsId, true)) {