ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
ilLTIViewGUI Class Reference

class for ILIAS ViewLTI More...

+ Collaboration diagram for ilLTIViewGUI:

Public Member Functions

 __construct ()
 
 init ()
 Init LTI mode for lti authenticated users. More...
 
 executeCommand ()
 
 isActive ()
 
 initGUI ()
 
 getPostData ()
 
 getExternalCss ()
 
 getTitle ()
 
 getTitleForExitPage ()
 
 getShortTitle ()
 
 exitLti ()
 exit LTI session and if defined redirecting to returnUrl ToDo: Standard Template with delos ... More...
 
 logout (bool $force_ilias_logout=false)
 logout ILIAS and destroys Session and ilClientId cookie if no consumer is still open in the LTI User Session More...
 
 getCmdLink (String $cmd)
 

Static Public Member Functions

static getInstance ()
 for compatiblity with ilLTIRouterGUI More...
 

Data Fields

const CHECK_HTTP_REFERER = true
 contstants More...
 
ilLanguage $lng = null
 public variables More...
 

Protected Member Functions

 getContextId ()
 

Private Member Functions

 isLTIUser ()
 get LTI Mode from Users->getAuthMode More...
 
 getSessionValue (string $sess_key)
 
 getCookieValue (string $cookie_key)
 
 removeContextFromSession (string $context_id)
 
 findEffectiveRefId (?string $url=null)
 Find effective ref_id for request. More...
 

Private Attributes

ILIAS DI Container $dic = null
 private variables More...
 
int $user = null
 
ilLogger $log = null
 
string $link_dir = ""
 
int $effectiveRefId = null
 
ILIAS HTTP Wrapper WrapperFactory $wrapper
 
ILIAS Refinery KindlyTo Group $kindlyTo
 
ilLocatorGUI $locator
 

Detailed Description

class for ILIAS ViewLTI

Author
Stefan Schneider <schne.nosp@m.ider.nosp@m.@hrz..nosp@m.uni-.nosp@m.marbu.nosp@m.rg.d.nosp@m.e
Version
$id$

ilLTIViewGUI: ilLTIRouterGUI

Definition at line 32 of file class.ilLTIViewGUI.php.

Constructor & Destructor Documentation

◆ __construct()

ilLTIViewGUI::__construct ( )

Definition at line 60 of file class.ilLTIViewGUI.php.

References $DIC, ilLoggerFactory\getLogger(), ILIAS\Repository\lng(), and ILIAS\Repository\locator().

61  {
62  global $DIC;
63  $this->dic = $DIC;
64  $this->log = ilLoggerFactory::getLogger('ltis');
65  $this->lng = $this->dic->language();
66  $this->lng->loadLanguageModule('lti');
67  $this->wrapper = $DIC->http()->wrapper();
68  $this->kindlyTo = $DIC->refinery()->kindlyTo();
69  $this->locator = $DIC['ilLocator'];
70  }
static getLogger(string $a_component_id)
Get component logger.
global $DIC
Definition: feed.php:28
+ Here is the call graph for this function:

Member Function Documentation

◆ executeCommand()

ilLTIViewGUI::executeCommand ( )
Returns
void

Definition at line 113 of file class.ilLTIViewGUI.php.

References exitLti().

113  : void
114  {
115  global $ilCtrl;
116  $cmd = $ilCtrl->getCmd();
117  switch ($cmd) {
118  case 'exit':
119  $this->exitLti();
120  break;
121  }
122  }
exitLti()
exit LTI session and if defined redirecting to returnUrl ToDo: Standard Template with delos ...
+ Here is the call graph for this function:

◆ exitLti()

ilLTIViewGUI::exitLti ( )

exit LTI session and if defined redirecting to returnUrl ToDo: Standard Template with delos ...

Definition at line 348 of file class.ilLTIViewGUI.php.

References ilSession\clear(), getContextId(), getPostData(), ilSession\has(), ILIAS\UI\examples\Symbol\Glyph\Header\header(), ILIAS\Repository\lng(), logout(), and removeContextFromSession().

Referenced by executeCommand().

