Skip to content

Commit

Permalink
MDL-64644 completion: ensure we return array for provider
Browse files Browse the repository at this point in the history
  • Loading branch information
mdjnelson committed Jan 23, 2019
1 parent b39f719 commit 124c24e
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 38 deletions.
77 changes: 39 additions & 38 deletions completion/classes/privacy/provider.php
Expand Up @@ -161,47 +161,48 @@ public static function get_course_completion_info(\stdClass $user, \stdClass $co
$completioninfo = new \completion_info($course);
$completion = $completioninfo->is_enabled();

if ($completion == COMPLETION_ENABLED) {

$coursecomplete = $completioninfo->is_course_complete($user->id);
$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 ($completion != COMPLETION_ENABLED) {
return [];
}

$coursecomplete = $completioninfo->is_course_complete($user->id);
$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');
}
}

$coursecompletiondata = [
'status' => $status,
'required' => $overall,
];
$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;
}
$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
18 changes: 18 additions & 0 deletions completion/tests/privacy_test.php
Expand Up @@ -202,4 +202,22 @@ public function test_delete_completion_by_approved_userlist() {
$hasyes = array_search('Yes', $coursecompletion1['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 124c24e

Please sign in to comment.