mirror of
https://github.com/moodle/moodle.git
synced 2025-04-20 07:56:06 +02:00
Merge branch 'wip-MDL-49852-master' of git://github.com/abgreeve/moodle
This commit is contained in:
commit
a7de32a265
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -90,7 +90,7 @@ class mod_assign_base_testcase extends advanced_testcase {
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$this->course = $this->getDataGenerator()->create_course();
|
||||
$this->course = $this->getDataGenerator()->create_course(array('enablecompletion' => 1));
|
||||
$this->teachers = array();
|
||||
for ($i = 0; $i < self::DEFAULT_TEACHER_COUNT; $i++) {
|
||||
array_push($this->teachers, $this->getDataGenerator()->create_user());
|
||||
@ -350,4 +350,18 @@ class testable_assign extends assign {
|
||||
|
||||
return $mform;
|
||||
}
|
||||
|
||||
public function testable_update_activity_completion_records($teamsubmission,
|
||||
$requireallteammemberssubmit,
|
||||
$submission,
|
||||
$userid,
|
||||
$complete,
|
||||
$completion) {
|
||||
return parent::update_activity_completion_records($teamsubmission,
|
||||
$requireallteammemberssubmit,
|
||||
$submission,
|
||||
$userid,
|
||||
$complete,
|
||||
$completion);
|
||||
}
|
||||
}
|
||||
|
@ -2631,4 +2631,94 @@ Anchor link 2:<a title=\"bananas\" href=\"../logo-240x60.gif\">Link text</a>
|
||||
$grade = $assign->get_user_grade($this->students[0]->id, false);
|
||||
$this->assertEquals('30.0', $grade->grade);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test updating activity completion when submitting an assessment.
|
||||
*/
|
||||
public function test_update_activity_completion_records_solitary_submission() {
|
||||
$assign = $this->create_instance(array('grade' => 100,
|
||||
'completion' => COMPLETION_TRACKING_AUTOMATIC,
|
||||
'requireallteammemberssubmit' => 0));
|
||||
|
||||
$cm = $assign->get_course_module();
|
||||
|
||||
$student = $this->students[0];
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('mod_assign');
|
||||
|
||||
$this->setUser($student);
|
||||
|
||||
// Simulate a submission.
|
||||
$data = new stdClass();
|
||||
$data->onlinetext_editor = array(
|
||||
'itemid' => file_get_unused_draft_itemid(),
|
||||
'text' => 'Student submission text',
|
||||
'format' => FORMAT_MOODLE
|
||||
);
|
||||
$completion = new completion_info($this->course);
|
||||
|
||||
$notices = array();
|
||||
$assign->save_submission($data, $notices);
|
||||
|
||||
$submission = $assign->get_user_submission($student->id, true);
|
||||
|
||||
// Check that completion is not met yet.
|
||||
$completiondata = $completion->get_data($cm, false, $student->id);
|
||||
$this->assertEquals(0, $completiondata->completionstate);
|
||||
$assign->testable_update_activity_completion_records(0, 0, $submission,
|
||||
$student->id, COMPLETION_COMPLETE, $completion);
|
||||
// Completion should now be met.
|
||||
$completiondata = $completion->get_data($cm, false, $student->id);
|
||||
$this->assertEquals(1, $completiondata->completionstate);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test updating activity completion when submitting an assessment.
|
||||
*/
|
||||
public function test_update_activity_completion_records_team_submission() {
|
||||
$assign = $this->create_instance(array('grade' => 100,
|
||||
'completion' => COMPLETION_TRACKING_AUTOMATIC,
|
||||
'teamsubmission' => 1));
|
||||
|
||||
$cm = $assign->get_course_module();
|
||||
|
||||
$student1 = $this->students[0];
|
||||
$student2 = $this->students[1];
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('mod_assign');
|
||||
|
||||
// Put both users into a group.
|
||||
$group1 = $this->getDataGenerator()->create_group(array('courseid' => $this->course->id));
|
||||
$this->getDataGenerator()->create_group_member(array('groupid' => $group1->id, 'userid' => $student1->id));
|
||||
$this->getDataGenerator()->create_group_member(array('groupid' => $group1->id, 'userid' => $student2->id));
|
||||
|
||||
$this->setUser($student1);
|
||||
|
||||
// Simulate a submission.
|
||||
$data = new stdClass();
|
||||
$data->onlinetext_editor = array(
|
||||
'itemid' => file_get_unused_draft_itemid(),
|
||||
'text' => 'Student submission text',
|
||||
'format' => FORMAT_MOODLE
|
||||
);
|
||||
$completion = new completion_info($this->course);
|
||||
|
||||
$notices = array();
|
||||
$assign->save_submission($data, $notices);
|
||||
|
||||
$submission = $assign->get_user_submission($student1->id, true);
|
||||
$submission->status = ASSIGN_SUBMISSION_STATUS_SUBMITTED;
|
||||
$submission->groupid = $group1->id;
|
||||
|
||||
// Check that completion is not met yet.
|
||||
$completiondata = $completion->get_data($cm, false, $student1->id);
|
||||
$this->assertEquals(0, $completiondata->completionstate);
|
||||
$completiondata = $completion->get_data($cm, false, $student2->id);
|
||||
$this->assertEquals(0, $completiondata->completionstate);
|
||||
$assign->testable_update_activity_completion_records(1, 0, $submission, $student1->id,
|
||||
COMPLETION_COMPLETE, $completion);
|
||||
// Completion should now be met.
|
||||
$completiondata = $completion->get_data($cm, false, $student1->id);
|
||||
$this->assertEquals(1, $completiondata->completionstate);
|
||||
$completiondata = $completion->get_data($cm, false, $student2->id);
|
||||
$this->assertEquals(1, $completiondata->completionstate);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user