diff options
| author | Finn Schneider <schneider@data-quest.de> | 2026-03-13 15:49:49 +0100 |
|---|---|---|
| committer | Finn Schneider <schneider@data-quest.de> | 2026-03-13 17:25:01 +0000 |
| commit | 7ae0067047d49c67678050f690a926ef998952e4 (patch) | |
| tree | c644623ff62c6151aa5330f7d6ccef2d5104a25d | |
| parent | f2a3e8a740cebc90eefba4af265358a0e5b6377a (diff) | |
prevent profile edit after eval start
| -rw-r--r-- | app/views/evaluation/pool/index.php | 20 | ||||
| -rw-r--r-- | app/views/evaluation/profiles/index.php | 20 | ||||
| -rw-r--r-- | lib/models/Questionnaire.php | 5 | ||||
| -rw-r--r-- | lib/models/QuestionnaireEvalCentralProfile.php | 9 |
4 files changed, 39 insertions, 15 deletions
diff --git a/app/views/evaluation/pool/index.php b/app/views/evaluation/pool/index.php index 6eb2e7d..3b96578 100644 --- a/app/views/evaluation/pool/index.php +++ b/app/views/evaluation/pool/index.php @@ -31,17 +31,22 @@ use Studip\Button; <td> <input type="checkbox" name="q[]" value="<?= htmlReady($template->id) ?>"> </td> - <td> - <?php if ($template->isEditable()) : ?> + <?php if ($template->isEditable()) : ?> + <td> <a href="<?= $controller->link_for('questionnaire/edit/' . $template->id, ['range_type' => 'pool']) ?>" data-dialog="size=big"> <?= htmlReady($template->title) ?> </a> - <?php else : ?> + </td> + <?php else : ?> + <td title="<?= sprintf( + _('Mindestens eine Evaluation der Vorlage %s ist gestartet. Sie kann nicht mehr bearbeitet werden.'), + $template->title) + ?>"> <?= htmlReady($template->title) ?> - <?php endif ?> - </td> + </td> + <?php endif ?> <td data-text="<?= (int) $template->chdate ?>"> <?= date('d.m.Y H:i', $template->chdate) ?> </td> @@ -51,8 +56,9 @@ use Studip\Button; <td class="actions"> <? if (!$template->isEditable()) : ?> <?= Icon::create('edit', Icon::ROLE_INACTIVE)->asSvg( - ['title' => _('Mindestens eine Evaluation dieser Vorlage ist gestartet. - Sie kann nicht mehr bearbeitet werden.')] + ['title' => sprintf( + _('Mindestens eine Evaluation der Vorlage %s ist gestartet. Sie kann nicht mehr bearbeitet werden.'), + $template->title)] ) ?> <? else : ?> <a href="<?= $controller->link_for('questionnaire/edit/' . $template->id) ?>" diff --git a/app/views/evaluation/profiles/index.php b/app/views/evaluation/profiles/index.php index 8b4517e..8f7ec86 100644 --- a/app/views/evaluation/profiles/index.php +++ b/app/views/evaluation/profiles/index.php @@ -37,12 +37,22 @@ use Studip\Button; <td> <input type="checkbox" name="profiles[]" value="<?= htmlReady($profile->semester_id) ?>"> </td> - <td data-text="<?= $profile->semester->beginn ?>"> - <a href="<?= $controller->link_for("evaluation/profiles/edit/" . $profile->semester_id) ?>" - data-dialog> + <?php if ($profile->isEditable()) : ?> + <td data-text="<?= $profile->semester->beginn ?>"> + <a href="<?= $controller->link_for("evaluation/profiles/edit/" . $profile->semester_id) ?>" + data-dialog> + <?= htmlReady($profile->semester->name) ?> + </a> + </td> + <?php else : ?> + <td data-text="<?= $profile->semester->beginn ?>" + title="<?= sprintf( + _('Mindestens eine Evaluation des Profils %s ist gestartet. Es kann nicht mehr bearbeitet werden.'), + $profile->semester->name) + ?>"> <?= htmlReady($profile->semester->name) ?> - </a> - </td> + </td> + <?php endif ?> <td><?= htmlReady($profile->template->title) ?></td> <td> <?php foreach (Questionnaire::findMany(explode(',', $profile->optional_templates)) as $opt_template) : ?> diff --git a/lib/models/Questionnaire.php b/lib/models/Questionnaire.php index 62f7b82..a3609c2 100644 --- a/lib/models/Questionnaire.php +++ b/lib/models/Questionnaire.php @@ -170,9 +170,8 @@ class Questionnaire extends SimpleORMap implements PrivacyObject { if($this->is_template) { if(EvaluationHelper::isPermittedEvaluationAccess()) { - return !count(QuestionnaireEvalAssignment::findBySQL(" - `startdate` <= UNIX_TIMESTAMP() AND `template_id` = ? - ", [$this->id])); + return !QuestionnaireEvalAssignment::countBySQL( + "`startdate` <= UNIX_TIMESTAMP() AND `template_id` = ?", [$this->id]); } return false; } diff --git a/lib/models/QuestionnaireEvalCentralProfile.php b/lib/models/QuestionnaireEvalCentralProfile.php index c44ad79..f3eef52 100644 --- a/lib/models/QuestionnaireEvalCentralProfile.php +++ b/lib/models/QuestionnaireEvalCentralProfile.php @@ -46,4 +46,13 @@ class QuestionnaireEvalCentralProfile extends SimpleORMap $is_for ? self::RESULT_VISIBLE_FOR_OPTIONS : self::RESULT_VISIBILITY_OPTIONS ); } + + public function isEditable() + { + if(EvaluationHelper::isPermittedEvaluationAccess()) { + return !QuestionnaireEvalAssignment::countBySQL( + "`startdate` <= UNIX_TIMESTAMP() AND `semester_id` = ?", [$this->semester_id]); + } + return false; + } } |
