. */ if (! defined('BASEPATH')) exit('No direct script access allowed'); use CI3_Events as Events; /** * This controller operates between (interface) the JS (GUI) and the SearchBarLib (back-end) * Provides data to the ajax get calls about the searchbar component * This controller works with JSON calls on the HTTP GET and the output is always JSON */ class LvMenu extends FHCAPI_Controller { /** * Object initialization */ public function __construct() { parent::__construct([ 'getLvMenu' => self::PERM_LOGGED, 'getMultipleLvMenu' => self::PERM_LOGGED ]); $this->load->model("ressource/Mitarbeiter_model"); $this->load->model("education/Lehreinheit_model"); $this->load->model("education/Lehrveranstaltung_model"); $this->load->model("organisation/Studiengang_model"); $this->load->model("accounting/Vertrag_model"); $this->load->model("system/Variable_model"); $this->load->model("person/Benutzergruppe_model"); $this->load->model("education/Lvangebot_model"); $this->load->model("ressource/Lehretools_model"); $this->load->library("PermissionLib", null, 'PermissionLib'); $this->load->library("PhrasesLib", null, 'PhrasesLib'); $this->loadPhrases(array('global', 'lehre')); } //------------------------------------------------------------------------------------------------------------------ // Public methods /** * alternative function to get multiple lvMenus with a single http request * not yet working as intended as the menu_lv.inc.php scripts called by the * lvMenuBuild event have logic coupled to require_once import which results in * a wrong logic after the first invocation -> faulty results for lvinfo, moodle * and several others */ public function getMultipleLvMenu(){ $lvMenuOptionList = $this->input->post('lvMenuOptionList', true); $result =[]; foreach($lvMenuOptionList as $lvMenuOptions){ $lvMenu = $this->getLvMenuInternal($lvMenuOptions['lvid'],$lvMenuOptions['studiensemester_kurzbz']); $result[$lvMenuOptions['lvid']]=$lvMenu; } $this->terminateWithSuccess($result); } private function getLvMenuInternal($lvid, $studiensemester_kurzbz) { // return early if parameters are missing if(!isset($lvid) || !isset($studiensemester_kurzbz)) $this->terminateWithError('Missing parameters', self::ERROR_TYPE_GENERAL); // get the sprache $sprache = getUserLanguage(); // get the user if (!$user=getAuthUID()) $this->terminateWithError($this->p->t('global', 'nichtAngemeldet')); // check if is_lector $is_lector = false; $mares = $this->Mitarbeiter_model->isMitarbeiter($user); if(hasData($mares)) { $is_lector = getData($mares); } // definition of user_is_allowed_to_upload $user_is_allowed_to_upload=false; $angezeigtes_stsem = $studiensemester_kurzbz; // load lehrveranstaltung $lvres = $this->Lehrveranstaltung_model->load($lvid); if(!hasData($lvres)) { $this->terminateWithError('LV ' . $lvid . ' not found.'); } $lv = (getData($lvres))[0]; $this->addMeta('lvInfo',$lv); // define studiengang_kz / semester / lehrverzeichnis $studiengang_kz = $lv->studiengang_kz; $semester = $lv->semester; $short = $lv->lehreverzeichnis; // return empty menu for studiengang_kz = 0 if($studiengang_kz == 0){ $this->terminateWithSuccess("organisatorische_einheit"); } // load studiengang $stgres = $this->Studiengang_model->load(strval($studiengang_kz)); if(!hasData($stgres)) { $this->terminateWithError('Stg ' . $lv->studiengang_kz . ' not found.'); } $stg = (getData($stgres))[0]; $kurzbz = strtoupper($stg->typ . $stg->kurzbz); $short_name = $lv->bezeichnung; $short_short_name = $lv->lehreverzeichnis; // angemeldet $angemeldet = true; if(defined('CIS_LEHRVERANSTALTUNG_WENNANGEMELDET_DETAILS_ANZEIGEN') && CIS_LEHRVERANSTALTUNG_WENNANGEMELDET_DETAILS_ANZEIGEN && !$is_lector) { $angemeldet = false; $lesres = $this->Lehreinheit_model->getLehreinheitenForStudentAndStudienSemester( $lvid, $user, $angezeigtes_stsem ); if(hasData($lesres) && count(getData($lesres)) > 0) $angemeldet = true; } // lehrfach $lehrfach_id=''; if(defined('CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN') && CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN) { // Wenn der eingeloggte User zu einer der Lehreinheiten zugeteilt ist // wird zusätzlich das Lehrfach der Lehreinheit angezeigt. if($is_lector ) { $result = $this->Lehreinheit_model->getLehrfachIdMitarbeiter($angezeigtes_stsem,$user,$lvid); } else { $result = $this->Lehreinheit_model->getLehrfachIdStudierender($angezeigtes_stsem,$user,$lvid); } // Wenn die LV mehrere verschiedenen Lehrfaecher hat, und der User zu mehreren davon zugeteilt ist // wird das Lehrfach nicht angezeigt damit es nicht zu verwirrungen kommt. if( ($lehrfaecher = getData($result)) && count($lehrfaecher)==1 && ($lehrfach = $lehrfaecher[0])) { $lehrfach_id=$lehrfach->lehrfach_id; } } // lektor der lv $lektor_der_lv=false; $leinfores = $this->Lehreinheit_model->getLehreinheitInfo($lvid,$angezeigtes_stsem,$lehrfach_id); $db_result = hasData($leinfores) ? getData($leinfores) : array(); foreach($db_result as $row_lector) { // Lektor wird erst angezeigt wenn der Auftrag erteilt wurde if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') { if (!$this->Vertrag_model->isVertragErteiltLV($lvid, $angezeigtes_stsem, $row_lector->uid)) { continue; } } if($user == $row_lector->uid) { $lektor_der_lv=true; $user_is_allowed_to_upload=true; } // style of the link if($row_lector->lvleiter === true) $style='style="font-weight: bold"'; else $style=''; } //Berechtigungen auf Fachbereichsebene $lehrfach_oe_kurzbz_arr = array(); $fbres = $this->Lehrveranstaltung_model->getBerechtigungenAufFachberechsebene($lvid, $angezeigtes_stsem); $fbs = (hasData($fbres)) ? getData($fbres) : array(); foreach($fbs as $row) { $lehrfach_oe_kurzbz_arr[] = $row->oe_kurzbz; if($this->PermissionLib->isBerechtigt('lehre', null, $row->oe_kurzbz) || $this->PermissionLib->isBerechtigt('assistenz', null, $stg->oe_kurzbz)) { $user_is_allowed_to_upload=true; } } // FH-Core Menu Logic // ########################################################################################## $menu = array(); $this->fhc_menu_lvinfo($menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr); $this->fhc_menu_feedback($menu, $angemeldet, $lvid); $this->fhc_menu_gesamtnote($menu, $angemeldet, $lvid, $lv, $is_lector, $angezeigtes_stsem); $this->fhc_menu_emailStudierende($menu, $user, $angemeldet, $lvid, $angezeigtes_stsem); $this->fhc_menu_abmeldung($menu, $user, $is_lector, $lvid, $angezeigtes_stsem); $this->fhc_menu_lehretools($menu, $lvid, $angezeigtes_stsem, $sprache); $this->fhc_menu_anrechnungStudent($menu, $lvid, $angezeigtes_stsem); $this->fhc_menu_anrechnungLector($menu, $angezeigtes_stsem); // Addons Menu Logic // ########################################################################################## $params = [ 'sprache'=>$sprache, //'p'=>$p, 'ci_p'=> $this->p, //'db'=>$db, 'user'=>$user, 'is_lector'=>$is_lector, 'user_is_allowed_to_upload'=>$user_is_allowed_to_upload, //'rechte'=>$rechte, 'angezeigtes_stsem'=>$angezeigtes_stsem, //'lehreinheit'=>$lehreinheit, 'lv_obj'=>$lv, 'lv'=>$lv, 'lvid'=>$lvid, 'studiengang_kz'=>$studiengang_kz, 'semester'=>$semester, 'short'=>$short, 'stg_obj'=>$stg, 'kurzbz'=>$kurzbz, 'short_name'=>$short_name, 'short_short_name'=>$short_short_name, //'dir_name'=>$dir_name, 'angemeldet'=>$angemeldet, 'lehrfach_id'=>$lehrfach_id, 'lektor_der_lv'=>$lektor_der_lv, 'lehrfach_oe_kurzbz_arr'=>$lehrfach_oe_kurzbz_arr, 'permissionLib' => &$this->PermissionLib, 'phrasesLib' => &$this->PhrasesLib ]; Events::trigger('lvMenuBuild', // passing $menu per reference function & () use (&$menu) { return $menu; }, $params ); // Menu sortieren // ########################################################################################## foreach ($menu as $key => $row){ // removes menu points that are not needed in the c4 lvUebersicht if( !array_key_exists('c4_link',$row) || !array_key_exists('c4_icon',$row)){ unset($menu[$key]); continue; } // fills pos array to sort the menu $pos[$key] = $row['position']; } array_multisort($pos, SORT_ASC, SORT_NUMERIC, $menu); return $menu; } /** * */ public function getLvMenu($lvid, $studiensemester_kurzbz) { $menu = $this->getLvMenuInternal($lvid, $studiensemester_kurzbz); $this->terminateWithSuccess($menu); } private function fhc_menu_lvinfo(&$menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr){ // LVINFO if(!defined('CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN) { $c4_linkList=array(); // Bearbeiten Button anzeigen wenn Lektor der LV und bearbeiten fuer Lektoren aktiviert ist // Oder Berechtigung zum Bearbeiten eingetragen ist if((!defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && $lektor_der_lv) || (defined('CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT') && CIS_LEHRVERANSTALTUNG_LVINFO_LEKTOR_EDIT==true && $lektor_der_lv) || $this->PermissionLib->isBerechtigt('lehre/lvinfo',$studiengang_kz) || $this->PermissionLib->isBerechtigtMultipleOe('lehre/lvinfo', $lehrfach_oe_kurzbz_arr) ) { $c4_linkList[]= [$this->p->t('lehre', 'lvInfoBearbeiten'), 'ects/index.php?lvid='.$lvid]; } elseif ($is_lector) { $c4_linkList[]= ["Bearbeiten der LV-Infos derzeit gesperrt",'#']; } $menu[]=array ( 'id'=>'core_menu_lvinfo', 'position'=>'10', 'name'=>$this->p->t('lehre', 'lehrveranstaltungsinformation'), 'phrase' => 'lehre/lehrveranstaltungsinformation', 'icon'=>'../../../skin/images/button_lvinfo.png', 'link'=>'', 'c4_icon'=> base_url('skin/images/button_lvinfo.png'), 'c4_link'=>'', 'c4_linkList'=>$c4_linkList ); } } private function fhc_menu_feedback(&$menu, $angemeldet, $lvid){ //FEEDBACK if((!defined('CIS_LEHRVERANSTALTUNG_FEEDBACK_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_FEEDBACK_ANZEIGEN) && $angemeldet) { $menu[]=array ( 'id'=>'core_menu_feedback', 'position'=>'60', 'name'=>$this->p->t('lehre', 'feedback'), 'phrase' => 'lehre/feedback', 'c4_icon'=> base_url('skin/images/button_feedback.png'), 'c4_link'=> base_url('feedback.php?lvid='.$lvid), ); } } private function fhc_menu_gesamtnote(&$menu, $angemeldet, $lvid, $lv_obj, $is_lector, $angezeigtes_stsem){ //Gesamtnote if($is_lector && ((!defined('CIS_LEHRVERANSTALTUNG_GESAMTNOTE_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_GESAMTNOTE_ANZEIGEN) && $angemeldet)) { if($lv_obj->benotung) { $menu[]=array ( 'id'=>'core_menu_gesamtnote', 'position'=>'80', 'name'=>$this->p->t('lehre', 'gesamtnote'), 'phrase' => 'lehre/gesamtnote', 'c4_icon'=> base_url('skin/images/button_endnote.png'), 'c4_link'=> base_url('cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem)) //'c4_link'=> base_url('benotungstool/lvgesamtnoteverwalten.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem)) ); } else { $menu[]=array ( 'id'=>'core_menu_gesamtnote', 'position'=>'80', 'name'=>$this->p->t('lehre', 'gesamtnote'), 'phrase'=>'lehre/gesamtnote', 'c4_icon'=>base_url('skin/images/button_endnote.png'), 'c4_link'=>'#', 'c4_linkList'=>[[$this->p->t('lehre', 'noteneingabedeaktiviert'),'#']], ); } } } private function fhc_menu_emailStudierende(&$menu, $user, $angemeldet, $lvid, $angezeigtes_stsem){ // Email an Studierende if((!defined('CIS_LEHRVERANSTALTUNG_MAILSTUDIERENDE_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_MAILSTUDIERENDE_ANZEIGEN) && $angemeldet) { $mailto='mailto:'; $c4_linkList=array(); $studentMailsRes = $this->Lehrveranstaltung_model->getStudentEMail($lvid, $angezeigtes_stsem); // get the data of the database result and map the array of objects to their object property $studentMails = $this->getDataOrTerminateWithError($studentMailsRes, 'No student mails found'); $nomail=''; $variablesres = $this->Variable_model->getVariables($user); $variables = (hasData($variablesres)) ? getData($variablesres) : array(); foreach ($studentMails as $row) { if($row->gruppe_kurzbz != '') { $bngrp_uids = $this->Benutzergruppe_model->getUids($row->gruppe_kurzbz, $angezeigtes_stsem); if(count($bngrp_uids) > 0) { if(!$row->mailgrp) { $nomail = $row->gruppe_kurzbz . ' '; } else { $mailto .= mb_strtolower($row->gruppe_kurzbz . '@' . DOMAIN . $variables['emailadressentrennzeichen']); } } } else { $mailto .= mb_strtolower($row->stg_typ . $row->stg_kurzbz . $row->semester . trim($row->verband) . trim($row->gruppe) . '@' . DOMAIN . $variables['emailadressentrennzeichen']); } } if($nomail != '') { $c4_linkList[] = array( $this->p->t('lehre', 'keinMailverteiler', array('nomail' => $nomail)), '#' ); $link_onclick = 'alert(\''.$this->p->t('lehre', 'keinMailverteiler', array('nomail' => $nomail)) . '\');'; } else { $link_onclick = ''; } $menu[]=array ( 'id'=>'core_menu_mailanstudierende', 'position'=>'100', 'name'=>$this->p->t('lehre', 'mail'), 'phrase' => 'lehre/mail', 'c4_icon'=>base_url('skin/images/button_feedback.png'), 'c4_icon2' => 'fa-regular fa-envelope', 'c4_link'=>$mailto, 'c4_linkList'=>$c4_linkList, 'link_onclick'=>$link_onclick ); } } private function fhc_menu_abmeldung(&$menu, $user, $is_lector, $lvid, $angezeigtes_stsem){ if(!defined('CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN) { if(!$is_lector) { $gruppen = $this->Lvangebot_model->AbmeldungMoeglich($lvid, $angezeigtes_stsem, $user); if(count($gruppen) > 0) { $menu[]=array ( 'id'=>'core_menu_abmeldung', 'position'=>'120', 'name'=>$this->p->t('lehre', 'abmelden'), 'phrase'=>'lehre/abmelden', 'c4_icon'=>base_url('skin/images/button_studiupload.png'), 'c4_link'=>base_url('abmeldung.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem)), ); } } } } private function fhc_menu_lehretools(&$menu, $lvid, $angezeigtes_stsem, $sprache){ //Anzeigen von zusaetzlichen Lehre-Tools $lehretools = $this->Lehretools_model->getTools($lvid, $angezeigtes_stsem, $sprache); foreach($lehretools as $row) { $menu[] = array( 'id' => 'core_menu_lehretools_' . $row->lehre_tools_id, 'position' => '1000', 'name' => $row->bezeichnung, 'c4_icon' => base_url('cms/dms.php?id='.$row->logo_dms_id), 'c4_link' => $row->basis_url, ); } } private function fhc_menu_anrechnungStudent(&$menu, $lvid, $angezeigtes_stsem){ // Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer Studenten if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN) && $this->PermissionLib->isBerechtigt('student/anrechnung_beantragen')) { $menu[]=array ( 'id' => 'core_menu_anerkennungNachgewiesenerKenntnisse', 'position' => '128', 'name' => $this->p->t('lehre', 'anrechnung'), 'phrase' => 'lehre/anrechnung', 'c4_icon' => base_url('skin/images/button_listen.png'), 'c4_icon2' => 'fa-regular fa-folder-open', 'c4_link' => base_url('cis.php/lehre/anrechnung/RequestAnrechnung?studiensemester='.urlencode($angezeigtes_stsem).'&lv_id='.urlencode($lvid)) ); } } private function fhc_menu_anrechnungLector(&$menu, $angezeigtes_stsem){ // Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer LektorInnen if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN) && $this->PermissionLib->isBerechtigt('lehre/anrechnung_empfehlen')) { $menu[]=array ( 'id' => 'core_menu_anerkennungNachgewiesenerKenntnisse_empfehlen', 'position' => '128', 'name' => $this->p->t('lehre', 'anrechnungen'), 'phrase' => 'lehre/anrechnung', 'c4_icon'=> base_url('skin/images/button_listen.png'), 'c4_icon2' => 'fa-regular fa-folder-open', 'c4_link' => base_url('cis.php/lehre/anrechnung/ReviewAnrechnungUebersicht?studiensemester='.urlencode($angezeigtes_stsem)) ); } } }