diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/fachabschluss/faecher.php | 72 | ||||
| -rw-r--r-- | app/views/fachabschluss/abschluesse/details.php | 9 | ||||
| -rw-r--r-- | app/views/fachabschluss/faecher/details.php | 8 | ||||
| -rw-r--r-- | app/views/fachabschluss/faecher/fachbereiche.php | 24 | ||||
| -rw-r--r-- | app/views/fachabschluss/faecher/index.php | 23 |
5 files changed, 101 insertions, 35 deletions
diff --git a/app/controllers/fachabschluss/faecher.php b/app/controllers/fachabschluss/faecher.php index e5c1184..fef6042 100644 --- a/app/controllers/fachabschluss/faecher.php +++ b/app/controllers/fachabschluss/faecher.php @@ -14,6 +14,7 @@ class Fachabschluss_FaecherController extends MVVController $this->action = $action; } + /** * Shows all Faecher */ @@ -22,34 +23,52 @@ class Fachabschluss_FaecherController extends MVVController PageLayout::setTitle(_('Verwaltung der Fächer')); $this->initPageParams(); - // Nur Fächer mit verantwortlichen Einrichtungen an denen der User - // eine Rolle hat - $filter = ['mvv_fach_inst.institut_id' => MvvPerm::getOwnInstitutes()]; - - $this->count = Fach::getCount($filter); + $this->count = Fach::countBySql( + 'LEFT JOIN `mvv_fach_inst` USING (`fach_id`) + WHERE IF(:institute_ids, `mvv_fach_inst`.`institut_id` IN (:institute_ids), 1)', + [ + 'institute_ids' => MvvPerm::getOwnInstitutes() + ]); if ($this->count < self::$items_per_page * ($this->page - 1)) { $this->page = 1; } - $this->sortby = $this->sortby ?: 'name'; - $this->order = $this->order ?: 'ASC'; - //get data - $this->faecher = Fach::getAllEnriched( - $this->sortby, - $this->order, - self::$items_per_page, - self::$items_per_page * ($this->page - 1), - $filter + + $db = DBManager::get(); + $stmt = $db->prepare(' + SELECT + `fach`.*, + COUNT(DISTINCT `abschluss_id`) AS `count_abschluesse` + FROM `fach` + LEFT JOIN `mvv_fach_inst` USING (`fach_id`) + LEFT JOIN `mvv_stgteil` USING (`fach_id`) + LEFT JOIN `mvv_stg_stgteil` USING (`stgteil_id`) + LEFT JOIN `mvv_studiengang` USING (`studiengang_id`) + WHERE IF(:institute_ids, `mvv_fach_inst`.`institut_id` IN (:institute_ids), 1) + GROUP BY `fach_id` + ORDER BY :sortby :order + LIMIT :row_count + OFFSET :offset' ); + $stmt->bindValue(':sortby', '`' . ($this->sortby ?: 'name') . '`', StudipPDO::PARAM_COLUMN); + $stmt->bindValue(':order', $this->order ?: 'ASC', StudipPDO::PARAM_COLUMN); + $stmt->execute( + [ + 'institute_ids' => MvvPerm::getOwnInstitutes(), + 'row_count' => self::$items_per_page, + 'offset' => self::$items_per_page * ($this->page - 1) + ] + ); + $this->faecher = $stmt->fetchAll(); + if (!isset($this->fach_id)) { $this->fach_id = null; } - if (count($this->faecher) === 0) { + if ($this->count === 0) { PageLayout::postInfo(_('Es wurden noch keine Fächer angelegt.')); } $this->setSidebar(); - $helpbar = Helpbar::get(); $widget = new HelpbarWidget(); $widget->addElement(new WidgetElement(_('Auf diesen Seiten können Sie Fächer verwalten und neue Fächer anlegen.').'</br>')); @@ -157,6 +176,25 @@ class Fachabschluss_FaecherController extends MVVController */ public function fachbereiche_action() { + $db = DBManager::get(); + $stmt = $db->prepare(' + SELECT DISTINCT `Institute`.*, 2 AS `test` + FROM `Institute` + JOIN `mvv_fach_inst` USING(`institut_id`) + WHERE IF(:institute_ids, `mvv_fach_inst`.`institut_id` IN (:institute_ids), 1) + ORDER BY :sortby :order' + ); + $stmt->bindValue(':sortby', '`' . ($this->sortby ?: 'name') . '`', StudipPDO::PARAM_COLUMN); + $stmt->bindValue(':order', $this->order ?: 'ASC', StudipPDO::PARAM_COLUMN); + $stmt->execute( + [ + 'institute_ids' => MvvPerm::getOwnInstitutes() + ] + ); + $this->fachbereiche = $stmt->fetchAll(); + + +/* $filter = ['mvv_fach_inst.institut_id' => MvvPerm::getOwnInstitutes()]; $this->initPageParams('fachbereiche'); @@ -168,7 +206,7 @@ class Fachabschluss_FaecherController extends MVVController $filter ); PageLayout::setTitle(_('Fächer nach Fachbereichen gruppiert')); - +*/ $this->setSidebar(); $helpbar = Helpbar::get(); diff --git a/app/views/fachabschluss/abschluesse/details.php b/app/views/fachabschluss/abschluesse/details.php index b475f40..aced360 100644 --- a/app/views/fachabschluss/abschluesse/details.php +++ b/app/views/fachabschluss/abschluesse/details.php @@ -1,10 +1,17 @@ +<?php +/** + * @var Abschluss $abschluss + * @var string[] $perm_institutes + * @var Fachabschluss_AbschluesseController $controller + */ +?> <td colspan="4"> <table class="default"> <colgroup> <col> <col style="width: 1%;"> </colgroup> - <? foreach ($abschluss->getFaecher() as $fach) : ?> + <? foreach ($abschluss->faecher as $fach) : ?> <? if (count($perm_institutes) === 0 || count(array_intersect($perm_institutes, $fach->getFachbereiche()->pluck('institut_id')))) : ?> <tr> diff --git a/app/views/fachabschluss/faecher/details.php b/app/views/fachabschluss/faecher/details.php index b8abf4e..8271581 100644 --- a/app/views/fachabschluss/faecher/details.php +++ b/app/views/fachabschluss/faecher/details.php @@ -1,3 +1,8 @@ +<?php +/** + * @var Fach $fach + */ +?> <td colspan="3"> <table class="default"> <colgroup> @@ -5,8 +10,7 @@ <col style="width: 40%"> <col style="width: 1%"> </colgroup> - <?php $abschluesse = $fach->getAbschluesse()?> - <? foreach ($abschluesse as $abschluss) : ?> + <? foreach ($fach->abschluesse as $abschluss) : ?> <tr> <td><?= htmlReady($abschluss->getDisplayName()) ?></td> <td><?= htmlReady($abschluss->category->getDisplayName()) ?></td> diff --git a/app/views/fachabschluss/faecher/fachbereiche.php b/app/views/fachabschluss/faecher/fachbereiche.php index 844440c..6a99719 100644 --- a/app/views/fachabschluss/faecher/fachbereiche.php +++ b/app/views/fachabschluss/faecher/fachbereiche.php @@ -1,3 +1,10 @@ +<?php +/** + * @var MVVController $controller + * @var Fachbereich[] $fachbereiche + * @var string $fachbereich_id + */ +?> <table class="default collapsable"> <colgroup> <col> @@ -8,22 +15,23 @@ <?= $controller->renderSortLink('fachabschluss/faecher/fachbereiche/', _('Fächer'), 'faecher', ['style' => 'text-align: center;']) ?> </tr> </thead> - <? foreach ($fachbereiche as $fachbereich): ?> - <? if ($fachbereich['faecher']) : ?> - <tbody class="<?= isset($fachbereich_id) && $fachbereich_id === $fachbereich['institut_id'] ? 'not-collapsed' : 'collapsed' ?>"> + <? foreach ($fachbereiche as $fachbereich_data): ?> + <? $fachbereich = Fachbereich::buildExisting($fachbereich_data); ?> + <? if ($fachbereich->faecher) : ?> + <tbody class="<?= isset($fachbereich_id) && $fachbereich_id === $fachbereich->id ? 'not-collapsed' : 'collapsed' ?>"> <tr class="header-row"> <td class="toggle-indicator"> <a class="mvv-load-in-new-row" - href="<?= $controller->action_link('details_fachbereich/' . $fachbereich['institut_id']) ?>"><?= htmlReady($fachbereich['name']) ?></a> + href="<?= $controller->action_link('details_fachbereich/' . $fachbereich->id) ?>"><?= htmlReady($fachbereich->getDisplayName()) ?></a> </td> - <td style="text-align: center;" class="dont-hide"><?= htmlReady($fachbereich['faecher']) ?> </td> + <td style="text-align: center;" class="dont-hide"><?= $fachbereich->faecher->count() ?> </td> </tr> - <? if (isset($fachbereich_id) && $fachbereich_id === $fachbereich['institut_id']): ?> + <? if (isset($fachbereich_id) && $fachbereich_id === $fachbereich->id): ?> <tr class="loaded-details nohover"> - <?= $this->render_partial('fachabschluss/faecher/details_fachbereich', compact('fach')) ?> + <?= $this->render_partial('fachabschluss/faecher/details_fachbereich', compact('fachbereich')) ?> </tr> <? endif; ?> </tbody> <? endif; ?> - <? endforeach ?> + <? endforeach; ?> </table> diff --git a/app/views/fachabschluss/faecher/index.php b/app/views/fachabschluss/faecher/index.php index b42761e..39c720d 100644 --- a/app/views/fachabschluss/faecher/index.php +++ b/app/views/fachabschluss/faecher/index.php @@ -1,3 +1,12 @@ +<?php +/** + * @var int $count + * @var MVVController $controller + * @var Fach[] $faecher + * @var string $fach_id + * @var int $page + */ +?> <form method="post"> <?= CSRFProtection::tokenTag(); ?> <table class="default collapsable"> @@ -12,18 +21,19 @@ <th style="width: 5%; text-align: right;"><?= _('Aktionen') ?></th> </tr> </thead> - <? foreach ($faecher as $fach): ?> - <tbody class="<?= $fach->count_abschluesse ? '' : 'empty' ?> <?= ($fach_id === $fach->id ? 'not-collapsed' : 'collapsed') ?>"> + <? foreach ($faecher as $fach_data) : ?> + <? $fach = Fach::buildExisting($fach_data); ?> + <tbody class="<?= $fach->abschluesse->count() ? '' : 'empty' ?> <?= ($fach_id === $fach->id ? 'not-collapsed' : 'collapsed') ?>"> <tr class="header-row"> <td class="toggle-indicator"> - <? if ($fach->count_abschluesse) : ?> + <? if ($fach->abschluesse->count()) : ?> <a class="mvv-load-in-new-row" href="<?= $controller->action_link('details/' . $fach->id) ?>"><?= htmlReady($fach->name) ?></a> <? else: ?> <?= htmlReady($fach->name) ?> <? endif; ?> </td> - <td class="dont-hide" style="text-align: center;"><?= $fach->count_abschluesse ?> </td> + <td class="dont-hide" style="text-align: center;"><?= $fach->abschluesse->count() ?> </td> <td class="dont-hide actions" style="white-space: nowrap;"> <? if (MvvPerm::havePermWrite($fach)) : ?> <a href="<?= $controller->action_link('fach/' . $fach->id) ?>"> @@ -31,7 +41,7 @@ </a> <? endif; ?> <? if (MvvPerm::havePermCreate($fach)) : ?> - <? if ($fach->count_abschluesse == 0): ?> + <? if ($fach->abschluesse->count() == 0): ?> <?= Icon::create('trash', Icon::ROLE_CLICKABLE, tooltip2(_('Fach löschen')))->asInput( [ 'formaction' => $controller->action_url('delete/' . $fach->id), @@ -39,7 +49,7 @@ 'name' => 'delete' ]); ?> <? else : ?> - <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Fach kann nicht glöscht werden')))->asSvg(); ?> + <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Fach kann nicht gelöscht werden')))->asSvg(); ?> <? endif; ?> <? endif; ?> </td> @@ -65,7 +75,6 @@ $pagination->set_attribute('pagelink', $page_link); echo $pagination->render(); ?> - </td> </tr> </tfoot> |