348  : void
349  {
350  $this->log->info("exitLTI");
351  $force_ilias_logout = false;
352  $context_id = $this->getContextId();
353  if ($context_id == 0) {
354  $this->log->warning("could not find any valid context_id!");
355  $force_ilias_logout = true;
356  }
357  $post_data = $this->getPostData();
358 
359  $return_url = '';
360  if (isset($post_data['launch_presentation_return_url'])) {
361  $return_url = $post_data['launch_presentation_return_url'];
362  }
363  $this->removeContextFromSession((string) $context_id);
364 
365  if (ilSession::has('lti_' . $context_id . '_post_data')) {
366  ilSession::clear('lti_' . $context_id . '_post_data');
367  $this->log->debug('unset SESSION["' . 'lti_' . $context_id . '_post_data"]');
368  }
369 
370  if (!isset($return_url) || $return_url === '') {
371  $cc = $this->dic->globalScreen()->tool()->context()->current();
372  $cc->addAdditionalData(LtiViewLayoutProvider::GS_EXIT_LTI, true);
373  $ui_factory = $this->dic->ui()->factory();
374  $renderer = $this->dic->ui()->renderer();
375  $content = [
376  $ui_factory->messageBox()->info($this->lng->txt('lti_exited_info'))
377  ];
378  $tpl = $this->dic["tpl"];
379  $tpl->setContent($renderer->render($content));
380  $this->logout($force_ilias_logout);
381  $tpl->printToStdout();
382  } else {
383  $this->logout($force_ilias_logout);
384  header('Location: ' . $return_url);
385  }
386  }
logout(bool $force_ilias_logout=false)
logout ILIAS and destroys Session and ilClientId cookie if no consumer is still open in the LTI User ...
removeContextFromSession(string $context_id)
static has($a_var)
static clear(string $a_var)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ findEffectiveRefId()

ilLTIViewGUI::findEffectiveRefId ( ?string  $url = null)
private

Find effective ref_id for request.

Parameters
string | null$url

Definition at line 458 of file class.ilLTIViewGUI.php.

References $url, ilSession\get(), ilSession\has(), ILIAS\Repository\int(), and ilSession\set().

Referenced by getContextId().

458  : void
459  {
460  $query = [];
461  if ($url === null) {
462  if ($this->wrapper->query()->has('ref_id')) {
463  $query['ref_id'] = $this->wrapper->query()->retrieve('ref_id', $this->kindlyTo->string());
464  }
465  if ($this->wrapper->query()->has('target')) {
466  $query['target'] = $this->wrapper->query()->retrieve('target', $this->kindlyTo->string());
467  }
468  } else {
469  parse_str((string) parse_url($url, PHP_URL_QUERY), $query);
470  }
471  if (isset($query['ref_id']) && (int) $query['ref_id']) {
472  $this->effectiveRefId = (int) $query['ref_id'];
473  return;
474  }
475  if (ilSession::has('lti_init_target') && ilSession::get('lti_init_target') != "") {
476  $target_arr = explode('_', ilSession::get('lti_init_target'));
477  ilSession::set('lti_init_target', "");
478  } else {
479  if (isset($query['target'])) {
480  $target_arr = explode('_', (string) $query['target']);
481  }
482  }
483  if (isset($target_arr[1]) and (int) $target_arr[1]) {
484  $this->effectiveRefId = (int) $target_arr[1];
485  }
486  }
static get(string $a_var)
$url
Definition: ltiregstart.php:35
static has($a_var)
static set(string $a_var, $a_val)
Set a value.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getCmdLink()

ilLTIViewGUI::getCmdLink ( String  $cmd)
Parameters
String$cmd
Returns
String
Exceptions
ilCtrlException

Definition at line 418 of file class.ilLTIViewGUI.php.

References getContextId().

418  : String
419  {
420  global $ilCtrl;
421  $lti_context_id = $this->getContextId();
422  $lti_context_id_param = ($lti_context_id != '') ? "&lti_context_id=" . $lti_context_id : '';
423  $targetScript = "";
424  return $this->link_dir . $targetScript . $this->dic->ctrl()->getLinkTargetByClass(array('illtiroutergui',strtolower(get_class($this))), $cmd) . "&baseClass=illtiroutergui" . $lti_context_id_param;
425  }
+ Here is the call graph for this function:

