aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Fuhse <fuhse@data-quest.de>2026-03-10 16:03:05 +0000
committerRasmus Fuhse <fuhse@data-quest.de>2026-03-10 16:03:05 +0000
commitda00355b8532c46c2c29199b8dbff4c9adfe54f9 (patch)
tree2503f1c3b4b5b00e1f885009f89b90b383b7abc9
parent61cf8f8dedc691ba092a21bda3e1e539cb638793 (diff)
Resolve "Art des Termins wird überschrieben bei Stapelverarbeitung von Terminen"
Closes #6340 Merge request studip/studip!4805 (cherry picked from commit 46a45e6ef5d8700e93b3a37dc9ee0e829711fa85) abbbe1cb Re# issue-6340 f78be50c If all appointments have the same date_type, it's now shown correctly as the... 02827ba2 moved some code from view to controler db4049d1 applied suggested changes 7efd1a92 Apply 1 suggestion(s) to 1 file(s) Co-authored-by: Rasmus Fuhse <fuhse@data-quest.de>
-rw-r--r--app/controllers/course/timesrooms.php32
-rw-r--r--app/views/course/timesrooms/createCycle.php8
2 files changed, 25 insertions, 15 deletions
diff --git a/app/controllers/course/timesrooms.php b/app/controllers/course/timesrooms.php
index e68de9f..333502e 100644
--- a/app/controllers/course/timesrooms.php
+++ b/app/controllers/course/timesrooms.php
@@ -1245,6 +1245,7 @@ class Course_TimesroomsController extends AuthenticatedController
$this->end_semester_weeks['ende'][] = ['value' => -1, 'label' => _('Alle Semester')];
}
}
+ $this->types = $this->cycle->dates->pluck('date_typ');;
}
/**
@@ -1335,14 +1336,14 @@ class Course_TimesroomsController extends AuthenticatedController
{
$cycle = SeminarCycleDate::find($cycle_id);
$start = strtotime(Request::get('start_time'));
- $end = strtotime(Request::get('end_time'));
+ $end = strtotime(Request::get('end_time'));
// Prepare Request for saving Request
if ($start === false || $end === false || $start > $end) {
PageLayout::postError(_('Die Zeitangaben sind nicht korrekt. Bitte überprüfen Sie diese!'));
} else {
- $cycle->start_time = date('H:i:00', $start);
- $cycle->end_time = date('H:i:00', $end);
+ $cycle->start_time = date('H:i:00', $start);
+ $cycle->end_time = date('H:i:00', $end);
}
//Check the duration:
@@ -1361,42 +1362,45 @@ class Course_TimesroomsController extends AuthenticatedController
return;
}
- $cycle->weekday = Request::int('day');
+ $cycle->weekday = Request::int('day');
$cycle->description = Request::get('description');
- $cycle->sws = Request::get('teacher_sws');
- $cycle->cycle = Request::get('cycle');
+ $cycle->sws = Request::get('teacher_sws');
+ $cycle->cycle = Request::get('cycle');
$cycle->week_offset = Request::int('startWeek');
- $cycle->end_offset = Request::int('endWeek');
+ $cycle->end_offset = Request::int('endWeek');
if ($cycle->end_offset == -1) {
$cycle->end_offset = NULL;
}
$changed_dates = 0;
- if (Request::int('course_type')) {
+
+ if (Request::get('course_type') && Request::get('course_type') !== 'default') {
$changed_dates = $cycle->setSingleDateType(Request::int('course_type'));
+ } elseif ($cycle->isDirty()) {
+ $changed_dates = count($cycle->dates);
}
if ($changed_dates > 0 || $cycle->isDirty()) {
+
$cycle->chdate = time();
$cycle->store();
- if ($changed_dates > 0) {
+ if ($changed_dates > 0 && Request::get('course_type') !== 'default') {
PageLayout::postSuccess(sprintf(ngettext(
- _('Die Art des Termins wurde bei 1 Termin geändert'),
- _('Die Art des Termins wurde bei %u Terminen geändert'),
- $changed_dates
- ), $changed_dates));
+ _('Die Art des Termins wurde bei 1 Termin geändert'),
+ _('Die Art des Termins wurde bei %u Terminen geändert'),
+ $changed_dates), $changed_dates));
} else {
PageLayout::postSuccess(_('Änderungen gespeichert!'));
}
} else {
PageLayout::postInfo(_('Es wurden keine Änderungen vorgenommen'));
}
-
$this->relocate('course/timesrooms/index');
}
+
/**
* Deletes a cycle
*
diff --git a/app/views/course/timesrooms/createCycle.php b/app/views/course/timesrooms/createCycle.php
index c226ab1..2ba98c7 100644
--- a/app/views/course/timesrooms/createCycle.php
+++ b/app/views/course/timesrooms/createCycle.php
@@ -40,8 +40,14 @@
<label>
<?= _('Art') ?>
<select name="course_type" id="course_type" class="size-s">
+ <? if (!$cycle->isNew() && count(array_unique($types)) !== 1) : ?>
+ <!-- Use default as placeholder to avoid accidentally overwrite of modified course_type -->
+ <option value="default" selected>-</option>
+ <? endif ?>
<? foreach ($GLOBALS['TERMIN_TYP'] as $id => $value) : ?>
- <option value="<?= $id ?>" <? if(Request::get('course_type') && Request::get('course_type') == $id) :?>selected="selected"<? endif?>><?= htmlReady($value['name']) ?></option>
+ <option value="<?= htmlReady($id) ?>" <? if(count(array_unique($types)) === 1 && $types[0] == $id) echo 'selected'; ?>>
+ <?= htmlReady($value['name']) ?>
+ </option>
<? endforeach ?>
</select>
</label>