diff --git a/includes/Core/Email_Reporting/Batch_Error_Notifier.php b/includes/Core/Email_Reporting/Batch_Error_Notifier.php
index 3b67a3d5de6..9b40c5b123a 100644
--- a/includes/Core/Email_Reporting/Batch_Error_Notifier.php
+++ b/includes/Core/Email_Reporting/Batch_Error_Notifier.php
@@ -35,7 +35,6 @@ class Batch_Error_Notifier {
const NON_SENDABLE_CATEGORIES = array(
'sending_error',
'cron_scheduler_error',
- 'other_error',
);
/**
@@ -47,7 +46,6 @@ class Batch_Error_Notifier {
const CATEGORY_CONTENT_MAP = array(
'permissions_error' => 'permissions',
'report_error' => 'report',
- 'network_error' => 'network',
'server_error' => 'server',
);
@@ -271,7 +269,7 @@ private function build_template_data( $content_key ) {
$title = Content_Map::get_title( 'error-email' );
}
- $body_args = $this->get_body_args( $content_key );
+ $body_args = Content_Map::get_body_args( $content_key, $this->golinks );
$body = Content_Map::get_body_with_args( $content_key, $body_args );
$domain = $this->get_site_domain();
@@ -299,55 +297,6 @@ private function build_template_data( $content_key ) {
);
}
- /**
- * Gets sprintf arguments for Content_Map body placeholders.
- *
- * Maps each content key to the URLs that fill its `%s` / `%1$s` / `%2$s`
- * placeholders. Keys without placeholders return an empty array.
- *
- * @since 1.175.0
- *
- * @param string $content_key Content_Map key.
- * @return array Ordered sprintf arguments for the body paragraphs.
- */
- private function get_body_args( $content_key ) {
- $link_style = 'color:#108080;';
- $help_url = add_query_arg( 'doc', 'email-reporting', 'https://sitekit.withgoogle.com/support/' );
-
- // URLs are internally generated (golinks, add_query_arg) and safe.
- // Escaping is handled by wp_kses() in the HTML template and
- // wp_strip_all_tags() in the plain text renderer.
- switch ( $content_key ) {
- case 'error-email-report-search-console':
- $settings_url = add_query_arg( 'module', 'search-console', $this->golinks->get_url( 'settings' ) );
- return array(
- '',
- '',
- '',
- '',
- );
-
- case 'error-email-report-analytics-4':
- $settings_url = add_query_arg( 'module', 'analytics-4', $this->golinks->get_url( 'settings' ) );
- return array(
- '',
- '',
- '',
- '',
- );
-
- case 'error-email-permissions-search-console':
- case 'error-email-permissions-analytics-4':
- return array(
- '',
- '',
- );
-
- default:
- return array();
- }
- }
-
/**
* Gets the site domain including subdirectory context.
*
diff --git a/includes/Core/Email_Reporting/Content_Map.php b/includes/Core/Email_Reporting/Content_Map.php
index 3302eac5d2f..f2f5181390e 100644
--- a/includes/Core/Email_Reporting/Content_Map.php
+++ b/includes/Core/Email_Reporting/Content_Map.php
@@ -10,6 +10,8 @@
namespace Google\Site_Kit\Core\Email_Reporting;
+use Google\Site_Kit\Core\Golinks\Golinks;
+
/**
* Class for mapping email template content (titles and body).
*
@@ -155,10 +157,13 @@ public static function get_graphic_config( $template_name ) {
protected static function get_all_titles() {
return array(
/* translators: 1: opening anchor tag with mailto link, 2: inviter email address, 3: closing anchor tag */
- 'invitation-email' => __( '%1$s%2$s%3$s invited you to receive periodic performance reports', 'google-site-kit' ),
- 'subscription-confirmation' => __( 'Success! You’re subscribed to Site Kit reports', 'google-site-kit' ),
- 'error-email' => __( 'Email reports are failing to send', 'google-site-kit' ),
- 'error-email-cron-scheduler' => __( 'Email reports are failing to send', 'google-site-kit' ),
+ 'invitation-email' => __( '%1$s%2$s%3$s invited you to receive periodic performance reports', 'google-site-kit' ),
+ 'subscription-confirmation' => __( 'Success! You’re subscribed to Site Kit reports', 'google-site-kit' ),
+ 'error-email' => __( 'Email reports are failing to send', 'google-site-kit' ),
+ 'error-email-permissions-search-console' => __( 'Action needed: your Site Kit report couldn’t be generated', 'google-site-kit' ),
+ 'error-email-permissions-analytics-4' => __( 'Action needed: your Site Kit report couldn’t be generated', 'google-site-kit' ),
+ 'error-email-report-search-console' => __( 'Action needed: your Site Kit report couldn’t be generated', 'google-site-kit' ),
+ 'error-email-report-analytics-4' => __( 'Action needed: your Site Kit report couldn’t be generated', 'google-site-kit' ),
);
}
@@ -184,9 +189,6 @@ protected static function get_all_bodies() {
'error-email' => array(
__( 'We were unable to generate your report due to a server error. To fix this, contact your host. Report delivery will automatically resume once the issue is resolved.', 'google-site-kit' ),
),
- 'error-email-cron-scheduler' => array(
- __( 'We were unable to deliver your report, likely due to a WP-Cron configuration error in your WordPress site’s system settings. To fix this, contact your administrator or get help. Report delivery will automatically resume once the issue is resolved.', 'google-site-kit' ),
- ),
// Opening/closing tag placeholders keep inline styles and HTML
// out of translation strings. Inline color styles are required
// because many email clients strip or ignore CSS classes.
@@ -212,4 +214,52 @@ protected static function get_all_bodies() {
),
);
}
+
+ /**
+ * Gets sprintf arguments for body placeholders.
+ *
+ * Maps each content key to the styled anchor tags that fill its
+ * `%s` / `%1$s` / `%2$s` placeholders. Keys without placeholders
+ * return an empty array.
+ *
+ * @since n.e.x.t
+ *
+ * @param string $content_key Content key (e.g. 'error-email-report-analytics-4').
+ * @param Golinks $golinks Golinks instance for building URLs.
+ * @return array Ordered sprintf arguments for the body paragraphs.
+ */
+ public static function get_body_args( $content_key, Golinks $golinks ) {
+ $link_style = 'color:#108080;';
+ $help_url = add_query_arg( 'doc', 'email-reporting', 'https://sitekit.withgoogle.com/support/' );
+
+ switch ( $content_key ) {
+ case 'error-email-report-search-console':
+ $settings_url = add_query_arg( 'module', 'search-console', $golinks->get_url( 'settings' ) );
+ return array(
+ '',
+ '',
+ '',
+ '',
+ );
+
+ case 'error-email-report-analytics-4':
+ $settings_url = add_query_arg( 'module', 'analytics-4', $golinks->get_url( 'settings' ) );
+ return array(
+ '',
+ '',
+ '',
+ '',
+ );
+
+ case 'error-email-permissions-search-console':
+ case 'error-email-permissions-analytics-4':
+ return array(
+ '',
+ '',
+ );
+
+ default:
+ return array();
+ }
+ }
}
diff --git a/tests/phpunit/integration/Core/Email_Reporting/Batch_Error_NotifierTest.php b/tests/phpunit/integration/Core/Email_Reporting/Batch_Error_NotifierTest.php
index 22ac6b2ded8..1213919e1d4 100644
--- a/tests/phpunit/integration/Core/Email_Reporting/Batch_Error_NotifierTest.php
+++ b/tests/phpunit/integration/Core/Email_Reporting/Batch_Error_NotifierTest.php
@@ -98,7 +98,6 @@ public function data_non_sendable_categories() {
return array(
'sending_error' => array( 'sending_error' ),
'cron_scheduler_error' => array( 'cron_scheduler_error' ),
- 'other_error' => array( 'other_error' ),
);
}
@@ -133,7 +132,6 @@ public function data_sendable_categories() {
return array(
'permissions_error' => array( 'permissions_error', 'error-email' ),
'report_error' => array( 'report_error', 'error-email' ),
- 'network_error' => array( 'network_error', 'error-email' ),
'server_error' => array( 'server_error', 'error-email' ),
);
}
@@ -305,8 +303,7 @@ public function test_uses_module_specific_content_when_available( $category_id,
self::factory()->user->create( array( 'role' => 'administrator' ) );
$this->set_up_batch_with_category_and_module( $category_id, $module_slug );
- // Module-specific titles were removed; all error emails use the generic error-email title.
- $expected_subject = Content_Map::get_title( 'error-email' );
+ $expected_subject = Content_Map::get_title( $expected_content_key );
$this->batch_query->expects( $this->once() )
->method( 'mark_batch_admin_notified' )
@@ -358,9 +355,9 @@ public function test_falls_back_to_generic_error_when_no_module_match() {
public function test_falls_back_to_generic_error_for_unknown_module() {
self::factory()->user->create( array( 'role' => 'administrator' ) );
- $this->set_up_batch_with_category_and_module( 'network_error', 'some-unknown-module' );
+ $this->set_up_batch_with_category_and_module( 'server_error', 'some-unknown-module' );
- // No module-specific body for network_error + some-unknown-module, falls back to generic error-email.
+ // No module-specific body for server_error + some-unknown-module, falls back to generic error-email.
$expected_subject = Content_Map::get_title( 'error-email' );
$this->email_sender->method( 'build_headers' )->willReturn( array() );