From 782aa36c344a4946887d4d665dfaac3ec6aae0bb Mon Sep 17 00:00:00 2001 From: Steve Bader Date: Mon, 25 Jan 2016 11:56:51 -0500 Subject: [PATCH] MDL-49852 mod_assign: Fix group assignment completion tracking Fixes completion tracking for group assignments where either only one student is required to click Submit when submitting the assignment for grading, all students are required to submit, or no students are required to click submit (meaning that simply uploading submits for grading). --- mod/assign/lib.php | 6 ++++- mod/assign/locallib.php | 50 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/mod/assign/lib.php b/mod/assign/lib.php index c4ce5673689..cd23c8ec064 100644 --- a/mod/assign/lib.php +++ b/mod/assign/lib.php @@ -1411,7 +1411,11 @@ function assign_get_completion_state($course, $cm, $userid, $type) { // If completion option is enabled, evaluate it and return true/false. if ($assign->get_instance()->completionsubmit) { - $submission = $assign->get_user_submission($userid, false); + if ($assign->get_instance()->teamsubmission) { + $submission = $assign->get_group_submission($userid, 0, false); + } else { + $submission = $assign->get_user_submission($userid, false); + } return $submission && $submission->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED; } else { // Completion option is not enabled so just return $type. diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index c5a2b1e7a94..b506521625e 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5633,7 +5633,12 @@ class assign { $this->update_submission($submission, $userid, true, $instance->teamsubmission); $completion = new completion_info($this->get_course()); if ($completion->is_enabled($this->get_course_module()) && $instance->completionsubmit) { - $completion->update_state($this->get_course_module(), COMPLETION_COMPLETE, $userid); + $this->update_activity_completion_records($instance->teamsubmission, + $instance->requireallteammemberssubmit, + $submission, + $userid, + COMPLETION_COMPLETE, + $completion); } if (!empty($data->submissionstatement) && $USER->id == $userid) { @@ -6325,7 +6330,12 @@ class assign { } $completion = new completion_info($this->get_course()); if ($completion->is_enabled($this->get_course_module()) && $instance->completionsubmit) { - $completion->update_state($this->get_course_module(), $complete, $USER->id); + $this->update_activity_completion_records($instance->teamsubmission, + $instance->requireallteammemberssubmit, + $submission, + $USER->id, + $complete, + $completion); } if (!$instance->submissiondrafts) { @@ -7991,6 +8001,42 @@ class assign { } return $this->get_course_module()->id . '_' . $id; } + + /** + * Updates and creates the completion records in mdl_course_modules_completion. + * + * @param int $teamsubmission value of 0 or 1 to indicate whether this is a group activity + * @param int $requireallteammemberssubmit value of 0 or 1 to indicate whether all group members must click Submit + * @param obj $submission the submission + * @param int $userid the user id + * @param int $complete + * @param obj $completion + * + * @return null + */ + protected function update_activity_completion_records($teamsubmission, + $requireallteammemberssubmit, + $submission, + $userid, + $complete, + $completion) { + + if (($teamsubmission && $submission->groupid > 0 && !$requireallteammemberssubmit) || + ($teamsubmission && $submission->groupid > 0 && $requireallteammemberssubmit && + $submission->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED)) { + + $members = groups_get_members($submission->groupid); + + foreach ($members as $member) { + $completion->update_state($this->get_course_module(), $complete, $member->id); + } + } else { + $completion->update_state($this->get_course_module(), $complete, $userid); + } + + return; + } + } /**