Skip to content

Commit c67762d

Browse files
committed
MDL-83905 core_badges: Redirect legacy JSON files
1 parent 513189c commit c67762d

File tree

3 files changed

+30
-152
lines changed

3 files changed

+30
-152
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-101
Original file line numberDiff line numberDiff line change
@@ -23,110 +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-
if ($badge->imageauthorname ||
51-
$badge->imageauthoremail ||
52-
$badge->imageauthorurl ||
53-
$badge->imagecaption) {
54-
$urlimage = moodle_url::make_pluginfile_url($context->id,
55-
'badges', 'badgeimage', $badge->id, '/', 'f3')->out(false);
56-
$json['image'] = array();
57-
$json['image']['id'] = $urlimage;
58-
if ($badge->imageauthorname || $badge->imageauthoremail || $badge->imageauthorurl) {
59-
$authorimage = new moodle_url('/badges/image_author_json.php', array('id' => $badge->id));
60-
$json['image']['author'] = $authorimage->out(false);
61-
}
62-
if ($badge->imagecaption) {
63-
$json['image']['caption'] = $badge->imagecaption;
64-
}
65-
} else {
66-
$json['image'] = $urlimage;
67-
}
68-
69-
$params = ['id' => $badge->id];
70-
$badgeurl = new moodle_url('/badges/badgeclass.php', $params);
71-
$json['criteria']['id'] = $badgeurl->out(false);
72-
$json['criteria']['narrative'] = $badge->markdown_badge_criteria();
73-
$json['issuer'] = $badge->get_badge_issuer();
74-
$json['@context'] = OPEN_BADGES_V2_CONTEXT;
75-
$json['id'] = $url->out();
76-
$json['type'] = OPEN_BADGES_V2_TYPE_BADGE;
77-
if (!empty($badge->version)) {
78-
$json['version'] = $badge->version;
79-
}
80-
if (!empty($badge->language)) {
81-
$json['@language'] = $badge->language;
82-
}
83-
$badgetags = $badge->get_badge_tags();
84-
if ($badgetags) {
85-
$json['tags'] = $badgetags;
86-
}
87-
88-
$relatedbadges = $badge->get_related_badges(true);
89-
if (!empty($relatedbadges)) {
90-
foreach ($relatedbadges as $related) {
91-
$relatedurl = new moodle_url('/badges/badge_json.php', array('id' => $related->id));
92-
$relateds[] = array('id' => $relatedurl->out(false),
93-
'version' => $related->version, '@language' => $related->language);
94-
}
95-
$json['related'] = $relateds;
96-
}
97-
98-
$endorsement = $badge->get_endorsement();
99-
if (!empty($endorsement)) {
100-
$endorsementurl = new moodle_url('/badges/endorsement_json.php', array('id' => $badge->id));
101-
$json['endorsement'] = $endorsementurl->out(false);
102-
}
103-
104-
$alignments = $badge->get_alignments();
105-
if (!empty($alignments)) {
106-
foreach ($alignments as $item) {
107-
$alignment = array('targetName' => $item->targetname, 'targetUrl' => $item->targeturl);
108-
if ($item->targetdescription) {
109-
$alignment['targetDescription'] = $item->targetdescription;
110-
}
111-
if ($item->targetframework) {
112-
$alignment['targetFramework'] = $item->targetframework;
113-
}
114-
if ($item->targetcode) {
115-
$alignment['targetCode'] = $item->targetcode;
116-
}
117-
$json['alignments'][] = $alignment;
118-
}
119-
}
120-
} else if ($action == 0) {
121-
// Get the content for issuer.
122-
$json = $badge->get_badge_issuer();
123-
}
124-
} else {
125-
// The badge doen't exist or not accessible for the users.
126-
header("HTTP/1.0 410 Gone");
127-
$badgeurl = new moodle_url('/badges/badge_json.php', array('id' => $id));
128-
$json['id'] = $badgeurl->out();
129-
$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]));
13035
}
131-
echo $OUTPUT->header();
132-
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)