From 0983a1c3d17e8a6db575d98de7bb35e4cccaf16b Mon Sep 17 00:00:00 2001 From: Brendan Heywood Date: Thu, 3 Sep 2020 11:10:48 +1000 Subject: [PATCH] MDL-69600 core: Expose divertallemails config in UI --- admin/settings/server.php | 11 +++++++++++ lang/en/admin.php | 9 +++++++++ lib/moodlelib.php | 2 +- lib/tests/moodlelib_test.php | 20 ++++++++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/admin/settings/server.php b/admin/settings/server.php index 1c3ee186e31..cb586b4017b 100644 --- a/admin/settings/server.php +++ b/admin/settings/server.php @@ -444,6 +444,17 @@ if ($hassiteconfig) { new lang_string('configallowedemaildomains', 'admin'), '')); + $temp->add(new admin_setting_heading('divertallemailsheading', new lang_string('divertallemails', 'admin'), + new lang_string('divertallemailsdetail', 'admin'))); + $temp->add(new admin_setting_configtext('divertallemailsto', + new lang_string('divertallemailsto', 'admin'), + new lang_string('divertallemailsto_desc', 'admin'), + '')); + $temp->add(new admin_setting_configtextarea('divertallemailsexcept', + new lang_string('divertallemailsexcept', 'admin'), + new lang_string('divertallemailsexcept_desc', 'admin'), + '', PARAM_RAW, '50', '4')); + $url = new moodle_url('/admin/testoutgoingmailconf.php'); $link = html_writer::link($url, get_string('testoutgoingmailconf', 'admin')); $temp->add(new admin_setting_heading('testoutgoinmailc', new lang_string('testoutgoingmailconf', 'admin'), diff --git a/lang/en/admin.php b/lang/en/admin.php index 6cbb336abc4..455a2cd0a2f 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -499,6 +499,15 @@ $string['disabled'] = 'Disabled'; $string['disableuserimages'] = 'Disable user profile images'; $string['displayerrorswarning'] = 'Enabling the PHP setting display_errors is not recommended on production sites because some error messages may reveal sensitive information about your server.'; $string['displayloginfailures'] = 'Display login failures'; +$string['divertallemails'] = 'Email diverting'; +$string['divertallemailsdetail'] = 'Used as a safeguard in development environments when testing emails and should not be used in production.'; +$string['divertallemailsexcept'] = 'Email diversion exceptions'; +$string['divertallemailsexcept_desc'] = 'A list of email exception rules separated by either commas or new lines. Each rule is interpreted as a regular expression, eg
simone@acme.com
+.*@acme.com
+fred(\\+.*)?@acme.com
+
'; +$string['divertallemailsto'] = 'Divert all emails'; +$string['divertallemailsto_desc'] = 'If set then all emails will be diverted to this single email address instead.'; $string['dndallowtextandlinks'] = 'Drag and drop upload of text/links'; $string['doclang'] = 'Language for docs'; $string['docroot'] = 'Moodle Docs document root'; diff --git a/lib/moodlelib.php b/lib/moodlelib.php index d1270bceb43..8afd063cdc8 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -5984,7 +5984,7 @@ function email_should_be_diverted($email) { return true; } - $patterns = array_map('trim', explode(',', $CFG->divertallemailsexcept)); + $patterns = array_map('trim', preg_split("/[\s,]+/", $CFG->divertallemailsexcept)); foreach ($patterns as $pattern) { if (preg_match("/$pattern/", $email)) { return false; diff --git a/lib/tests/moodlelib_test.php b/lib/tests/moodlelib_test.php index 0b89adb2dc0..c1fba03dbee 100644 --- a/lib/tests/moodlelib_test.php +++ b/lib/tests/moodlelib_test.php @@ -3297,6 +3297,26 @@ class core_moodlelib_testcase extends advanced_testcase { ), false, ), + 'divertsexceptionsnewline' => array( + 'divertallemailsto' => 'somewhere@elsewhere.com', + 'divertallemailsexcept' => "@dev.com\nfred(\+.*)?@example.com", + array( + 'dev1@dev.com', + 'fred@example.com', + 'fred+verp@example.com', + ), + false, + ), + 'alsodivertsnewline' => array( + 'divertallemailsto' => 'somewhere@elsewhere.com', + 'divertallemailsexcept' => "@dev.com\nfred(\+.*)?@example.com", + array( + 'foo@example.com', + 'test@real.com', + 'fred.jones@example.com', + ), + true, + ), ); }