From faf0029eed49e165dd77c6ba401bcea3a7cd37b8 Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Tue, 24 Mar 2020 15:10:51 +0100 Subject: [PATCH] MDL-66357 core_badges: remove action=0 usage for issuer In MDL-67971, issuer_json.php was created, to display issuer JSON content. However, some files were still using action=0 to display this information. It has been replaced by issuer_json.php. The action=0 support won't be removed (at least for now), because several public badges URLs are using it. --- badges/classes/assertion.php | 9 +++------ badges/classes/badge.php | 29 ++++++++++++++++++++--------- badges/issuer_json.php | 4 +++- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/badges/classes/assertion.php b/badges/classes/assertion.php index 5d98f4aa8ad..e1c471ffcbb 100644 --- a/badges/classes/assertion.php +++ b/badges/classes/assertion.php @@ -198,11 +198,8 @@ class core_badges_assertion { $class['image'] = 'data:image/png;base64,' . $imagedata; $class['criteria'] = $this->_url->out(false); // Currently issued badge URL. if ($issued) { - if ($this->_obversion == OPEN_BADGES_V2) { - $issuerurl = new moodle_url('/badges/issuer_json.php', array('id' => $this->get_badge_id())); - } else { - $issuerurl = new moodle_url('/badges/assertion.php', array('b' => $this->_data->uniquehash, 'action' => 0)); - } + $params = ['id' => $this->get_badge_id(), 'obversion' => $this->_obversion]; + $issuerurl = new moodle_url('/badges/issuer_json.php', $params); $class['issuer'] = $issuerurl->out(false); } $this->embed_data_badge_version2($class, OPEN_BADGES_V2_TYPE_BADGE); @@ -223,7 +220,7 @@ class core_badges_assertion { $issuer = array(); if ($this->_data) { // Required. - if (badges_open_badges_backpack_api() == OPEN_BADGES_V1) { + if ($this->_obversion == OPEN_BADGES_V1) { $issuer['name'] = $this->_data->issuername; $issuer['url'] = $this->_data->issuerurl; // Optional. diff --git a/badges/classes/badge.php b/badges/classes/badge.php index a3dfdba3f7b..9bd9d19f803 100644 --- a/badges/classes/badge.php +++ b/badges/classes/badge.php @@ -925,17 +925,28 @@ class badge { /** * Define issuer information by format Open Badges specification version 2. * + * @param int $obversion OB version to use. * @return array Issuer informations of the badge. */ - public function get_badge_issuer() { - $issuer = array(); - $issuer['name'] = $this->issuername; - $issuer['url'] = $this->issuerurl; - $issuer['email'] = $this->issuercontact; - $issuer['@context'] = OPEN_BADGES_V2_CONTEXT; - $issueridurl = new moodle_url('/badges/issuer_json.php', array('id' => $this->id)); - $issuer['id'] = $issueridurl->out(false); - $issuer['type'] = OPEN_BADGES_V2_TYPE_ISSUER; + public function get_badge_issuer(?int $obversion = null) { + global $DB; + + $issuer = []; + if ($obversion == OPEN_BADGES_V1) { + $data = $DB->get_record('badge', ['id' => $this->id]); + $issuer['name'] = $data->issuername; + $issuer['url'] = $data->issuerurl; + $issuer['email'] = $data->issuercontact; + } else { + $issuer['name'] = $this->issuername; + $issuer['url'] = $this->issuerurl; + $issuer['email'] = $this->issuercontact; + $issuer['@context'] = OPEN_BADGES_V2_CONTEXT; + $issueridurl = new moodle_url('/badges/issuer_json.php', array('id' => $this->id)); + $issuer['id'] = $issueridurl->out(false); + $issuer['type'] = OPEN_BADGES_V2_TYPE_ISSUER; + } + return $issuer; } } diff --git a/badges/issuer_json.php b/badges/issuer_json.php index ebbf74f2a9b..87fe6bd417e 100644 --- a/badges/issuer_json.php +++ b/badges/issuer_json.php @@ -30,6 +30,8 @@ require_once($CFG->libdir . '/badgeslib.php'); $id = optional_param('id', null, PARAM_INT); +// OB specification version. If it's not defined, the site will be used as default. +$obversion = optional_param('obversion', badges_open_badges_backpack_api(), PARAM_INT); if (empty($id)) { // Get the default issuer for this site. @@ -38,7 +40,7 @@ if (empty($id)) { // Get the issuer for this badge. $badge = new badge($id); if ($badge->status != BADGE_STATUS_INACTIVE) { - $json = $badge->get_badge_issuer(); + $json = $badge->get_badge_issuer($obversion); } else { // The badge doen't exist or not accessible for the users. header("HTTP/1.0 410 Gone");