Skip to content

Commit

Permalink
MDL-62384 core_completion: Update to sql to improve performance.
Browse files Browse the repository at this point in the history
  • Loading branch information
abgreeve authored and andrewnicols committed May 11, 2018
1 parent 8a5b84c commit d8eec7e
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 6 deletions.
6 changes: 4 additions & 2 deletions completion/classes/privacy/provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,10 @@ public static function get_course_completion_join_sql(int $userid, string $prefi

$join = "JOIN {course_completion_criteria} {$cccalias} ON {$joinfield} = {$cccalias}.course
LEFT JOIN {course_modules_completion} {$cmcalias} ON {$cccalias}.moduleinstance = {$cmcalias}.coursemoduleid
LEFT JOIN {course_completion_crit_compl} {$ccccalias} ON {$ccccalias}.criteriaid = {$cccalias}.id";
$where = "{$cmcalias}.userid = :{$prefix}_moduleuserid OR {$ccccalias}.userid = :{$prefix}_courseuserid";
AND {$cmcalias}.userid = :{$prefix}_moduleuserid
LEFT JOIN {course_completion_crit_compl} {$ccccalias} ON {$ccccalias}.criteriaid = {$cccalias}.id
AND {$ccccalias}.userid = :{$prefix}_courseuserid";
$where = "{$cmcalias}.id IS NOT NULL OR {$ccccalias}.id IS NOT NULL";
$params = ["{$prefix}_moduleuserid" => $userid, "{$prefix}_courseuserid" => $userid];

return [$join, $where, $params];
Expand Down
9 changes: 6 additions & 3 deletions completion/tests/fixtures/completion_creation.php
Original file line number Diff line number Diff line change
Expand Up @@ -103,16 +103,19 @@ public function create_course_completion() {
* Complete some of the course completion criteria.
*
* @param stdClass $user The user object
* @param bool $modulecompletion If true will complete the activity module completion thing.
*/
public function complete_course($user) {
public function complete_course($user, $modulecompletion = true) {
$this->getDataGenerator()->enrol_user($user->id, $this->course->id, 'student');
$completion = new \completion_info($this->course);
$criteriacompletions = $completion->get_completions($user->id, COMPLETION_CRITERIA_TYPE_ROLE);
$criteria = completion_criteria::factory(['id' => 3, 'criteriatype' => COMPLETION_CRITERIA_TYPE_ROLE]);
foreach ($criteriacompletions as $ccompletion) {
$criteria->complete($ccompletion);
}
// Set activity as complete.
$completion->update_state($this->cm, COMPLETION_COMPLETE, $user->id);
if ($modulecompletion) {
// Set activity as complete.
$completion->update_state($this->cm, COMPLETION_COMPLETE, $user->id);
}
}
}
2 changes: 1 addition & 1 deletion completion/tests/privacy_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public function test_get_course_completion_join_sql() {
$this->resetAfterTest();
$user = $this->getDataGenerator()->create_user();
$this->create_course_completion();
$this->complete_course($user);
$this->complete_course($user, false);

list($join, $where, $params) = \core_completion\privacy\provider::get_course_completion_join_sql($user->id, 'comp', 'c.id');
$sql = "SELECT DISTINCT c.id
Expand Down

0 comments on commit d8eec7e

Please sign in to comment.