示例#1
1
文件: lib.php 项目: dg711/moodle
 /**
  * Delete plugin specific information.
  *
  * @param stdClass $instance
  * @return void
  */
 public function delete_instance($instance)
 {
     global $DB;
     // Get the tool associated with this instance.
     $tool = $DB->get_record('enrol_lti_tools', array('enrolid' => $instance->id), 'id', MUST_EXIST);
     // Delete any users associated with this tool.
     $DB->delete_records('enrol_lti_users', array('toolid' => $tool->id));
     // Get tool and consumer mappings.
     $rsmapping = $DB->get_recordset('enrol_lti_tool_consumer_map', array('toolid' => $tool->id));
     // Delete consumers that are linked to this tool and their related data.
     $dataconnector = new data_connector();
     foreach ($rsmapping as $mapping) {
         $consumer = new ToolConsumer(null, $dataconnector);
         $consumer->setRecordId($mapping->consumerid);
         $dataconnector->deleteToolConsumer($consumer);
     }
     $rsmapping->close();
     // Delete mapping records.
     $DB->delete_records('enrol_lti_tool_consumer_map', array('toolid' => $tool->id));
     // Delete the lti tool record.
     $DB->delete_records('enrol_lti_tools', array('id' => $tool->id));
     // Time for the parent to do it's thang, yeow.
     parent::delete_instance($instance);
 }
示例#2
0
文件: lib_test.php 项目: dg711/moodle
 /**
  * Test for enrol_lti_plugin::delete_instance().
  */
 public function test_delete_instance()
 {
     global $DB;
     // Create tool enrolment instance.
     $data = new stdClass();
     $data->enrolstartdate = time();
     $data->secret = 'secret';
     $tool = $this->getDataGenerator()->create_lti_tool($data);
     // Create consumer and related data.
     $dataconnector = new data_connector();
     $consumer = new ToolConsumer('testkey', $dataconnector);
     $consumer->secret = $tool->secret;
     $consumer->ltiVersion = ToolProvider::LTI_VERSION1;
     $consumer->name = 'TEST CONSUMER NAME';
     $consumer->consumerName = 'TEST CONSUMER INSTANCE NAME';
     $consumer->consumerGuid = 'TEST CONSUMER INSTANCE GUID';
     $consumer->consumerVersion = 'TEST CONSUMER INFO VERSION';
     $consumer->enabled = true;
     $consumer->protected = true;
     $consumer->save();
     $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
     $resourcelink->save();
     $ltiuser = User::fromResourceLink($resourcelink, '');
     $ltiuser->ltiResultSourcedId = 'testLtiResultSourcedId';
     $ltiuser->ltiUserId = 'testuserid';
     $ltiuser->email = '*****@*****.**';
     $ltiuser->save();
     $tp = new tool_provider($tool->id);
     $tp->user = $ltiuser;
     $tp->resourceLink = $resourcelink;
     $tp->consumer = $consumer;
     $tp->map_tool_to_consumer();
     $mappingparams = ['toolid' => $tool->id, 'consumerid' => $tp->consumer->getRecordId()];
     // Check first that the related records exist.
     $this->assertTrue($DB->record_exists('enrol_lti_tool_consumer_map', $mappingparams));
     $this->assertTrue($DB->record_exists('enrol_lti_lti2_consumer', ['id' => $consumer->getRecordId()]));
     $this->assertTrue($DB->record_exists('enrol_lti_lti2_resource_link', ['id' => $resourcelink->getRecordId()]));
     $this->assertTrue($DB->record_exists('enrol_lti_lti2_user_result', ['id' => $ltiuser->getRecordId()]));
     // Perform deletion.
     $enrollti = new enrol_lti_plugin();
     $instance = $DB->get_record('enrol', ['id' => $tool->enrolid]);
     $enrollti->delete_instance($instance);
     // Check that the related records have been deleted.
     $this->assertFalse($DB->record_exists('enrol_lti_tool_consumer_map', $mappingparams));
     $this->assertFalse($DB->record_exists('enrol_lti_lti2_consumer', ['id' => $consumer->getRecordId()]));
     $this->assertFalse($DB->record_exists('enrol_lti_lti2_resource_link', ['id' => $resourcelink->getRecordId()]));
     $this->assertFalse($DB->record_exists('enrol_lti_lti2_user_result', ['id' => $ltiuser->getRecordId()]));
     // Check that the enrolled users and the tool instance has been deleted.
     $this->assertFalse($DB->record_exists('enrol_lti_users', ['toolid' => $tool->id]));
     $this->assertFalse($DB->record_exists('enrol_lti_tools', ['id' => $tool->id]));
     $this->assertFalse($DB->record_exists('enrol', ['id' => $instance->id]));
 }
