From 7f964cfdc7cca7567e0d153ec8c38e31fd4cd894 Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Fri, 10 Jan 2014 09:00:01 +1300 Subject: [PATCH 1/2] MDL-43621 badges: Don't display deleted users in badge recipients list --- badges/recipients.php | 2 +- badges/renderer.php | 4 +++- lib/badgeslib.php | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) 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)); diff --git a/badges/renderer.php b/badges/renderer.php index 10bfe2a12ce..35ebdd3d1bf 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 f233078b009..78425a02e90 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; } @@ -815,7 +815,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 e477ec0a3945d752aae0d4bc545e895d15bd7aea Mon Sep 17 00:00:00 2001 From: Yuliya Bozhko Date: Wed, 15 Jan 2014 16:24:37 +1300 Subject: [PATCH 2/2] 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 78425a02e90..0d1f9281d97 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; } /**