diff --git a/auth/manual/classes/privacy/provider.php b/auth/manual/classes/privacy/provider.php new file mode 100644 index 00000000000..73bb78b59d2 --- /dev/null +++ b/auth/manual/classes/privacy/provider.php @@ -0,0 +1,72 @@ +. +/** + * Privacy Subsystem implementation for auth_manual. + * + * @package auth_manual + * @copyright 2018 Carlos Escobedo + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace auth_manual\privacy; + +defined('MOODLE_INTERNAL') || die(); + +use \core_privacy\local\request\writer; +use \core_privacy\local\metadata\collection; +use \core_privacy\local\request\transform; + +/** + * Privacy provider for the authentication manual. + * + * @copyright 2018 Carlos Escobedo + * @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 item collection to add items to. + * @return collection A listing of user data stored through this system. + */ + public static function get_metadata(collection $collection) : collection { + // There is a one user preference. + $collection->add_user_preference('auth_manual_passwordupdatetime', + 'privacy:metadata:preference:passwordupdatetime'); + + 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) { + $lastpasswordupdatetime = get_user_preferences('auth_manual_passwordupdatetime', null, $userid); + if ($lastpasswordupdatetime !== null) { + $time = transform::datetime($lastpasswordupdatetime); + writer::export_user_preference('auth_manual', + 'auth_manual_passwordupdatetime', + $time, + get_string('privacy:metadata:preference:passwordupdatetime', 'auth_manual') + ); + } + } +} diff --git a/auth/manual/lang/en/auth_manual.php b/auth/manual/lang/en/auth_manual.php index a9197978bc6..60917e17013 100644 --- a/auth/manual/lang/en/auth_manual.php +++ b/auth/manual/lang/en/auth_manual.php @@ -31,3 +31,4 @@ $string['passwdexpiretime'] = 'Password duration'; $string['passwdexpiretime_desc'] = 'Length of time for which a password is valid.'; $string['pluginname'] = 'Manual accounts'; $string['passwdexpire_settings'] = 'Password expiry settings'; +$string['privacy:metadata:preference:passwordupdatetime'] = 'The date of the last password change.'; diff --git a/auth/manual/tests/privacy_provider_test.php b/auth/manual/tests/privacy_provider_test.php new file mode 100644 index 00000000000..55722915e47 --- /dev/null +++ b/auth/manual/tests/privacy_provider_test.php @@ -0,0 +1,70 @@ +. +/** + * Base class for unit tests for auth_manual. + * + * @package auth_manual + * @category test + * @copyright 2018 Carlos Escobedo + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot.'/auth/manual/auth.php'); + +use \core_privacy\local\request\writer; +use \core_privacy\local\request\transform; +use \auth_manual\privacy\provider; + +/** + * Unit tests for the auth_manual implementation of the privacy API. + * + * @copyright 2018 Carlos Escobedo + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class auth_manual_privacy_testcase extends \core_privacy\tests\provider_testcase { + + /** @var auth_plugin_manual Keeps the authentication plugin. */ + protected $authplugin; + + /** + * Basic setup for these tests. + */ + public function setUp() { + $this->resetAfterTest(true); + $this->authplugin = new auth_plugin_manual(); + } + + /** + * Test to check export_user_preferences. + * returns user preferences data. + */ + public function test_export_user_preferences() { + $user = $this->getDataGenerator()->create_user(); + $this->authplugin->user_update_password($user, 'MyPrivacytestPassword*'); + + provider::export_user_preferences($user->id); + $writer = writer::with_context(\context_system::instance()); + $prefs = $writer->get_user_preferences('auth_manual'); + $time = transform::datetime(get_user_preferences('auth_manual_passwordupdatetime', 0, $user->id)); + + $this->assertEquals($time, $prefs->auth_manual_passwordupdatetime->value); + $this->assertEquals(get_string('privacy:metadata:preference:passwordupdatetime', 'auth_manual'), + $prefs->auth_manual_passwordupdatetime->description); + } +}