◆ getContextId()

ilLTIViewGUI::getContextId ( )
protected
Returns
int|null

Definition at line 153 of file class.ilLTIViewGUI.php.

References $_SERVER, $DIC, $effectiveRefId, $path, $ref_id, ilObject\_lookupType(), CHECK_HTTP_REFERER, findEffectiveRefId(), ilSession\get(), ilSession\has(), ILIAS\Repository\int(), ILIAS\Repository\locator(), ilUtil\redirect(), and ilSession\set().

Referenced by exitLti(), getCmdLink(), and getPostData().

153  : ?int
154  {
155  global $DIC;
156 
157  // forced lti_context_id for example request command in exitLTI
158  if ($this->wrapper->query()->has('lti_context_id') &&
159  $this->wrapper->query()->retrieve('lti_context_id', $this->kindlyTo->string()) !== '') {
160  $contextId = (int) $this->wrapper->query()->retrieve('lti_context_id', $this->kindlyTo->int());
161  $this->log->debug("find context_id by GET param: " . (string) $contextId);
162  return $contextId;
163  }
164 
165  $this->findEffectiveRefId();
166  // ???
167  if (
168  (
169  $this->wrapper->query()->has('baseClass') &&
170  $this->wrapper->query()->retrieve('baseClass', $this->kindlyTo->string()) === 'ilDashboardGUI'
171  )
172  &&
173  (
174  $this->wrapper->query()->has('cmd') &&
175  $this->wrapper->query()->retrieve('cmd', $this->kindlyTo->string()) === 'jumpToSelectedItems'
176  )
177  ) {
178  $this->log->debug("jumpToSelectedItems");
179  if (ilSession::get('lti_ref_id_at_init') != "") {
180  $this->effectiveRefId = (int) ilSession::get('lti_ref_id_at_init');
181  ilSession::set('lti_ref_id_at_init', "");
182  }
183  }
184 
186  if (empty($ref_id)) {
187  $this->log->debug("empty ref_id");
188  return 0;
189  }
190 
191  $this->log->debug("Effective ref_id: " . $ref_id);
192  //check
193  ilSession::set('lti_ref_id_at_init', (string) $ref_id);
194 
195 
196  // context_id = ref_id in request
197  if (ilSession::has('lti_' . $ref_id . '_post_data')) {
198  $this->log->debug("lti context session exists for " . $ref_id);
199  // return $ref_id;
200  }
201  // sub item request
202  $this->log->debug("ref_id not exists as context_id, walking tree backwards to find a valid context_id");
203  $locator_items = $this->locator->getItems();
204  if (is_array($locator_items) && count($locator_items) > 0) {
205  for ($i = count($locator_items) - 1;$i >= 0;$i--) {
206  if (ilSession::has('lti_' . $locator_items[$i]['ref_id'] . '_post_data')) {
207  $this->log->debug("found valid ref_id in locator: " . $locator_items[$i]['ref_id']);
208  return $locator_items[$i]['ref_id'];
209  }
210  }
211  }
212  $this->log->warning("no valid context_id found for ref_id request: " . $ref_id);
213 
216  $obj_type = ilObject::_lookupType($ref_id, true);
217  $context_id = 0;
218  $referer = 0;
219 
220  // first try to get real http referer
221  if (isset($_SERVER['HTTP_REFERER'])) {
222  $this->findEffectiveRefId($_SERVER['HTTP_REFERER']);
223  } else { // only fallback and not reliable on multiple browser LTi contexts
224  if (ilSession::has('referer_ref_id')) {
225  $this->effectiveRefId = ilSession::get('referer_ref_id');
226  }
227  }
228 
229  $referer = (int) $this->effectiveRefId;
230 
231  if ($referer > 0) {
232  if (ilSession::has('lti_' . $referer . '_post_data')) {
233  $ref_id = $referer;
234  $context_id = $referer;
235  $obj_type = ilObject::_lookupType($ref_id, true);
236  $this->log->debug("referer obj_type: " . $obj_type);
237  } else {
238  $this->log->debug("search tree of referer...");
239  if ($this->dic->repositoryTree()->isInTree($referer)) {
240  $path = $this->dic->repositoryTree()->getPathId($referer);
241  for ($i = count($path) - 1;$i >= 0;$i--) {
242  if (ilSession::has('lti_' . $path[$i] . '_post_data')) {
243  // redirect to referer, because it is valid
244  $ref_id = $referer;
245  $context_id = $path[$i];
246  $obj_type = ilObject::_lookupType($ref_id, true);
247  break;
248  }
249  }
250  }
251  }
252  }
253 
254  if ($ref_id > 0 && $obj_type != '') {
255  if (
256  (
257  $this->wrapper->query()->has('baseClass') &&
258  $this->wrapper->query()->retrieve('baseClass', $this->kindlyTo->string()) === 'ilDashboardGUI'
259  )
260  &&
261  (
262  $this->wrapper->query()->has('cmdClass') &&
263  $this->wrapper->query()->retrieve('cmdClass', $this->kindlyTo->string()) === 'ilpersonalprofilegui'
264  )
265  ) {
266  return $context_id;
267  }
268  // $this->dic->ui()->mainTemplate()->setOnScreenMessage('failure', $this->lng->txt('permission_denied'), true);
269  $redirect = $this->link_dir . "goto.php?target=" . $obj_type . "_" . $ref_id . "&lti_context_id=" . $context_id;
270  $this->log->debug("redirect: " . $redirect);
271  ilUtil::redirect($redirect);
272  }
273  }
274  $lti_context_ids = ilSession::get('lti_context_ids');
275  if (is_array($lti_context_ids) && count($lti_context_ids) > 0) {
276  if (count($lti_context_ids) == 1) {
277  $this->log->debug("using context_id from only LTI session");
278  return $lti_context_ids[0];
279  } else {
280  $this->log->warning("Multiple LTI sessions exists. The context_id can not be clearly detected");
281  }
282  }
283  return null;
284  }
static get(string $a_var)
$path
Definition: ltiservices.php:32
global $DIC
Definition: feed.php:28
$ref_id
Definition: ltiauth.php:67
$_SERVER['HTTP_HOST']
Definition: raiseError.php:10
static has($a_var)
static redirect(string $a_script)
const CHECK_HTTP_REFERER
contstants
static _lookupType(int $id, bool $reference=false)
static set(string $a_var, $a_val)
Set a value.
findEffectiveRefId(?string $url=null)
Find effective ref_id for request.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getCookieValue()

