aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFinn Schneider <schneider@data-quest.de>2026-03-13 15:49:49 +0100
committerFinn Schneider <schneider@data-quest.de>2026-03-13 17:25:01 +0000
commit7ae0067047d49c67678050f690a926ef998952e4 (patch)
treec644623ff62c6151aa5330f7d6ccef2d5104a25d
parentf2a3e8a740cebc90eefba4af265358a0e5b6377a (diff)
prevent profile edit after eval start
-rw-r--r--app/views/evaluation/pool/index.php20
-rw-r--r--app/views/evaluation/profiles/index.php20
-rw-r--r--lib/models/Questionnaire.php5
-rw-r--r--lib/models/QuestionnaireEvalCentralProfile.php9
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;
+ }
}