From a1d51ad8c6095fa519f156debb2ecdf39d515357 Mon Sep 17 00:00:00 2001
From: Andrew Nicols <andrew@nicols.co.uk>
Date: Wed, 17 Oct 2018 13:11:51 +0800
Subject: [PATCH] MDL-62560 tool_dataprivacy: Add status logging

---
 .../classes/expired_contexts_manager.php      | 35 +++++++++++++++++++
 .../classes/task/delete_expired_contexts.php  |  2 +-
 .../classes/task/expired_retention_period.php |  2 +-
 3 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/admin/tool/dataprivacy/classes/expired_contexts_manager.php b/admin/tool/dataprivacy/classes/expired_contexts_manager.php
index 5be1f5fb75d..58b4f0a7f9b 100644
--- a/admin/tool/dataprivacy/classes/expired_contexts_manager.php
+++ b/admin/tool/dataprivacy/classes/expired_contexts_manager.php
@@ -47,34 +47,62 @@ class expired_contexts_manager {
     /** @var manager The privacy manager */
     protected $manager = null;
 
+    /** @var \progress_trace Trace tool for logging */
+    protected $trace = null;
+
+    /**
+     * Constructor for the expired_contexts_manager.
+     *
+     * @param   \progress_trace $trace
+     */
+    public function __construct(\progress_trace $trace = null) {
+        if (null === $trace) {
+            $trace = new \null_progress_trace();
+        }
+
+        $this->trace = $trace;
+    }
+
     /**
      * Flag expired contexts as expired.
      *
      * @return  int[]   The number of contexts flagged as expired for courses, and users.
      */
     public function flag_expired_contexts() : array {
+        $this->trace->output('Checking requirements');
         if (!$this->check_requirements()) {
+            $this->trace->output('Requirements not met. Cannot process expired retentions.', 1);
             return [0, 0];
         }
 
         // Clear old and stale records first.
+        $this->trace->output('Clearing obselete records.', 0);
         static::clear_old_records();
+        $this->trace->output('Done.', 1);
 
+        $this->trace->output('Calculating potential course expiries.', 0);
         $data = static::get_nested_expiry_info_for_courses();
+
         $coursecount = 0;
+        $this->trace->output('Updating course expiry data.', 0);
         foreach ($data as $expiryrecord) {
             if ($this->update_from_expiry_info($expiryrecord)) {
                 $coursecount++;
             }
         }
+        $this->trace->output('Done.', 1);
 
+        $this->trace->output('Calculating potential user expiries.', 0);
         $data = static::get_nested_expiry_info_for_user();
+
         $usercount = 0;
+        $this->trace->output('Updating user expiry data.', 0);
         foreach ($data as $expiryrecord) {
             if ($this->update_from_expiry_info($expiryrecord)) {
                 $usercount++;
             }
         }
+        $this->trace->output('Done.', 1);
 
         return [$coursecount, $usercount];
     }
@@ -328,16 +356,21 @@ class expired_contexts_manager {
      * @return  int[]       The number of deleted contexts.
      */
     public function process_approved_deletions() : array {
+        $this->trace->output('Checking requirements');
         if (!$this->check_requirements()) {
+            $this->trace->output('Requirements not met. Cannot process expired retentions.', 1);
             return [0, 0];
         }
 
+        $this->trace->output('Fetching all approved and expired contexts for deletion.');
         $expiredcontexts = expired_context::get_records(['status' => expired_context::STATUS_APPROVED]);
+        $this->trace->output('Done.', 1);
         $totalprocessed = 0;
         $usercount = 0;
         $coursecount = 0;
         foreach ($expiredcontexts as $expiredctx) {
             $context = \context::instance_by_id($expiredctx->get('contextid'), IGNORE_MISSING);
+
             if (empty($context)) {
                 // Unable to process this request further.
                 // We have no context to delete.
@@ -345,7 +378,9 @@ class expired_contexts_manager {
                 continue;
             }
 
+            $this->trace->output("Deleting data for " . $context->get_context_name(), 2);
             if ($this->delete_expired_context($expiredctx)) {
+                $this->trace->output("Done.", 3);
                 if ($context instanceof \context_user) {
                     $usercount++;
                 } else {
diff --git a/admin/tool/dataprivacy/classes/task/delete_expired_contexts.php b/admin/tool/dataprivacy/classes/task/delete_expired_contexts.php
index 8a4f96b5148..a91e8da5e5b 100644
--- a/admin/tool/dataprivacy/classes/task/delete_expired_contexts.php
+++ b/admin/tool/dataprivacy/classes/task/delete_expired_contexts.php
@@ -54,7 +54,7 @@ class delete_expired_contexts extends scheduled_task {
      * Run the task to delete context instances based on their retention periods.
      */
     public function execute() {
-        $manager = new \tool_dataprivacy\expired_contexts_manager();
+        $manager = new \tool_dataprivacy\expired_contexts_manager(new \text_progress_trace());
         list($courses, $users) = $manager->process_approved_deletions();
         mtrace("Processed deletions for {$courses} course contexts, and {$users} user contexts as expired");
     }
diff --git a/admin/tool/dataprivacy/classes/task/expired_retention_period.php b/admin/tool/dataprivacy/classes/task/expired_retention_period.php
index f00b51a3519..c7068b6e893 100644
--- a/admin/tool/dataprivacy/classes/task/expired_retention_period.php
+++ b/admin/tool/dataprivacy/classes/task/expired_retention_period.php
@@ -54,7 +54,7 @@ class expired_retention_period extends scheduled_task {
      * Run the task to flag context instances as expired.
      */
     public function execute() {
-        $manager = new \tool_dataprivacy\expired_contexts_manager();
+        $manager = new \tool_dataprivacy\expired_contexts_manager(new \text_progress_trace());
         list($courses, $users) = $manager->flag_expired_contexts();
         mtrace("Flagged {$courses} course contexts, and {$users} user contexts as expired");
     }