MDL-61848 auth_manual: Implement Privacy API
authorcescobedo <carlos.escobedo@gmail.com>
Thu, 19 Apr 2018 22:08:30 +0000 (00:08 +0200)
committercescobedo <carlos.escobedo@gmail.com>
Thu, 19 Apr 2018 22:08:30 +0000 (00:08 +0200)
auth/manual/classes/privacy/provider.php [new file with mode: 0644]
auth/manual/lang/en/auth_manual.php
auth/manual/tests/privacy_provider_test.php [new file with mode: 0644]

diff --git a/auth/manual/classes/privacy/provider.php b/auth/manual/classes/privacy/provider.php
new file mode 100644 (file)
index 0000000..73bb78b
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+/**
+ * Privacy Subsystem implementation for auth_manual.
+ *
+ * @package    auth_manual
+ * @copyright  2018 Carlos Escobedo <carlos@moodle.com>
+ * @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 <carlos@moodle.com>
+ * @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')
+            );
+        }
+    }
+}
index a919797..60917e1 100644 (file)
@@ -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 (file)
index 0000000..5572291
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+/**
+ * Base class for unit tests for auth_manual.
+ *
+ * @package    auth_manual
+ * @category   test
+ * @copyright  2018 Carlos Escobedo <carlos@moodle.com>
+ * @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 <carlos@moodle.com>
+ * @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);
+    }
+}