diff -u b/src/Form/AdminForm.php b/src/Form/AdminForm.php --- b/src/Form/AdminForm.php +++ b/src/Form/AdminForm.php @@ -22,7 +22,7 @@ class AdminForm extends ConfigFormBase { /** - * @var MailsystemManager + * @var \Drupal\Core\Mail\MailManagerInterface */ protected $mailManager; @@ -41,6 +41,12 @@ * * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The factory for configuration objects. + * @param \Drupal\Core\Mail\MailManagerInterface $mail_manager + * The mail manager. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. + * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler + * The theme handler. */ public function __construct(ConfigFactoryInterface $config_factory, MailManagerInterface $mail_manager, ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler) { parent::__construct($config_factory); @@ -275,6 +281,10 @@ $config->set('theme', $form_state->getValue(['mailsystem', 'default_theme'])); } + // Flags to ensure if checking for each custom modules need to be updated. + $module_formatter = ''; + $module_sender = ''; + // Create a new module configuration or update an existing one if a module // is selected. if ($form_state->hasValue(['custom', 'custom_module']) && ($form_state->getValue(['custom', 'custom_module']) != 'none')) { @@ -291,11 +301,16 @@ // The configuration entries can be: // modules.module.key.type -> Plugin for a special mail and send/format function // modules.module.type -> Global plugin for the send/format function - $config_key = MailsystemManager::MAILSYSTEM_MODULES_CONFIG . '.' . $module; - $config_key .= !empty($key) ? '.' . $key : '.none'; + $module_key = $module; + $module_key .= !empty($key) ? '.' . $key : '.none'; + $config_key = MailsystemManager::MAILSYSTEM_MODULES_CONFIG . '.' . $module_key; if (!empty($config->get($config_key))) { // If the adding custom module already exists, then update it. + //if ($form_state->getValue(['custom', 'modules'])[$module_key]['formatter'] != $formatter) { + $module_formatter = ($config->get($config_key)['formatter'] != $formatter) ? $formatter : 'none'; + $module_sender = ($config->get($config_key)['sender'] != $sender) ? $sender : 'none'; + $settings = [ 'formatter' => $formatter, 'sender' => $sender, @@ -305,12 +320,8 @@ } else { // Create the new custom module configuration. - if ($formatter != 'none') { - $config->set($config_key . '.' . MailsystemManager::MAILSYSTEM_TYPE_FORMATTING, $formatter); - } - if ($sender != 'none') { - $config->set($config_key . '.' . MailsystemManager::MAILSYSTEM_TYPE_SENDING, $sender); - } + $config->set($config_key . '.' . MailsystemManager::MAILSYSTEM_TYPE_FORMATTING, $formatter); + $config->set($config_key . '.' . MailsystemManager::MAILSYSTEM_TYPE_SENDING, $sender); } } @@ -318,13 +329,13 @@ if ($form_state->hasValue(['custom', 'modules']) && is_array($form_state->getValue(['custom', 'modules']))) { foreach ($form_state->getValue(['custom', 'modules'], []) as $module_key => $settings) { $mailsystem_settings = MailsystemManager::MAILSYSTEM_MODULES_CONFIG . '.' . $module_key; - $formatter = (!empty($settings[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING])) ? $settings[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING] : 'none'; - $sender = (!empty($settings[MailsystemManager::MAILSYSTEM_TYPE_SENDING])) ? $settings[MailsystemManager::MAILSYSTEM_TYPE_SENDING] : 'none'; + $formatter = (($module_formatter == '') && !empty($settings[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING])) ? $settings[MailsystemManager::MAILSYSTEM_TYPE_FORMATTING] : 'none'; + $sender = (($module_sender == '') && !empty($settings[MailsystemManager::MAILSYSTEM_TYPE_SENDING])) ? $settings[MailsystemManager::MAILSYSTEM_TYPE_SENDING] : 'none'; if (!empty($settings['remove'])) { // If some checkboxs are checked, remove these rows. $config->clear($mailsystem_settings); } - elseif (($formatter != 'none') || $sender != 'none') { + elseif (($formatter != 'none') || ($sender != 'none')) { // Update formatter and/or sender. $values = [ 'formatter' => $formatter, @@ -353,6 +364,7 @@ * The new custom formatter/sending plugin value to be set. */ protected function updateCustomModule($config, $mailsystem_settings, $values = array()) { + /** @var \Drupal\Core\Form\ConfigFormBase $config */ if (($values['formatter'] != 'none') && ($values['formatter'] != $config->get($mailsystem_settings . '.' . MailsystemManager::MAILSYSTEM_TYPE_FORMATTING))) { $config->set($mailsystem_settings . '.' . MailsystemManager::MAILSYSTEM_TYPE_FORMATTING, $values['formatter']); }