From b4918e7d8ab1754a3ff7fedc0cf09921a81d1a1b Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Fri, 10 Jan 2014 09:01:33 +1300 Subject: [PATCH 1/3] MDL-43621 badges: Don't display deleted users in badge recipients list --- badges/recipients.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/badges/recipients.php b/badges/recipients.php index 4e77e3d253e..1e31410d175 100644 --- a/badges/recipients.php +++ b/badges/recipients.php @@ -91,7 +91,7 @@ $namefields = get_all_user_name_fields(true, 'u'); $sql = "SELECT b.userid, b.dateissued, b.uniquehash, $namefields FROM {badge_issued} b INNER JOIN {user} u ON b.userid = u.id - WHERE b.badgeid = :badgeid + WHERE b.badgeid = :badgeid AND u.deleted = 0 ORDER BY $sortby $sorthow"; $totalcount = $DB->count_records('badge_issued', array('badgeid' => $badge->id)); From 4768a4768b781d7f3606a0a39818db67d2e8ad15 Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Wed, 15 Jan 2014 09:57:26 +1300 Subject: [PATCH 2/3] MDL-43621 badges: Don't count deleted users as badge recipients --- badges/renderer.php | 4 +++- lib/badgeslib.php | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/badges/renderer.php b/badges/renderer.php index 10bfe2a12ce..fe38611d627 100644 --- a/badges/renderer.php +++ b/badges/renderer.php @@ -663,7 +663,9 @@ class core_badges_renderer extends plugin_renderer_base { } if (has_capability('moodle/badges:viewawarded', $context)) { - $awarded = $DB->count_records('badge_issued', array('badgeid' => $badgeid)); + $awarded = $DB->count_records_sql('SELECT COUNT(b.userid) + FROM {badge_issued} b INNER JOIN {user} u ON b.userid = u.id + WHERE b.badgeid = :badgeid AND u.deleted = 0', array('badgeid' => $badgeid)); $row[] = new tabobject('awards', new moodle_url('/badges/recipients.php', array('id' => $badgeid)), get_string('bawards', 'badges', $awarded) diff --git a/lib/badgeslib.php b/lib/badgeslib.php index 8219cdb8548..40bd0f73a5c 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -349,7 +349,7 @@ class badge { 'SELECT b.userid, b.dateissued, b.uniquehash, u.firstname, u.lastname FROM {badge_issued} b INNER JOIN {user} u ON b.userid = u.id - WHERE b.badgeid = :badgeid', array('badgeid' => $this->id)); + WHERE b.badgeid = :badgeid AND u.deleted = 0', array('badgeid' => $this->id)); return $awards; } @@ -774,7 +774,9 @@ function badges_get_badges($type, $courseid = 0, $sort = '', $dir = '', $page = $badges[$r->id]->dateissued = $r->dateissued; $badges[$r->id]->uniquehash = $r->uniquehash; } else { - $badges[$r->id]->awards = $DB->count_records('badge_issued', array('badgeid' => $badge->id)); + $badges[$r->id]->awards = $DB->count_records_sql('SELECT COUNT(b.userid) + FROM {badge_issued} b INNER JOIN {user} u ON b.userid = u.id + WHERE b.badgeid = :badgeid AND u.deleted = 0', array('badgeid' => $badge->id)); $badges[$r->id]->statstring = $badge->get_status_name(); } } From f0040e7dafbb1243dc5608ba88d11eba8c02664c Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Wed, 15 Jan 2014 16:25:48 +1300 Subject: [PATCH 3/3] MDL-43621 badges: Fix has_awards() result when deleted users are the only recipients of a badge --- lib/badgeslib.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/badgeslib.php b/lib/badgeslib.php index 40bd0f73a5c..41b59c3ddf2 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -331,10 +331,11 @@ class badge { */ public function has_awards() { global $DB; - if ($DB->record_exists('badge_issued', array('badgeid' => $this->id))) { - return true; - } - return false; + $awarded = $DB->record_exists_sql('SELECT b.uniquehash + FROM {badge_issued} b INNER JOIN {user} u ON b.userid = u.id + WHERE b.badgeid = :badgeid AND u.deleted = 0', array('badgeid' => $this->id)); + + return $awarded; } /**