Skip to content
Snippets Groups Projects
Commit 6b4b5b6d authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms
Browse files

restore missing courses by implementing old logic in a new, more fail safe way, fixes #4987

Closes #4987

Merge request studip/studip!3745
parent bcf369f7
No related branches found
No related tags found
No related merge requests found
...@@ -89,8 +89,8 @@ class Settings_NotificationController extends Settings_SettingsController ...@@ -89,8 +89,8 @@ class Settings_NotificationController extends Settings_SettingsController
'visible' => $seminar['visible'], 'visible' => $seminar['visible'],
'gruppe' => $su->gruppe, 'gruppe' => $su->gruppe,
'sem_status' => $seminar->status, 'sem_status' => $seminar->status,
'sem_number' => Semester::getIndexById($seminar->start_semester->id, true, true), 'sem_number' => Semester::getIndexById($seminar->start_semester->id),
'sem_number_end' => Semester::getIndexById($seminar->end_semester->id ?? '', true, true) ?: '-1', 'sem_number_end' => Semester::getIndexById($seminar->end_semester->id ?? '') ?: '-1',
]; ];
if ($group_field) { if ($group_field) {
fill_groups($groups, Semester::getIndexById($seminar->start_semester->id), [ fill_groups($groups, Semester::getIndexById($seminar->start_semester->id), [
......
...@@ -316,8 +316,8 @@ class MyRealmModel ...@@ -316,8 +316,8 @@ class MyRealmModel
$_course['visitdate'] = $visits[$course->id][0]['visitdate']; $_course['visitdate'] = $visits[$course->id][0]['visitdate'];
$_course['user_status'] = $user_status; $_course['user_status'] = $user_status;
$_course['gruppe'] = !$is_deputy ? $member_ships[$course->id]['gruppe'] ?? null : ($deputy ? $deputy->gruppe : null); $_course['gruppe'] = !$is_deputy ? $member_ships[$course->id]['gruppe'] ?? null : ($deputy ? $deputy->gruppe : null);
$_course['sem_number_end'] = $course->isOpenEnded() ? $max_sem_key : Semester::getIndexById($course->end_semester->id, true, true); $_course['sem_number_end'] = $course->isOpenEnded() ? $max_sem_key : Semester::getIndexById($course->end_semester->id);
$_course['sem_number'] = Semester::getIndexById($course->start_semester->id ?? null, true, true); $_course['sem_number'] = Semester::getIndexById($course->start_semester->id ?? null);
$_course['tools'] = $course->tools; $_course['tools'] = $course->tools;
$_course['name'] = $course->name; $_course['name'] = $course->name;
$_course['temp_name'] = $course->name; $_course['temp_name'] = $course->name;
......
...@@ -139,38 +139,59 @@ function sort_groups($group_field, &$groups) ...@@ -139,38 +139,59 @@ function sort_groups($group_field, &$groups)
*/ */
function correct_group_sem_number(&$groups, &$my_obj): bool function correct_group_sem_number(&$groups, &$my_obj): bool
{ {
if (is_array($groups) && is_array($my_obj)) { if (!is_array($groups) || !is_array($my_obj)) {
$sem_data = Semester::findAllVisible(); return false;
foreach ($sem_data as $sem_key => $one_sem){ }
$current_sem = $sem_key;
if (!$one_sem['past']) { $current_semester = Semester::findCurrent();
break;
$my_sem = array_filter(
$my_obj,
fn($values) => $values['obj_type'] === 'sem'
);
Course::findEachMany(
function (Course $course) use (&$groups, &$my_obj, $current_semester) {
if (count($course->semesters) === 1) {
return;
} }
}
foreach ($my_obj as $seminar_id => $values){ $obj_data = $my_obj[$course->id];
if ($values['obj_type'] == 'sem' && $values['sem_number'] != $values['sem_number_end']){
if ($values['sem_number_end'] == -1 && $values['sem_number'] < $current_sem) { if (
unset($groups[$values['sem_number']][$seminar_id]); $course->isOpenEnded()
fill_groups($groups, $current_sem, ['seminar_id' => $seminar_id, 'name' => $values['name'], 'gruppe' => $values['gruppe']]); && $course->start_semester->beginn < $current_semester->beginn
if (!count($groups[$values['sem_number']])) { ) {
unset($groups[$values['sem_number']]); unset($groups[$obj_data['sem_number']][$course->id]);
}
} else { fill_groups($groups, Semester::getIndexById($current_semester->id), [
$to_sem = $values['sem_number_end']; 'seminar_id' => $course->id,
for ($i = $values['sem_number']; $i <= $to_sem; ++$i){ 'name' => $obj_data['name'],
fill_groups($groups, $i, ['seminar_id' => $seminar_id, 'name' => $values['name'], 'gruppe' => $values['gruppe']]); 'gruppe' => $obj_data['gruppe'],
} ]);
if (count($groups[$obj_data['sem_number']]) === 0) {
unset($groups[$obj_data['sem_number']]);
} }
if ($GLOBALS['user']->cfg->getValue('SHOWSEM_ENABLE')){ } else {
$sem_name = " (" . $sem_data[$values['sem_number']]['name'] . " - "; $to_sem = $obj_data['sem_number_end'];
$sem_name .= (($values['sem_number_end'] == -1) ? _("unbegrenzt") : $sem_data[$values['sem_number_end']]['name']) . ")"; for ($i = $obj_data['sem_number']; $i <= $to_sem; ++$i){
$my_obj[$seminar_id]['name'] .= $sem_name; fill_groups($groups, $i, [
'seminar_id' => $course->id,
'name' => $obj_data['name'],
'gruppe' => $obj_data['gruppe']
]);
} }
} }
}
return true; if (User::findCurrent()->getConfiguration()->getValue('SHOWSEM_ENABLE')) {
} $my_obj[$course->id]['name'] .= ' (' . $course->getTextualSemester() . ')';
return false; }
},
array_keys($my_sem)
);
return true;
} }
/** /**
......
...@@ -71,8 +71,8 @@ ...@@ -71,8 +71,8 @@
* @property SimpleORMapCollection|Institute[] $institutes has_and_belongs_to_many Institute * @property SimpleORMapCollection|Institute[] $institutes has_and_belongs_to_many Institute
* @property SimpleORMapCollection|UserDomain[] $domains has_and_belongs_to_many UserDomain * @property SimpleORMapCollection|UserDomain[] $domains has_and_belongs_to_many UserDomain
* @property-read mixed $teachers additional field * @property-read mixed $teachers additional field
* @property mixed $start_semester additional field * @property Semester $start_semester additional field
* @property mixed $end_semester additional field * @property Semester|null $end_semester additional field
* @property-read mixed $semester_text additional field * @property-read mixed $semester_text additional field
* @property-read mixed $config additional field * @property-read mixed $config additional field
*/ */
......
...@@ -144,6 +144,7 @@ class Semester extends SimpleORMap ...@@ -144,6 +144,7 @@ class Semester extends SimpleORMap
/** /**
* returns current Semester * returns current Semester
* @return static
*/ */
public static function findCurrent() public static function findCurrent()
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment