From 8978466354ae7046f5984f90e214a97e5c178e7d Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Thu, 13 May 2021 15:03:07 +0100 Subject: [PATCH] MDL-71276 message_email: include alternate email in privacy export. --- .../output/email/classes/privacy/provider.php | 19 +++++++ .../output/email/lang/en/message_email.php | 1 + .../email/tests/privacy/provider_test.php | 50 +++++++++++++++---- 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/message/output/email/classes/privacy/provider.php b/message/output/email/classes/privacy/provider.php index d083d8812d00d..faba246072592 100644 --- a/message/output/email/classes/privacy/provider.php +++ b/message/output/email/classes/privacy/provider.php @@ -30,6 +30,7 @@ use \core_privacy\local\request\contextlist; use \core_privacy\local\request\approved_contextlist; use core_privacy\local\request\userlist; +use core_privacy\local\request\writer; use \core_privacy\local\request\approved_userlist; /** @@ -42,6 +43,7 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\local\request\core_userlist_provider, + \core_privacy\local\request\user_preference_provider, \core_privacy\local\request\plugin\provider { /** @@ -125,4 +127,21 @@ public static function delete_data_for_users(approved_userlist $userlist) { */ public static function delete_data_for_user(approved_contextlist $contextlist) { } + + /** + * Export all user preferences for the plugin + * + * @param int $userid + */ + public static function export_user_preferences(int $userid) { + $preference = get_user_preferences('message_processor_email_email', null, $userid); + if (!empty($preference)) { + writer::export_user_preference( + 'message_email', + 'email', + $preference, + get_string('privacy:preference:email', 'message_email') + ); + } + } } diff --git a/message/output/email/lang/en/message_email.php b/message/output/email/lang/en/message_email.php index 26cc0d8c17c14..06b35ab5ab8bf 100644 --- a/message/output/email/lang/en/message_email.php +++ b/message/output/email/lang/en/message_email.php @@ -43,6 +43,7 @@ $string['privacy:metadata:replytoname'] = 'Name of reply to recipient.'; $string['privacy:metadata:subject'] = 'The subject line of the message.'; $string['privacy:metadata:userfrom'] = 'The user sending the message.'; +$string['privacy:preference:email'] = 'Preferred email notification address'; $string['tasksendemail'] = 'Messages digest mailings'; // Deprecated since Moodle 3.9. diff --git a/message/output/email/tests/privacy/provider_test.php b/message/output/email/tests/privacy/provider_test.php index 0b4ed4204cc03..e7c0e6c9f88f1 100644 --- a/message/output/email/tests/privacy/provider_test.php +++ b/message/output/email/tests/privacy/provider_test.php @@ -13,21 +13,19 @@ // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -/** - * Base class for unit tests for message_email. - * - * @package message_email - * @copyright 2018 Mihail Geshoski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -namespace message_email\privacy; -defined('MOODLE_INTERNAL') || die(); +namespace message_email\privacy; +use context_system; +use core_message_external; +use core_privacy\local\request\writer; use core_privacy\tests\provider_testcase; + /** * Unit tests for message\output\email\classes\privacy\provider.php * + * @package message_email + * @covers \message_email\privacy\provider * @copyright 2018 Mihail Geshoski * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -57,4 +55,38 @@ public function test_get_contexts_for_userid() { $contextlist = \message_email\privacy\provider::get_contexts_for_userid($user->id); $this->assertEmpty($contextlist); } + + /** + * Test exporting user preferences + */ + public function test_export_user_preferences(): void { + global $CFG; + + require_once("{$CFG->dirroot}/message/externallib.php"); + + $user = $this->getDataGenerator()->create_user(); + $this->setUser($user); + + // Submit configuration form, which adds the preferences.. + core_message_external::message_processor_config_form($user->id, 'email', [ + [ + 'name' => 'email_email', + 'value' => 'alternate@example.com', + ], + ]); + + // Switch to admin user (so we can validate preferences of the correct user are being exported). + $this->setAdminUser(); + + provider::export_user_preferences($user->id); + + $writer = writer::with_context(context_system::instance()); + $this->assertTrue($writer->has_any_data()); + + $preferences = $writer->get_user_preferences('message_email'); + $this->assertNotEmpty($preferences->email); + + $this->assertEquals('alternate@example.com', $preferences->email->value); + $this->assertEquals(get_string('privacy:preference:email', 'message_email'), $preferences->email->description); + } }