diff --git a/bundle/DependencyInjection/Compiler/LimitationFormMapperPass.php b/bundle/DependencyInjection/Compiler/LimitationFormMapperPass.php
new file mode 100644
index 000000000..c22dbe224
--- /dev/null
+++ b/bundle/DependencyInjection/Compiler/LimitationFormMapperPass.php
@@ -0,0 +1,43 @@
+hasDefinition('ezrepoforms.limitation_form_mapper.registry')) {
+ return;
+ }
+
+ $registry = $container->findDefinition('ezrepoforms.limitation_form_mapper.registry');
+
+ foreach ($container->findTaggedServiceIds('ez.limitation.formMapper') as $id => $attributes) {
+ foreach ($attributes as $attribute) {
+ if (!isset($attribute['limitationType'])) {
+ throw new LogicException(
+ 'ez.limitation.formMapper service tag needs a "limitationType" attribute to identify which LimitationType the mapper is for. None given.'
+ );
+ }
+
+ $registry->addMethodCall('addMapper', [new Reference($id), $attribute['limitationType']]);
+ }
+ }
+ }
+}
diff --git a/bundle/EzSystemsRepositoryFormsBundle.php b/bundle/EzSystemsRepositoryFormsBundle.php
index 82e33ad1b..a8c615495 100644
--- a/bundle/EzSystemsRepositoryFormsBundle.php
+++ b/bundle/EzSystemsRepositoryFormsBundle.php
@@ -11,6 +11,7 @@
namespace EzSystems\RepositoryFormsBundle;
use EzSystems\RepositoryFormsBundle\DependencyInjection\Compiler\FieldTypeFormMapperPass;
+use EzSystems\RepositoryFormsBundle\DependencyInjection\Compiler\LimitationFormMapperPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
@@ -20,5 +21,6 @@ public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new FieldTypeFormMapperPass());
+ $container->addCompilerPass(new LimitationFormMapperPass());
}
}
diff --git a/bundle/Resources/config/role.yml b/bundle/Resources/config/role.yml
index c22e84266..e6de7544d 100644
--- a/bundle/Resources/config/role.yml
+++ b/bundle/Resources/config/role.yml
@@ -1,6 +1,7 @@
parameters:
# Form types
ezrepoforms.policy.edit.form.class: EzSystems\RepositoryForms\Form\Type\Role\PolicyType
+ ezrepoforms.policy.limitation.form.class: EzSystems\RepositoryForms\Form\Type\Role\LimitationType
# Validators
ezrepoforms.validator.unique_role_identifier.class: EzSystems\RepositoryForms\Validator\Constraints\UniqueRoleIdentifierValidator
@@ -13,14 +14,29 @@ parameters:
ezrepoforms.form_processor.role.class: EzSystems\RepositoryForms\Form\Processor\RoleFormProcessor
ezrepoforms.form_processor.policy.class: EzSystems\RepositoryForms\Form\Processor\PolicyFormProcessor
+ # Limitation mappers
+ ezrepoforms.limitation_form_mapper.registry.class: EzSystems\RepositoryForms\Limitation\LimitationFormMapperRegistry
+ ezrepoforms.limitation.null.template: "EzSystemsRepositoryFormsBundle:Limitation:null_limitation_values.html.twig"
+ ezrepoforms.limitation.form_mapper.null.class: EzSystems\RepositoryForms\Limitation\Mapper\NullLimitationMapper
+ ezrepoforms.limitation.multiple_selection.template: "EzSystemsRepositoryFormsBundle:Limitation:base_limitation_values.html.twig"
+ ezrepoforms.limitation.form_mapper.siteaccess.class: EzSystems\RepositoryForms\Limitation\Mapper\SiteAccessLimitationMapper
+ ezrepoforms.limitation.form_mapper.contenttype.class: EzSystems\RepositoryForms\Limitation\Mapper\ContentTypeLimitationMapper
+ ezrepoforms.limitation.form_mapper.section.class: EzSystems\RepositoryForms\Limitation\Mapper\SectionLimitationMapper
+
services:
# Form types
ezrepoforms.policy.edit.form:
class: %ezrepoforms.policy.edit.form.class%
- arguments: [%ezpublish.api.role.policy_map%, @translator]
+ arguments: [%ezpublish.api.role.policy_map%, @translator, @ezpublish.api.service.role]
tags:
- { name: form.type, alias: ezrepoforms_policy_edit }
+ ezrepoforms.policy.limitation.form:
+ class: %ezrepoforms.policy.limitation.form.class%
+ arguments: [@ezrepoforms.limitation_form_mapper.registry, @ezrepoforms.limitation.form_mapper.null]
+ tags:
+ - { name: form.type, alias: ezrepoforms_policy_limitation_edit }
+
# Validators
ezrepoforms.validator.unique_role_identifier:
class: %ezrepoforms.validator.unique_role_identifier.class%
@@ -49,3 +65,39 @@ services:
arguments: [@ezpublish.api.service.role]
tags:
- { name: kernel.event_subscriber }
+
+ ezrepoforms.limitation_form_mapper.registry:
+ class: %ezrepoforms.limitation_form_mapper.registry.class%
+
+ ezrepoforms.limitation.form_mapper.multiple_selection:
+ class: EzSystems\RepositoryForms\Limitation\Mapper\MultipleSelectionBasedMapper
+ abstract: true
+ calls:
+ - [setFormTemplate, [%ezrepoforms.limitation.multiple_selection.template%]]
+
+ ezrepoforms.limitation.form_mapper.siteaccess:
+ parent: ezrepoforms.limitation.form_mapper.multiple_selection
+ class: %ezrepoforms.limitation.form_mapper.siteaccess.class%
+ arguments: [%ezpublish.siteaccess.list%]
+ tags:
+ - { name: ez.limitation.formMapper, limitationType: SiteAccess }
+
+ ezrepoforms.limitation.form_mapper.null:
+ class: %ezrepoforms.limitation.form_mapper.null.class%
+ arguments: [%ezrepoforms.limitation.null.template%]
+ tags:
+ - { name: ez.limitation.formMapper, limitationType: "Null" }
+
+ ezrepoforms.limitation.form_mapper.contenttype:
+ parent: ezrepoforms.limitation.form_mapper.multiple_selection
+ class: %ezrepoforms.limitation.form_mapper.contenttype.class%
+ arguments: [@ezpublish.api.service.content_type]
+ tags:
+ - { name: ez.limitation.formMapper, limitationType: Class }
+
+ ezrepoforms.limitation.form_mapper.section:
+ parent: ezrepoforms.limitation.form_mapper.multiple_selection
+ class: %ezrepoforms.limitation.form_mapper.section.class%
+ arguments: [@ezpublish.api.service.section]
+ tags:
+ - { name: ez.limitation.formMapper, limitationType: Section }
diff --git a/bundle/Resources/translations/ezrepoforms_role.en.xlf b/bundle/Resources/translations/ezrepoforms_role.en.xlf
index 6535c2fa0..2ba060f68 100644
--- a/bundle/Resources/translations/ezrepoforms_role.en.xlf
+++ b/bundle/Resources/translations/ezrepoforms_role.en.xlf
@@ -50,10 +50,42 @@
Delete policy
+
+
+ No limitations available
+
+
+
+ Save and add limitations
+
+
+
+ Limitations
+
+
+
+ Save
+
+
+
+ ContentType
+
+
+
+ Location
+
Delete assignment
+
+
+ Any
+
+
+
+ Limitation edition for '%limitationTypeIdentifier%' is not implemented yet.
+