diff options
| -rw-r--r-- | app/controllers/institute/members.php | 57 | ||||
| -rw-r--r-- | lib/models/Statusgruppen.php | 14 |
2 files changed, 36 insertions, 35 deletions
diff --git a/app/controllers/institute/members.php b/app/controllers/institute/members.php index d70fdc1..3f312dc 100644 --- a/app/controllers/institute/members.php +++ b/app/controllers/institute/members.php @@ -530,45 +530,34 @@ class Institute_MembersController extends AuthenticatedController throw new Exception('Wrong format'); } - if (Request::get('institute_id')) { - $institute_id = Request::get('institute_id'); - } - - $inst_sql = "SELECT inst.Name AS institute, fak.Name AS faculty FROM Institute as inst - JOIN Institute as fak ON (inst.fakultaets_id = fak.Institut_id) - WHERE inst.Institut_id = :institut_id"; - $res = DBManager::get()->fetchOne($inst_sql, ['institut_id' => $institute_id]); - $faculty = $res['faculty']; - $header = [_('Einrichtung'), _('Fakultät'), _('Gruppe'), _('Titel'), _('Vorname'), _('Nachname'), _('Titel nachgestellt'), _('Telefon'), _('Raum'), _('Sprechzeiten'), _('E-Mail')]; - $members = InstituteMember::findByInstitute($institute_id); - - $sg_sql = "SELECT name FROM statusgruppen as sg - JOIN statusgruppe_user USING (statusgruppe_id) - WHERE user_id = :user_id - AND range_id = :range_id"; - $temp = []; - foreach ($members as $member) { - $res = DBManager::get()->fetchOne($sg_sql, ['user_id' => $member['user_id'], 'range_id' => $institute_id]); - $temp[$member['id']] = [ - 'Einrichtung' => (string) $this->institute->name, - 'Fakultät' => $faculty, - 'Gruppe' => $res['name'], - 'Titel' => $member->title_front, - 'Vorname' => $member->Vorname, - 'Nachname' => $member->Nachname, - 'Titel nachgestellt' => $member->title_rear, - 'Telefon' => $member->Telefon, - 'Raum' => $member->raum, - 'Sprechzeiten' => $member->sprechzeiten, - 'Email' => $member->Email, - ]; + $groups = Statusgruppen::findAllByRangeId($this->institute->id); + $members = $this->institute->members; + $result = []; + + foreach ($groups as $group) { + foreach ($group->members as $member) { + $inst_member = $members->findOneBy('user_id', $member->user_id); + $result[] = [ + 'Einrichtung' => $this->institute->name, + 'Fakultät' => $this->institute->faculty->name, + 'Gruppe' => $group->getFullName(), + 'Titel' => $member->title_front, + 'Vorname' => $member->Vorname, + 'Nachname' => $member->Nachname, + 'Titel nachgestellt' => $member->title_rear, + 'Telefon' => $inst_member->Telefon, + 'Raum' => $inst_member->raum, + 'Sprechzeiten' => $inst_member->sprechzeiten, + 'Email' => $member->Email, + ]; + } } - $filename = FileManager::cleanFileName(_('Mitarbeitendenexport') . ' ' . $this->institute->name . ' ' . $faculty . '.' . $export_format); + $filename = FileManager::cleanFileName(_('Mitarbeitendenexport') . ' ' . $this->institute->name . ' ' . $this->institute->faculty->name . '.' . $export_format); - $this->render_spreadsheet($header, $temp, $export_format, $filename); + $this->render_spreadsheet($header, $result, $export_format, $filename); } private function setupSidebar() diff --git a/lib/models/Statusgruppen.php b/lib/models/Statusgruppen.php index 015a306..b934cf5 100644 --- a/lib/models/Statusgruppen.php +++ b/lib/models/Statusgruppen.php @@ -119,7 +119,7 @@ class Statusgruppen extends SimpleORMap implements PrivacyObject public static function findAllByRangeId($range_id, $as_collection = false) { - $groups = self::findBySQL('range_id IN (?)', [$range_id]); + $groups = self::findBySQL('range_id IN (?) ORDER BY position', [$range_id]); if (count($groups) > 0) { $ids = array_map(function ($group) { return $group->id; }, $groups); $groups = array_merge($groups, self::findAllByRangeId($ids, false)); @@ -331,6 +331,18 @@ class Statusgruppen extends SimpleORMap implements PrivacyObject return $this->content['name']; } + public function getFullName($seperator = ' > ') + { + $result = [$this->name]; + + $item = $this; + while ($item = $item->parent) { + array_unshift($result, $item->name); + } + + return implode($seperator, $result); + } + /** * Puts out an array of all gendered userroles for a user in a certain * context |
