diff --git a/course/format/renderer.php b/course/format/renderer.php index d969e8bc7c7af..fb59c386a528e 100644 --- a/course/format/renderer.php +++ b/course/format/renderer.php @@ -92,7 +92,7 @@ protected function section_left_content($section, $course, $onsectionpage) { if ($section->section != 0) { // Only in the non-general sections. - if ($course->marker == $section->section) { + if ($this->is_section_current($section, $course)) { $o = get_accesshide(get_string('currentsection', 'format_'.$course->format)); } } @@ -121,7 +121,7 @@ protected function section_header($section, $course, $onsectionpage) { // Only in the non-general sections. if (!$section->visible) { $sectionstyle = ' hidden'; - } else if ($course->marker == $section->section) { + } else if ($this->is_section_current($section, $course)) { $sectionstyle = ' current'; } $linktitle = ($course->coursedisplay == COURSE_DISPLAY_MULTIPAGE); @@ -669,4 +669,16 @@ protected function format_summary_text($section) { $options->overflowdiv = true; return format_text($summarytext, $section->summaryformat, $options); } + + /** + * Is the section passed in the current section? (Note this isn't strictly + * a renderering method, but neater here). + * + * @param stdClass $course The course entry from DB + * @param stdClass $section The course_section entry from the DB + * @return bool true if the section is current + */ + protected function is_section_current($section, $course) { + return ($course->marker == $section->section); + } } diff --git a/course/format/weeks/lib.php b/course/format/weeks/lib.php index 9201c9e2d6f75..834addadec473 100644 --- a/course/format/weeks/lib.php +++ b/course/format/weeks/lib.php @@ -67,25 +67,20 @@ function callback_weeks_definition() { function callback_weeks_get_section_name($course, $section) { // We can't add a node without text if (!empty($section->name)) { - // Return the name the user set - return format_string($section->name, true, array('context' => get_context_instance(CONTEXT_COURSE, $course->id))); + // Return the name the user set. + return format_string($section->name, true, array('context' => context_course::instance($course->id))); } else if ($section->section == 0) { - // Return the section0name + // Return the general section. return get_string('section0name', 'format_weeks'); } else { - // Got to work out the date of the week so that we can show it - $sections = get_all_sections($course->id); - $weekdate = $course->startdate+7200; - foreach ($sections as $sec) { - if ($sec->id == $section->id) { - break; - } else if ($sec->section != 0) { - $weekdate += 604800; - } - } - $strftimedateshort = ' '.get_string('strftimedateshort'); - $weekday = userdate($weekdate, $strftimedateshort); - $endweekday = userdate($weekdate+518400, $strftimedateshort); + $dates = format_weeks_get_section_dates($section, $course); + + // We subtract 24 hours for display purposes. + $dates->end = ($dates->end - 86400); + + $dateformat = ' '.get_string('strftimedateshort'); + $weekday = userdate($dates->start, $dateformat); + $endweekday = userdate($dates->end, $dateformat); return $weekday.' - '.$endweekday; } } @@ -102,3 +97,23 @@ function callback_weeks_ajax_support() { $ajaxsupport->testedbrowsers = array('MSIE' => 6.0, 'Gecko' => 20061111, 'Safari' => 531, 'Chrome' => 6.0); return $ajaxsupport; } + +/** + * Return the start and end date of the passed section + * + * @param stdClass $section The course_section entry from the DB + * @param stdClass $course The course entry from DB + * @return stdClass property start for startdate, property end for enddate + */ +function format_weeks_get_section_dates($section, $course) { + $oneweekseconds = 604800; + // Hack alert. We add 2 hours to avoid possible DST problems. (e.g. we go into daylight + // savings and the date changes. + $startdate = $course->startdate + 7200; + + $dates = new stdClass(); + $dates->start = $startdate + ($oneweekseconds * ($section->section - 1)); + $dates->end = $dates->start + $oneweekseconds; + + return $dates; +} diff --git a/course/format/weeks/renderer.php b/course/format/weeks/renderer.php index 33d640281b62e..e87936ccbf538 100644 --- a/course/format/weeks/renderer.php +++ b/course/format/weeks/renderer.php @@ -26,6 +26,7 @@ defined('MOODLE_INTERNAL') || die(); require_once($CFG->dirroot.'/course/format/renderer.php'); +require_once($CFG->dirroot.'/course/format/weeks/lib.php'); /** @@ -58,4 +59,22 @@ protected function end_section_list() { protected function page_title() { return get_string('weeklyoutline'); } + + /** + * Is the section passed in the current section? + * + * @param stdClass $section The course_section entry from the DB + * @param stdClass $course The course entry from DB + * @return bool true if the section is current + */ + protected function is_section_current($section, $course) { + if ($section->section < 1) { + return false; + } + + $timenow = time(); + $dates = format_weeks_get_section_dates($section, $course); + + return (($timenow >= $dates->start) && ($timenow < $dates->end)); + } }