diff --git a/lang/en/my.php b/lang/en/my.php index ea1e7347edd7..216b1ab08d04 100644 --- a/lang/en/my.php +++ b/lang/en/my.php @@ -38,3 +38,4 @@ $string['reseteveryonesprofile'] = 'Reset profile for all users'; $string['resetpage'] = 'Reset page to default'; $string['reseterror'] = 'There was an error resetting your page'; +$string['privacy:metadata:core_my:preference:user_home_page_preference'] = 'The user home page preference configured for the Dashboard page.'; diff --git a/my/classes/privacy/provider.php b/my/classes/privacy/provider.php new file mode 100644 index 000000000000..4aef2a4bba5c --- /dev/null +++ b/my/classes/privacy/provider.php @@ -0,0 +1,76 @@ +. +/** + * Privacy Subsystem implementation for core_my. + * + * @package core_my + * @copyright 2018 Zig Tan + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace core_my\privacy; + +use core_privacy\local\metadata\collection; +use core_privacy\local\request\approved_contextlist; +use core_privacy\local\request\context; +use core_privacy\local\request\contextlist; +use core_privacy\local\request\writer; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Privacy Subsystem for core_my implementing metadata, plugin, and user_preference providers. + * + * @copyright 2018 Zig Tan + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class provider implements + \core_privacy\local\metadata\provider, + \core_privacy\local\request\user_preference_provider { + + /** + * Returns meta data about this system. + * + * @param collection $collection The initialised collection to add items to. + * @return collection A listing of user data stored through this system. + */ + public static function get_metadata(collection $collection) : collection { + $collection->add_user_preference( + 'user_home_page_preference', + 'privacy:metadata:core_my:preference:user_home_page_preference' + ); + + return $collection; + } + + /** + * Export all user preferences for the plugin. + * + * @param int $userid The userid of the user whose data is to be exported. + */ + public static function export_user_preferences(int $userid) { + $userhomepagepreference = get_user_preferences('user_home_page_preference', null, $userid); + + if (null !== $userhomepagepreference) { + writer::export_user_preference( + 'core_my', + 'user_home_page_preference', + $userhomepagepreference, + get_string('privacy:metadata:core_my:preference:user_home_page_preference', 'core_my') + ); + } + } + +} diff --git a/my/tests/privacy_test.php b/my/tests/privacy_test.php new file mode 100644 index 000000000000..fb9aaec3401c --- /dev/null +++ b/my/tests/privacy_test.php @@ -0,0 +1,73 @@ +. + +/** + * Unit tests for the core_my implementation of the privacy API. + * + * @package core_my + * @category test + * @copyright 2018 Zig Tan + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +use \core_privacy\local\request\writer; +use \core_my\privacy\provider; + +/** + * Unit tests for the core_my implementation of the privacy API. + * + * @copyright 2018 Zig Tan + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class core_my_privacy_testcase extends \core_privacy\tests\provider_testcase { + + /** + * Test for provider::test_export_user_preferences(). + */ + public function test_export_user_preferences() { + global $DB; + + // Test setup. + $this->resetAfterTest(true); + $user = $this->getDataGenerator()->create_user(); + $this->setUser($user); + + // Add a user home page preference for the User. + set_user_preference('user_home_page_preference', HOMEPAGE_MY); + + // Test the user preference exists. + $params = [ + 'userid' => $user->id, + 'name' => 'user_home_page_preference' + ]; + + $preferences = $DB->get_record('user_preferences', $params); + $this->assertEquals('user_home_page_preference', $preferences->name); + + // Test the user preferences export contains 1 user preference record for the User. + provider::export_user_preferences($user->id); + $contextuser = context_user::instance($user->id); + $writer = writer::with_context($contextuser); + $this->assertTrue($writer->has_any_data()); + + $prefs = $writer->get_user_preferences('core_my'); + $this->assertCount(1, (array) $prefs); + $this->assertEquals(HOMEPAGE_MY, $prefs->user_home_page_preference->value); + } + +}