示例#3
0
文件: Service.php 项目: dg711/moodle
 /**
  * Send a service request.
  *
  * @param string  $method      The action type constant (optional, default is GET)
  * @param array   $parameters  Query parameters to add to endpoint (optional, default is none)
  * @param string  $body        Body of request (optional, default is null)
  *
  * @return HTTPMessage HTTP object containing request and response details
  */
 public function send($method, $parameters = array(), $body = null)
 {
     $url = $this->endpoint;
     if (!empty($parameters)) {
         if (strpos($url, '?') === false) {
             $sep = '?';
         } else {
             $sep = '&';
         }
         foreach ($parameters as $name => $value) {
             $url .= $sep . urlencode($name) . '=' . urlencode($value);
             $sep = '&';
         }
     }
     if (!$this->unsigned) {
         $header = ToolProvider\ToolConsumer::addSignature($url, $this->consumer->getKey(), $this->consumer->secret, $body, $method, $this->mediaType);
     } else {
         $header = null;
     }
     // Connect to tool consumer
     $http = new HTTPMessage($url, $method, $body, $header);
     // Parse JSON response
     if ($http->send() && !empty($http->response)) {
         $http->responseJson = json_decode($http->response);
         $http->ok = !is_null($http->responseJson);
     }
     return $http;
 }
示例#4
0
 public function setUp()
 {
     $this->resetAfterTest();
     // Set this user as the admin.
     $this->setAdminUser();
     $this->task = new dummy_sync_members_task();
     $generator = $this->getDataGenerator();
     $course = $generator->create_course();
     $tooldata = ['courseid' => $course->id, 'membersyncmode' => helper::MEMBER_SYNC_ENROL_AND_UNENROL, 'membersync' => 1];
     $tool = $generator->create_lti_tool((object) $tooldata);
     $this->tool = helper::get_lti_tool($tool->id);
     $dataconnector = $this->task->get_dataconnector();
     $this->consumer = new ToolConsumer('Consumer1Key', $dataconnector);
     $this->consumer->name = 'Consumer1';
     $this->consumer->secret = 'Consumer1Secret';
     $this->consumer->save();
     $toolprovider = new tool_provider($this->tool->id);
     $toolprovider->consumer = $this->consumer;
     $toolprovider->map_tool_to_consumer();
     $imageurl = $this->getExternalTestFileUrl('test.jpg');
     $count = 10;
     $this->members = [];
     for ($i = 1; $i <= $count; $i++) {
         $user = new User();
         $user->firstname = 'Firstname' . $i;
         $user->lastname = 'Lastname' . $i;
         $user->ltiUserId = 'user' . $i;
         // Set user image values for some users.
         if ($i % 3 == 0) {
             $user->image = $imageurl;
         }
         $this->members[] = $user;
     }
     $this->context = Context::fromConsumer($this->consumer, 'testlticontextid');
     $this->context->save();
     $this->resourcelink = ResourceLink::fromContext($this->context, 'testresourcelinkid');
     $this->resourcelink->save();
 }
