allow_nobody = Config::get()->getValue('COURSE_SEARCH_IS_VISIBLE_NOBODY'); parent::__construct($dispatcher); } /** * @param type $format only pdf is implememted yet * @param type $semester_id * @param type $version_id * @param type $language */ public function modulhandbuch_action($format, $semester_id, $version_id, $language = 'DE', $size = 'medium') { //de_DE|en_GB $current_lang = $_SESSION['_language']; if ($language === 'DE') { $_SESSION['_language'] = 'de_DE'; init_i18n('de_DE'); } else if ($language === 'EN') { init_i18n('en_GB'); $_SESSION['_language'] = 'en_GB'; } include $GLOBALS['STUDIP_BASE_PATH'] . '/config/mvv_config.php'; $this->MHBPdf($semester_id, $version_id, $language); init_i18n($current_lang); $_SESSION['_language'] = $current_lang; include $GLOBALS['STUDIP_BASE_PATH'] . '/config/mvv_config.php'; } private function MHBPdf($semester_id, $version_id, $language) { $semester = Semester::find($semester_id); $this->StgteilVersion = StgteilVersion::find($version_id); $this->module = self::getVersionModules($this->StgteilVersion, $semester); $this->semName = $semester->name; $this->Stgteile = []; $this->modulseminare = NULL; $this->veranstaltungen = NULL; $this->dozenten = NULL; $this->archiv = $this; $this->language = $language; PageLayout::removeStylesheet('style.css'); $needle = '
'; $style = ''; $html = $this->render_template_as_string('shared/download/mhb'); $split = explode($needle, $html); $next = false; $blocks = []; foreach($split as $block) { $blocks[] = $style . (($next) ? $needle : '') . $block; $next = true; } $this->exportTcpdf($blocks, self::sanitizeFilename( _('Modulhandbuch'), trim($this->StgteilVersion->studiengangteil->getDisplayName()), $semester->short_name, $language )); } /** * Renders a template and outputs it as a PDF file. * @param string $view_path the path of the template (controller/view...) * @param string $title the title, optional. If not set, takes title from pagelayout. */ protected function exportTcpdf($html, string $title = '') { $pdf = new ExportPDF('P', 'mm', 'A4', true, 'UTF-8', false); // setting defaults $this->config = Config::GetInstance(); $pdf->SetCreator('Stud.IP - ' . $this->config->getValue('UNI_NAME_CLEAN')); // set header and footer fonts $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', 8)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', 8)); // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); //set margins $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); //set auto page breaks $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); //set image scale factor $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); // set default font subsetting mode $pdf->setFontSubsetting(true); // Set font $pdf->SetFont('helvetica', '', 7, '', true); $pdf->AddPage(); $blocks = is_array($html) ? $html : [$html]; foreach($blocks as $html_block) { $pdf->writeHTMLCell(0, 0, '', '', $html_block , 0, 1, 0, true, '', true); } $filename = trim($title ?: PageLayout::getTitle()); $this->render_pdf($pdf, $filename . '.pdf'); } private static function sanitizeFilename($filename) { $replacements = [ 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ß' => 'ss', ]; $filename = implode(' ', func_get_args()); $filename = str_replace(array_keys($replacements), array_values($replacements), $filename); $filename = preg_replace('/\W+/', '_', $filename); $filename = preg_replace('/_{2,}/', '_', $filename); return $filename; } public function getMVVPluginModulDescription($modul, $display_language = null) { if ($display_language == null) { $display_language = Config::get()->MVV_DEFAULT_LANGUAGE; } $path = $GLOBALS['STUDIP_BASE_PATH'] . '/app/views/shared/modul/'; $factory = new Flexi\Factory($path); $template = $factory->open('_modul'); $template->_ = function ($string) { return $this->_($string); }; $template->modul = $modul; $template->display_language = $display_language; $content = $template->render(); $factory = new Flexi\Factory($path); $type = 1; if (count($modul->modulteile) === 1) { $type = 2; } elseif (count($modul->modulteile) === 0) { $type = 3; } if ($type === 1 || $type === 2) { $template = $factory->open('_pruefungen'); $template->_ = function ($string) { return $this->_($string); }; $template->modul = $modul; $template->display_language = $display_language; $content .= $template->render(); if ($type === 1) { $template = $factory->open('_modullvs'); $template->_ = function ($string) { return $this->_($string); }; $template->modul = $modul; $template->display_language = $display_language; $content .= $template->render(); } if ($type === 2) { $template = $factory->open('_modullv'); $template->_ = function ($string) { return $this->_($string); }; $template->modul = $modul; $template->display_language = $display_language; $content .= $template->render(); } } return $content; } /** * Retrieves all modules assigned to the given Studiengangteilversion * grouped by Studiengangteilabschnitte * * @param StgteilVersion $StgteilVersion * @param Semester $semester * @return type */ private static function getVersionModules(StgteilVersion $stgteil_version, Semester $semester) { $stgtv_startsemester = Semester::find($stgteil_version->getValue('start_sem')); $stgtv_endsemester = Semester::find($stgteil_version->getValue('end_sem')); $modul_startsemester = $semester; $modul_endsemester = $semester; $result = []; $all_semesters = SimpleORMapCollection::createFromArray(Semester::getAll()); $public_state = ModuleManagementModel::getPublicStatus('Modul'); if ($stgtv_startsemester->beginn > $semester->beginn) { return []; } if($stgtv_endsemester != NULL && $semester->beginn > $stgtv_endsemester->beginn) { return []; } foreach ($stgteil_version->abschnitte as $teilabschnitt) { if (!isset($result[$teilabschnitt->id])) { $result[$teilabschnitt->id]['part'] = $teilabschnitt; } $modullist = []; foreach ($teilabschnitt->modul_zuordnungen as $abs_modul) { $modul = $abs_modul->modul; if (!in_array($modul->stat, $public_state)) { continue; } if ($modul->start != $modul_startsemester->id) { $modul_startsemester = $all_semesters->find($modul['start']); } if (!empty($modul->end) && $modul->end != $modul_endsemester->id) { $modul_endsemester = $all_semesters->find($modul['end']) ?: false; } if ($modul_startsemester->beginn <= $semester->beginn) { if(!empty($modul->end) && $semester->beginn > $modul_endsemester->beginn) { continue; } if (count($modul->abschnitte_modul) >= 2) { $ab_modul = $modul->abschnitte_modul->findBy('abschnitt_id', $teilabschnitt->abschnitt_id); if (count($ab_modul) == 1) { $modul->abschnitte_modul = $ab_modul; } } $modullist[$modul->id] = $modul; } } if (!empty($modullist)) { $result[$teilabschnitt->abschnitt_id]['modules'] = $modullist; } else { unset($result[$teilabschnitt->abschnitt_id]); } } return $result; } }