59        $this->log = $this->dic->logger()->lti();
 
   60        $this->lng = $this->dic->language();
 
   61        $this->lng->loadLanguageModule(
'lti');
 
   69        $this->link_dir = (defined(
"ILIAS_MODULE")) ? 
"../" : 
"";
 
   72                        $context = $this->dic->globalScreen()->tool()->context();
 
   93        if (!$this->dic->user() instanceof 
ilObjUser) {
 
   96        return (strpos($this->dic->user()->getAuthMode(), 
'lti_') === 0);
 
  102        $cmd = $ilCtrl->getCmd();
 
  117        $this->log->debug(
"initGUI");
 
  118        $baseclass = strtolower(
$_GET[
'baseClass']);
 
  119        $cmdclass = strtolower(
$_GET[
'cmdClass']);
 
  122                        case 'illtiroutergui' :
 
  132        if (isset(
$_GET[
'lti_context_id']) && 
$_GET[
'lti_context_id'] !== 
'') {
 
  133            $this->log->debug(
"find context_id by GET param: " . 
$_GET[
'lti_context_id']);
 
  134                        return $_GET[
'lti_context_id'];
 
  138        $this->log->debug(
"Effective ref_id: ". $ref_id);
 
  140        if (isset(
$_SESSION[
'lti_' . $ref_id . 
'_post_data'])) {
 
  141            $this->log->debug(
"lti context session exists for " . $ref_id);
 
  146        $this->log->debug(
"ref_id not exists as context_id, walking tree backwards to find a valid context_id");
 
  147        $locator_items = $ilLocator->getItems();
 
  148                if (is_array($locator_items) && count($locator_items) > 0) {
 
  149            for (
$i = count($locator_items)-1;
$i>=0;
$i--) {
 
  150                if (isset(
$_SESSION[
'lti_' . $locator_items[
$i][
'ref_id'] . 
'_post_data'])) {
 
  151                    $this->log->debug(
"found valid ref_id in locator: " . $locator_items[
$i][
'ref_id']);
 
  152                    return $locator_items[
$i][
'ref_id'];
 
  156        $this->log->warning(
"no valid context_id found for ref_id request: " . $ref_id);
 
  165            if (isset(
$_SERVER[
'HTTP_REFERER'])) {
 
  169                if (isset(
$_SESSION[
'referer_ref_id'])) {
 
  174            if ($referer != 
'') {
 
  175                if (isset(
$_SESSION[
'lti_' . $referer . 
'_post_data'])) {
 
  177                    $context_id = $referer;
 
  179                    $this->log->debug(
"referer obj_type: " . $obj_type);
 
  182                    $this->log->debug(
"search tree of referer...");
 
  183                    if ($this->dic->repositoryTree()->isInTree($referer)) {
 
  184                        $path = $this->dic->repositoryTree()->getPathId($referer);
 
  185                        for (
$i = count($path)-1;
$i>=0;
$i--) {
 
  186                            if (isset(
$_SESSION[
'lti_' . $path[
$i] . 
'_post_data'])) {
 
  189                                $context_id = $path[
$i];
 
  197            if ($ref_id != 
'' && $obj_type != 
'') {
 
  198                if ((isset(
$_GET[
'baseClass']) && 
$_GET[
'baseClass'] === 
'ilDashboardGUI')
 
  199                    && (isset(
$_GET[
'cmdClass']) && 
$_GET[
'cmdClass'] === 
'ilpersonalprofilegui')) {
 
  203                $redirect = $this->link_dir.
"goto.php?target=".$obj_type.
"_".$ref_id.
"<i_context_id=".$context_id;
 
  204                $this->log->debug(
"redirect: " . $redirect);
 
  208        $lti_context_ids = 
$_SESSION[
'lti_context_ids'];
 
  209        if (is_array($lti_context_ids) && count($lti_context_ids) > 0) {
 
  210            if (count($lti_context_ids) == 1) {
 
  211                $this->log->debug(
"using context_id from only LTI session");
 
  212                return $lti_context_ids[0];
 
  215                $this->log->warning(
"Multiple LTI sessions exists. The context_id can not be clearly detected");
 
  223        if ($context_id == 
'') {
 
  224            $this->log->warning(
"could not find any valid context_id!");
 
  228                if (!is_array($post_data)) {
 
  229                        $this->log->warning(
"no session post_data: " . 
"lti_" . $this->
getContextId() . 
"_post_data");
 
  237                if ($post_data !== 
null) {
 
  238                        return (isset($post_data[
'launch_presentation_css_url'])) ? $post_data[
'launch_presentation_css_url'] : 
'';
 
  246                if ($post_data !== 
null) {
 
  247                        return (isset($post_data[
'resource_link_title'])) ? 
"LTI - " . $post_data[
'resource_link_title'] : 
"LTI";
 
  254        return $this->lng->txt(
'lti_exited');
 
  259        return $this->lng->txt(
'lti_mode');
 
  268        $this->dic->logger()->lti()->info(
"exitLTI");
 
  269        $force_ilias_logout = 
false;
 
  271        if ($context_id == 
'') {
 
  272            $this->log->warning(
"could not find any valid context_id!");
 
  273            $force_ilias_logout = 
true;
 
  276                $return_url = ($post_data !== 
null) ? $post_data[
'launch_presentation_return_url'] : 
'';
 
  279                if (isset(
$_SESSION[
'lti_' . $context_id . 
'_post_data'])) {
 
  280                        unset(
$_SESSION[
'lti_' . $context_id . 
'_post_data']);
 
  281                        $this->dic->logger()->lti()->debug(
'unset SESSION["' . 
'lti_' . $context_id . 
'_post_data"]');
 
  283                if (!isset($return_url) || $return_url === 
'') {
 
  284            $cc = $this->dic->globalScreen()->tool()->context()->current();
 
  285            $cc->addAdditionalData(LtiViewLayoutProvider::GS_EXIT_LTI, 
true);
 
  286            $ui_factory = $this->dic->ui()->factory();
 
  287            $renderer = $this->dic->ui()->renderer();
 
  289                $ui_factory->messageBox()->info($this->lng->txt(
'lti_exited_info'))
 
  291            $tpl = $this->dic[
"tpl"];
 
  292            $tpl->setContent($renderer->render($content));
 
  293            $this->
logout($force_ilias_logout);
 
  294            $tpl->printToStdout();
 
  296                        $this->
logout($force_ilias_logout);
 
  297                        header(
'Location: ' . $return_url);
 
  304    public function logout($force_ilias_logout=
false)
 
  306        if ($force_ilias_logout) {
 
  307            $this->log->warning(
"forcing logout ilias session, maybe a broken LTI context");
 
  310            if (is_array(
$_SESSION[
'lti_context_ids']) && count(
$_SESSION[
'lti_context_ids']) > 0) {
 
  311                            $this->log->debug(
"there is another valid consumer session: ilias session logout refused.");
 
  315        $this->dic->logger()->lti()->info(
"logout");
 
  331                $lti_context_id_param = ($lti_context_id  != 
'') ? 
"<i_context_id=".$lti_context_id : 
'';
 
  332        $targetScript = ($ilCtrl->getTargetScript() !== 
'ilias.php') ? 
"ilias.php" : 
"";
 
  333                return $this->link_dir.$targetScript.$ilCtrl->getLinkTargetByClass(array(
'illtiroutergui',strtolower(get_class($this))),$cmd).
"&baseClass=illtiroutergui".$lti_context_id_param;
 
  356                $lti_context_ids = 
$_SESSION[
'lti_context_ids'];
 
  357                if (is_array($lti_context_ids) && in_array($context_id,$lti_context_ids)) {
 
  358                        array_splice($lti_context_ids,array_search($context_id,$lti_context_ids),1);
 
  359                        $_SESSION[
'lti_context_ids'] = $lti_context_ids;
 
  372            parse_str(parse_url(
$url, PHP_URL_QUERY),
$query);
 
  374        if ((
int) 
$query[
'ref_id']) {
 
  375            return (
int) 
$query[
'ref_id'];
 
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
An exception for terminatinating execution or to throw for unit testing.
Class LtiViewLayoutProvider.
@classDescription class for ILIAS ViewLTI
getCookieValue(String $cookie_key)
findEffectiveRefId($url=null)
Find effective ref_id for request.
getSessionValue(String $sess_key)
isLTIUser()
get LTI Mode from Users->getAuthMode
init()
Init LTI mode for lti authenticated users.
static getInstance()
for compatiblity with ilLTIRouterGUI
exitLti()
exit LTI session and if defined redirecting to returnUrl ToDo: Standard Template with delos ....
logout($force_ilias_logout=false)
logout ILIAS and destroys Session and ilClientId cookie if no consumer is still open in the LTI User ...
const CHECK_HTTP_REFERER
contstants
removeContextFromSession($context_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
static setCookie($a_cookie_name, $a_cookie_value='', $a_also_set_super_global=true, $a_set_cookie_invalid=false)
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl