Skip to content

Commit 0573817

Browse files
committed
MDL-83905 core_badges: Redirect legacy JSON files
1 parent 1969055 commit 0573817

File tree

3 files changed

+30
-135
lines changed

3 files changed

+30
-135
lines changed

badges/assertion.php

+21-28
Original file line numberDiff line numberDiff line change
@@ -24,43 +24,36 @@
2424
* @author Yuliya Bozhko <yuliya.bozhko@totaralms.com>
2525
*/
2626

27-
define('AJAX_SCRIPT', true);
28-
define('NO_MOODLE_COOKIES', true); // No need for a session here.
29-
3027
require_once(__DIR__ . '/../config.php');
3128
require_once($CFG->libdir . '/badgeslib.php');
3229

33-
if (empty($CFG->enablebadges)) {
34-
throw new \moodle_exception('badgesdisabled', 'badges');
35-
}
30+
use core_badges\achievement_credential;
31+
use \core_badges\local\backpack\ob\exporter_base;
3632

3733
$hash = required_param('b', PARAM_ALPHANUM); // Issued badge unique hash for badge assertion.
3834
$action = optional_param('action', null, PARAM_BOOL); // Generates badge class if true.
3935
// OB specification version. If it's not defined, the site will be used as default.
40-
$obversion = optional_param('obversion', badges_open_badges_backpack_api(), PARAM_INT);
41-
42-
$assertion = new core_badges_assertion($hash, $obversion);
36+
$obversion = exporter_base::convert_apiversion(
37+
optional_param('obversion', badges_open_badges_backpack_api(), PARAM_FLOAT)
38+
);
4339

4440
if (!is_null($action)) {
45-
// Get badge class or issuer information depending on $action.
46-
$json = ($action) ? $assertion->get_badge_class() : $assertion->get_issuer();
47-
} else {
48-
// Otherwise, get badge assertion.
49-
$column = $DB->sql_compare_text('uniquehash', 255);
50-
if ($DB->record_exists_sql(sprintf('SELECT * FROM {badge_issued} WHERE %s = ?', $column), array($hash))) {
51-
$json = $assertion->get_badge_assertion();
52-
} else { // Revoked badge.
53-
header("HTTP/1.0 410 Gone");
54-
$assertion = array();
55-
if ($obversion >= OPEN_BADGES_V2) {
56-
$assertionurl = new moodle_url('/badges/assertion.php', array('b' => $hash));
57-
$assertion['id'] = $assertionurl->out();
58-
}
59-
$assertion['revoked'] = true;
60-
echo json_encode($assertion);
61-
die();
41+
$assertion = new achievement_credential($hash);
42+
$badgeid = $assertion->get_badge_id();
43+
if ($action) {
44+
// Display only the BadgeClass.
45+
redirect(new moodle_url('/badges/json/badge.php', ['id' => $badgeid, 'obversion' => $obversion]));
46+
} else {
47+
// Display only the Issuer.
48+
redirect(new moodle_url('/badges/json/issuer.php', ['id' => $badgeid, 'obversion' => $obversion]));
6249
}
6350
}
6451

65-
echo $OUTPUT->header();
66-
echo json_encode($json);
52+
// Display badge assertion.
53+
redirect(new moodle_url(
54+
'/badges/json/assertion.php',
55+
[
56+
'b' => $hash,
57+
'obversion' => $obversion,
58+
],
59+
));

badges/badge_json.php

+7-84
Original file line numberDiff line numberDiff line change
@@ -23,93 +23,16 @@
2323
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
2424
* @author Tung Thai <Tung.ThaiDuc@nashtechglobal.com>
2525
*/
26-
define('AJAX_SCRIPT', true);
27-
define('NO_MOODLE_COOKIES', true); // No need for a session here.
2826

2927
require_once(__DIR__ . '/../config.php');
30-
require_once($CFG->libdir . '/badgeslib.php');
3128

32-
$id = required_param('id', PARAM_INT);
29+
$badgeid = required_param('id', PARAM_INT);
3330
$action = optional_param('action', null, PARAM_INT); // Generates badge class if true.
34-
$json = array();
35-
$badge = new badge($id);
36-
if ($badge->status != BADGE_STATUS_INACTIVE) {
37-
if (is_null($action)) {
38-
// Get the content of badge class.
39-
if (empty($badge->courseid)) {
40-
$context = context_system::instance();
41-
} else {
42-
$context = context_course::instance($badge->courseid);
43-
}
44-
$urlimage = moodle_url::make_pluginfile_url($context->id, 'badges', 'badgeimage', $badge->id, '/', 'f3')->out(false);
4531

46-
$url = new moodle_url('/badges/badge_json.php', array('id' => $badge->id));
47-
48-
$json['name'] = $badge->name;
49-
$json['description'] = $badge->description;
50-
$urlimage = moodle_url::make_pluginfile_url($context->id,
51-
'badges', 'badgeimage', $badge->id, '/', 'f3')->out(false);
52-
$json['image'] = [];
53-
$json['image']['id'] = $urlimage;
54-
if ($badge->imagecaption) {
55-
$json['image']['caption'] = $badge->imagecaption;
56-
}
57-
58-
$params = ['id' => $badge->id];
59-
$badgeurl = new moodle_url('/badges/badgeclass.php', $params);
60-
$json['criteria']['id'] = $badgeurl->out(false);
61-
$json['criteria']['narrative'] = $badge->markdown_badge_criteria();
62-
$json['issuer'] = $badge->get_badge_issuer();
63-
$json['@context'] = OPEN_BADGES_V2_CONTEXT;
64-
$json['id'] = $url->out();
65-
$json['type'] = OPEN_BADGES_V2_TYPE_BADGE;
66-
if (!empty($badge->version)) {
67-
$json['version'] = $badge->version;
68-
}
69-
if (!empty($badge->language)) {
70-
$json['@language'] = $badge->language;
71-
}
72-
$badgetags = $badge->get_badge_tags();
73-
if ($badgetags) {
74-
$json['tags'] = $badgetags;
75-
}
76-
77-
$relatedbadges = $badge->get_related_badges(true);
78-
if (!empty($relatedbadges)) {
79-
foreach ($relatedbadges as $related) {
80-
$relatedurl = new moodle_url('/badges/badge_json.php', array('id' => $related->id));
81-
$relateds[] = array('id' => $relatedurl->out(false),
82-
'version' => $related->version, '@language' => $related->language);
83-
}
84-
$json['related'] = $relateds;
85-
}
86-
87-
$alignments = $badge->get_alignments();
88-
if (!empty($alignments)) {
89-
foreach ($alignments as $item) {
90-
$alignment = array('targetName' => $item->targetname, 'targetUrl' => $item->targeturl);
91-
if ($item->targetdescription) {
92-
$alignment['targetDescription'] = $item->targetdescription;
93-
}
94-
if ($item->targetframework) {
95-
$alignment['targetFramework'] = $item->targetframework;
96-
}
97-
if ($item->targetcode) {
98-
$alignment['targetCode'] = $item->targetcode;
99-
}
100-
$json['alignments'][] = $alignment;
101-
}
102-
}
103-
} else if ($action == 0) {
104-
// Get the content for issuer.
105-
$json = $badge->get_badge_issuer();
106-
}
107-
} else {
108-
// The badge doen't exist or not accessible for the users.
109-
header("HTTP/1.0 410 Gone");
110-
$badgeurl = new moodle_url('/badges/badge_json.php', array('id' => $id));
111-
$json['id'] = $badgeurl->out();
112-
$json['error'] = get_string('error:relatedbadgedoesntexist', 'badges');
32+
if ($action == 0) {
33+
// Display only the Issuer.
34+
redirect(new moodle_url('/badges/json/issuer.php', ['id' => $badgeid]));
11335
}
114-
echo $OUTPUT->header();
115-
echo json_encode($json);
36+
37+
// Display the Badge.
38+
redirect(new moodle_url('/badges/json/badge.php', ['id' => $badgeid]));

badges/issuer_json.php

+2-23
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,9 @@
2121
* @copyright 2020 Sara Arjona <sara@moodle.com>
2222
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
2323
*/
24-
define('AJAX_SCRIPT', true);
25-
define('NO_MOODLE_COOKIES', true); // No need for a session here.
2624

2725
require_once(__DIR__ . '/../config.php');
28-
require_once($CFG->libdir . '/badgeslib.php');
2926

30-
$id = optional_param('id', null, PARAM_INT);
27+
$badgeid = optional_param('id', null, PARAM_INT);
3128

32-
if (empty($id)) {
33-
// Get the default issuer for this site.
34-
$json = badges_get_default_issuer();
35-
} else {
36-
// Get the issuer for this badge.
37-
$badge = new badge($id);
38-
if ($badge->status != BADGE_STATUS_INACTIVE) {
39-
$json = $badge->get_badge_issuer();
40-
} else {
41-
// The badge doen't exist or not accessible for the users.
42-
header("HTTP/1.0 410 Gone");
43-
$badgeurl = new moodle_url('/badges/issuer_json.php', array('id' => $id));
44-
$json = ['id' => $badgeurl->out()];
45-
$json['error'] = get_string('error:relatedbadgedoesntexist', 'badges');
46-
}
47-
}
48-
49-
echo $OUTPUT->header();
50-
echo json_encode($json);
29+
redirect(new moodle_url('/badges/json/issuer.php', ['id' => $badgeid]));

0 commit comments

Comments
 (0)