mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 12:40:01 +01:00
MDL-33307 format_weeks - sort out week date display
* Introduce function format_weeks_get_section_dates which is used as the consistent place to calculate the current section start and end date * Rework callback_weeks_get_section_name to not use the above function rather than do crazy needless looping through all sections to work out the current week title. * Change the just introduced is_current renderer function to share the format_weeks_get_section_dates function to ensure both the title and 'current week' are using the same dates to do their job
This commit is contained in:
parent
2ea6533a36
commit
b6283a4970
@ -67,25 +67,20 @@ function callback_weeks_definition() {
|
|||||||
function callback_weeks_get_section_name($course, $section) {
|
function callback_weeks_get_section_name($course, $section) {
|
||||||
// We can't add a node without text
|
// We can't add a node without text
|
||||||
if (!empty($section->name)) {
|
if (!empty($section->name)) {
|
||||||
// Return the name the user set
|
// Return the name the user set.
|
||||||
return format_string($section->name, true, array('context' => get_context_instance(CONTEXT_COURSE, $course->id)));
|
return format_string($section->name, true, array('context' => context_course::instance($course->id)));
|
||||||
} else if ($section->section == 0) {
|
} else if ($section->section == 0) {
|
||||||
// Return the section0name
|
// Return the general section.
|
||||||
return get_string('section0name', 'format_weeks');
|
return get_string('section0name', 'format_weeks');
|
||||||
} else {
|
} else {
|
||||||
// Got to work out the date of the week so that we can show it
|
$dates = format_weeks_get_section_dates($section, $course);
|
||||||
$sections = get_all_sections($course->id);
|
|
||||||
$weekdate = $course->startdate+7200;
|
// We subtract 24 hours for display purposes.
|
||||||
foreach ($sections as $sec) {
|
$dates->end = ($dates->end - 86400);
|
||||||
if ($sec->id == $section->id) {
|
|
||||||
break;
|
$dateformat = ' '.get_string('strftimedateshort');
|
||||||
} else if ($sec->section != 0) {
|
$weekday = userdate($dates->start, $dateformat);
|
||||||
$weekdate += 604800;
|
$endweekday = userdate($dates->end, $dateformat);
|
||||||
}
|
|
||||||
}
|
|
||||||
$strftimedateshort = ' '.get_string('strftimedateshort');
|
|
||||||
$weekday = userdate($weekdate, $strftimedateshort);
|
|
||||||
$endweekday = userdate($weekdate+518400, $strftimedateshort);
|
|
||||||
return $weekday.' - '.$endweekday;
|
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);
|
$ajaxsupport->testedbrowsers = array('MSIE' => 6.0, 'Gecko' => 20061111, 'Safari' => 531, 'Chrome' => 6.0);
|
||||||
return $ajaxsupport;
|
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;
|
||||||
|
}
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
defined('MOODLE_INTERNAL') || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
require_once($CFG->dirroot.'/course/format/renderer.php');
|
require_once($CFG->dirroot.'/course/format/renderer.php');
|
||||||
|
require_once($CFG->dirroot.'/course/format/weeks/lib.php');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,20 +63,18 @@ class format_weeks_renderer extends format_section_renderer_base {
|
|||||||
/**
|
/**
|
||||||
* Is the section passed in the current section?
|
* Is the section passed in the current section?
|
||||||
*
|
*
|
||||||
* @param stdClass $course The course entry from DB
|
|
||||||
* @param stdClass $section The course_section entry from the DB
|
* @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
|
* @return bool true if the section is current
|
||||||
*/
|
*/
|
||||||
protected function is_section_current($section, $course) {
|
protected function is_section_current($section, $course) {
|
||||||
if ($section->section < 1) {
|
if ($section->section < 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$oneweekseconds = 604800;
|
|
||||||
$startdate = $course->startdate + ($oneweekseconds * ($section->section - 1));
|
|
||||||
$enddate = $startdate + $oneweekseconds;
|
|
||||||
|
|
||||||
$timenow = time();
|
$timenow = time();
|
||||||
|
$dates = format_weeks_get_section_dates($section, $course);
|
||||||
|
|
||||||
return (($timenow >= $startdate) && ($timenow < $enddate));
|
return (($timenow >= $dates->start) && ($timenow < $dates->end));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user