Skip to content
Snippets Groups Projects
Select Git revision
  • 2054b4c0815aa508623165d7fc0b810bafc16cc0
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

ExternModuleTemplateLecturedetails.class.php

Blame
  • Forked from Stud.IP / Stud.IP
    3768 commits behind the upstream repository.
    Jan-Hendrik Willms's avatar
    Jan-Hendrik Willms authored and David Siegfried committed
    Closes #1295
    
    Merge request studip/studip!791
    2054b4c0
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ExternModuleTemplateLecturedetails.class.php 30.05 KiB
    <?
    # Lifter002: TODO
    # Lifter007: TODO
    # Lifter003: TODO
    # Lifter010: TODO
    /**
    * ExternModuleTemplateLecturedetails.class.php
    *
    *
    *
    *
    * @author       Peter Thienel <thienel@data-quest.de>, Suchi & Berg GmbH <info@data-quest.de>
    * @access       public
    * @modulegroup  extern
    * @module       ExternModuleTemplateLecturedetails
    * @package  studip_extern
    */
    
    // +---------------------------------------------------------------------------+
    // This file is part of Stud.IP
    // ExternModuleTemplateLecturedetails.class.php
    //
    // Copyright (C) 2007 Peter Thienel <thienel@data-quest.de>,
    // Suchi & Berg GmbH <info@data-quest.de>
    // +---------------------------------------------------------------------------+
    // 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/extern/views/extern_html_templates.inc.php';
    require_once 'lib/user_visible.inc.php';
    require_once 'lib/dates.inc.php';
    
    class ExternModuleTemplateLecturedetails extends ExternModule {
    
        var $markers = [];
        var $args = ['seminar_id'];
        var $seminar_id;
    
        /**
        *
        */
        function __construct($range_id, $module_name, $config_id = NULL, $set_config = NULL, $global_id = NULL) {
    
            $this->data_fields = ['subtitle', 'lecturer', 'art', 'status', 'description',
                'location', 'semester', 'time', 'number', 'teilnehmer', 'requirements',
                'lernorga', 'leistung', 'range_path', 'misc', 'ects'];
            $this->registered_elements = [
                    'ReplaceTextSemType',
                    'LinkInternPersondetails' => 'LinkInternTemplate',
                    'TemplateLectureData' => 'TemplateGeneric',
                    'TemplateNews' => 'TemplateGeneric',
                    'TemplateStudipData' => 'TemplateGeneric'
            ];
            $this->field_names =
            [
                    _("Untertitel"),
                    _("Lehrende"),
                    _("Veranstaltungsart"),
                    _("Veranstaltungstyp"),
                    _("Beschreibung"),
                    _("Ort"),
                    _("Semester"),
                    _("Zeiten"),
                    _("Veranstaltungsnummer"),
                    _("Teilnehmende"),
                    _("Voraussetzungen"),
                    _("Lernorganisation"),
                    _("Leistungsnachweis"),
                    _("Bereichseinordnung"),
                    _("Sonstiges"),
                    _("ECTS-Punkte")
            ];
    
            parent::__construct($range_id, $module_name, $config_id, $set_config, $global_id);
        }
    
        function setup () {
            // extend $data_fields if generic datafields are set
        //  $config_datafields = $this->config->getValue("Main", "genericdatafields");
        //  $this->data_fields = array_merge((array)$this->data_fields, (array)$config_datafields);
    
            // setup module properties
        //  $this->elements["LinkIntern"]->link_module_type = 2;
        //  $this->elements["LinkIntern"]->real_name = _("Link zum Modul MitarbeiterInnendetails");
    
            $this->elements['LinkInternPersondetails']->real_name = _("Verlinkung zum Modul MitarbeiterInnendetails");
            $this->elements['LinkInternPersondetails']->link_module_type = [2, 14];
            $this->elements['TemplateLectureData']->real_name = _("Haupttemplate");
            $this->elements['TemplateNews']->real_name = _("Template für News");
            $this->elements['TemplateStudipData']->real_name = _("Template für statistische Daten aus Stud.IP");
    
        }
    
        function toStringEdit ($open_elements = '', $post_vars = '',
                $faulty_values = '', $anker = '') {
    
            $this->updateGenericDatafields('TemplateLectureData', 'sem');
            $this->elements['TemplateLectureData']->markers = $this->getMarkerDescription('TemplateLectureData');
            $this->elements['TemplateNews']->markers = $this->getMarkerDescription('TemplateNews');
            $this->elements['TemplateStudipData']->markers = $this->getMarkerDescription('TemplateStudipData');
    
            return parent::toStringEdit($open_elements, $post_vars, $faulty_values, $anker);
        }
    
        function getMarkerDescription ($element_name) {
            $markers['TemplateLectureData'][] = ['__GLOBAL__', _("Globale Variablen (gültig im gesamten Template).")];
            $markers['TemplateLectureData'][] = ['###STUDIP-EDIT-HREF###', ''];
            $markers['TemplateLectureData'][] = ['###STUDIP-REGISTER-HREF###', ''];
    
            $markers['TemplateLectureData'][] = ['<!-- BEGIN LECTUREDETAILS -->', ''];
            $markers['TemplateLectureData'][] = ['###TITLE###', ''];
            $markers['TemplateLectureData'][] = ['###SUBTITLE###', ''];
            $markers['TemplateLectureData'][] = ['###SEMESTER###', ''];
            $markers['TemplateLectureData'][] = ['###CYCLE###', ''];
            $markers['TemplateLectureData'][] = ['###ROOM###', ''];
            $markers['TemplateLectureData'][] = ['###NUMBER###', _("Die Veranstaltungsnummer")];
    
            $markers['TemplateLectureData'][] = ['<!-- BEGIN LECTURERS -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- BEGIN LECTURER -->', ''];
            $markers['TemplateLectureData'][] = ['###FULLNAME###', ''];
            $markers['TemplateLectureData'][] = ['###LASTNAME###', ''];
            $markers['TemplateLectureData'][] = ['###FIRSTNAME###', ''];
            $markers['TemplateLectureData'][] = ['###TITLEFRONT###', ''];
            $markers['TemplateLectureData'][] = ['###TITLEREAR###', ''];
            $markers['TemplateLectureData'][] = ['###PERSONDETAILS-HREF###', ''];
            $markers['TemplateLectureData'][] = ['###LECTURER-NO###', ''];
            $markers['TemplateLectureData'][] = ['###UNAME###', ''];
            $markers['TemplateLectureData'][] = ['<!-- END LECTURER -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- END LECTURERS -->', ''];
    
            $markers['TemplateLectureData'][] = ['<!-- BEGIN TUTORS -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- BEGIN TUTOR -->', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR_FULLNAME###', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR_LASTNAME###', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR_FIRSTNAME###', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR_TITLEFRONT###', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR_TITLEREAR###', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR_PERSONDETAILS-HREF###', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR-NO###', ''];
            $markers['TemplateLectureData'][] = ['###TUTOR_UNAME###', ''];
            $markers['TemplateLectureData'][] = ['<!-- END TUTOR -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- END TUTORS -->', ''];
    
            $markers['TemplateLectureData'][] = ['###PRELIM-DISCUSSION###', ''];
            $markers['TemplateLectureData'][] = ['###SEMTYPE-SUBSTITUTE###', ''];
            $markers['TemplateLectureData'][] = ['###SEMTYPE###', ''];
            $markers['TemplateLectureData'][] = ['###FORM###', _("Die Veranstaltungsart")];
            $markers['TemplateLectureData'][] = ['###PARTICIPANTS###', ''];
            $markers['TemplateLectureData'][] = ['###DESCRIPTION###', ''];
            $markers['TemplateLectureData'][] = ['###MISC###', _("Sonstiges")];
            $markers['TemplateLectureData'][] = ['###REQUIREMENTS###', ''];
            $markers['TemplateLectureData'][] = ['###ORGA###', _("Organisationsform")];
            $markers['TemplateLectureData'][] = ['###LEISTUNGSNACHWEIS###', _("Leistungsnachweis")];
            $markers['TemplateLectureData'][] = ['###FORM###', ''];
            $markers['TemplateLectureData'][] = ['###ECTS###', ''];
            $markers['TemplateLectureData'][] = ['###PRELIM-DISCUSSION###', ''];
            $markers['TemplateLectureData'][] = ['###FIRST-MEETING###', ''];
    
            $this->insertDatafieldMarkers('sem', $markers, 'TemplateLectureData');
    
            $markers['TemplateLectureData'][] = ['###NEWS###', _("Inhalt aus dem Template für News")];
            $markers['TemplateLectureData'][] = ['###STUDIP-DATA###', 'Inhalt aus dem Template für statistische Daten aus Stud.IP'];
    
            $markers['TemplateLectureData'][] = ['<!-- BEGIN RANGE-PATHES -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- BEGIN RANGE-PATH -->', ''];
            $markers['TemplateLectureData'][] = ['###PATH###', ''];
            $markers['TemplateLectureData'][] = ['<!-- END RANGE-PATH -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- END RANGE-PATHES -->', ''];
    
            $markers['TemplateLectureData'][] = ['<!-- BEGIN MODULES -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- BEGIN MODULE -->', ''];
            $markers['TemplateLectureData'][] = ['###PATH###', _('Modulzuordnungen der Veranstaltung')];
            $markers['TemplateLectureData'][] = ['<!-- END MODULE -->', ''];
            $markers['TemplateLectureData'][] = ['<!-- END MODULES -->', ''];
    
            $markers['TemplateLectureData'][] = ['<!-- END LECTUREDETAILS -->'];
    
            $markers['TemplateNews'][] = ['<!-- BEGIN NEWS -->', ''];
            $markers['TemplateNews'][] = ['<!-- BEGIN NO-NEWS -->', ''];
            $markers['TemplateNews'][] = ['###NEWS_NO-NEWS-TEXT###', ''];
            $markers['TemplateNews'][] = ['<!-- END NO-NEWS -->', ''];
            $markers['TemplateNews'][] = ['<!-- BEGIN ALL-NEWS -->', ''];
            $markers['TemplateNews'][] = ['<!-- BEGIN SINGLE-NEWS -->', ''];
            $markers['TemplateNews'][] = ['###NEWS_TOPIC###', ''];
            $markers['TemplateNews'][] = ['###NEWS_BODY###', ''];
            $markers['TemplateNews'][] = ['###NEWS_DATE###', ''];
            $markers['TemplateNews'][] = ['###NEWS_ADMIN-MESSAGE###', ''];
            $markers['TemplateNews'][] = ['###NEWS_NO###', ''];
            $markers['TemplateNews'][] = ['###FULLNAME###', _("Vollständiger Name des Autors.")];
            $markers['TemplateNews'][] = ['###LASTNAME###', _("Nachname des Autors.")];
            $markers['TemplateNews'][] = ['###FIRSTNAME###', _("Vorname des Autors.")];
            $markers['TemplateNews'][] = ['###TITLEFRONT###', _("Titel des Autors (vorangestellt).")];
            $markers['TemplateNews'][] = ['###TITLEREAR###', _("Titel des Autors (nachgestellt).")];
            $markers['TemplateNews'][] = ['###PERSONDETAIL-HREF###', ''];
            $markers['TemplateNews'][] = ['###USERNAME###', ''];
            $markers['TemplateNews'][] = ['<!-- END SINGLE-NEWS -->', ''];
            $markers['TemplateNews'][] = ['<!-- END ALL-NEWS -->', ''];
            $markers['TemplateNews'][] = ['<!-- END NEWS -->', ''];
    
            $markers['TemplateStudipData'][] = ['<!-- BEGIN STUDIP-DATA -->', ''];
            $markers['TemplateStudipData'][] = ['###HOME-INST-NAME###', ''];
            $markers['TemplateStudipData'][] = ['###HOME-INST-HREF###', ''];
            $markers['TemplateStudipData'][] = ['###COUNT-USER###', ''];
            $markers['TemplateStudipData'][] = ['###COUNT-POSTINGS###', ''];
            $markers['TemplateStudipData'][] = ['###COUNT-DOCUMENTS###', ''];
    
            $markers['TemplateStudipData'][] = ['<!-- BEGIN INVOLVED-INSTITUTES -->', ''];
            $markers['TemplateStudipData'][] = ['<!-- BEGIN INVOLVED-INSTITUTE -->', ''];
            $markers['TemplateStudipData'][] = ['###INVOLVED-INSTITUTE_HREF###', ''];
            $markers['TemplateStudipData'][] = ['###INVOLVED-INSTITUTE_NAME###', ''];
            $markers['TemplateStudipData'][] = ['<!-- END INVOLVED-INSTITUTE -->', ''];
            $markers['TemplateStudipData'][] = ['<!-- END INVOLVED-INSTITUTES -->', ''];
    
            $markers['TemplateStudipData'][] = ['<!-- END STUDIP-DATA -->', ''];
    
            return $markers[$element_name];
        }
    
        function getContent ($args = NULL, $raw = FALSE) {
            $this->seminar_id = $args["seminar_id"];
            $course_object = new Course($this->seminar_id);
            $seminar = new Seminar($course_object);
    
            $visible = $this->config->getValue("Main", "visible");
    
            $j = -1;
            if ($seminar->visible == 1) {
                $content['LECTUREDETAILS']['TITLE'] = ExternModule::ExtHtmlReady($seminar->getName());
                if (trim($seminar->seminar_number)) {
                    $content['LECTUREDETAILS']['NUMBER'] = ExternModule::ExtHtmlReady($seminar->seminar_number);
                }
                if (trim($seminar->subtitle)) {
                    $content['LECTUREDETAILS']['SUBTITLE'] = ExternModule::ExtHtmlReady($seminar->subtitle);
                }
                if (trim($seminar->description)) {
                    $content['LECTUREDETAILS']['DESCRIPTION'] = ExternModule::ExtHtmlReady($seminar->description, TRUE);
                }
                if (trim($seminar->misc)) {
                    $content['LECTUREDETAILS']['MISC'] = ExternModule::ExtHtmlReady($seminar->misc, TRUE);
                }
                if (trim($seminar->participants)) {
                    $content['LECTUREDETAILS']['PARTICIPANTS'] = ExternModule::ExtHtmlReady($seminar->participants);
                }
                if (trim($seminar->requirements)) {
                    $content['LECTUREDETAILS']['REQUIREMENTS'] = ExternModule::ExtHtmlReady($seminar->requirements);
                }
                if (trim($seminar->orga)) {
                    $content['LECTUREDETAILS']['ORGA'] = ExternModule::ExtHtmlReady($seminar->orga);
                }
                if (trim($seminar->leistungsnachweis)) {
                    $content['LECTUREDETAILS']['LEISTUNGSNACHWEIS'] = ExternModule::ExtHtmlReady($seminar->leistungsnachweis);
                }
                if (trim($seminar->form)) {
                    $content['LECTUREDETAILS']['FORM'] = ExternModule::ExtHtmlReady($seminar->form);
                }
                if (trim($seminar->ects)) {
                    $content['LECTUREDETAILS']['ECTS'] = ExternModule::ExtHtmlReady($seminar->ects);
                }
    
                if (!$name_sql = $this->config->getValue("Main", "nameformat")) {
                    $name_sql = "full";
                }
    
                $lecturers = array_keys($seminar->getMembers('dozent'));
    
                $l = 0;
                foreach ($lecturers as $lecturer) {
                    $query = "SELECT {$GLOBALS['_fullname_sql'][$name_sql]} AS name, username, Vorname, Nachname, title_rear, title_front FROM auth_user_md5 aum LEFT JOIN user_info ui USING(user_id) WHERE aum.user_id = ?";
                    $parameters = [$lecturer];
                    $state = DBManager::get()->prepare($query);
                    $state->execute($parameters);
                    $rowlec = $state->fetch(PDO::FETCH_ASSOC);
                    if ($rowlec !== false) {
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['PERSONDETAILS-HREF'] = $this->elements['LinkInternPersondetails']->createUrl(['link_args' => 'username=' . $rowlec['username']]);
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['FULLNAME'] = ExternModule::ExtHtmlReady($rowlec['name']);
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['FIRSTNAME'] = ExternModule::ExtHtmlReady($rowlec['Vorname']);
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['LASTNAME'] = ExternModule::ExtHtmlReady($rowlec['Nachname']);
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['TITLEFRONT'] = ExternModule::ExtHtmlReady($rowlec['title_front']);
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['TITLEREAR'] = ExternModule::ExtHtmlReady($rowlec['title_rear']);
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['UNAME'] = $rowlec['username'];
                        $content['LECTUREDETAILS']['LECTURERS']['LECTURER'][$l]['LECTURER-NO'] = $l + 1;
                        $l++;
                    }
                }
    
                $tutors = array_keys($seminar->getMembers('tutor'));
    
                $l = 0;
                foreach ($tutors as $tutor) {
                    $query = "SELECT {$GLOBALS['_fullname_sql'][$name_sql]} AS name, username, Vorname, Nachname, title_rear, title_front FROM auth_user_md5 aum LEFT JOIN user_info ui USING(user_id) WHERE aum.user_id = ?";
                    $parameters = [$tutor];
                    $state = DBManager::get()->prepare($query);
                    $state->execute($parameters);
                    $rowtut = $state->fetch(PDO::FETCH_ASSOC);
                    if ($rowtut !== false) {
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR_PERSONDETAILS-HREF'] = $this->elements['LinkInternPersondetails']->createUrl(['link_args' => 'username=' . $rowtut['username']]);
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR_FULLNAME'] = ExternModule::ExtHtmlReady($rowtut['name']);
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR_FIRSTNAME'] = ExternModule::ExtHtmlReady($rowtut['Vorname']);
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR_LASTNAME'] = ExternModule::ExtHtmlReady($rowtut['Nachname']);
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR_TITLEFRONT'] = ExternModule::ExtHtmlReady($rowtut['title_front']);
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR_TITLEREAR'] = ExternModule::ExtHtmlReady($rowtut['title_rear']);
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR_UNAME'] = $rowtut['username'];
                        $content['LECTUREDETAILS']['TUTORS']['TUTOR'][$l]['TUTOR-NO'] = $l + 1;
                        $l++;
                    }
                }
    
                // reorganize the $SEM_TYPE-array
                foreach ($GLOBALS["SEM_CLASS"] as $key_class => $class) {
                    $i = 0;
                    foreach ($GLOBALS["SEM_TYPE"] as $key_type => $type) {
                        if ($type["class"] == $key_class) {
                            $i++;
                            $sem_types_position[$key_type] = $i;
                        }
                    }
                }
                $aliases_sem_type = $this->config->getValue("ReplaceTextSemType",
                        "class_" . $GLOBALS["SEM_TYPE"][$seminar->status]['class']);
                if ($aliases_sem_type[$sem_types_position[$seminar->status] - 1]) {
                    $content['LECTUREDETAILS']['SEMTYPE-SUBSTITUTE'] = $aliases_sem_type[$sem_types_position[$seminar->status] - 1];
                } else {
                    $content['LECTUREDETAILS']['SEMTYPE-SUBSTITUTE'] = ExternModule::ExtHtmlReady($GLOBALS["SEM_TYPE"][$seminar->status]["name"]);
                }
                $content['LECTUREDETAILS']['SEMTYPE'] = ExternModule::ExtHtmlReady($GLOBALS["SEM_TYPE"][$seminar->status]["name"]);
                $room = trim(Seminar::getInstance($this->seminar_id)->getDatesTemplate('dates/seminar_export_location'));
                if ($room) {
                    $content['LECTUREDETAILS']['ROOM'] = ExternModule::ExtHtmlReady($room);
                }
                $content['LECTUREDETAILS']['SEMESTER'] = get_semester($this->seminar_id);
                $content['LECTUREDETAILS']['CYCLE'] = ExternModule::ExtHtmlReady(Seminar::getInstance($this->seminar_id)->getDatesExport());
                if ($vorbesprechung = vorbesprechung($this->seminar_id, 'export')) {
                    $content['LECTUREDETAILS']['PRELIM-DISCUSSION'] = ExternModule::ExtHtmlReady($vorbesprechung);
                }
                if ($veranstaltung_beginn = Seminar::getInstance($this->seminar_id)->getFirstDate('export')) {
                    $content['LECTUREDETAILS']['FIRST-MEETING'] = ExternModule::ExtHtmlReady($veranstaltung_beginn);
                }
    
                $range_path_level = $this->config->getValue('Main', 'rangepathlevel');
                $pathes = get_sem_tree_path($this->seminar_id, $range_path_level);
                if (is_array($pathes)) {
                    $i = 0;
                    foreach ($pathes as $foo => $path) {
                        $content['LECTUREDETAILS']['RANGE-PATHES']['RANGE-PATH'][$i]['PATH'] = ExternModule::ExtHtmlReady($path);
                        $i++;
                    }
                }
    
                if ($seminar->getSemClass()['module']) {
                    ModuleManagementModelTreeItem::setObjectFilter('Modul', function ($modul) use ($course_object) {
                        // check for public status
                        if (!$GLOBALS['MVV_MODUL']['STATUS']['values'][$modul->stat]['public']) {
                            return false;
                        }
                        $modul_start = Semester::find($modul->start)->beginn ?: 0;
                        $modul_end = Semester::find($modul->end)->beginn ?: PHP_INT_MAX;
                        return ($course_object->start_time <= $modul_end)
                            && (
                                ($course_object->start_time >= $modul_start)
                                || $course_object->isOpenEnded()
                                || $course_object->getEndSemester()->ende <= $modul_end
                                || $course_object->getEndSemester()->ende >= $modul_start
                            );
                    });
                    ModuleManagementModelTreeItem::setObjectFilter('StgteilVersion', function ($version) {
                        return $GLOBALS['MVV_STGTEILVERSION']['STATUS']['values'][$version->stat]['public'];
                    });
                    $trail_classes = ['Modulteil', 'StgteilabschnittModul', 'StgteilAbschnitt', 'StgteilVersion'];
                    $mvv_object_paths = MvvCourse::get($this->seminar_id)->getTrails($trail_classes);
                    $mvv_paths = [];
    
                    foreach ($mvv_object_paths as $mvv_object_path) {
                        // show only complete paths
                        if (count($mvv_object_path) === 4) {
                            $mvv_object_names = [];
                            foreach ($mvv_object_path as $mvv_object) {
                                $mvv_object_names[] = $mvv_object->getDisplayName();
                            }
                            $mvv_paths[] = implode(' > ', $mvv_object_names);
                        }
                    }
    
                    foreach ($mvv_paths as $mvv_path) {
                        $content['LECTUREDETAILS']['MODULES']['MODULE'][] = ['PATH' => ExternModule::ExtHtmlReady($mvv_path)];
                    }
                }
    
                $content['LECTUREDETAILS']['NEWS'] = $this->elements['TemplateNews']->toString(['content' => $this->getContentNews(), 'subpart' => 'NEWS']);
                $content['LECTUREDETAILS']['STUDIP-DATA'] = $this->getStudipData();
    
                // generic data fields
                if ($generic_datafields = $this->config->getValue('Main', 'genericdatafields')) {
                    $localEntries = DataFieldEntry::getDataFieldEntries($this->seminar_id, 'sem');
                    $k = 1;
                    foreach ($generic_datafields as $datafield) {
                        if (isset($localEntries[$datafield]) && is_object($localEntries[$datafield])) {
                            $localEntry = trim($localEntries[$datafield]->getDisplayValue());
                            if ($localEntry) {
                                $content['LECTUREDETAILS']["DATAFIELD_$k"] = $localEntry;
                            }
                        }
                        $k++;
                    }
                }
    
                $content['__GLOBAL__']['STUDIP-EDIT-HREF'] = "{$GLOBALS['ABSOLUTE_URI_STUDIP']}seminar_main.php?auswahl={$this->seminar_id}&again=1&redirect_to=dispatch.php/course/basicdata/view/".$this->seminar_id."&login=true&new_sem=TRUE";
                $content['__GLOBAL__']['STUDIP-REGISTER-HREF'] = "{$GLOBALS['ABSOLUTE_URI_STUDIP']}dispatch.php/course/details/?again=1&sem_id={$this->seminar_id}";
            }
    
            return $content;
        }
    
        private function getContentNews ()
        {
            $local_fullname_sql = $GLOBALS['_fullname_sql'];
            if (!$nameformat = $this->config->getValue('Main', 'nameformat')) {
                $nameformat = 'no_title';
            }
            if ($nameformat == 'last') {
                $local_fullname_sql['last'] = ' Nachname ';
            }
            $dateform = $this->config->getValue('Main', 'dateformat');
    
            $news = StudipNews::GetNewsByRange($this->seminar_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;
    
                    $query = "SELECT Nachname, Vorname, title_front, title_rear,
                                     {$local_fullname_sql[$nameformat]} AS fullname, username,
                                     aum.user_id
                              FROM auth_user_md5 AS aum
                              LEFT JOIN user_info AS ui USING (user_id)
                              WHERE aum.user_id = ?";
                    $statement = DBManager::get()->prepare($query);
                    $statement->execute([$news_detail->user_id]);
                    $temp = $statement->fetch(PDO::FETCH_ASSOC);
                    if ($temp) {
                        $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['FULLNAME'] = ExternModule::ExtHtmlReady($temp['fullname']);
                        $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['FIRSTNAME'] = ExternModule::ExtHtmlReady($temp['Vorname']);
                        $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['LASTNAME'] = ExternModule::ExtHtmlReady($temp['Nachname']);
                        $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['TITLEFRONT'] = ExternModule::ExtHtmlReady($temp['title_front']);
                        $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['TITLEREAR'] = ExternModule::ExtHtmlReady($temp['title_rear']);
                        $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['USERNAME'] = $temp['username'];
                        $content['NEWS']['ALL-NEWS']['SINGLE-NEWS'][$i]['PERSONDETAIL-HREF'] = $this->elements['LinkInternPersondetails']->createUrl(['link_args' => 'username=' . $temp['username']]);
                    }
                    $i++;
                }
            }
            return $content;
        }
    
        function getStudipData () {
            $query = "SELECT i.Institut_id, i.Name, i.url FROM seminare LEFT JOIN Institute i USING(institut_id) WHERE Seminar_id = ?";
            $parameters = [$this->seminar_id];
            $statement = DBManager::get()->prepare($query);
            $statement->execute($parameters);
            $row = $statement->fetch(PDO::FETCH_ASSOC);
            $own_inst = $row['Institut_id'];
            $content['STUDIP-DATA']['HOME-INST-NAME'] = ExternModule::ExtHtmlReady($row['Name']);
    
            if ($row['url']) {
                $link_inst = htmlReady($row['url']);
                if (!preg_match('{^https?://.+$}', $link_inst)) {
                    $link_inst = "http://$link_inst";
                }
                $content['STUDIP-DATA']['HOME-INST-HREF'] = $link_inst;
            }
    
            $query = "SELECT Name, url FROM seminar_inst LEFT JOIN Institute i USING(institut_id) WHERE seminar_id='{$this->seminar_id}' AND i.institut_id!='$own_inst'";
            $involved_insts = NULL;
            $i = 0;
            $statement = DBManager::get()->prepare($query);
            $statement->execute();
    
            while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
                if ($row['url']) {
                    $link_inst = htmlReady($row['url']);
                    if (!preg_match('{^https?://.+$}', $link_inst)) {
                        $link_inst = "http://$link_inst";
                    }
                    $content['STUDIP-DATA']['INVOLVED-INSTITUES']['INVOLVED-INSTITUTE'][$i]['INVOLVED-INSTITUTE_HREF'] = $link_inst;
                }
                $content['STUDIP-DATA']['INVOLVED-INSTITUTES']['INVOLVED-INSTITUTE'][$i]['INVOLVED-INSTITUTE_NAME'] = ExternModule::ExtHtmlReady($row['Name']);
                $i++;
            }
    
            $query = "SELECT count(*) as count_user FROM seminar_user WHERE Seminar_id = ?";
            $parameters = [$this->seminar_id];
            $statement = DBManager::get()->prepare($query);
            $statement->execute($parameters);
            $row = $statement->fetch(PDO::FETCH_ASSOC);
    
            if ($row['count_user']) {
                $content['STUDIP-DATA']['COUNT-USER'] = $row['count_user'];
            } else {
                $content['STUDIP-DATA']['COUNT-USER'] = '0';
            }
    
            $count = 0;
            foreach (PluginEngine::getPlugins('ForumModule') as $plugin) {
                $count += $plugin->getNumberOfPostingsForSeminar($this->seminar_id);
            }
            $content['STUDIP-DATA']['COUNT-POSTINGS'] = $count;
    
            $query = "SELECT COUNT(*) AS count_documents
                      FROM folders
                      INNER JOIN file_refs ON folder_id = folders.id
                      WHERE range_id = ? AND range_type = 'course'
                AND folder_type IN ('RootFolder', 'StandardFolder')
                      GROUP BY range_id";
            $parameters = [$this->seminar_id];
            $statement = DBManager::get()->prepare($query);
            $statement->execute($parameters);
            $row = $statement->fetch(PDO::FETCH_ASSOC);
    
            if ($row['count_documents']) {
                $content['STUDIP-DATA']['COUNT-DOCUMENTS'] = $row['count_documents'];
            } else {
                $content['STUDIP-DATA']['COUNT-DOCUMENTS'] = '0';
            }
    
            return $this->elements['TemplateStudipData']->toString(['content' => $content, 'subpart' => 'STUDIP-DATA']);
        }
    
        function printout ($args) {
            if (!$language = $this->config->getValue("Main", "language"))
                $language = "de_DE";
            init_i18n($language);
    
            echo $this->elements['TemplateLectureData']->toString(['content' => $this->getContent($args), 'subpart' => 'LECTUREDETAILS']);
    
        }
    
        function printoutPreview () {
            if (!$language = $this->config->getValue("Main", "language"))
                $language = "de_DE";
            init_i18n($language);
    
            echo $this->elements['TemplateLectureData']->toString(['content' => $this->getContent([]), 'subpart' => 'LECTUREDETAILS', 'hide_markers' => FALSE]);
    
        }
    
        function addContentStudipInfo (&$content) {
    
        }
    }
    
    ?>