diff options
| author | David Siegfried <david.siegfried@uni-vechta.de> | 2024-05-17 13:38:02 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2024-05-17 13:38:02 +0000 |
| commit | 364005681b3ec2e6e9b50ce8762e3ca83ba5e601 (patch) | |
| tree | fc2ec354135d426dd6f73b02c343e239b1bbab41 /app/controllers/profile.php | |
| parent | 5e0842ceba062adbc2615bd522cecb1b54e201af (diff) | |
remove ProfilModel, fixes #4185
Closes #4185
Merge request studip/studip!3022
Diffstat (limited to 'app/controllers/profile.php')
| -rw-r--r-- | app/controllers/profile.php | 173 |
1 files changed, 164 insertions, 9 deletions
diff --git a/app/controllers/profile.php b/app/controllers/profile.php index 226890e..697bc68 100644 --- a/app/controllers/profile.php +++ b/app/controllers/profile.php @@ -106,11 +106,11 @@ class ProfileController extends AuthenticatedController // Additional user information $this->public_email = get_visible_email($this->current_user->user_id); - $this->motto = $this->profile->getVisibilityValue('motto'); - $this->private_nr = $this->profile->getVisibilityValue('privatnr', 'private_phone'); - $this->private_cell = $this->profile->getVisibilityValue('privatcell', 'private_cell'); - $this->privadr = $this->profile->getVisibilityValue('privadr', 'privadr'); - $this->homepage = $this->profile->getVisibilityValue('Home', 'homepage'); + $this->motto = $this->getVisibilityValue('motto'); + $this->private_nr = $this->getVisibilityValue('privatnr', 'private_phone'); + $this->private_cell = $this->getVisibilityValue('privatcell', 'private_cell'); + $this->privadr = $this->getVisibilityValue('privadr', 'privadr'); + $this->homepage = $this->getVisibilityValue('Home', 'homepage'); // skype informations $this->skype_name = ''; @@ -119,8 +119,8 @@ class ProfileController extends AuthenticatedController } // get generic datafield entries - $this->shortDatafields = $this->profile->getShortDatafields(); - $this->longDatafields = $this->profile->getLongDatafields(); + $this->shortDatafields = $this->getShortDatafields(); + $this->longDatafields = $this->getLongDatafields(); // get working station of an user (institutes) $this->institutes = $this->getInstitutInformation(); @@ -206,7 +206,7 @@ class ProfileController extends AuthenticatedController // Anzeige der Seminare, falls User = dozent if ($this->current_user['perms'] == 'dozent') { - $this->seminare = array_filter($this->profile->getDozentSeminars()); + $this->seminare = array_filter($this->getTeacherSeminars()); } // Hompageplugins @@ -234,7 +234,7 @@ class ProfileController extends AuthenticatedController foreach ($category as $cat) { $head = $cat->name; $body = $cat->content; - $vis_text = ""; + $vis_text = ''; if ($this->user->user_id == $this->current_user->user_id) { $vis_text .= ' (' . Visibility::getStateDescription('kat_' . $cat->kategorie_id) . ')'; @@ -521,4 +521,159 @@ class ProfileController extends AuthenticatedController PageLayout::setTitle(sprintf(_('Profil von %s'), $external_user['name'])); $this->user = $external_user; } + + /** + * Collect user datafield informations + * + * @return array + */ + private function getDatafields(): array + { + $short_datafields = []; + $long_datafields = []; + foreach (DataFieldEntry::getDataFieldEntries($this->current_user->user_id, 'user') as $entry) { + if ($entry->isVisible() && $entry->getDisplayValue() + && Visibility::verify($entry->getID(), $this->current_user->user_id)) + { + if ($entry instanceof DataFieldTextareaEntry) { + $long_datafields[] = $entry; + } else { + $short_datafields[] = $entry; + } + } + } + + return [ + 'long' => $long_datafields, + 'short' => $short_datafields, + ]; + } + + /** + * Filter long datafiels from the datafields + * + * @return array + */ + private function getLongDatafields(): array + { + $datafields = $this->getDatafields(); + $array = []; + + if (!empty($datafields)) { + foreach ($datafields['long'] as $entry) { + $array[(string)$entry->getName()] = [ + 'content' => $entry->getDisplayValue(), + 'visible' => '(' . $entry->getPermsDescription() . ')', + ]; + } + } + + return $array; + } + + /** + * Filter short datafiels from the datafields + * + * @return array + */ + private function getShortDatafields(): array + { + $shortDatafields = $this->getDatafields(); + $array = []; + + if (!empty($shortDatafields)) { + foreach ($shortDatafields['short'] as $entry) { + $array[(string)$entry->getName()] = [ + 'content' => $entry->getDisplayValue(), + 'visible' => '(' . $entry->getPermsDescription() . ')', + ]; + } + } + return $array; + } + + /** + * Creates an array with all seminars + * + * @return array + */ + private function getTeacherSeminars(): array + { + $courses = []; + $semester = []; + $next_semester = Semester::findNext(); + $current_semester = Semester::findCurrent(); + $previous_semester = Semester::findPrevious(); + if ($next_semester) { + $semester[$next_semester->id] = $next_semester; + } + if ($current_semester) { + $semester[$current_semester->id] = $current_semester; + } + if ($previous_semester) { + $semester[$previous_semester->id] = $previous_semester; + } + $field = 'name'; + if (Config::get()->IMPORTANT_SEMNUMBER) { + $field = "veranstaltungsnummer,{$field}"; + } + $allcourses = new SimpleCollection( + Course::findBySQL( + "INNER JOIN seminar_user USING(Seminar_id) WHERE user_id=? AND seminar_user.status='dozent' AND seminare.visible=1", + [ + $this->current_user->id + ] + ) + ); + foreach (array_filter($semester) as $one) { + $courses[(string) $one->name] = $allcourses->filter(function ($c) use ($one) { + if (Config::get()->HIDE_STUDYGROUPS_FROM_PROFILE && $c->isStudygroup()) { + return false; + } + if (!$c->isOpenEnded()) { + return $c->isInSemester($one); + } elseif ($one->isCurrent()) { + return $c; + } + return false; + })->orderBy($field); + + if (!$courses[(string) $one->name]->count()) { + unset($courses[(string) $one->name]); + } + } + return $courses; + } + + /** + * Get the homepagevisibilities + * + * @return array + */ + private function getHomepageVisibilities(): array + { + $visibilities = get_local_visibility_by_id( + $this->current_user ? $this->current_user->id : null, + 'homepage' + ); + if (is_array(json_decode($visibilities, true))) { + return json_decode($visibilities, true); + } + return []; + } + + /** + * Returns the visibility value + * + * @param string $param + * @param string $visibility + * @return string|bool + */ + private function getVisibilityValue(string $param, string $visibility = ''): string|bool + { + if (Visibility::verify($visibility ?: $param, $this->current_user->user_id)) { + return $this->current_user->$param; + } + return false; + } } |
