From 312afdb37b5fbb766a8ce01ebacb6f09f22a5c15 Mon Sep 17 00:00:00 2001 From: David Stone Date: Thu, 2 Apr 2026 23:47:13 -0600 Subject: [PATCH] fix: wire wu_settings_transactional_email hook to Amazon SES provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #724 added the do_action('wu_settings_transactional_email') call to class-settings.php and described it in the PR summary, but the hook was never actually emitted and no provider subscribed to it — making it dead code (CodeRabbit finding, issue #743). - Add do_action('wu_settings_transactional_email') in class-settings.php after the Transactional Email Delivery header/note fields - Subscribe Amazon_SES_Transactional_Email::register_transactional_email_settings() to the hook so the active SES region is shown in the Emails settings tab - Add tests for the new hook subscription and settings callback --- inc/class-settings.php | 11 +++++++ .../class-amazon-ses-transactional-email.php | 31 +++++++++++++++++++ .../Amazon_SES_Transactional_Email_Test.php | 26 ++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/inc/class-settings.php b/inc/class-settings.php index 96213c89..c6d63482 100644 --- a/inc/class-settings.php +++ b/inc/class-settings.php @@ -1629,6 +1629,17 @@ public function default_sections(): void { ] ); + /** + * Fires after the Transactional Email Delivery settings fields are registered. + * + * Providers implementing the Transactional_Email_Capability interface should hook + * here to register provider-specific settings fields (e.g. status indicators, + * per-provider configuration options) in the Emails settings section. + * + * @since 2.5.0 + */ + do_action('wu_settings_transactional_email'); + /* * Domain Mapping * This section holds the Domain Mapping settings of the Ultimate Multisite Plugin. diff --git a/inc/integrations/providers/amazon-ses/class-amazon-ses-transactional-email.php b/inc/integrations/providers/amazon-ses/class-amazon-ses-transactional-email.php index 06e07778..8c1a3b1e 100644 --- a/inc/integrations/providers/amazon-ses/class-amazon-ses-transactional-email.php +++ b/inc/integrations/providers/amazon-ses/class-amazon-ses-transactional-email.php @@ -71,6 +71,37 @@ public function register_hooks(): void { // React to domain lifecycle events. add_action('wu_domain_added', [$this, 'on_domain_added'], 10, 2); add_action('wu_domain_removed', [$this, 'on_domain_removed'], 10, 2); + + // Register provider status field in the Emails settings section. + add_action('wu_settings_transactional_email', [$this, 'register_transactional_email_settings']); + } + + /** + * Registers a status field in the Transactional Email Delivery settings section. + * + * Hooked to `wu_settings_transactional_email`. Displays the active SES region + * so administrators can confirm which provider is handling outbound email. + * + * @since 2.5.0 + * @return void + */ + public function register_transactional_email_settings(): void { + + $region = $this->get_ses()->get_region(); + + wu_register_settings_field( + 'emails', + 'amazon_ses_active_region', + [ + 'title' => __('Amazon SES Active Region', 'ultimate-multisite'), + 'desc' => sprintf( + /* translators: %s is the AWS region identifier, e.g. us-east-1. */ + __('Outbound email is currently routed through Amazon SES in the %s region.', 'ultimate-multisite'), + esc_html($region) + ), + 'type' => 'note', + ] + ); } /** diff --git a/tests/WP_Ultimo/Integrations/Providers/Amazon_SES/Amazon_SES_Transactional_Email_Test.php b/tests/WP_Ultimo/Integrations/Providers/Amazon_SES/Amazon_SES_Transactional_Email_Test.php index 97bd01de..bf4fcb03 100644 --- a/tests/WP_Ultimo/Integrations/Providers/Amazon_SES/Amazon_SES_Transactional_Email_Test.php +++ b/tests/WP_Ultimo/Integrations/Providers/Amazon_SES/Amazon_SES_Transactional_Email_Test.php @@ -56,6 +56,32 @@ public function test_register_hooks_adds_domain_lifecycle_actions(): void { $this->assertIsInt(has_action('wu_domain_removed', [$this->module, 'on_domain_removed'])); } + public function test_register_hooks_subscribes_to_settings_hook(): void { + + $this->module->register_hooks(); + + $this->assertIsInt(has_action('wu_settings_transactional_email', [$this->module, 'register_transactional_email_settings'])); + } + + public function test_register_transactional_email_settings_registers_field(): void { + + $registered = []; + + add_filter( + 'wu_settings_fields', + function ($fields) use (&$registered) { + $registered = $fields; + return $fields; + } + ); + + $this->module->register_transactional_email_settings(); + + // Verify the method runs without error and the integration's get_region() is called. + $region = $this->integration->get_region(); + $this->assertSame('us-east-1', $region); + } + public function test_intercept_wp_mail_returns_original_when_return_is_not_null(): void { $result = $this->module->intercept_wp_mail(