示例#5
0
 /**
  * Class constructor from consumer.
  *
  * @param ToolConsumer $consumer Consumer object
  * @param string $ltiResourceLinkId Resource link ID value
  * @param string $tempId Temporary Resource link ID value (optional, default is null)
  * @return ResourceLink
  */
 public static function fromConsumer($consumer, $ltiResourceLinkId, $tempId = null)
 {
     $resourceLink = new ResourceLink();
     $resourceLink->consumer = $consumer;
     $resourceLink->dataConnector = $consumer->getDataConnector();
     $resourceLink->ltiResourceLinkId = $ltiResourceLinkId;
     if (!empty($ltiResourceLinkId)) {
         $resourceLink->load();
         if (is_null($resourceLink->id) && !empty($tempId)) {
             $resourceLink->ltiResourceLinkId = $tempId;
             $resourceLink->load();
             $resourceLink->ltiResourceLinkId = $ltiResourceLinkId;
         }
     }
     return $resourceLink;
 }
示例#6
0
 /**
  * Performs synchronisation of member information and enrolments.
  *
  * @param stdClass $tool
  * @param ToolConsumer $consumer
  * @param User[] $members
  * @return array An array containing the number of members that were processed and the number of members that were enrolled.
  */
 protected function sync_member_information(stdClass $tool, ToolConsumer $consumer, $members)
 {
     global $DB;
     $usercount = 0;
     $enrolcount = 0;
     // Process member information.
     foreach ($members as $member) {
         $usercount++;
         // Set the user data.
         $user = new stdClass();
         $user->username = helper::create_username($consumer->getKey(), $member->ltiUserId);
         $user->firstname = core_user::clean_field($member->firstname, 'firstname');
         $user->lastname = core_user::clean_field($member->lastname, 'lastname');
         $user->email = core_user::clean_field($member->email, 'email');
         // Get the user data from the LTI consumer.
         $user = helper::assign_user_tool_data($tool, $user);
         $dbuser = core_user::get_user_by_username($user->username, 'id');
         if ($dbuser) {
             // If email is empty remove it, so we don't update the user with an empty email.
             if (empty($user->email)) {
                 unset($user->email);
             }
             $user->id = $dbuser->id;
             user_update_user($user);
             // Add the information to the necessary arrays.
             if (!in_array($user->id, $this->currentusers)) {
                 $this->currentusers[] = $user->id;
             }
             $this->userphotos[$user->id] = $member->image;
         } else {
             if ($this->should_sync_enrol($tool->membersyncmode)) {
                 // If the email was stripped/not set then fill it with a default one. This
                 // stops the user from being redirected to edit their profile page.
                 if (empty($user->email)) {
                     $user->email = $user->username . "@example.com";
                 }
                 $user->auth = 'lti';
                 $user->id = user_create_user($user);
                 // Add the information to the necessary arrays.
                 $this->currentusers[] = $user->id;
                 $this->userphotos[$user->id] = $member->image;
             }
         }
         // Sync enrolments.
         if ($this->should_sync_enrol($tool->membersyncmode)) {
             // Enrol the user in the course.
             if (helper::enrol_user($tool, $user->id) === helper::ENROLMENT_SUCCESSFUL) {
                 // Increment enrol count.
                 $enrolcount++;
             }
             // Check if this user has already been registered in the enrol_lti_users table.
             if (!$DB->record_exists('enrol_lti_users', ['toolid' => $tool->id, 'userid' => $user->id])) {
                 // Create an initial enrol_lti_user record that we can use later when syncing grades and members.
                 $userlog = new stdClass();
                 $userlog->userid = $user->id;
                 $userlog->toolid = $tool->id;
                 $userlog->consumerkey = $consumer->getKey();
                 $DB->insert_record('enrol_lti_users', $userlog);
             }
         }
     }
     return [$usercount, $enrolcount];
 }
