MDL-61937 mod_data: fix commentarea name
authorMarina Glancy <marina@moodle.com>
Tue, 8 May 2018 06:09:08 +0000 (14:09 +0800)
committerMarina Glancy <marina@moodle.com>
Tue, 8 May 2018 06:39:23 +0000 (14:39 +0800)
mod/data/classes/privacy/provider.php

index 666d8be..e07665b 100644 (file)
@@ -48,9 +48,6 @@ class provider implements
         // This plugin is a core_user_data_provider.
         \core_privacy\local\request\plugin\provider {
 
-    /** @var array stores list of records marked for deletion */
-    protected static $deletedrecords = [];
-
     /**
      * Return the fields which contain personal data.
      *
@@ -324,6 +321,7 @@ class provider implements
         if (!$context instanceof \context_module) {
             return;
         }
+        $recordstobedeleted = [];
 
         $sql = "SELECT " . self::sql_fields() . "
                 FROM {course_modules} cm
@@ -337,10 +335,11 @@ class provider implements
         $rs = $DB->get_recordset_sql($sql, ['cmid' => $context->instanceid, 'modname' => 'data']);
         foreach ($rs as $row) {
             self::mark_data_content_for_deletion($context, $row);
+            $recordstobedeleted[$row->recordid] = $row->recordid;
         }
         $rs->close();
 
-        self::delete_data_records($context);
+        self::delete_data_records($context, $recordstobedeleted);
     }
 
     /**
@@ -356,6 +355,7 @@ class provider implements
         }
 
         $user = $contextlist->get_user();
+        $recordstobedeleted = [];
 
         foreach ($contextlist->get_contexts() as $context) {
             $sql = "SELECT " . self::sql_fields() . "
@@ -372,13 +372,14 @@ class provider implements
                 'modname' => 'data', 'userid' => $user->id]);
             foreach ($rs as $row) {
                 self::mark_data_content_for_deletion($context, $row);
+                $recordstobedeleted[$row->recordid] = $row->recordid;
             }
             $rs->close();
-            self::delete_data_records($context);
+            self::delete_data_records($context, $recordstobedeleted);
         }
 
         // Additionally remove comments this user made on other entries.
-        \core_comment\privacy\provider::delete_comments_for_user($contextlist, 'mod_data', 'entry');
+        \core_comment\privacy\provider::delete_comments_for_user($contextlist, 'mod_data', 'database_entry');
 
         // We do not delete ratings made by this user on other records because it may change grades.
     }
@@ -405,8 +406,6 @@ class provider implements
                     [$context, $recordobj, $fieldobj, $contentobj]);
             }
         }
-
-        self::$deletedrecords[$recordobj->id] = $recordobj->id;
     }
 
     /**
@@ -417,14 +416,15 @@ class provider implements
      * Deletes records from data_content and data_records tables, associated files, tags, comments and ratings.
      *
      * @param \context $context
+     * @param array $recordstobedeleted list of ids of the data records that need to be deleted
      */
-    protected static function delete_data_records($context) {
+    protected static function delete_data_records($context, $recordstobedeleted) {
         global $DB;
-        if (empty(self::$deletedrecords)) {
+        if (empty($recordstobedeleted)) {
             return;
         }
 
-        list($sql, $params) = $DB->get_in_or_equal(self::$deletedrecords, SQL_PARAMS_NAMED);
+        list($sql, $params) = $DB->get_in_or_equal($recordstobedeleted, SQL_PARAMS_NAMED);
 
         // Delete files.
         get_file_storage()->delete_area_files_select($context->id, 'mod_data', 'data_records',
@@ -439,7 +439,5 @@ class provider implements
         \core_comment\privacy\provider::delete_comments_for_all_users_select($context, 'mod_data', 'database_entry', $sql, $params);
         // Delete ratings.
         \core_rating\privacy\provider::delete_ratings_select($context, 'mod_data', 'entry', $sql, $params);
-
-        self::$deletedrecords = [];
     }
 }