From d6639ae1f092f30e393ca77d079ac74317aab338 Mon Sep 17 00:00:00 2001
From: Adrian Greeve <abgreeve@gmail.com>
Date: Mon, 19 Nov 2018 10:54:27 +0800
Subject: [PATCH 1/2] MDL-64063 core_calendar: events by time considers
 enrolment status.

---
 calendar/classes/local/event/data_access/event_vault.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/calendar/classes/local/event/data_access/event_vault.php b/calendar/classes/local/event/data_access/event_vault.php
index 6c42d3c2e53..f4f6378096f 100644
--- a/calendar/classes/local/event/data_access/event_vault.php
+++ b/calendar/classes/local/event/data_access/event_vault.php
@@ -203,7 +203,7 @@ class event_vault implements event_vault_interface {
     ) {
         $courseids = array_map(function($course) {
             return $course->id;
-        }, enrol_get_all_users_courses($user->id));
+        }, enrol_get_all_users_courses($user->id, true));
 
         $groupids = array_reduce($courseids, function($carry, $courseid) use ($user) {
             $groupings = groups_get_user_groups($courseid, $user->id);
-- 
2.17.1


From 2d5dc7af43615baee6d38d65285d84b2904813f2 Mon Sep 17 00:00:00 2001
From: Adrian Greeve <abgreeve@gmail.com>
Date: Mon, 19 Nov 2018 10:54:54 +0800
Subject: [PATCH 2/2] MDL-64063 core_calendar: Unit test for suspended users.

---
 calendar/tests/event_vault_test.php | 31 +++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/calendar/tests/event_vault_test.php b/calendar/tests/event_vault_test.php
index e4a1b21236e..d084d1a25ad 100644
--- a/calendar/tests/event_vault_test.php
+++ b/calendar/tests/event_vault_test.php
@@ -557,6 +557,37 @@ class core_calendar_event_vault_testcase extends advanced_testcase {
         $this->assertEquals('Assignment 1 due date', $usersevents['For user in no groups'][0]->get_name());
     }
 
+    /**
+     * Test that if a user is suspended that events related to that course are not shown.
+     * User 1 is suspended. User 2 is active.
+     */
+    public function test_get_action_events_by_timesort_with_suspended_user() {
+        $this->resetAfterTest();
+        $user1 = $this->getDataGenerator()->create_user();
+        $user2 = $this->getDataGenerator()->create_user();
+        $course = $this->getDataGenerator()->create_course();
+        $this->setAdminuser();
+        $lesson = $this->getDataGenerator()->create_module('lesson', [
+                'name' => 'Lesson 1',
+                'course' => $course->id,
+                'available' => time(),
+                'deadline' => (time() + (60 * 60 * 24 * 5))
+            ]
+        );
+        $this->getDataGenerator()->enrol_user($user1->id, $course->id, null, 'manual', 0, 0, ENROL_USER_SUSPENDED);
+        $this->getDataGenerator()->enrol_user($user2->id, $course->id);
+
+        $factory = new action_event_test_factory();
+        $strategy = new raw_event_retrieval_strategy();
+        $vault = new event_vault($factory, $strategy);
+
+        $user1events = $vault->get_action_events_by_timesort($user1);
+        $this->assertEmpty($user1events);
+        $user2events = $vault->get_action_events_by_timesort($user2);
+        $this->assertCount(1, $user2events);
+        $this->assertEquals('Lesson 1 closes', $user2events[0]->get_name());
+    }
+
     /**
      * Test that get_action_events_by_course returns events after the
      * provided timesort value.
-- 
2.17.1