ilLTIViewGUI::getCookieValue ( string  $cookie_key)
private

Definition at line 436 of file class.ilLTIViewGUI.php.

436  : string
437  {
438  if ($this->dic->wrapper->cookie()->has($cookie_key) && $this->dic->wrapper->cookie()->retrieve($cookie_key, $this->dic->refinery()->kindlyTo()->string() != '')) {
439  return $this->dic->wrapper->cookie()->retrieve($cookie_key, $this->dic->refinery()->kindlyTo()->string());
440  } else {
441  return '';
442  }
443  }

◆ getExternalCss()

ilLTIViewGUI::getExternalCss ( )
Returns
string

Definition at line 307 of file class.ilLTIViewGUI.php.

References getPostData().

307  : string
308  {
309  $post_data = $this->getPostData();
310  if ($post_data !== null) {
311  return (isset($post_data['launch_presentation_css_url'])) ? $post_data['launch_presentation_css_url'] : '';
312  }
313  return '';
314  }
+ Here is the call graph for this function:

◆ getInstance()

static ilLTIViewGUI::getInstance ( )
static

for compatiblity with ilLTIRouterGUI

Returns
mixed

Definition at line 89 of file class.ilLTIViewGUI.php.

References $DIC.

90  {
91  global $DIC;
92  return $DIC["lti"];
93  }
global $DIC
Definition: feed.php:28

◆ getPostData()

ilLTIViewGUI::getPostData ( )
Returns
array|null

Definition at line 289 of file class.ilLTIViewGUI.php.

References ilSession\get(), and getContextId().

Referenced by exitLti(), getExternalCss(), and getTitle().

