3 declare(strict_types=1);
48 $this->database = $DIC->database();
52 $this->dbTableNamePrefix =
"";
66 $allowMultiple =
false;
67 $id = $platform->getRecordId();
68 $query =
'SELECT consumer_pk, name, consumer_key, secret, ' .
69 'platform_id, client_id, deployment_id, public_key, ' .
70 'lti_version, signature_method, consumer_name, consumer_version, consumer_guid, ' .
71 'profile, tool_proxy, settings, protected, enabled, ' .
72 'enable_from, enable_until, last_access, created, updated, ext_consumer_id, ref_id ' .
73 'FROM lti2_consumer WHERE ';
75 $query .=
'consumer_pk = %s';
76 $types = array(
'integer');
78 } elseif (!empty($platform->platformId)) {
79 if (empty($platform->clientId)) {
80 $allowMultiple =
true;
81 $query .=
'(platform_id = %s)';
82 $types = array(
'text');
83 $values = array($platform->platformId);
84 } elseif (empty($platform->deploymentId)) {
85 $allowMultiple =
true;
86 $query .=
'(platform_id = %s) AND (client_id = %s)';
87 $types = array(
'text',
'text');
88 $values = array($platform->platformId, $platform->clientId);
90 $query .=
'(platform_id = %s) AND (client_id = %s) AND (deployment_id = %s)';
91 $types = array(
'text',
'text',
'text');
92 $values = array($platform->platformId, $platform->clientId, $platform->deploymentId);
94 } elseif (!empty($platform->getKey())) {
95 $key = $platform->getKey();
96 $query .=
'consumer_key = %s';
97 $types = array(
'text');
98 $values = array(
$key);
112 $res = $this->database->queryF(
$query, $types, $values);
113 while ($row = $this->database->fetchObject(
$res)) {
114 $platform->setRecordId(intval($row->consumer_pk));
115 $platform->name = $row->name;
116 $platform->setkey((
string) $row->consumer_key);
117 $platform->secret = $row->secret;
118 $platform->platformId = $row->platform_id;
119 $platform->clientId = $row->client_id;
120 $platform->deploymentId = $row->deployment_id;
121 $platform->rsaKey = $row->public_key;
122 $platform->ltiVersion = $row->lti_version;
123 $platform->signatureMethod = $row->signature_method;
124 $platform->consumerName = $row->consumer_name;
125 $platform->consumerVersion = $row->consumer_version;
126 $platform->consumerGuid = $row->consumer_guid;
127 $platform->profile = json_decode((
string) $row->profile);
128 $platform->toolProxy = $row->tool_proxy;
129 $settings = json_decode($row->settings,
true);
131 $settings = @unserialize($row->settings);
137 $platform->protected = (intval($row->protected) === 1);
138 $platform->enabled = (intval($row->enabled) === 1);
139 $platform->enableFrom = null;
140 if (!is_null($row->enable_from)) {
141 $platform->enableFrom = strtotime($row->enable_from);
143 $platform->enableUntil = null;
144 if (!is_null($row->enable_until)) {
145 $platform->enableUntil = strtotime($row->enable_until);
147 $platform->lastAccess = null;
148 if (!is_null($row->last_access)) {
149 $platform->lastAccess = strtotime($row->last_access);
151 $platform->created = strtotime($row->created);
152 $platform->updated = strtotime($row->updated);
154 $platform->setExtConsumerId(intval($row->ext_consumer_id));
155 $platform->setRefId((
int) $row->ref_id);
163 $this->fixPlatformSettings($platform,
false);
210 $platform->
setRole((
int) $row->role);
211 $platform->
setActive((
bool) $row->active);
317 $query =
'SELECT consumer_pk from lti2_consumer ' .
318 'WHERE ext_consumer_id = ' . $db->quote($platform->
getExtConsumerId(),
'integer') .
' ' .
319 'AND ref_id = ' . $db->quote($platform->
getRefId(),
'integer');
322 return (
int) $row->consumer_pk;
479 $new_id =
$ilDB->nextId(
'lti_ext_consumer');
480 $query =
'INSERT INTO lti_ext_consumer (title, description, prefix, user_language, role, id, active) ' .
481 'VALUES (%s, %s, %s, %s, %s, %s, %s)';
482 $types = [
"text",
"text",
"text",
"text",
"integer",
"integer",
'integer'];
497 $query =
'update lti_ext_consumer set ' .
498 'title = ' .
$ilDB->quote($platform->
getTitle(),
'text') .
', ' .
500 'prefix = ' .
$ilDB->quote($platform->
getPrefix(),
'text') .
', ' .
501 'user_language = ' .
$ilDB->quote($platform->
getLanguage(),
'text') .
', ' .
502 'role = ' .
$ilDB->quote($platform->
getRole(),
'integer') .
', ' .
503 'active = ' .
$ilDB->quote((
int) $platform->
getActive(),
'integer') .
' ' .
519 $id = $platform->getRecordId();
520 $key = $platform->getKey();
521 $protected = ($platform->protected) ? 1 : 0;
522 $enabled = ($platform->enabled) ? 1 : 0;
523 $profile = (!empty($platform->profile)) ? json_encode($platform->profile) : null;
525 $this->fixPlatformSettings($platform,
true);
526 $settingsValue = json_encode($platform->getSettings());
527 $this->fixPlatformSettings($platform,
false);
529 $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
531 if (!is_null($platform->enableFrom)) {
532 $from = date(
"{$this->dateFormat} {$this->timeFormat}", $platform->enableFrom);
535 if (!is_null($platform->enableUntil)) {
536 $until = date(
"{$this->dateFormat} {$this->timeFormat}", $platform->enableUntil);
539 if (!is_null($platform->lastAccess)) {
540 $last = date($this->dateFormat, $platform->lastAccess);
543 $platform->name = $platform->
getTitle();
545 $platform->setRecordId(
$ilDB->nextId(
'lti2_consumer'));
546 $id = $platform->getRecordId();
547 $platform->created = $time;
548 $platform->updated = $time;
551 $query =
'INSERT INTO lti2_consumer (consumer_key, name, ' .
552 'secret, lti_version, consumer_name, consumer_version, consumer_guid, profile, tool_proxy, settings, protected, enabled, ' .
553 'enable_from, enable_until, last_access, created, updated, consumer_pk, ext_consumer_id, ref_id, platform_id, client_id, deployment_id, public_key) ' .
554 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)';
555 $types = array(
"text",
580 $values = array(
$key,
583 $platform->ltiVersion,
584 $platform->consumerName,
585 $platform->consumerVersion,
586 $platform->consumerGuid,
588 $platform->toolProxy,
600 (string) $platform->platformId,
602 $platform->deploymentId,
607 $platform->updated = $time;
609 $query =
'UPDATE lti2_consumer SET ' .
610 'consumer_key = %s, name = %s, ' .
611 'secret= %s, lti_version = %s, consumer_name = %s, consumer_version = %s, consumer_guid = %s, ' .
612 'profile = %s, tool_proxy = %s, settings = %s, protected = %s, enabled = %s, ' .
613 'enable_from = %s, enable_until = %s, last_access = %s, updated = %s, ' .
614 'platform_id = %s, client_id = %s, deployment_id = %s, public_key = %s ' .
615 'WHERE consumer_pk = %s';
616 $types = array(
"text",
638 $values = array(
$key,
641 $platform->ltiVersion,
642 $platform->consumerName,
643 $platform->consumerVersion,
644 $platform->consumerGuid,
646 $platform->toolProxy,
654 $platform->platformId,
656 $platform->deploymentId,
673 $query =
'DELETE FROM lti_ext_consumer WHERE id = %s';
674 $types = array(
"integer");
678 $query =
'DELETE FROM lti_ext_consumer_otype WHERE consumer_id = %s';
679 $types = array(
"integer");
683 $query =
'DELETE FROM lti2_consumer WHERE ext_consumer_id = %s';
684 $types = array(
"integer");
703 $query =
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME .
' WHERE consumer_pk = %s';
704 $types = array(
"integer");
705 $values = array($platform->getRecordId());
710 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' sk ' .
711 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
712 'WHERE rl.consumer_pk = %s';
713 $types = array(
"integer");
714 $values = array($platform->getRecordId());
719 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' sk ' .
720 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
721 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
722 'WHERE c.consumer_pk = %s';
723 $types = array(
"integer");
724 $values = array($platform->getRecordId());
729 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' u ' .
730 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
731 'WHERE rl.consumer_pk = %s';
732 $types = array(
"integer");
733 $values = array($platform->getRecordId());
738 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' u ' .
739 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
740 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
741 'WHERE c.consumer_pk = %s';
742 $types = array(
"integer");
743 $values = array($platform->getRecordId());
747 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' prl ' .
748 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
749 'SET prl.primary_resource_link_pk = NULL, prl.share_approved = NULL ' .
750 'WHERE rl.consumer_pk = %s';
751 $types = array(
"integer");
752 $values = array($platform->getRecordId());
756 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' prl ' .
757 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
758 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
759 'SET prl.primary_resource_link_pk = NULL, prl.share_approved = NULL ' .
760 'WHERE c.consumer_pk = %s';
761 $types = array(
"integer");
762 $values = array($platform->getRecordId());
767 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ' .
768 'WHERE rl.consumer_pk = %s';
769 $types = array(
"integer");
770 $values = array($platform->getRecordId());
775 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ' .
776 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
777 'WHERE c.consumer_pk = %s';
778 $types = array(
"integer");
779 $values = array($platform->getRecordId());
784 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ' .
785 'WHERE c.consumer_pk = %s';
786 $types = array(
"integer");
787 $values = array($platform->getRecordId());
792 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONSUMER_TABLE_NAME .
' c ' .
793 'WHERE c.consumer_pk = %s';
794 $types = array(
"integer");
795 $values = array($platform->getRecordId());
799 $platform->initialize();
813 $platforms = array();
814 $query =
'SELECT * from lti_ext_consumer ';
818 $platform->setExtConsumerId((
int) $row->id);
819 $platform->setTitle($row->title);
820 $platform->setDescription($row->description);
821 $platform->setPrefix($row->prefix);
822 $platform->setLanguage($row->user_language);
823 $platform->setRole((
int) $row->role);
824 $platform->setActive((
bool) $row->active);
825 $platforms[] = $platform;
833 # Load all tool consumers from the database 841 $platforms = array();
842 $query =
'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' .
843 'consumer_name, consumer_version, consumer_guid, ' .
844 'profile, tool_proxy, settings, protected, enabled, ' .
845 'enable_from, enable_until, last_access, created, updated, ' .
846 'title, description, prefix, user_language, role, local_role_always_member, default_skin ' .
847 'FROM lti2_consumer, lti_ext_consumer ' .
848 'WHERE lti_ext_consumer.id = consumer_pk';
860 while ($row =
$ilDB->fetchObject(
$res)) {
863 $platform->setRecordId(intval($row->consumer_pk));
864 $platform->name = $row->name;
865 $platform->secret = $row->secret;
866 $platform->ltiVersion = $row->lti_version;
867 $platform->consumerName = $row->consumer_name;
868 $platform->consumerVersion = $row->consumer_version;
869 $platform->consumerGuid = $row->consumer_guid;
870 $platform->profile = json_decode($row->profile);
871 $platform->toolProxy = $row->tool_proxy;
877 $platform->protected = (intval($row->protected) === 1);
878 $platform->enabled = (intval($row->enabled) === 1);
879 $platform->enableFrom = null;
880 if (!is_null($row->enable_from)) {
881 $platform->enableFrom = strtotime($row->enable_from);
883 $platform->enableUntil = null;
884 if (!is_null($row->enable_until)) {
885 $platform->enableUntil = strtotime($row->enable_until);
887 $platform->lastAccess = null;
888 if (!is_null($row->last_access)) {
889 $platform->lastAccess = strtotime($row->last_access);
891 $platform->created = strtotime($row->created);
892 $platform->updated = strtotime($row->updated);
894 $platform->setTitle($row->title);
895 $platform->setDescription($row->description);
896 $platform->setPrefix($row->prefix);
897 $platform->setLanguage($row->user_language);
898 $platform->setRole($row->role);
901 $platform->setKey($row->consumer_key256);
902 $platforms[] = $platform;
910 ### ToolProxy methods 951 $query =
'SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' .
952 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' ' .
953 'WHERE (context_pk = %s)';
954 $types = array(
"integer");
957 $query =
'SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' .
958 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' ' .
959 'WHERE (consumer_pk = %s) AND (lti_context_id = %s)';
960 $types = array(
"integer",
"text");
961 $values = array($context->
getPlatform()->getRecordId(), $context->ltiContextId);
963 $rs_context =
$ilDB->queryF(
$query, $types, $values);
965 $row =
$ilDB->fetchObject($rs_context);
969 $context->ltiContextId = $row->lti_context_id;
975 $context->created = strtotime($row->created);
976 $context->updated = strtotime($row->updated);
994 $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
996 $settingsValue = json_encode($context->
getSettings());
998 $platform_pk = $context->
getPlatform()->getRecordId();
1002 $context->created = $time;
1004 $query =
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
1005 ' (context_pk, consumer_pk, lti_context_id, settings, created, updated) ' .
1006 'VALUES (%s, %s, %s, %s, %s, %s)';
1007 $types = array(
"integer",
"integer",
"text",
"text",
"timestamp",
"timestamp");
1008 $values = array($id, $platform_pk, $context->ltiContextId, $settingsValue, $now, $now);
1010 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' SET ' .
1011 'lti_context_id = %s, settings = %s, ' .
1013 'WHERE (consumer_pk = %s) AND (context_pk = %s)';
1014 $types = array(
"text",
"text",
"timestamp",
"integer",
"integer");
1015 $values = array($context->ltiContextId, $settingsValue, $now, $platform_pk, $id);
1017 $ok = (bool)
$ilDB->manipulateF(
$query, $types, $values);
1019 $context->updated = $time;
1036 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' sk ' .
1037 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
1038 'WHERE rl.context_pk = %s';
1039 $types = array(
"integer");
1045 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' u ' .
1046 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
1047 'WHERE rl.context_pk = %s';
1048 $types = array(
"integer");
1053 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' prl ' .
1054 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
1055 'SET prl.primary_resource_link_pk = null, prl.share_approved = null ' .
1056 'WHERE rl.context_pk = %s';
1057 $types = array(
"integer");
1063 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ' .
1064 'WHERE rl.context_pk = %s';
1065 $types = array(
"integer");
1071 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ' .
1072 'WHERE c.context_pk = %s';
1073 $types = array(
"integer");
1075 $ok = (bool)
$ilDB->manipulateF(
$query, $types, $values);
1084 ### ResourceLink methods 1100 if (!is_null(
$id)) {
1101 $query =
'SELECT resource_link_pk, context_pk, consumer_pk, lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated ' .
1102 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' ' .
1103 'WHERE (resource_link_pk = %s)';
1104 $types = array(
"integer");
1105 $values = array(
$id);
1106 } elseif (!is_null($resourceLink->
getContext())) {
1107 $rid = $resourceLink->
getId();
1108 $cid = $resourceLink->
getContext()->getRecordId();
1109 $query =
'SELECT resource_link_pk, context_pk, consumer_pk, lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated ' .
1110 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' r ' .
1111 'WHERE (r.lti_resource_link_id = %s) AND ((r.context_pk = %s) OR (r.consumer_pk IN (' .
1112 'SELECT c.consumer_pk ' .
1113 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ' .
1114 'WHERE (c.context_pk = %s))))';
1115 $types = array(
"text",
"integer",
"integer");
1116 $values = array($rid, $cid, $cid);
1119 $rid = $resourceLink->
getId();
1120 $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 ' .
1121 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' r LEFT OUTER JOIN ' .
1122 $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ON r.context_pk = c.context_pk ' .
1123 ' WHERE ((r.consumer_pk = %s) OR (c.consumer_pk = %s)) AND (lti_resource_link_id = %s)';
1124 $types = array(
"integer",
"integer",
"text");
1125 $values = array(
$id,
$id, $rid);
1127 $this->
logger->debug(
"loadResourceLink id = " .
$id .
" rid =" . $rid .
" cid =" . $cid .
" query = " .
$query);
1128 $rsContext =
$ilDB->queryF($query, $types, $values);
1130 $row =
$ilDB->fetchObject($rsContext);
1132 $resourceLink->
setRecordId(intval($row->resource_link_pk));
1133 if (!is_null($row->context_pk)) {
1138 if (!is_null($row->consumer_pk)) {
1144 $resourceLink->ltiResourceLinkId = $row->lti_resource_link_id;
1145 $settings = json_decode($row->settings,
true);
1147 $settings = @unserialize($row->settings);
1153 if (!is_null($row->primary_resource_link_pk)) {
1155 $resourceLink->primaryResourceLinkId = (string) ($row->primary_resource_link_pk);
1157 $resourceLink->primaryResourceLinkId = null;
1159 $resourceLink->shareApproved = (is_null($row->share_approved)) ? null : (intval($row->share_approved) === 1);
1160 $resourceLink->created = strtotime($row->created);
1161 $resourceLink->updated = strtotime($row->updated);
1180 if (is_null($resourceLink->shareApproved)) {
1182 } elseif ($resourceLink->shareApproved) {
1187 if (empty($resourceLink->primaryResourceLinkId) || $resourceLink->primaryResourceLinkId ==
'0') {
1188 $primaryResourceLinkId = null;
1189 $resourceLink->primaryResourceLinkId = null;
1191 $primaryResourceLinkId = strval($resourceLink->primaryResourceLinkId);
1194 $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
1195 $settingsValue = serialize($resourceLink->
getSettings());
1198 $platformId = strval($resourceLink->
getPlatform()->getRecordId());
1199 $contextId = strval($resourceLink->
getContext()->getRecordId());
1202 $platformId = strval($resourceLink->
getPlatform()->getRecordId());
1205 $platformId = strval($resourceLink->
getPlatform()->getRecordId());
1212 $resourceLink->created = $time;
1213 $query =
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' (resource_link_pk, consumer_pk, context_pk, ' .
1214 'lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated) ' .
1215 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)';
1216 $types = array(
"integer",
1226 $values = array(
$id,
1229 $resourceLink->
getId(),
1231 $primaryResourceLinkId,
1236 } elseif (!is_null($contextId)) {
1237 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' SET ' .
1238 'consumer_pk = %s, lti_resource_link_id = %s, settings = %s, ' .
1239 'primary_resource_link_pk = %s, share_approved = %s, updated = %s ' .
1240 'WHERE (context_pk = %s) AND (resource_link_pk = %s)';
1241 $types = array(
"integer",
"text",
"text",
"integer",
"integer",
"timestamp",
"integer",
"integer");
1242 $values = array($platformId,
1243 $resourceLink->
getId(),
1245 $primaryResourceLinkId,
1252 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' SET ' .
1253 'context_pk = %s, lti_resource_link_id = %s, settings = %s, ' .
1254 'primary_resource_link_pk = %s, share_approved = %s, updated = %s ' .
1255 'WHERE (consumer_pk = %s) AND (resource_link_pk = %s)';
1256 $types = array(
"integer",
"text",
"text",
"integer",
"integer",
"timestamp",
"integer",
"integer");
1257 $values = array($contextId,
1258 $resourceLink->
getId(),
1260 $primaryResourceLinkId,
1267 $ok = (bool)
$ilDB->manipulateF(
$query, $types, $values);
1268 $this->
logger->debug(
'Update resource link with query: ' .
$query);
1274 $resourceLink->updated = $time;
1290 $query =
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' ' .
1291 'WHERE (resource_link_pk = %s)';
1292 $types = array(
"integer");
1294 $ok =
$ilDB->manipulateF(
$query, $types, $values);
1298 $query =
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' ' .
1299 'WHERE (resource_link_pk = %s)';
1300 $types = array(
"integer");
1302 $ok =
$ilDB->manipulateF(
$query, $types, $values);
1307 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' ' .
1308 'SET primary_resource_link_pk = NULL ' .
1309 'WHERE (primary_resource_link_pk = %s)';
1310 $types = array(
"integer");
1312 $ok =
$ilDB->manipulateF(
$query, $types, $values);
1317 $query =
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' ' .
1318 'WHERE (resource_link_pk = %s)';
1319 $types = array(
"integer");
1321 $ok = (bool)
$ilDB->manipulateF(
$query, $types, $values);
1417 ### PlatformNonce methods 1432 $now = date(
"{$this->dateFormat} {$this->timeFormat}", time());
1433 $query =
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME .
" WHERE expires <= %s";
1434 $types = array(
"timestamp");
1435 $values = array($now);
1438 $query =
"SELECT value AS T FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME .
' WHERE (consumer_pk = %s) AND (value = %s)';
1439 $types = array(
"integer",
"text");
1440 $values = array($nonce->getPlatform()->getRecordId(), $nonce->getValue());
1441 $rs_nonce =
$ilDB->queryF(
$query, $types, $values);
1443 $row =
$ilDB->fetchObject($rs_nonce);
1461 $expires = date(
"{$this->dateFormat} {$this->timeFormat}", $nonce->expires);
1462 $query =
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::NONCE_TABLE_NAME .
" (consumer_pk, value, expires) VALUES (%s, %s, %s)";
1463 $types = array(
"integer",
"text",
"timestamp");
1464 $values = array($nonce->getPlatform()->getRecordId(), $nonce->getValue(), $expires);
1465 $ok = (bool)
$ilDB->manipulateF(
$query, $types, $values);
1472 ### ResourceLinkShareKey methods 1488 $now = date(
"{$this->dateFormat} {$this->timeFormat}", time());
1489 $query =
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
" WHERE expires <= '%s'";
1490 $types = array(
"timestamp");
1491 $values = array($now);
1497 $query =
'SELECT resource_link_pk, auto_approve, expires ' .
1498 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' ' .
1499 "WHERE share_key_id = %s";
1500 $types = array(
"text");
1501 $values = array(
$id);
1502 $rsShareKey =
$ilDB->queryF(
$query, $types, $values);
1504 $row =
$ilDB->fetchObject($rsShareKey);
1505 if ($row && (intval($row->resource_link_pk) === $shareKey->resourceLinkId)) {
1506 $shareKey->autoApprove = (intval($row->auto_approve) === 1);
1507 $shareKey->expires = strtotime($row->expires);
1525 if ($shareKey->autoApprove) {
1530 $expires = date(
"{$this->dateFormat} {$this->timeFormat}", $shareKey->expires);
1531 $query =
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' ' .
1532 '(share_key_id, resource_link_pk, auto_approve, expires) ' .
1533 "VALUES (%s, %s, %s, %s)";
1534 $types = array(
"text",
"integer",
"integer",
"timestamp");
1535 $values = array($shareKey->
getId(), $shareKey->resourceLinkId, $approve, $expires);
1536 $ok = (bool)
$ilDB->manipulateF(
$query, $types, $values);
1550 $query =
"DELETE FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
" WHERE share_key_id = %s";
1551 $types = array(
"text");
1552 $values = array($shareKey->
getId());
1553 $ok = (bool)
$ilDB->manipulateF(
$query, $types, $values);
1575 $id = $userresult->getRecordId();
1576 if (!is_null(
$id)) {
1577 $query =
'SELECT user_pk, resource_link_pk, lti_user_id, lti_result_sourcedid, created, updated ' .
1578 'FROM ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' ' .
1579 'WHERE user_pk = ' .
$ilDB->quote(
$id,
'integer');
1581 $rid = $userresult->getResourceLink()->getRecordId();
1582 $uid = $userresult->getId(ToolProvider\Tool::ID_SCOPE_ID_ONLY);
1584 $query =
'SELECT user_pk, resource_link_pk, lti_user_id, lti_result_sourcedid, created, updated ' .
1585 'FROM ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' ' .
1586 'WHERE resource_link_pk = ' .
$ilDB->quote($rid,
'integer') .
' ' .
1587 'AND lti_user_id = ' .
$ilDB->quote($uid,
'text');
1590 $this->
logger->debug(
'Loading user with query: ' .
$query);
1596 $userresult->setRecordId((
int) $row->user_pk);
1597 $userresult->setResourceLinkId((
int) $row->resource_link_pk);
1598 $userresult->ltiUserId = (string) $row->lti_user_id;
1599 $userresult->ltiResultSourcedId = (
string) $row->lti_result_sourcedid;
1600 $userresult->created = strtotime($row->created);
1601 $userresult->updated = strtotime($row->updated);
1605 $this->
logger->error((
string) $e);
1619 $this->
logger->info(
'Save user called with ' . $userresult->created);
1622 $now = date($this->dateFormat .
' ' . $this->timeFormat, $time);
1623 if (is_null($userresult->created)) {
1625 $userresult->setRecordId(
$ilDB->nextId($this->dbTableNamePrefix . ToolProvider\
DataConnector\DataConnector::USER_RESULT_TABLE_NAME));
1626 $userresult->created = $time;
1627 $rid = $userresult->getResourceLink()->getRecordId();
1628 $uid = $userresult->getId(ToolProvider\Tool::ID_SCOPE_ID_ONLY);
1629 $query =
'INSERT INTO ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' ' .
1630 '(user_pk,resource_link_pk,lti_user_id, lti_result_sourcedid, created, updated) ' .
1632 $ilDB->quote($userresult->getRecordId(),
'integer') .
', ' .
1633 $ilDB->quote($rid,
'integer') .
', ' .
1634 $ilDB->quote($uid,
'text') .
', ' .
1635 $ilDB->quote($userresult->ltiResultSourcedId,
'text') .
', ' .
1636 $ilDB->quote($now,
'text') .
', ' .
1637 $ilDB->quote($now,
'text') .
1640 $query =
'UPDATE ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' ' .
1641 'SET lti_result_sourcedid = ' .
$ilDB->quote($userresult->ltiResultSourcedId,
'text') .
', ' .
1642 'updated = ' .
$ilDB->quote($now,
'text') .
' ' .
1643 'WHERE user_pk = ' .
$ilDB->quote($userresult->getRecordId(),
'integer');
1646 $this->
logger->debug(
'Saving user data with query: ' .
$query);
1651 $userresult->updated = $time;
1654 $this->
logger->error($e->getMessage());
1669 $query =
'DELETE from ' . $this->dbTableNamePrefix . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' ' .
1670 'WHERE user_pk = ' .
$ilDB->quote($user->getRecordId(),
'integer');
1675 $user->initialize();
1678 $this->
logger->error((
string) $e);
1694 int $a_ext_consumer,
1701 $query =
'select rl.resource_link_pk ' .
1702 'from lti2_user_result ur join lti2_resource_link rl on rl.resource_link_pk = ur.resource_link_pk ' .
1703 'join lti2_consumer c on rl.consumer_pk = c.consumer_pk ' .
1704 'join lti_ext_consumer ec on c.ext_consumer_id = ec.id ' .
1705 'where c.enabled = ' . $db->quote(1,
'integer') .
' ' .
1706 'and ref_id = ' . $db->quote($a_ref_id,
'integer') .
' ' .
1707 'and ur.lti_user_id = ' . $db->quote($a_lti_user,
'text') .
' ' .
1708 'and ec.id = ' . $db->quote($a_ext_consumer,
'integer');
1710 $resource_links = [];
1714 $resource_links[] = $row->resource_link_pk;
1717 $logger->error(
'Query execution failed with message: ' . $e->getMessage());
1719 return $resource_links;
1731 $query =
'select lti_user_id, rl.resource_link_pk, ec.id, ref_id ' .
1732 'from lti2_resource_link rl join lti2_user_result ur on rl.resource_link_pk = ur.resource_link_pk ' .
1733 'join lti2_consumer c on rl.consumer_pk = c.consumer_pk ' .
1734 'join lti_ext_consumer ec on ext_consumer_id = ec.id ' .
1735 'where c.enabled = ' . $db->quote(1,
'integer') .
' ' .
1741 $results[$row->id .
'__' . $row->lti_user_id][] = $row->resource_link_pk .
'__' . $row->ref_id;
get(int $a_format, string $a_format_str='', string $a_tz='')
get formatted date
initialize()
Initialise the context.
getRecordId()
Get the context record ID.
deleteContext(Context $context)
Delete context object.
loadPlatformNonce(\ILIAS\LTI\ToolProvider\PlatformNonce $nonce)
Get array of shares defined for this resource link.
deleteToolConsumer(\ILIAS\LTI\ToolProvider\Platform $platform)
Delete tool consumer object.
saveResourceLink(ResourceLink $resourceLink)
Save resource link object.
static getLogger(string $a_component_id)
Get component logger.
deleteResourceLinkShareKey(ResourceLinkShareKey $shareKey)
Delete resource link share key object.
lookupResourcesForUserObjectRelation(int $a_ref_id, string $a_lti_user, int $a_ext_consumer, ilDateTime $since=null)
Lookup resources for user object relation.
Class ChatMainBarProvider .
saveUserResult(\ILIAS\LTI\ToolProvider\User $userresult)
Save user object.
setSettings(array $settings)
Set an array of all setting values.
static getDataConnector(object $db=null, string $dbTableNamePrefix='', string $type='')
getUserResultSourcedIDsResourceLink(ResourceLink $resourceLink, bool $localOnly, int $idScope)
Get array of user objects.
loadPlatform(\ILIAS\LTI\ToolProvider\Platform $platform)
Load platform object.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
lookupRecordIdByGlobalSettingsAndRefId(ilLTIPlatform $platform)
Load extended tool consumer object with ILIAS extension.
lookupResourcesForAllUsersSinceDate(ilDateTime $since)
loadResourceLinkShareKey(ResourceLinkShareKey $shareKey)
Load resource link share key object.
savePlatformNonce(\ILIAS\LTI\ToolProvider\PlatformNonce $nonce)
Save nonce object.
loadResourceLink(ResourceLink $resourceLink)
Load resource link object.
getSettings()
Get an array of all setting values.
getGlobalToolConsumerSettings()
Get global consumer settings.
setPlatformId(int $platformId)
Set platform ID.
loadContext(Context $context)
Load context object.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setRecordId(int $id)
Sets the context record ID.
loadUserResult(\ILIAS\LTI\ToolProvider\User $userresult)
Load user object.
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
saveToolConsumerILIAS(ilLTIPlatform $platform)
Save extended tool consumer object with ILIAS extensions.
saveContext(Context $context)
Save context object.
saveResourceLinkShareKey(ResourceLinkShareKey $shareKey)
Save resource link share key object.
saveGlobalToolConsumerSettings(ilLTIPlatform $platform)
Save platform object.
Component logger with individual log levels by component id.
deleteResourceLink(ResourceLink $resourceLink)
Delete resource link object.
deleteUser(\ILIAS\LTI\ToolProvider\User $user)
Delete user object.
Class to represent a platform context.
loadGlobalToolConsumerSettings(ilLTIPlatform $platform)
Load tool consumer settings.
__construct()
ilLTIDataConnector constructor.
deleteGlobalToolConsumerSettings(ilLTIPlatform $platform)
Delete global tool consumer settings.
getPlatform()
Get tool consumer.