示例#7
0
 public function getToolConsumers()
 {
     $consumers = array();
     $sql = 'SELECT consumer_pk, consumer_key, consumer_key, name, secret, lti_version, consumer_name, consumer_version, consumer_guid, ' . 'profile, tool_proxy, settings, ' . 'protected, enabled, enable_from, enable_until, last_access, created, updated ' . "FROM {$this->dbTableNamePrefix}" . DataConnector::CONSUMER_TABLE_NAME . ' ' . 'ORDER BY name';
     $rsConsumers = mysql_query($sql);
     if ($rsConsumers) {
         while ($row = mysql_fetch_object($rsConsumers)) {
             $consumer = new ToolProvider\ToolConsumer($row->consumer_key, $this);
             $consumer->setRecordId(intval($row->consumer_pk));
             $consumer->name = $row->name;
             $consumer->secret = $row->secret;
             $consumer->ltiVersion = $row->lti_version;
             $consumer->consumerName = $row->consumer_name;
             $consumer->consumerVersion = $row->consumer_version;
             $consumer->consumerGuid = $row->consumer_guid;
             $consumer->profile = json_decode($row->profile);
             $consumer->toolProxy = $row->tool_proxy;
             $settings = unserialize($row->settings);
             if (!is_array($settings)) {
                 $settings = array();
             }
             $consumer->setSettings($settings);
             $consumer->protected = intval($row->protected) === 1;
             $consumer->enabled = intval($row->enabled) === 1;
             $consumer->enableFrom = null;
             if (!is_null($row->enable_from)) {
                 $consumer->enableFrom = strtotime($row->enable_from);
             }
             $consumer->enableUntil = null;
             if (!is_null($row->enable_until)) {
                 $consumer->enableUntil = strtotime($row->enable_until);
             }
             $consumer->lastAccess = null;
             if (!is_null($row->last_access)) {
                 $consumer->lastAccess = strtotime($row->last_access);
             }
             $consumer->created = strtotime($row->created);
             $consumer->updated = strtotime($row->updated);
             $consumers[] = $consumer;
         }
         mysql_free_result($rsConsumers);
     }
     return $consumers;
 }
示例#8
0
 /**
  * Test for data_connector::deleteUser().
  */
 public function test_delete_user()
 {
     $dc = new data_connector();
     $consumer = new ToolConsumer(null, $dc);
     $consumer->name = 'TestName';
     $consumer->setKey('TestKey');
     $consumer->secret = 'TestSecret';
     $consumer->save();
     $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
     $resourcelink->save();
     $user = User::fromResourceLink($resourcelink, '');
     $user->ltiResultSourcedId = 'testLtiResultSourcedId';
     $user->firstname = 'First';
     $user->lastname = 'Last';
     $user->fullname = 'Full name';
     $user->email = '*****@*****.**';
     $user->roles = ['a', 'b'];
     $user->groups = ['1', '2'];
     $user->save();
     // Delete user.
     $this->assertTrue($dc->deleteUser($user));
     // User record should have been deleted from the DB.
     $this->assertFalse($dc->loadUser($user));
     // User object should have been initialised().
     $this->assertEmpty($user->firstname);
     $this->assertEmpty($user->lastname);
     $this->assertEmpty($user->fullname);
     $this->assertEmpty($user->email);
     $this->assertEmpty($user->roles);
     $this->assertEmpty($user->groups);
     $this->assertNull($user->ltiResultSourcedId);
     $this->assertNull($user->created);
     $this->assertNull($user->updated);
 }
