AutorÃa | Ultima modificación | Ver Log |
<?phpnamespace IMSGlobal\LTI\ToolProvider\Service;/*** Class to implement the Tool Settings service** @author Stephen P Vickers <svickers@imsglobal.org>* @copyright IMS Global Learning Consortium Inc* @date 2016* @version 3.0.0* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0*/#[\AllowDynamicProperties]class ToolSettings extends Service{/*** Settings at current level mode.*/const MODE_CURRENT_LEVEL = 1;/*** Settings at all levels mode.*/const MODE_ALL_LEVELS = 2;/*** Settings with distinct names at all levels mode.*/const MODE_DISTINCT_NAMES = 3;/*** Names of LTI parameters to be retained in the consumer settings property.** @var array $LEVEL_NAMES*/private static $LEVEL_NAMES = array('ToolProxy' => 'system','ToolProxyBinding' => 'context','LtiLink' => 'link');/*** The object to which the settings apply (ResourceLink, Context or ToolConsumer).** @var object $source*/private $source;/*** Whether to use the simple JSON format.** @var boolean $simple*/private $simple;/*** Class constructor.** @param object $source The object to which the settings apply (ResourceLink, Context or ToolConsumer)* @param string $endpoint Service endpoint* @param boolean $simple True if the simple media type is to be used (optional, default is true)*/public function __construct($source, $endpoint, $simple = true){if (is_a($source, 'IMSGlobal\LTI\ToolProvider\ToolConsumer')) {$consumer = $source;} else {$consumer = $source->getConsumer();}if ($simple) {$mediaType = 'application/vnd.ims.lti.v2.toolsettings.simple+json';} else {$mediaType = 'application/vnd.ims.lti.v2.toolsettings+json';}parent::__construct($consumer, $endpoint, $mediaType);$this->source = $source;$this->simple = $simple;}/*** Get the tool settings.** @param int $mode Mode for request (optional, default is current level only)** @return mixed The array of settings if successful, otherwise false*/public function get($mode = self::MODE_CURRENT_LEVEL) {$parameter = array();if ($mode === self::MODE_ALL_LEVELS) {$parameter['bubble'] = 'all';} else if ($mode === self::MODE_DISTINCT_NAMES) {$parameter['bubble'] = 'distinct';}$http = $this->send('GET', $parameter);if (!$http->ok) {$response = false;} else if ($this->simple) {$response = json_decode($http->response, true);} else if (isset($http->responseJson->{'@graph'})) {$response = array();foreach ($http->responseJson->{'@graph'} as $level) {$settings = json_decode(json_encode($level->custom), true);unset($settings['@id']);$response[self::$LEVEL_NAMES[$level->{'@type'}]] = $settings;}}return $response;}/*** Set the tool settings.** @param array $settings An associative array of settings (optional, default is null)** @return HTTPMessage HTTP object containing request and response details*/public function set($settings) {if (!$this->simple) {if (is_a($this->source, 'ToolConsumer')) {$type = 'ToolProxy';} else if (is_a($this->source, 'ToolConsumer')) {$type = 'ToolProxyBinding';} else {$type = 'LtiLink';}$obj = new \stdClass();$obj->{'@context'} = 'http://purl.imsglobal.org/ctx/lti/v2/ToolSettings';$obj->{'@graph'} = array();$level = new \stdClass();$level->{'@type'} = $type;$level->{'@id'} = $this->endpoint;$level->{'custom'} = $settings;$obj->{'@graph'}[] = $level;$body = json_encode($obj);} else {$body = json_encode($settings);}$response = parent::send('PUT', null, $body);return $response->ok;}}