diff --git a/badges/classes/assertion.php b/badges/classes/assertion.php index 872495eab84..89203930377 100644 --- a/badges/classes/assertion.php +++ b/badges/classes/assertion.php @@ -199,7 +199,7 @@ class core_badges_assertion { $class['criteria'] = $this->_url->out(false); // Currently issued badge URL. if ($issued) { if ($this->_obversion == OPEN_BADGES_V2) { - $issuerurl = new moodle_url('/badges/badge_json.php', array('id' => $this->get_badge_id(), 'action' => 0)); + $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)); } @@ -233,7 +233,8 @@ class core_badges_assertion { $issuer['email'] = $CFG->badges_defaultissuercontact; } } else { - $issuer = badges_get_default_issuer(); + $badge = new badge($this->get_badge_id()); + $issuer = $badge->get_badge_issuer(); } } $this->embed_data_badge_version2($issuer, OPEN_BADGES_V2_TYPE_ISSUER); @@ -341,8 +342,7 @@ class core_badges_assertion { '/badges/badge_json.php', array('id' => $this->get_badge_id()) ); - $issuerurl = new moodle_url('/badges/badge_json.php', array('id' => $this->get_badge_id(), 'action' => 0, - 'obversion' => $this->_obversion)); + $issuerurl = new moodle_url('/badges/issuer_json.php', ['id' => $this->get_badge_id()]); // For assertion. if ($type == OPEN_BADGES_V2_TYPE_ASSERTION) { $json['@context'] = OPEN_BADGES_V2_CONTEXT; diff --git a/badges/classes/badge.php b/badges/classes/badge.php index 7334681ac29..a3dfdba3f7b 100644 --- a/badges/classes/badge.php +++ b/badges/classes/badge.php @@ -929,12 +929,12 @@ class badge { */ public function get_badge_issuer() { $issuer = array(); - $issuerurl = new moodle_url('/badges/badge_json.php', array('id' => $this->id, 'action' => 0)); $issuer['name'] = $this->issuername; $issuer['url'] = $this->issuerurl; $issuer['email'] = $this->issuercontact; $issuer['@context'] = OPEN_BADGES_V2_CONTEXT; - $issuer['id'] = $this->issuerurl; + $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 new file mode 100644 index 00000000000..ebbf74f2a9b --- /dev/null +++ b/badges/issuer_json.php @@ -0,0 +1,52 @@ +. + +/** + * Serve Issuer JSON for related badge or default Issuer if no badge is defined. + * + * @package core + * @subpackage badges + * @copyright 2020 Sara Arjona + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +define('AJAX_SCRIPT', true); +define('NO_MOODLE_COOKIES', true); // No need for a session here. + +require_once(__DIR__ . '/../config.php'); +require_once($CFG->libdir . '/badgeslib.php'); + + +$id = optional_param('id', null, PARAM_INT); + +if (empty($id)) { + // Get the default issuer for this site. + $json = badges_get_default_issuer(); +} else { + // Get the issuer for this badge. + $badge = new badge($id); + if ($badge->status != BADGE_STATUS_INACTIVE) { + $json = $badge->get_badge_issuer(); + } else { + // The badge doen't exist or not accessible for the users. + header("HTTP/1.0 410 Gone"); + $badgeurl = new moodle_url('/badges/issuer_json.php', array('id' => $id)); + $json = ['id' => $badgeurl->out()]; + $json['error'] = get_string('error:relatedbadgedoesntexist', 'badges'); + } +} + +echo $OUTPUT->header(); +echo json_encode($json); diff --git a/lib/badgeslib.php b/lib/badgeslib.php index 940d567ca97..6d58efafd10 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -871,7 +871,7 @@ function badges_get_default_issuer() { global $CFG, $SITE; $issuer = array(); - $issuerurl = new moodle_url('/badges/issuer.php'); + $issuerurl = new moodle_url('/'); $issuer['name'] = $CFG->badges_defaultissuername; if (empty($issuer['name'])) { $issuer['name'] = $SITE->fullname ? $SITE->fullname : $SITE->shortname; @@ -879,7 +879,8 @@ function badges_get_default_issuer() { $issuer['url'] = $issuerurl->out(false); $issuer['email'] = $CFG->badges_defaultissuercontact; $issuer['@context'] = OPEN_BADGES_V2_CONTEXT; - $issuer['id'] = $issuerurl->out(false); + $issuerid = new moodle_url('/badges/issuer_json.php'); + $issuer['id'] = $issuerid->out(false); $issuer['type'] = OPEN_BADGES_V2_TYPE_ISSUER; return $issuer; }