function getContentResult($level_id = null)
 {
     global $_fullname_sql, $SEM_TYPE, $SEM_CLASS;
     $content = null;
     if (is_array($this->sem_browse_data['search_result']) && count($this->sem_browse_data['search_result'])) {
         list($group_by_data, $sem_data) = $this->getResult($level_id);
         if (count($sem_data)) {
             $content['__GLOBAL__']['COURSES_COUNT'] = count($sem_data);
             $content['__GLOBAL__']['COURSES_GROUPING'] = $this->group_by_fields[$this->sem_browse_data['group_by']]['name'];
             $group_by_name = $this->config->getValue('Main', 'aliasesgrouping');
             $content['__GLOBAL__']['COURSES_SUBSTITUTE-GROUPED-BY'] = $group_by_name[$this->sem_browse_data['group_by']];
             $content['__GLOBAL__']['XLS_EXPORT-HREF'] = $this->getLinkToSelf(array('xls_export' => '1'), true);
             $content['__GLOBAL__']['GROUP_BY_TYPE-HREF'] = $this->getLinkToSelf(array('group_by' => '3'), true);
             $content['__GLOBAL__']['GROUP_BY_SEMESTER-HREF'] = $this->getLinkToSelf(array('group_by' => '0'), true);
             $content['__GLOBAL__']['GROUP_BY_RANGE-HREF'] = $this->getLinkToSelf(array('group_by' => '1'), true);
             $content['__GLOBAL__']['GROUP_BY_LECTURER-HREF'] = $this->getLinkToSelf(array('group_by' => '2'), true);
             $content['__GLOBAL__']['GROUP_BY_INSTITUTE-HREF'] = $this->getLinkToSelf(array('group_by' => '4'), true);
             $content['__GLOBAL__'] = array_merge($content['__GLOBAL__'], $this->global_markers);
             $j = 0;
             $semester = SemesterData::GetSemesterArray();
             foreach ($group_by_data as $group_field => $sem_ids) {
                 switch ($this->sem_browse_data['group_by']) {
                     case 0:
                         ExternModule::ExtHtmlReady($content['RESULT']['GROUP'][$j]['GROUP_NAME'] = $semester[$group_field]['name']);
                         break;
                     case 1:
                         if (!is_object($this->sem_tree)) {
                             $this->sem_tree = TreeAbstract::GetInstance("StudipSemTree");
                         }
                         if ($this->sem_tree->tree_data[$group_field]) {
                             $range_path_level = $this->config->getValue('Main', 'rangepathlevel');
                             $content['RESULT']['GROUP'][$j]['GROUP_NAME'] = ExternModule::ExtHtmlReady($this->sem_tree->getShortPath($group_field, NULL, '>', $range_path_level ? $range_path_level - 1 : 0));
                             /*
                             if ($this->sem_tree->isModuleItem($group_field) && $studienmodulmanagement = PluginEngine::getPlugin('StudienmodulManagement')) {
                                 $content['RESULT']['GROUP'][$j]['GROUP_INFO'] = $studienmodulmanagement->getModuleDescription($group_field, SemesterData::GetSemesterIdByIndex($this->sem_browse_data['sem']));
                             } else {
                             */
                             $content['RESULT']['GROUP'][$j]['NO_GROUP_INFO'] = true;
                             //  }
                         } else {
                             $content['RESULT']['GROUP'][$j]['NO_GROUP_NAME'] = true;
                         }
                         break;
                     case 3:
                         $aliases_sem_type = $this->config->getValue('ReplaceTextSemType', "class_{$SEM_TYPE[$group_field]['class']}");
                         if ($aliases_sem_type[$this->sem_types_position[$group_field] - 1]) {
                             $content['RESULT']['GROUP'][$j]['GROUP_NAME'] = $aliases_sem_type[$this->sem_types_position[$group_field] - 1];
                         } else {
                             $content['RESULT']['GROUP'][$j]['GROUP_NAME'] = ExternModule::ExtHtmlReady($SEM_TYPE[$group_field]['name'] . ' (' . $SEM_CLASS[$SEM_TYPE[$group_field]['class']]['name'] . ')');
                         }
                         break;
                     default:
                         $content['RESULT']['GROUP'][$j]['GROUP_NAME'] = ExternModule::ExtHtmlReady($group_field);
                 }
                 $content['RESULT']['GROUP'][$j]['GROUP-NO'] = $j + 1;
                 if (is_array($sem_ids['Seminar_id'])) {
                     $k = 0;
                     $semester = SemesterData::GetSemesterArray();
                     while (list($seminar_id, ) = each($sem_ids['Seminar_id'])) {
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['COURSE_ID'] = $seminar_id;
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['TITLE'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['Name']));
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['COURSE-NO'] = $k + 1;
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['COURSEDETAILS-HREF'] = $this->elements['LinkInternLecturedetails']->createUrl(array('link_args' => 'seminar_id=' . $seminar_id));
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['COURSE_NUMBER'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['VeranstaltungsNummer']));
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['DESCRIPTION'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['Beschreibung']), true);
                         $sem_number_start = key($sem_data[$seminar_id]["sem_number"]);
                         $sem_number_end = key($sem_data[$seminar_id]["sem_number_end"]);
                         if ($sem_number_start != $sem_number_end) {
                             $sem_name = $semester[$sem_number_start]['name'] . " - ";
                             $sem_name .= $sem_number_end == -1 ? _("unbegrenzt") : $semester[$sem_number_end]['name'];
                         } else {
                             $sem_name = $semester[$sem_number_start]['name'];
                         }
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['SEMESTER'] = ExternModule::ExtHtmlReady($sem_name);
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['DATES'] = $this->getDates($seminar_id, $semester[$this->sem_browse_data['sem']]['beginn'], $semester[$this->sem_browse_data['sem']]['ende']);
                         if (!sizeof($content['RESULT']['GROUP'][$j]['COURSE'][$k]['DATES'])) {
                             $content['RESULT']['GROUP'][$j]['COURSE'][$k]['NO_DATES_TEXT'] = array();
                         }
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['SUBTITLE'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['Untertitel']));
                         $aliases_sem_type = $this->config->getValue('ReplaceTextSemType', 'class_' . $SEM_TYPE[key($sem_data[$seminar_id]['status'])]['class']);
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['SEMTYPE-SUBSTITUTE'] = $aliases_sem_type[$this->sem_types_position[key($sem_data[$seminar_id]['status'])] - 1];
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['SEMTYPE'] = ExternModule::ExtHtmlReady($SEM_TYPE[key($sem_data[$seminar_id]['status'])]['name'] . ' (' . $SEM_CLASS[$SEM_TYPE[key($sem_data[$seminar_id]['status'])]['class']]['name'] . ')');
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LOCATION'] = ExternModule::ExtHtmlReady(trim(key($sem_data[$seminar_id]['Ort'])));
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['FORM'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['art']));
                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['ECTS'] = ExternModule::ExtHtmlReady(key($sem_data[$seminar_id]['ects']));
                         // generic data fields
                         $generic_datafields = $this->config->getValue('TemplateResult', 'genericdatafields');
                         if (is_array($generic_datafields)) {
                             $localEntries = DataFieldEntry::getDataFieldEntries($seminar_id, 'sem', $SEM_TYPE[key($sem_data[$seminar_id]['status'])]['class']);
                             $m = 1;
                             foreach ($generic_datafields as $datafield) {
                                 if (isset($localEntries[$datafield]) && is_object($localEntries[$datafield])) {
                                     if ($localEntries[$datafield]->getType() == 'link') {
                                         $localEntry = ExternModule::extHtmlReady($localEntries[$datafield]->getValue());
                                     } else {
                                         $localEntry = $localEntries[$datafield]->getDisplayValue();
                                     }
                                     if ($localEntry) {
                                         $content['RESULT']['GROUP'][$j]['COURSE'][$k]['DATAFIELD_' . $m] = $localEntry;
                                     }
                                 }
                                 $m++;
                             }
                         }
                         $doz_name = array_keys($sem_data[$seminar_id]['fullname']);
                         $doz_uname = array_keys($sem_data[$seminar_id]['username']);
                         $doz_lastname = array_keys($sem_data[$seminar_id]['Nachname']);
                         $doz_firstname = array_keys($sem_data[$seminar_id]['Vorname']);
                         $doz_titlefront = array_keys($sem_data[$seminar_id]['title_front']);
                         $doz_titlerear = array_keys($sem_data[$seminar_id]['title_rear']);
                         $doz_position = array_keys($sem_data[$seminar_id]['position']);
                         if (is_array($doz_name)) {
                             if (count($doz_position) != count($doz_uname)) {
                                 $doz_position = range(1, count($doz_uname));
                             }
                             array_multisort($doz_position, $doz_name, $doz_uname);
                             $l = 0;
                             foreach ($doz_name as $index => $value) {
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['UNAME'] = $doz_uname[$index];
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['PERSONDETAILS-HREF'] = $this->elements['LinkInternPersondetails']->createUrl(array('link_args' => 'username='******'&seminar_id=' . $seminar_id));
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['FULLNAME'] = ExternModule::ExtHtmlReady($doz_name[$index]);
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['LASTNAME'] = ExternModule::ExtHtmlReady($doz_lastname[$index]);
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['FIRSTNAME'] = ExternModule::ExtHtmlReady($doz_firstname[$index]);
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['TITLEFRONT'] = ExternModule::ExtHtmlReady($doz_titlefront[$index]);
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['TITLEREAR'] = ExternModule::ExtHtmlReady($doz_titlerear[$index]);
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['LECTURER-NO'] = $l + 1;
                                 $content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l]['LECTURER_DELIMITER'] = true;
                                 $l++;
                             }
                             // remove last delimiter
                             unset($content['RESULT']['GROUP'][$j]['COURSE'][$k]['LECTURERS'][$l - 1]['LECTURER_DELIMITER']);
                         } else {
                             $content['RESULT']['GROUP'][$j]['COURSE'][$k]['NO_LECTURERS'] = true;
                         }
                         $k++;
                     }
                 }
                 $j++;
             }
             if ($this->config->getValue('Main', 'maxnumberofhits')) {
                 array_push($content['RESULT'], $this->getResultBrowser());
             }
         } else {
             $content['__GLOBAL__']['NO_COURSES'] = true;
         }
     } else {
         $content['__GLOBAL__']['NO_COURSES'] = true;
     }
     return $content;
 }
    private function getContent ($args = NULL, $raw = FALSE) {
        $instituts_id = $this->config->range_id;
        $username = $args['username'];
        $sem_id = $args['seminar_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), array('fak', '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)) {
                return array();
            }
            // is user lecturer ?
            if ($this->config->getValue('Main', 'onlylecturers')) {
                $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(array($username));
                // user is not a lecturer
                if (!$row = $stm->fetch()) {
                    return array();
                }
            } 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(array($username));
                // user is not dozent at an institute that is in the list of accepted institutes
                if (!$row = $stm->fetch()) {
                    return array();
                }
            }
        }

        $row = false;

        // 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(array($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(array($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(array($sem_id, $intituts_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(array($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(array($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(array($username, $instituts_id));
                $row = $stm->fetch(PDO::FETCH_ASSOC);
            }
        } 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(array($username, $instituts_id));
            $row = $stm->fetch(PDO::FETCH_ASSOC);
        }

        // the user with the given username does not fulfill the conditions above
        if (!$row) {
            return array();
        }

        // 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 = ?"
                , $GLOBALS['_fullname_sql'][$nameformat]));
        $stm->execute(array($username));
        $allRows = $stm->fetchAll();
        
        $this->user_id = $row['user_id'];

        $this->user_perm = $visibilities['perms'];

        $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']));
        for ($i = 0; $i < sizeof($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);
        $content['PERSONDETAILS']['EMAIL-LOCAL'] = array_shift(explode('@', $content['PERSONDETAILS']['EMAIL']));
        $content['PERSONDETAILS']['EMAIL-DOMAIN'] = array_pop(explode('@', $content['PERSONDETAILS']['EMAIL']));
        $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']);
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL-LOCAL'] = array_shift(explode('@', $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL']));
            $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL-DOMAIN'] = array_pop(explode('@', $content['PERSONDETAILS']['ALL-INST']['SINGLE-INST'][$j]['SINGLE-INST-EMAIL']));
            $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('Main', '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++;
            }
        }

        // homepage plugins
        $plugins = PluginEngine::getPlugins('HomepagePlugin');

        foreach ($plugins as $plugin) {
            $template = $plugin->getHomepageTemplate($this->user_id);

            if ($template) {
                $keyname = 'PLUGIN_' . 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(array('content' => $this->getContentLectures(), 'subpart' => 'LECTURES'));
        if (Visibility::verify('news', $this->user_id)) {
            $content['PERSONDETAILS']['NEWS'] = $this->elements['TemplateNews']->toString(array('content' => $this->getContentNews(), 'subpart' => 'NEWS'));
        }
        if (Visibility::verify('dates', $this->user_id)) {
            $content['PERSONDETAILS']['APPOINTMENTS'] = $this->elements['TemplateAppointments']->toString(array('content' => $this->getContentAppointments(), 'subpart' => 'APPOINTMENTS'));
        }
        if (Visibility::verify('literature', $this->user_id)) {
            $content['PERSONDETAILS']['LITERATURE'] = $this->elements['TemplateLitList']->toString(array('content' => $this->elements['LitList']->getContent(array('user_id' => $this->user_id)), 'subpart' => 'LITLISTS'));
        }
        $content['PERSONDETAILS']['OWNCATEGORIES'] = $this->elements['TemplateOwnCategories']->toString(array('content' => $this->getContentOwnCategories(), 'subpart' => 'OWNCATEGORIES'));

        return $content;
    }
    private function getContentListPersons () {
        if (!$nameformat = $this->config->getValue('Main', 'nameformat')) {
            $nameformat = 'full_rev';
        }
        
        $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)) {
            return array();
        }
        
        $sort = $this->config->getValue('Main', 'sort');
        $query_order = '';
        foreach ($sort as $key => $position) {
            if ($position > 0) {
                $query_order[$position] = $this->data_fields[$key];
            }
        }
        if ($query_order) {
            ksort($query_order, SORT_NUMERIC);
            $query_order = ' ORDER BY ' . implode(',', $query_order);
        }
        
        $module_params = $this->getModuleParams($this->approved_params);
        
        $db = new DB_Seminar();
        
        $dbv = DbView::getView('sem_tree');

        if ($module_params['initiale']) {
            if ($this->config->getValue('Main', 'onlylecturers')) {
                $current_semester = get_sem_num(time());
                $query = sprintf("SELECT ui.Institut_id, su.user_id "
                . "FROM seminar_user su "
                . "LEFT JOIN seminare s USING (seminar_id) "
                . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                . "LEFT JOIN user_inst ui USING(user_id) "
                . "WHERE LOWER(LEFT(TRIM(aum.Nachname), 1)) = LOWER('%s') "
                . "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 " . get_ext_vis_query(),
                substr($module_params['initiale'], 0, 1),
                $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));
            } else {
                    // get only users with the given status
                $query = sprintf("SELECT ui.Institut_id, ui.user_id "
                    . "FROM user_inst ui "
                    . "LEFT JOIN auth_user_md5 aum USING(user_id) "
                    . "WHERE LOWER(LEFT(TRIM(aum.Nachname), 1)) = LOWER('%s') "
                    . "AND ui.inst_perms IN('%s') "
                    . "AND ui.Institut_id IN ('%s') "
                    . "AND ui.externdefault = 1 "
                    . "AND " . get_ext_vis_query(),
                    substr($module_params['initiale'], 0, 1),
                    implode("','", $this->config->getValue('Main', 'instperms')),
                    implode("','", $selected_item_ids));
            }
        // item_id is given and it is in the list of item_ids selected in the configuration
        } else if ($module_params['item_id'] && in_array($module_params['item_id'], $selected_item_ids)) {
            if ($this->config->getValue('Main', 'onlylecturers')) {
                $current_semester = get_sem_num(time());
                // get only users with status dozent in an visible seminar in the current semester
                $query = sprintf("SELECT ui.Institut_id, ui.user_id "
                    . "FROM user_inst ui "
                    . "LEFT JOIN seminar_user su USING(user_id) "
                    . "LEFT JOIN seminare s USING (seminar_id) "
                    . "WHERE ui.Institut_id = '%s' "
                    . "AND ui.inst_perms = 'dozent' "
                    . "AND ui.externdefault = 1 "
                    . "AND " . get_ext_vis_query()
                    . "AND su.status = 'dozent' "
                    . "AND s.visible = 1 "
                    . "AND ((%s) = %s OR ((%s) <= %s  AND ((%s) >= %s OR (%s) = -1))) ",
                    $module_params['item_id'],
                    $dbv->sem_number_sql,
                    $current_semester,
                    $dbv->sem_number_sql,
                    $current_semester,
                    $dbv->sem_number_end_sql,
                    $current_semester,
                    $dbv->sem_number_end_sql);
            } else {
                // get only users with the given status
                $query = sprintf("SELECT ui.Institut_id, ui.user_id "
                    . "FROM user_inst ui "
                    . "WHERE ui.Institut_id = '%s' "
                    . "AND ui.inst_perms IN('%s') "
                    . "AND ui.externdefault = 1 "
                    . "AND " . get_ext_vis_query(),
                    $module_params['item_id'],
                    implode("','", $this->config->getValue('Main', 'instperms')));
            }
        } else {
            return array();
        }
            
        $db->query($query);
        
        $user_list = array();
        while ($db->next_record()) {
            if (!isset($user_list[$db->f('user_id')])) {
                $user_list[$db->f('user_id')] = $db->f('user_id') . $db->f('Institut_id');
            }
        }
        
        if (sizeof($user_list) == 0) {
            return array();
        }

        $query = sprintf(
            "SELECT ui.Institut_id, ui.raum, ui.sprechzeiten, ui.Telefon, "
            . "inst_perms,  i.Name, aum.Email, aum.user_id, username, "
            . "%s AS fullname, aum.Nachname, aum.Vorname "
            . "FROM user_inst ui "
            . "LEFT JOIN Institute i USING(Institut_id) "
            . "LEFT JOIN auth_user_md5 aum USING(user_id)"
            . "LEFT JOIN user_info uin USING(user_id) "
            . "WHERE CONCAT(ui.user_id, ui.Institut_id) IN ('%s') "
            . "AND " . get_ext_vis_query()
            . "ORDER BY aum.Nachname ",
            $GLOBALS['_fullname_sql'][$nameformat],
            implode("','", $user_list));
        $db->query($query);
        
        $j = 0;
        while ($db->next_record()) {
            $content['PERSONS']['PERSON'][$j]['FULLNAME'] = ExternModule::ExtHtmlReady($db->f('fullname'));
            $content['PERSONS']['PERSON'][$j]['LASTNAME'] = ExternModule::ExtHtmlReady($db->f('Nachname'));
            $content['PERSONS']['PERSON'][$j]['FIRSTNAME'] = ExternModule::ExtHtmlReady($db->f('Vorname'));
            $content['PERSONS']['PERSON'][$j]['TITLEFRONT'] = ExternModule::ExtHtmlReady($db->f('title_front'));
            $content['PERSONS']['PERSON'][$j]['TITLEREAR'] = ExternModule::ExtHtmlReady($db->f('title_rear'));
            $content['PERSONS']['PERSON'][$j]['PERSONDETAIL-HREF'] = $this->elements['LinkInternPersondetails']->createUrl(array('link_args' => 'username='******'username')));
            $content['PERSONS']['PERSON'][$j]['USERNAME'] = $db->f('username');
            $content['PERSONS']['PERSON'][$j]['INSTNAME'] = ExternModule::ExtHtmlReady($db->f('Name'));
            $content['PERSONS']['PERSON'][$j]['PHONE'] = ExternModule::ExtHtmlReady($db->f('Telefon'));
            $content['PERSONS']['PERSON'][$j]['ROOM'] = ExternModule::ExtHtmlReady($db->f('raum'));
            $content['PERSONS']['PERSON'][$j]['EMAIL'] = ExternModule::ExtHtmlReady(get_visible_email($db->f('user_id')));
            $content['PERSONS']['PERSON'][$j]['EMAIL-LOCAL'] = array_shift(explode('@', $content['PERSONS']['PERSON'][$j]['EMAIL']));
            $content['PERSONS']['PERSON'][$j]['EMAIL-DOMAIN'] = array_pop(explode('@', $content['PERSONS']['PERSON'][$j]['EMAIL']));
            $content['PERSONS']['PERSON'][$j]['OFFICEHOURS'] = ExternModule::ExtHtmlReady($db->f('sprechzeiten'));
            $content['PERSONS']['PERSON'][$j]['PERSON-NO'] = $j + 1;
            
            // generic data fields
            if (is_array($generic_datafields)) {
                $localEntries = DataFieldEntry::getDataFieldEntries($db->f('user_id'), 'user');
                $k = 1;
                foreach ($generic_datafields as $datafield) {
                    if (isset($localEntries[$datafield]) && is_object($localEntries[$datafield])) {
                        if ($localEntries[$datafield]->getType() == 'link') {
                            $localEntry = ExternModule::extHtmlReady($localEntries[$datafield]->getValue());
                        } else {
                            $localEntry = $localEntries[$datafield]->getDisplayValue();
                        }
                        if ($localEntry) {
                            $content['PERSONS']['PERSON'][$j]['DATAFIELD_' . $k] = $localEntry;
                        }
                    }
                    $k++;
                }
            }
            $j++;
        }
        if (!$module_params['initiale']) {
            $this->global_markers['INSTNAME'] = $content['PERSONS']['PERSON'][0]['INSTNAME'];
        } else {
            $this->global_markers['CHARACTER'] = substr($module_params['initiale'], 0, 1);
        }
        
        return $content;
    }
    function getContent ($args = NULL, $raw = FALSE) {
        if ($raw) {
            $this->setRawOutput();
        }

        if (!$all_groups = get_all_statusgruppen($this->config->range_id)) {
            die($GLOBALS["EXTERN_ERROR_MESSAGE"]);
        } else {
            $all_groups = array_keys($all_groups);
        }

        if (!$group_ids = $this->config->getValue('Main', 'groupsvisible')) {
            die($GLOBALS["EXTERN_ERROR_MESSAGE"]);
        } else {
            $group_ids = array_intersect($all_groups, $group_ids);
        }

        if (!is_array($group_ids)) {
            die($GLOBALS["EXTERN_ERROR_MESSAGE"]);
        }

        if (!$visible_groups = get_statusgruppen_by_id($this->config->range_id, $group_ids)) {
            die($GLOBALS["EXTERN_ERROR_MESSAGE"]);
        }

        $sort = $this->config->getValue('Main', 'sort');
        $query_order = '';
        foreach ($sort as $key => $position) {
            if ($position > 0) {
                $query_order[$position] = $this->data_fields[$key];
            }
        }
        if ($query_order) {
            ksort($query_order, SORT_NUMERIC);
            $query_order = ' ORDER BY ' . implode(',', $query_order);
        }

        $grouping = $this->config->getValue("Main", "grouping");
        if (!$nameformat = $this->config->getValue('Main', 'nameformat')) {
            $nameformat = 'full_rev';
        }

        if(!$grouping) {
            $query = "SELECT DISTINCT ui.raum, ui.sprechzeiten, ui.Telefon, inst_perms, Email, aum.user_id, ";
            $query .= 'username, aum.Vorname, title_front, title_rear, ';
            $query .= $GLOBALS['_fullname_sql'][$nameformat] . " AS fullname, aum.Nachname ";
            if ($query_order != '') {
                $query .= "FROM statusgruppe_user LEFT JOIN auth_user_md5 aum USING(user_id) ";
                $query .= "LEFT JOIN user_info USING(user_id) LEFT JOIN user_inst ui USING(user_id) ";
                $query .= "WHERE statusgruppe_id IN (?) AND Institut_id = ? AND ".get_ext_vis_query()."$query_order";
            } else {
                $query .= "FROM statusgruppen s LEFT JOIN statusgruppe_user su USING(statusgruppe_id) ";
                $query .= "LEFT JOIN auth_user_md5 aum USING(user_id) ";
                $query .= "LEFT JOIN user_info USING(user_id) LEFT JOIN user_inst ui USING(user_id) ";
                $query .= "WHERE su.statusgruppe_id IN (?) AND Institut_id = ? ";
                $query .= "' AND ".get_ext_vis_query()." ORDER BY ";
                $query .= "s.position ASC, su.position ASC";
            }
            $parameters = array($this->config->getValue('Main', 'groupsvisible'), $this->config->range_id);
            $statement = DBManager::get()->prepare($query);
            $statement->execute($parameters);
            $row = $statement->fetch(PDO::FETCH_ASSOC);
            $visible_groups = array('');
        }

        // generic data fields
        $generic_datafields = $this->config->getValue('TemplateGeneric', 'genericdatafields');

        $data['data_fields'] = $this->data_fields;
        $defaultaddress = $this->config->getValue('Main', 'defaultadr');
        if (! $defaultaddress) {
           $db_out =& $row;
        }

        $content = null;
        $i = 0;
        $aliases_groups = $this->config->getValue('Main', 'groupsalias');
        foreach ($visible_groups as $group_id => $group) {
            if ($grouping) {
                if ($query_order == '') {
                    $query_order = ' ORDER BY su.position';
                }
                $query = 'SELECT ui.raum, ui.sprechzeiten, ui.Telefon, inst_perms, Email, aum.user_id, ';
                $query .= 'username, aum.Vorname, title_front, title_rear, ';
                $query .= $GLOBALS['_fullname_sql'][$nameformat] . " AS fullname, aum.Nachname ";
                $query .= 'FROM statusgruppe_user su LEFT JOIN auth_user_md5 aum USING(user_id) ';
                $query .= 'LEFT JOIN user_info USING(user_id) LEFT JOIN user_inst ui USING(user_id) ';
                $query .= "WHERE su.statusgruppe_id = ? AND ".get_ext_vis_query()." AND Institut_id = ? $query_order";

                $parameters = array($group_id, $this->config->range_id );
                $statement = DBManager::get()->prepare($query);
                $statement->execute($parameters);
                $row = $statement->fetch(PDO::FETCH_ASSOC);

                if($aliases_groups[$group_id]) {
                    $group = $aliases_groups[$group_id];
                }
            }


            if ($row !== false) {
                if($aliases_groups[$group_id]) {
                    $content['PERSONS']['GROUP'][$i]['GROUPTITLE-SUBSTITUTE'] = ExternModule::ExtHtmlReady($aliases_groups[$group_id]);
                }
                $content['PERSONS']['GROUP'][$i]['GROUPTITLE'] = ExternModule::ExtHtmlReady($group);
                $content['PERSONS']['GROUP'][$i]['GROUP-NO'] = $i + 1;

                $j = 0;
                do{
                    $visibilities = get_local_visibility_by_id($row['user_id'], 'homepage', true);
                    $user_perm = $visibilities['perms'];
                    $visibilities = json_decode($visibilities['homepage'], true);

                    if ($defaultaddress) {
                        $query = 'SELECT ui.raum, ui.sprechzeiten, ui.Telefon, inst_perms,  Email, ';
                        $query .= 'title_front, title_rear, ';
                        $query .= 'aum.user_id, username, ' . $GLOBALS['_fullname_sql'][$nameformat];
                        $query .= ' AS fullname, aum.Nachname, aum.Vorname FROM auth_user_md5 aum LEFT JOIN ';
                        $query .= 'user_info USING(user_id) LEFT JOIN ';
                        $query .= "user_inst ui USING(user_id) WHERE aum.user_id = '" . $row['user_id'];
                        $query .= "' AND ".get_ext_vis_query().' AND externdefault = 1';

                        $statement2 = DBManager::get()->prepare($query);
                        $statement2->execute();
                        $db_out = $statement2->fetch(PDO::FETCH_ASSOC);
                        //no default
                        if ($db_out === false) {
                            $query = 'SELECT ui.raum, ui.sprechzeiten, ui.Telefon, inst_perms,  Email, ';
                            $query .= 'title_front, title_rear, ';
                            $query .= 'aum.user_id, username, ' . $GLOBALS['_fullname_sql'][$nameformat];
                            $query .= ' AS fullname, aum.Nachname, aum.Vorname FROM auth_user_md5 aum LEFT JOIN ';
                            $query .= 'user_info USING(user_id) LEFT JOIN ';
                            $query .= "user_inst ui USING(user_id) WHERE aum.user_id = '" . $row['user_id'];
                            $query .= "' AND ".get_ext_vis_query()." AND Institut_id = ? " ;
                            $statement2 = DBManager::get()->prepare($query);
                            $params = array($this->config->range_id);
                            $statement2->execute($params);
                            $db_out = $statement2->fetch(PDO::FETCH_ASSOC);
                        }
                    }
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['FULLNAME'] = ExternModule::ExtHtmlReady($db_out['fullname']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['LASTNAME'] = ExternModule::ExtHtmlReady($db_out['Nachname']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['FIRSTNAME'] = ExternModule::ExtHtmlReady($db_out['Vorname']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['TITLEFRONT'] = ExternModule::ExtHtmlReady($db_out['title_front']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['TITLEREAR'] = ExternModule::ExtHtmlReady($db_out['title_rear']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['PERSONDETAIL-HREF'] = $this->elements['LinkInternTemplate']->createUrl(array('link_args' => 'username='******'username']));
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['USERNAME'] = $db_out['username'];

                    if (is_element_visible_externally( $row['user_id'], $user_perm, 'picture', $visibilities['picture'])) {
                        $avatar = Avatar::getAvatar($db_out['user_id']);
                    } else {
                        $avatar = Avatar::getNobody();
                    }
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['IMAGE-URL-SMALL'] = $avatar->getURL(Avatar::SMALL);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['IMAGE-URL-MEDIUM'] = $avatar->getURL(Avatar::MEDIUM);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['IMAGE-URL-NORMAL'] = $avatar->getURL(Avatar::NORMAL);

                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['PHONE'] = ExternModule::ExtHtmlReady($db_out['Telefon']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['ROOM'] = ExternModule::ExtHtmlReady($db_out['raum']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['EMAIL'] = get_visible_email($row['user_id']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['EMAIL-LOCAL'] = array_shift(explode('@', $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['EMAIL']));
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['EMAIL-DOMAIN'] = array_pop(explode('@', $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['EMAIL']));
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['OFFICEHOURS'] = ExternModule::ExtHtmlReady($db_out['sprechzeiten']);
                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['PERSON-NO'] = $j + 1;

                    // generic data fields
                    if (is_array($generic_datafields)) {
                        $localEntries = DataFieldEntry::getDataFieldEntries($db_out['user_id'], 'user');
                        #$datafields = $datafields_obj->getLocalFields($db_out->f('user_id'));
                        $k = 1;
                        foreach ($generic_datafields as $datafield) {
                            if (isset($localEntries[$datafield]) &&
                                    is_object($localEntries[$datafield] &&
                                    is_element_visible_externally($db_out['user_id'],
                                        $user_perm, $localEntries[$datafield]->getId(),
                                        $visibilities[$localEntries[$datafield]->getId()]))) {
                                if ($localEntries[$datafield]->getType() == 'link') {
                                    $localEntry = ExternModule::extHtmlReady($localEntries[$datafield]->getValue());
                                } else {
                                    $localEntry = $localEntries[$datafield]->getDisplayValue();
                                }
                                if ($localEntry) {
                                    $content['PERSONS']['GROUP'][$i]['PERSON'][$j]['DATAFIELD_' . $k] = $localEntry;
                                }
                            }
                            $k++;
                        }
                    }
                    $j++;
                }while ($row = $statement->fetch(PDO::FETCH_ASSOC));
            }
            $i++;
        }

        return $content;
    }