diff --git a/exercises/cloze_exercise.php b/exercises/cloze_exercise.php index 213a38146011f5c2533cc2fcc06c47750b40f545..27ca064fcdb0cd276932d1a2d465bba22c896c99 100644 --- a/exercises/cloze_exercise.php +++ b/exercises/cloze_exercise.php @@ -236,7 +236,7 @@ class cloze_exercise extends Exercise public function availableAnswers($solution) { $answers = []; - $response = $solution->response ?: []; + $response = !empty($solution->response) ? $solution->response : []; foreach ($this->task['answers'] as $answer) { foreach ($answer as $option) { diff --git a/exercises/lt_exercise.php b/exercises/lt_exercise.php index c658134fa94286f654705739ac223679ead486c2..a60b69a3bbe2fe95ebdad640d46e16abd321a916 100644 --- a/exercises/lt_exercise.php +++ b/exercises/lt_exercise.php @@ -81,36 +81,38 @@ class lt_exercise extends Exercise if ($musterLoesung === $studentSolution) { $similarity_temp = 1; - } else if ($this->task['compare'] === 'levenshtein') { // Levenshtein-Distanz - $string1 = mb_substr($studentSolution, 0, 255); - $string2 = mb_substr($musterLoesung, 0, 255); - $divisor = max(mb_strlen($string1), mb_strlen($string2)); - - $levenshtein = vips_levenshtein($string1, $string2) / $divisor; - $similarity_temp = 1 - $levenshtein; - } else if ($this->task['compare'] === 'soundex') { // Soundex-Aussprache - $levenshtein = levenshtein(soundex($musterLoesung), soundex($studentSolution)); - - if ($levenshtein == 0) { - $similarity_temp = 0.8; - } else if ($levenshtein == 1) { - $similarity_temp = 0.6; - } else if ($levenshtein == 2) { - $similarity_temp = 0.4; - } else if ($levenshtein == 3) { - $similarity_temp = 0.2; - } else {// $levenshtein == 4 - $similarity_temp = 0; - } - } else if ($this->task['compare'] === 'numeric') { - $correct = normalizeFloat($answer['text'], $correct_unit); - $student = normalizeFloat($response[0], $student_unit); - - if ($correct_unit === $student_unit) { - if (abs($correct - $student) <= abs($correct * $this->task['epsilon'])) { - $similarity_temp = 1; - } else { - $safe = true; + } else if (isset($this->task['compare'])) { + if ($this->task['compare'] === 'levenshtein') { // Levenshtein-Distanz + $string1 = mb_substr($studentSolution, 0, 255); + $string2 = mb_substr($musterLoesung, 0, 255); + $divisor = max(mb_strlen($string1), mb_strlen($string2)); + + $levenshtein = vips_levenshtein($string1, $string2) / $divisor; + $similarity_temp = 1 - $levenshtein; + } else if ($this->task['compare'] === 'soundex') { // Soundex-Aussprache + $levenshtein = levenshtein(soundex($musterLoesung), soundex($studentSolution)); + + if ($levenshtein == 0) { + $similarity_temp = 0.8; + } else if ($levenshtein == 1) { + $similarity_temp = 0.6; + } else if ($levenshtein == 2) { + $similarity_temp = 0.4; + } else if ($levenshtein == 3) { + $similarity_temp = 0.2; + } else {// $levenshtein == 4 + $similarity_temp = 0; + } + } else if ($this->task['compare'] === 'numeric') { + $correct = normalizeFloat($answer['text'], $correct_unit); + $student = normalizeFloat($response[0], $student_unit); + + if ($correct_unit === $student_unit) { + if (abs($correct - $student) <= abs($correct * $this->task['epsilon'])) { + $similarity_temp = 1; + } else { + $safe = true; + } } } } diff --git a/exercises/mc_exercise.php b/exercises/mc_exercise.php index c7ff99aa52005a7e948f764bb1eb84e8ce000236..d40c84d05e1bde1d6a060a63206ae641e940b50b 100644 --- a/exercises/mc_exercise.php +++ b/exercises/mc_exercise.php @@ -42,7 +42,7 @@ class mc_exercise extends Exercise if (trim($answer) != '') { $this->task['answers'][] = [ 'text' => trim($answer), - 'score' => (int) $request['correct'][$i] + 'score' => isset($request['correct'][$i]) ? (int) $request['correct'][$i] : 0 ]; } } diff --git a/exercises/tb_exercise.php b/exercises/tb_exercise.php index de245ffc75a3362231fbf4c32d7f4e1ea590519b..443f7f34eb3818891fa5f77b195fe5c84d87cc84 100644 --- a/exercises/tb_exercise.php +++ b/exercises/tb_exercise.php @@ -156,7 +156,7 @@ class tb_exercise extends Exercise public function getSolutionFromRequest($request, $files = null) { $solution = parent::getSolutionFromRequest($request, $files); - $upload = $files['upload'] ?: ['name' => []]; + $upload = isset($files['upload']) ? $files['upload'] : ['name' => []]; $uploads = []; $solution_files = []; diff --git a/views/exercises/cloze_exercise/solve.php b/views/exercises/cloze_exercise/solve.php index a2243d708e4a33257ee3d3a8ca127bf773c359c7..6f7ef239ab8b780ceb7ce1209c4cc5b7b0c9506a 100644 --- a/views/exercises/cloze_exercise/solve.php +++ b/views/exercises/cloze_exercise/solve.php @@ -16,14 +16,14 @@ <option value=""> </option> <? endif ?> <? foreach ($exercise->task['answers'][$blank] as $option): ?> - <option value="<?= htmlReady($option['text']) ?>" <?= trim($option['text']) === $response[$blank] ? ' selected' : '' ?>> + <option value="<?= htmlReady($option['text']) ?>" <?= isset($response[$blank]) && trim($option['text']) === $response[$blank] ? ' selected' : '' ?>> <?= htmlReady($option['text']) ?> </option> <? endforeach ?> </select><!-- <? else: ?> --><input type="text" class="character_input cloze_input" name="answer[<?= $blank ?>]" - style="width: <?= $exercise->getInputWidth($blank) ?>em;" value="<?= htmlReady($response[$blank]) ?>"><!-- + style="width: <?= $exercise->getInputWidth($blank) ?>em;" value="<?= htmlReady(isset($response[$blank]) ? $response[$blank] : '') ?>"><!-- <? endif ?> <? endif ?> <? endforeach ?> diff --git a/views/exercises/courseware_block.php b/views/exercises/courseware_block.php index 31534558cb4a88ddf82a46bd0630b647509cb513..fe518682dc2fcc6638d14c0a3952af3517056923 100644 --- a/views/exercises/courseware_block.php +++ b/views/exercises/courseware_block.php @@ -59,7 +59,7 @@ <? if (!empty($exercise->options['comment'])): ?> <label> <?= _vips('Bemerkungen zur Lösung (optional)') ?> - <textarea name="student_comment"><?= htmlReady($solution->student_comment) ?></textarea> + <textarea name="student_comment"><?= htmlReady(isset($solution->student_comment) ? $solution->student_comment : '') ?></textarea> </label> <? endif ?> <? endif ?> diff --git a/views/exercises/lt_exercise/solve.php b/views/exercises/lt_exercise/solve.php index 9d82fcf87807bafb1fe7ab8743479461a96a12cc..9959a71738374d382a44554b10a35cd8e7ad4c6e 100644 --- a/views/exercises/lt_exercise/solve.php +++ b/views/exercises/lt_exercise/solve.php @@ -1,4 +1,4 @@ <label> <?= _vips('Antwort') ?> - <input type="text" class="character_input" name="answer[0]" value="<?= htmlReady($response[0]) ?>"> + <input type="text" class="character_input" name="answer[0]" value="<?= htmlReady(isset($response[0]) ? $response[0] : '') ?>"> </label> diff --git a/views/exercises/tb_exercise/correct.php b/views/exercises/tb_exercise/correct.php index 644c2644e944740bb048915a151baa05ead4d763..181c556a072cecd995ef0d5a1c82e0e1400a7c40 100644 --- a/views/exercises/tb_exercise/correct.php +++ b/views/exercises/tb_exercise/correct.php @@ -21,7 +21,7 @@ </ul> <div id="commented-<?= $exercise->id ?>"> - <? if ($edit_solution): ?> + <? if (!empty($edit_solution)): ?> <? if ($exercise->getLayout() === 'markup'): ?> <? $answer = $response[0] ?> <? elseif ($exercise->getLayout() === 'code'): ?> @@ -66,7 +66,7 @@ <? endif ?> </div> - <? if ($edit_solution): ?> + <? if (!empty($edit_solution)): ?> <?= Studip\Button::create(_vips('Lösung bearbeiten'), 'edit_solution', ['class' => 'edit_solution']) ?> <? if ($exercise->getLayout() === 'code'): ?> diff --git a/views/exercises/tb_exercise/solve.php b/views/exercises/tb_exercise/solve.php index bdb807dc9b4468cc2061a690b3b22071f4813600..84c3b69050188643a1d9349e70c8f0530b9cd21a 100644 --- a/views/exercises/tb_exercise/solve.php +++ b/views/exercises/tb_exercise/solve.php @@ -1,5 +1,5 @@ <? if ($exercise->getLayout() !== 'none'): ?> - <? if ($exercise->task['template'] != ''): ?> + <? if (!empty($exercise->task['template'])): ?> <div class="vips_tabs"> <ul> <li> @@ -20,7 +20,7 @@ <? /* student answer */ ?> <div id="solution-<?= $exercise->id ?>"> - <? $answer = isset($response) ? $response[0] : $exercise->task['template'] ?> + <? $answer = isset($response) ? $response[0] : (isset($exercise->task['template']) ? $exercise->task['template'] : '') ?> <? if ($exercise->getLayout() === 'markup'): ?> <textarea name="answer[0]" class="character_input size-l wysiwyg" data-editor="removePlugins=studip-quote,studip-upload,ImageUpload" rows="20"><?= wysiwygReady($answer) ?></textarea> <? elseif ($exercise->getLayout() === 'code'): ?> @@ -35,7 +35,7 @@ <? endif ?> </div> - <? if ($exercise->task['template'] == ''): ?> + <? if (empty($exercise->task['template'])): ?> </label> <? else: ?> <? /* default answer */ ?>