1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Contains class for displaying a assertion. 19 * 20 * @package core_badges 21 * @copyright 2019 Damyon Wiese 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace core_badges\external; 26 27 defined('MOODLE_INTERNAL') || die(); 28 29 use core\external\exporter; 30 use renderer_base; 31 use stdClass; 32 33 /** 34 * Class for displaying a badge competency. 35 * 36 * @package core_badges 37 * @copyright 2019 Damyon Wiese 38 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 39 */ 40 class assertion_exporter extends exporter { 41 42 /** 43 * Constructor - saves the persistent object, and the related objects. 44 * 45 * @param mixed $data - Either an stdClass or an array of values. 46 * @param array $related - An optional list of pre-loaded objects related to this object. 47 */ 48 public function __construct($data, $related = array()) { 49 // Having mixed $data is causing some issues. As this class is treating $data as an object everywhere, it can be converted 50 // to object at this point, to avoid errors and get the expected behaviour always. 51 // $data is an array when this class is a request exporter in backpack_api_mapping, but it is an object when this is 52 // used as a response exporter. 53 parent::__construct((object) $data, $related); 54 } 55 56 /** 57 * Map from a request response data to the internal structure. 58 * 59 * @param stdClass $data The remote data. 60 * @param string $apiversion The backpack version used to communicate remotely. 61 * @return stdClass 62 */ 63 public static function map_external_data($data, $apiversion) { 64 $mapped = new \stdClass(); 65 if (isset($data->entityType)) { 66 $mapped->type = $data->entityType; 67 } else { 68 $mapped->type = $data->type; 69 } 70 if (isset($data->entityId)) { 71 $mapped->id = $data->entityId; 72 } else { 73 $mapped->id = $data->id; 74 } 75 if (isset($data->issuedOn)) { 76 $mapped->issuedOn = $data->issuedOn; 77 } 78 if (isset($data->recipient)) { 79 $mapped->recipient = $data->recipient; 80 } 81 if (isset($data->badgeclass)) { 82 $mapped->badgeclass = $data->badgeclass; 83 } 84 $propname = '@context'; 85 $mapped->$propname = 'https://w3id.org/openbadges/v2'; 86 return $mapped; 87 } 88 89 /** 90 * Return the list of additional properties. 91 * 92 * @return array 93 */ 94 protected static function define_other_properties() { 95 return array( 96 'badge' => array( 97 'type' => badgeclass_exporter::read_properties_definition(), 98 'optional' => true 99 ), 100 'recipient' => array( 101 'type' => recipient_exporter::read_properties_definition(), 102 'optional' => true 103 ), 104 'verification' => array( 105 'type' => verification_exporter::read_properties_definition(), 106 'optional' => true 107 ) 108 ); 109 } 110 111 /** 112 * We map from related data passed as data to this exporter to clean exportable values. 113 * 114 * @param renderer_base $output 115 * @return array 116 */ 117 protected function get_other_values(renderer_base $output) { 118 global $DB; 119 $result = []; 120 121 if (property_exists($this->data, 'related_badge')) { 122 $exporter = new badgeclass_exporter($this->data->related_badge, $this->related); 123 $result['badge'] = $exporter->export($output); 124 } 125 if (property_exists($this->data, 'related_recipient')) { 126 $exporter = new recipient_exporter($this->data->related_recipient, $this->related); 127 $result['recipient'] = $exporter->export($output); 128 } 129 if (property_exists($this->data, 'related_verify')) { 130 $exporter = new verification_exporter($this->data->related_verify, $this->related); 131 $result['verification'] = $exporter->export($output); 132 } 133 return $result; 134 } 135 136 /** 137 * Return the list of properties. 138 * 139 * @return array 140 */ 141 protected static function define_properties() { 142 return [ 143 'type' => [ 144 'type' => PARAM_ALPHA, 145 'description' => 'Issuer', 146 ], 147 'id' => [ 148 'type' => PARAM_URL, 149 'description' => 'Unique identifier for this assertion', 150 ], 151 'badgeclass' => [ 152 'type' => PARAM_RAW, 153 'description' => 'Identifier of the badge for this assertion', 154 'optional' => true, 155 ], 156 'issuedOn' => [ 157 'type' => PARAM_RAW, 158 'description' => 'Date this badge was issued', 159 ], 160 'expires' => [ 161 'type' => PARAM_RAW, 162 'description' => 'Date this badge will expire', 163 'optional' => true, 164 ], 165 '@context' => [ 166 'type' => PARAM_URL, 167 'description' => 'Badge version', 168 ], 169 ]; 170 } 171 172 /** 173 * Returns a list of objects that are related. 174 * 175 * @return array 176 */ 177 protected static function define_related() { 178 return array( 179 'context' => 'context' 180 ); 181 } 182 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body