Skip to content

Commit c0b2fa7

Browse files
committed
Merge branch 'hotfix/fix_delete_copy_button_ad_edit_all' into 'release/2.3.0'
Fix delete copy button at edit all See merge request metamodels/core!384
2 parents 5095ce8 + ee295be commit c0b2fa7

File tree

4 files changed

+110
-62
lines changed

4 files changed

+110
-62
lines changed

src/CoreBundle/EventListener/DcGeneral/Table/MetaModel/SelectModeButtonsListener.php

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
3+
/**
4+
* This file is part of MetaModels/core.
5+
*
6+
* (c) 2012-2025 The MetaModels team.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*
11+
* This project is provided in good faith and hope to be usable by anyone.
12+
*
13+
* @package MetaModels/core
14+
* @author Ingolf Steinhardt <[email protected]>
15+
* @copyright 2012-2025 The MetaModels team.
16+
* @license https://github.com/MetaModels/core/blob/master/LICENSE LGPL-3.0-or-later
17+
* @filesource
18+
*/
19+
20+
namespace MetaModels\CoreBundle\EventListener\DcGeneral\Table;
21+
22+
use ContaoCommunityAlliance\DcGeneral\Contao\RequestScopeDeterminator;
23+
use ContaoCommunityAlliance\DcGeneral\Contao\View\Contao2BackendView\Event\GetSelectModeButtonsEvent;
24+
use ContaoCommunityAlliance\DcGeneral\DataDefinition\ContainerInterface;
25+
use ContaoCommunityAlliance\DcGeneral\Event\AbstractEnvironmentAwareEvent;
26+
use ContaoCommunityAlliance\DcGeneral\Event\AbstractModelAwareEvent;
27+
28+
use function array_key_exists;
29+
use function in_array;
30+
31+
class SelectModeButtonsListener
32+
{
33+
public function __construct(
34+
private readonly RequestScopeDeterminator $scopeDeterminator
35+
) {
36+
}
37+
38+
/**
39+
* Delete copy button at edit all.
40+
*
41+
* @param GetSelectModeButtonsEvent $event The event.
42+
*
43+
* @return void
44+
*/
45+
public function handle(GetSelectModeButtonsEvent $event): void
46+
{
47+
if (!$this->wantToHandle($event)) {
48+
return;
49+
}
50+
51+
$buttons = $event->getButtons();
52+
if (array_key_exists('copy', $buttons)) {
53+
unset($buttons['copy']);
54+
$event->setButtons($buttons);
55+
}
56+
}
57+
58+
/**
59+
* Test if the event is for the correct table and in backend scope.
60+
*
61+
* @param AbstractEnvironmentAwareEvent $event The event to test.
62+
*
63+
* @return bool
64+
*/
65+
protected function wantToHandle(AbstractEnvironmentAwareEvent $event)
66+
{
67+
if (!$this->scopeDeterminator->currentScopeIsBackend()) {
68+
return false;
69+
}
70+
71+
$environment = $event->getEnvironment();
72+
$dataDefinition = $environment->getDataDefinition();
73+
assert($dataDefinition instanceof ContainerInterface);
74+
75+
if (
76+
!in_array(
77+
$dataDefinition->getName(),
78+
[
79+
'tl_metamodel',
80+
'tl_metamodel_attribute',
81+
'tl_metamodel_dca_sortgroup',
82+
'tl_metamodel_dcasetting',
83+
'tl_metamodel_dcasetting_condition',
84+
'tl_metamodel_rendersetting',
85+
'tl_metamodel_searchable_pages',
86+
]
87+
)
88+
) {
89+
return false;
90+
}
91+
92+
if (
93+
($event instanceof AbstractModelAwareEvent)
94+
&& $dataDefinition->getName() !== $event->getModel()->getProviderName()
95+
) {
96+
return false;
97+
}
98+
99+
return true;
100+
}
101+
}

src/CoreBundle/Resources/config/dc-general/listener.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,12 @@ services:
6464
- name: kernel.event_listener
6565
event: dc-general.view.contao2backend.get-operation-button
6666
method: handle
67+
68+
MetaModels\CoreBundle\EventListener\DcGeneral\Table\SelectModeButtonsListener:
69+
arguments:
70+
- "@cca.dc-general.scope-matcher"
71+
tags:
72+
- name: kernel.event_listener
73+
event: dc-general.view.contao2backend.get-select-mode-buttons
74+
method: handle
75+
priority: -100

src/CoreBundle/Resources/config/dc-general/table/tl_metamodel.yml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,6 @@ services:
4747
event: dc-general.view.contao2backend.encode-property-value-from-widget
4848
method: handle
4949

50-
MetaModels\CoreBundle\EventListener\DcGeneral\Table\MetaModel\SelectModeButtonsListener:
51-
arguments:
52-
- "@cca.dc-general.scope-matcher"
53-
tags:
54-
- name: kernel.event_listener
55-
event: dc-general.view.contao2backend.get-select-mode-buttons
56-
method: handle
57-
priority: -100
58-
5950
MetaModels\CoreBundle\EventListener\DcGeneral\Table\MetaModel\ModelSchemaManagerHintListener:
6051
arguments:
6152
- "@cca.dc-general.scope-matcher"

0 commit comments

Comments
 (0)