MDL-39207 badges: Generate badge assertions using user's backpack email if it is set
authorYuliya Bozhko <yuliya.bozhko@totaralms.com>
Sun, 28 Apr 2013 22:15:30 +0000 (10:15 +1200)
committerYuliya Bozhko <yuliya.bozhko@totaralms.com>
Thu, 2 May 2013 04:05:11 +0000 (16:05 +1200)
badges/mybackpack.php
lang/en/badges.php
lib/badgeslib.php

index 813550c..1f52453 100644 (file)
@@ -78,7 +78,11 @@ if ($backpack) {
     if ($form->is_cancelled()) {
         redirect(new moodle_url('/badges/mybadges.php'));
     } else if ($data = $form->get_data()) {
-        $groups = array_filter($data->group);
+        if (empty($data->group)) {
+            redirect(new moodle_url('/badges/mybadges.php'));
+        } else {
+            $groups = array_filter($data->group);
+        }
 
         // Remove all unselected collections if there are any.
         $sqlparams = array('backpack' => $backpack->id);
index 9d26764..a6092f8 100644 (file)
@@ -86,7 +86,9 @@ $string['backpackconnection_help'] = 'This page allows you to set up connection
 Currently, only <a href="http://backpack.openbadges.org">Mozilla OpenBadges Backpack</a> is supported. You need to sign up for a backpack service before trying to set up backpack connection on this page.';
 $string['backpackdetails'] = 'Backpack settings';
 $string['backpackemail'] = 'Email address';
-$string['backpackemail_help'] = 'Email address associated with your backpack';
+$string['backpackemail_help'] = 'Email address associated with your backpack.
+
+If backpack connection is established, this email address is used instead of your internal email address to push badges to your backpack.';
 $string['backpackimport'] = 'Badge import settings';
 $string['backpackimport_help'] = 'After backpack connection is successfully established, badges from your backpack can be displayed on your "My Badges" page and your profile page.
 
@@ -100,7 +102,7 @@ To add a new image, browse and select an image (in JPG or PNG format) then click
 $string['badgeprivacysetting'] = 'Badge privacy settings';
 $string['badgeprivacysetting_help'] = 'Badges you earn can be displayed on your account profile page. This setting allows you to automatically set visibility of the newly earned badges.
 
-You can still control individual badge privacy settings on your <a href="mybadges.php">My badges</a> page.';
+You can still control individual badge privacy settings on your "My badges" page.';
 $string['badgeprivacysetting_str'] = 'Automatically show badges I earn on my profile page';
 $string['badgesalt'] = 'Salt for hashing the recepient\'s email address';
 $string['badgesalt_desc'] = 'Using a hash allows backpack services to confirm the badge earner without having to expose their email address. This setting should only use numbers and letters.';
index 3c82be7..3713f94 100644 (file)
@@ -836,14 +836,17 @@ function badges_get_issued_badge_info($hash) {
                 bi.dateissued,
                 bi.dateexpire,
                 u.email,
-                b.*
+                b.*,
+                bb.email as backpackemail
             FROM
-                {badge} b,
-                {badge_issued} bi,
-                {user} u
-            WHERE b.id = bi.badgeid
-                AND u.id = bi.userid
-                AND ' . $DB->sql_compare_text('bi.uniquehash', 40) . ' = ' . $DB->sql_compare_text(':hash', 40),
+                {badge} b
+                JOIN {badge_issued} bi
+                    ON b.id = bi.badgeid
+                JOIN {user} u
+                    ON u.id = bi.userid
+                LEFT JOIN {badge_backpack} bb
+                    ON bb.userid = bi.userid
+            WHERE ' . $DB->sql_compare_text('bi.uniquehash', 40) . ' = ' . $DB->sql_compare_text(':hash', 40),
             array('hash' => $hash), IGNORE_MISSING);
 
     if ($record) {
@@ -854,11 +857,11 @@ function badges_get_issued_badge_info($hash) {
         }
 
         $url = new moodle_url('/badges/badge.php', array('hash' => $hash));
+        $email = empty($record->backpackemail) ? $record->email : $record->backpackemail;
 
         // Recipient's email is hashed: <algorithm>$<hash(email + salt)>.
-        $badgesalt = isset($CFG->badgesalt) ? $CFG->badgesalt : '';
-        $a['recipient'] = 'sha256$' . hash('sha256', $record->email . $badgesalt);
-        $a['salt'] = $badgesalt;
+        $a['recipient'] = 'sha256$' . hash('sha256', $email . $CFG->badges_badgesalt);
+        $a['salt'] = $CFG->badges_badgesalt;
 
         if ($record->dateexpire) {
             $a['expires'] = date('Y-m-d', $record->dateexpire);