AutorÃa | Ultima modificación | Ver Log |
<?phpnamespace IMSGlobal\LTI\ToolProvider;use IMSGlobal\LTI\ToolProvider\DataConnector\DataConnector;/*** Class to represent a tool consumer user** @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 User{/*** User's first name.** @var string $firstname*/public $firstname = '';/*** User's last name (surname or family name).** @var string $lastname*/public $lastname = '';/*** User's fullname.** @var string $fullname*/public $fullname = '';/*** User's email address.** @var string $email*/public $email = '';/*** User's image URI.** @var string $image*/public $image = '';/*** Roles for user.** @var array $roles*/public $roles = array();/*** Groups for user.** @var array $groups*/public $groups = array();/*** User's result sourcedid.** @var string $ltiResultSourcedId*/public $ltiResultSourcedId = null;/*** Date/time the record was created.** @var object $created*/public $created = null;/*** Date/time the record was last updated.** @var object $updated*/public $updated = null;/*** Resource link object.** @var ResourceLink $resourceLink*/private $resourceLink = null;/*** Resource link record ID.** @var int $resourceLinkId*/private $resourceLinkId = null;/*** User record ID value.** @var string $id*/private $id = null;/*** user ID as supplied in the last connection request.** @var string $ltiUserId*/public $ltiUserId = null;/*** Data connector object or string.** @var mixed $dataConnector*/private $dataConnector = null;/*** Class constructor.*/public function __construct(){$this->initialize();}/*** Initialise the user.*/public function initialize(){$this->firstname = '';$this->lastname = '';$this->fullname = '';$this->email = '';$this->image = '';$this->roles = array();$this->groups = array();$this->ltiResultSourcedId = null;$this->created = null;$this->updated = null;}/*** Initialise the user.** Pseudonym for initialize().*/public function initialise(){$this->initialize();}/*** Save the user to the database.** @return boolean True if the user object was successfully saved*/public function save(){if (!empty($this->ltiResultSourcedId) && !is_null($this->resourceLinkId)) {$ok = $this->getDataConnector()->saveUser($this);} else {$ok = true;}return $ok;}/*** Delete the user from the database.** @return boolean True if the user object was successfully deleted*/public function delete(){$ok = $this->getDataConnector()->deleteUser($this);return $ok;}/*** Get resource link.** @return ResourceLink Resource link object*/public function getResourceLink(){if (is_null($this->resourceLink) && !is_null($this->resourceLinkId)) {$this->resourceLink = ResourceLink::fromRecordId($this->resourceLinkId, $this->getDataConnector());}return $this->resourceLink;}/*** Get record ID of user.** @return int Record ID of user*/public function getRecordId(){return $this->id;}/*** Set record ID of user.** @param int $id Record ID of user*/public function setRecordId($id){$this->id = $id;}/*** Set resource link ID of user.** @param int $resourceLinkId Resource link ID of user*/public function setResourceLinkId($resourceLinkId){$this->resourceLinkId = $resourceLinkId;}/*** Get the data connector.** @return mixed Data connector object or string*/public function getDataConnector(){return $this->dataConnector;}/*** Get the user ID (which may be a compound of the tool consumer and resource link IDs).** @param int $idScope Scope to use for user ID (optional, default is null for consumer default setting)** @return string User ID value*/public function getId($idScope = null){if (empty($idScope)) {if (!is_null($this->resourceLink)) {$idScope = $this->resourceLink->getConsumer()->idScope;} else {$idScope = ToolProvider::ID_SCOPE_ID_ONLY;}}switch ($idScope) {case ToolProvider::ID_SCOPE_GLOBAL:$id = $this->getResourceLink()->getKey() . ToolProvider::ID_SCOPE_SEPARATOR . $this->ltiUserId;break;case ToolProvider::ID_SCOPE_CONTEXT:$id = $this->getResourceLink()->getKey();if ($this->resourceLink->ltiContextId) {$id .= ToolProvider::ID_SCOPE_SEPARATOR . $this->resourceLink->ltiContextId;}$id .= ToolProvider::ID_SCOPE_SEPARATOR . $this->ltiUserId;break;case ToolProvider::ID_SCOPE_RESOURCE:$id = $this->getResourceLink()->getKey();if ($this->resourceLink->ltiResourceLinkId) {$id .= ToolProvider::ID_SCOPE_SEPARATOR . $this->resourceLink->ltiResourceLinkId;}$id .= ToolProvider::ID_SCOPE_SEPARATOR . $this->ltiUserId;break;default:$id = $this->ltiUserId;break;}return $id;}/*** Set the user's name.** @param string $firstname User's first name.* @param string $lastname User's last name.* @param string $fullname User's full name.*/public function setNames($firstname, $lastname, $fullname){$names = array(0 => '', 1 => '');if (!empty($fullname)) {$this->fullname = trim($fullname);$names = preg_split("/[\s]+/", $this->fullname, 2);}if (!empty($firstname)) {$this->firstname = trim($firstname);$names[0] = $this->firstname;} else if (!empty($names[0])) {$this->firstname = $names[0];} else {$this->firstname = 'User';}if (!empty($lastname)) {$this->lastname = trim($lastname);$names[1] = $this->lastname;} else if (!empty($names[1])) {$this->lastname = $names[1];} else {$this->lastname = $this->ltiUserId;}if (empty($this->fullname)) {$this->fullname = "{$this->firstname} {$this->lastname}";}}/*** Set the user's email address.** @param string $email Email address value* @param string $defaultEmail Value to use if no email is provided (optional, default is none)*/public function setEmail($email, $defaultEmail = null){if (!empty($email)) {$this->email = $email;} else if (!empty($defaultEmail)) {$this->email = $defaultEmail;if (substr($this->email, 0, 1) === '@') {$this->email = $this->getId() . $this->email;}} else {$this->email = '';}}/*** Check if the user is an administrator (at any of the system, institution or context levels).** @return boolean True if the user has a role of administrator*/public function isAdmin(){return $this->hasRole('Administrator') || $this->hasRole('urn:lti:sysrole:ims/lis/SysAdmin') ||$this->hasRole('urn:lti:sysrole:ims/lis/Administrator') || $this->hasRole('urn:lti:instrole:ims/lis/Administrator');}/*** Check if the user is staff.** @return boolean True if the user has a role of instructor, contentdeveloper or teachingassistant*/public function isStaff(){return ($this->hasRole('Instructor') || $this->hasRole('ContentDeveloper') || $this->hasRole('TeachingAssistant'));}/*** Check if the user is a learner.** @return boolean True if the user has a role of learner*/public function isLearner(){return $this->hasRole('Learner');}/*** Load the user from the database.** @param int $id Record ID of user* @param DataConnector $dataConnector Database connection object** @return User User object*/public static function fromRecordId($id, $dataConnector){$user = new User();$user->dataConnector = $dataConnector;$user->load($id);return $user;}/*** Class constructor from resource link.** @param ResourceLink $resourceLink Resource_Link object* @param string $ltiUserId User ID value* @return User*/public static function fromResourceLink($resourceLink, $ltiUserId){$user = new User();$user->resourceLink = $resourceLink;if (!is_null($resourceLink)) {$user->resourceLinkId = $resourceLink->getRecordId();$user->dataConnector = $resourceLink->getDataConnector();}$user->ltiUserId = $ltiUserId;if (!empty($ltiUserId)) {$user->load();}return $user;}###### PRIVATE METHODS###/*** Check whether the user has a specified role name.** @param string $role Name of role** @return boolean True if the user has the specified role*/private function hasRole($role) {if (substr($role, 0, 4) !== 'urn:'){$role = 'urn:lti:role:ims/lis/' . $role;}return in_array($role, $this->roles);}/*** Load the user from the database.** @param int $id Record ID of user (optional, default is null)** @return boolean True if the user object was successfully loaded*/private function load($id = null){$this->initialize();$this->id = $id;$dataConnector = $this->getDataConnector();if (!is_null($dataConnector)) {return $dataConnector->loadUser($this);}return false;}}