define("QUIZ_MAX_NUMBER_ANSWERS", "10");
-define("QUIZ_MAX_EVENT_LENGTH", "43200"); // 5 days maximum
+define("QUIZ_MAX_EVENT_LENGTH", "432000"); // 5 days maximum
/// FUNCTIONS ///////////////////////////////////////////////////////////////////
$event->userid = 0;
$event->modulename = 'quiz';
$event->instance = $quiz->id;
- $event->eventtype = 'start';
+ $event->eventtype = 'open';
$event->timestart = $quiz->timeopen;
$event->timeduration = ($quiz->timeclose - $quiz->timeopen);
- if ($event->timeduration > QUIZ_MAX_EVENT_LENGTH) { /// Ignore long durations
- $event->timeduration = 1;
+
+ if ($event->timeduration > QUIZ_MAX_EVENT_LENGTH) { /// Long durations create two events
+ $event2 = $event;
+
+ $event->name .= ' ('.get_string('quizopens', 'quiz').')';
+ $event->timeduration = 0;
+
+ $event2->timestart = $quiz->timeclose;
+ $event2->eventtype = 'close';
+ $event2->timeduration = 0;
+ $event2->name .= ' ('.get_string('quizcloses', 'quiz').')';
+
+ add_event($event2);
}
+
add_event($event);
return $quiz->id;
}
}
- $event = NULL;
+ if ($events = get_records_select('event', "modulename = 'quiz' AND instance = '$quiz->id' ORDER BY timestart")) {
- if ($event->id = get_field('event', 'id', 'modulename', 'quiz', 'instance', $quiz->id)) {
+ $event = array_shift($events);
+ if (!empty($events)) {
+ $event2old = array_shift($events);
+ if (!empty($events)) {
+ foreach ($events as $badevent) {
+ delete_records('event', 'id', $badevent->id);
+ }
+ }
+ } else {
+ $event2old = NULL;
+ }
$event->name = $quiz->name;
$event->description = $quiz->intro;
+ $event->courseid = $quiz->course;
+ $event->groupid = 0;
+ $event->userid = 0;
+ $event->modulename = 'quiz';
+ $event->instance = $quiz->id;
+ $event->visible = instance_is_visible('quiz', $quiz->id);
$event->timestart = $quiz->timeopen;
+ $event->eventtype = 'open';
$event->timeduration = ($quiz->timeclose - $quiz->timeopen);
- if ($event->timeduration > QUIZ_MAX_EVENT_LENGTH) { /// Ignore long durations
- $event->timeduration = 1;
+
+ if ($event->timeduration > QUIZ_MAX_EVENT_LENGTH) { /// Set up two events
+
+ $event2 = $event;
+
+ $event->name = $quiz->name.' ('.get_string('quizopens', 'quiz').')';
+ $event->timeduration = 0;
+
+ $event2->name = $quiz->name.' ('.get_string('quizcloses', 'quiz').')';
+ $event2->timestart = $quiz->timeclose;
+ $event2->eventtype = 'close';
+ $event2->timeduration = 0;
+
+ if (empty($event2old->id)) {
+ unset($event2->id);
+ add_event($event2);
+ } else {
+ $event2->id = $event2old->id;
+ update_event($event2);
+ }
+ } else if (!empty($event2->id)) {
+ delete_event($event2->id);
}
update_event($event);
$result = false;
}
+ if (! delete_records('event', 'modulename', 'quiz', 'instance', $quiz->id)) {
+ $result = false;
+ }
+
return $result;
}
function quiz_refresh_events($courseid = 0) {
// This standard function will check all instances of this module
// and make sure there are up-to-date events created for each of them.
-// If courseid = 0, then every assignment event in the site is checked, else
-// only assignment events belonging to the course specified are checked.
+// If courseid = 0, then every quiz event in the site is checked, else
+// only quiz events belonging to the course specified are checked.
// This function is used, in its new format, by restore_refresh_events()
if ($courseid == 0) {
foreach ($quizzes as $quiz) {
$event = NULL;
+ $event2 = NULL;
+ $event2old = NULL;
+
+ if ($events = get_records_select('event', "modulename = 'quiz' AND instance = '$quiz->id' ORDER BY timestart")) {
+ $event = array_shift($events);
+ if (!empty($events)) {
+ $event2old = array_shift($events);
+ if (!empty($events)) {
+ foreach ($events as $badevent) {
+ delete_records('event', 'id', $badevent->id);
+ }
+ }
+ }
+ }
+
$event->name = addslashes($quiz->name);
$event->description = addslashes($quiz->intro);
+ $event->courseid = $quiz->course;
+ $event->groupid = 0;
+ $event->userid = 0;
+ $event->modulename = 'quiz';
+ $event->instance = $quiz->id;
+ $event->visible = instance_is_visible('quiz', $quiz->id);
$event->timestart = $quiz->timeopen;
+ $event->eventtype = 'open';
$event->timeduration = ($quiz->timeclose - $quiz->timeopen);
- if ($event->timeduration > QUIZ_MAX_EVENT_LENGTH) { /// Ignore long durations
- $event->timeduration = 1;
- }
- if ($event->id = get_field('event', 'id', 'modulename', 'quiz', 'instance', $quiz->id)) {
- update_event($event);
+ if ($event->timeduration > QUIZ_MAX_EVENT_LENGTH) { /// Set up two events
- } else {
- $event->courseid = $quiz->course;
- $event->groupid = 0;
- $event->userid = 0;
- $event->modulename = 'quiz';
- $event->instance = $quiz->id;
- $event->eventtype = 'start';
- $event->visible = get_field('course_modules', 'visible', 'module', $moduleid, 'instance', $quiz->id);
+ $event2 = $event;
+ $event->name = addslashes($quiz->name).' ('.get_string('quizopens', 'quiz').')';
+ $event->timeduration = 0;
+
+ $event2->name = addslashes($quiz->name).' ('.get_string('quizcloses', 'quiz').')';
+ $event2->timestart = $quiz->timeclose;
+ $event2->eventtype = 'close';
+ $event2->timeduration = 0;
+
+ if (empty($event2old->id)) {
+ unset($event2->id);
+ add_event($event2);
+ } else {
+ $event2->id = $event2old->id;
+ update_event($event2);
+ }
+ } else if (!empty($event2->id)) {
+ delete_event($event2->id);
+ }
+
+ if (empty($event->id)) {
add_event($event);
+ } else {
+ update_event($event);
}
+
}
return true;
}