diff --git a/course/lib.php b/course/lib.php
index e1dc6d329b9..4dbbd23be44 100644
--- a/course/lib.php
+++ b/course/lib.php
@@ -1763,7 +1763,7 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false,
// see the activity itself, or for staff)
if (!$mod->uservisible) {
echo '
'.$mod->availableinfo.'
';
- } else if ($canviewhidden && !empty($CFG->enableavailability)) {
+ } else if ($canviewhidden && !empty($CFG->enableavailability) && $mod->visible) {
$ci = new condition_info($mod);
$fullinfo = $ci->get_full_information();
if($fullinfo) {
diff --git a/lib/conditionlib.php b/lib/conditionlib.php
index 83b79d343d2..66a75fb5fb3 100644
--- a/lib/conditionlib.php
+++ b/lib/conditionlib.php
@@ -101,16 +101,16 @@ class condition_info {
// Missing basic data from course_modules
if (!isset($cm->availablefrom) || !isset($cm->availableuntil) ||
- !isset($cm->showavailability) || !isset($cm->course)) {
+ !isset($cm->showavailability) || !isset($cm->course) || !isset($cm->visible)) {
if ($expectingmissingget_record('course_modules',array('id'=>$cm->id),
- 'id,course,availablefrom,availableuntil,showavailability');
+ 'id, course, availablefrom, availableuntil, showavailability, visible');
}
$this->cm = clone($cm);
@@ -486,6 +486,16 @@ WHERE
}
}
+ // If the item is marked as 'not visible' then we don't change the available
+ // flag (visible/available are treated distinctly), but we remove any
+ // availability info. If the item is hidden with the eye icon, it doesn't
+ // make sense to show 'Available from ' or similar, because even
+ // when that date arrives it will still not be available unless somebody
+ // toggles the eye icon.
+ if (!$this->cm->visible) {
+ $information = '';
+ }
+
$information=trim($information);
return $available;
}
diff --git a/lib/simpletest/testconditionlib.php b/lib/simpletest/testconditionlib.php
index 61f16c3fb83..3aac6d6ebc1 100644
--- a/lib/simpletest/testconditionlib.php
+++ b/lib/simpletest/testconditionlib.php
@@ -79,7 +79,8 @@ class conditionlib_test extends UnitTestCaseUsingDatabase {
$this->assertEqual(
(object)array('id'=>$id,'showavailability'=>1,
'availablefrom'=>17,'availableuntil'=>398,'course'=>64,
- 'conditionsgrade'=>array(), 'conditionscompletion'=>array()),
+ 'conditionsgrade' => array(), 'conditionscompletion' => array(),
+ 'visible' => 1),
$test->get_full_course_module());
// just the course_modules stuff; check it doesn't request that from db
@@ -87,11 +88,13 @@ class conditionlib_test extends UnitTestCaseUsingDatabase {
$cm->availablefrom=2;
$cm->availableuntil=74;
$cm->course=38;
+ $cm->visible = 1;
$test=new condition_info($cm,CONDITION_MISSING_EXTRATABLE);
$this->assertEqual(
(object)array('id'=>$id,'showavailability'=>0,
'availablefrom'=>2,'availableuntil'=>74,'course'=>38,
- 'conditionsgrade'=>array(), 'conditionscompletion'=>array()),
+ 'conditionsgrade' => array(), 'conditionscompletion' => array(),
+ 'visible' => 1),
$test->get_full_course_module());
// Now let's add some actual grade/completion conditions