289  : ?array
290  {
291  $context_id = $this->getContextId();
292  if ($context_id == 0) {
293  $this->log->warning("could not find any valid context_id!");
294  return null;
295  }
296  $post_data = ilSession::get('lti_' . $context_id . '_post_data');
297  if (!is_array($post_data)) {
298  $this->log->warning("no session post_data: " . "lti_" . $context_id . "_post_data");
299  return null;
300  }
301  return $post_data;
302  }
static get(string $a_var)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getSessionValue()

ilLTIViewGUI::getSessionValue ( string  $sess_key)
private

Definition at line 427 of file class.ilLTIViewGUI.php.

References ilSession\get(), and ilSession\has().

427  : string
428  {
429  if (ilSession::has($sess_key) && ilSession::get($sess_key) != '') {
430  return ilSession::get($sess_key);
431  } else {
432  return '';
433  }
434  }
static get(string $a_var)
static has($a_var)
+ Here is the call graph for this function:

◆ getShortTitle()

ilLTIViewGUI::getShortTitle ( )
Returns
string

Definition at line 339 of file class.ilLTIViewGUI.php.

References ILIAS\Repository\lng().

339  : string
340  {
341  return $this->lng->txt('lti_mode');
342  }
+ Here is the call graph for this function:

◆ getTitle()

ilLTIViewGUI::getTitle ( )
Returns
string

Definition at line 319 of file class.ilLTIViewGUI.php.

References getPostData().

319  : string
320  {
321  $post_data = $this->getPostData();
322  if ($post_data !== null) {
323  return (isset($post_data['resource_link_title'])) ? "LTI - " . $post_data['resource_link_title'] : "LTI";
324  }
325  return "LTI";
326  }
+ Here is the call graph for this function:

◆ getTitleForExitPage()

ilLTIViewGUI::getTitleForExitPage ( )
Returns
string

Definition at line 331 of file class.ilLTIViewGUI.php.

References ILIAS\Repository\lng().

331  : string
332  {
333  return $this->lng->txt('lti_exited');
334  }
+ Here is the call graph for this function:

◆ init()

ilLTIViewGUI::init ( )

Init LTI mode for lti authenticated users.

Definition at line 75 of file class.ilLTIViewGUI.php.

References $context, initGUI(), and isLTIUser().

75  : void
76  {
77  $this->link_dir = (defined("ILIAS_MODULE")) ? "../" : "";
78  if ($this->isLTIUser()) {
79  $context = $this->dic->globalScreen()->tool()->context();
80  $context->claim()->lti();
81  $this->initGUI();
82  }
83  }
$context
Definition: webdav.php:31
isLTIUser()
get LTI Mode from Users->getAuthMode
+ Here is the call graph for this function:

◆ initGUI()

ilLTIViewGUI::initGUI ( )
Returns
void

Definition at line 135 of file class.ilLTIViewGUI.php.

Referenced by init().

135  : void
136  {
137  $this->log->debug("initGUI");
138  $baseclass = '';
139  if ($this->wrapper->query()->has('baseClass')) {
140  $baseclass = strtolower($this->wrapper->query()->retrieve('baseClass', $this->kindlyTo->string()));
141  }
142  if ($this->wrapper->query()->has('cmdClass')) {
143  $cmdclass = strtolower($this->wrapper->query()->retrieve('cmdClass', $this->kindlyTo->string()));
144  }
145  if ($baseclass == 'illtiroutergui') {
146  return;
147  }
148  }
+ Here is the caller graph for this function:

◆ isActive()

ilLTIViewGUI::isActive ( )
Returns
bool

Definition at line 127 of file class.ilLTIViewGUI.php.

References isLTIUser().

127  : bool
128  {
129  return $this->isLTIUser();
130  }
isLTIUser()
get LTI Mode from Users->getAuthMode
+ Here is the call graph for this function:

◆ isLTIUser()

ilLTIViewGUI::isLTIUser ( )
private

get LTI Mode from Users->getAuthMode

Returns
bool

Definition at line 99 of file class.ilLTIViewGUI.php.

Referenced by init(), and isActive().

99  : bool
100  {
101  if (!$this->dic->user() instanceof ilObjUser) {
102  return false;
103  }
104  if ($this->dic->user()->getAuthMode() == null) {
105  return false;
106  }
107  return (strpos($this->dic->user()->getAuthMode(), 'lti_') === 0);
108  }
+ Here is the caller graph for this function:

