aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/fachabschluss/faecher.php72
-rw-r--r--app/views/fachabschluss/abschluesse/details.php9
-rw-r--r--app/views/fachabschluss/faecher/details.php8
-rw-r--r--app/views/fachabschluss/faecher/fachbereiche.php24
-rw-r--r--app/views/fachabschluss/faecher/index.php23
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>