41 $this->logger = $DIC->logger()->lti();
43 $this->dbTableNamePrefix =
"";
62 $query =
'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' .
63 'consumer_name, consumer_version, consumer_guid, ' .
64 'profile, tool_proxy, settings, protected, enabled, ' .
65 'enable_from, enable_until, last_access, created, updated ' .
68 'FROM lti2_consumer WHERE ';
72 $query .=
'consumer_pk = %s';
73 $types =
array(
'integer');
76 $query .=
'consumer_key256 = %s';
77 $types =
array(
'text');
78 $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey(
$consumer->getKey());
79 $values =
array($key256);
86 if (empty($key256) || empty(
$row->consumer_key) || (
$consumer->getKey() ===
$row->consumer_key)) {
97 $settings = unserialize(
$row->settings);
98 if (!is_array($settings)) {
105 if (!is_null(
$row->enable_from)) {
109 if (!is_null(
$row->enable_until)) {
113 if (!is_null(
$row->last_access)) {
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());
216 $values =
array($key256);
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'];
312 $key256 = ToolProvider\DataConnector\DataConnector::getConsumerKey(
$key);
314 if (
$key === $key256) {
317 $protected = (
$consumer->protected) ? 1 : 0;
320 $settingsValue = serialize(
$consumer->getSettings());
322 $now =
date(
"{$this->dateFormat} {$this->timeFormat}", $time);
329 $until =
date(
"{$this->dateFormat} {$this->timeFormat}",
$consumer->enableUntil);
341 if ($key256 == null) {
342 $key256 =
$id . ToolProvider\DataConnector\DataConnector::getRandomString(10);
346 $query =
'INSERT INTO lti2_consumer (consumer_key256, consumer_key, name, ' .
347 'secret, lti_version, consumer_name, consumer_version, consumer_guid, profile, tool_proxy, settings, protected, enabled, ' .
348 'enable_from, enable_until, last_access, created, updated, consumer_pk) ' .
349 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)';
350 $types =
array(
"text",
"text",
"text",
351 "text",
"text",
"text",
"text",
"text",
"text",
"text",
"text",
"integer",
"integer",
352 "timestamp",
"timestamp",
"timestamp",
"timestamp",
"timestamp",
"integer");
354 $consumer->secret,
$consumer->ltiVersion,
$consumer->consumerName,
$consumer->consumerVersion,
$consumer->consumerGuid, $profile,
$consumer->toolProxy, $settingsValue, $protected, $enabled,
355 $from, $until, $last, $now, $now,
$id);
360 $query =
'UPDATE lti2_consumer SET ' .
361 'consumer_key256 = %s, consumer_key = %s, name = %s, ' .
362 'secret= %s, lti_version = %s, consumer_name = %s, consumer_version = %s, consumer_guid = %s, ' .
363 'profile = %s, tool_proxy = %s, settings = %s, protected = %s, enabled = %s, ' .
364 'enable_from = %s, enable_until = %s, last_access = %s, updated = %s ' .
365 'WHERE consumer_pk = %s';
366 $types =
array(
"text",
"text",
"text",
367 "text",
"text",
"text",
"text",
"text",
"text",
"text",
"text",
"integer",
"integer",
368 "timestamp",
"timestamp",
"timestamp",
"timestamp",
"integer");
370 $consumer->secret,
$consumer->ltiVersion,
$consumer->consumerName,
$consumer->consumerVersion,
$consumer->consumerGuid, $profile,
$consumer->toolProxy, $settingsValue, $protected, $enabled,
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');
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,
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");
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");
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");
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");
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");
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");
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");
603 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ' .
604 'WHERE rl.consumer_pk = %s';
605 $types =
array(
"integer");
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");
620 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ' .
621 'WHERE c.consumer_pk = %s';
622 $types =
array(
"integer");
628 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONSUMER_TABLE_NAME .
' c ' .
629 'WHERE c.consumer_pk = %s';
630 $types =
array(
"integer");
649 $ilDB = $DIC[
'ilDB'];
651 $consumers =
array();
652 $query =
'SELECT * from lti_ext_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';
709 $settings = unserialize(
$row->settings);
710 if (!is_array($settings)) {
717 if (!is_null(
$row->enable_from)) {
721 if (!is_null(
$row->enable_until)) {
725 if (!is_null(
$row->last_access)) {
747 ### ToolProxy methods 751 # Load the tool proxy from the database 759 # Save the tool proxy to the database 767 # Delete the tool proxy from the database 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");
796 $values =
array($context->getRecordId());
798 $query =
'SELECT context_pk, consumer_pk, lti_context_id, settings, created, updated ' .
799 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' ' .
800 'WHERE (consumer_pk = %s) AND (lti_context_id = %s)';
801 $types =
array(
"integer",
"text");
802 $values =
array($context->getConsumer()->getRecordId(), $context->ltiContextId);
804 $rs_context =
$ilDB->queryF(
$query, $types, $values);
808 $context->setRecordId(intval(
$row->context_pk));
809 $context->setConsumerId(intval(
$row->consumer_pk));
810 $context->ltiContextId =
$row->lti_context_id;
811 $settings = unserialize(
$row->settings);
812 if (!is_array($settings)) {
815 $context->setSettings($settings);
816 $context->created = strtotime(
$row->created);
817 $context->updated = strtotime(
$row->updated);
835 $ilDB = $DIC[
'ilDB'];
838 $now =
date(
"{$this->dateFormat} {$this->timeFormat}",
$time);
839 $settingsValue = serialize($context->getSettings());
840 $id = $context->getRecordId();
841 $consumer_pk = $context->getConsumer()->getRecordId();
844 $id = $context->getRecordId();
845 $context->created =
$time;
847 $query =
"INSERT INTO {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' (context_pk, consumer_pk, lti_context_id, ' .
848 'settings, created, updated) ' .
849 'VALUES (%s, %s, %s, %s, %s, %s)';
850 $types =
array(
"integer",
"integer",
"text",
"text",
"timestamp",
"timestamp");
851 $values =
array($id, $consumer_pk, $context->ltiContextId, $settingsValue, $now, $now);
853 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' SET ' .
854 'lti_context_id = %s, settings = %s, ' .
856 'WHERE (consumer_pk = %s) AND (context_pk = %s)';
857 $types =
array(
"text",
"text",
"timestamp",
"integer",
"integer");
858 $values =
array($context->ltiContextId, $settingsValue, $now, $consumer_pk, $id);
862 $context->updated =
$time;
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");
886 $values =
array($context->getRecordId());
891 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::USER_RESULT_TABLE_NAME .
' u ' .
892 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
893 'WHERE rl.context_pk = %s';
894 $types =
array(
"integer");
895 $values =
array($context->getRecordId());
899 $query =
"UPDATE {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' prl ' .
900 "INNER JOIN {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
901 'SET prl.primary_resource_link_pk = null, prl.share_approved = null ' .
902 'WHERE rl.context_pk = %s';
903 $types =
array(
"integer");
904 $values =
array($context->getRecordId());
909 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::RESOURCE_LINK_TABLE_NAME .
' rl ' .
910 'WHERE rl.context_pk = %s';
911 $types =
array(
"integer");
912 $values =
array($context->getRecordId());
917 "FROM {$this->dbTableNamePrefix}" . ToolProvider\DataConnector\DataConnector::CONTEXT_TABLE_NAME .
' c ' .
918 'WHERE c.context_pk = %s';
919 $types =
array(
"integer");
920 $values =
array($context->getRecordId());
923 $context->initialize();
930 ### ResourceLink methods 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());
966 $rsContext =
$ilDB->queryF(
$query, $types, $values);
970 $resourceLink->setRecordId(intval(
$row->resource_link_pk));
971 if (!is_null(
$row->context_pk)) {
972 $resourceLink->setContextId(intval(
$row->context_pk));
974 $resourceLink->setContextId(null);
976 if (!is_null(
$row->consumer_pk)) {
977 $resourceLink->setConsumerId(intval(
$row->consumer_pk));
979 $resourceLink->setConsumerId(null);
981 $resourceLink->ltiResourceLinkId =
$row->lti_resource_link_id;
982 $settings = unserialize(
$row->settings);
983 if (!is_array($settings)) {
986 $resourceLink->setSettings($settings);
987 if (!is_null(
$row->primary_resource_link_pk)) {
988 $resourceLink->primaryResourceLinkId = intval(
$row->primary_resource_link_pk);
990 $resourceLink->primaryResourceLinkId = null;
992 $resourceLink->shareApproved = (is_null(
$row->share_approved)) ? null : (intval(
$row->share_approved) === 1);
993 $resourceLink->created = strtotime(
$row->created);
994 $resourceLink->updated = strtotime(
$row->updated);
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());
1106 $ok =
$ilDB->manipulateF(
$query, $types, $values);
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());
1116 $ok =
$ilDB->manipulateF(
$query, $types, $values);
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());
1125 $ok =
$ilDB->manipulateF(
$query, $types, $values);
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());
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 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");
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);
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");
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");
1317 $rsShareKey =
$ilDB->queryF(
$query, $types, $values);
1320 if (
$row && (intval(
$row->resource_link_pk) === $shareKey->resourceLinkId)) {
1321 $shareKey->autoApprove = (intval(
$row->auto_approve) === 1);
1322 $shareKey->expires = strtotime(
$row->expires);
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') .
' ' .
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);
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)) {
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());
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)
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
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.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
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
Create styles array
The data for the language used.
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.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
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.
saveContext($context)
Save context object.