◆ logout()

ilLTIViewGUI::logout ( bool  $force_ilias_logout = false)

logout ILIAS and destroys Session and ilClientId cookie if no consumer is still open in the LTI User Session

Definition at line 391 of file class.ilLTIViewGUI.php.

References ilAuthUtils\AUTH_LOCAL, ilSession\get(), and ilUtil\setCookie().

Referenced by exitLti().

391  : void
392  {
393  if ($force_ilias_logout) {
394  $this->log->warning("forcing logout ilias session, maybe a broken LTI context");
395  } else {
396  if (is_array(ilSession::get('lti_context_ids')) && count(ilSession::get('lti_context_ids')) > 0) {
397  $this->log->debug("there is another valid consumer session: ilias session logout refused.");
398  return;
399  }
400  }
401  $this->log->info("logout");
402  $this->dic->user()->setAuthMode((string) ilAuthUtils::AUTH_LOCAL);
403  //ilSession::setClosingContext(ilSession::SESSION_CLOSE_USER); // needed?
404  $auth = $this->dic['ilAuthSession'];
405  //$auth->logout(); // needed?
406  // $auth->setExpired($auth::SESSION_AUTH_EXPIRED, ilAuthStatus::STATUS_UNDEFINED);
407  $auth->setExpired(true);
408  session_destroy();
409  ilUtil::setCookie("ilClientId", "");
410  ilUtil::setCookie("PHPSESSID", "");
411  }
static get(string $a_var)
static setCookie(string $a_cookie_name, string $a_cookie_value='', bool $a_also_set_super_global=true, bool $a_set_cookie_invalid=false)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ removeContextFromSession()

ilLTIViewGUI::removeContextFromSession ( string  $context_id)
private

Definition at line 445 of file class.ilLTIViewGUI.php.

References ilSession\get(), and ilSession\set().

Referenced by exitLti().

445  : void
446  {
447  $lti_context_ids = ilSession::get('lti_context_ids');
448  if (is_array($lti_context_ids) && in_array($context_id, $lti_context_ids)) {
449  array_splice($lti_context_ids, array_search($context_id, $lti_context_ids), 1);
450  ilSession::set('lti_context_ids', $lti_context_ids);
451  }
452  }
static get(string $a_var)
static set(string $a_var, $a_val)
Set a value.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $dic

ILIAS DI Container ilLTIViewGUI::$dic = null
private

private variables

Definition at line 42 of file class.ilLTIViewGUI.php.

◆ $effectiveRefId

int ilLTIViewGUI::$effectiveRefId = null
private

Definition at line 47 of file class.ilLTIViewGUI.php.

Referenced by getContextId().

◆ $kindlyTo

ILIAS Refinery KindlyTo Group ilLTIViewGUI::$kindlyTo
private

Definition at line 49 of file class.ilLTIViewGUI.php.

◆ $link_dir

string ilLTIViewGUI::$link_dir = ""
private

Definition at line 45 of file class.ilLTIViewGUI.php.

◆ $lng

ilLanguage ilLTIViewGUI::$lng = null

public variables

Definition at line 55 of file class.ilLTIViewGUI.php.

◆ $locator

ilLocatorGUI ilLTIViewGUI::$locator
private

Definition at line 50 of file class.ilLTIViewGUI.php.

◆ $log

ilLogger ilLTIViewGUI::$log = null
private

Definition at line 44 of file class.ilLTIViewGUI.php.

◆ $user

int ilLTIViewGUI::$user = null
private

Definition at line 43 of file class.ilLTIViewGUI.php.

◆ $wrapper

ILIAS HTTP Wrapper WrapperFactory ilLTIViewGUI::$wrapper
private

Definition at line 48 of file class.ilLTIViewGUI.php.

◆ CHECK_HTTP_REFERER

const ilLTIViewGUI::CHECK_HTTP_REFERER = true

contstants

Definition at line 37 of file class.ilLTIViewGUI.php.

Referenced by getContextId().


The documentation for this class was generated from the following file: