diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php index c8538fe0880a24ed1a05ccd34ffb9544b2252d9e..c8f318eb499df2abda77fe5eb703d01d4f5bc2c1 100644 --- a/classes/privacy/provider.php +++ b/classes/privacy/provider.php @@ -28,11 +28,10 @@ namespace mod_pdfannotator\privacy; defined('MOODLE_INTERNAL') || die(); use \core_privacy\local\request\approved_contextlist; -use \core_privacy\local\request\deletion_criteria; use \core_privacy\local\request\writer; -use \core_privacy\local\request\helper as request_helper; use \core_privacy\local\metadata\collection; -use \core_privacy\local\request\transform; +use core_privacy\local\request\approved_userlist; +use core_privacy\local\request\userlist; /** * Description of provider @@ -329,27 +328,41 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); // 1. Delete all reports this user made in this annotator. - $DB->delete_records('pdfannotator_reports', ['pdfannotatorid' => $instanceid, 'userid' => $userid]); + $DB->delete_records( + 'pdfannotator_reports', + ['pdfannotatorid' => $instanceid, 'userid' => $userid] + ); // 2. Delete all votes this user made in this annotator. - $sql = "SELECT v.id FROM {pdfannotator_votes} v WHERE v.userid = ? AND v.commentid IN (SELECT c.id FROM {pdfannotator_comments} c WHERE c.pdfannotatorid = ?)"; + $sql = "SELECT v.id + FROM {pdfannotator_votes} v + WHERE v.userid = ? AND v.commentid IN + (SELECT c.id + FROM {pdfannotator_comments} c + WHERE c.pdfannotatorid = ?)"; $votes = $DB->get_records_sql($sql , array($userid, $instanceid)); foreach ($votes as $vote) { $DB->delete_records('pdfannotator_votes', array("id" => $vote->id)); } // 3. Delete all subscriptions this user made in this annotator. - $sql = "SELECT s.id FROM {pdfannotator_subscriptions} s WHERE s.userid = ? AND s.annotationid IN " - . "(SELECT a.id FROM {pdfannotator_annotations} a WHERE a.pdfannotatorid = ?)"; + $sql = "SELECT s.id + FROM {pdfannotator_subscriptions} s + WHERE s.userid = ? AND s.annotationid IN + (SELECT a.id + FROM {pdfannotator_annotations} a + WHERE a.pdfannotatorid = ?)"; $subscriptions = $DB->get_records_sql($sql, array($userid, $instanceid)); foreach ($subscriptions as $subscription) { $DB->delete_records('pdfannotator_subscriptions', array("id" => $subscription->id)); } // 4. Select all comments this user made in this annotator. - $comments = $DB->get_records_sql("SELECT c.* FROM {pdfannotator_comments} c WHERE c.pdfannotatorid = ? AND c.userid = ?", array($instanceid, $userid)); + $sql = "SELECT c.* + FROM {pdfannotator_comments} c + WHERE c.pdfannotatorid = ? AND c.userid = ?"; + $comments = $DB->get_records_sql($sql, array($instanceid, $userid)); foreach ($comments as $comment) { - // Delete question comments, their underlying annotation as well as all answers and subscriptions. if ($comment->isquestion) { self::delete_annotation($comment->annotationid); @@ -389,6 +402,8 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l // 1.2 Delete any votes for these comments. $DB->delete_records('pdfannotator_votes', array("commentid" => $comment->id)); + // Delete any pictures of the comment. + $DB->delete_records('files', array("component" => "mod_pdfannotator", "filearea" => "post", "itemid" => $comment->id)); } // 1.3 Now delete all comments. @@ -508,7 +523,7 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l * Deletes data for users in given userlist's context. * @param approved_userlist $userlist */ - public static function delete_data_for_users(\core_privacy\local\request\approved_userlist $userlist) { + public static function delete_data_for_users(approved_userlist $userlist) { global $DB; $context = $userlist->get_context(); @@ -551,5 +566,13 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l $DB->delete_records_select('pdfannotator_annotations', $sql, $params); $DB->delete_records_select('pdfannotator_reports', $sql, $params); $DB->delete_records_select('pdfannotator_comments', $sql, $params); + + // Delete pictures in comments. + $DB->execute("DELETE FORM {files} imgs + WHERE imgs.component = 'mod_pdfannotator' + AND imgs.filearea = 'post' + AND imgs.userid {$userinsql} + AND imgs.itemid {$commentinsql}", + array_merge($userinparams, $commentinparams)); } } diff --git a/tests/privacy/provider_test.php b/tests/privacy/provider_test.php index d6290d25eb6e2376e5dd480f07cf2f6a4bd2a1c3..d5f60949792f113c4961382aa476a1747fc05f06 100644 --- a/tests/privacy/provider_test.php +++ b/tests/privacy/provider_test.php @@ -17,10 +17,9 @@ namespace mod_pdfannotator\privacy; use mod_pdfannotator\privacy\provider; -use core_privacy\local\request\transform; -use core_privacy\local\request\writer; use core_privacy\local\request\approved_contextlist; use core_privacy\local\request\approved_userlist; +use core_privacy\tests\provider_testcase; use stdClass; defined('MOODLE_INTERNAL') || die(); @@ -37,7 +36,7 @@ require_once(__DIR__ . '/../fixtures/test_target_course_users.php'); * @copyright IT Center RWTH Aachen University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class provider_test extends \core_privacy\tests\provider_testcase { +class provider_test extends provider_testcase { protected $course; protected $cmcontext; @@ -171,5 +170,7 @@ class provider_test extends \core_privacy\tests\provider_testcase { $userlist = new approved_userlist($systemcontext, $component, $this->user->id); // Delete using delete_data_for_user. provider::delete_data_for_users($userlist); + + } } \ No newline at end of file