From ee295bee80a95ca48bd68e80a99c5a84bd87ae01 Mon Sep 17 00:00:00 2001 From: Ingolf Steinhardt Date: Wed, 15 Jan 2025 20:54:14 +0100 Subject: [PATCH] Fix delete copy button at edit all --- .../MetaModel/SelectModeButtonsListener.php | 53 --------- .../Table/SelectModeButtonsListener.php | 101 ++++++++++++++++++ .../Resources/config/dc-general/listener.yml | 9 ++ .../config/dc-general/table/tl_metamodel.yml | 9 -- 4 files changed, 110 insertions(+), 62 deletions(-) delete mode 100644 src/CoreBundle/EventListener/DcGeneral/Table/MetaModel/SelectModeButtonsListener.php create mode 100644 src/CoreBundle/EventListener/DcGeneral/Table/SelectModeButtonsListener.php diff --git a/src/CoreBundle/EventListener/DcGeneral/Table/MetaModel/SelectModeButtonsListener.php b/src/CoreBundle/EventListener/DcGeneral/Table/MetaModel/SelectModeButtonsListener.php deleted file mode 100644 index 7b1695dc4..000000000 --- a/src/CoreBundle/EventListener/DcGeneral/Table/MetaModel/SelectModeButtonsListener.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @copyright 2012-2024 The MetaModels team. - * @license https://github.com/MetaModels/core/blob/master/LICENSE LGPL-3.0-or-later - * @filesource - */ - -namespace MetaModels\CoreBundle\EventListener\DcGeneral\Table\MetaModel; - -use ContaoCommunityAlliance\DcGeneral\Contao\RequestScopeDeterminator; -use ContaoCommunityAlliance\DcGeneral\Contao\View\Contao2BackendView\Event\GetSelectModeButtonsEvent; - -use function array_key_exists; - -class SelectModeButtonsListener extends AbstractAbstainingListener -{ - public function __construct(RequestScopeDeterminator $scopeDeterminator) - { - parent::__construct($scopeDeterminator); - } - - /** - * Delete copy button at edit all. - * - * @param GetSelectModeButtonsEvent $event The event. - * - * @return void - */ - public function handle(GetSelectModeButtonsEvent $event): void - { - if (!$this->wantToHandle($event)) { - return; - } - - $buttons = $event->getButtons(); - if (array_key_exists('copy', $buttons)) { - unset($buttons['copy']); - $event->setButtons($buttons); - } - } -} diff --git a/src/CoreBundle/EventListener/DcGeneral/Table/SelectModeButtonsListener.php b/src/CoreBundle/EventListener/DcGeneral/Table/SelectModeButtonsListener.php new file mode 100644 index 000000000..98120774f --- /dev/null +++ b/src/CoreBundle/EventListener/DcGeneral/Table/SelectModeButtonsListener.php @@ -0,0 +1,101 @@ + + * @copyright 2012-2025 The MetaModels team. + * @license https://github.com/MetaModels/core/blob/master/LICENSE LGPL-3.0-or-later + * @filesource + */ + +namespace MetaModels\CoreBundle\EventListener\DcGeneral\Table; + +use ContaoCommunityAlliance\DcGeneral\Contao\RequestScopeDeterminator; +use ContaoCommunityAlliance\DcGeneral\Contao\View\Contao2BackendView\Event\GetSelectModeButtonsEvent; +use ContaoCommunityAlliance\DcGeneral\DataDefinition\ContainerInterface; +use ContaoCommunityAlliance\DcGeneral\Event\AbstractEnvironmentAwareEvent; +use ContaoCommunityAlliance\DcGeneral\Event\AbstractModelAwareEvent; + +use function array_key_exists; +use function in_array; + +class SelectModeButtonsListener +{ + public function __construct( + private readonly RequestScopeDeterminator $scopeDeterminator + ) { + } + + /** + * Delete copy button at edit all. + * + * @param GetSelectModeButtonsEvent $event The event. + * + * @return void + */ + public function handle(GetSelectModeButtonsEvent $event): void + { + if (!$this->wantToHandle($event)) { + return; + } + + $buttons = $event->getButtons(); + if (array_key_exists('copy', $buttons)) { + unset($buttons['copy']); + $event->setButtons($buttons); + } + } + + /** + * Test if the event is for the correct table and in backend scope. + * + * @param AbstractEnvironmentAwareEvent $event The event to test. + * + * @return bool + */ + protected function wantToHandle(AbstractEnvironmentAwareEvent $event) + { + if (!$this->scopeDeterminator->currentScopeIsBackend()) { + return false; + } + + $environment = $event->getEnvironment(); + $dataDefinition = $environment->getDataDefinition(); + assert($dataDefinition instanceof ContainerInterface); + + if ( + !in_array( + $dataDefinition->getName(), + [ + 'tl_metamodel', + 'tl_metamodel_attribute', + 'tl_metamodel_dca_sortgroup', + 'tl_metamodel_dcasetting', + 'tl_metamodel_dcasetting_condition', + 'tl_metamodel_rendersetting', + 'tl_metamodel_searchable_pages', + ] + ) + ) { + return false; + } + + if ( + ($event instanceof AbstractModelAwareEvent) + && $dataDefinition->getName() !== $event->getModel()->getProviderName() + ) { + return false; + } + + return true; + } +} diff --git a/src/CoreBundle/Resources/config/dc-general/listener.yml b/src/CoreBundle/Resources/config/dc-general/listener.yml index 01201f94f..89c690343 100644 --- a/src/CoreBundle/Resources/config/dc-general/listener.yml +++ b/src/CoreBundle/Resources/config/dc-general/listener.yml @@ -64,3 +64,12 @@ services: - name: kernel.event_listener event: dc-general.view.contao2backend.get-operation-button method: handle + + MetaModels\CoreBundle\EventListener\DcGeneral\Table\SelectModeButtonsListener: + arguments: + - "@cca.dc-general.scope-matcher" + tags: + - name: kernel.event_listener + event: dc-general.view.contao2backend.get-select-mode-buttons + method: handle + priority: -100 diff --git a/src/CoreBundle/Resources/config/dc-general/table/tl_metamodel.yml b/src/CoreBundle/Resources/config/dc-general/table/tl_metamodel.yml index accca642d..c4ef56b07 100644 --- a/src/CoreBundle/Resources/config/dc-general/table/tl_metamodel.yml +++ b/src/CoreBundle/Resources/config/dc-general/table/tl_metamodel.yml @@ -47,15 +47,6 @@ services: event: dc-general.view.contao2backend.encode-property-value-from-widget method: handle - MetaModels\CoreBundle\EventListener\DcGeneral\Table\MetaModel\SelectModeButtonsListener: - arguments: - - "@cca.dc-general.scope-matcher" - tags: - - name: kernel.event_listener - event: dc-general.view.contao2backend.get-select-mode-buttons - method: handle - priority: -100 - MetaModels\CoreBundle\EventListener\DcGeneral\Table\MetaModel\ModelSchemaManagerHintListener: arguments: - "@cca.dc-general.scope-matcher"