diff --git a/application/controllers/api/frontend/v1/Profil.php b/application/controllers/api/frontend/v1/Profil.php index c048e51d6..3133b107a 100644 --- a/application/controllers/api/frontend/v1/Profil.php +++ b/application/controllers/api/frontend/v1/Profil.php @@ -27,7 +27,6 @@ class Profil extends FHCAPI_Controller public function __construct() { parent::__construct([ - 'getView' => self::PERM_LOGGED, 'fotoSperre' => self::PERM_LOGGED, 'getGemeinden' => self::PERM_LOGGED, 'getAllNationen' => self::PERM_LOGGED, @@ -38,16 +37,7 @@ class Profil extends FHCAPI_Controller $this->load->library('PermissionLib'); $this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel'); - $this->load->model('crm/Student_model', 'StudentModel'); - $this->load->model('person/Benutzer_model', 'BenutzerModel'); $this->load->model('person/Person_model', 'PersonModel'); - $this->load->model('person/Adresse_model', 'AdresseModel'); - $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); - $this->load->model('person/Benutzergruppe_model', 'BenutzergruppeModel'); - $this->load->model('ressource/Betriebsmittelperson_model', 'BetriebsmittelpersonModel'); - $this->load->model('person/Kontakt_model', 'KontaktModel'); - $this->load->model('person/Profil_update_model', 'ProfilUpdateModel'); - $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); //? put the uid and pid inside the controller for reusability @@ -58,11 +48,10 @@ class Profil extends FHCAPI_Controller //------------------------------------------------------------------------------------------------------------------ // Public methods - public function profilViewData($uid){ - $uid = $uid; + public function profilViewData($uid=null){ $this->load->library('ProfilLib'); $editable = false; - if(isset($uid) && $uid != "null"){ + if(isset($uid) && $uid != null){ $profil_data = $this->profillib->getView($uid); if($uid == getAuthUID()){ $editable = true; @@ -79,56 +68,6 @@ class Profil extends FHCAPI_Controller ); $this->terminateWithSuccess($viewData); } - - - /** - * function that returns the data used for the corresponding view - * the client side parses the @param $uid and calls this function to get the data to the correct view - * @access public - * @param boolean $uid the userID used to identify which information should be retrieved for which view - * @return stdClass all the data corresponding to a view of a user - */ - public function getView($uid) - { - $res = new stdClass(); - - // if parsing the URL did not found a UID then the UID of the logged in user is used - if ($uid == "Profil" || $uid == $this->uid) { - $isMitarbeiter = $this->MitarbeiterModel->isMitarbeiter($this->uid); - $isMitarbeiter = $this->getDataOrTerminateWithError($isMitarbeiter); - if ($isMitarbeiter) { - $res->view = "MitarbeiterProfil"; - $res->data = $this->mitarbeiterProfil(); - $res->data->pid = $this->pid; - } else { - $res->view = "StudentProfil"; - $res->data = $this->studentProfil(); - $res->data->pid = $this->pid; - } - } - // UID is availabe when accessing Profil/View/:uid - else { - $this->PersonModel->addSelect(["person_id"]); - $pid = $this->PersonModel->getByUid($uid); - $pid = $this->getDataOrTerminateWithError($pid); - $pid = $pid ? $pid[0] : null; - if (!$pid) { - $this->terminateWithError("Person with UID: " . $uid . " does not exist"); - } - $isMitarbeiter = $this->MitarbeiterModel->isMitarbeiter($uid); - $isMitarbeiter = $this->getDataOrTerminateWithError($isMitarbeiter); - if ($isMitarbeiter) { - $res->view = "ViewMitarbeiterProfil"; - $res->data = $this->viewMitarbeiterProfil($uid); - - } else { - $res->view = "ViewStudentProfil"; - $res->data = $this->viewStudentProfil($uid); - } - } - $res->data->fotoStatus=$this->isFotoAkzeptiert($this->pid); - $this->terminateWithSuccess($res); - } /** * update column foto_sperre in public.tbl_person @@ -201,92 +140,7 @@ class Profil extends FHCAPI_Controller } - - // ----------------------------------------------------------------------------------------------------------------- - // Private methods - - /** - * function that returns the data used for viewing another mitarbeiter profile - * @access private - * @param integer $uid the userID to retrieve the mitarbeiter data - * @return stdClass restricted mitarbeiter data - */ - private function viewMitarbeiterProfil($uid) - { - $mailverteiler_res = $this->getMailverteiler($uid); - $benutzer_funktion_res = $this->getBenutzerFunktion($uid); - $benutzer_res = $this->getBenutzerAlias($uid); - $person_res = $this->getPersonInfo($uid); - $mitarbeiter_res = $this->getMitarbeiterInfo($uid); - $telefon_res = $this->getTelefonInfo($uid); - - $res = new stdClass(); - $res->username = $uid; - - //? Person Info - foreach ($person_res as $key => $val) { - $res->$key = $val; - } - - //? Mitarbeiter Info - foreach ($mitarbeiter_res as $key => $val) { - $res->$key = $val; - - } - - $intern_email = array(); - $intern_email["type"] = "intern"; - $intern_email["email"] = $uid . "@" . DOMAIN; - $extern_email = array(); - $extern_email["type"] = "alias"; - - $extern_email["email"] = $benutzer_res->alias ? ($benutzer_res->alias . "@" . DOMAIN) : null; - $res->emails = $extern_email?[$intern_email, $extern_email]:[$intern_email]; - - $res->funktionen = $benutzer_funktion_res; - $res->mailverteiler = $mailverteiler_res; - $res->standort_telefon = isset($telefon_res) ? $telefon_res->kontakt : null; - - return $res; - } - - /** - * function that returns the data used for viewing another student profile - * @access private - * @param integer $uid the userID to retrieve the student data - * @return stdClass restricted student data - */ - private function viewStudentProfil($uid) - { - $mailverteiler_res = $this->getMailverteiler($uid); - $person_res = $this->getPersonInfo($uid); - $student_res = $this->getStudentInfo($uid); - $matr_res = $this->getMatrikelNummer($uid); - - $res = new stdClass(); - $res->username = $uid; - - //? Person Information - foreach ($person_res as $key => $value) { - $res->$key = $value; - } - - //? Student Information - foreach ($student_res as $key => $value) { - $res->$key = $value; - } - - $intern_email = array(); - $intern_email["type"] = "intern"; - $intern_email["email"] = $uid . "@" . DOMAIN; - - $res->emails = [$intern_email]; - $res->matrikelnummer = $matr_res->matr_nr; - $res->mailverteiler = $mailverteiler_res; - - return $res; - } - + /** * checks whether a specific userID is a mitarbeiter or not (foreword declaration of the function isMitarbeiter in Mitarbeiter_model.php) * @access public @@ -310,384 +164,9 @@ class Profil extends FHCAPI_Controller $this->terminateWithSuccess($result); } - /** - * function that returns the data used for the mitarbeiter profile - * @access private - * @return stdClass mitarbeiter data - */ - private function mitarbeiterProfil() - { + // ----------------------------------------------------------------------------------------------------------------- + // Private methods - $zutrittskarte_ausgegebenam = $this->getZutrittskarteDatum($this->uid); - $adresse_res = $this->getAdressenInfo($this->pid); - $kontakte_res = $this->getKontaktInfo($this->pid); - $mailverteiler_res = $this->getMailverteiler($this->uid); - $person_res = $this->getPersonInfo($this->uid, true); - $benutzer_funktion_res = $this->getBenutzerFunktion($this->uid); - $betriebsmittelperson_res = $this->getBetriebsmittelInfo($this->pid); - $profilUpdates = $this->getProfilUpdates($this->uid); - $telefon_res = $this->getTelefonInfo($this->uid); - $mitarbeiter_res = $this->getMitarbeiterInfo($this->uid); - - $res = new stdClass(); - $res->username = $this->uid; - - //? Person Information - foreach ($person_res as $key => $value) { - $res->$key = $value; - } - - //? Mitarbeiter Information - foreach ($mitarbeiter_res as $key => $value) { - $res->$key = $value; - } - - $res->adressen = $adresse_res; - $res->zutrittsdatum = $zutrittskarte_ausgegebenam; - $res->kontakte = $kontakte_res; - $res->mittel = $betriebsmittelperson_res; - $res->mailverteiler = $mailverteiler_res; - - $intern_email = array(); - $intern_email["type"] = "intern"; - $intern_email["email"] = $this->uid . "@" . DOMAIN; - $extern_email = array(); - $extern_email["type"] = "alias"; - - $extern_email["email"] = $mitarbeiter_res->alias? ($mitarbeiter_res->alias . "@" . DOMAIN) : null; - $res->emails = $extern_email["email"]?[$intern_email, $extern_email]:[$intern_email]; - - $res->funktionen = $benutzer_funktion_res; - $res->standort_telefon = $telefon_res; - $res->profilUpdates = $profilUpdates; - - return $res; - } - - /** - * function that returns the data used for the student profile - * @access private - * @return stdClass student data - */ - private function studentProfil() - { - $betriebsmittelperson_res = $this->getBetriebsmittelInfo($this->pid); - $kontakte_res = $this->getKontaktInfo($this->pid); - $zutrittskarte_ausgegebenam = $this->getZutrittskarteDatum($this->uid); - $adresse_res = $this->getAdressenInfo($this->pid); - $mailverteiler_res = $this->getMailverteiler($this->uid); - $person_res = $this->getPersonInfo($this->uid, true); - $zutrittsgruppe_res = $this->getZutrittsgruppen($this->uid); - $student_res = $this->getStudentInfo($this->uid); - $matr_res = $this->getMatrikelNummer($this->uid); - $profilUpdates = $this->getProfilUpdates($this->uid); - - $res = new stdClass(); - $res->username = $this->uid; - - //? Person Information - foreach ($person_res as $key => $value) { - $res->$key = $value; - } - - //? Student Information - foreach ($student_res as $key => $value) { - $res->$key = trim($value); - } - - $intern_email = array(); - $intern_email["type"] = "intern"; - $intern_email["email"] = $this->uid . "@" . DOMAIN; - - $res->emails = [$intern_email]; - $res->adressen = $adresse_res; - $res->zutrittsdatum = $zutrittskarte_ausgegebenam; - $res->kontakte = $kontakte_res; - $res->mittel = $betriebsmittelperson_res; - $res->matrikelnummer = $matr_res->matr_nr; - $res->zuttritsgruppen = $zutrittsgruppe_res; - $res->mailverteiler = $mailverteiler_res; - $res->profilUpdates = $profilUpdates; - - return $res; - } - - - /** - * gets all the mailverteiler using the tables: tbl_benutzer, tbl_benutzergruppe, tbl_gruppe - * @access private - * @param integer $uid the userID used to retrieve the mailverteiler - * @return array returns the mailvertailer corresponding to a userID - */ - private function getMailverteiler($uid) - { - $this->PersonModel->addSelect('gruppe_kurzbz, beschreibung'); - $this->PersonModel->addJoin('tbl_benutzer', 'person_id'); - $this->PersonModel->addJoin('tbl_benutzergruppe', 'uid'); - $this->PersonModel->addJoin('tbl_gruppe', 'gruppe_kurzbz'); - - $mailverteiler_res = $this->PersonModel->loadWhere(array('mailgrp' => true, 'uid' => $uid)); - $mailverteiler_res = $this->getDataOrTerminateWithError($mailverteiler_res); - $mailverteiler_res = gettype($mailverteiler_res) === 'array' ? $mailverteiler_res : []; - $mailverteiler_res = array_map(function ($element) { - $element->mailto = "mailto:" . $element->gruppe_kurzbz . "@" . DOMAIN; - return $element; - }, $mailverteiler_res); - return $mailverteiler_res; - } - - /** - * gets all the Benutzerfunktionen of a corresponding user - * @access private - * @param integer $uid the userID used to retrieve the Benutzerfunktionen - * @return array returns the Benutzerfunktionen corresponding to a userID - */ - private function getBenutzerFunktion($uid) - { - $this->BenutzerfunktionModel->addSelect(["tbl_benutzerfunktion.bezeichnung as Bezeichnung", "tbl_organisationseinheit.bezeichnung as Organisationseinheit", "datum_von as Gültig_von", "datum_bis as Gültig_bis", "wochenstunden as Wochenstunden"]); - $this->BenutzerfunktionModel->addJoin("tbl_organisationseinheit", "oe_kurzbz"); - - $benutzer_funktion_res = $this->BenutzerfunktionModel->loadWhere(array('uid' => $uid)); - $benutzer_funktion_res = $this->getDataOrTerminateWithError($benutzer_funktion_res); - return $benutzer_funktion_res; - } - - /** - * gets all the Betriebsmittel of a corresponding user - * @access private - * @param integer $uid the userID used to retrieve the Betriebsmittel - * @return array returns the Betriebsmittel corresponding to a userID - */ - private function getBetriebsmittelInfo($pid) - { - $this->BetriebsmittelpersonModel->addSelect(["CONCAT(betriebsmitteltyp, ' ' ,beschreibung) as Betriebsmittel", "nummer as Nummer", "ausgegebenam as Ausgegeben_am"]); - - //? betriebsmittel are not needed in a view - $betriebsmittelperson_res = $this->BetriebsmittelpersonModel->getBetriebsmittel($pid); - $betriebsmittelperson_res = $this->getDataOrTerminateWithError($betriebsmittelperson_res); - return $betriebsmittelperson_res; - } - - /** - * gets the alias of a corresponding user - * @access private - * @param integer $uid the userID used to get the alias - * @return string the alias of the userID - */ - private function getBenutzerAlias($uid) - { - $this->BenutzerModel->addSelect(["alias"]); - $benutzer_res = $this->BenutzerModel->load([$uid]); - $benutzer_res = $this->getDataOrTerminateWithError($benutzer_res); - $benutzer_res = $benutzer_res ? current($benutzer_res) : null; - - return $benutzer_res; - } - - /** - * gets the person information corresponding to a user - * @access private - * @param integer $uid the userID used to get the person information - * @param integer $geburtsInfo flag wether to add the columns gebort, gebdatum, foto_sperre or not - * @return array all the person informaion corresponding to a userID - */ - private function getPersonInfo($uid, $geburtsInfo = null) - { - $selectClause = ["foto", "foto_sperre", "anrede", "titelpost as postnomen", "titelpre as titel", "vorname", "nachname"]; - /** @param integer $geburtsInfo */ - if ($geburtsInfo) { - array_push($selectClause, "gebort"); - array_push($selectClause, "TO_CHAR(gebdatum, 'DD.MM.YYYY') as gebdatum"); - } - $this->BenutzerModel->addSelect($selectClause); - $this->BenutzerModel->addJoin("tbl_person", "person_id"); - - $person_res = $this->BenutzerModel->load([$uid]); - $person_res = $this->getDataOrTerminateWithError($person_res); - $person_res = $person_res ? current($person_res) : null; - - if( ($person_res->foto === null) || (($this->uid !== $uid) && ($person_res->foto_sperre !== false)) ) - { - $dummy_foto = base64_encode(file_get_contents(DOC_ROOT.'skin/images/profilbild_dummy.jpg')); - $person_res->foto = $dummy_foto; - } - - return $person_res; - } - - /** - * gets the mitarbeiter information corresponding to a user - * @access private - * @param integer $uid the userID used to get the mitarbeiter information - * @return array all the mitarbeiter informaion corresponding to a userID - */ - private function getMitarbeiterInfo($uid) - { - $this->MitarbeiterModel->addSelect(["kurzbz", "telefonklappe", "alias", "ort_kurzbz"]); - $this->MitarbeiterModel->addJoin("tbl_benutzer", "tbl_benutzer.uid = tbl_mitarbeiter.mitarbeiter_uid"); - $mitarbeiter_res = $this->MitarbeiterModel->load($uid); - $mitarbeiter_res = $this->getDataOrTerminateWithError($mitarbeiter_res); - $mitarbeiter_res = $mitarbeiter_res ? current($mitarbeiter_res) : null; - - return $mitarbeiter_res; - } - - /** - * gets the telefon information corresponding to a user - * @access private - * @param integer $uid the userID used to get the telefon information - * @return array all the telefon informaion corresponding to a userID - */ - private function getTelefonInfo($uid) - { - $this->MitarbeiterModel->addSelect(["kontakt"]); - $this->MitarbeiterModel->addJoin("tbl_kontakt", "tbl_mitarbeiter.standort_id = tbl_kontakt.standort_id"); - $this->MitarbeiterModel->addLimit(1); - $telefon_res = $this->MitarbeiterModel->loadWhere(["mitarbeiter_uid" => $uid, "kontakttyp" => "telefon"]); - $telefon_res = $this->getDataOrTerminateWithError($telefon_res); - $telefon_res = $telefon_res ? current($telefon_res) : null; - return $telefon_res; - } - - /** - * gets the student information corresponding to a user - * @access private - * @param integer $uid the userID used to get the student information - * @return array all the student informaion corresponding to a userID - */ - private function getStudentInfo($uid) - { - $this->StudentModel->addSelect(['tbl_studiengang.bezeichnung as studiengang', 'tbl_studiengang.studiengang_kz as studiengang_kz', 'tbl_student.semester', 'tbl_student.verband', 'tbl_student.gruppe', 'tbl_student.matrikelnr as personenkennzeichen']); - $this->StudentModel->addJoin('tbl_studiengang', "tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz"); - - $student_res = $this->StudentModel->load([$uid]); - - $student_res = $this->getDataOrTerminateWithError($student_res); - $student_res = $student_res ? current($student_res) : null; - return $student_res; - } - - /** - * gets the profil updates corresponding to a user - * @access private - * @param integer $uid the userID used to get the profil updates - * @return array all the profil updates corresponding to a userID - */ - private function getProfilUpdates($uid) - { - $profilUpdates = $this->ProfilUpdateModel->getProfilUpdatesWhere(['uid' => $uid]); - $profilUpdates = $this->getDataOrTerminateWithError($profilUpdates); - return $profilUpdates; - } - - /** - * gets the Matrikelnummer corresponding to a user - * @access private - * @param integer $uid the userID used to get the Matrikelnummer - * @return integer the Matrikelnummer corresponding to a userID - */ - private function getMatrikelNummer($uid) - { - $this->BenutzerModel->addSelect(["matr_nr"]); - $this->BenutzerModel->addJoin("tbl_person", "person_id"); - - $matr_res = $this->BenutzerModel->load([$uid]); - - $matr_res = $this->getDataOrTerminateWithError($matr_res); - $matr_res = $matr_res ? current($matr_res) : []; - return $matr_res; - } - - /** - * gets the Zutrittsgruppen corresponding to a user - * @access private - * @param integer $uid the userID used to get the Zutrittsgruppen - * @return array all the Zutrittsgruppen corresponding to a userID - */ - private function getZutrittsgruppen($uid) - { - $this->BenutzergruppeModel->addSelect(['bezeichnung']); - $this->BenutzergruppeModel->addJoin('tbl_gruppe', 'gruppe_kurzbz'); - - $zutrittsgruppe_res = $this->BenutzergruppeModel->loadWhere(array("uid" => $uid, "zutrittssystem" => true)); - $zutrittsgruppe_res = $this->getDataOrTerminateWithError($zutrittsgruppe_res); - return $zutrittsgruppe_res; - } - - /** - * gets the address information corresponding to a user - * @access private - * @param integer $uid the userID used to get the address information - * @return array all the address information corresponding to a userID - */ - private function getAdressenInfo($pid) - { - $adresse_res = $this->AdresseModel->addSelect(["adresse_id", "strasse", "tbl_adressentyp.bezeichnung as typ", "plz", "ort", "zustelladresse", "gemeinde", "nation"]); - $adresse_res = $this->AdresseModel->addOrder("zustelladresse", "DESC"); - $adresse_res = $this->AdresseModel->addJoin("tbl_adressentyp", "typ=adressentyp_kurzbz"); - - $adresse_res = $this->AdresseModel->loadWhere(["person_id" => $pid]); - $adresse_res = $this->getDataOrTerminateWithError($adresse_res); - return $adresse_res; - } - - /** - * gets the kontakt information corresponding to a user - * @access private - * @param integer $uid the userID used to get the kontakt information - * @return array all the kontakt information corresponding to a userID - */ - private function getKontaktInfo($pid) - { - $this->KontaktModel->addSelect(['kontakttyp', 'kontakt_id', 'kontakt', 'tbl_kontakt.anmerkung', 'tbl_kontakt.zustellung']); - $this->KontaktModel->addJoin('public.tbl_standort', 'standort_id', 'LEFT'); - $this->KontaktModel->addJoin('public.tbl_firma', 'firma_id', 'LEFT'); - $this->KontaktModel->addOrder('kontakttyp, kontakt, tbl_kontakt.updateamum, tbl_kontakt.insertamum'); - - $kontakte_res = $this->KontaktModel->loadWhere(['person_id' => $pid]); - $kontakte_res = $this->getDataOrTerminateWithError($kontakte_res); - return $kontakte_res; - } - - /** - * gets the date of issue of the FH access card corresponding to a user - * @access private - * @param integer $uid the userID used to get the date of issue of the FH access card - * @return string the date of issue of the FH access card corresponding to a userID - */ - private function getZutrittskarteDatum($uid) - { - $zutrittskarte_ausgegebenam = $this->BetriebsmittelpersonModel->getBetriebsmittelByUid($uid, "Zutrittskarte"); - - $zutrittskarte_ausgegebenam = $this->getDataOrTerminateWithError($zutrittskarte_ausgegebenam); - $zutrittskarte_ausgegebenam = $zutrittskarte_ausgegebenam ? current($zutrittskarte_ausgegebenam)->ausgegebenam : null; - - //? formats date from 01-01-2000 to 01.01.2000 - $zutrittskarte_ausgegebenam = str_replace("-", ".", $zutrittskarte_ausgegebenam); - return $zutrittskarte_ausgegebenam; - } - - /** - * checks whether the foto of a user is accepted or not - * @access private - * @param integer $pid the personId of the student or mitarbeiter - * @return bool whether the foto is accepted or not - */ - private function isFotoAkzeptiert($pid) - { - $this->load->model('person/Fotostatusperson_model','FotostatusModel'); - $fotostatus = $this->FotostatusModel->execReadOnlyQuery(" - select distinct on (person_id) person_id, insertamum, fotostatus_kurzbz - from public.tbl_person_fotostatus - where person_id = ? - order by person_id, insertamum desc",[$pid]); - $fotostatus = $this->getDataOrTerminateWithError($fotostatus); - if(is_array($fotostatus) && count($fotostatus) > 0){ - $fotostatus = current($fotostatus)->fotostatus_kurzbz == 'akzeptiert'; - } - else - $fotostatus = false; - return $fotostatus; - } + } diff --git a/public/js/api/factory/profil.js b/public/js/api/factory/profil.js index 49d0263c6..1d884c714 100644 --- a/public/js/api/factory/profil.js +++ b/public/js/api/factory/profil.js @@ -16,16 +16,15 @@ */ export default { - getView(uid) { - return { - method: 'get', - url: `/api/frontend/v1/Profil/getView/${uid}` - }; - }, + profilViewData(uid) { + let url = "/api/frontend/v1/Profil/profilViewData"; + if(uid){ + url += `/${uid}`; + } return { method: 'get', - url: `/api/frontend/v1/Profil/profilViewData/${uid}` + url: url }; }, fotoSperre(value) {