From 0d563b327f20b3eeee02b36b576ad3f3f0950214 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Mon, 6 Nov 2023 12:22:17 +0000
Subject: [PATCH] fixes #3168

Closes #3168

Merge request studip/studip!2331
---
 app/controllers/course/lti.php |  2 ++
 app/views/course/lti/edit.php  | 31 +++++++++++++++++++------------
 2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/app/controllers/course/lti.php b/app/controllers/course/lti.php
index 7ed8586cb27..28bf218b848 100644
--- a/app/controllers/course/lti.php
+++ b/app/controllers/course/lti.php
@@ -146,6 +146,8 @@ class Course_LtiController extends StudipController
      */
     public function edit_action($position = '')
     {
+        $this->lti_data = new LtiData();
+
         if ($position !== '') {
             $this->lti_data = LtiData::findByCourseAndPosition($this->course_id, $position);
         }
diff --git a/app/views/course/lti/edit.php b/app/views/course/lti/edit.php
index 4dc2b59f287..1812bf25397 100644
--- a/app/views/course/lti/edit.php
+++ b/app/views/course/lti/edit.php
@@ -1,4 +1,11 @@
-<form class="default" action="<?= $controller->link_for('course/lti/save', isset($lti_data) ? $lti_data->position : '') ?>" method="post">
+<?php
+/**
+ * @var Course_LtiController $controller
+ * @var LtiData $lti_data
+ * @var LtiTool[] $tools
+ */
+?>
+<form class="default" action="<?= $controller->link_for('course/lti/save', $lti_data->isNew() ? '' : $lti_data->position) ?>" method="post">
     <?= CSRFProtection::tokenTag() ?>
     <fieldset>
         <legend>
@@ -9,12 +16,12 @@
             <span class="required">
                 <?= _('Titel') ?>
             </span>
-            <input type="text" name="title" value="<?= htmlReady(isset($lti_data) ? $lti_data->title : '') ?>" required>
+            <input type="text" name="title" value="<?= htmlReady($lti_data->title) ?>" required>
         </label>
 
         <label>
             <?= _('Beschreibung') ?>
-            <textarea name="description" class="add_toolbar wysiwyg"><?= wysiwygReady(isset($lti_data) ? $lti_data->description : '') ?></textarea>
+            <textarea name="description" class="add_toolbar wysiwyg"><?= wysiwygReady($lti_data->description) ?></textarea>
         </label>
 
         <label>
@@ -27,7 +34,7 @@
                         <? endif ?>
                         <?= $lti_data->tool_id == $tool->id ? 'selected' : '' ?>><?= htmlReady($tool->name) ?></option>
                 <? endforeach ?>
-                <option value="0" <?= isset($lti_data) && $lti_data->tool_id == 0 ? 'selected' : '' ?>><?= _('Zugangsdaten selbst eingeben...') ?></option>
+                <option value="0" <?= !$lti_data->tool_id ? 'selected' : '' ?>><?= _('Zugangsdaten selbst eingeben...') ?></option>
             </select>
         </label>
 
@@ -35,7 +42,7 @@
             <label>
                 <?= _('URL der Anwendung (optional)') ?>
                 <?= tooltipIcon(_('Sie können direkt auf eine URL in der Anwendung verlinken.')) ?>
-                <input type="text" name="custom_url" value="<?= htmlReady(isset($lti_data) ? $lti_data->launch_url : '') ?>">
+                <input type="text" name="custom_url" value="<?= htmlReady($lti_data->launch_url) ?>">
             </label>
         </div>
 
@@ -43,36 +50,36 @@
             <label>
                 <?= _('URL der Anwendung') ?>
                 <?= tooltipIcon(_('Die Betreiber dieses Tools müssen Ihnen eine URL und Zugangsdaten (Consumer-Key und Consumer-Secret) mitteilen.')) ?>
-                <input type="text" name="launch_url" value="<?= htmlReady(isset($lti_data) ? $lti_data->launch_url : '') ?>">
+                <input type="text" name="launch_url" value="<?= htmlReady($lti_data->launch_url) ?>">
             </label>
 
             <label>
                 <?= _('Consumer-Key des LTI-Tools') ?>
-                <input type="text" name="consumer_key" value="<?= htmlReady(isset($lti_data) ? $lti_data->options['consumer_key'] : '') ?>">
+                <input type="text" name="consumer_key" value="<?= htmlReady($lti_data->options['consumer_key'] ?? '') ?>">
             </label>
 
             <label>
                 <?= _('Consumer-Secret des LTI-Tools') ?>
-                <input type="text" name="consumer_secret" value="<?= htmlReady(isset($lti_data) ? $lti_data->options['consumer_secret'] : '') ?>">
+                <input type="text" name="consumer_secret" value="<?= htmlReady($lti_data->options['consumer_secret'] ?? '') ?>">
             </label>
 
             <label>
                 <?= _('OAuth Signatur Methode des LTI-Tools') ?>
                 <select name="oauth_signature_method">
                     <option value="sha1">HMAC-SHA1</option>
-                    <option value="sha256" <?= isset($lti_data) && $lti_data->options['oauth_signature_method'] === 'sha256' ? 'selected' : '' ?>>HMAC-SHA256</option>
+                    <option value="sha256" <?= isset($lti_data->options['oauth_signature_method']) && $lti_data->options['oauth_signature_method'] === 'sha256' ? 'selected' : '' ?>>HMAC-SHA256</option>
                 </select>
             </label>
 
             <label>
-                <input type="checkbox" name="send_lis_person" value="1" <?= isset($lti_data) && $lti_data->options['send_lis_person'] ? ' checked' : '' ?>>
+                <input type="checkbox" name="send_lis_person" value="1" <?= !empty($lti_data->options['send_lis_person']) ? ' checked' : '' ?>>
                 <?= _('Nutzerdaten an LTI-Tool senden') ?>
                 <?= tooltipIcon(_('Nutzerdaten dürfen nur an das externe Tool gesendet werden, wenn es keine Datenschutzbedenken gibt. Mit Setzen des Hakens bestätigen Sie, dass die Übermittlung der Daten zulässig ist.')) ?>
             </label>
         </div>
 
         <label>
-            <input type="checkbox" name="document_target" value="iframe" <?= isset($lti_data) && $lti_data->options['document_target'] == 'iframe' ? ' checked' : '' ?>>
+            <input type="checkbox" name="document_target" value="iframe" <?= isset($lti_data->options['document_target']) && $lti_data->options['document_target'] === 'iframe' ? ' checked' : '' ?>>
             <?= _('Anzeige im IFRAME auf der Seite') ?>
             <?= tooltipIcon(_('Normalerweise wird das externe Tool in einem neuen Fenster angezeigt. Aktivieren Sie diese Option, wenn die Anzeige stattdessen in einem IFRAME erfolgen soll.')) ?>
         </label>
@@ -80,7 +87,7 @@
         <label>
             <?= _('Zusätzliche LTI-Parameter') ?>
             <?= tooltipIcon(_('Ein Wert pro Zeile, Beispiel: Review:Chapter=1.2.56')) ?>
-            <textarea name="custom_parameters"><?= htmlReady(isset($lti_data) && $lti_data->options['custom_parameters']) ?></textarea>
+            <textarea name="custom_parameters"><?= htmlReady($lti_data->options['custom_parameters'] ?? '') ?></textarea>
         </label>
     </fieldset>
 
-- 
GitLab