configFactory = $config_factory; $this->moduleHandler = $module_handler; $this->mailManager = $mail_manager; } /** * {@inheritdoc} */ public function getModules() { return [ // Mail System - https://www.drupal.org/project/mailsystem 'mailsystem', // SMTP Authentication Support - https://www.drupal.org/project/smtp 'smtp', ]; } /** * {@inheritdoc} */ public function check() { // Don't override the system.mail.interface.webform if the default interface // is the 'test_mail_collector'. if ($this->configFactory->get('system.mail')->get('interface.default') == 'test_mail_collector') { return $this->uninstall(); } // Check if a contrib module is handling sending email. $mail_modules = $this->getModules(); foreach ($mail_modules as $module) { if ($this->moduleHandler->moduleExists($module)) { return $this->uninstall(); } } // Finally, check if the default mail interface and see if it still uses the // php_mail. This check allow unknown contrib modules to handle sending // HTML emails. if ($this->configFactory->get('system.mail')->get('interface.default') == 'php_mail') { return $this->install(); } else { return $this->uninstall(); } } /** * {@inheritdoc} */ public function installed() { return ($this->configFactory->get('system.mail')->get('interface.webform') == 'webform_php_mail'); } /** * {@inheritdoc} */ public function install() { $config = $this->configFactory->getEditable('system.mail'); $mail_plugins = $config->get('interface'); $mail_plugins['webform'] = 'webform_php_mail'; $config->set('interface', $mail_plugins)->save(); } /** * {@inheritdoc} */ public function uninstall() { $config = $this->configFactory->getEditable('system.mail'); $mail_plugins = $config->get('interface'); unset($mail_plugins['webform']); $config->set('interface', $mail_plugins)->save(); } /** * {@inheritdoc} */ public function getModule() { if ($this->installed()) { return 'webform'; } else { $modules = $this->getModules(); foreach ($modules as $module) { if ($this->moduleHandler->moduleExists($module)) { return $module; } } } return FALSE; } /** * {@inheritdoc} */ public function getModuleName() { return ($module = $this->getModule()) ? $this->moduleHandler->getName($module) : FALSE; } /** * {@inheritdoc} */ public function getMailPluginId() { $config = $this->configFactory->get('system.mail'); return $config->get('interface.webform') ?: $config->get('interface.default') ?: FALSE; } /** * {@inheritdoc} */ public function getMailPluginDefinition() { $plugin_id = $this->getMailPluginId(); return ($plugin_id) ? $this->mailManager->getDefinition($plugin_id) : NULL; } }