diff --git a/app/controllers/settings/notification.php b/app/controllers/settings/notification.php index 6e517dd0f0f4fdbe1608c915afa2ac4a825f02d7..e3efb7b883d0aad7dbfa55192cdaf3bdc8618b80 100644 --- a/app/controllers/settings/notification.php +++ b/app/controllers/settings/notification.php @@ -89,8 +89,8 @@ class Settings_NotificationController extends Settings_SettingsController 'visible' => $seminar['visible'], 'gruppe' => $su->gruppe, 'sem_status' => $seminar->status, - 'sem_number' => Semester::getIndexById($seminar->start_semester->id, true, true), - 'sem_number_end' => Semester::getIndexById($seminar->end_semester->id ?? '', true, true) ?: '-1', + 'sem_number' => Semester::getIndexById($seminar->start_semester->id), + 'sem_number_end' => Semester::getIndexById($seminar->end_semester->id ?? '') ?: '-1', ]; if ($group_field) { fill_groups($groups, Semester::getIndexById($seminar->start_semester->id), [ diff --git a/lib/classes/MyRealmModel.php b/lib/classes/MyRealmModel.php index 2bd65fc9d75e0a78f896874362a14ddc76b9fe26..54252881a1d4ebda39d30d5440148f538be67eb3 100644 --- a/lib/classes/MyRealmModel.php +++ b/lib/classes/MyRealmModel.php @@ -316,8 +316,8 @@ class MyRealmModel $_course['visitdate'] = $visits[$course->id][0]['visitdate']; $_course['user_status'] = $user_status; $_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'] = Semester::getIndexById($course->start_semester->id ?? null, 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); $_course['tools'] = $course->tools; $_course['name'] = $course->name; $_course['temp_name'] = $course->name; diff --git a/lib/meine_seminare_func.inc.php b/lib/meine_seminare_func.inc.php index 9bd2304ba4df43848c42cf40101237d057e0526e..5313f8de6f406530cdeb46c7fbaf0273b07f3b55 100644 --- a/lib/meine_seminare_func.inc.php +++ b/lib/meine_seminare_func.inc.php @@ -139,38 +139,59 @@ function sort_groups($group_field, &$groups) */ function correct_group_sem_number(&$groups, &$my_obj): bool { - if (is_array($groups) && is_array($my_obj)) { - $sem_data = Semester::findAllVisible(); - foreach ($sem_data as $sem_key => $one_sem){ - $current_sem = $sem_key; - if (!$one_sem['past']) { - break; + if (!is_array($groups) || !is_array($my_obj)) { + return false; + } + + $current_semester = Semester::findCurrent(); + + $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){ - if ($values['obj_type'] == 'sem' && $values['sem_number'] != $values['sem_number_end']){ - if ($values['sem_number_end'] == -1 && $values['sem_number'] < $current_sem) { - unset($groups[$values['sem_number']][$seminar_id]); - fill_groups($groups, $current_sem, ['seminar_id' => $seminar_id, 'name' => $values['name'], 'gruppe' => $values['gruppe']]); - if (!count($groups[$values['sem_number']])) { - unset($groups[$values['sem_number']]); - } - } else { - $to_sem = $values['sem_number_end']; - for ($i = $values['sem_number']; $i <= $to_sem; ++$i){ - fill_groups($groups, $i, ['seminar_id' => $seminar_id, 'name' => $values['name'], 'gruppe' => $values['gruppe']]); - } + + $obj_data = $my_obj[$course->id]; + + if ( + $course->isOpenEnded() + && $course->start_semester->beginn < $current_semester->beginn + ) { + unset($groups[$obj_data['sem_number']][$course->id]); + + fill_groups($groups, Semester::getIndexById($current_semester->id), [ + 'seminar_id' => $course->id, + 'name' => $obj_data['name'], + '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')){ - $sem_name = " (" . $sem_data[$values['sem_number']]['name'] . " - "; - $sem_name .= (($values['sem_number_end'] == -1) ? _("unbegrenzt") : $sem_data[$values['sem_number_end']]['name']) . ")"; - $my_obj[$seminar_id]['name'] .= $sem_name; + } else { + $to_sem = $obj_data['sem_number_end']; + for ($i = $obj_data['sem_number']; $i <= $to_sem; ++$i){ + fill_groups($groups, $i, [ + 'seminar_id' => $course->id, + 'name' => $obj_data['name'], + 'gruppe' => $obj_data['gruppe'] + ]); } } - } - return true; - } - return false; + + if (User::findCurrent()->getConfiguration()->getValue('SHOWSEM_ENABLE')) { + $my_obj[$course->id]['name'] .= ' (' . $course->getTextualSemester() . ')'; + } + }, + array_keys($my_sem) + ); + + return true; } /** diff --git a/lib/models/Course.php b/lib/models/Course.php index bf5b7385ec2b29acbd517413bf8da18871094e1e..f07440ccb8539058a696a0e9dadabfc9af270580 100644 --- a/lib/models/Course.php +++ b/lib/models/Course.php @@ -71,8 +71,8 @@ * @property SimpleORMapCollection|Institute[] $institutes has_and_belongs_to_many Institute * @property SimpleORMapCollection|UserDomain[] $domains has_and_belongs_to_many UserDomain * @property-read mixed $teachers additional field - * @property mixed $start_semester additional field - * @property mixed $end_semester additional field + * @property Semester $start_semester additional field + * @property Semester|null $end_semester additional field * @property-read mixed $semester_text additional field * @property-read mixed $config additional field */ diff --git a/lib/models/Semester.php b/lib/models/Semester.php index 371ea24b795a5860ddd23a554fbd2496937bf5d5..51ee4a6c93a7feec48a31d69e4b5014f9e71ee49 100644 --- a/lib/models/Semester.php +++ b/lib/models/Semester.php @@ -144,6 +144,7 @@ class Semester extends SimpleORMap /** * returns current Semester + * @return static */ public static function findCurrent() {