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