From 5e35e9fe8769c50bdd4ac77283c3f43906ebd0ad Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Fri, 10 Jan 2014 09:02:30 +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 4eac9545623..9d3ef91312a 100644 --- a/badges/recipients.php +++ b/badges/recipients.php @@ -87,7 +87,7 @@ if ($badge->has_manual_award_criteria() && has_capability('moodle/badges:awardba $sql = "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 + WHERE b.badgeid = :badgeid AND u.deleted = 0 ORDER BY $sortby $sorthow"; $totalcount = $DB->count_records('badge_issued', array('badgeid' => $badge->id)); From f8f860fd223633e8f438c5798e7fff265c9d3e03 Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Wed, 15 Jan 2014 10:07:51 +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 b7b01480f99..10dbdfc478f 100644 --- a/badges/renderer.php +++ b/badges/renderer.php @@ -664,7 +664,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 03c5539e18a..622ac9400d1 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -351,7 +351,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; } @@ -765,7 +765,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 ed60873986a33b2ecbd2698bdd24a4f941e29202 Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Wed, 15 Jan 2014 16:17:17 +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 622ac9400d1..7a6480c9a65 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -333,10 +333,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; } /**