From b6e9d54a3853c9bfce0485b8911fd8b7936a9014 Mon Sep 17 00:00:00 2001 From: Jake Dallimore Date: Thu, 3 Feb 2022 16:22:20 +0800 Subject: [PATCH] MDL-73758 availability: fix info::is_available_for_all() Should only return true early when the config setting is disabled, not when it's enabled. --- availability/classes/info.php | 2 +- availability/tests/info_test.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/availability/classes/info.php b/availability/classes/info.php index 0f943bdde88..f7bf34456f3 100644 --- a/availability/classes/info.php +++ b/availability/classes/info.php @@ -233,7 +233,7 @@ abstract class info { */ public function is_available_for_all() { global $CFG; - if (is_null($this->availability) || !empty($CFG->enableavailability)) { + if (is_null($this->availability) || empty($CFG->enableavailability)) { return true; } else { try { diff --git a/availability/tests/info_test.php b/availability/tests/info_test.php index 4108d604923..74a8f5fe7af 100644 --- a/availability/tests/info_test.php +++ b/availability/tests/info_test.php @@ -540,4 +540,34 @@ class info_testcase extends advanced_testcase { $this->assertDebuggingCalled('Error processing availability data for ' . '‘Page1’: Invalid availability text'); } + + /** + * Test for the is_available_for_all() method of the info base class. + * @covers \core_availability\info_module::is_available_for_all + */ + public function test_is_available_for_all() { + global $CFG, $DB; + $this->resetAfterTest(); + $CFG->enableavailability = 0; + + $generator = $this->getDataGenerator(); + $course = $generator->create_course(); + $page = $generator->get_plugin_generator('mod_page')->create_instance(['course' => $course]); + + // Set an availability restriction and reset the modinfo cache. + // The enableavailability setting is disabled so this does not take effect yet. + $notavailable = '{"op":"|","show":true,"c":[{"type":"mock","a":false}]}'; + $DB->set_field('course_modules', 'availability', $notavailable, ['id' => $page->cmid]); + get_fast_modinfo($course, 0, true); + + // Availability is disabled, so we expect this module to be available for everyone. + $modinfo = get_fast_modinfo($course); + $info = new info_module($modinfo->get_cm($page->cmid)); + $this->assertTrue($info->is_available_for_all()); + + // Now, enable availability restrictions, and check again. + // This time, we expect it to return false, because of the access restriction. + $CFG->enableavailability = 1; + $this->assertFalse($info->is_available_for_all()); + } }