aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2025-03-10 11:22:44 +0000
committerElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2025-03-10 11:22:44 +0000
commitbee11b37e18db136fbcffccbedf09969096a6da0 (patch)
treea45433c82c2910193e01d2ad22546dae4b02d6a8
parenta1f81c709937ec086c9c38ab0d08ae9e044d1ef5 (diff)
reimplement institute member export, re #5259tic-cw_slides
Merge request studip/studip!4036
-rw-r--r--app/controllers/institute/members.php57
-rw-r--r--lib/models/Statusgruppen.php14
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