AutorÃa | Ultima modificación | Ver Log |
<?php
namespace IMSGlobal\LTI\ToolProvider;
use IMSGlobal\LTI\ToolProvider\DataConnector\DataConnector;
use IMSGlobal\LTI\ToolProvider\Service;
/**
* Class to represent a tool consumer context
*
* @author Stephen P Vickers <svickers@imsglobal.org>
* @copyright IMS Global Learning Consortium Inc
* @date 2016
* @version 3.0.2
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
#[\AllowDynamicProperties]
class Context
{
/**
* Context ID as supplied in the last connection request.
*
* @var string $ltiContextId
*/
public $ltiContextId = null;
/**
* Context title.
*
* @var string $title
*/
public $title = null;
/**
* Setting values (LTI parameters, custom parameters and local parameters).
*
* @var array $settings
*/
public $settings = null;
/**
* Context type.
*
* @var string $type
*/
public $type = null;
/**
* Date/time when the object was created.
*
* @var int $created
*/
public $created = null;
/**
* Date/time when the object was last updated.
*
* @var int $updated
*/
public $updated = null;
/**
* Tool Consumer for this context.
*
* @var ToolConsumer $consumer
*/
private $consumer = null;
/**
* Tool Consumer ID for this context.
*
* @var int $consumerId
*/
private $consumerId = null;
/**
* ID for this context.
*
* @var int $id
*/
private $id = null;
/**
* Whether the settings value have changed since last saved.
*
* @var boolean $settingsChanged
*/
private $settingsChanged = false;
/**
* Data connector object or string.
*
* @var mixed $dataConnector
*/
private $dataConnector = null;
/**
* Class constructor.
*/
public function __construct()
{
$this->initialize();
}
/**
* Initialise the context.
*/
public function initialize()
{
$this->title = '';
$this->settings = array();
$this->created = null;
$this->updated = null;
}
/**
* Initialise the context.
*
* Pseudonym for initialize().
*/
public function initialise()
{
$this->initialize();
}
/**
* Save the context to the database.
*
* @return boolean True if the context was successfully saved.
*/
public function save()
{
$ok = $this->getDataConnector()->saveContext($this);
if ($ok) {
$this->settingsChanged = false;
}
return $ok;
}
/**
* Delete the context from the database.
*
* @return boolean True if the context was successfully deleted.
*/
public function delete()
{
return $this->getDataConnector()->deleteContext($this);
}
/**
* Get tool consumer.
*
* @return ToolConsumer Tool consumer object for this context.
*/
public function getConsumer()
{
if (is_null($this->consumer)) {
$this->consumer = ToolConsumer::fromRecordId($this->consumerId, $this->getDataConnector());
}
return $this->consumer;
}
/**
* Set tool consumer ID.
*
* @param int $consumerId Tool Consumer ID for this resource link.
*/
public function setConsumerId($consumerId)
{
$this->consumer = null;
$this->consumerId = $consumerId;
}
/**
* Get tool consumer key.
*
* @return string Consumer key value for this context.
*/
public function getKey()
{
return $this->getConsumer()->getKey();
}
/**
* Get context ID.
*
* @return string ID for this context.
*/
public function getId()
{
return $this->ltiContextId;
}
/**
* Get the context record ID.
*
* @return int Context record ID value
*/
public function getRecordId()
{
return $this->id;
}
/**
* Sets the context record ID.
*
* @return int $id Context record ID value
*/
public function setRecordId($id)
{
$this->id = $id;
}
/**
* Get the data connector.
*
* @return mixed Data connector object or string
*/
public function getDataConnector()
{
return $this->dataConnector;
}
/**
* Get a setting value.
*
* @param string $name Name of setting
* @param string $default Value to return if the setting does not exist (optional, default is an empty string)
*
* @return string Setting value
*/
public function getSetting($name, $default = '')
{
if (array_key_exists($name, $this->settings)) {
$value = $this->settings[$name];
} else {
$value = $default;
}
return $value;
}
/**
* Set a setting value.
*
* @param string $name Name of setting
* @param string $value Value to set, use an empty value to delete a setting (optional, default is null)
*/
public function setSetting($name, $value = null)
{
$old_value = $this->getSetting($name);
if ($value !== $old_value) {
if (!empty($value)) {
$this->settings[$name] = $value;
} else {
unset($this->settings[$name]);
}
$this->settingsChanged = true;
}
}
/**
* Get an array of all setting values.
*
* @return array Associative array of setting values
*/
public function getSettings()
{
return $this->settings;
}
/**
* Set an array of all setting values.
*
* @param array $settings Associative array of setting values
*/
public function setSettings($settings)
{
$this->settings = $settings;
}
/**
* Save setting values.
*
* @return boolean True if the settings were successfully saved
*/
public function saveSettings()
{
if ($this->settingsChanged) {
$ok = $this->save();
} else {
$ok = true;
}
return $ok;
}
/**
* Check if the Tool Settings service is supported.
*
* @return boolean True if this context supports the Tool Settings service
*/
public function hasToolSettingsService()
{
$url = $this->getSetting('custom_context_setting_url');
return !empty($url);
}
/**
* Get Tool Settings.
*
* @param int $mode Mode for request (optional, default is current level only)
* @param boolean $simple True if all the simple media type is to be used (optional, default is true)
*
* @return mixed The array of settings if successful, otherwise false
*/
public function getToolSettings($mode = Service\ToolSettings::MODE_CURRENT_LEVEL, $simple = true)
{
$url = $this->getSetting('custom_context_setting_url');
$service = new Service\ToolSettings($this, $url, $simple);
$response = $service->get($mode);
return $response;
}
/**
* Perform a Tool Settings service request.
*
* @param array $settings An associative array of settings (optional, default is none)
*
* @return boolean True if action was successful, otherwise false
*/
public function setToolSettings($settings = array())
{
$url = $this->getSetting('custom_context_setting_url');
$service = new Service\ToolSettings($this, $url);
$response = $service->set($settings);
return $response;
}
/**
* Check if the Membership service is supported.
*
* @return boolean True if this context supports the Membership service
*/
public function hasMembershipService()
{
$url = $this->getSetting('custom_context_memberships_url');
return !empty($url);
}
/**
* Get Memberships.
*
* @return mixed The array of User objects if successful, otherwise false
*/
public function getMembership()
{
$url = $this->getSetting('custom_context_memberships_url');
$service = new Service\Membership($this, $url);
$response = $service->get();
return $response;
}
/**
* Load the context from the database.
*
* @param int $id Record ID of context
* @param DataConnector $dataConnector Database connection object
*
* @return Context Context object
*/
public static function fromRecordId($id, $dataConnector)
{
$context = new Context();
$context->dataConnector = $dataConnector;
$context->load($id);
return $context;
}
/**
* Class constructor from consumer.
*
* @param ToolConsumer $consumer Consumer instance
* @param string $ltiContextId LTI Context ID value
* @return Context
*/
public static function fromConsumer($consumer, $ltiContextId)
{
$context = new Context();
$context->consumer = $consumer;
$context->dataConnector = $consumer->getDataConnector();
$context->ltiContextId = $ltiContextId;
if (!empty($ltiContextId)) {
$context->load();
}
return $context;
}
###
### PRIVATE METHODS
###
/**
* Load the context from the database.
*
* @param int $id Record ID of context (optional, default is null)
*
* @return boolean True if context was successfully loaded
*/
private function load($id = null)
{
$this->initialize();
$this->id = $id;
return $this->getDataConnector()->loadContext($this);
}
}