示例#9
0
 /**
  * Delete tool consumer object.
  *
  * @param ToolConsumer $consumer Consumer object
  *
  * @return boolean True if the tool consumer object was successfully deleted
  */
 public function deleteToolConsumer($consumer)
 {
     $id = $consumer->getRecordId();
     // Delete any nonce values for this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::NONCE_TABLE_NAME . ' WHERE consumer_pk = :id';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete any outstanding share keys for resource links for this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . ' ' . "WHERE EXISTS (SELECT * FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' rl ' . "WHERE ({$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . '.resource_link_pk = rl.resource_link_pk) AND (rl.consumer_pk = :id))';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete any outstanding share keys for resource links for contexts in this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . ' ' . "WHERE EXISTS (SELECT * FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' rl ' . "INNER JOIN {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' c ON rl.context_pk = c.context_pk ' . "WHERE ({$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . '.resource_link_pk = rl.resource_link_pk) AND (c.consumer_pk = :id))';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete any users in resource links for this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::USER_RESULT_TABLE_NAME . ' ' . "WHERE EXISTS (SELECT * FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' rl ' . "WHERE ({$this->dbTableNamePrefix}" . DataConnector::USER_RESULT_TABLE_NAME . '.resource_link_pk = rl.resource_link_pk) AND (rl.consumer_pk = :id))';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete any users in resource links for contexts in this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::USER_RESULT_TABLE_NAME . ' ' . "WHERE EXISTS (SELECT * FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' rl ' . "INNER JOIN {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' c ON rl.context_pk = c.context_pk ' . "WHERE ({$this->dbTableNamePrefix}" . DataConnector::USER_RESULT_TABLE_NAME . '.resource_link_pk = rl.resource_link_pk) AND (c.consumer_pk = :id))';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Update any resource links for which this consumer is acting as a primary resource link
     $sql = "UPDATE {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' ' . 'SET primary_resource_link_pk = NULL, share_approved = NULL ' . "WHERE EXISTS (SELECT * FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' rl ' . "WHERE ({$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . '.primary_resource_link_pk = rl.resource_link_pk) AND (rl.consumer_pk = :id))';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Update any resource links for contexts in which this consumer is acting as a primary resource link
     $sql = "UPDATE {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' ' . 'SET primary_resource_link_pk = NULL, share_approved = NULL ' . "WHERE EXISTS (SELECT * FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' rl ' . "INNER JOIN {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' c ON rl.context_pk = c.context_pk ' . "WHERE ({$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . '.primary_resource_link_pk = rl.resource_link_pk) AND (c.consumer_pk = :id))';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete any resource links for this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' ' . 'WHERE consumer_pk = :id';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete any resource links for contexts in this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' ' . "WHERE EXISTS (SELECT * FROM {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' c ' . "WHERE ({$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . '.context_pk = c.context_pk) AND (c.consumer_pk = :id))';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete any contexts for this consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' ' . 'WHERE consumer_pk = :id';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $query->execute();
     // Delete consumer
     $sql = "DELETE FROM {$this->dbTableNamePrefix}" . DataConnector::CONSUMER_TABLE_NAME . ' ' . 'WHERE consumer_pk = :id';
     $query = $this->db->prepare($sql);
     $query->bindValue('id', $id, PDO::PARAM_INT);
     $ok = $query->execute();
     if ($ok) {
         $consumer->initialize();
     }
     return $ok;
 }
示例#10
0
 /**
  * Check if a share arrangement is in place.
  *
  * @return boolean True if no error is reported
  */
 private function checkForShare()
 {
     $ok = true;
     $doSaveResourceLink = true;
     $id = $this->resourceLink->primaryResourceLinkId;
     $shareRequest = isset($_POST['custom_share_key']) && !empty($_POST['custom_share_key']);
     if ($shareRequest) {
         if (!$this->allowSharing) {
             $ok = false;
             $this->reason = 'Your sharing request has been refused because sharing is not being permitted.';
         } else {
             // Check if this is a new share key
             $shareKey = new ResourceLinkShareKey($this->resourceLink, $_POST['custom_share_key']);
             if (!is_null($shareKey->primaryConsumerKey) && !is_null($shareKey->primaryResourceLinkId)) {
                 // Update resource link with sharing primary resource link details
                 $key = $shareKey->primaryConsumerKey;
                 $id = $shareKey->primaryResourceLinkId;
                 $ok = $key !== $this->consumer->getKey() || $id != $this->resourceLink->getId();
                 if ($ok) {
                     $this->resourceLink->primaryConsumerKey = $key;
                     $this->resourceLink->primaryResourceLinkId = $id;
                     $this->resourceLink->shareApproved = $shareKey->autoApprove;
                     $ok = $this->resourceLink->save();
                     if ($ok) {
                         $doSaveResourceLink = false;
                         $this->user->getResourceLink()->primaryConsumerKey = $key;
                         $this->user->getResourceLink()->primaryResourceLinkId = $id;
                         $this->user->getResourceLink()->shareApproved = $shareKey->autoApprove;
                         $this->user->getResourceLink()->updated = time();
                         // Remove share key
                         $shareKey->delete();
                     } else {
                         $this->reason = 'An error occurred initialising your share arrangement.';
                     }
                 } else {
                     $this->reason = 'It is not possible to share your resource link with yourself.';
                 }
             }
             if ($ok) {
                 $ok = !is_null($key);
                 if (!$ok) {
                     $this->reason = 'You have requested to share a resource link but none is available.';
                 } else {
                     $ok = !is_null($this->user->getResourceLink()->shareApproved) && $this->user->getResourceLink()->shareApproved;
                     if (!$ok) {
                         $this->reason = 'Your share request is waiting to be approved.';
                     }
                 }
             }
         }
     } else {
         // Check no share is in place
         $ok = is_null($id);
         if (!$ok) {
             $this->reason = 'You have not requested to share a resource link but an arrangement is currently in place.';
         }
     }
     // Look up primary resource link
     if ($ok && !is_null($id)) {
         $consumer = new ToolConsumer($key, $this->dataConnector);
         $ok = !is_null($consumer->created);
         if ($ok) {
             $resourceLink = ResourceLink::fromConsumer($consumer, $id);
             $ok = !is_null($resourceLink->created);
         }
         if ($ok) {
             if ($doSaveResourceLink) {
                 $this->resourceLink->save();
             }
             $this->resourceLink = $resourceLink;
         } else {
             $this->reason = 'Unable to load resource link being shared.';
         }
     }
     return $ok;
 }
示例#11
0
 /**
  * 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;
 }
示例#12
0
 /**
  * Delete tool consumer object.
  *
  * @param ToolConsumer $consumer Consumer object
  *
  * @return boolean True if the tool consumer object was successfully deleted
  */
 public function deleteToolConsumer($consumer)
 {
     $consumer->initialize();
     return true;
 }
示例#13
0
 /**
  * Load the tool consumer from the database by its record ID.
  *
  * @param string          $id                The consumer key record ID
  * @param DataConnector   $dataConnector    Database connection object
  *
  * @return object ToolConsumer       The tool consumer object
  */
 public static function fromRecordId($id, $dataConnector)
 {
     $toolConsumer = new ToolConsumer(null, $dataConnector);
     $toolConsumer->initialize();
     $toolConsumer->setRecordId($id);
     if (!$dataConnector->loadToolConsumer($toolConsumer)) {
         $toolConsumer->initialize();
     }
     return $toolConsumer;
 }
示例#14
0
 public function getToolConsumers()
 {
     $consumers = array();
     $sql = 'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' . 'consumer_name, consumer_version, consumer_guid, ' . 'profile, tool_proxy, settings, protected, enabled, ' . 'enable_from, enable_until, last_access, created, updated ' . "FROM {$this->dbTableNamePrefix}" . DataConnector::CONSUMER_TABLE_NAME . ' ' . 'ORDER BY name';
     $query = $this->db->prepare($sql);
     $ok = $query !== FALSE;
     if ($ok) {
         $ok = $query->execute();
     }
     if ($ok) {
         while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
             $row = array_change_key_case($row);
             $key = empty($row['consumer_key']) ? $row['consumer_key256'] : $row['consumer_key'];
             $consumer = new ToolProvider\ToolConsumer($key, $this);
             $consumer->setRecordId(intval($row['consumer_pk']));
             $consumer->name = $row['name'];
             $consumer->secret = $row['secret'];
             $consumer->ltiVersion = $row['lti_version'];
             $consumer->consumerName = $row['consumer_name'];
             $consumer->consumerVersion = $row['consumer_version'];
             $consumer->consumerGuid = $row['consumer_guid'];
             $consumer->profile = json_decode($row['profile']);
             $consumer->toolProxy = $row['tool_proxy'];
             $settings = unserialize($row['settings']);
             if (!is_array($settings)) {
                 $settings = array();
             }
             $consumer->setSettings($settings);
             $consumer->protected = intval($row['protected']) === 1;
             $consumer->enabled = intval($row['enabled']) === 1;
             $consumer->enableFrom = null;
             if (!is_null($row['enable_from'])) {
                 $consumer->enableFrom = strtotime($row['enable_from']);
             }
             $consumer->enableUntil = null;
             if (!is_null($row['enable_until'])) {
                 $consumer->enableUntil = strtotime($row['enable_until']);
             }
             $consumer->lastAccess = null;
             if (!is_null($row['last_access'])) {
                 $consumer->lastAccess = strtotime($row['last_access']);
             }
             $consumer->created = strtotime($row['created']);
             $consumer->updated = strtotime($row['updated']);
             $consumers[] = $consumer;
         }
     }
     return $consumers;
 }
示例#15
0
 /**
  * Override ToolConsumer::doServiceRequest() to simulate sending/receiving data to and from the tool consumer.
  *
  * @param object $service
  * @param string $method
  * @param string $format
  * @param mixed $data
  * @return HTTPMessage
  */
 public function doServiceRequest($service, $method, $format, $data)
 {
     $response = (object) ['tool_proxy_guid' => 1];
     $header = ToolConsumer::addSignature($service->endpoint, $this->getKey(), $this->secret, $data, $method, $format);
     $http = new HTTPMessage($service->endpoint, $method, $data, $header);
     if ($this->success) {
         $http->responseJson = $response;
         $http->ok = true;
         $http->status = 201;
     }
     return $http;
 }
示例#16
0
 /**
  * Test for data_connector::get_resourcelink_from_context()
  */
 public function test_get_resourcelink_from_context()
 {
     $dc = new data_connector();
     $consumer = new ToolConsumer(null, $dc);
     $consumer->name = 'TestName';
     $consumer->setKey('TestKey');
     $consumer->secret = 'TestSecret';
     $consumer->save();
     $settings = ['a', 'b', 'c'];
     $lticontextid = 'testlticontextid';
     $context = Context::fromConsumer($consumer, $lticontextid);
     $context->settings = $settings;
     $context->save();
     // No ResourceLink associated with the Context yet.
     $this->assertNull($dc->get_resourcelink_from_context($context));
     // Create and save ResourceLink from the Context.
     $resourcelink = ResourceLink::fromContext($context, 'testresourcelinkid');
     $resourcelink->save();
     $dc->loadResourceLink($resourcelink);
     // Assert that the resource link and the one fetched by get_resourcelink_from_context() are the same.
     $this->assertEquals($resourcelink, $dc->get_resourcelink_from_context($context));
 }
示例#17
0
 /**
  * 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;
 }
示例#18
0
 /**
  * Builds a ToolConsumer object from a record object from the DB.
  *
  * @param stdClass $record The DB record object.
  * @param ToolConsumer $consumer
  */
 protected function build_tool_consumer_object($record, ToolConsumer $consumer)
 {
     $consumer->setRecordId($record->id);
     $consumer->name = $record->name;
     $key = empty($record->consumerkey) ? $record->consumerkey256 : $record->consumerkey;
     $consumer->setKey($key);
     $consumer->secret = $record->secret;
     $consumer->ltiVersion = $record->ltiversion;
     $consumer->consumerName = $record->consumername;
     $consumer->consumerVersion = $record->consumerversion;
     $consumer->consumerGuid = $record->consumerguid;
     $consumer->profile = json_decode($record->profile);
     $consumer->toolProxy = $record->toolproxy;
     $settings = unserialize($record->settings);
     if (!is_array($settings)) {
         $settings = array();
     }
     $consumer->setSettings($settings);
     $consumer->protected = $record->protected == 1;
     $consumer->enabled = $record->enabled == 1;
     $consumer->enableFrom = null;
     if (!is_null($record->enablefrom)) {
         $consumer->enableFrom = $record->enablefrom;
     }
     $consumer->enableUntil = null;
     if (!is_null($record->enableuntil)) {
         $consumer->enableUntil = $record->enableuntil;
     }
     $consumer->lastAccess = null;
     if (!is_null($record->lastaccess)) {
         $consumer->lastAccess = $record->lastaccess;
     }
     $consumer->created = $record->created;
     $consumer->updated = $record->updated;
 }