AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace enrol_lti\local\ltiadvantage\entity;/*** The ags_info class, instances of which represent grade service information for a resource_link or context.** For information about Assignment and Grade Services 2.0, see https://www.imsglobal.org/spec/lti-ags/v2p0/.** @package enrol_lti* @copyright 2021 Jake Dallimore <jrhdallimore@gmail.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class ags_info {/** @var string Scope for lineitem management, used when a platform allows the tool to create lineitems.*/private const SCOPES_LINEITEM_MANAGE = 'https://purl.imsglobal.org/spec/lti-ags/scope/lineitem';/** @var string Scope for lineitem reads, used when a tool only grants read access to line items.*/private const SCOPES_LINEITEM_READONLY = 'https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly';/** @var string Scope for reading results.*/private const SCOPES_RESULT_READONLY = 'https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly';/** @var string Scope for posting scores.*/private const SCOPES_SCORES_POST = 'https://purl.imsglobal.org/spec/lti-ags/scope/score';/** @var \moodle_url|null The service URL used to get/put lineitems, if supported*/private $lineitemsurl;/** @var \moodle_url|null The lineitemurl, which is only present when a single lineitem is supported.*/private $lineitemurl;/** @var array The array of supported lineitem-related scopes for this service instance.*/private $lineitemscopes = [];/** @var string|null The supported result scope for this service instance.*/private $resultscope = null;/** @var string|null The supported score scope for this service instance.*/private $scorescope = null;/*** The ags_info constructor.** @param \moodle_url|null $lineitemsurl The service URL used to get/put lineitems, if supported.* @param \moodle_url|null $lineitemurl The lineitemurl, which is only present when a single lineitem is supported.* @param array $scopes The array of supported scopes for this service instance.*/private function __construct(?\moodle_url $lineitemsurl, ?\moodle_url $lineitemurl, array $scopes) {// Platforms may support just lineitemurl, just lineitemsurl or both. At least one of the two is required.if (is_null($lineitemsurl) && is_null($lineitemurl)) {throw new \coding_exception("Missing lineitem or lineitems URL");}$this->lineitemsurl = $lineitemsurl;$this->lineitemurl = $lineitemurl;$this->validate_scopes($scopes);}/*** Factory method to create a new ags_info instance.** @param \moodle_url|null $lineitemsurl The service URL used to get/put lineitems, if supported.* @param \moodle_url|null $lineitemurl The lineitemurl, which is only present when a single lineitem is supported.* @param array $scopes The array of supported scopes for this service instance.* @return ags_info the object instance.*/public static function create(?\moodle_url $lineitemsurl = null, ?\moodle_url $lineitemurl = null,array $scopes = []): ags_info {return new self($lineitemsurl, $lineitemurl, $scopes);}/*** Check the supplied scopes for validity and set instance vars if appropriate.** @param array $scopes the array of string scopes to check.* @throws \coding_exception if any of the scopes is invalid.*/private function validate_scopes(array $scopes): void {$supportedscopes = [self::SCOPES_LINEITEM_READONLY,self::SCOPES_LINEITEM_MANAGE,self::SCOPES_RESULT_READONLY,self::SCOPES_SCORES_POST];foreach ($scopes as $scope) {if (!is_string($scope)) {throw new \coding_exception('Scope must be a string value');}$key = array_search($scope, $supportedscopes);if ($key === 0) {$this->lineitemscopes[] = self::SCOPES_LINEITEM_READONLY;} else if ($key === 1) {$this->lineitemscopes[] = self::SCOPES_LINEITEM_MANAGE;} else if ($key === 2) {$this->resultscope = self::SCOPES_RESULT_READONLY;} else if ($key === 3) {$this->scorescope = self::SCOPES_SCORES_POST;}}}/*** Get the url for querying line items, if supported.** @return \moodle_url the url.*/public function get_lineitemsurl(): ?\moodle_url {return $this->lineitemsurl;}/*** Get the single line item url, in cases where only one line item exists.** @return \moodle_url|null the url, or null if not present.*/public function get_lineitemurl(): ?\moodle_url {return $this->lineitemurl;}/*** Get the authorization scope for lineitems.** @return array|null the scopes, if present, else null.*/public function get_lineitemscope(): ?array {return !empty($this->lineitemscopes) ? $this->lineitemscopes : null;}/*** Get the authorization scope for results.** @return string|null the scope, if present, else null.*/public function get_resultscope(): ?string {return $this->resultscope;}/*** Get the authorization scope for scores.** @return string|null the scope, if present, else null.*/public function get_scorescope(): ?string {return $this->scorescope;}/*** Get all supported scopes for this service.** @return string[] the array of supported scopes.*/public function get_scopes(): array {$scopes = [];foreach ($this->lineitemscopes as $lineitemscope) {$scopes[] = $lineitemscope;}if (!empty($this->resultscope)) {$scopes[] = $this->resultscope;}if (!empty($this->scorescope)) {$scopes[] = $this->scorescope;}return $scopes;}}