5use IMSGlobal\LTI\ToolProvider\DataConnector;
 
    6use IMSGlobal\LTI\ToolProvider;
 
    7use IMSGlobal\LTI\ToolProvider\ConsumerNonce;
 
    8use IMSGlobal\LTI\ToolProvider\Context;
 
    9use IMSGlobal\LTI\ToolProvider\ResourceLink;
 
   10use IMSGlobal\LTI\ToolProvider\ResourceLinkShareKey;
 
   11use IMSGlobal\LTI\ToolProvider\ToolConsumer;
 
   12use IMSGlobal\LTI\ToolProvider\User;
 
   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 ';
 
   71        if (!empty($consumer->getRecordId())) {
 
   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)) {
 
   87                $consumer->setRecordId(intval($row->consumer_pk));
 
   88                $consumer->name = $row->name;
 
   89                $consumer->setkey(empty($row->consumer_key) ? $row->consumer_key256 : $row->consumer_key);
 
   90                $consumer->secret = $row->secret;
 
   91                $consumer->ltiVersion = $row->lti_version;
 
   92                $consumer->consumerName = $row->consumer_name;
 
   93                $consumer->consumerVersion = $row->consumer_version;
 
   94                $consumer->consumerGuid = $row->consumer_guid;
 
   95                $consumer->profile = json_decode($row->profile);
 
   96                $consumer->toolProxy = $row->tool_proxy;
 
   97                $settings = unserialize($row->settings);
 
   98                if (!is_array($settings)) {
 
  101                $consumer->setSettings($settings);
 
  102                $consumer->protected = (intval($row->protected) === 1);
 
  103                $consumer->enabled = (intval($row->enabled) === 1);
 
  104                $consumer->enableFrom = 
null;
 
  105                if (!is_null($row->enable_from)) {
 
  106                    $consumer->enableFrom = strtotime($row->enable_from);
 
  108                $consumer->enableUntil = 
null;
 
  109                if (!is_null($row->enable_until)) {
 
  110                    $consumer->enableUntil = strtotime($row->enable_until);
 
  112                $consumer->lastAccess = 
null;
 
  113                if (!is_null($row->last_access)) {
 
  114                    $consumer->lastAccess = strtotime($row->last_access);
 
  116                $consumer->created = strtotime($row->created);
 
  117                $consumer->updated = strtotime($row->updated);
 
  155            $consumer->
setRole($row->role);
 
  178            $consumer->
setRole($row->role);
 
  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 '; 
  208        if (!empty($consumer->getRecordId())) {
 
  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);
 
  221        while ($row = 
$ilDB->fetchObject(
$res)) {
 
  223            if (empty($key256) || empty($row->consumer_key) || ($consumer->getKey() === $row->consumer_key)) {
 
  224                $consumer->setRecordId(intval($row->consumer_pk));
 
  225                $consumer->name = $row->name;
 
  226                $consumer->setkey(empty($row->consumer_key) ? $row->consumer_key256 : $row->consumer_key);
 
  227                $consumer->secret = $row->secret;
 
  228                $consumer->ltiVersion = $row->lti_version;
 
  229                $consumer->consumerName = $row->consumer_name;
 
  230                $consumer->consumerVersion = $row->consumer_version;
 
  231                $consumer->consumerGuid = $row->consumer_guid;
 
  232                $consumer->profile = json_decode($row->profile);
 
  233                $consumer->toolProxy = $row->tool_proxy;
 
  234                $settings = unserialize($row->settings);
 
  235                if (!is_array($settings)) {
 
  238                $consumer->setSettings($settings);
 
  239                $consumer->protected = (intval($row->protected) === 1);
 
  240                $consumer->enabled = (intval($row->enabled) === 1);
 
  241                $consumer->enableFrom = 
null;
 
  242                if (!is_null($row->enable_from)) {
 
  243                    $consumer->enableFrom = strtotime($row->enable_from);
 
  245                $consumer->enableUntil = 
null;
 
  246                if (!is_null($row->enable_until)) {
 
  247                    $consumer->enableUntil = strtotime($row->enable_until);
 
  249                $consumer->lastAccess = 
null;
 
  250                if (!is_null($row->last_access)) {
 
  251                    $consumer->lastAccess = strtotime($row->last_access);
 
  253                $consumer->created = strtotime($row->created);
 
  254                $consumer->updated = strtotime($row->updated);
 
  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;
 
  310        $id = $consumer->getRecordId();
 
  311        $key = $consumer->getKey();
 
  312        $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey($key);
 
  314        if ($key === $key256) {
 
  317        $protected = ($consumer->protected) ? 1 : 0;
 
  318        $enabled = ($consumer->enabled)? 1 : 0;
 
  319        $profile = (!empty($consumer->profile)) ? json_encode($consumer->profile) : 
null;
 
  320        $settingsValue = serialize($consumer->getSettings());
 
  322        $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
 
  324        if (!is_null($consumer->enableFrom)) {
 
  325            $from = date(
"{$this->dateFormat} {$this->timeFormat}", $consumer->enableFrom);
 
  328        if (!is_null($consumer->enableUntil)) {
 
  329            $until = date(
"{$this->dateFormat} {$this->timeFormat}", $consumer->enableUntil);
 
  332        if (!is_null($consumer->lastAccess)) {
 
  333            $last = date($this->dateFormat, $consumer->lastAccess);
 
  337            $consumer->setRecordId(
$ilDB->nextId(
'lti_ext_consumer'));
 
  338            $id = $consumer->getRecordId();
 
  339            $consumer->created = $time;
 
  340            $consumer->updated = $time;
 
  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");
 
  353            $values = array($key256, $key, $consumer->name,
 
  354                        $consumer->secret, $consumer->ltiVersion, $consumer->consumerName, $consumer->consumerVersion, $consumer->consumerGuid, $profile, $consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  355                        $from, $until, $last, $now, $now, $id);
 
  358            $consumer->updated = $time;
 
  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");
 
  369            $values = array($key256, $key, $consumer->name,
 
  370                        $consumer->secret, $consumer->ltiVersion, $consumer->consumerName, $consumer->consumerVersion, $consumer->consumerGuid, $profile, $consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  371                        $from, $until, $last, $now, $id);
 
  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 ' .
 
  407                'title  = ' . 
$ilDB->quote($consumer->
getTitle(), 
'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') . 
' ' .
 
  432        $id = $consumer->getRecordId();
 
  433        $key = $consumer->getKey();
 
  434        $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey($key);
 
  436        if ($key === $key256) {
 
  439        $protected = ($consumer->protected) ? 1 : 0;
 
  440        $enabled = ($consumer->enabled)? 1 : 0;
 
  441        $profile = (!empty($consumer->profile)) ? json_encode($consumer->profile) : 
null;
 
  442        $settingsValue = serialize($consumer->getSettings());
 
  444        $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
 
  446        if (!is_null($consumer->enableFrom)) {
 
  447            $from = date(
"{$this->dateFormat} {$this->timeFormat}", $consumer->enableFrom);
 
  450        if (!is_null($consumer->enableUntil)) {
 
  451            $until = date(
"{$this->dateFormat} {$this->timeFormat}", $consumer->enableUntil);
 
  454        if (!is_null($consumer->lastAccess)) {
 
  455            $last = date($this->dateFormat, $consumer->lastAccess);
 
  458        $consumer->name = $consumer->
getTitle();
 
  460            $consumer->setRecordId(
$ilDB->nextId(
'lti2_consumer'));
 
  461            $id = $consumer->getRecordId();
 
  462            $consumer->created = $time;
 
  463            $consumer->updated = $time;
 
  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');
 
  476            $values = array($key256, $key, $consumer->name,
 
  477                        $consumer->secret, $consumer->ltiVersion, $consumer->consumerName, $consumer->consumerVersion, $consumer->consumerGuid, $profile, $consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  481            $consumer->updated = $time;
 
  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");
 
  492            $values = array($key256, $key, $consumer->name,
 
  493                        $consumer->secret, $consumer->ltiVersion, $consumer->consumerName, $consumer->consumerVersion, $consumer->consumerGuid, $profile, $consumer->toolProxy, $settingsValue, $protected, $enabled,
 
  494                        $from, $until, $last, $now, $id);
 
  509        $query = 
'DELETE FROM lti_ext_consumer WHERE id = %s';
 
  510        $types = array(
"integer");
 
  514        $query = 
'DELETE FROM lti_ext_consumer_otype WHERE consumer_id = %s';
 
  515        $types = array(
"integer");
 
  521        $consumer->initialize();
 
  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());
 
  635            $consumer->initialize();
 
  651        $consumers = array();
 
  652        $query = 
'SELECT * from lti_ext_consumer ';
 
  656            $consumer->setExtConsumerId($row->id);
 
  657            $consumer->setTitle($row->title);
 
  658            $consumer->setDescription($row->description);
 
  659            $consumer->setPrefix($row->prefix);
 
  660            $consumer->setLanguage($row->user_language);
 
  661            $consumer->setRole($row->role);
 
  662            $consumer->setActive($row->active);
 
  663            $consumers[] = $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';
 
  697        while ($row = 
$ilDB->fetchObject(
$res)) {
 
  700            $consumer->setRecordId(intval($row->consumer_pk));
 
  701            $consumer->name = $row->name;
 
  702            $consumer->secret = $row->secret;
 
  703            $consumer->ltiVersion = $row->lti_version;
 
  704            $consumer->consumerName = $row->consumer_name;
 
  705            $consumer->consumerVersion = $row->consumer_version;
 
  706            $consumer->consumerGuid = $row->consumer_guid;
 
  707            $consumer->profile = json_decode($row->profile);
 
  708            $consumer->toolProxy = $row->tool_proxy;
 
  709            $settings = unserialize($row->settings);
 
  710            if (!is_array($settings)) {
 
  713            $consumer->setSettings($settings);
 
  714            $consumer->protected = (intval($row->protected) === 1);
 
  715            $consumer->enabled = (intval($row->enabled) === 1);
 
  716            $consumer->enableFrom = 
null;
 
  717            if (!is_null($row->enable_from)) {
 
  718                $consumer->enableFrom = strtotime($row->enable_from);
 
  720            $consumer->enableUntil = 
null;
 
  721            if (!is_null($row->enable_until)) {
 
  722                $consumer->enableUntil = strtotime($row->enable_until);
 
  724            $consumer->lastAccess = 
null;
 
  725            if (!is_null($row->last_access)) {
 
  726                $consumer->lastAccess = strtotime($row->last_access);
 
  728            $consumer->created = strtotime($row->created);
 
  729            $consumer->updated = strtotime($row->updated);
 
  731            $consumer->setTitle($row->title);
 
  732            $consumer->setDescription($row->description);
 
  733            $consumer->setPrefix($row->prefix);
 
  734            $consumer->setLanguage($row->user_language);
 
  735            $consumer->setRole($row->role);
 
  738                $consumer->setKey($row->consumer_key256);
 
  739                $consumers[] = $consumer;
 
  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);
 
  806            $row = 
$ilDB->fetchObject($rs_context);
 
  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)) {
 
  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());
 
  841        $consumer_pk = 
$context->getConsumer()->getRecordId();
 
  843            $context->setRecordId(
$ilDB->nextId(ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME));
 
  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);
 
  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());
 
  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);
 
  968            $row = 
$ilDB->fetchObject($rsContext);
 
  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();
 
 1043            $resourceLink->setRecordId(
$ilDB->nextId(ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME));
 
 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)) {
 
 1212                $share = 
new ToolProvider\ResourceLinkShare();
 
 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);
 
 1253            $row = 
$ilDB->fetchObject($rs_nonce);
 
 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);
 
 1319            $row = 
$ilDB->fetchObject($rsShareKey);
 
 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)) {
 
 1474            $user->setRecordId(
$ilDB->nextId($this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME));
 
 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') . 
' ' .
 
 1633            $results[$row->id . 
'__' . $row->lti_user_id][] = $row->resource_link_pk . 
'__' . $row->ref_id;
 
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
An exception for terminatinating execution or to throw for unit testing.
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.
foreach($_POST as $key=> $value) $res