From 96ff52548d811f36609ccc0db30a06f3c8de427e Mon Sep 17 00:00:00 2001 From: gbateson Date: Tue, 27 Jan 2009 08:29:55 +0000 Subject: [PATCH] MDL-17679: implement course reset for HotPot module (thanks to Albert Gasset) --- lang/en_utf8/hotpot.php | 1 + mod/hotpot/lib.php | 61 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/lang/en_utf8/hotpot.php b/lang/en_utf8/hotpot.php index 6611c426ff6eb..e44fbc4d90893 100644 --- a/lang/en_utf8/hotpot.php +++ b/lang/en_utf8/hotpot.php @@ -22,6 +22,7 @@ $string['correct'] = 'Correct'; $string['deleteabandoned'] = 'Delete abandoned'; $string['deleteabandonedcheck'] = 'Do you really want to delete all $a abandoned attempts?'; +$string['deleteallattempts'] = 'Delete all attempts'; $string['displaycoursenext'] = 'Display Course page next'; $string['displayhotpotnext'] = 'Display Hot Potatoes quiz next'; $string['displayindexnext'] = 'Display HotPot index next'; diff --git a/mod/hotpot/lib.php b/mod/hotpot/lib.php index 9ac88fc6adc49..11dce951f6683 100644 --- a/mod/hotpot/lib.php +++ b/mod/hotpot/lib.php @@ -2464,4 +2464,65 @@ function getDir(s) { print ''.$html.''; } +/** + * This function is used by the reset_course_userdata function in moodlelib. + * This function will remove all attempts from hotpot quizzes in the specified course. + * @param $data the data submitted from the reset course. + * @return array status array + */ +function hotpot_reset_userdata($data) { + global $CFG; + require_once($CFG->libdir.'/filelib.php'); + + $status = array(); + + if (!empty($data->reset_hotpot_deleteallattempts)) { + + $hotpotids = "SELECT h.id FROM {$CFG->prefix}hotpot h WHERE h.course={$data->courseid}"; + $attemptids = "SELECT a.id FROM {$CFG->prefix}hotpot_attempts a WHERE a.hotpot in ($hotpotids)"; + + delete_records_select('hotpot_responses', "attempt in ($attemptids)"); + delete_records_select('hotpot_details', "attempt in ($attemptids)"); + delete_records_select('hotpot_attempts', "hotpot IN ($hotpotids)"); + + $status[] = array('component' => get_string('modulenameplural', 'hotpot'), + 'item' => get_string('deleteallattempts', 'hotpot'), + 'error' => false); + } + + return $status; +} + +/** + * Called by course/reset.php + * @param $mform form passed by reference + */ +function hotpot_reset_course_form($course) { + print_checkbox('reset_hotpot_deleteallattempts', 1, true, get_string('deleteallattempts', 'hotpot'), '', ''); echo '
'; +} +function hotpot_delete_userdata($data, $showfeedback=true) { + global $CFG; + + if (!empty($data->reset_hotpot_deleteallattempts)) { + + $hotpotids = "SELECT h.id FROM {$CFG->prefix}hotpot h WHERE h.course={$data->courseid}"; + $attemptids = "SELECT a.id FROM {$CFG->prefix}hotpot_attempts a WHERE a.hotpot in ($hotpotids)"; + + delete_records_select('hotpot_responses', "attempt in ($attemptids)"); + delete_records_select('hotpot_details', "attempt in ($attemptids)"); + delete_records_select('hotpot_attempts', "hotpot IN ($hotpotids)"); + + if ($showfeedback) { + notify(get_string('reset').': '.get_string('modulenameplural', 'hotpot'), 'notifysuccess'); + } + } +} + +/** + * Course reset form defaults. + */ +function hotpot_reset_course_form_defaults($course) { + return array('reset_hotpot_deleteallattempts' => 1); +} + ?>