diff options
| author | Peter Thienel <thienel@data-quest.de> | 2026-03-13 14:22:33 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2026-03-13 15:22:33 +0100 |
| commit | 5239fe23a8b6b3e266dc09fd25d8c805f60d78a3 (patch) | |
| tree | 8648e1e05775791bce7d165d6fff5703c4e1ab59 /app | |
| parent | 7c500597a37db933c9188d67bf8a9d4dbd13e0b7 (diff) | |
Resolve "MVV: Modul-Kurzdarstellung im VVZ"
Closes #6252
Merge request studip/studip!4745
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/course/details.php | 51 | ||||
| -rw-r--r-- | app/controllers/lvgruppen/lvgruppen.php | 4 | ||||
| -rw-r--r-- | app/controllers/search/module.php | 11 | ||||
| -rw-r--r-- | app/controllers/search/studiengaenge.php | 10 | ||||
| -rw-r--r-- | app/controllers/studiengaenge/shared_version.php | 3 | ||||
| -rw-r--r-- | app/controllers/studiengaenge/versionen.php | 1 | ||||
| -rw-r--r-- | app/views/course/details/index.php | 10 | ||||
| -rw-r--r-- | app/views/lvgruppen/lvgruppen/export_xls.php | 5 | ||||
| -rw-r--r-- | app/views/lvgruppen/lvgruppen/trails_table_lvgruppe.php | 5 | ||||
| -rw-r--r-- | app/views/search/studiengaenge/verlauf.php | 1 | ||||
| -rw-r--r-- | app/views/shared/modul/_modullvs.php | 2 | ||||
| -rw-r--r-- | app/views/shared/modul/description.php | 2 | ||||
| -rw-r--r-- | app/views/shared/modul/overview.php | 2 | ||||
| -rw-r--r-- | app/views/shared/mvv_tree.php | 6 |
14 files changed, 64 insertions, 49 deletions
diff --git a/app/controllers/course/details.php b/app/controllers/course/details.php index 969c34d..2d90e27 100644 --- a/app/controllers/course/details.php +++ b/app/controllers/course/details.php @@ -107,8 +107,8 @@ class Course_DetailsController extends AuthenticatedController if (!$GLOBALS['MVV_MODUL']['STATUS']['values'][$modul->stat]['public']) { return false; } - $modul_start = Semester::find($modul->start)->beginn ?: 0; - $modul_end = $modul->end ? Semester::find($modul->end)->ende : PHP_INT_MAX; + $modul_start = $modul->start_semester->beginn ?? 0; + $modul_end = $modul->end_semester->ende ?? PHP_INT_MAX; return ($modul_start <= $course_end && $modul_end >= $course_start); }); @@ -118,49 +118,56 @@ class Course_DetailsController extends AuthenticatedController }); $trail_classes = ['Modulteil', 'StgteilabschnittModul', 'StgteilAbschnitt', 'StgteilVersion']; - $mvv_object_pathes = MvvCourse::get($this->course->getId())->getTrails($trail_classes); - if ($mvv_object_pathes) { + $mvv_object_paths = MvvCourse::get($this->course->getId())->getTrails($trail_classes); + if ($mvv_object_paths) { if (Config::get()->COURSE_SEM_TREE_DISPLAY) { $this->mvv_tree = []; - foreach ($mvv_object_pathes as $mvv_object_path) { - // show only complete pathes - if (count($mvv_object_path) == 4) { - // flatten the pathes to a linked list - $stg = reset($mvv_object_path); + foreach ($mvv_object_paths as $mvv_object_path) { + // show only complete paths + if (count($mvv_object_path) === 4) { + $mvv_object_path['StgteilabschnittModul']->modul->setReplaceDfAbschnitt($mvv_object_path['StgteilAbschnitt']); + $mvv_object_path['Modulteil']->setReplaceDfAbschnitt($mvv_object_path['StgteilAbschnitt']); + // flatten the paths to a linked list $parent_id = 'root'; foreach ($mvv_object_path as $mvv_object) { + $tree_id = $mvv_object->id; $mvv_object_id = $mvv_object instanceof StgteilabschnittModul ? $mvv_object->modul_id : $mvv_object->id; - $this->mvv_tree[$parent_id][$mvv_object_id] = - ['id' => $mvv_object_id, - 'name' => $mvv_object->getDisplayName(), - 'class' => get_class($mvv_object)]; - $parent_id = $mvv_object_id; + $this->mvv_tree[$parent_id][$tree_id] = + [ + 'id' => $mvv_object_id, + 'name' => $mvv_object->getDisplayName(), + 'class' => get_class($mvv_object), + 'tree_id' => $tree_id, + ]; + $parent_id = $tree_id; } } } if (count($this->mvv_tree)) { // add the root node $this->mvv_tree['start'][] = [ - 'id' => 'root', - 'name' => Config::get()->UNI_NAME_CLEAN, - 'class' => '' + 'id' => 'root', + 'name' => Config::get()->UNI_NAME_CLEAN, + 'class' => '', + 'tree_id' => 'root' ]; } } else { - foreach ($mvv_object_pathes as $mvv_object_path) { - // show only complete pathes - if (count($mvv_object_path) == 4) { + foreach ($mvv_object_paths as $mvv_object_path) { + // show only complete paths + if (count($mvv_object_path) === 4) { $mvv_object_names = []; - $modul_id = ''; + $mvv_object_path['StgteilabschnittModul']->modul->setReplaceDfAbschnitt($mvv_object_path['StgteilAbschnitt']); + $mvv_object_path['Modulteil']->setReplaceDfAbschnitt($mvv_object_path['StgteilAbschnitt']); foreach ($mvv_object_path as $mvv_object) { if ($mvv_object instanceof StgteilabschnittModul) { $modul_id = $mvv_object->modul_id; } $mvv_object_names[] = $mvv_object->getDisplayName(); } - $this->mvv_pathes[] = [$modul_id => $mvv_object_names]; + $this->mvv_paths[] = [$modul_id => $mvv_object_names]; } } } diff --git a/app/controllers/lvgruppen/lvgruppen.php b/app/controllers/lvgruppen/lvgruppen.php index ae12161..95fc6c0 100644 --- a/app/controllers/lvgruppen/lvgruppen.php +++ b/app/controllers/lvgruppen/lvgruppen.php @@ -176,7 +176,7 @@ class Lvgruppen_LvgruppenController extends MVVController $this->trail_classes = [ 'Modulteil', - 'Modul', + 'StgteilabschnittModul', 'StgteilAbschnitt', 'StgteilVersion', 'Studiengang', @@ -269,7 +269,7 @@ class Lvgruppen_LvgruppenController extends MVVController $search_result = $this->getSearchResult('Lvgruppe'); - if (count($this->filter['mvv_modul_inst.institut_id'])) { + if (!empty($this->filter['mvv_modul_inst.institut_id'])) { $filter = array_merge( [ 'mvv_lvgruppe.lvgruppe_id' => $search_result, diff --git a/app/controllers/search/module.php b/app/controllers/search/module.php index b624f72..d8b6b54 100644 --- a/app/controllers/search/module.php +++ b/app/controllers/search/module.php @@ -115,14 +115,11 @@ class Search_ModuleController extends MVVController foreach ($this->search_result['Modul'] as $i => $mod_id) { $modul = Modul::find($mod_id); - $start_sem = Semester::find($modul->start); - $end_sem = Semester::find($modul->end); + $start_sem_begin = $modul->start_semester->beginn ?? 0; + $end_sem_end = $modul->end_semester->end ?? PHP_INT_MAX; if ( - $start_sem->beginn > $this->selected_semester->beginn - || ( - isset($end_sem) - && $this->selected_semester->ende > $end_sem->ende - ) + $start_sem_begin > $this->selected_semester->beginn + || $this->selected_semester->ende > $end_sem_end ) { unset($this->search_result['Modul'][$i]); } diff --git a/app/controllers/search/studiengaenge.php b/app/controllers/search/studiengaenge.php index 6882f6f..d2e07a7 100644 --- a/app/controllers/search/studiengaenge.php +++ b/app/controllers/search/studiengaenge.php @@ -268,12 +268,12 @@ class Search_StudiengaengeController extends MVVController if (!$abschnitt_modul->modul || !$abschnitt_modul->modul->hasPublicStatus()) { continue; } - - $start_sem = Semester::find($abschnitt_modul->modul->start); - $end_sem = Semester::find($abschnitt_modul->modul->end); + $abschnitt_modul->modul->setReplaceDfAbschnitt($abschnitt); + $start_sem_begin = $abschnitt_modul->modul->start_semester->beginn ?? 0; + $end_sem_end = $abschnitt_modul->modul->end_semester->ende ?? PHP_INT_MAX; if ( - ($start_sem && $start_sem->beginn > $this->active_sem->beginn) - || ($end_sem && $this->active_sem->ende > $end_sem->ende)) { + ($start_sem_begin > $this->active_sem->beginn) + || ($this->active_sem->ende > $end_sem_end)) { continue; } diff --git a/app/controllers/studiengaenge/shared_version.php b/app/controllers/studiengaenge/shared_version.php index abede2f..7dc3d40 100644 --- a/app/controllers/studiengaenge/shared_version.php +++ b/app/controllers/studiengaenge/shared_version.php @@ -557,6 +557,7 @@ abstract class SharedVersionController extends MVVController { $this->assignment = StgteilabschnittModul::find($abschnitt_modul_id); $this->modul = $this->assignment->modul; + $this->modul->setReplaceDfAbschnitt($this->assignment->abschnitt); $this->abschnitt_id = $this->assignment->abschnitt_id; if ($this->assignment) { if (Request::isXhr()) { @@ -598,7 +599,7 @@ abstract class SharedVersionController extends MVVController foreach ($this->assignment->datafields as $data_field) { $tdf = $data_field->getTypedDatafield(); $tdf->setValueFromSubmit($data_field_values[$data_field->datafield_id]); - if ($tdf->isValid() && $tdf->store()) { + if ($tdf->isValid() && $tdf->store() !== false) { $data_fields_updated = true; } else { $invalid_data_fields[] = $tdf->getName(); diff --git a/app/controllers/studiengaenge/versionen.php b/app/controllers/studiengaenge/versionen.php index 807ab81..f759651 100644 --- a/app/controllers/studiengaenge/versionen.php +++ b/app/controllers/studiengaenge/versionen.php @@ -18,6 +18,7 @@ class Studiengaenge_VersionenController extends SharedVersionController Navigation::activateItem($this->me . '/studiengaenge/versionen'); $this->filter = $this->sessGet('filter', []); $this->action = $action; + $this->version_id = null; $this->chooser_filter = $this->sessGet( 'chooser_filter', diff --git a/app/views/course/details/index.php b/app/views/course/details/index.php index 934d251..98d4eac 100644 --- a/app/views/course/details/index.php +++ b/app/views/course/details/index.php @@ -424,17 +424,19 @@ if (!empty($mvv_tree)) : ?> </article> <? endif; ?> -<? if (!empty($mvv_pathes)) : ?> +<? if (!empty($mvv_paths)) : ?> <article class="studip"> <header> <h1><?= _('Modulzuordnungen') ?></h1> </header> <section> <ul class="list-unstyled"> - <? foreach ($mvv_pathes as $mvv_path) : ?> + <? foreach ($mvv_paths as $mvv_path) : ?> + <? $types = array_keys($mvv_path); ?> + <? $values = array_values($mvv_path); ?> <li> - <a data-dialog href="<?= URLHelper::getScriptLink('dispatch.php/search/module/overview/' . reset(array_keys($mvv_path)) . '/' . $course->start_semester->id) ?>"> - <?= htmlReady(implode(' > ', reset(array_values($mvv_path)))) ?> + <a data-dialog href="<?= URLHelper::getScriptLink('dispatch.php/search/module/overview/' . $types[0] . '/' . $course->start_semester->id) ?>"> + <?= htmlReady(implode(' > ', $values[0])) ?> </a> </li> <? endforeach; ?> diff --git a/app/views/lvgruppen/lvgruppen/export_xls.php b/app/views/lvgruppen/lvgruppen/export_xls.php index 50a9090..e101bb9 100644 --- a/app/views/lvgruppen/lvgruppen/export_xls.php +++ b/app/views/lvgruppen/lvgruppen/export_xls.php @@ -8,7 +8,7 @@ <th><?= _('Modul') ?></th> <th><?= _('Modulteil') ?></th> </tr> - <? $trail_classes = words('Modulteil Modul StgteilAbschnitt StgteilVersion ' + <? $trail_classes = words('Modulteil StgteilabschnittModul StgteilAbschnitt StgteilVersion ' . 'Studiengang Fachbereich'); ?> <? foreach ($lvgruppen as $lvgruppe) : ?> <? $trails = $lvgruppe->getTrails($trail_classes, MvvTreeItem::TRAIL_SHOW_INCOMPLETE); ?> @@ -18,6 +18,9 @@ <td><?= htmlReady($lvgruppe->getDisplayName()) ?></td> <? foreach (array_reverse($trail_classes) as $trail_class) : ?> <? if ($trail[$trail_class]) : ?> + <? if ($trail_class === 'StgteilabschnittModul') : ?> + <? $trail['Modulteil']->setReplaceDfAbschnitt($trail[$trail_class]->abschnitt) ?> + <? endif; ?> <td><?= htmlReady($trail[$trail_class]->getDisplayName()) ?></td> <? else : ?> <td></td> diff --git a/app/views/lvgruppen/lvgruppen/trails_table_lvgruppe.php b/app/views/lvgruppen/lvgruppen/trails_table_lvgruppe.php index cd150be..13180b5 100644 --- a/app/views/lvgruppen/lvgruppen/trails_table_lvgruppe.php +++ b/app/views/lvgruppen/lvgruppen/trails_table_lvgruppe.php @@ -9,6 +9,9 @@ <tr> <? foreach (array_reverse($trail_classes) as $trail_class) : ?> <? if (isset($trail[$trail_class])) : ?> + <? if ($trail_class === 'StgteilabschnittModul') : ?> + <? $trail['Modulteil']->setReplaceDfAbschnitt($trail[$trail_class]->abschnitt) ?> + <? endif; ?> <td style="vertical-align: top;"> <?= htmlReady($trail[$trail_class]->getDisplayName()) ?> </td> @@ -23,4 +26,4 @@ <span class="mvv-no-entry"> <?= _('Diese Lehrveranstaltungsgruppe wurde für das ausgewählte Semester keinen Modulteilen zugeordnet.') ?> </span> -<? endif; ?>
\ No newline at end of file +<? endif; ?> diff --git a/app/views/search/studiengaenge/verlauf.php b/app/views/search/studiengaenge/verlauf.php index 107f15c..b3657fc 100644 --- a/app/views/search/studiengaenge/verlauf.php +++ b/app/views/search/studiengaenge/verlauf.php @@ -8,6 +8,7 @@ * @var array $abschnitte_data * @var Search_StudiengaengeController $controller * @var int $close_sections + * @var Semester $active_sem */ ?> <div> diff --git a/app/views/shared/modul/_modullvs.php b/app/views/shared/modul/_modullvs.php index 97ac3e2..8a86879 100644 --- a/app/views/shared/modul/_modullvs.php +++ b/app/views/shared/modul/_modullvs.php @@ -27,7 +27,7 @@ <? $modulteil_deskriptor = $modulteil->getDeskriptor(); // Für die Kenntlichmachung der Modulteile in Listen die Nummer des // Modulteils und den ausgewählten Namen verwenden. - // Ist keine Nummer vorhanden, dann Durchnummerieren und Standard- + // Ist keine Nummer vorhanden, dann durchnummerieren und Standard- // Bezeichnung verwenden. if (trim($modulteil->nummer)) { $num_bezeichnung = $GLOBALS['MVV_MODULTEIL']['NUM_BEZEICHNUNG']['values'][$modulteil->num_bezeichnung]['name']; diff --git a/app/views/shared/modul/description.php b/app/views/shared/modul/description.php index 05eddbf..d104822 100644 --- a/app/views/shared/modul/description.php +++ b/app/views/shared/modul/description.php @@ -15,7 +15,7 @@ href="<?= $controller->action_link('description/' . $modul->id . '/', [ 'display_language' => $language, - 'abschnitt_id' => $abschnitt_modul->abschnitt_id, + 'abschnitt_id' => empty($abschnitt_modul) ? '' : $abschnitt_modul->abschnitt_id, ]) ?>"> <?= Assets::img(MVV::getContentLanguageImagePath($language), ['alt' => $lang['name'], 'size' => 24]) ?> </a> diff --git a/app/views/shared/modul/overview.php b/app/views/shared/modul/overview.php index c6eadca..7e07ee8 100644 --- a/app/views/shared/modul/overview.php +++ b/app/views/shared/modul/overview.php @@ -127,7 +127,7 @@ <tr> <? if ($type === 1): ?> <td> - <b> <?= htmlReady($modulteil_deskriptor->getReplacedValue('bezeichnung')) ?> </b> + <b> <?= htmlReady($modulteil->getDisplayName()) ?> </b> <? if (mb_strlen($modulteil_deskriptor->getReplacedValue('kommentar')) > 0): ?> <?= trim($modulteil_deskriptor->getReplacedValue('kommentar')) ? '<br>(' . formatReady($modulteil_deskriptor->getReplacedValue('kommentar')) . ')' : '' ?> <? endif; ?> diff --git a/app/views/shared/mvv_tree.php b/app/views/shared/mvv_tree.php index 6a6c82d..38858b6 100644 --- a/app/views/shared/mvv_tree.php +++ b/app/views/shared/mvv_tree.php @@ -1,9 +1,9 @@ <? foreach ($tree[$node] as $current) : ?> <li> <? if ($current['class'] != 'Modulteil' && $current['id'] != 'root') : ?> - <input id="<?= htmlReady($current['id'] . $id_sfx->c) ?>" type="checkbox"<?= $current['class'] != 'StgteilabschnittModul' ? 'checked' : ''?>> + <input id="<?= htmlReady($current['tree_id'] . $id_sfx->c) ?>" type="checkbox"<?= $current['class'] != 'StgteilabschnittModul' ? 'checked' : ''?>> <? endif; ?> - <label for="<?= htmlReady($current['id'] . $id_sfx->c++) ?>"></label> + <label for="<?= htmlReady($current['tree_id'] . $id_sfx->c++) ?>"></label> <? if ($current['class'] == 'StgteilabschnittModul') : ?> <a data-dialog title="<?= htmlReady($current['name']) ?>" href="<?= URLHelper::getLink('dispatch.php/shared/modul/overview/' . $current['id'] . '/' . $course->start_semester->id) ?>"> <?= htmlReady($current['name']) ?> @@ -16,7 +16,7 @@ <? endif; ?> <? if ($current['class'] != 'Modulteil') : ?> <ul> - <?= $this->render_partial('shared/mvv_tree.php', ['tree' => $tree, 'node' => $current['id']]) ?> + <?= $this->render_partial('shared/mvv_tree.php', ['tree' => $tree, 'node' => $current['tree_id']]) ?> </ul> <? endif; ?> </li> |
