From 7746bd01839e30e6ed5902ede5a846d3346b1cbd Mon Sep 17 00:00:00 2001
From: Justus Dieckmann <justusdieckmann@wwu.de>
Date: Sat, 14 Sep 2019 18:55:28 +0200
Subject: [PATCH] Privacy: Implement delete_data_for_all_users_in_context,
 delete_data_for_user

---
 .../table/interaction_remaining_table.php     |  6 +++++-
 classes/privacy/provider.php                  | 19 +++++++++++++++----
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/classes/local/table/interaction_remaining_table.php b/classes/local/table/interaction_remaining_table.php
index 27cc90e..d182632 100644
--- a/classes/local/table/interaction_remaining_table.php
+++ b/classes/local/table/interaction_remaining_table.php
@@ -164,7 +164,11 @@ class interaction_remaining_table extends interaction_table {
         }
         // Otherwise, show latest action commited by user.
         global $CFG;
-        $userlink = \html_writer::link($CFG->wwwroot . '/user/profile.php?id=' . $row->userid, fullname($row));
+        if($row->userid === -1) {
+            $userlink = get_string("anonymous_user");
+        } else {
+            $userlink = \html_writer::link($CFG->wwwroot . '/user/profile.php?id=' . $row->userid, fullname($row));
+        }
         $interactionlib = lib_manager::get_step_interactionlib($row->subpluginname);
         return $interactionlib->get_action_string($row->action, $userlink);
     }
diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php
index 798377f..a77ccf2 100644
--- a/classes/privacy/provider.php
+++ b/classes/privacy/provider.php
@@ -26,9 +26,7 @@ namespace tool_lifecycle\privacy;
 
 use core_privacy\local\metadata\collection;
 use core_privacy\local\request\approved_contextlist;
-use core_privacy\local\request\context;
 use core_privacy\local\request\contextlist;
-use core_privacy\local\request\core_user_data_provider;
 use core_privacy\local\request\writer;
 
 defined('MOODLE_INTERNAL') || die();
@@ -103,7 +101,12 @@ class provider implements \core_privacy\local\metadata\provider,
      * @param context $context The specific context to delete data for.
      */
     public static function delete_data_for_all_users_in_context(\context $context) {
-
+        global $DB;
+        if ($context instanceof \context_system) {
+            $sql = "UPDATE {tool_lifecycle_action_log}
+                    SET userid = -1";
+            $DB->execute($sql);
+        }
     }
 
     /**
@@ -112,6 +115,14 @@ class provider implements \core_privacy\local\metadata\provider,
      * @param approved_contextlist $contextlist The approved contexts and user information to delete information for.
      */
     public static function delete_data_for_user(approved_contextlist $contextlist) {
-        // TODO: Implement delete_data_for_user() method.
+        global $DB;
+        foreach ($contextlist->get_contexts() as $context) {
+            if ($context instanceof \context_system) {
+                $sql = "UPDATE {tool_lifecycle_action_log}
+                    SET userid = -1
+                    WHERE userid = :userid";
+                $DB->execute($sql, array('userid' => $contextlist->get_user()->id));
+            }
+        }
     }
 }
-- 
GitLab