* @return bool
*/
protected static function is_course_context_expired_or_unprotected_for_user(\context $context, \stdClass $user) {
- $expiryrecords = self::get_nested_expiry_info_for_courses($context->path);
- $info = $expiryrecords[$context->path]->info;
+ if ($context->get_course_context()->instanceid == SITEID) {
+ // The is an activity in the site course (front page).
+ $purpose = data_registry::get_effective_contextlevel_value(CONTEXT_SYSTEM, 'purpose');
+ $info = static::get_expiry_info($purpose);
+
+ } else {
+ $expiryrecords = self::get_nested_expiry_info_for_courses($context->path);
+ $info = $expiryrecords[$context->path]->info;
+ }
+
if ($info->is_fully_expired()) {
// This context is fully expired.
return true;
$this->assertTrue(expired_contexts_manager::is_context_expired_or_unprotected_for_user($blockcontext, $user));
}
+ /**
+ * Test the is_context_expired functions when supplied with the front page course.
+ */
+ public function test_is_context_expired_frontpage() {
+ $this->resetAfterTest();
+
+ $purposes = $this->setup_basics('PT1H', 'PT1H', 'P1D');
+
+ $frontcourse = get_site();
+ $frontcoursecontext = \context_course::instance($frontcourse->id);
+
+ $sitenews = $this->getDataGenerator()->create_module('forum', ['course' => $frontcourse->id]);
+ $cm = get_coursemodule_from_instance('forum', $sitenews->id);
+ $sitenewscontext = \context_module::instance($cm->id);
+
+ $user = $this->getDataGenerator()->create_user(['lastaccess' => time() - YEARSECS]);
+
+ $this->assertFalse(expired_contexts_manager::is_context_expired($frontcoursecontext));
+ $this->assertFalse(expired_contexts_manager::is_context_expired($sitenewscontext));
+
+ $this->assertTrue(expired_contexts_manager::is_context_expired_or_unprotected_for_user($frontcoursecontext, $user));
+ $this->assertTrue(expired_contexts_manager::is_context_expired_or_unprotected_for_user($sitenewscontext, $user));
+
+ // Protecting the course contextlevel does not impact the front page.
+ $purposes->course->set('protected', 1)->save();
+ $this->assertTrue(expired_contexts_manager::is_context_expired_or_unprotected_for_user($frontcoursecontext, $user));
+ $this->assertTrue(expired_contexts_manager::is_context_expired_or_unprotected_for_user($sitenewscontext, $user));
+
+ // Protecting the system contextlevel affects the front page, too.
+ $purposes->system->set('protected', 1)->save();
+ $this->assertFalse(expired_contexts_manager::is_context_expired_or_unprotected_for_user($frontcoursecontext, $user));
+ $this->assertFalse(expired_contexts_manager::is_context_expired_or_unprotected_for_user($sitenewscontext, $user));
+ }
+
/**
* Test the is_context_expired functions when supplied with an expired course.
*/