From 5eb8ad87fcbb3ace71efe8ba87e718ee05dc1811 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Sat, 14 Apr 2018 11:41:23 +0800 Subject: [PATCH] MDL-61966 block_myoverview: Update to provider for user preferences. --- .../myoverview/classes/privacy/provider.php | 29 +++++-- .../myoverview/lang/en/block_myoverview.php | 2 +- blocks/myoverview/tests/privacy_test.php | 80 +++++++++++++++++++ 3 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 blocks/myoverview/tests/privacy_test.php diff --git a/blocks/myoverview/classes/privacy/provider.php b/blocks/myoverview/classes/privacy/provider.php index 9f46f60ed2f..d0ee9e8b30b 100644 --- a/blocks/myoverview/classes/privacy/provider.php +++ b/blocks/myoverview/classes/privacy/provider.php @@ -27,20 +27,35 @@ namespace block_myoverview\privacy; defined('MOODLE_INTERNAL') || die(); /** - * Privacy Subsystem for block_myoverview implementing null_provider. + * Privacy Subsystem for block_myoverview. * * @copyright 2018 Zig Tan * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class provider implements \core_privacy\local\metadata\null_provider { +class provider implements \core_privacy\local\metadata\provider, \core_privacy\local\request\user_preference_provider { /** - * Get the language string identifier with the component's language - * file to explain why this plugin stores no data. + * Returns meta-data information about the myoverview block. * - * @return string + * @param \core_privacy\local\metadata\collection $collection A collection of meta-data. + * @return \core_privacy\local\metadata\collection Return the collection of meta-data. */ - public static function get_reason() : string { - return 'privacy:metadata'; + public static function get_metadata(\core_privacy\local\metadata\collection $collection) : + \core_privacy\local\metadata\collection { + $collection->add_user_preference('block_myoverview_last_tab', 'privacy:metadata:overviewlasttab'); + return $collection; + } + + /** + * Export all user preferences for the myoverview block + * + * @param int $userid The userid of the user whose data is to be exported. + */ + public static function export_user_preferences(int $userid) { + $preference = get_user_preferences('block_myoverview_last_tab', null, $userid); + if (isset($preference)) { + \core_privacy\local\request\writer::export_user_preference('block_myoverview', 'block_myoverview_last_tab', + $preference, get_string('privacy:metadata:overviewlasttab', 'block_myoverview')); + } } } diff --git a/blocks/myoverview/lang/en/block_myoverview.php b/blocks/myoverview/lang/en/block_myoverview.php index c762db04ee5..a3ca64e2625 100644 --- a/blocks/myoverview/lang/en/block_myoverview.php +++ b/blocks/myoverview/lang/en/block_myoverview.php @@ -44,4 +44,4 @@ $string['sortbydates'] = 'Sort by dates'; $string['timeline'] = 'Timeline'; $string['viewcourse'] = 'View course'; $string['viewcoursename'] = 'View course {$a}'; -$string['privacy:metadata'] = 'The Course overview block only shows data stored in other locations.'; +$string['privacy:metadata:overviewlasttab'] = 'This stores the last tab selected by the user on the overview block.'; diff --git a/blocks/myoverview/tests/privacy_test.php b/blocks/myoverview/tests/privacy_test.php new file mode 100644 index 00000000000..875dd033abe --- /dev/null +++ b/blocks/myoverview/tests/privacy_test.php @@ -0,0 +1,80 @@ +. + +/** + * Unit tests for the block_myoverview implementation of the privacy API. + * + * @package block_myoverview + * @category test + * @copyright 2018 Adrian Greeve + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +use \core_privacy\local\request\writer; +use \block_myoverview\privacy\provider; + +/** + * Unit tests for the block_myoverview implementation of the privacy API. + * + * @copyright 2018 Adrian Greeve + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class block_myoverview_privacy_testcase extends \core_privacy\tests\provider_testcase { + + /** + * Ensure that export_user_preferences returns no data if the user has not visited the myoverview block. + */ + public function test_export_user_preferences_no_pref() { + $this->resetAfterTest(); + + $user = $this->getDataGenerator()->create_user(); + provider::export_user_preferences($user->id); + $writer = writer::with_context(\context_system::instance()); + $this->assertFalse($writer->has_any_data()); + } + + /** + * Test that the preference courses is exported properly. + */ + public function test_export_user_preferences_course_preference() { + $this->resetAfterTest(); + + $user = $this->getDataGenerator()->create_user(); + set_user_preference('block_myoverview_last_tab', 'courses', $user); + + provider::export_user_preferences($user->id); + $writer = writer::with_context(\context_system::instance()); + $blockpreferences = $writer->get_user_preferences('block_myoverview'); + $this->assertEquals('courses', $blockpreferences->block_myoverview_last_tab->value); + } + + /** + * Test that the preference timeline is exported properly. + */ + public function test_export_user_preferences_timeline_preference() { + $this->resetAfterTest(); + + $user = $this->getDataGenerator()->create_user(); + set_user_preference('block_myoverview_last_tab', 'timeline', $user); + + provider::export_user_preferences($user->id); + $writer = writer::with_context(\context_system::instance()); + $blockpreferences = $writer->get_user_preferences('block_myoverview'); + $this->assertEquals('timeline', $blockpreferences->block_myoverview_last_tab->value); + } +}