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());
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);
146 $ilDB = $DIC[
'ilDB'];
169 $ilDB = $DIC[
'ilDB'];
195 $ilDB = $DIC[
'ilDB'];
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');
213 $query .=
'consumer_key256 = %s';
214 $types = array(
'text');
215 $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey($consumer->
getKey());
223 if (empty($key256) || empty(
$row->consumer_key) || ($consumer->
getKey() ===
$row->consumer_key)) {
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)) {
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;
308 $ilDB = $DIC[
'ilDB'];
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");
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");
370 $consumer->secret, $consumer->ltiVersion, $consumer->consumerName, $consumer->consumerVersion, $consumer->consumerGuid, $profile, $consumer->toolProxy, $settingsValue, $protected, $enabled,
384 $ilDB = $DIC[
'ilDB'];
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') .
' ' .
430 $ilDB = $DIC[
'ilDB'];
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();
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');
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");
493 $consumer->secret, $consumer->ltiVersion, $consumer->consumerName, $consumer->consumerVersion, $consumer->consumerGuid, $profile, $consumer->toolProxy, $settingsValue, $protected, $enabled,
507 $ilDB = $DIC[
'ilDB'];
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");
535 $ilDB = $DIC[
'ilDB'];
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();
649 $ilDB = $DIC[
'ilDB'];
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 676 $ilDB = $DIC[
'ilDB'];
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';
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 788 $ilDB = $DIC[
'ilDB'];
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");
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");
811 $settings = unserialize(
$row->settings);
812 if (!is_array($settings)) {
835 $ilDB = $DIC[
'ilDB'];
838 $now = date(
"{$this->dateFormat} {$this->timeFormat}",
$time);
839 $settingsValue = serialize(
$context->getSettings());
841 $consumer_pk =
$context->getConsumer()->getRecordId();
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);
878 $ilDB = $DIC[
'ilDB'];
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");
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");
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");
909 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ' .
910 'WHERE rl.context_pk = %s';
911 $types = array(
"integer");
917 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ' .
918 'WHERE c.context_pk = %s';
919 $types = array(
"integer");
930 ### ResourceLink methods 943 $ilDB = $DIC[
'ilDB'];
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());
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);
1012 $ilDB = $DIC[
'ilDB'];
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;
1091 $ilDB = $DIC[
'ilDB'];
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();
1150 $ilDB = $DIC[
'ilDB'];
1199 $ilDB = $DIC[
'ilDB'];
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());
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 1237 $ilDB = $DIC[
'ilDB'];
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");
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());
1272 $ilDB = $DIC[
'ilDB'];
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 1298 $ilDB = $DIC[
'ilDB'];
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");
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");
1320 if (
$row && (intval(
$row->resource_link_pk) === $shareKey->resourceLinkId)) {
1321 $shareKey->autoApprove = (intval(
$row->auto_approve) === 1);
1322 $shareKey->expires = strtotime(
$row->expires);
1340 $ilDB = $DIC[
'ilDB'];
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);
1368 $ilDB = $DIC[
'ilDB'];
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();
1397 $ilDB = $DIC->database();
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') .
' ' .
1411 $this->logger->debug(
'Loading user with query: ' .
$query);
1418 $user->setResourceLinkId(
$row->resource_link_pk);
1420 $user->ltiResultSourcedId =
$row->lti_result_sourcedid;
1421 $user->created = strtotime(
$row->created);
1422 $user->updated = strtotime(
$row->updated);
1426 $this->logger->error($e);
1467 $ilDB = $DIC->database();
1469 $this->logger->info(
'Save user called');
1472 $now = date($this->dateFormat .
' ' . $this->timeFormat,
$time);
1473 if (is_null(
$user->created)) {
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') .
', ' .
1482 $ilDB->quote(
$user->ltiResultSourcedId,
'text') .
', ' .
1483 $ilDB->quote($now,
'text') .
', ' .
1484 $ilDB->quote($now,
'text') .
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());
1547 $ilDB = $DIC->database();
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();
1590 $logger = $DIC->logger()->lti();
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();
1621 $logger = $DIC->logger()->lti();
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') .
' ' .
deleteToolConsumer($consumer)
Delete tool consumer object.
getUserResultSourcedIDsResourceLink($resourceLink, $localOnly, $idScope)
Get array of user objects.
loadToolConsumer($consumer)
Load tool consumer object.
Class to represent an LTI Data Connector for ILIAS.
saveConsumerNonce($nonce)
Save nonce object.
saveToolConsumer($consumer)
Save tool consumer object.
saveResourceLink($resourceLink)
Save resource link object.
loadToolProxy($toolProxy)
deleteGlobalToolConsumerSettings(ilLTIToolConsumer $consumer)
Delete global tool consumer settings.
if(!array_key_exists('StateId', $_REQUEST)) $id
loadUser($user)
Load user object.
saveGlobalToolConsumerSettings(ilLTIToolConsumer $consumer)
Save lti_ext_consumer type $DIC.
saveToolProxy($toolProxy)
Class ilDatabaseException.
loadToolConsumerILIAS(ilLTIToolConsumer $consumer)
Load extended tool consumer object with ILIAS extension.
lookupResourcesForAllUsersSinceDate(ilDateTime $since)
deleteContext($context)
Delete context object.
foreach($_POST as $key=> $value) $res
loadContext($context)
Load context object.
loadObjectToolConsumerSettings(ilLTIToolConsumer $consumer)
Load tool consumer settings.
getGlobalToolConsumerSettings()
Get global consumer settings type $DIC.
saveToolConsumerILIAS(ilLTIToolConsumer $consumer)
Save extended tool consumer object with ILIAS extensions.
deleteUser($user)
Delete user object.
get($a_format, $a_format_str='', $a_tz='')
get formatted date
saveResourceLinkShareKey($shareKey)
Save resource link share key object.
deleteResourceLink($resourceLink)
Delete resource link object.
lookupRecordIdByGlobalSettingsAndRefId(ilLTIToolConsumer $consumer)
Lookup record id for global settings and ref_id.
loadConsumerNonce($nonce)
Load nonce object.
deleteToolProxy($toolProxy)
deleteResourceLinkShareKey($shareKey)
Delete resource link share key object.
loadGlobalToolConsumerSettings(ilLTIToolConsumer $consumer)
Load global tool consumer settings in consumer.
getSharesResourceLink($resourceLink)
Get array of shares defined for this resource link.
loadResourceLink($resourceLink)
Load resource link object.
lookupResourcesForUserObjectRelation($a_ref_id, $a_lti_user, $a_ext_consumer, ilDateTime $since=null)
Lookup resources for user object relation.
saveUser($user)
Save user object.
loadResourceLinkShareKey($shareKey)
Load resource link share key object.
__construct()
ilLTIDataConnector constructor.
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
saveContext($context)
Save context object.