From a78d184c0576a852af2c19ea825d50c11d36410c Mon Sep 17 00:00:00 2001 From: Jun Pataleta Date: Tue, 18 Oct 2016 10:18:24 +0800 Subject: [PATCH] MDL-55825 core_lib: LTI tool provider library fixes * Define consumer profile member variable for ToolConsumer class * Added context type property for Context class * Set context type if 'context_type' parameter was submitted through POST This commit can be dropped once the pull requests for these changes have been integrated upstream. --- lib/ltiprovider/readme_moodle.txt | 11 +++++++++-- lib/ltiprovider/src/ToolProvider/Context.php | 6 ++++++ .../DataConnector/DataConnector_mysql.php | 16 ++++++++++------ .../DataConnector/DataConnector_pdo.php | 13 ++++++++----- .../src/ToolProvider/ToolConsumer.php | 7 +++++++ .../src/ToolProvider/ToolProvider.php | 3 +++ 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/lib/ltiprovider/readme_moodle.txt b/lib/ltiprovider/readme_moodle.txt index 263bc503ea5..76579e1eaa3 100644 --- a/lib/ltiprovider/readme_moodle.txt +++ b/lib/ltiprovider/readme_moodle.txt @@ -1,8 +1,15 @@ LTI Tool Provider Library PHP ============================= -No changes from the upstream version have been made, it is recommended by upstream -to install these depdencies via composer - but the composer installation is bundled +Some changes from the upstream version have been made: +* Define consumer profile member variable for ToolConsumer class +* Added context type property for Context class +* Set context type if 'context_type' parameter was submitted through POST +These changes can be reverted once the following pull requests have been integrated upstream: +* https://github.com/IMSGlobal/LTI-Tool-Provider-Library-PHP/pull/10/commits/a9a1641f1a593eba4638133245c21d9ad47d8680 +* https://github.com/IMSGlobal/LTI-Tool-Provider-Library-PHP/pull/11/commits/0bae60389bd020a02be5554516b86336e651e237 + +It is recommended by upstream to install depdencies via composer - but the composer installation is bundled with an autoloader so it's better to do it manually. Information diff --git a/lib/ltiprovider/src/ToolProvider/Context.php b/lib/ltiprovider/src/ToolProvider/Context.php index 6f585ad759a..5a0c784f440 100644 --- a/lib/ltiprovider/src/ToolProvider/Context.php +++ b/lib/ltiprovider/src/ToolProvider/Context.php @@ -35,6 +35,12 @@ class Context * @var array $settings */ public $settings = null; +/** + * Context type. + * + * @var string $type + */ + public $type = null; /** * Date/time when the object was created. * diff --git a/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_mysql.php b/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_mysql.php index c0dc1ce1b39..844a42cd35f 100644 --- a/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_mysql.php +++ b/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_mysql.php @@ -390,12 +390,12 @@ class DataConnector_mysql extends DataConnector $ok = false; if (!empty($context->getRecordId())) { - $sql = sprintf('SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' . + $sql = sprintf('SELECT context_pk, consumer_pk, lti_context_id, type, settings, created, updated ' . "FROM {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' ' . 'WHERE (context_pk = %d)', $context->getRecordId()); } else { - $sql = sprintf('SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' . + $sql = sprintf('SELECT context_pk, consumer_pk, lti_context_id, type, settings, created, updated ' . "FROM {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' ' . 'WHERE (consumer_pk = %d) AND (lti_context_id = %s)', $context->getConsumer()->getRecordId(), DataConnector::quoted($context->ltiContextId)); @@ -407,6 +407,7 @@ class DataConnector_mysql extends DataConnector $context->setRecordId(intval($row->context_pk)); $context->setConsumerId(intval($row->consumer_pk)); $context->ltiContextId = $row->lti_context_id; + $context->type = $row->type; $settings = unserialize($row->settings); if (!is_array($settings)) { $settings = array(); @@ -439,17 +440,20 @@ class DataConnector_mysql extends DataConnector $consumer_pk = $context->getConsumer()->getRecordId(); if (empty($id)) { $sql = sprintf("INSERT INTO {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' (consumer_pk, lti_context_id, ' . - 'settings, created, updated) ' . - 'VALUES (%d, %s, %s, %s, %s)', + 'type, settings, created, updated) ' . + 'VALUES (%d, %s, %s, %s, %s, %s)', $consumer_pk, DataConnector::quoted($context->ltiContextId), + DataConnector::quoted($context->type), DataConnector::quoted($settingsValue), DataConnector::quoted($now), DataConnector::quoted($now)); } else { $sql = sprintf("UPDATE {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' SET ' . - 'lti_context_id = %s, settings = %s, '. + 'lti_context_id = %s, type = %s, settings = %s, '. 'updated = %s' . 'WHERE (consumer_pk = %d) AND (context_pk = %d)', - DataConnector::quoted($context->ltiContextId), DataConnector::quoted($settingsValue), + DataConnector::quoted($context->ltiContextId), + DataConnector::quoted($context->type), + DataConnector::quoted($settingsValue), DataConnector::quoted($now), $consumer_pk, $id); } $ok = mysql_query($sql); diff --git a/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_pdo.php b/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_pdo.php index 3528acaebe1..9453d6169f7 100644 --- a/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_pdo.php +++ b/lib/ltiprovider/src/ToolProvider/DataConnector/DataConnector_pdo.php @@ -452,13 +452,13 @@ class DataConnector_pdo extends DataConnector $ok = false; if (!empty($context->getRecordId())) { - $sql = 'SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' . + $sql = 'SELECT context_pk, consumer_pk, lti_context_id, type, settings, created, updated ' . "FROM {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' ' . 'WHERE (context_pk = :id)'; $query = $this->db->prepare($sql); $query->bindValue('id', $context->getRecordId(), PDO::PARAM_INT); } else { - $sql = 'SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' . + $sql = 'SELECT context_pk, consumer_pk, lti_context_id, type, settings, created, updated ' . "FROM {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' ' . 'WHERE (consumer_pk = :cid) AND (lti_context_id = :ctx)'; $query = $this->db->prepare($sql); @@ -475,6 +475,7 @@ class DataConnector_pdo extends DataConnector $context->setRecordId(intval($row['context_pk'])); $context->setConsumerId(intval($row['consumer_pk'])); $context->ltiContextId = $row['lti_context_id']; + $context->type = $row['type']; $settings = unserialize($row['settings']); if (!is_array($settings)) { $settings = array(); @@ -505,21 +506,23 @@ class DataConnector_pdo extends DataConnector $consumer_pk = $context->getConsumer()->getRecordId(); if (empty($id)) { $sql = "INSERT INTO {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' (consumer_pk, lti_context_id, ' . - 'settings, created, updated) ' . - 'VALUES (:cid, :ctx, :settings, :created, :updated)'; + 'type, settings, created, updated) ' . + 'VALUES (:cid, :ctx, :type, :settings, :created, :updated)'; $query = $this->db->prepare($sql); $query->bindValue('cid', $consumer_pk, PDO::PARAM_INT); $query->bindValue('ctx', $context->ltiContextId, PDO::PARAM_STR); + $query->bindValue('type', $context->type, PDO::PARAM_STR); $query->bindValue('settings', $settingsValue, PDO::PARAM_STR); $query->bindValue('created', $now, PDO::PARAM_STR); $query->bindValue('updated', $now, PDO::PARAM_STR); } else { $sql = "UPDATE {$this->dbTableNamePrefix}" . DataConnector::CONTEXT_TABLE_NAME . ' SET ' . - 'lti_context_id = :ctx, settings = :settings, '. + 'lti_context_id = :ctx, type = :type, settings = :settings, '. 'updated = :updated ' . 'WHERE (consumer_pk = :cid) AND (context_pk = :ctxid)'; $query = $this->db->prepare($sql); $query->bindValue('ctx', $context->ltiContextId, PDO::PARAM_STR); + $query->bindValue('type', $context->type, PDO::PARAM_STR); $query->bindValue('settings', $settingsValue, PDO::PARAM_STR); $query->bindValue('updated', $now, PDO::PARAM_STR); $query->bindValue('cid', $consumer_pk, PDO::PARAM_INT); diff --git a/lib/ltiprovider/src/ToolProvider/ToolConsumer.php b/lib/ltiprovider/src/ToolProvider/ToolConsumer.php index aa31793d225..5fa87ce0621 100644 --- a/lib/ltiprovider/src/ToolProvider/ToolConsumer.php +++ b/lib/ltiprovider/src/ToolProvider/ToolConsumer.php @@ -6,6 +6,7 @@ use IMSGlobal\LTI\ToolProvider\DataConnector\DataConnector; use IMSGlobal\LTI\ToolProvider\Service; use IMSGlobal\LTI\HTTPMessage; use IMSGlobal\LTI\OAuth; +use stdClass; /** * Class to represent a tool consumer @@ -121,6 +122,12 @@ class ToolConsumer * @var int $updated */ public $updated = null; +/** + * The consumer profile data. + * + * @var stdClass + */ + public $profile = null; /** * Consumer ID value. diff --git a/lib/ltiprovider/src/ToolProvider/ToolProvider.php b/lib/ltiprovider/src/ToolProvider/ToolProvider.php index b78b03ec449..27cbd6e4bb0 100644 --- a/lib/ltiprovider/src/ToolProvider/ToolProvider.php +++ b/lib/ltiprovider/src/ToolProvider/ToolProvider.php @@ -983,6 +983,9 @@ EOD; if (empty($title)) { $title = "Course {$this->context->getId()}"; } + if (isset($_POST['context_type'])) { + $this->context->type = trim($_POST['context_type']); + } $this->context->title = $title; }