, Suchi & Berg GmbH * @access public * @modulegroup extern * @module ExternModuleTemplatePersondetails * @package studip_extern */ // +---------------------------------------------------------------------------+ // This file is part of Stud.IP // ExternModuleTemplatePersondetails.class.php // // Copyright (C) 2007 Peter Thienel , // Suchi & Berg GmbH // +---------------------------------------------------------------------------+ // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or any later version. // +---------------------------------------------------------------------------+ // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // +---------------------------------------------------------------------------+ require_once 'lib/user_visible.inc.php'; require_once 'lib/statusgruppe.inc.php'; require_once 'lib/dates.inc.php'; require_once 'lib/extern/views/extern_html_templates.inc.php'; class ExternModuleTemplatePersondetails extends ExternModule { public $markers = []; private $user_id; private $user_perm; private $visibilities; /** * */ public function __construct ($range_id, $module_name, $config_id = NULL, $set_config = NULL, $global_id = NULL) { $this->data_fields = []; if (Config::get()->CALENDAR_ENABLE) { $this->registered_elements = [ 'PersondetailsLectures' => 'PersondetailsLecturesTemplate', 'LinkInternLecturedetails' => 'LinkInternTemplate', 'TemplateMain' => 'TemplateGeneric', 'TemplateLectures' => 'TemplateGeneric', 'TemplateNews' => 'TemplateGeneric', 'TemplateAppointments' => 'TemplateGeneric', 'TemplateOwnCategories' => 'TemplateGeneric' ]; } else { $this->registered_elements = [ 'PersondetailsLectures' => 'PersondetailsLecturesTemplate', 'LinkInternLecturedetails' => 'LinkInternTemplate', 'TemplateMain' => 'TemplateGeneric', 'TemplateLectures' => 'TemplateGeneric', 'TemplateNews' => 'TemplateGeneric', 'TemplateOwnCategories' => 'TemplateGeneric' ]; } if (in_array(get_object_type($range_id), ['global'])) { array_unshift($this->registered_elements, 'SelectInstitutes'); } $this->field_names = []; $this->args = ['username', 'seminar_id', 'group_id']; parent::__construct($range_id, $module_name, $config_id, $set_config, $global_id); } public function setup () { // setup module properties $this->elements['LinkInternLecturedetails']->real_name = _("Link zum Modul Veranstaltungsdetails"); $this->elements['LinkInternLecturedetails']->link_module_type = [4, 13]; $this->elements['PersondetailsLectures']->real_name = _("Einstellungen für Lehrveranstaltungen"); $this->elements['TemplateMain']->real_name = _("Haupttemplate"); $this->elements['TemplateLectures']->real_name = _("Template für Lehrveranstaltungen"); $this->elements['TemplateNews']->real_name = _("Template für News"); if (Config::get()->CALENDAR_ENABLE) { $this->elements['TemplateAppointments']->real_name = _("Template für Termine"); } $this->elements['TemplateOwnCategories']->real_name = _("Template für eigene Kategorien"); if (in_array(get_object_type($this->config->range_id), ['global'])) { $this->elements['SelectInstitutes']->real_name = _("Einschränkung auf Institute/Einrichtungen"); } } public function toStringEdit ($open_elements = '', $post_vars = '', $faulty_values = '', $anker = '') { $this->updateGenericDatafields('TemplateMain', 'user'); $this->updateGenericDatafields('TemplateMain', 'userinstrole'); $this->elements['TemplateMain']->markers = $this->getMarkerDescription('TemplateMain'); $this->elements['TemplateLectures']->markers = $this->getMarkerDescription('TemplateLectures'); if (Config::get()->CALENDAR_ENABLE) { $this->elements['TemplateAppointments']->markers = $this->getMarkerDescription('TemplateAppointments'); } $this->elements['TemplateNews']->markers = $this->getMarkerDescription('TemplateNews'); $this->elements['TemplateOwnCategories']->markers = $this->getMarkerDescription('TemplateOwnCategories'); return parent::toStringEdit($open_elements, $post_vars, $faulty_values, $anker); } public function getMarkerDescription ($element_name) { $markers['TemplateMain'][] = ['__GLOBAL__', _("Globale Variablen (gültig im gesamten Template).")]; $markers['TemplateMain'][] = ['###STUDIP-EDIT-HREF###', '']; $markers['TemplateMain'][] = ['', '']; $markers['TemplateMain'][] = ['###FULLNAME###', '']; $markers['TemplateMain'][] = ['###LASTNAME###', '']; $markers['TemplateMain'][] = ['###FIRSTNAME###', '']; $markers['TemplateMain'][] = ['###TITLEFRONT###', '']; $markers['TemplateMain'][] = ['###TITLEREAR###', '']; $markers['TemplateMain'][] = ['###USERNAME###', '']; $markers['TemplateMain'][] = ['###STATUSGROUPS###', _("Kommaseparierte Liste mit Statusgruppen")]; $markers['TemplateMain'][] = ['###IMAGE-HREF###', '']; $markers['TemplateMain'][] = ['###INST-NAME###', '']; $markers['TemplateMain'][] = ['###INST-HREF###', '']; $markers['TemplateMain'][] = ['###STREET###', '']; $markers['TemplateMain'][] = ['###ZIPCODE###', '']; $markers['TemplateMain'][] = ['###EMAIL###', '']; $markers['TemplateMain'][] = ['###EMAIL-LOCAL###', _("Der local-part der E-Mail-Adresse (vor dem @-Zeichen)")]; $markers['TemplateMain'][] = ['###EMAIL-DOMAIN###', _("Der domain-part der E-Mail-Adresse (nach dem @-Zeichen)")]; $markers['TemplateMain'][] = ['###ROOM###', '']; $markers['TemplateMain'][] = ['###PHONE###', '']; $markers['TemplateMain'][] = ['###FAX###', '']; $markers['TemplateMain'][] = ['###HOMEPAGE-HREF###', '']; $markers['TemplateMain'][] = ['###OFFICE-HOURS###', '']; $markers['TemplateMain'][] = ['###RESEARCH-INTERESTS###', '']; $markers['TemplateMain'][] = ['###CV###', _("Lebenslauf")]; $markers['TemplateMain'][] = ['###PUBLICATIONS###', '']; $markers['TemplateMain'][] = ['###OFFICE-HOURS###', '']; $markers['TemplateMain'][] = ['', '']; $markers['TemplateMain'][] = ['', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-NAME###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-HREF###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-STREET###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-ZIPCODE###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-EMAIL###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-EMAIL-LOCAL###', _("Der local-part der E-Mail-Adresse (vor dem @-Zeichen)")]; $markers['TemplateMain'][] = ['###SINGLE-INST-EMAIL-DOMAIN###', _("Der domain-part der E-Mail-Adresse (nach dem @-Zeichen)")]; $markers['TemplateMain'][] = ['###SINGLE-INST-ROOM###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-PHONE###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-FAX###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-HOMEPAGE-HREF###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-OFFICE-HOURS###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-RESEARCH-INTERESTS###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-CV###', _("Lebenslauf")]; $markers['TemplateMain'][] = ['###SINGLE-INST-PUBLICATIONS###', '']; $markers['TemplateMain'][] = ['###SINGLE-INST-OFFICE-HOURS###', '']; $markers['TemplateMain'][] = ['', '']; $markers['TemplateMain'][] = ['', '']; $this->insertDatafieldMarkers('user', $markers, 'TemplateMain'); $this->insertDatafieldMarkers('userinstrole', $markers, 'TemplateMain'); $this->insertPluginMarkers('HomepagePlugin', $markers, 'TemplateMain'); $markers['TemplateMain'][] = ['###LECTURES###', _("Inhalt aus dem Template für Veranstaltungen")]; $markers['TemplateMain'][] = ['###NEWS###', _("Inhalt aus dem Template für News")]; $markers['TemplateMain'][] = ['###APPOINTMENTS###', _("Inhalt aus dem Template für Termine")]; $markers['TemplateMain'][] = ['###OWNCATEGORIES###', _("Inhalt aus dem Template für eigene Kategorien")]; $markers['TemplateMain'][] = ['', '']; $markers['TemplateLectures'][] = ['', '']; $markers['TemplateLectures'][] = ['', '']; $markers['TemplateLectures'][] = ['###NAME###', '']; $markers['TemplateLectures'][] = ['', '']; $markers['TemplateLectures'][] = ['###TITLE###', '']; $markers['TemplateLectures'][] = ['###SUBTITLE###', '']; $markers['TemplateLectures'][] = ['###NUMBER###', _("Die Veranstaltungsnummer")]; $markers['TemplateLectures'][] = ['###LECTUREDETAILS-HREF###', '']; $markers['TemplateLectures'][] = ['', '']; $markers['TemplateLectures'][] = ['', '']; $markers['TemplateLectures'][] = ['', '']; $markers['TemplateNews'][] = ['', '']; $markers['TemplateNews'][] = ['', '']; $markers['TemplateNews'][] = ['###NEWS_NO-NEWS-TEXT###', '']; $markers['TemplateNews'][] = ['', '']; $markers['TemplateNews'][] = ['', '']; $markers['TemplateNews'][] = ['', '']; $markers['TemplateNews'][] = ['###NEWS_TOPIC###', '']; $markers['TemplateNews'][] = ['###NEWS_BODY###', '']; $markers['TemplateNews'][] = ['###NEWS_DATE###', '']; $markers['TemplateNews'][] = ['###NEWS_ADMIN-MESSAGE###', '']; $markers['TemplateNews'][] = ['###NEWS_NO###', '']; $markers['TemplateNews'][] = ['', '']; $markers['TemplateNews'][] = ['', '']; $markers['TemplateNews'][] = ['', '']; if (Config::get()->CALENDAR_ENABLE) { $markers['TemplateAppointments'][] = ['', '']; $markers['TemplateAppointments'][] = ['###LIST-START###', _("Startdatum der Terminliste")]; $markers['TemplateAppointments'][] = ['###LIST-END###', _("Enddatum der Terminliste")]; $markers['TemplateAppointments'][] = ['', '']; $markers['TemplateAppointments'][] = ['###NO-APPOINTMENTS-TEXT###', '']; $markers['TemplateAppointments'][] = ['', '']; $markers['TemplateAppointments'][] = ['', '']; $markers['TemplateAppointments'][] = ['', '']; $markers['TemplateAppointments'][] = ['###DATE###', _("Start und Endzeit oder ganztägig")]; $markers['TemplateAppointments'][] = ['###BEGIN###', '']; $markers['TemplateAppointments'][] = ['###END###', '']; $markers['TemplateAppointments'][] = ['###TITLE###', '']; $markers['TemplateAppointments'][] = ['###DESCRIPTION###', '']; $markers['TemplateAppointments'][] = ['###LOCATION###', '']; $markers['TemplateAppointments'][] = ['###REPETITION###', '']; $markers['TemplateAppointments'][] = ['###CATEGORY###', '']; $markers['TemplateAppointments'][] = ['###PRIORITY###', '']; $markers['TemplateAppointments'][] = ['', '']; $markers['TemplateAppointments'][] = ['', '']; $markers['TemplateAppointments'][] = ['', '']; } $markers['TemplateOwnCategories'][] = ['', '']; $markers['TemplateOwnCategories'][] = ['', '']; $markers['TemplateOwnCategories'][] = ['###OWNCATEGORY_TITLE###', '']; $markers['TemplateOwnCategories'][] = ['###OWNCATEGORY_CONTENT###', '']; $markers['TemplateOwnCategories'][] = ['###OWNCATEGORY_NO###', _("Laufende Nummer")]; $markers['TemplateOwnCategories'][] = ['', '']; $markers['TemplateOwnCategories'][] = ['', '']; return $markers[$element_name]; } private function getContent ($args = NULL, $raw = FALSE) { $instituts_id = $this->config->range_id; $username = $args['username']; $sem_id = $args['seminar_id']; $group_id = $args['group_id']; if (!$nameformat = $this->config->getValue('Main', 'nameformat')) { $nameformat = 'full'; } $row = false; $global_view = false; $dbv = new DbView(); if (in_array(get_object_type($this->config->range_id), ['global'])) { $global_view = true; $selected_item_ids = $this->config->getValue('SelectInstitutes', 'institutesselected'); // at least one institute has to be selected in the configuration if (!is_array($selected_item_ids)) { // default to always show user for now } else if ($this->config->getValue('Main', 'onlylecturers')) { // is user lecturer ? $current_semester = get_sem_num(time()); $stm = DBManager::get()->prepare(sprintf( "SELECT aum.user_id " . "FROM auth_user_md5 aum " . "LEFT JOIN seminar_user su USING(user_id) " . "LEFT JOIN seminare s USING (seminar_id) " . "LEFT JOIN user_inst ui ON aum.user_id = ui.user_id " . "WHERE aum.username = ? " . "AND su.status = 'dozent' " . "AND s.visible = 1 " . "AND ((%s) = %s OR ((%s) <= %s AND ((%s) >= %s OR (%s) = -1))) " . "AND ui.Institut_id IN ('%s') " . "AND ui.inst_perms = 'dozent' " . "AND ui.externdefault = 1 " . "AND %s", $dbv->sem_number_sql, $current_semester, $dbv->sem_number_sql, $current_semester, $dbv->sem_number_end_sql, $current_semester, $dbv->sem_number_end_sql, implode("','", $selected_item_ids), get_ext_vis_query())); $stm->execute([$username]); // user is not a lecturer if (!$stm->fetch()) { return []; } } else { // have user the status dozent at an institute in the list of accepted institutes $stm = DBManager::get()->prepare(sprintf( "SELECT aum.user_id " . "FROM auth_user_md5 aum " . "LEFT JOIN user_inst ui USING(user_id) " . "WHERE aum.username = ? " . "AND ui.Institut_id IN ('%s') " . "AND ui.externdefault = 1 " . "AND %s", implode("','", $selected_item_ids), get_ext_vis_query())); $stm->execute([$username]); // user is not dozent at an institute that is in the list of accepted institutes if (!$stm->fetch()) { return []; } } } // Mitarbeiter/in am Institut $stm_inst = DBManager::get()->prepare( "SELECT i.Institut_id " . "FROM Institute i " . "LEFT JOIN user_inst ui USING(Institut_id) " . "LEFT JOIN auth_user_md5 aum USING(user_id) " . "WHERE i.Institut_id = ? " . "AND aum.username = ? AND ui.inst_perms IN ('autor','tutor','dozent') AND " . get_ext_vis_query()); $stm_inst->execute([$instituts_id, $username]); // Mitarbeiter/in am Heimatinstitut des Seminars if (!$row = $stm_inst->fetch(PDO::FETCH_ASSOC) && $sem_id) { $stm_inst = DBManager::get()->prepare( "SELECT s.Institut_id " . "FROM seminare s " . "LEFT JOIN user_inst ui USING(Institut_id) " . "LEFT JOIN auth_user_md5 aum USING(user_id) " . "WHERE s.Seminar_id = ? " . "AND aum.username = ? AND ui.inst_perms = 'dozent' AND " . get_ext_vis_query()); $stm_inst->execute([$sem_id, $username]); if ($row = $stm_inst->fetch(PDO::FETCH_ASSOC)) { $instituts_id = $row['Institut_id']; } } // an beteiligtem Institut Dozent(in) if (!$row && $sem_id) { $stm_inst = DBManager::get()->prepare( "SELECT si.institut_id " . "FROM seminare s " . "LEFT JOIN seminar_inst si ON(s.Seminar_id = si.seminar_id) " . "LEFT JOIN user_inst ui ON(si.institut_id = ui.Institut_id) " . "LEFT JOIN auth_user_md5 aum USING(user_id) " . "WHERE s.Seminar_id = ? " . "AND si.institut_id != ? AND ui.inst_perms = 'dozent' AND aum.username = ? AND " . get_ext_vis_query()); $stm_inst->execute([$sem_id, $instituts_id, $username]); if ($row = $stm_inst->fetch(PDO::FETCH_ASSOC)) { $instituts_id = $row['institut_id']; } } // ist zwar global Dozent, aber an keinem Institut eingetragen if (!$row && $sem_id) { $stm = DBManager::get()->prepare(sprintf( "SELECT aum.*, %s AS fullname " . "FROM auth_user_md5 aum " . "LEFT JOIN user_info USING(user_id) " . "LEFT JOIN seminar_user su " . "WHERE username = ? " . "AND perms = 'dozent' AND su.seminar_id = ? AND su.status = 'dozent' AND %s" , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query())); $stm->execute([$username, $sem_id]); $row = $stm->fetch(PDO::FETCH_ASSOC); } elseif ($global_view || $this->config->getValue('Main', 'defaultaddr')) { $stm = DBManager::get()->prepare(sprintf( "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, " . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, " . "uin.Home, uin.title_front, uin.title_rear " . "FROM Institute i " . "LEFT JOIN user_inst ui USING(Institut_id) " . "LEFT JOIN auth_user_md5 aum USING(user_id) " . "LEFT JOIN user_info uin USING (user_id) " . "WHERE ui.inst_perms IN ('autor','tutor','dozent') " . "AND aum.username = ? AND ui.externdefault = 1 AND %s" , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query())); $stm->execute([$username]); $row = $stm->fetch(PDO::FETCH_ASSOC); if (!$row) { $stm = DBManager::get()->prepare(sprintf( "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, " . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, " . "uin.Home, uin.title_front, uin.title_rear " . "FROM Institute i " . "LEFT JOIN user_inst ui USING(Institut_id) " . "LEFT JOIN auth_user_md5 aum USING(user_id) " . "LEFT JOIN user_info uin USING (user_id) " . "WHERE ui.inst_perms IN ('autor','tutor','dozent') " . "AND aum.username = ? AND i.Institut_id = ? AND %s" , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query())); $stm->execute([$username, $instituts_id]); $row = $stm->fetch(PDO::FETCH_ASSOC); } else { $instituts_id = $row['Institut_id']; } } else { $stm = DBManager::get()->prepare(sprintf( "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, " . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, " . "uin.Home, uin.title_front, uin.title_rear " . "FROM Institute i " . "LEFT JOIN user_inst ui USING(Institut_id) " . "LEFT JOIN auth_user_md5 aum USING(user_id) " . "LEFT JOIN user_info uin USING (user_id) " . "WHERE ui.inst_perms IN ('autor','tutor','dozent') " . "AND aum.username = ? AND i.Institut_id = ? AND %s" , $GLOBALS['_fullname_sql'][$nameformat], get_ext_vis_query())); $stm->execute([$username, $instituts_id]); $row = $stm->fetch(PDO::FETCH_ASSOC); } // the user with the given username does not fulfill the conditions above if (!$row) { return []; } // Alle Einrichtungen hohlen $stm = DBManager::get()->prepare(sprintf( "SELECT i.Institut_id, i.Name, i.Strasse, i.Plz, i.url, ui.*, aum.*, " . "%s AS fullname, uin.user_id, uin.lebenslauf, uin.publi, uin.schwerp, " . "uin.Home, uin.title_front, uin.title_rear " . "FROM Institute i " . "LEFT JOIN user_inst ui USING(Institut_id) " . "LEFT JOIN auth_user_md5 aum USING(user_id) " . "LEFT JOIN user_info uin USING (user_id) " . "WHERE ui.inst_perms IN ('autor','tutor','dozent') " . "AND aum.username = ? " . "AND ui.`visible` = 1 " . "ORDER BY ui.`externdefault` DESC, ui. `priority` ASC, i.`Name` ASC" , $GLOBALS['_fullname_sql'][$nameformat])); $stm->execute([$username]); $allRows = $stm->fetchAll(); $this->user_id = $row['user_id']; $content['__GLOBAL__']['STUDIP-EDIT-HREF'] = "{$GLOBALS['ABSOLUTE_URI_STUDIP']}dispatch.php/settings/account?username=$username&login=yes"; $content['PERSONDETAILS']['FULLNAME'] = ExternModule::ExtHtmlReady($row['fullname']); $content['PERSONDETAILS']['LASTNAME'] = ExternModule::ExtHtmlReady($row['Nachname']); $content['PERSONDETAILS']['FIRSTNAME'] = ExternModule::ExtHtmlReady($row['Vorname']); $content['PERSONDETAILS']['TITLEFRONT'] = ExternModule::ExtHtmlReady($row['title_front']); $content['PERSONDETAILS']['TITLEREAR'] = ExternModule::ExtHtmlReady($row['title_rear']); if ($statusgroups = Statusgruppen::getUserRoles($instituts_id, $this->user_id)) { $content['PERSONDETAILS']['STATUSGROUPS'] = ExternModule::ExtHtmlReady(join(', ', array_values($statusgroups))); } $content['PERSONDETAILS']['USERNAME'] = $row['username']; $content['PERSONDETAILS']['IMAGE-HREF'] = Avatar::getAvatar($this->user_id)->getURL(Avatar::NORMAL); $gruppen = GetRoleNames(GetAllStatusgruppen($this->config->range_id, $row['user_id'])) ?? []; if ($gruppen) { for ($i = 0; $i < count($gruppen); $i++) { $content['PERSONDETAILS']['GROUPS'][$i]['GROUP'] = ExternModule::ExtHtmlReady($gruppen[$i]); } } $content['PERSONDETAILS']['INST-NAME'] = ExternModule::ExtHtmlReady($row['Name']); $content['PERSONDETAILS']['INST-HREF'] = ExternModule::ExtHtmlReady(trim($row['url'])); $content['PERSONDETAILS']['STREET'] = ExternModule::ExtHtmlReady($row['Strasse']); $content['PERSONDETAILS']['ZIPCODE'] = ExternModule::ExtHtmlReady($row['Plz']); $email = get_visible_email($this->user_id); $content['PERSONDETAILS']['EMAIL'] = ExternModule::ExtHtmlReady($email); $emails = explode('@', $content['PERSONDETAILS']['EMAIL']); $content['PERSONDETAILS']['EMAIL-LOCAL'] = array_shift($emails); $emails = explode('@', $content['PERSONDETAILS']['EMAIL']); $content['PERSONDETAILS']['EMAIL-DOMAIN'] = array_pop($emails); $content['PERSONDETAILS']['ROOM'] = ExternModule::ExtHtmlReady($row['raum']); $content['PERSONDETAILS']['PHONE'] = ExternModule::ExtHtmlReady($row['Telefon']); $content['PERSONDETAILS']['FAX'] = ExternModule::ExtHtmlReady($row['Fax']); if (Visibility::verify('homepage', $this->user_id)) { $content['PERSONDETAILS']['HOMEPAGE-HREF'] = ExternModule::ExtHtmlReady(trim($row['Home'])); } $content['PERSONDETAILS']['OFFICE-HOURS'] = ExternModule::ExtHtmlReady($row['sprechzeiten']); $j = 0; foreach($allRows as $curRow) { $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-NAME'] = ExternModule::ExtHtmlReady($curRow['Name']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-HREF'] = ExternModule::ExtHtmlReady(trim($curRow['url'])); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-STREET'] = ExternModule::ExtHtmlReady($curRow['Strasse']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-ZIPCODE'] = ExternModule::ExtHtmlReady($curRow['Plz']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL'] = ExternModule::ExtHtmlReady($curRow['Email']); $emails = explode('@', $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL-LOCAL'] = array_shift($emails); $emails = explode('@', $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL-DOMAIN'] = array_pop($emails); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-ROOM'] = ExternModule::ExtHtmlReady($curRow['raum']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-PHONE'] = ExternModule::ExtHtmlReady($curRow['Telefon']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-FAX'] = ExternModule::ExtHtmlReady($curRow['Fax']); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-HOMEPAGE-HREF'] = ExternModule::ExtHtmlReady(trim($curRow['Home'])); $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-OFFICE-HOURS'] = ExternModule::ExtHtmlReady($curRow['sprechzeiten']); $j++; } // generic data fields if ($generic_datafields = $this->config->getValue('TemplateMain', 'genericdatafields')) { $localEntries = DataFieldEntry::getDataFieldEntries($this->user_id, 'user'); $k = 1; foreach ($generic_datafields as $datafield) { if (isset($localEntries[$datafield]) && is_object($localEntries[$datafield]) && Visibility::verify($localEntries[$datafield]->getId(), $this->user_id)) { if ($localEntries[$datafield]->getType() == 'link') { $localEntry = ExternModule::extHtmlReady($localEntries[$datafield]->getValue()); } else { $localEntry = $localEntries[$datafield]->getDisplayValue(); } if ($localEntry) { $content['PERSONDETAILS']["DATAFIELD_$k"] = $localEntry; } } $k++; } $localEntries = DataFieldEntry::getDataFieldEntries([$this->user_id, $instituts_id], 'userinstrole'); if (isset($group_id)) { $roleEntries = DataFieldEntry::getDataFieldEntries([$this->user_id, $group_id], 'userinstrole'); $roleEntries = array_filter($roleEntries, function($val) { return $val->getValue() !== 'default_value'; }); $localEntries = $roleEntries + $localEntries; } $k = 1; foreach ($generic_datafields as $datafield) { if (isset($localEntries[$datafield]) && is_object($localEntries[$datafield])) { $localEntry = $localEntries[$datafield]->getDisplayValue(); if ($localEntry) { $content['PERSONDETAILS']["DATAFIELD_$k"] = $localEntry; } } $k++; } } // homepage plugins $plugins = PluginEngine::getPlugins('HomepagePlugin'); foreach ($plugins as $plugin) { $template = $plugin->getHomepageTemplate($this->user_id); if ($template) { $keyname = 'PLUGIN_' . mb_strtoupper($plugin->getPluginName()); $content['PERSONDETAILS'][$keyname] = $template->render(); } } if (Visibility::verify('lebenslauf', $this->user_id)) { $content['PERSONDETAILS']['CV'] = ExternModule::ExtFormatReady($row['lebenslauf']); } if (Visibility::verify('schwerp', $this->user_id)) { $content['PERSONDETAILS']['RESEARCH-INTERESTS'] = ExternModule::ExtFormatReady($row['schwerp']); } if (Visibility::verify('publi', $this->user_id)) { $content['PERSONDETAILS']['PUBLICATIONS'] = ExternModule::ExtFormatReady($row['publi']); } $content['PERSONDETAILS']['LECTURES'] = $this->elements['TemplateLectures']->toString(['content' => $this->getContentLectures(), 'subpart' => 'LECTURES']); if (Visibility::verify('news', $this->user_id)) { $content['PERSONDETAILS']['NEWS'] = $this->elements['TemplateNews']->toString(['content' => $this->getContentNews(), 'subpart' => 'NEWS']); } if (Visibility::verify('dates', $this->user_id)) { $content['PERSONDETAILS']['APPOINTMENTS'] = $this->elements['TemplateAppointments']->toString(['content' => $this->getContentAppointments(), 'subpart' => 'APPOINTMENTS']); } $content['PERSONDETAILS']['OWNCATEGORIES'] = $this->elements['TemplateOwnCategories']->toString(['content' => $this->getContentOwnCategories(), 'subpart' => 'OWNCATEGORIES']); return $content; } private function getContentOwnCategories () { $stm = DBManager::get()->prepare( "SELECT kategorie_id, name, content " . "FROM kategorien " . "WHERE range_id = ? " . "ORDER BY priority"); $stm->execute([$this->user_id]); $i = 0; while ($row = $stm->fetch(PDO::FETCH_ASSOC)) { if (Visibility::verify('kat_'.$row['kategorie_id'], $this->user_id)) { $content['OWNCATEGORIES']['OWNCATEGORY'][$i]['OWNCATEGORY_TITLE'] = ExternModule::ExtHtmlReady($row['name']); $content['OWNCATEGORIES']['OWNCATEGORY'][$i]['OWNCATEGORY_CONTENT'] = ExternModule::ExtFormatReady($row['content']); $content['OWNCATEGORIES']['OWNCATEGORY'][$i]['OWNCATEGORY_NO'] = $i + 1; $i++; } } return $content; } private function getContentNews () { $dateform = $this->config->getValue('Main', 'dateformat'); $news = StudipNews::GetNewsByRange($this->user_id, TRUE); if (!count($news)) { $content['NEWS']['NO-NEWS']['NEWS_NO-NEWS-TEXT'] = $this->config->getValue('Main', 'nodatatext'); } else { $i = 0; foreach ($news as $news_id => $news_detail) { $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['NEWS_BODY'] = ExternModule::ExtFormatReady((string) $news_detail->body); $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['NEWS_DATE'] = strftime($dateform, $news_detail->date); $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['NEWS_TOPIC'] = ExternModule::ExtHtmlReady((string) $news_detail->topic); $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['NEWS_NO'] = $i + 1; $i++; } } return $content; } private function getContentAppointments () { if (Config::get()->CALENDAR_ENABLE) { $events = SingleCalendar::getEventList($this->user_id, time(), time() + 60 * 60 * 24 * 7, null, ['class' => 'PUBLIC'], ['CalendarEvent']); $content['APPOINTMENTS']['LIST-START'] = ExternModule::ExtHtmlReady(strftime($this->config->getValue('Main', 'dateformat') . ' %X', time())); $content['APPOINTMENTS']['LIST-END'] = ExternModule::ExtHtmlReady(strftime($this->config->getValue('Main', 'dateformat') . ' %X', time() + 60 * 60 * 24 * 7)); if (sizeof($events)) { $i = 0; foreach ($events as $event) { if ($event->isDayEvent()) { $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['DATE'] = ExternModule::ExtHtmlReady(strftime($this->config->getValue('Main', 'dateformat'), $event->getStart()) . ' (' . _("ganztägig") . ')'); } else { $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['DATE'] = ExternModule::ExtHtmlReady(strftime($this->config->getValue('Main', 'dateformat') . " %X", $event->getStart())); if (date("dmY", $event->getStart()) == date("dmY", $event->getEnd())) { $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['DATE'] .= ExternModule::ExtHtmlReady(strftime(" - %X", $event->getEnd())); } else { $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['DATE'] .= ExternModule::ExtHtmlReady(strftime(" - " . $this->config->getValue('Main', 'dateformat') . " %X", $event->getEnd())); } } $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['TITLE'] = ExternModule::ExtHtmlReady($event->getTitle()); $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['DESCRIPTION'] = ExternModule::ExtHtmlReady($event->getDescription()); $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['LOCATION'] = ExternModule::ExtHtmlReady($event->getLocation()); $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['REPETITION'] = ExternModule::ExtHtmlReady($event->toStringRecurrence()); $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['CATEGORY'] = ExternModule::ExtHtmlReady($event->toStringCategories()); $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['PRIORITY'] = ExternModule::ExtHtmlReady($event->toStringPriority()); $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['START'] = ExternModule::ExtHtmlReady(strftime($this->config->getValue('Main', 'dateformat') . " %X", $event->getStart())); $content['APPOINTMENTS']['ALL-APPOINTMENTS']['SINGLE-APPOINTMENT'][$i]['END'] = ExternModule::ExtHtmlReady(strftime($this->config->getValue('Main', 'dateformat') . " %X", $event->getEnd())); $i++; } } else { $content['APPOINTMENTS']['NO-APPOINTMENTS']['NO-APPOINTMENTS_TEXT'] = $this->config->getValue('Main', 'noappointmentstext'); } return $content; } return NULL; } private function getContentLectures () { global $attr_text_td, $end, $start; $all_semester = Semester::findAllVisible(false); // old hard coded $SEMESTER-array starts with index 1 array_unshift($all_semester, 0); $types = []; $semclass = $this->config->getValue('PersondetailsLectures', 'semclass'); if (is_null($semclass)) { $semclass = [1]; } // Is a semester switch defined? $week_offset = $this->config->getValue('PersondetailsLectures', 'semswitch'); if (ctype_digit($week_offset)) { $switch_time = strtotime("+{$week_offset} weeks 0:00:00"); } else { $switch_time = strtotime('0:00:00'); } // get current semester $current_sem = get_sem_num($switch_time) + 1; switch ($this->config->getValue("PersondetailsLectures", "semstart")) { case "previous" : if (isset($all_semester[$current_sem - 1])) { $current_sem--; } break; case "next" : if (isset($all_semester[$current_sem + 1])) { $current_sem++; } break; case "current" : break; default : if (isset($all_semester[$this->config->getValue("PersondetailsLectures", "semstart")])) { $current_sem = $this->config->getValue("PersondetailsLectures", "semstart"); } } $last_sem = $current_sem - 1; $sem_offset = $this->config->getValue("PersondetailsLectures", "semrange"); if ($sem_offset && ctype_digit($sem_offset)) { $last_sem += $sem_offset; } if ($last_sem < $current_sem) { $last_sem = $current_sem; } if (!isset($all_semester[$last_sem])) { $last_sem = sizeof($all_semester) - 1; } $types = []; $semclass = $this->config->getValue('PersondetailsLectures', 'semclass'); if (is_null($semclass)) { $semclass = [1]; } foreach ($GLOBALS["SEM_TYPE"] as $key => $type) { if (in_array($type["class"], $semclass)) { $types[] = $key; } } $stm = DBManager::get()->prepare( "SELECT s.Name, s.Seminar_id, s.Untertitel, s.VeranstaltungsNummer " . "FROM seminar_user su " . "LEFT JOIN seminare s USING(seminar_id) " . "LEFT JOIN semester_courses ON (semester_courses.course_id = s.Seminar_id) " . "WHERE user_id = ? " . "AND su.status LIKE 'dozent' " . "AND start_time <= ? AND (semester_courses.semester_id IS NULL OR semester_courses.semester_id = ?) " . "AND s.status IN (?) AND s.visible = 1 " . "ORDER BY Name"); $i = 0; for (;$current_sem <= $last_sem; $last_sem--) { $stm->execute([$this->user_id, $all_semester[$last_sem]['beginn'], $all_semester[$last_sem]['semester_id'], $types ?: '']); $result = $stm->fetchAll(); if ($result && sizeof($result)) { if (!($this->config->getValue('PersondetailsLectures', 'semstart') == 'current' && $this->config->getValue('PersondetailsLectures', 'semrange') == 1)) { $month = date('n', $all_semester[$last_sem]['beginn']); if ($month > 9) { $content['LECTURES']['SEMESTER'][$i]['NAME'] = $this->config->getValue('PersondetailsLectures', 'aliaswise') . date(' Y/', $all_semester[$last_sem]['beginn']) . date('y', $all_semester[$last_sem]['ende']); } else if ($month > 3 && $month < 10) { $content['LECTURES']['SEMESTER'][$i]['NAME'] = $this->config->getValue('PersondetailsLectures', 'aliassose') . date(' Y', $all_semester[$last_sem]['beginn']); } } $k = 0; foreach ($result as $row) { $content['LECTURES']['SEMESTER'][$i]['LECTURE'][$k]['TITLE'] = ExternModule::ExtHtmlReady($row['Name']); $content['LECTURES']['SEMESTER'][$i]['LECTURE'][$k]['LECTUREDETAILS-HREF'] = $this->elements['LinkInternLecturedetails']->createUrl(['link_args' => 'seminar_id=' . $row['Seminar_id']]); if (trim($row['Untertitel']) != '') { $content['LECTURES']['SEMESTER'][$i]['LECTURE'][$k]['SUBTITLE'] = ExternModule::ExtHtmlReady($row['Untertitel']); } if (trim($row['VeranstaltungsNummer']) != '') { $content['LECTURES']['SEMESTER'][$i]['LECTURE'][$k]['NUMBER'] = ExternModule::ExtHtmlReady($row['VeranstaltungsNummer']); } $k++; } } $i++; } return $content; } public function printout ($args) { if (!$language = $this->config->getValue("Main", "language")) $language = "de_DE"; init_i18n($language); echo $this->elements['TemplateMain']->toString(['content' => $this->getContent($args), 'subpart' => 'PERSONDETAILS']); } public function printoutPreview () { if (!$language = $this->config->getValue("Main", "language")) $language = "de_DE"; init_i18n($language); echo $this->elements['TemplateMain']->toString(['content' => $this->getContent(), 'subpart' => 'PERSONDETAILS', 'hide_markers' => FALSE]); } } ?>