Skip to content

Commit 4a7540b

Browse files
authored
Always initialize the module configs (#434)
1 parent 9bf55ac commit 4a7540b

3 files changed

Lines changed: 50 additions & 80 deletions

File tree

contao/dca/tl_module.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,47 @@
22

33
declare(strict_types=1);
44

5+
use Contao\CoreBundle\DataContainer\PaletteManipulator;
6+
57
$GLOBALS['TL_DCA']['tl_module']['palettes']['__selector__'][] = 'nc_registration_auto_activate';
8+
$GLOBALS['TL_DCA']['tl_module']['palettes']['lostPasswordNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['lostPassword'];
9+
$GLOBALS['TL_DCA']['tl_module']['palettes']['registrationNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['registration'];
610
$GLOBALS['TL_DCA']['tl_module']['subpalettes']['nc_registration_auto_activate'] = 'reg_jumpTo,nc_activation_notification';
711

12+
PaletteManipulator::create()
13+
->addField('nc_notification', 'reg_password', PaletteManipulator::POSITION_BEFORE)
14+
->addField('nc_lost_password_jumpTo', 'email_legend', PaletteManipulator::POSITION_PREPEND)
15+
->removeField('reg_password')
16+
->applyToPalette('lostPasswordNotificationCenter', 'tl_module')
17+
;
18+
19+
PaletteManipulator::create()
20+
->addField('nc_notification', 'reg_activate')
21+
->addField('nc_registration_auto_activate', 'nc_notification')
22+
->removeField('reg_activate')
23+
->applyToPalette('registrationNotificationCenter', 'tl_module')
24+
;
25+
26+
PaletteManipulator::create()
27+
->addField('nc_notification', 'config_legend', PaletteManipulator::POSITION_APPEND)
28+
->applyToPalette('personalData', 'tl_module')
29+
;
30+
31+
// ContaoNewsletterBundle must be installed
32+
if (isset($GLOBALS['TL_DCA']['tl_module']['palettes']['subscribe'])) {
33+
$GLOBALS['TL_DCA']['tl_module']['palettes']['newsletterSubscribeNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['subscribe'];
34+
$GLOBALS['TL_DCA']['tl_module']['palettes']['newsletterUnsubscribeNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['unsubscribe'];
35+
36+
PaletteManipulator::create()
37+
->addField('nc_notification', 'email_legend', PaletteManipulator::POSITION_APPEND)
38+
->removeField('nl_subscribe')
39+
->applyToPalette('newsletterUnsubscribeNotificationCenter', 'tl_module')
40+
->addField('nc_activation_notification', 'nc_notification')
41+
->addField('nc_newsletter_activation_jumpTo', 'redirect_legend', PaletteManipulator::POSITION_APPEND)
42+
->applyToPalette('newsletterSubscribeNotificationCenter', 'tl_module')
43+
;
44+
}
45+
846
$GLOBALS['TL_DCA']['tl_module']['fields']['nc_notification'] = [
947
'exclude' => true,
1048
'inputType' => 'select',

src/ContaoManager/Plugin.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Contao\ManagerPlugin\Bundle\Config\BundleConfig;
1010
use Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
1111
use Contao\ManagerPlugin\Routing\RoutingPluginInterface;
12+
use Contao\NewsletterBundle\ContaoNewsletterBundle;
1213
use Symfony\Component\Config\Loader\LoaderResolverInterface;
1314
use Symfony\Component\HttpKernel\KernelInterface;
1415
use Terminal42\NotificationCenterBundle\Terminal42NotificationCenterBundle;
@@ -20,7 +21,7 @@ public function getBundles(ParserInterface $parser): array
2021
return [
2122
(new BundleConfig(Terminal42NotificationCenterBundle::class))
2223
->setReplace(['notification_center'])
23-
->setLoadAfter([ContaoCoreBundle::class]),
24+
->setLoadAfter([ContaoCoreBundle::class, ContaoNewsletterBundle::class]),
2425
];
2526
}
2627

src/EventListener/Backend/DataContainer/ModuleListener.php

Lines changed: 10 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace Terminal42\NotificationCenterBundle\EventListener\Backend\DataContainer;
66

7-
use Contao\CoreBundle\DataContainer\PaletteManipulator;
87
use Contao\CoreBundle\DependencyInjection\Attribute\AsCallback;
98
use Contao\DataContainer;
109
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -21,30 +20,19 @@ public function __construct(
2120
) {
2221
}
2322

24-
#[AsCallback(table: 'tl_module', target: 'config.onload')]
25-
public function onLoadCallback(DataContainer $dc): void
23+
/**
24+
* @param array<string, mixed> $attributes
25+
*
26+
* @return array<string, mixed>
27+
*/
28+
#[AsCallback(table: 'tl_module', target: 'fields.nc_notification.attributes')]
29+
public function onAttributesCallback(array $attributes, DataContainer $dc): array
2630
{
27-
if (null === ($moduleConfig = $this->configLoader->loadModule((int) $dc->id))) {
28-
return;
31+
if ('newsletterSubscribeNotificationCenter' === $dc->getCurrentRecord()['type']) {
32+
$attributes['mandatory'] = true;
2933
}
3034

31-
switch ($moduleConfig->getType()) {
32-
case 'lostPasswordNotificationCenter':
33-
$this->handleLostPasswordModule();
34-
break;
35-
case 'registrationNotificationCenter':
36-
$this->handleRegistrationModule();
37-
break;
38-
case 'personalData':
39-
$this->handlePersonalDataModule();
40-
break;
41-
case 'newsletterSubscribeNotificationCenter':
42-
$this->handleNewsletterSubscribeModule();
43-
break;
44-
case 'newsletterUnsubscribeNotificationCenter':
45-
$this->handleNewsletterUnubscribeModule();
46-
break;
47-
}
35+
return $attributes;
4836
}
4937

5038
/**
@@ -68,61 +56,4 @@ public function onNotificationOptionsCallback(DataContainer $dc): array
6856

6957
return [];
7058
}
71-
72-
private function handleLostPasswordModule(): void
73-
{
74-
$GLOBALS['TL_DCA']['tl_module']['palettes']['lostPasswordNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['lostPassword'];
75-
76-
PaletteManipulator::create()
77-
->addField('nc_notification', 'reg_password', PaletteManipulator::POSITION_BEFORE)
78-
->addField('nc_lost_password_jumpTo', 'email_legend', PaletteManipulator::POSITION_PREPEND)
79-
->removeField('reg_password')
80-
->applyToPalette('lostPasswordNotificationCenter', 'tl_module')
81-
;
82-
}
83-
84-
private function handleRegistrationModule(): void
85-
{
86-
$GLOBALS['TL_DCA']['tl_module']['palettes']['registrationNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['registration'];
87-
88-
PaletteManipulator::create()
89-
->addField('nc_notification', 'reg_activate')
90-
->addField('nc_registration_auto_activate', 'nc_notification')
91-
->removeField('reg_activate')
92-
->applyToPalette('registrationNotificationCenter', 'tl_module')
93-
;
94-
}
95-
96-
private function handlePersonalDataModule(): void
97-
{
98-
PaletteManipulator::create()
99-
->addField('nc_notification', 'config_legend', PaletteManipulator::POSITION_APPEND)
100-
->applyToPalette('personalData', 'tl_module')
101-
;
102-
}
103-
104-
private function handleNewsletterSubscribeModule(): void
105-
{
106-
$GLOBALS['TL_DCA']['tl_module']['palettes']['newsletterSubscribeNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['subscribe'];
107-
$GLOBALS['TL_DCA']['tl_module']['fields']['nc_notification']['eval']['mandatory'] = true;
108-
109-
PaletteManipulator::create()
110-
->addField('nc_notification', 'email_legend', PaletteManipulator::POSITION_APPEND)
111-
->addField('nc_activation_notification', 'nc_notification')
112-
->addField('nc_newsletter_activation_jumpTo', 'redirect_legend', PaletteManipulator::POSITION_APPEND)
113-
->removeField('nl_subscribe')
114-
->applyToPalette('newsletterSubscribeNotificationCenter', 'tl_module')
115-
;
116-
}
117-
118-
private function handleNewsletterUnubscribeModule(): void
119-
{
120-
$GLOBALS['TL_DCA']['tl_module']['palettes']['newsletterUnsubscribeNotificationCenter'] = $GLOBALS['TL_DCA']['tl_module']['palettes']['unsubscribe'];
121-
122-
PaletteManipulator::create()
123-
->addField('nc_notification', 'email_legend', PaletteManipulator::POSITION_APPEND)
124-
->removeField('nl_unsubscribe')
125-
->applyToPalette('newsletterUnsubscribeNotificationCenter', 'tl_module')
126-
;
127-
}
12859
}

0 commit comments

Comments
 (0)