41        $this->logger = 
$DIC->logger()->lti();
 
   43        $this->dbTableNamePrefix = 
"";
 
   62        $query = 
'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' .
 
   63                       'consumer_name, consumer_version, consumer_guid, ' .
 
   64                       'profile, tool_proxy, settings, protected, enabled, ' .
 
   65                       'enable_from, enable_until, last_access, created, updated ' .
 
   68                       'FROM lti2_consumer WHERE ';
 
   72            $query .= 
'consumer_pk = %s';
 
   73            $types = array(
'integer');
 
   74            $values = array(
$consumer->getRecordId());
 
   76            $query .= 
'consumer_key256 = %s';
 
   77            $types = array(
'text');
 
   78            $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey(
$consumer->getKey());
 
   79            $values = array($key256);
 
   86            if (empty($key256) || empty(
$row->consumer_key) || (
$consumer->getKey() === 
$row->consumer_key)) {
 
   97                $settings = unserialize(
$row->settings);
 
   98                if (!is_array($settings)) {
 
  105                if (!is_null(
$row->enable_from)) {
 
  109                if (!is_null(
$row->enable_until)) {
 
  113                if (!is_null(
$row->last_access)) {
 
  148        $query = 
'SELECT * from lti2_consumer where id = ' . 
$ilDB->quote(
$consumer->getExtConsumerId(), 
'integer');
 
  171        $query = 
'SELECT * from lti_ext_consumer where id = ' . 
$ilDB->quote(
$consumer->getExtConsumerId(), 
'integer');
 
  198        $query = 
'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' .
 
  199                       'consumer_name, consumer_version, consumer_guid, ' .
 
  200                       'profile, tool_proxy, settings, protected, enabled, ' .
 
  201                       'enable_from, enable_until, last_access, created, updated, ' .
 
  202                       'ext_consumer_id, ref_id ' .
 
  203                       #
'title, description, prefix, user_language, role, local_role_always_member, default_skin ' .
 
  204                       'FROM lti2_consumer ' .
 
  205                       #
'FROM lti2_consumer, lti_ext_consumer ' .
 
  207        #'WHERE lti_ext_consumer.id = consumer_pk AND '; 
  209            $query .= 
'consumer_pk = %s';
 
  210            $types = array(
'integer');
 
  211            $values = array(
$consumer->getRecordId());
 
  213            $query .= 
'consumer_key256 = %s';
 
  214            $types = array(
'text');
 
  215            $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey(
$consumer->getKey());
 
  216            $values = array($key256);
 
  223            if (empty($key256) || empty(
$row->consumer_key) || (
$consumer->getKey() === 
$row->consumer_key)) {
 
  234                $settings = unserialize(
$row->settings);
 
  235                if (!is_array($settings)) {
 
  242                if (!is_null(
$row->enable_from)) {
 
  246                if (!is_null(
$row->enable_until)) {
 
  250                if (!is_null(
$row->last_access)) {
 
  259                #$consumer->setTitle($row->title); 
  260                #$consumer->setDescription($row->description); 
  261                #$consumer->setPrefix($row->prefix); 
  262                #$consumer->setLanguage($row->user_language); 
  263                #$consumer->setRole($row->role); 
  288        $query = 
'SELECT consumer_pk from lti2_consumer ' .
 
  289            'WHERE ext_consumer_id = ' . $db->quote(
$consumer->getExtConsumerId(), 
'integer') . 
' ' .
 
  290            'AND ref_id = ' . $db->quote(
$consumer->getRefId(), 
'integer');
 
  293            return $row->consumer_pk;
 
  312        $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey(
$key);
 
  314        if (
$key === $key256) {
 
  317        $protected = (
$consumer->protected) ? 1 : 0;
 
  320        $settingsValue = serialize(
$consumer->getSettings());
 
  322        $now = 
date(
"{$this->dateFormat} {$this->timeFormat}", 
$time);
 
  329            $until = 
date(
"{$this->dateFormat} {$this->timeFormat}", 
$consumer->enableUntil);
 
  341            if ($key256 == 
null) {
 
  342                $key256 = 
$id . ToolProvider\DataConnector\DataConnector::getRandomString(10);
 
  346            $query = 
'INSERT INTO lti2_consumer (consumer_key256, consumer_key, name, ' .
 
  347                        'secret, lti_version, consumer_name, consumer_version, consumer_guid, profile, tool_proxy, settings, protected, enabled, ' .
 
  348                        'enable_from, enable_until, last_access, created, updated, consumer_pk) ' .
 
  349                        'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)';
 
  350            $types = array(
"text", 
"text", 
"text",
 
  351                        "text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"integer", 
"integer",
 
  352                        "timestamp", 
"timestamp", 
"timestamp", 
"timestamp", 
"timestamp", 
"integer");
 
  354                        $consumer->secret, 
$consumer->ltiVersion, 
$consumer->consumerName, 
$consumer->consumerVersion, 
$consumer->consumerGuid, $profile, 
$consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  355                        $from, $until, $last, $now, $now, 
$id);
 
  360            $query = 
'UPDATE lti2_consumer SET ' .
 
  361                           'consumer_key256 = %s, consumer_key = %s, name = %s, ' .
 
  362                           'secret= %s, lti_version = %s, consumer_name = %s, consumer_version = %s, consumer_guid = %s, ' .
 
  363                           'profile = %s, tool_proxy = %s, settings = %s, protected = %s, enabled = %s, ' .
 
  364                           'enable_from = %s, enable_until = %s, last_access = %s, updated = %s ' .
 
  365                           'WHERE consumer_pk = %s';
 
  366            $types = array(
"text", 
"text", 
"text",
 
  367                        "text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"integer", 
"integer",
 
  368                        "timestamp", 
"timestamp", 
"timestamp", 
"timestamp", 
"integer");
 
  370                        $consumer->secret, 
$consumer->ltiVersion, 
$consumer->consumerName, 
$consumer->consumerVersion, 
$consumer->consumerGuid, $profile, 
$consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  388            $new_id = 
$ilDB->nextId(
'lti_ext_consumer');
 
  389            $query = 
'INSERT INTO lti_ext_consumer (title, description, prefix, user_language, role, id, active) ' .
 
  390                'VALUES (%s, %s, %s, %s, %s, %s, %s)';
 
  391            $types = [
"text", 
"text", 
"text", 
"text", 
"integer", 
"integer", 
'integer'];
 
  406            $query = 
'update lti_ext_consumer set ' .
 
  408                'description = ' . 
$ilDB->quote(
$consumer->getDescription(), 
'text') . 
', ' .
 
  409                'prefix = ' . 
$ilDB->quote(
$consumer->getPrefix(), 
'text') . 
', ' .
 
  410                'user_language = ' . 
$ilDB->quote(
$consumer->getLanguage(), 
'text') . 
', ' .
 
  411                'role = ' . 
$ilDB->quote(
$consumer->getRole(), 
'integer') . 
', ' .
 
  412                'active = ' . 
$ilDB->quote((
int) 
$consumer->getActive(), 
'integer') . 
' ' .
 
  413                'where id = ' . 
$ilDB->quote(
$consumer->getExtConsumerId(), 
'integer');
 
  434        $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey(
$key);
 
  436        if (
$key === $key256) {
 
  439        $protected = (
$consumer->protected) ? 1 : 0;
 
  442        $settingsValue = serialize(
$consumer->getSettings());
 
  444        $now = 
date(
"{$this->dateFormat} {$this->timeFormat}", 
$time);
 
  451            $until = 
date(
"{$this->dateFormat} {$this->timeFormat}", 
$consumer->enableUntil);
 
  464            if ($key256 == 
null) {
 
  465                $key256 = 
$id . ToolProvider\DataConnector\DataConnector::getRandomString(10);
 
  469            $query = 
'INSERT INTO lti2_consumer (consumer_key256, consumer_key, name, ' .
 
  470                        'secret, lti_version, consumer_name, consumer_version, consumer_guid, profile, tool_proxy, settings, protected, enabled, ' .
 
  471                        'enable_from, enable_until, last_access, created, updated, consumer_pk,ext_consumer_id,ref_id) ' .
 
  472                        'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)';
 
  473            $types = array(
"text", 
"text", 
"text",
 
  474                        "text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"integer", 
"integer",
 
  475                        "timestamp", 
"timestamp", 
"timestamp", 
"timestamp", 
"timestamp", 
"integer", 
'integer', 
'integer');
 
  477                        $consumer->secret, 
$consumer->ltiVersion, 
$consumer->consumerName, 
$consumer->consumerVersion, 
$consumer->consumerGuid, $profile, 
$consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  483            $query = 
'UPDATE lti2_consumer SET ' .
 
  484                           'consumer_key256 = %s, consumer_key = %s, name = %s, ' .
 
  485                           'secret= %s, lti_version = %s, consumer_name = %s, consumer_version = %s, consumer_guid = %s, ' .
 
  486                           'profile = %s, tool_proxy = %s, settings = %s, protected = %s, enabled = %s, ' .
 
  487                           'enable_from = %s, enable_until = %s, last_access = %s, updated = %s ' .
 
  488                           'WHERE consumer_pk = %s';
 
  489            $types = array(
"text", 
"text", 
"text",
 
  490                        "text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"text", 
"integer", 
"integer",
 
  491                        "timestamp", 
"timestamp", 
"timestamp", 
"timestamp", 
"integer");
 
  493                        $consumer->secret, 
$consumer->ltiVersion, 
$consumer->consumerName, 
$consumer->consumerVersion, 
$consumer->consumerGuid, $profile, 
$consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  509        $query = 
'DELETE FROM lti_ext_consumer WHERE id = %s';
 
  510        $types = array(
"integer");
 
  511        $values = array(
$consumer->getExtConsumerId());
 
  514        $query = 
'DELETE FROM lti_ext_consumer_otype WHERE consumer_id = %s';
 
  515        $types = array(
"integer");
 
  516        $values = array(
$consumer->getExtConsumerId());
 
  539        $query = 
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME . 
' WHERE consumer_pk = %s';
 
  540        $types = array(
"integer");
 
  541        $values = array(
$consumer->getRecordId());
 
  546                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
' sk ' .
 
  547                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
 
  548                       'WHERE rl.consumer_pk = %s';
 
  549        $types = array(
"integer");
 
  550        $values = array(
$consumer->getRecordId());
 
  555                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
' sk ' .
 
  556                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
 
  557                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' c ON rl.context_pk = c.context_pk ' .
 
  558                       'WHERE c.consumer_pk = %s';
 
  559        $types = array(
"integer");
 
  560        $values = array(
$consumer->getRecordId());
 
  565                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' u ' .
 
  566                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
 
  567                       'WHERE rl.consumer_pk = %s';
 
  568        $types = array(
"integer");
 
  569        $values = array(
$consumer->getRecordId());
 
  574                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' u ' .
 
  575                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
 
  576                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' c ON rl.context_pk = c.context_pk ' .
 
  577                       'WHERE c.consumer_pk = %s';
 
  578        $types = array(
"integer");
 
  579        $values = array(
$consumer->getRecordId());
 
  583        $query = 
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' prl ' .
 
  584                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
 
  585                       'SET prl.primary_resource_link_pk = NULL, prl.share_approved = NULL ' .
 
  586                       'WHERE rl.consumer_pk = %s';
 
  587        $types = array(
"integer");
 
  588        $values = array(
$consumer->getRecordId());
 
  592        $query = 
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' prl ' .
 
  593                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
 
  594                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' c ON rl.context_pk = c.context_pk ' .
 
  595                       'SET prl.primary_resource_link_pk = NULL, prl.share_approved = NULL ' .
 
  596                       'WHERE c.consumer_pk = %s';
 
  597        $types = array(
"integer");
 
  598        $values = array(
$consumer->getRecordId());
 
  603                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ' .
 
  604                       'WHERE rl.consumer_pk = %s';
 
  605        $types = array(
"integer");
 
  606        $values = array(
$consumer->getRecordId());
 
  611                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ' .
 
  612                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' c ON rl.context_pk = c.context_pk ' .
 
  613                       'WHERE c.consumer_pk = %s';
 
  614        $types = array(
"integer");
 
  615        $values = array(
$consumer->getRecordId());
 
  620                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' c ' .
 
  621                       'WHERE c.consumer_pk = %s';
 
  622        $types = array(
"integer");
 
  623        $values = array(
$consumer->getRecordId());
 
  628                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONSUMER_TABLE_NAME . 
' c ' .
 
  629                       'WHERE c.consumer_pk = %s';
 
  630        $types = array(
"integer");
 
  631        $values = array(
$consumer->getRecordId());
 
  651        $consumers = array();
 
  652        $query = 
'SELECT * from lti_ext_consumer ';
 
  671    #    Load all tool consumers from the database 
  677        require_once 
'Services/LTI/classes/InternalProvider/class.ilLTIToolConsumer.php';
 
  678        $consumers = array();
 
  679        $query = 
'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' .
 
  680                       'consumer_name, consumer_version, consumer_guid, ' .
 
  681                       'profile, tool_proxy, settings, protected, enabled, ' .
 
  682                       'enable_from, enable_until, last_access, created, updated, ' .
 
  683                       'title, description, prefix, user_language, role, local_role_always_member, default_skin ' .
 
  684                       'FROM lti2_consumer, lti_ext_consumer ' .
 
  685                       'WHERE lti_ext_consumer.id = consumer_pk';
 
  709            $settings = unserialize(
$row->settings);
 
  710            if (!is_array($settings)) {
 
  717            if (!is_null(
$row->enable_from)) {
 
  721            if (!is_null(
$row->enable_until)) {
 
  725            if (!is_null(
$row->last_access)) {
 
  747    ###  ToolProxy methods 
  751    #    Load the tool proxy from the database 
  759    #    Save the tool proxy to the database 
  767    #    Delete the tool proxy from the database 
  791        if (!empty($context->getRecordId())) {
 
  792            $query = 
'SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' .
 
  793                           "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' ' .
 
  794                           'WHERE (context_pk = %s)';
 
  795            $types = array(
"integer");
 
  796            $values = array($context->getRecordId());
 
  798            $query = 
'SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' .
 
  799                           "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' ' .
 
  800                           'WHERE (consumer_pk = %s) AND (lti_context_id = %s)';
 
  801            $types = array(
"integer",
"text");
 
  802            $values = array($context->getConsumer()->getRecordId(), $context->ltiContextId);
 
  804        $rs_context = 
$ilDB->queryF(
$query, $types, $values);
 
  808                $context->setRecordId(intval(
$row->context_pk));
 
  809                $context->setConsumerId(intval(
$row->consumer_pk));
 
  810                $context->ltiContextId = 
$row->lti_context_id;
 
  811                $settings = unserialize(
$row->settings);
 
  812                if (!is_array($settings)) {
 
  815                $context->setSettings($settings);
 
  816                $context->created = strtotime(
$row->created);
 
  817                $context->updated = strtotime(
$row->updated);
 
  838        $now = 
date(
"{$this->dateFormat} {$this->timeFormat}", 
$time);
 
  839        $settingsValue = serialize($context->getSettings());
 
  840        $id = $context->getRecordId();
 
  841        $consumer_pk = $context->getConsumer()->getRecordId();
 
  844            $id = $context->getRecordId();
 
  845            $context->created = 
$time;
 
  847            $query = 
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' (context_pk, consumer_pk, lti_context_id, ' .
 
  848                           'settings, created, updated) ' .
 
  849                           'VALUES (%s, %s, %s, %s, %s, %s)';
 
  850            $types = array(
"integer",
"integer",
"text",
"text",
"timestamp",
"timestamp");
 
  851            $values = array(
$id, $consumer_pk, $context->ltiContextId, $settingsValue, $now, $now);
 
  853            $query = 
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' SET ' .
 
  854                           'lti_context_id = %s, settings = %s, ' .
 
  856                           'WHERE (consumer_pk = %s) AND (context_pk = %s)';
 
  857            $types = array(
"text",
"text",
"timestamp",
"integer",
"integer");
 
  858            $values = array($context->ltiContextId, $settingsValue, $now, $consumer_pk, 
$id);
 
  862            $context->updated = 
$time;
 
  882                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
' sk ' .
 
  883                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
 
  884                       'WHERE rl.context_pk = %s';
 
  885        $types = array(
"integer");
 
  886        $values = array($context->getRecordId());
 
  891                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' u ' .
 
  892                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
 
  893                       'WHERE rl.context_pk = %s';
 
  894        $types = array(
"integer");
 
  895        $values = array($context->getRecordId());
 
  899        $query = 
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' prl ' .
 
  900                       "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
 
  901                       'SET prl.primary_resource_link_pk = null, prl.share_approved = null ' .
 
  902                       'WHERE rl.context_pk = %s';
 
  903        $types = array(
"integer");
 
  904        $values = array($context->getRecordId());
 
  909                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' rl ' .
 
  910                       'WHERE rl.context_pk = %s';
 
  911        $types = array(
"integer");
 
  912        $values = array($context->getRecordId());
 
  917                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' c ' .
 
  918                       'WHERE c.context_pk = %s';
 
  919        $types = array(
"integer");
 
  920        $values = array($context->getRecordId());
 
  923            $context->initialize();
 
  930    ###  ResourceLink methods 
  946        if (!empty($resourceLink->getRecordId())) {
 
  947            $query = 
'SELECT resource_link_pk, context_pk, consumer_pk, lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated ' .
 
  948                           "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' ' .
 
  949                           'WHERE (resource_link_pk = %s)';
 
  950            $types = array(
"integer");
 
  951            $values = array($resourceLink->getRecordId());
 
  952        } elseif (!empty($resourceLink->getContext())) {
 
  953            $query = 
'SELECT resource_link_pk, context_pk, consumer_pk, lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated ' .
 
  954                           "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' ' .
 
  955                           'WHERE (context_pk = %s) AND (lti_resource_link_id = %s)';
 
  956            $types = array(
"integer",
"text");
 
  957            $values = array($resourceLink->getContext()->getRecordId(), $resourceLink->getId());
 
  959            $query = 
'SELECT r.resource_link_pk, r.context_pk, r.consumer_pk, r.lti_resource_link_id, r.settings, r.primary_resource_link_pk, r.share_approved, r.created, r.updated ' .
 
  960                           "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' r LEFT OUTER JOIN ' .
 
  961                           $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME . 
' c ON r.context_pk = c.context_pk ' .
 
  962                           ' WHERE ((r.consumer_pk = %s) OR (c.consumer_pk = %s)) AND (lti_resource_link_id = %s)';
 
  963            $types = array(
"integer",
"integer",
"text");
 
  964            $values = array($resourceLink->getConsumer()->getRecordId(), $resourceLink->getConsumer()->getRecordId(), $resourceLink->getId());
 
  966        $rsContext = 
$ilDB->queryF(
$query, $types, $values);
 
  970                $resourceLink->setRecordId(intval(
$row->resource_link_pk));
 
  971                if (!is_null(
$row->context_pk)) {
 
  972                    $resourceLink->setContextId(intval(
$row->context_pk));
 
  974                    $resourceLink->setContextId(
null);
 
  976                if (!is_null(
$row->consumer_pk)) {
 
  977                    $resourceLink->setConsumerId(intval(
$row->consumer_pk));
 
  979                    $resourceLink->setConsumerId(
null);
 
  981                $resourceLink->ltiResourceLinkId = 
$row->lti_resource_link_id;
 
  982                $settings = unserialize(
$row->settings);
 
  983                if (!is_array($settings)) {
 
  986                $resourceLink->setSettings($settings);
 
  987                if (!is_null(
$row->primary_resource_link_pk)) {
 
  988                    $resourceLink->primaryResourceLinkId = intval(
$row->primary_resource_link_pk);
 
  990                    $resourceLink->primaryResourceLinkId = 
null;
 
  992                $resourceLink->shareApproved = (is_null(
$row->share_approved)) ? 
null : (intval(
$row->share_approved) === 1);
 
  993                $resourceLink->created = strtotime(
$row->created);
 
  994                $resourceLink->updated = strtotime(
$row->updated);
 
 1014        if (is_null($resourceLink->shareApproved)) {
 
 1016        } elseif ($resourceLink->shareApproved) {
 
 1021        if (empty($resourceLink->primaryResourceLinkId)) {
 
 1022            $primaryResourceLinkId = 
'NULL';
 
 1024            $primaryResourceLinkId = strval($resourceLink->primaryResourceLinkId);
 
 1027        $now = 
date(
"{$this->dateFormat} {$this->timeFormat}", 
$time);
 
 1028        $settingsValue = serialize($resourceLink->getSettings());
 
 1029        if (!empty($resourceLink->getContext())) {
 
 1031            $consumerId = strval($resourceLink->getConsumer()->getRecordId());
 
 1032            $contextId = strval($resourceLink->getContext()->getRecordId());
 
 1033        } elseif (!empty($resourceLink->getContextId())) {
 
 1035            $consumerId = strval($resourceLink->getConsumer()->getRecordId());
 
 1036            $contextId = strval($resourceLink->getContextId());
 
 1038            $consumerId = strval($resourceLink->getConsumer()->getRecordId());
 
 1039            $contextId = 
'NULL';
 
 1041        $id = $resourceLink->getRecordId();
 
 1044            $id = $resourceLink->getRecordId();
 
 1045            $resourceLink->created = 
$time;
 
 1046            $query = 
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' (resource_link_pk, consumer_pk, context_pk, ' .
 
 1047                           'lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated) ' .
 
 1048                           'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)';
 
 1049            $types = array(
"integer",
"integer",
"integer",
"text",
"text",
"integer",
"integer",
"timestamp",
"timestamp");
 
 1050            $values = array(
$id, $consumerId, $contextId, $resourceLink->getId(), $settingsValue, $primaryResourceLinkId, $approved, $now, $now);
 
 1051        } elseif ($contextId !== 
'NULL') {
 
 1052            $query = 
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' SET ' .
 
 1053                           'consumer_pk = %s, lti_resource_link_id = %s, settings = %s, ' .
 
 1054                           'primary_resource_link_pk = %s, share_approved = %s, updated = %s ' .
 
 1055                           'WHERE (context_pk = %s) AND (resource_link_pk = %s)';
 
 1056            $types = array(
"integer",
"text",
"text",
"integer",
"integer",
"timestamp",
"integer",
"integer");
 
 1057            $values = array($consumerId, $resourceLink->getId(), $settingsValue, $primaryResourceLinkId, $approved, $now, $contextId, 
$id);
 
 1059            $query = 
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' SET ' .
 
 1060                           'context_pk = %s, lti_resource_link_id = %s, settings = %s, ' .
 
 1061                           'primary_resource_link_pk = %s, share_approved = %s, updated = %s ' .
 
 1062                           'WHERE (consumer_pk = %s) AND (resource_link_pk = %s)';
 
 1063            $types = array(
"integer",
"text",
"text",
"integer",
"integer",
"timestamp",
"integer",
"integer");
 
 1064            $values = array($contextId, $resourceLink->getId(), $settingsValue, $primaryResourceLinkId, $approved, $now, $consumerId, 
$id);
 
 1068        $this->logger->info(
'Update resource link with query: ' . 
$query);
 
 1069        $this->logger->logStack();
 
 1072        $this->logger->dump(
$ok);
 
 1075            $resourceLink->updated = 
$time;
 
 1094        $query = 
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
' ' .
 
 1095                       'WHERE (resource_link_pk = %s)';
 
 1096        $types = array(
"integer");
 
 1097        $values = array($resourceLink->getRecordId());
 
 1102            $query = 
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' ' .
 
 1103                           'WHERE (resource_link_pk = %s)';
 
 1104            $types = array(
"integer");
 
 1105            $values = array($resourceLink->getRecordId());
 
 1111            $query = 
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' ' .
 
 1112                           'SET primary_resource_link_pk = NULL ' .
 
 1113                           'WHERE (primary_resource_link_pk = %s)';
 
 1114            $types = array(
"integer");
 
 1115            $values = array($resourceLink->getRecordId());
 
 1121            $query = 
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' ' .
 
 1122                           'WHERE (resource_link_pk = %s)';
 
 1123            $types = array(
"integer");
 
 1124            $values = array($resourceLink->getRecordId());
 
 1129            $resourceLink->initialize();
 
 1203        $query = 
'SELECT consumer_pk, resource_link_pk, share_approved ' .
 
 1204                       "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME . 
' ' .
 
 1205                       'WHERE (primary_resource_link_pk = %s) ' .
 
 1206                       'ORDER BY consumer_pk';
 
 1207        $types = array(
"integer");
 
 1208        $values = array($resourceLink->getRecordId());
 
 1209        $rsShare = 
$ilDB->queryF(
$query, $types, $values);
 
 1211            while (
$row = 
$ilDB->fetchObject($rsShare)) {
 
 1213                $share->resourceLinkId = intval(
$row->resource_link_pk);
 
 1214                $share->approved = (intval(
$row->share_approved) === 1);
 
 1224    ###  ConsumerNonce methods 
 1242        $now = 
date(
"{$this->dateFormat} {$this->timeFormat}", time());
 
 1243        $query = 
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME . 
" WHERE expires <= %s";
 
 1244        $types = array(
"timestamp");
 
 1245        $values = array($now);
 
 1248        $query = 
"SELECT value AS T FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME . 
' WHERE (consumer_pk = %s) AND (value = %s)';
 
 1249        $types = array(
"integer",
"text");
 
 1250        $values = array($nonce->getConsumer()->getRecordId(), $nonce->getValue());
 
 1251        $rs_nonce = 
$ilDB->queryF(
$query, $types, $values);
 
 1274        $expires = 
date(
"{$this->dateFormat} {$this->timeFormat}", $nonce->expires);
 
 1275        $query = 
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME . 
" (consumer_pk, value, expires) VALUES (%s, %s, %s)";
 
 1276        $types = array(
"integer",
"text",
"timestamp");
 
 1277        $values = array($nonce->getConsumer()->getRecordId(), $nonce->getValue(), $expires);
 
 1285    ###  ResourceLinkShareKey methods 
 1303        $now = 
date(
"{$this->dateFormat} {$this->timeFormat}", time());
 
 1304        $query = 
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
" WHERE expires <= '%s'";
 
 1305        $types = array(
"timestamp");
 
 1306        $values = array($now);
 
 1311        $id = $shareKey->getId();
 
 1312        $query = 
'SELECT resource_link_pk, auto_approve, expires ' .
 
 1313               "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
' ' .
 
 1314               "WHERE share_key_id = %s";
 
 1315        $types = array(
"text");
 
 1316        $values = array(
$id);
 
 1317        $rsShareKey = 
$ilDB->queryF(
$query, $types, $values);
 
 1320            if (
$row && (intval(
$row->resource_link_pk) === $shareKey->resourceLinkId)) {
 
 1321                $shareKey->autoApprove = (intval(
$row->auto_approve) === 1);
 
 1322                $shareKey->expires = strtotime(
$row->expires);
 
 1342        if ($shareKey->autoApprove) {
 
 1347        $expires = 
date(
"{$this->dateFormat} {$this->timeFormat}", $shareKey->expires);
 
 1348        $query = 
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
' ' .
 
 1349                       '(share_key_id, resource_link_pk, auto_approve, expires) ' .
 
 1350                       "VALUES (%s, %s, %s, %s)";
 
 1351        $types = array(
"text",
"integer",
"integer",
"timestamp");
 
 1352        $values = array($shareKey->getId(), $shareKey->resourceLinkId, $approve, $expires);
 
 1370        $query = 
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME . 
" WHERE share_key_id = %s";
 
 1371        $types = array(
"text");
 
 1372        $values = array($shareKey->getId());
 
 1376            $shareKey->initialize();
 
 1400        if ($user->getRecordId()) {
 
 1401            $query = 
'SELECT user_pk, resource_link_pk, lti_user_id, lti_result_sourcedid, created, updated ' .
 
 1402                'FROM ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' ' .
 
 1403                'WHERE user_pk = ' . 
$ilDB->quote($user->getRecordId(), 
'integer');
 
 1405            $query = 
'SELECT user_pk, resource_link_pk, lti_user_id, lti_result_sourcedid, created, updated ' .
 
 1406                'FROM ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' ' .
 
 1407                'WHERE resource_link_pk = ' . 
$ilDB->quote($user->getResourceLink()->getRecordId(), 
'integer') . 
' ' .
 
 1408                'AND lti_user_id = ' . 
$ilDB->quote($user->getId(
ToolProvider\ToolProvider::ID_SCOPE_ID_ONLY), 
'text');
 
 1411        $this->logger->debug(
'Loading user with query: ' . 
$query);
 
 1417                $user->setRecordId(
$row->user_pk);
 
 1418                $user->setResourceLinkId(
$row->resource_link_pk);
 
 1419                $user->ltiUserId = 
$row->lti_user_id;
 
 1420                $user->ltiResultSourcedId = 
$row->lti_result_sourcedid;
 
 1421                $user->created = strtotime(
$row->created);
 
 1422                $user->updated = strtotime(
$row->updated);
 
 1426            $this->logger->error($e);
 
 1469        $this->logger->info(
'Save user called');
 
 1472        $now = 
date($this->dateFormat . 
' ' . $this->timeFormat, 
$time);
 
 1473        if (is_null($user->created)) {
 
 1475            $user->created = 
$time;
 
 1476            $query = 
'INSERT INTO ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' ' .
 
 1477                '(user_pk,resource_link_pk,lti_user_id, lti_result_sourcedid, created, updated) ' .
 
 1479                $ilDB->quote($user->getRecordId(), 
'integer') . 
', ' .
 
 1480                $ilDB->quote($user->getResourceLink()->getRecordId(), 
'integer') . 
', ' .
 
 1481                $ilDB->quote($user->getId(
ToolProvider\ToolProvider::ID_SCOPE_ID_ONLY), 
'text') . 
', ' .
 
 1482                $ilDB->quote($user->ltiResultSourcedId, 
'text') . 
', ' .
 
 1483                $ilDB->quote($now, 
'text') . 
', ' .
 
 1484                $ilDB->quote($now, 
'text') .
 
 1487            $user->updated = 
$time;
 
 1488            $query = 
'UPDATE ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' ' .
 
 1489                'SET lti_result_sourcedid = ' . 
$ilDB->quote($user->ltiResultSourcedId, 
'text') . 
', ' .
 
 1490                'updated = ' . 
$ilDB->quote($now, 
'text') . 
' ' .
 
 1491                'WHERE user_pk = ' . 
$ilDB->quote($user->getRecordId(), 
'integer');
 
 1494        $this->logger->debug(
'Saving user data with query: ' . 
$query);
 
 1501            $this->logger->error($e->getMessage());
 
 1549        $query = 
'DELETE from ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME . 
' ' .
 
 1550            'WHERE user_pk = ' . 
$ilDB->quote($user->getRecordId(), 
'integer');
 
 1555            $user->initialize();
 
 1558            $this->logger->error($e);
 
 1589        $db = 
$DIC->database();
 
 1592        $query = 
'select rl.resource_link_pk ' .
 
 1593            'from lti2_user_result ur join lti2_resource_link rl on rl.resource_link_pk = ur.resource_link_pk ' .
 
 1594            'join lti2_consumer c on rl.consumer_pk = c.consumer_pk ' .
 
 1595            'join lti_ext_consumer ec on c.ext_consumer_id = ec.id ' .
 
 1596            'where c.enabled = ' . $db->quote(1, 
'integer') . 
' ' .
 
 1597            'and ref_id = ' . $db->quote($a_ref_id, 
'integer') . 
' ' .
 
 1598            'and ur.lti_user_id = ' . $db->quote($a_lti_user, 
'text') . 
' ' .
 
 1599            'and ec.id = ' . $db->quote($a_ext_consumer, 
'integer');
 
 1601        $resource_links = [];
 
 1605                $resource_links[] = 
$row->resource_link_pk;
 
 1608            $logger->error(
'Query execution failed with message: ' . $e->getMessage());
 
 1610        return $resource_links;
 
 1620        $db = 
$DIC->database();
 
 1623        $query = 
'select lti_user_id, rl.resource_link_pk, ec.id, ref_id ' .
 
 1624            'from lti2_resource_link rl join lti2_user_result ur on rl.resource_link_pk = ur.resource_link_pk ' .
 
 1625            'join lti2_consumer c on rl.consumer_pk = c.consumer_pk ' .
 
 1626            'join lti_ext_consumer ec on ext_consumer_id = ec.id ' .
 
 1627            'where c.enabled = ' . $db->quote(1, 
'integer') . 
' ' .
 
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
An exception for terminatinating execution or to throw for unit testing.
Class to represent a tool consumer context.
Class ilDatabaseException.
@classDescription Date and time handling
get($a_format, $a_format_str='', $a_tz='')
get formatted date
Class to represent an LTI Data Connector for ILIAS.
deleteResourceLinkShareKey($shareKey)
Delete resource link share key object.
lookupResourcesForAllUsersSinceDate(ilDateTime $since)
saveResourceLinkShareKey($shareKey)
Save resource link share key object.
loadContext($context)
Load context object.
saveContext($context)
Save context object.
loadGlobalToolConsumerSettings(ilLTIToolConsumer $consumer)
Load global tool consumer settings in consumer.
saveToolConsumer($consumer)
Save tool consumer object.
saveToolProxy($toolProxy)
loadToolProxy($toolProxy)
lookupRecordIdByGlobalSettingsAndRefId(ilLTIToolConsumer $consumer)
Lookup record id for global settings and ref_id.
loadResourceLink($resourceLink)
Load resource link object.
loadResourceLinkShareKey($shareKey)
Load resource link share key object.
loadObjectToolConsumerSettings(ilLTIToolConsumer $consumer)
Load tool consumer settings.
saveUser($user)
Save user object.
saveGlobalToolConsumerSettings(ilLTIToolConsumer $consumer)
Save lti_ext_consumer @global type $DIC.
loadConsumerNonce($nonce)
Load nonce object.
getUserResultSourcedIDsResourceLink($resourceLink, $localOnly, $idScope)
Get array of user objects.
deleteToolConsumer($consumer)
Delete tool consumer object.
loadUser($user)
Load user object.
lookupResourcesForUserObjectRelation($a_ref_id, $a_lti_user, $a_ext_consumer, ilDateTime $since=null)
Lookup resources for user object relation.
loadToolConsumerILIAS(ilLTIToolConsumer $consumer)
Load extended tool consumer object with ILIAS extension.
getGlobalToolConsumerSettings()
Get global consumer settings @global type $DIC.
saveConsumerNonce($nonce)
Save nonce object.
deleteGlobalToolConsumerSettings(ilLTIToolConsumer $consumer)
Delete global tool consumer settings.
__construct()
ilLTIDataConnector constructor.
deleteContext($context)
Delete context object.
deleteResourceLink($resourceLink)
Delete resource link object.
deleteUser($user)
Delete user object.
saveToolConsumerILIAS(ilLTIToolConsumer $consumer)
Save extended tool consumer object with ILIAS extensions.
saveResourceLink($resourceLink)
Save resource link object.
loadToolConsumer($consumer)
Load tool consumer object.
deleteToolProxy($toolProxy)
getSharesResourceLink($resourceLink)
Get array of shares defined for this resource link.
if(!array_key_exists('StateId', $_REQUEST)) $id
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
foreach($_POST as $key=> $value) $res