Skip to content

Commit

Permalink
Merge branch 'MDL-64644_master' of git://github.com/markn86/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
junpataleta committed Feb 11, 2019
2 parents 2329069 + ed6ac46 commit c18f59e
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 37 deletions.
76 changes: 42 additions & 34 deletions completion/classes/privacy/provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -161,47 +161,55 @@ public static function get_course_completion_info(\stdClass $user, \stdClass $co
$completioninfo = new \completion_info($course);
$completion = $completioninfo->is_enabled();

if ($completion == COMPLETION_ENABLED) {
if ($completion != COMPLETION_ENABLED) {
return [];
}

$coursecomplete = $completioninfo->is_course_complete($user->id);

$coursecomplete = $completioninfo->is_course_complete($user->id);
if ($coursecomplete) {
$status = get_string('complete');
} else {
$criteriacomplete = $completioninfo->count_course_user_data($user->id);
$ccompletion = new \completion_completion(['userid' => $user->id, 'course' => $course->id]);

$status = ($coursecomplete) ? get_string('complete') : '';
$status = (!$criteriacomplete && !$ccompletion->timestarted) ? get_string('notyetstarted', 'completion') :
get_string('inprogress', 'completion');

$completions = $completioninfo->get_completions($user->id);
$overall = get_string('nocriteriaset', 'completion');
if (!empty($completions)) {
if ($completioninfo->get_aggregation_method() == COMPLETION_AGGREGATION_ALL) {
$overall = get_string('criteriarequiredall', 'completion');
} else {
$overall = get_string('criteriarequiredany', 'completion');
}
if (!$criteriacomplete && !$ccompletion->timestarted) {
$status = get_string('notyetstarted', 'completion');
} else {
$status = get_string('inprogress', 'completion');
}
}

$coursecompletiondata = [
'status' => $status,
'required' => $overall,
];

$coursecompletiondata['criteria'] = array_map(function($completion) use ($completioninfo) {
$criteria = $completion->get_criteria();
$aggregation = $completioninfo->get_aggregation_method($criteria->criteriatype);
$required = ($aggregation == COMPLETION_AGGREGATION_ALL) ? get_string('all', 'completion') :
get_string('any', 'completion');
$data = [
'required' => $required,
'completed' => transform::yesno($completion->is_complete()),
'timecompleted' => isset($completion->timecompleted) ? transform::datetime($completion->timecompleted) : ''
];
$details = $criteria->get_details($completion);
$data = array_merge($data, $details);
return $data;
}, $completions);
return $coursecompletiondata;
$completions = $completioninfo->get_completions($user->id);
$overall = get_string('nocriteriaset', 'completion');
if (!empty($completions)) {
if ($completioninfo->get_aggregation_method() == COMPLETION_AGGREGATION_ALL) {
$overall = get_string('criteriarequiredall', 'completion');
} else {
$overall = get_string('criteriarequiredany', 'completion');
}
}

$coursecompletiondata = [
'status' => $status,
'required' => $overall,
];

$coursecompletiondata['criteria'] = array_map(function($completion) use ($completioninfo) {
$criteria = $completion->get_criteria();
$aggregation = $completioninfo->get_aggregation_method($criteria->criteriatype);
$required = ($aggregation == COMPLETION_AGGREGATION_ALL) ? get_string('all', 'completion') :
get_string('any', 'completion');
$data = [
'required' => $required,
'completed' => transform::yesno($completion->is_complete()),
'timecompleted' => isset($completion->timecompleted) ? transform::datetime($completion->timecompleted) : ''
];
$details = $criteria->get_details($completion);
$data = array_merge($data, $details);
return $data;
}, $completions);
return $coursecompletiondata;
}

/**
Expand Down
24 changes: 21 additions & 3 deletions completion/tests/privacy_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,31 @@ public function test_delete_completion_by_approved_userlist() {
$hasno = array_search('No', $coursecompletion1['criteria'], true);
$this->assertFalse($hasno);
$coursecompletion2 = \core_completion\privacy\provider::get_course_completion_info($user2, $this->course);
$hasyes = array_search('Yes', $coursecompletion1['criteria'], true);
$hasyes = array_search('Yes', $coursecompletion2['criteria'], true);
$this->assertFalse($hasyes);
$coursecompletion3 = \core_completion\privacy\provider::get_course_completion_info($user3, $this->course);
$hasno = array_search('No', $coursecompletion1['criteria'], true);
$hasno = array_search('No', $coursecompletion3['criteria'], true);
$this->assertFalse($hasno);
$coursecompletion4 = \core_completion\privacy\provider::get_course_completion_info($user4, $this->course);
$hasyes = array_search('Yes', $coursecompletion1['criteria'], true);
$hasyes = array_search('Yes', $coursecompletion4['criteria'], true);
$this->assertFalse($hasyes);
}

/**
* Test getting course completion information with completion disabled.
*/
public function test_get_course_completion_info_completion_disabled() {
$this->resetAfterTest();

$user = $this->getDataGenerator()->create_user();

$course = $this->getDataGenerator()->create_course(['enablecompletion' => 0]);

$this->getDataGenerator()->enrol_user($user->id, $course->id, 'student');

$coursecompletion = \core_completion\privacy\provider::get_course_completion_info($user, $course);

$this->assertTrue(is_array($coursecompletion));
$this->assertEmpty($coursecompletion);
}
}

0 comments on commit c18f59e

Please sign in to comment.