Skip to content
Browse files

MDL-34794: Add reset course feature in mod_assign (new assignment (2.3))

  • Loading branch information...
1 parent 935c3d5 commit 72429a10dac3d65cfa2d7c5923038de3e43ccac9 @raymondAntonio raymondAntonio committed Aug 21, 2012
Showing with 138 additions and 0 deletions.
  1. +1 −0 mod/assign/lang/en/assign.php
  2. +66 −0 mod/assign/lib.php
  3. +71 −0 mod/assign/locallib.php
View
1 mod/assign/lang/en/assign.php
@@ -91,6 +91,7 @@
$string['defaultplugins'] = 'Default assignment settings';
$string['defaultplugins_help'] = 'These settings define the defaults for all new assignments.';
$string['defaultteam'] = 'Default team';
+$string['deleteallsubmissions'] = 'Delete all submissions';
$string['deletepluginareyousure'] = 'Delete assignment plugin {$a}: are you sure?';
$string['deletepluginareyousuremessage'] = 'You are about to completely delete the assignment plugin {$a}. This will completely delete everything in the database associated with this assignment plugin. Are you SURE you want to continue?';
$string['deletingplugin'] = 'Deleting plugin {$a}.';
View
66 mod/assign/lib.php
@@ -55,6 +55,72 @@ function assign_delete_instance($id) {
}
/**
+ * This function is used by the reset_course_userdata function in moodlelib.
+ * This function will remove all assignment submissions and feedbacks in the database
+ * and clean up any related data.
+ * @param $data the data submitted from the reset course.
+ * @return array status array
+ */
+function assign_reset_userdata($data) {
+ global $CFG, $DB;
+ require_once($CFG->dirroot . '/mod/assign/locallib.php');
+
+ $status = array();
+ $params = array('courseid'=>$data->courseid);
+ $sql = "SELECT a.id FROM {assign} a WHERE a.course=:courseid";
+ $course = $DB->get_record('course', array('id'=> $data->courseid), '*', MUST_EXIST);
+ if ($assigns = $DB->get_records_sql($sql,$params)) {
+ foreach ($assigns as $assign) {
+ $cm = get_coursemodule_from_instance('assign', $assign->id, $data->courseid, false, MUST_EXIST);
+ $context = context_module::instance($cm->id);
+ $assignment = new assign($context, $cm, $course);
+ $status = array_merge($status, $assignment->reset_userdata($data));
+ }
+ }
+ return $status;
+}
+
+/**
+ * Removes all grades from gradebook
+ *
+ * @param int $courseid The ID of the course to reset
+ * @param string $type Optional type of assignment to limit the reset to a particular assignment type
+ */
+function assign_reset_gradebook($courseid, $type='') {
+ global $CFG, $DB;
+
+ $params = array('moduletype'=>'assign','courseid'=>$courseid);
+ $sql = 'SELECT a.*, cm.idnumber as cmidnumber, a.course as courseid
+ FROM {assign} a, {course_modules} cm, {modules} m
+ WHERE m.name=:moduletype AND m.id=cm.module AND cm.instance=a.id AND a.course=:courseid';
+
+ if ($assignments = $DB->get_records_sql($sql,$params)) {
+ foreach ($assignments as $assignment) {
+ assign_grade_item_update($assignment, 'reset');
+ }
+ }
+}
+
+/**
+ * Implementation of the function for printing the form elements that control
+ * whether the course reset functionality affects the assignment.
+ * @param $mform form passed by reference
+ */
+function assign_reset_course_form_definition(&$mform) {
+ $mform->addElement('header', 'assignheader', get_string('modulenameplural', 'assign'));
+ $mform->addElement('advcheckbox', 'reset_assign_submissions', get_string('deleteallsubmissions','assign'));
+}
+
+/**
+ * Course reset form defaults.
+ * @param object $course
+ * @return array
+ */
+function assign_reset_course_form_defaults($course) {
+ return array('reset_assign_submissions'=>1);
+}
+
+/**
* Update an assignment instance
*
* This is done by calling the update_instance() method of the assignment type class
View
71 mod/assign/locallib.php
@@ -549,6 +549,77 @@ public function delete_instance() {
}
/**
+ * Actual implementation of the reset course functionality, delete all the
+ * assignment submissions for course $data->courseid.
+ *
+ * @param $data the data submitted from the reset course.
+ * @return array status array
+ */
+ public function reset_userdata($data) {
+ global $CFG,$DB;
+
+ $componentstr = get_string('modulenameplural', 'assign');
+ $status = array();
+
+ $fs = get_file_storage();
+ if (!empty($data->reset_assign_submissions)) {
+ // Delete files associated with this assignment.
+ foreach ($this->submissionplugins as $plugin) {
+ $fileareas = array();
+ $fileareas = $plugin->get_file_areas();
+ foreach ($fileareas as $filearea) {
+ $fs->delete_area_files($this->context->id,'mod_assign', $filearea);
+ }
+
+ if (!$plugin->delete_instance()) {
+ $status[] = array('component'=>$componentstr,
+ 'item'=>get_string('deleteallsubmissions','assign'),
+ 'error'=>$plugin->get_error());
+ }
+ }
+
+ foreach ($this->feedbackplugins as $plugin) {
+ $fileareas = array();
+ $fileareas = $plugin->get_file_areas();
+ foreach ($fileareas as $filearea) {
+ $fs->delete_area_files($this->context->id,'mod_assign', $filearea);
+ }
+
+ if (!$plugin->delete_instance()) {
+ $status[] = array('component'=>$componentstr,
+ 'item'=>get_string('deleteallsubmissions','assign'),
+ 'error'=>$plugin->get_error());
+ }
+ }
+
+ $assignssql = "SELECT a.id
+ FROM {assign} a
+ WHERE a.course=:course";
+ $params = array ("course" => $data->courseid);
+
+ $DB->delete_records_select('assign_submission', "assignment IN ($assignssql)", $params);
+ $status[] = array('component'=>$componentstr,
+ 'item'=>get_string('deleteallsubmissions','assign'),
+ 'error'=>false);
+
+ if (empty($data->reset_gradebook_grades)) {
+ // Remove all grades from gradebook.
+ require_once($CFG->dirroot.'/mod/assign/lib.php');
+ assign_reset_gradebook($data->courseid);
+ }
+ }
+ // Updating dates - shift may be negative too.
+ if ($data->timeshift) {
+ shift_course_mod_dates('assign', array('duedate', 'allowsubmissionsfromdate','cutoffdate'), $data->timeshift, $data->courseid);
+ $status[] = array('component'=>$componentstr,
+ 'item'=>get_string('datechanged'),
+ 'error'=>false);
+ }
+
+ return $status;
+ }
+
+ /**
* Update the settings for a single plugin
*
* @param assign_plugin $plugin The plugin to update

0 comments on commit 72429a1

Please sign in to comment.
Something went wrong with that request. Please try again.