23 # NB This class assumes that a MySQL connection has already been opened to the appropriate schema 30 ### ToolConsumer methods 43 if (!is_null($consumer->getRecordId())) {
44 $sql = sprintf(
'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' .
45 'signature_method, consumer_name, consumer_version, consumer_guid, ' .
46 'profile, tool_proxy, settings, protected, enabled, ' .
47 'enable_from, enable_until, last_access, created, updated ' .
48 "FROM {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' ' .
49 "WHERE consumer_pk = %d", $consumer->getRecordId());
51 $key256 = static::getConsumerKey($consumer->getKey());
52 $sql = sprintf(
'SELECT consumer_pk, name, consumer_key256, consumer_key, secret, lti_version, ' .
53 'signature_method, consumer_name, consumer_version, consumer_guid, ' .
54 'profile, tool_proxy, settings, protected, enabled, ' .
55 'enable_from, enable_until, last_access, created, updated ' .
56 "FROM {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' ' .
57 "WHERE consumer_key256 = %s", $this->
escape($key256));
59 $rsConsumer = mysql_query($sql);
61 while ($row = mysql_fetch_object($rsConsumer)) {
62 if (empty($key256) || empty($row->consumer_key) || ($consumer->getKey() === $row->consumer_key)) {
63 $consumer->setRecordId(intval($row->consumer_pk));
64 $consumer->name = $row->name;
65 $consumer->setkey(empty($row->consumer_key) ? $row->consumer_key256 : $row->consumer_key);
66 $consumer->secret = $row->secret;
67 $consumer->ltiVersion = $row->lti_version;
68 $consumer->signatureMethod = $row->signature_method;
69 $consumer->consumerName = $row->consumer_name;
70 $consumer->consumerVersion = $row->consumer_version;
71 $consumer->consumerGuid = $row->consumer_guid;
72 $consumer->profile = json_decode($row->profile);
73 $consumer->toolProxy = $row->tool_proxy;
74 $settings = json_decode($row->settings, TRUE);
75 if (!is_array($settings)) {
76 $settings = @unserialize($row->settings);
78 if (!is_array($settings)) {
81 $consumer->setSettings($settings);
82 $consumer->protected = (intval($row->protected) === 1);
83 $consumer->enabled = (intval($row->enabled) === 1);
84 $consumer->enableFrom =
null;
85 if (!is_null($row->enable_from)) {
86 $consumer->enableFrom = strtotime($row->enable_from);
88 $consumer->enableUntil =
null;
89 if (!is_null($row->enable_until)) {
90 $consumer->enableUntil = strtotime($row->enable_until);
92 $consumer->lastAccess =
null;
93 if (!is_null($row->last_access)) {
94 $consumer->lastAccess = strtotime($row->last_access);
96 $consumer->created = strtotime($row->created);
97 $consumer->updated = strtotime($row->updated);
102 mysql_free_result($rsConsumer);
117 $id = $consumer->getRecordId();
118 $key = $consumer->getKey();
119 $key256 = static::getConsumerKey($key);
120 if ($key === $key256) {
123 $protected = ($consumer->protected) ? 1 : 0;
124 $enabled = ($consumer->enabled) ? 1 : 0;
125 $profile = (!empty($consumer->profile)) ? json_encode($consumer->profile) :
null;
126 $settingsValue = json_encode($consumer->getSettings());
128 $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
130 if (!is_null($consumer->enableFrom)) {
131 $from = date(
"{$this->dateFormat} {$this->timeFormat}", $consumer->enableFrom);
134 if (!is_null($consumer->enableUntil)) {
135 $until = date(
"{$this->dateFormat} {$this->timeFormat}", $consumer->enableUntil);
138 if (!is_null($consumer->lastAccess)) {
139 $last = date($this->dateFormat, $consumer->lastAccess);
142 $sql = sprintf(
"INSERT INTO {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' (consumer_key256, consumer_key, name, ' .
143 'secret, lti_version, signature_method, consumer_name, consumer_version, consumer_guid, profile, ' .
144 'tool_proxy, settings, protected, enabled, ' .
145 'enable_from, enable_until, last_access, created, updated) ' .
146 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d, %d, %s, %s, %s, %s, %s)', $this->
escape($key256),
147 $this->
escape($key), $this->
escape($consumer->name), $this->escape($consumer->secret),
148 $this->
escape($consumer->ltiVersion), $this->
escape($consumer->signatureMethod),
149 $this->
escape($consumer->consumerName), $this->
escape($consumer->consumerVersion),
150 $this->
escape($consumer->consumerGuid), $this->
escape($profile), $this->
escape($consumer->toolProxy),
151 $this->
escape($settingsValue), $protected, $enabled, $this->
escape($from), $this->
escape($until),
154 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' SET ' .
155 'consumer_key256 = %s, consumer_key = %s, ' .
156 'name = %s, secret= %s, lti_version = %s, signature_method = %s, consumer_name = %s, consumer_version = %s, consumer_guid = %s, ' .
157 'profile = %s, tool_proxy = %s, settings = %s, ' .
158 'protected = %d, enabled = %d, enable_from = %s, enable_until = %s, last_access = %s, updated = %s ' .
159 'WHERE consumer_pk = %d', $this->
escape($key256), $this->
escape($key), $this->
escape($consumer->name),
160 $this->escape($consumer->secret), $this->
escape($consumer->ltiVersion), $this->
escape($consumer->signatureMethod),
161 $this->
escape($consumer->consumerName), $this->
escape($consumer->consumerVersion),
162 $this->
escape($consumer->consumerGuid), $this->
escape($profile), $this->
escape($consumer->toolProxy),
163 $this->
escape($settingsValue), $protected, $enabled, $this->
escape($from), $this->
escape($until),
164 $this->
escape($last), $this->
escape($now), $consumer->getRecordId());
166 $ok = mysql_query($sql);
169 $consumer->setRecordId(mysql_insert_id());
170 $consumer->created = $time;
172 $consumer->updated = $time;
188 $sql = sprintf(
"DELETE FROM {$this->dbTableNamePrefix}" . static::NONCE_TABLE_NAME .
' WHERE consumer_pk = %d',
189 $consumer->getRecordId());
193 $sql = sprintf(
'DELETE sk ' .
194 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' sk ' .
195 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
196 'WHERE rl.consumer_pk = %d', $consumer->getRecordId());
200 $sql = sprintf(
'DELETE sk ' .
201 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' sk ' .
202 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
203 "INNER JOIN {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
204 'WHERE c.consumer_pk = %d', $consumer->getRecordId());
208 $sql = sprintf(
'DELETE u ' .
209 "FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' u ' .
210 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
211 'WHERE rl.consumer_pk = %d', $consumer->getRecordId());
215 $sql = sprintf(
'DELETE u ' .
216 "FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' u ' .
217 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
218 "INNER JOIN {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
219 'WHERE c.consumer_pk = %d', $consumer->getRecordId());
223 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' prl ' .
224 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
225 'SET prl.primary_resource_link_pk = NULL, prl.share_approved = NULL ' .
226 'WHERE rl.consumer_pk = %d', $consumer->getRecordId());
227 $ok = mysql_query($sql);
230 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' prl ' .
231 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
232 "INNER JOIN {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
233 'SET prl.primary_resource_link_pk = NULL, prl.share_approved = NULL ' .
234 'WHERE c.consumer_pk = %d', $consumer->getRecordId());
235 $ok = mysql_query($sql);
238 $sql = sprintf(
'DELETE rl ' .
239 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ' .
240 'WHERE rl.consumer_pk = %d', $consumer->getRecordId());
244 $sql = sprintf(
'DELETE rl ' .
245 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ' .
246 "INNER JOIN {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' c ON rl.context_pk = c.context_pk ' .
247 'WHERE c.consumer_pk = %d', $consumer->getRecordId());
251 $sql = sprintf(
'DELETE c ' .
252 "FROM {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' c ' .
253 'WHERE c.consumer_pk = %d', $consumer->getRecordId());
257 $sql = sprintf(
'DELETE c ' .
258 "FROM {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' c ' .
259 'WHERE c.consumer_pk = %d', $consumer->getRecordId());
260 $ok = mysql_query($sql);
263 $consumer->initialize();
276 $consumers = array();
278 $sql =
'SELECT consumer_pk, consumer_key256, consumer_key, name, secret, lti_version, ' .
279 'signature_method, consumer_name, consumer_version, consumer_guid, ' .
280 'profile, tool_proxy, settings, ' .
281 'protected, enabled, enable_from, enable_until, last_access, created, updated ' .
282 "FROM {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' ' .
284 $rsConsumers = mysql_query($sql);
286 while ($row = mysql_fetch_object($rsConsumers)) {
287 $key = empty($row->consumer_key) ? $row->consumer_key256 : $row->consumer_key;
289 $consumer->setRecordId(intval($row->consumer_pk));
290 $consumer->name = $row->name;
291 $consumer->secret = $row->secret;
292 $consumer->ltiVersion = $row->lti_version;
293 $consumer->signatureMethod = $row->signature_method;
294 $consumer->consumerName = $row->consumer_name;
295 $consumer->consumerVersion = $row->consumer_version;
296 $consumer->consumerGuid = $row->consumer_guid;
297 $consumer->profile = json_decode($row->profile);
298 $consumer->toolProxy = $row->tool_proxy;
299 $settings = json_decode($row->settings, TRUE);
300 if (!is_array($settings)) {
301 $settings = @unserialize($row->settings);
303 if (!is_array($settings)) {
306 $consumer->setSettings($settings);
307 $consumer->protected = (intval($row->protected) === 1);
308 $consumer->enabled = (intval($row->enabled) === 1);
309 $consumer->enableFrom =
null;
310 if (!is_null($row->enable_from)) {
311 $consumer->enableFrom = strtotime($row->enable_from);
313 $consumer->enableUntil =
null;
314 if (!is_null($row->enable_until)) {
315 $consumer->enableUntil = strtotime($row->enable_until);
317 $consumer->lastAccess =
null;
318 if (!is_null($row->last_access)) {
319 $consumer->lastAccess = strtotime($row->last_access);
321 $consumer->created = strtotime($row->created);
322 $consumer->updated = strtotime($row->updated);
323 $consumers[] = $consumer;
325 mysql_free_result($rsConsumers);
345 if (!is_null($context->getRecordId())) {
346 $sql = sprintf(
'SELECT context_pk, consumer_pk, title, lti_context_id, type, settings, created, updated ' .
347 "FROM {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' ' .
348 'WHERE (context_pk = %d)', $context->getRecordId());
350 $sql = sprintf(
'SELECT context_pk, consumer_pk, title, lti_context_id, type, settings, created, updated ' .
351 "FROM {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' ' .
352 'WHERE (consumer_pk = %d) AND (lti_context_id = %s)', $context->getConsumer()->getRecordId(),
353 $this->
escape($context->ltiContextId));
355 $rs_context = mysql_query($sql);
357 $row = mysql_fetch_object($rs_context);
359 $context->setRecordId(intval($row->context_pk));
360 $context->setConsumerId(intval($row->consumer_pk));
361 $context->title = $row->title;
362 $context->ltiContextId = $row->lti_context_id;
363 $context->type = $row->type;
364 $settings = json_decode($row->settings, TRUE);
365 if (!is_array($settings)) {
366 $settings = @unserialize($row->settings);
368 if (!is_array($settings)) {
371 $context->setSettings($settings);
372 $context->created = strtotime($row->created);
373 $context->updated = strtotime($row->updated);
391 $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
392 $settingsValue = json_encode($context->getSettings());
393 $id = $context->getRecordId();
394 $consumer_pk = $context->getConsumer()->getRecordId();
396 $sql = sprintf(
"INSERT INTO {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' (consumer_pk, title, ' .
397 'lti_context_id, type, settings, created, updated) ' .
398 'VALUES (%d, %s, %s, %s, %s, %s, %s)', $consumer_pk, $this->
escape($context->title),
399 $this->escape($context->ltiContextId), $this->
escape($context->type), $this->
escape($settingsValue),
402 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' SET ' .
403 'title = %s, lti_context_id = %s, type = %s, settings = %s, ' .
405 'WHERE (consumer_pk = %d) AND (context_pk = %d)', $this->
escape($context->title),
406 $this->escape($context->ltiContextId), $this->
escape($context->type), $this->
escape($settingsValue),
407 $this->
escape($now), $consumer_pk, $id);
409 $ok = mysql_query($sql);
412 $context->setRecordId(mysql_insert_id());
413 $context->created = $time;
415 $context->updated = $time;
431 $sql = sprintf(
'DELETE sk ' .
432 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' sk ' .
433 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON sk.resource_link_pk = rl.resource_link_pk ' .
434 'WHERE rl.context_pk = %d', $context->getRecordId());
438 $sql = sprintf(
'DELETE u ' .
439 "FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' u ' .
440 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON u.resource_link_pk = rl.resource_link_pk ' .
441 'WHERE rl.context_pk = %d', $context->getRecordId());
445 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' prl ' .
446 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ON prl.primary_resource_link_pk = rl.resource_link_pk ' .
447 'SET prl.primary_resource_link_pk = null, prl.share_approved = null ' .
448 'WHERE rl.context_pk = %d', $context->getRecordId());
449 $ok = mysql_query($sql);
452 $sql = sprintf(
'DELETE rl ' .
453 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' rl ' .
454 'WHERE rl.context_pk = %d', $context->getRecordId());
458 $sql = sprintf(
'DELETE c ' .
459 "FROM {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' c ',
'WHERE c.context_pk = %d',
460 $context->getRecordId());
461 $ok = mysql_query($sql);
463 $context->initialize();
470 ### ResourceLink methods 483 if (!is_null($resourceLink->getRecordId())) {
484 $sql = sprintf(
'SELECT resource_link_pk, context_pk, consumer_pk, title, lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated ' .
485 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' ' .
486 'WHERE (resource_link_pk = %d)', $resourceLink->getRecordId());
487 } elseif (!is_null($resourceLink->getContext())) {
488 $sql = sprintf(
'SELECT resource_link_pk, context_pk, consumer_pk, title, lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated ' .
489 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' ' .
490 'WHERE (context_pk = %d) AND (lti_resource_link_id = %s)', $resourceLink->getContext()->getRecordId(),
491 $this->
escape($resourceLink->getId()));
493 $sql = sprintf(
'SELECT r.resource_link_pk, r.context_pk, r.consumer_pk, r.title, r.lti_resource_link_id, r.settings, r.primary_resource_link_pk, r.share_approved, r.created, r.updated ' .
494 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' r LEFT OUTER JOIN ' .
495 $this->dbTableNamePrefix . static::CONTEXT_TABLE_NAME .
' c ON r.context_pk = c.context_pk ' .
496 ' WHERE ((r.consumer_pk = %d) OR (c.consumer_pk = %d)) AND (lti_resource_link_id = %s)',
497 $resourceLink->getConsumer()->getRecordId(), $resourceLink->getConsumer()->getRecordId(),
498 $this->
escape($resourceLink->getId()));
500 $rsContext = mysql_query($sql);
502 $row = mysql_fetch_object($rsContext);
504 $resourceLink->setRecordId(intval($row->resource_link_pk));
505 if (!is_null($row->context_pk)) {
506 $resourceLink->setContextId(intval($row->context_pk));
508 $resourceLink->setContextId(
null);
510 if (!is_null($row->consumer_pk)) {
511 $resourceLink->setConsumerId(intval($row->consumer_pk));
513 $resourceLink->setConsumerId(
null);
515 $resourceLink->title = $row->title;
516 $resourceLink->ltiResourceLinkId = $row->lti_resource_link_id;
517 $settings = json_decode($row->settings, TRUE);
518 if (!is_array($settings)) {
519 $settings = @unserialize($row->settings);
521 if (!is_array($settings)) {
524 $resourceLink->setSettings($settings);
525 if (!is_null($row->primary_resource_link_pk)) {
526 $resourceLink->primaryResourceLinkId = intval($row->primary_resource_link_pk);
528 $resourceLink->primaryResourceLinkId =
null;
530 $resourceLink->shareApproved = (is_null($row->share_approved)) ?
null : (intval($row->share_approved) === 1);
531 $resourceLink->created = strtotime($row->created);
532 $resourceLink->updated = strtotime($row->updated);
549 if (is_null($resourceLink->shareApproved)) {
551 } elseif ($resourceLink->shareApproved) {
556 if (empty($resourceLink->primaryResourceLinkId)) {
557 $primaryResourceLinkId =
'NULL';
559 $primaryResourceLinkId = strval($resourceLink->primaryResourceLinkId);
562 $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
563 $settingsValue = json_encode($resourceLink->getSettings());
564 if (!is_null($resourceLink->getContext())) {
565 $consumerId =
'NULL';
566 $contextId = strval($resourceLink->getContext()->getRecordId());
567 } elseif (!is_null($resourceLink->getContextId())) {
568 $consumerId =
'NULL';
569 $contextId = strval($resourceLink->getContextId());
571 $consumerId = strval($resourceLink->getConsumer()->getRecordId());
574 $id = $resourceLink->getRecordId();
576 $sql = sprintf(
"INSERT INTO {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' (consumer_pk, context_pk, ' .
577 'title, lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated) ' .
578 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)', $consumerId, $contextId, $this->
escape($resourceLink->title),
579 $this->escape($resourceLink->getId()), $this->
escape($settingsValue), $primaryResourceLinkId, $approved,
581 } elseif ($contextId !==
'NULL') {
582 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' SET ' .
583 'consumer_pk = %s, title = %s, lti_resource_link_id = %s, settings = %s, ' .
584 'primary_resource_link_pk = %s, share_approved = %s, updated = %s ' .
585 'WHERE (context_pk = %s) AND (resource_link_pk = %d)', $consumerId, $this->
escape($resourceLink->title),
586 $this->escape($resourceLink->getId()), $this->
escape($settingsValue), $primaryResourceLinkId, $approved,
587 $this->
escape($now), $contextId, $id);
589 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' SET ' .
590 'context_pk = %s, title = %s, lti_resource_link_id = %s, settings = %s, ' .
591 'primary_resource_link_pk = %s, share_approved = %s, updated = %s ' .
592 'WHERE (consumer_pk = %s) AND (resource_link_pk = %d)', $contextId, $this->
escape($resourceLink->title),
593 $this->escape($resourceLink->getId()), $this->
escape($settingsValue), $primaryResourceLinkId, $approved,
594 $this->
escape($now), $consumerId, $id);
596 $ok = mysql_query($sql);
599 $resourceLink->setRecordId(mysql_insert_id());
600 $resourceLink->created = $time;
602 $resourceLink->updated = $time;
618 $sql = sprintf(
"DELETE FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' ' .
619 'WHERE (resource_link_pk = %d)', $resourceLink->getRecordId());
620 $ok = mysql_query($sql);
624 $sql = sprintf(
"DELETE FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' ' .
625 'WHERE (resource_link_pk = %d)', $resourceLink->getRecordId());
626 $ok = mysql_query($sql);
631 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' ' .
632 'SET primary_resource_link_pk = NULL ' .
633 'WHERE (primary_resource_link_pk = %d)', $resourceLink->getRecordId());
634 $ok = mysql_query($sql);
639 $sql = sprintf(
"DELETE FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' ' .
640 'WHERE (resource_link_pk = %s)', $resourceLink->getRecordId());
641 $ok = mysql_query($sql);
645 $resourceLink->initialize();
665 $userResults = array();
668 $sql = sprintf(
'SELECT u.user_result_pk, u.lti_result_sourcedid, u.lti_user_id, u.created, u.updated ' .
669 "FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' AS u ' .
670 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' AS rl ' .
671 'ON u.resource_link_pk = rl.resource_link_pk ' .
672 "WHERE (rl.resource_link_pk = %d) AND (rl.primary_resource_link_pk IS NULL)", $resourceLink->getRecordId());
674 $sql = sprintf(
'SELECT u.user_result_pk, u.lti_result_sourcedid, u.lti_user_id, u.created, u.updated ' .
675 "FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' AS u ' .
676 "INNER JOIN {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' AS rl ' .
677 'ON u.resource_link_pk = rl.resource_link_pk ' .
678 'WHERE ((rl.resource_link_pk = %d) AND (rl.primary_resource_link_pk IS NULL)) OR ' .
679 '((rl.primary_resource_link_pk = %d) AND (share_approved = 1))', $resourceLink->getRecordId(),
680 $resourceLink->getRecordId());
682 $rsUser = mysql_query($sql);
684 while ($row = mysql_fetch_object($rsUser)) {
686 if (is_null($idScope)) {
687 $userResults[] = $userresult;
689 $userResults[$userresult->getId($idScope)] = $userresult;
708 $sql = sprintf(
'SELECT c.consumer_name, r.resource_link_pk, r.title, r.share_approved ' .
709 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' AS r ' .
710 "INNER JOIN {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' AS c ON r.consumer_pk = c.consumer_pk ' .
711 'WHERE (r.primary_resource_link_pk = %d) ' .
713 'SELECT c2.consumer_name, r2.resource_link_pk, r2.title, r2.share_approved ' .
714 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_TABLE_NAME .
' AS r2 ' .
715 "INNER JOIN {$this->dbTableNamePrefix}" . static::CONTEXT_TABLE_NAME .
' AS x ON r2.context_pk = x.context_pk ' .
716 "INNER JOIN {$this->dbTableNamePrefix}" . static::CONSUMER_TABLE_NAME .
' AS c2 ON x.consumer_pk = c2.consumer_pk ' .
717 'WHERE (r2.primary_resource_link_pk = %d) ' .
718 'ORDER BY consumer_name, title', $resourceLink->getRecordId(), $resourceLink->getRecordId());
719 $rsShare = mysql_query($sql);
721 while ($row = mysql_fetch_object($rsShare)) {
723 $share->resourceLinkId = intval($row->resource_link_pk);
724 $share->approved = (intval($row->share_approved) === 1);
733 ### ConsumerNonce methods 748 $now = date(
"{$this->dateFormat} {$this->timeFormat}", time());
749 $sql =
"DELETE FROM {$this->dbTableNamePrefix}" . static::NONCE_TABLE_NAME .
" WHERE expires <= '{$now}'";
753 $sql = sprintf(
"SELECT value AS T FROM {$this->dbTableNamePrefix}" . static::NONCE_TABLE_NAME .
' WHERE (consumer_pk = %d) AND (value = %s)',
754 $nonce->getConsumer()->getRecordId(), $this->
escape($nonce->getValue()));
755 $rs_nonce = mysql_query($sql);
757 $row = mysql_fetch_object($rs_nonce);
758 if ($row !==
false) {
775 $expires = date(
"{$this->dateFormat} {$this->timeFormat}", $nonce->expires);
776 $sql = sprintf(
"INSERT INTO {$this->dbTableNamePrefix}" . static::NONCE_TABLE_NAME .
" (consumer_pk, value, expires) VALUES (%d, %s, %s)",
777 $nonce->getConsumer()->getRecordId(), $this->
escape($nonce->getValue()), $this->
escape($expires));
778 $ok = mysql_query($sql);
784 ### ResourceLinkShareKey methods 799 $now = date(
"{$this->dateFormat} {$this->timeFormat}", time());
800 $sql =
"DELETE FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
" WHERE expires <= '{$now}'";
804 $id = mysql_real_escape_string($shareKey->getId());
805 $sql =
'SELECT resource_link_pk, auto_approve, expires ' .
806 "FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' ' .
807 "WHERE share_key_id = '{$id}'";
808 $rsShareKey = mysql_query($sql);
810 $row = mysql_fetch_object($rsShareKey);
811 if ($row && (intval($row->resource_link_pk) === $shareKey->resourceLinkId)) {
812 $shareKey->autoApprove = (intval($row->auto_approve) === 1);
813 $shareKey->expires = strtotime($row->expires);
830 if ($shareKey->autoApprove) {
835 $expires = date(
"{$this->dateFormat} {$this->timeFormat}", $shareKey->expires);
836 $sql = sprintf(
"INSERT INTO {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
' ' .
837 '(share_key_id, resource_link_pk, auto_approve, expires) ' .
838 "VALUES (%s, %d, {$approve}, '{$expires}')", $this->
escape($shareKey->getId()), $shareKey->resourceLinkId);
839 $ok = mysql_query($sql);
853 $sql =
"DELETE FROM {$this->dbTableNamePrefix}" . static::RESOURCE_LINK_SHARE_KEY_TABLE_NAME .
" WHERE share_key_id = '{$shareKey->getId()}'";
855 $ok = mysql_query($sql);
858 $shareKey->initialize();
865 ### UserResult methods 878 if (!is_null($userresult->getRecordId())) {
879 $sql = sprintf(
'SELECT user_result_pk, resource_link_pk, lti_user_id, lti_result_sourcedid, created, updated ' .
880 "FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' ' .
881 'WHERE (user_result_pk = %d)', $userresult->getRecordId());
883 $sql = sprintf(
'SELECT user_result_pk, resource_link_pk, lti_user_id, lti_result_sourcedid, created, updated ' .
884 "FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' ' .
885 'WHERE (resource_link_pk = %d) AND (lti_user_id = %s)', $userresult->getResourceLink()->getRecordId(),
888 $rsUser = mysql_query($sql);
890 $row = mysql_fetch_object($rsUser);
892 $userresult->setRecordId(intval($row->user_result_pk));
893 $userresult->setResourceLinkId(intval($row->resource_link_pk));
894 $userresult->ltiUserId = $row->lti_user_id;
895 $userresult->ltiResultSourcedId = $row->lti_result_sourcedid;
896 $userresult->created = strtotime($row->created);
897 $userresult->updated = strtotime($row->updated);
915 $now = date(
"{$this->dateFormat} {$this->timeFormat}", $time);
916 if (is_null($userresult->created)) {
917 $sql = sprintf(
"INSERT INTO {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' (resource_link_pk, ' .
918 'lti_user_id, lti_result_sourcedid, created, updated) ' .
919 'VALUES (%d, %s, %s, %s, %s)', $userresult->getResourceLink()->getRecordId(),
921 $this->
escape($userresult->ltiResultSourcedId), $this->
escape($now), $this->
escape($now));
923 $sql = sprintf(
"UPDATE {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' ' .
924 'SET lti_user_id = %s, lti_result_sourcedid = %s, updated = %s ' .
926 $this->
escape($userresult->ltiResultSourcedId), $this->
escape($now), $userresult->getRecordId());
928 $ok = mysql_query($sql);
930 if (is_null($userresult->created)) {
931 $userresult->setRecordId(mysql_insert_id());
932 $userresult->created = $time;
934 $userresult->updated = $time;
949 $sql = sprintf(
"DELETE FROM {$this->dbTableNamePrefix}" . static::USER_RESULT_TABLE_NAME .
' ' .
950 'WHERE (user_result_pk = %d)', $userresult->getRecordId());
951 $ok = mysql_query($sql);
954 $userresult->initialize();
971 public function escape($value, $addQuotes =
true)
973 if (is_null($value)) {
976 $value = mysql_real_escape_string($value);
978 $value =
"'{$value}'";
loadContext($context)
Load context object.
Class to represent an LTI Data Connector for MySQL.
static fromResourceLink($resourceLink, $ltiUserId)
Class constructor from resource link.
Class to provide a connection to a persistent store for LTI objects.
deleteContext($context)
Delete context object.
getToolConsumers()
Load all tool consumers from the database.
getSharesResourceLink($resourceLink)
Get array of shares defined for this resource link.
loadResourceLink($resourceLink)
Load resource link object.
Class to represent a tool consumer context.
escape($value, $addQuotes=true)
Escape a string for use in a database query.
loadConsumerNonce($nonce)
Load nonce object.
deleteToolConsumer($consumer)
Delete tool consumer object.
saveResourceLinkShareKey($shareKey)
Save resource link share key object.
deleteUserResult($userresult)
Delete user object.
Class to represent a tool consumer nonce.
getUserResultSourcedIDsResourceLink($resourceLink, $localOnly, $idScope)
Get array of user objects.
Class to represent a tool consumer resource link share.
loadToolConsumer($consumer)
Load tool consumer object.
saveContext($context)
Save context object.
deleteResourceLink($resourceLink)
Delete resource link object.
saveConsumerNonce($nonce)
Save nonce object.
saveUserResult($userresult)
Save user object.
Class to represent a tool consumer user.
deleteResourceLinkShareKey($shareKey)
Delete resource link share key object.
saveResourceLink($resourceLink)
Save resource link object.
Class to represent a tool consumer resource link share key.
loadUserResult($userresult)
Load user object.
Class to represent a tool consumer resource link.
saveToolConsumer($consumer)
Save tool consumer object.
loadResourceLinkShareKey($shareKey)
Load resource link share key object.