AutorÃa | Ultima modificación | Ver Log |
<?php
namespace IMSGlobal\LTI\ToolProvider;
use IMSGlobal\LTI\ToolProvider\DataConnector\DataConnector;
/**
* Class to represent a tool consumer resource link share key
*
* @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 ResourceLinkShareKey
{
/**
* Maximum permitted life for a share key value.
*/
const MAX_SHARE_KEY_LIFE = 168; // in hours (1 week)
/**
* Default life for a share key value.
*/
const DEFAULT_SHARE_KEY_LIFE = 24; // in hours
/**
* Minimum length for a share key value.
*/
const MIN_SHARE_KEY_LENGTH = 5;
/**
* Maximum length for a share key value.
*/
const MAX_SHARE_KEY_LENGTH = 32;
/**
* ID for resource link being shared.
*
* @var string $resourceLinkId
*/
public $resourceLinkId = null;
/**
* Length of share key.
*
* @var int $length
*/
public $length = null;
/**
* Life of share key.
*
* @var int $life
*/
public $life = null; // in hours
/**
* Whether the sharing arrangement should be automatically approved when first used.
*
* @var boolean $autoApprove
*/
public $autoApprove = false;
/**
* Date/time when the share key expires.
*
* @var int $expires
*/
public $expires = null;
/**
* Share key value.
*
* @var string $id
*/
private $id = null;
/**
* Data connector.
*
* @var DataConnector $dataConnector
*/
private $dataConnector = null;
/**
* Class constructor.
*
* @param ResourceLink $resourceLink Resource_Link object
* @param string $id Value of share key (optional, default is null)
*/
public function __construct($resourceLink, $id = null)
{
$this->initialize();
$this->dataConnector = $resourceLink->getDataConnector();
$this->resourceLinkId = $resourceLink->getRecordId();
$this->id = $id;
if (!empty($id)) {
$this->load();
}
}
/**
* Initialise the resource link share key.
*/
public function initialize()
{
$this->length = null;
$this->life = null;
$this->autoApprove = false;
$this->expires = null;
}
/**
* Initialise the resource link share key.
*
* Pseudonym for initialize().
*/
public function initialise()
{
$this->initialize();
}
/**
* Save the resource link share key to the database.
*
* @return boolean True if the share key was successfully saved
*/
public function save()
{
if (empty($this->life)) {
$this->life = self::DEFAULT_SHARE_KEY_LIFE;
} else {
$this->life = max(min($this->life, self::MAX_SHARE_KEY_LIFE), 0);
}
$this->expires = time() + ($this->life * 60 * 60);
if (empty($this->id)) {
if (empty($this->length) || !is_numeric($this->length)) {
$this->length = self::MAX_SHARE_KEY_LENGTH;
} else {
$this->length = max(min($this->length, self::MAX_SHARE_KEY_LENGTH), self::MIN_SHARE_KEY_LENGTH);
}
$this->id = DataConnector::getRandomString($this->length);
}
return $this->dataConnector->saveResourceLinkShareKey($this);
}
/**
* Delete the resource link share key from the database.
*
* @return boolean True if the share key was successfully deleted
*/
public function delete()
{
return $this->dataConnector->deleteResourceLinkShareKey($this);
}
/**
* Get share key value.
*
* @return string Share key value
*/
public function getId()
{
return $this->id;
}
###
### PRIVATE METHOD
###
/**
* Load the resource link share key from the database.
*/
private function load()
{
$this->initialize();
$this->dataConnector->loadResourceLinkShareKey($this);
if (!is_null($this->id)) {
$this->length = strlen($this->id);
}
if (!is_null($this->expires)) {
$this->life = ($this->expires - time()) / 60 / 60;
}
}
}