From 86b47700e32dcca4c05ff8aa11b50860bec7295b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Adamczyk?= Date: Fri, 2 Nov 2018 11:26:59 +0100 Subject: [PATCH 1/5] EZP-29742: Implement permissions for Content/Create in Content item view --- src/bundle/Controller/DashboardController.php | 17 ++- src/bundle/Controller/SectionController.php | 8 +- src/bundle/Resources/config/services.yml | 29 ++++- .../Resources/config/services/utils.yml | 3 + src/bundle/Resources/public/scss/_forms.scss | 1 + .../content/widgets/content_create.html.twig | 14 +- .../views/dashboard/dashboard.html.twig | 7 +- .../Provider/ChoiceListProviderInterface.php | 12 ++ .../ContentTypeChoiceListProvider.php | 39 ++++++ .../Provider/LanguageChoiceListProvider.php | 56 ++++++++ ...sionAwareContentTypeChoiceListProvider.php | 80 ++++++++++++ ...missionAwareLanguageChoiceListProvider.php | 77 +++++++++++ .../Type/Content/Draft/ContentCreateType.php | 25 +++- .../ContentType/ContentTypeChoiceType.php | 26 ++-- .../Form/Type/Language/LanguageChoiceType.php | 39 +----- src/lib/Menu/ContentRightSidebarBuilder.php | 16 ++- .../Event/Subscriber/ContentCreate.php | 121 ++++++++++++++++++ .../Event/Subscriber/SectionAssign.php | 8 +- src/lib/Util/PermissionUtil.php | 113 +++++++++++++++- src/lib/Util/PermissionUtilInterface.php | 38 ++++++ 20 files changed, 649 insertions(+), 80 deletions(-) create mode 100644 src/lib/Form/Type/ChoiceList/Provider/ChoiceListProviderInterface.php create mode 100644 src/lib/Form/Type/ChoiceList/Provider/ContentTypeChoiceListProvider.php create mode 100644 src/lib/Form/Type/ChoiceList/Provider/LanguageChoiceListProvider.php create mode 100644 src/lib/Form/Type/ChoiceList/Provider/PermissionAwareContentTypeChoiceListProvider.php create mode 100644 src/lib/Form/Type/ChoiceList/Provider/PermissionAwareLanguageChoiceListProvider.php create mode 100644 src/lib/UniversalDiscovery/Event/Subscriber/ContentCreate.php create mode 100644 src/lib/Util/PermissionUtilInterface.php diff --git a/src/bundle/Controller/DashboardController.php b/src/bundle/Controller/DashboardController.php index 4e422b14f7..092a7d1a5b 100644 --- a/src/bundle/Controller/DashboardController.php +++ b/src/bundle/Controller/DashboardController.php @@ -11,25 +11,34 @@ use EzSystems\EzPlatformAdminUi\Form\Data\Content\Draft\ContentEditData; use EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory; use eZ\Publish\API\Repository\PermissionResolver; +use Symfony\Component\HttpFoundation\Response; class DashboardController extends Controller { + /** @var \EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory */ protected $formFactory; /** @var \eZ\Publish\API\Repository\PermissionResolver */ private $permissionResolver; /** - * @param \EzSystems\EzplatformAdminUi\Form\Factory\FormFactory $formFactory + * @param \EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory $formFactory * @param \eZ\Publish\API\Repository\PermissionResolver $permissionResolver */ - public function __construct(FormFactory $formFactory, PermissionResolver $permissionResolver) - { + public function __construct( + FormFactory $formFactory, + PermissionResolver $permissionResolver + ) { $this->formFactory = $formFactory; $this->permissionResolver = $permissionResolver; } - public function dashboardAction() + /** + * @return \Symfony\Component\HttpFoundation\Response + * + * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException + */ + public function dashboardAction(): Response { $editForm = $this->formFactory->contentEdit( new ContentEditData() diff --git a/src/bundle/Controller/SectionController.php b/src/bundle/Controller/SectionController.php index 05ce572d7a..7086c685f3 100644 --- a/src/bundle/Controller/SectionController.php +++ b/src/bundle/Controller/SectionController.php @@ -31,7 +31,7 @@ use EzSystems\EzPlatformAdminUi\Form\SubmitHandler; use EzSystems\EzPlatformAdminUi\Notification\NotificationHandlerInterface; use EzSystems\EzPlatformAdminUi\UI\Service\PathService; -use EzSystems\EzPlatformAdminUi\Util\PermissionUtil; +use EzSystems\EzPlatformAdminUi\Util\PermissionUtilInterface; use EzSystems\EzPlatformAdminUiBundle\View\EzPagerfantaView; use EzSystems\EzPlatformAdminUiBundle\View\Template\EzPagerfantaTemplate; use Pagerfanta\Adapter\ArrayAdapter; @@ -80,7 +80,7 @@ class SectionController extends Controller /** @var \eZ\Publish\API\Repository\PermissionResolver */ private $permissionResolver; - /** @var \EzSystems\EzPlatformAdminUi\Util\PermissionUtil */ + /** @var \EzSystems\EzPlatformAdminUi\Util\PermissionUtilInterface */ private $permissionUtil; /** @var int */ @@ -99,7 +99,7 @@ class SectionController extends Controller * @param \eZ\Publish\API\Repository\LocationService $locationService * @param \EzSystems\EzPlatformAdminUi\UI\Service\PathService $pathService * @param \eZ\Publish\API\Repository\PermissionResolver $permissionResolver - * @param \EzSystems\EzPlatformAdminUi\Util\PermissionUtil $permissionUtil + * @param \EzSystems\EzPlatformAdminUi\Util\PermissionUtilInterface $permissionUtil * @param int $defaultPaginationLimit */ public function __construct( @@ -115,7 +115,7 @@ public function __construct( LocationService $locationService, PathService $pathService, PermissionResolver $permissionResolver, - PermissionUtil $permissionUtil, + PermissionUtilInterface $permissionUtil, int $defaultPaginationLimit ) { $this->notificationHandler = $notificationHandler; diff --git a/src/bundle/Resources/config/services.yml b/src/bundle/Resources/config/services.yml index bde429a9ad..e698ed2c5e 100644 --- a/src/bundle/Resources/config/services.yml +++ b/src/bundle/Resources/config/services.yml @@ -84,14 +84,15 @@ services: EzSystems\EzPlatformAdminUi\Form\DataMapper\: resource: '../../../lib/Form/DataMapper' - EzSystems\EzPlatformAdminUi\Form\Type\Language\LanguageChoiceType: - arguments: - $siteAccessLanguages: '$languages$' - EzSystems\EzPlatformAdminUi\Form\Type\Policy\PolicyChoiceType: arguments: $policyMap: "%ezpublish.api.role.policy_map%" + EzSystems\EzPlatformAdminUi\Form\Type\Content\Draft\ContentCreateType: + arguments: + $choiceListProvider: '@EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\PermissionAwareContentTypeChoiceListProvider' + $languageChoiceListProvider: '@EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\PermissionAwareLanguageChoiceListProvider' + EzSystems\EzPlatformAdminUi\UI\Dataset\DatasetFactory: arguments: $userContentTypeIdentifier: '$user_content_type_identifier$' @@ -151,3 +152,23 @@ services: - {name: kernel.event_subscriber, priority: -250} EzSystems\EzPlatformAdminUiBundle\Templating\Twig\UserPreferencesGlobalExtension: ~ + + EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\ContentTypeChoiceListProvider: ~ + + EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\LanguageChoiceListProvider: + arguments: + $siteAccessLanguages: '$languages$' + + EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\PermissionAwareContentTypeChoiceListProvider: + arguments: + $decorated: '@EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\ContentTypeChoiceListProvider' + $module: 'content' + $function: 'create' + + EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\PermissionAwareLanguageChoiceListProvider: + arguments: + $decorated: '@EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Provider\LanguageChoiceListProvider' + $module: 'content' + $function: 'create' + + diff --git a/src/bundle/Resources/config/services/utils.yml b/src/bundle/Resources/config/services/utils.yml index 0b2accacf1..02bddb8e3a 100644 --- a/src/bundle/Resources/config/services/utils.yml +++ b/src/bundle/Resources/config/services/utils.yml @@ -6,3 +6,6 @@ services: EzSystems\EzPlatformAdminUi\Util\: resource: "../../../lib/Util" + + EzSystems\EzPlatformAdminUi\Util\PermissionUtilInterface: + alias: EzSystems\EzPlatformAdminUi\Util\PermissionUtil diff --git a/src/bundle/Resources/public/scss/_forms.scss b/src/bundle/Resources/public/scss/_forms.scss index 0ceb928a9e..7b5bd9818d 100644 --- a/src/bundle/Resources/public/scss/_forms.scss +++ b/src/bundle/Resources/public/scss/_forms.scss @@ -31,6 +31,7 @@ form:not(.form-inline) { .form-control[readonly] { background-color: $ez-white; + pointer-events: none; } .form-control:focus { diff --git a/src/bundle/Resources/views/content/widgets/content_create.html.twig b/src/bundle/Resources/views/content/widgets/content_create.html.twig index caa1c80f7f..adc1cb1ed8 100644 --- a/src/bundle/Resources/views/content/widgets/content_create.html.twig +++ b/src/bundle/Resources/views/content/widgets/content_create.html.twig @@ -4,14 +4,14 @@
{{ 'content.create.choose_content_type'|trans|desc('Create your content') }}
{{ form_start(form, { 'action': path('ezplatform.content.create'), 'attr': { 'autocomplete': 'off' } }) }} - {% if form.language.vars.choices|length == 1 %} - {{ form_widget(form.language, {'attr': {'hidden': true}}) }} - {% else %} -
{{ 'content.create.select_language'|trans|desc('Select language') }}
-
+
{{ 'content.create.select_language'|trans|desc('Select language') }}
+
+ {% if form.language.vars.choices|length == 1 %} + {{ form_widget(form.language, {'attr': {'readonly': true}}) }} + {% else %} {{ form_widget(form.language) }} -
- {% endif %} + {% endif %} +
{{ 'content.create.select_content_type'|trans|desc('Select Content Type') }}
diff --git a/src/bundle/Resources/views/dashboard/dashboard.html.twig b/src/bundle/Resources/views/dashboard/dashboard.html.twig index e8f6ce0861..210caddf25 100644 --- a/src/bundle/Resources/views/dashboard/dashboard.html.twig +++ b/src/bundle/Resources/views/dashboard/dashboard.html.twig @@ -12,8 +12,11 @@

{{ 'my.dashboard'|trans|desc('My dashboard') }}

-