diff --git a/application/controllers/api/frontend/v1/LvMenu.php b/application/controllers/api/frontend/v1/LvMenu.php index f9a8d0568..45741b567 100644 --- a/application/controllers/api/frontend/v1/LvMenu.php +++ b/application/controllers/api/frontend/v1/LvMenu.php @@ -39,6 +39,18 @@ class LvMenu extends FHCAPI_Controller 'getLvMenu' => 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"); $this->loadPhrases(array('global')); } @@ -58,57 +70,36 @@ class LvMenu extends FHCAPI_Controller // FH-Core Variables // ########################################################################################## - - require_once(FHCPATH.'config/cis.config.inc.php'); - require_once(FHCPATH.'include/lehrveranstaltung.class.php'); - require_once(FHCPATH.'include/studiensemester.class.php'); - require_once(FHCPATH.'include/lehreinheit.class.php'); - require_once(FHCPATH.'include/vertrag.class.php'); - require_once(FHCPATH.'include/functions.inc.php'); - require_once(FHCPATH.'include/benutzerberechtigung.class.php'); - require_once(FHCPATH.'include/studiengang.class.php'); require_once(FHCPATH.'include/phrasen.class.php'); - require_once(FHCPATH.'include/lvangebot.class.php'); - require_once(FHCPATH.'include/lehre_tools.class.php'); - // data gets not returned - //require_once(FHCPATH.'addons/moodle/lib/LogicCourses.php'); - //require_once(FHCPATH.'addons/moodle/lib/Database.php'); // get the sprache - $sprache = getSprache(); + $sprache = getUserLanguage(); $p = new phrasen($sprache); //$p = $this->$p; - // get the db - if (!$db = new basis_db()) - die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); - // get the user if (!$user=getAuthUID()) - die($p->t('global/nichtAngemeldet')); + $this->terminateWithError($p->t('global/nichtAngemeldet')); // check if is_lector - if(check_lektor($user)) - $is_lector=true; - else - $is_lector=false; + $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; - - // rechte des users - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($user); - $angezeigtes_stsem = $studiensemester_kurzbz; - // load lehreinheit - $lehreinheit = new lehreinheit($lvid); - // load lehrveranstaltung - $lv_obj = new lehrveranstaltung(); - $lv_obj->load($lvid); - $lv=$lv_obj; + $lvres = $this->Lehrveranstaltung_model->load($lvid); + if(!hasData($lvres)) + { + $this->terminateWithError('LV ' . $lvid . ' not found.'); + } + $lv = (getData($lvres))[0]; // define studiengang_kz / semester / lehrverzeichnis $studiengang_kz = $lv->studiengang_kz; @@ -116,31 +107,28 @@ class LvMenu extends FHCAPI_Controller $short = $lv->lehreverzeichnis; // load studiengang - $stg_obj = new studiengang(); - $stg_obj->load($lv->studiengang_kz); - $kurzbz = $stg_obj->kuerzel; + $stgres = $this->Studiengang_model->load($lv->studiengang_kz); + if(!hasData($stgres)) + { + $this->terminateWithError('Stg ' . $lv->studiengang_kz . ' nof found.'); + } + $stg = (getData($stgres))[0]; + $kurzbz = strtoupper($stg->typ . $stg->kurzbz); $short_name = $lv->bezeichnung; $short_short_name = $lv->lehreverzeichnis; - // create documents directory - $dir_name=DOC_ROOT.'/documents'; - if(!is_dir($dir_name)) - { - exec('mkdir -m 755 '.escapeshellarg($dir_name)); - exec('sudo chown www-data:teacher '.escapeshellarg($dir_name)); - } - // angemeldet $angemeldet = true; if(defined('CIS_LEHRVERANSTALTUNG_WENNANGEMELDET_DETAILS_ANZEIGEN') && CIS_LEHRVERANSTALTUNG_WENNANGEMELDET_DETAILS_ANZEIGEN && !$is_lector) { $angemeldet = false; - $lehrveranstaltung_obj = new lehrveranstaltung(); - $result = $lehrveranstaltung_obj->getLehreinheitenOfLv($lvid, $user, $angezeigtes_stsem); + $lesres = $this->Lehreinheit_model->getLehreinheitenForStudentAndStudienSemester( + $lvid, $user, $angezeigtes_stsem + ); - if(count($result)>0) + if(hasData($lesres) && count(getData($lesres)) > 0) $angemeldet = true; } @@ -153,72 +141,66 @@ class LvMenu extends FHCAPI_Controller // wird zusätzlich das Lehrfach der Lehreinheit angezeigt. if($is_lector ) { - $result = $lehreinheit->lehrfach_id_mitarbeiter($angezeigtes_stsem,$user,$lvid); + $result = $this->Lehreinheit_model->getLehrfachIdMitarbeiter($angezeigtes_stsem,$user,$lvid); } else { - $result = $lehreinheit->lehrfach_id_studierender($angezeigtes_stsem,$user,$lvid); - + $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(count($result)==1 && $row = $result[0]) - { - $lehrfach_id=$row->lehrfach_id; + if( ($lehrfaecher = getData($result)) && count($lehrfaecher)==1 && ($lehrfach = $lehrfaecher[0])) + { + $lehrfach_id=$lehrfach->lehrfach_id; } } // lektor der lv $lektor_der_lv=false; - - $db_result = $lehreinheit->lehreinheitInfo($lvid,$angezeigtes_stsem,$lehrfach_id); - $num_rows_result = count($db_result); + $leinfores = $this->Lehreinheit_model->getLehreinheitInfo($lvid,$angezeigtes_stsem,$lehrfach_id); + $db_result = hasData($leinfores) ? getData($leinfores) : array(); - if($num_rows_result > 0) + foreach($db_result as $row_lector) { - - 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 != '') { - - // 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)) { - $vertrag = new vertrag(); - if (!$vertrag->isVertragErteiltLV($lvid, $angezeigtes_stsem, $row_lector->uid)) - { - continue; - } + continue; } - - - if($user==$row_lector->uid) - { - $lektor_der_lv=true; - $user_is_allowed_to_upload=true; - } - - // style of the link - if($row_lector->lvleiter=='t') - $style='style="font-weight: bold"'; - else - $style=''; - } + + + 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(); - if($result = $lv_obj->getBerechtigungenAufFachberechsebene($lvid,$angezeigtes_stsem)) + $fbres = $this->Lehrveranstaltung_model->getBerechtigungenAufFachberechsebene($lvid, $angezeigtes_stsem); + $fbs = (hasData($fbres)) ? getData($fbres) : array(); + foreach($fbs as $row) { - foreach($result 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)) { - $lehrfach_oe_kurzbz_arr[]=$row->oe_kurzbz; - if($rechte->isBerechtigt('lehre',$row->oe_kurzbz) || $rechte->isBerechtigt('assistenz',$stg_obj->oe_kurzbz)){ - $user_is_allowed_to_upload=true; - } + $user_is_allowed_to_upload=true; } } @@ -230,21 +212,21 @@ class LvMenu extends FHCAPI_Controller //todo: digitale anwesenheiten sollte ein Events.php im config/ folder beinhalten //$this->fhc_menu_digitale_anwesenheiten($menu, $angemeldet, $studiengang_kz, $semester, $lvid, $angezeigtes_stsem, $p); - $this->fhc_menu_lvinfo($menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $rechte, $lehrfach_oe_kurzbz_arr, $p); + $this->fhc_menu_lvinfo($menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr, $p); $this->fhc_menu_feedback($menu, $angemeldet, $lvid, $p); - $this->fhc_menu_gesamtnote($menu, $angemeldet, $lvid, $lv_obj, $is_lector, $angezeigtes_stsem, $p); + $this->fhc_menu_gesamtnote($menu, $angemeldet, $lvid, $lv, $is_lector, $angezeigtes_stsem, $p); - $this->fhc_menu_emailStudierende($menu, $angemeldet, $lehreinheit->lehreinheit_id, $p); + $this->fhc_menu_emailStudierende($menu, $user, $angemeldet, $lvid, $angezeigtes_stsem, $p); $this->fhc_menu_abmeldung($menu, $user, $is_lector, $lvid, $angezeigtes_stsem, $p); $this->fhc_menu_lehretools($menu, $lvid, $angezeigtes_stsem, $sprache); - $this->fhc_menu_anrechnungStudent($menu, $rechte, $lvid, $angezeigtes_stsem, $p); + $this->fhc_menu_anrechnungStudent($menu, $lvid, $angezeigtes_stsem, $p); - $this->fhc_menu_anrechnungLector($menu, $rechte, $angezeigtes_stsem, $p); + $this->fhc_menu_anrechnungLector($menu, $angezeigtes_stsem, $p); // LEGACY FH-CORE MENU POINTS //$this->fhc_menu_notenliste($menu, $angemeldet, $is_lector, $lvid, $studiengang_kz, $angezeigtes_stsem, $kurzbz, $semester, $short_short_name, $p); @@ -256,29 +238,29 @@ class LvMenu extends FHCAPI_Controller // Addons Menu Logic // ########################################################################################## - + $params = [ 'sprache'=>$sprache, 'p'=>$p, 'ci_p'=> $this->p, - 'db'=>$db, + //'db'=>$db, 'user'=>$user, 'is_lector'=>$is_lector, 'user_is_allowed_to_upload'=>$user_is_allowed_to_upload, - 'rechte'=>$rechte, + //'rechte'=>$rechte, 'angezeigtes_stsem'=>$angezeigtes_stsem, - 'lehreinheit'=>$lehreinheit, - 'lv_obj'=>$lv_obj, + //'lehreinheit'=>$lehreinheit, + 'lv_obj'=>$lv, 'lv'=>$lv, 'lvid'=>$lvid, 'studiengang_kz'=>$studiengang_kz, 'semester'=>$semester, 'short'=>$short, - 'stg_obj'=>$stg_obj, + 'stg_obj'=>$stg, 'kurzbz'=>$kurzbz, 'short_name'=>$short_name, 'short_short_name'=>$short_short_name, - 'dir_name'=>$dir_name, + //'dir_name'=>$dir_name, 'angemeldet'=>$angemeldet, 'lehrfach_id'=>$lehrfach_id, 'lektor_der_lv'=>$lektor_der_lv, @@ -311,10 +293,6 @@ class LvMenu extends FHCAPI_Controller array_multisort($pos, SORT_ASC, SORT_NUMERIC, $menu); - // DEBUGGING - $this->addMeta("is_lector",$is_lector); - $this->addMeta("lektor_der_lv",$lektor_der_lv); - // HTTP response // ########################################################################################## @@ -340,7 +318,7 @@ class LvMenu extends FHCAPI_Controller } } - private function fhc_menu_lvinfo(&$menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $rechte, $lehrfach_oe_kurzbz_arr, $p){ + private function fhc_menu_lvinfo(&$menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr, $p){ // LVINFO if(!defined('CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN) @@ -351,8 +329,8 @@ class LvMenu extends FHCAPI_Controller // 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) - || $rechte->isBerechtigt('lehre/lvinfo',$studiengang_kz) - || $rechte->isBerechtigtMultipleOe('lehre/lvinfo', $lehrfach_oe_kurzbz_arr) + || $this->PermissionLib->isBerechtigt('lehre/lvinfo',$studiengang_kz) + || $this->PermissionLib->isBerechtigtMultipleOe('lehre/lvinfo', $lehrfach_oe_kurzbz_arr) ) { $c4_linkList[]= [$p->t('lehre/lvInfoBearbeiten'), 'ects/index.php?lvid='.$lvid]; @@ -424,43 +402,62 @@ class LvMenu extends FHCAPI_Controller - private function fhc_menu_emailStudierende(&$menu, $angemeldet, $lehreinheit_id,$p){ + private function fhc_menu_emailStudierende(&$menu, $user, $angemeldet, $lvid, $angezeigtes_stsem, $p){ // Email an Studierende if((!defined('CIS_LEHRVERANSTALTUNG_MAILSTUDIERENDE_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_MAILSTUDIERENDE_ANZEIGEN) && $angemeldet) { $mailto='mailto:'; $c4_linkList=array(); - // load the Lehreinheit model and get the student mails - $this->load->model('education/Lehreinheit_model','LehreinheitModel'); - $studentMails = $this->LehreinheitModel->getStudentenMail($lehreinheit_id); + $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($studentMails, 'No student mails found'); + $studentMails = $this->getDataOrTerminateWithError($studentMailsRes, 'No student mails found'); - // emails used to create the mailto link - $mailtoMails = array(); - $noMails = array(); - $noMailLink = FALSE; - foreach($studentMails as $mail){ - - if($mail->mail == 'nomail'){ - $noMails[]=$mail->gruppe_kurzbz; - $noMailLink= TRUE; - }else{ - $mailtoMails[]=$mail->mail; + $nomail=''; + $variablesres = $this->Variable_model->getVariables($user); + $variables = (hasData($variablesres)) ? getData($variablesres) : array(); + + foreach ($studentMails as $row) + { + if($row->gruppe_kurzbz != '') + { + $bngrp_uids = $this->Benutzergrupp_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($noMailLink){ - $c4_linkList[]=[$p->t('lehre/keinMailverteiler',array(implode(" ",$noMails))), '#']; - $link_onclick='alert(\''.$p->t('lehre/keinMailverteiler',array(implode(" ",$noMails))).'\');'; - }else{ - $link_onclick=''; + if($nomail != '') + { + $c4_linkList[] = array( + $p->t('lehre/keinMailverteiler', array($nomail)), + '#' + ); + $link_onclick = 'alert(\''.$p->t('lehre/keinMailverteiler', array($nomail)) . '\');'; + } + else + { + $link_onclick = ''; } - $mailto .= implode(',',$mailtoMails); $menu[]=array ( @@ -483,9 +480,8 @@ class LvMenu extends FHCAPI_Controller { if(!$is_lector) { - $lvangebot = new lvangebot(); - $gruppen = $lvangebot->AbmeldungMoeglich($lvid, $angezeigtes_stsem, $user); - if(count($gruppen)>0) + $gruppen = $this->Lvangebot_model->AbmeldungMoeglich($lvid, $angezeigtes_stsem, $user); + if(count($gruppen) > 0) { $menu[]=array ( @@ -503,304 +499,50 @@ class LvMenu extends FHCAPI_Controller private function fhc_menu_lehretools(&$menu, $lvid, $angezeigtes_stsem, $sprache){ //Anzeigen von zusaetzlichen Lehre-Tools - $lehretools = new lehre_tools(); - if($lehretools->getTools($lvid, $angezeigtes_stsem)) + $lehretools = $this->Lehretools_model->getTools($lvid, $angezeigtes_stsem, $sprache); + foreach($lehretools as $row) { - if(count($lehretools->result)>0) - { - foreach($lehretools->result as $row) - { - $menu[]=array - ( - 'id'=>'core_menu_lehretools_'.$row->lehre_tools_id, - 'position'=>'1000', - 'name'=>$row->bezeichnung[$sprache], - 'c4_icon'=>base_url('cms/dms.php?id='.$row->logo_dms_id), - 'c4_link'=>$row->basis_url, - ); - } - } + $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, $rechte, $lvid, $angezeigtes_stsem, $p){ + private function fhc_menu_anrechnungStudent(&$menu, $lvid, $angezeigtes_stsem, $p){ // Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer Studenten if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN) - && $rechte->isBerechtigt('student/anrechnung_beantragen')) + && $this->PermissionLib->isBerechtigt('student/anrechnung_beantragen')) { $menu[]=array ( - 'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse', - 'position'=>'128', - 'name'=>$p->t('lehre/anrechnung'), - 'c4_icon'=>base_url('skin/images/button_listen.png'), + 'id' => 'core_menu_anerkennungNachgewiesenerKenntnisse', + 'position' => '128', + 'name' => $p->t('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, $rechte, $angezeigtes_stsem, $p){ + private function fhc_menu_anrechnungLector(&$menu, $angezeigtes_stsem, $p){ // Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer LektorInnen if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN) - && $rechte->isBerechtigt('lehre/anrechnung_empfehlen')) + && $this->PermissionLib->isBerechtigt('lehre/anrechnung_empfehlen')) { - $menu[]=array - ( - 'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse_empfehlen', - 'position'=>'128', - 'name'=>$p->t('lehre/anrechnungen'), - '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)) - ); - } - } - -// OLD PINBOARD MENU POINT ********************************************************************************************************************************************* -/* -private function fhc_menu_pinboard(&$menu, $angemeldet, $is_lector, $studiengang_kz, $semester, $p){ - // Pinboard - if((!defined('CIS_LEHRVERANSTALTUNG_PINBOARD_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_PINBOARD_ANZEIGEN) && $angemeldet) - { - $text=''; - if($is_lector) - $text.= "".$p->t('profil/adminstration').""; - - // this is the new cis4 version $menu[]=array ( - 'id'=>'core_menu_pinboard', - 'position'=>'110', - 'name'=>$p->t('lehre/pinboard'), - 'c4_icon'=>base_url('skin/images/button_pinboard.png'), - 'c4_link'=>base_url('CisVue/Cms/news'), - 'text'=>$text - ); - - - } - } -*/ - -// LEGACY MENU POINTS THAT USED OWN DIRECTORIES ************************************************************************************************************************* -/* - private function fhc_menu_semesterplan(&$menu, $angemeldet, $user_is_allowed_to_upload, $rechte, $lvid, $studiengang_kz, $kurzbz, $semester, $short_short_name, $p){ - - // Semesterplan - if((!defined('CIS_LEHRVERANSTALTUNG_SEMESTERPLAN_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_SEMESTERPLAN_ANZEIGEN) && $angemeldet) - { - $dir_name = $this->ensureDirectoryExists($kurzbz, $semester, $short_short_name, 'semesterplan','teacher'); - - $dir_empty = $this->isDirectoryEmpty($dir_name); - - if($dir_empty == false) - { - $link = $dir_name.'/'; - } - else - $link = ''; - - $text=''; - if((!defined('CIS_LEHRVERANSTALTUNG_SEMESTERPLAN_LEKTOR_EDIT') && $user_is_allowed_to_upload) - || (defined('CIS_LEHRVERANSTALTUNG_SEMESTERPLAN_LEKTOR_EDIT') && CIS_LEHRVERANSTALTUNG_SEMESTERPLAN_LEKTOR_EDIT==true && $user_is_allowed_to_upload) - || $rechte->isBerechtigt('admin',$studiengang_kz) || $rechte->isBerechtigt('lehre',$studiengang_kz)) - { - $text.= ''; - $text.= $p->t('lehre/semesterplanUpload').""; - - $text.= '   '; - $text.= $p->t('lehre/semesterplanVorlage'); - $text.= ' [html]'; - $text.= ''; - $text.= ' '; - $text.= '[doc]'; - $text.= ''; - $text.= ' ('.$p->t('lehre/semesterplanVorlageHilfe').')'; - } - - $menu[]=array - ( - 'id'=>'core_menu_semesterplan', - 'position'=>'20', - 'name'=>$p->t('lehre/semesterplan'), - 'icon'=>'../../../skin/images/button_semplan.png', - 'link'=>$link, - 'c4_icon'=> base_url('skin/images/button_semplan.png'), - 'c4_link'=> $link, - 'link_target'=>'_blank', - 'text'=>$text - ); - } - } - - private function fhc_menu_stundenupload(&$menu, $angemeldet, $lvid, $is_lector, $studiengang_kz, $kurzbz, $semester, $short, $short_short_name, $p){ - // Studentenupload - if((!defined('CIS_LEHRVERANSTALTUNG_STUDENTENUPLOAD_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_STUDENTENUPLOAD_ANZEIGEN) && $angemeldet) - { - $link=''; - $link_target=''; - - $dir_name = $this->ensureDirectoryExists($kurzbz, $semester, $short_short_name, 'upload','student'); - $dir_empty = $this->isDirectoryEmpty($dir_name); - - if(isset($dir_empty) && $dir_empty == false) - { - if($is_lector == true) - { - $link='lector_choice.php?lvid='.urlencode($lvid); - $link_target='_blank'; - } - else - { - $link='upload.php?course_id='.urlencode($studiengang_kz).'&term_id='.urlencode($semester).'&short='.urlencode($short); - $link_target='_blank'; - } - } - else - { - if($is_lector == true) - { - $link=''; - } - else - { - $link='upload.php?course_id='.urlencode($studiengang_kz).'&term_id='.urlencode($semester).'&short='.urlencode($short); - $link_target='_blank'; - } - } - $menu[]=array - ( - 'id'=>'core_menu_studentenupload', - 'position'=>'90', - 'name'=>$p->t('lehre/studentenAbgabe'), - 'c4_icon'=>'skin/images/button_studiupload.png', - 'c4_link'=>$link, - 'link_target'=>$link_target - ); - } - } - - private function fhc_menu_download(&$menu, $angemeldet, $user_is_allowed_to_upload, $rechte, $semester, $kurzbz, $studiengang_kz, $short_short_name, $short, $p){ - - if((!defined('CIS_LEHRVERANSTALTUNG_DOWNLOAD_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_DOWNLOAD_ANZEIGEN) && $angemeldet) - { - $dir_name = $this->ensureDirectoryExists($kurzbz, $semester, $short_short_name, 'download','teacher'); - $dir_empty = $this->isDirectoryEmpty($dir_name); - - $text = ''; - if($dir_empty == false) - { - $link = $dir_name.'/'; - } - else - $link = ''; - - //Wenn user eine Lehrfachzuteilung fuer dieses Lehrfach hat wird - //Ein Link zum Upload angezeigt und ein Link um das Download-Verzeichnis - //als Zip Archiv herunterzuladen - if($user_is_allowed_to_upload || $rechte->isBerechtigt('admin',$studiengang_kz) || $rechte->isBerechtigt('lehre',$studiengang_kz))// || $rechte->isBerechtigt('lehre',null,null,$fachbereich_id)) - { - $text.= mb_strtolower("$kurzbz/$semester/$short/download"); - $text.= '
'; - $text.= "".$p->t('lehre/upload').""; - $text.= '   '; - } - - $menu[]=array - ( - 'id'=>'core_menu_download', - 'position'=>'30', - 'name'=>$p->t('lehre/download'), - 'icon'=>'../../../skin/images/button_download.png', - 'link'=>$link, - 'c4_icon'=> base_url('skin/images/button_download.png'), - 'c4_link'=>$link, - 'text'=>$text - ); - } - } - - private function fhc_menu_notenliste(&$menu, $angemeldet, $is_lector, $lvid, $studiengang_kz, $angezeigtes_stsem, $kurzbz, $semester, $short_short_name, $p){ - // Anwesenheits und Notenlisten - if(CIS_LEHRVERANSTALTUNG_LEISTUNGSUEBERSICHT_ANZEIGEN || $is_lector) - { - $link=''; - $name=''; - if($is_lector) - { - $name = $p->t('lehre/anwesenheitsUndNotenlisten'); - $link= "anwesenheitsliste.php?stg_kz=$studiengang_kz&sem=$semester&lvid=$lvid&stsem=$angezeigtes_stsem"; - } - - $text=''; - if(CIS_LEHRVERANSTALTUNG_LEISTUNGSUEBERSICHT_ANZEIGEN && ($angemeldet || $is_lector)) - { - $dir_name = $this->ensureDirectoryExists($kurzbz, $semester, $short_short_name, 'leistung','teacher'); - $dir_empty = $this->isDirectoryEmpty($dir_name); - - if($dir_empty == false) - { - - if($is_lector) - { - $text.= ''; - $text.= ''.$p->t('lehre/leistungsuebersicht').''; - $text.= ''; - } - else - { - $name = $p->t('lehre/leistungsuebersicht'); - $link = $dir_name; - } - } - else - { - if($is_lector) - { - $text.= ''.$p->t('lehre/leistungsuebersicht').''; - } - else - { - $name = $p->t('lehre/leistungsuebersicht'); - $link = ''; - } - } - } - - $menu[]=array - ( - 'id'=>'core_menu_anwesenheitslisten', - 'position'=>'40', - 'name'=>$name, - 'icon'=>'../../../skin/images/button_listen.png', - 'link'=>$link, + 'id' => 'core_menu_anerkennungNachgewiesenerKenntnisse_empfehlen', + 'position' => '128', + 'name' => $p->t('lehre/anrechnungen'), 'c4_icon'=> base_url('skin/images/button_listen.png'), - 'c4_link'=>$link, - 'text'=>$text + 'c4_icon2' => 'fa-regular fa-folder-open', + 'c4_link' => base_url('cis.php/lehre/anrechnung/ReviewAnrechnungUebersicht?studiensemester='.urlencode($angezeigtes_stsem)) ); } - } - - private function ensureDirectoryExists($kurzbz, $semester, $short_short_name, $type, $role){ - $dir_name = DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name).'/'.$type; - - if (!is_dir($dir_name)) { - exec('mkdir -m 775 -p '.escapeshellarg($dir_name)); - exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz))); - exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester)); - exec('sudo chown www-data:teacher '.escapeshellarg(DOC_ROOT.'/documents/'.mb_strtolower($kurzbz).'/'.$semester.'/'.mb_strtolower($short_short_name))); - exec('sudo chown www-data:'.$role.' '.escapeshellarg($dir_name)); - } - - return $dir_name; - } - - private function isDirectoryEmpty($dir){ - return count(scandir($dir)) == 2 ? true : false; - } - - */ - - + } } \ No newline at end of file diff --git a/application/libraries/PermissionLib.php b/application/libraries/PermissionLib.php index 857defbf7..c6e693666 100644 --- a/application/libraries/PermissionLib.php +++ b/application/libraries/PermissionLib.php @@ -95,6 +95,33 @@ class PermissionLib return $isBerechtigt; } + /** + * Prueft ob die Berechtigung zumindest fuer eine der angegebenen OE vorhanden ist. + * @param $berechtigung_kurzbz + * @param $oe_kurzbz + * @param $art + * @param $kostenstelle_id + * @return boolean + */ + public function isBerechtigtMultipleOe($berechtigung_kurzbz, $oe_kurzbz, $art=null, $kostenstelle_id=null) + { + $results = array(); + + foreach($oe_kurzbz as $value) + { + $results[] = $this->isBerechtigt($berechtigung_kurzbz, $value, $art, $kostenstelle_id); + } + + if(!in_array(true, $results)) + { + return false; + } + else + { + return true; + } + } + /** * Checks if the caller is allowed to access to this content with the given permissions * - if it's called from command line than it's trusted diff --git a/application/models/accounting/Vertrag_model.php b/application/models/accounting/Vertrag_model.php index 8725cd98d..abc2114a6 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -299,6 +299,91 @@ class Vertrag_model extends DB_Model } } + /** + * Prueft ob ein Mitarbeiter einen erteilten Vertrag zu einer Lehrveranstaltung besitzt. + * @param $lehrveranstaltung_id ID der Lehrveranstaltung + * @param $studiensemester_kurzbz Studiensemester das geprueft wird + * @param $mitarbeiter_uid UID des Mitarbeiters + */ + public function isVertragErteiltLV($lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid) + { + if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') + && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '') + { + // Liegt das Studiensemester vor dem Pruefdatum, wird die LV immer als Erteilt angezeigt + $stsemquery = " + SELECT + tbl_studiensemester.start + FROM + public.tbl_studiensemester + WHERE + studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz)." + AND tbl_studiensemester.start < ( + SELECT + start + FROM + public.tbl_studiensemester stsem + WHERE + stsem.studiensemester_kurzbz = " . $this->escape(CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON)." + )"; + + if ($stsemresult = $this->execReadOnlyQuery($stsemquery)) + { + $stsemdata = getData($stsemresult); + if ($stsemdata && count($stsemdata) > 0) + { + // Wenn das Studiensemester vor dem Pruefdatum liegt, gilt der Vertrag immer als erteilt. + return true; + } + } + else + { + return false; + } + } + + $query = " + SELECT + 1 + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_vertrag USING(vertrag_id) + JOIN lehre.tbl_vertrag_vertragsstatus USING(vertrag_id) + WHERE + tbl_lehreinheitmitarbeiter.mitarbeiter_uid = " . $this->escape($mitarbeiter_uid) . " + AND tbl_lehreinheit.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . " + AND tbl_lehreinheit.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . " + AND tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz='erteilt' + AND NOT EXISTS( + SELECT + 1 + FROM + lehre.tbl_vertrag_vertragsstatus vstatus + WHERE + vstatus.vertrag_id = tbl_vertrag.vertrag_id + AND vstatus.vertragsstatus_kurzbz = 'storno' + ) + "; + + if ($result = $this->execReadOnlyQuery($query)) + { + $data = getData($result); + if ($data && count($data) > 0) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } + // ----------------------------------------------------------------------------------------------------------------- // Private methods diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 869f0a19c..afad6870b 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -156,4 +156,92 @@ class Lehreinheit_model extends DB_Model ) AS subquery ",[DOMAIN,DOMAIN,$lehreinheit_id,$lehreinheit_id ]); } + + public function getLehreinheitenForStudentAndStudienSemester($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz) + { + $query = <<escape($lehrveranstaltung_id)} AND + vslv.uid = {$this->escape($student_uid)} AND + vslv.studiensemester_kurzbz = {$this->escape($studiensemester_kurzbz)} +EOSQL; + + $res = $this->execReadOnlyQuery($query); + return $res; + } + + public function getLehrfachIdMitarbeiter($angezeigtes_stsem,$user,$lvid) + { + $query = " + SELECT + distinct lehrfach_id + FROM + lehre.tbl_lehreinheit + JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) + WHERE + studiensemester_kurzbz=" . $this->escape($angezeigtes_stsem) . " + AND mitarbeiter_uid=" . $this->escape($user)." + AND lehrveranstaltung_id=" . $this->escape(intval($lvid)); + + $res = $this->execReadOnlyQuery($query); + return $res; + } + + public function getLehrfachIdStudierender($angezeigtes_stsem,$user,$lvid) + { + $query = " + SELECT + distinct lehrfach_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + lehrveranstaltung_id=" . $this->escape(intval($lvid))." + AND studiensemester_kurzbz=" . $this->escape($angezeigtes_stsem)." + AND uid=" . $this->escape($user); + + $res = $this->execReadOnlyQuery($query); + return $res; + } + + public function getLehreinheitInfo($lvid, $angezeigtes_stsem, $lehrfach_id) + { + $query = " + SELECT + * + FROM ( + SELECT + distinct on(uid) vorname, nachname, tbl_benutzer.uid as uid, + CASE + WHEN lehrfunktion_kurzbz='LV-Leitung' THEN true + ELSE false + END as lvleiter + FROM + lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, + public.tbl_benutzer, public.tbl_person + WHERE + tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitmitarbeiter.lehreinheit_id + AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid = tbl_benutzer.uid + AND tbl_person.person_id = tbl_benutzer.person_id + AND lehrveranstaltung_id = " . $this->escape(intval($lvid)) . " + AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%' + AND tbl_benutzer.aktiv = true + AND tbl_person.aktiv = true + AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem); + + if($lehrfach_id != '') + { + $query .= " AND tbl_lehreinheit.lehrfach_id = " . $this->escape(intval($lehrfach_id)); + } + + $query .= " ORDER BY uid, lvleiter desc) as a ORDER BY lvleiter desc, nachname, vorname"; + + $res = $this->execReadOnlyQuery($query); + return $res; + } } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index f2f762b7f..3f02f5ce7 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -969,4 +969,47 @@ class Lehrveranstaltung_model extends DB_Model $this->addJoin('public.tbl_studiengang stg', 'studiengang_kz'); return $this->load($lehrveranstaltung_id); } + + //Berechtigungen auf Fachbereichsebene + public function getBerechtigungenAufFachberechsebene($lvid, $angezeigtes_stsem) + { + $query = " + SELECT + DISTINCT lehrfach.oe_kurzbz + FROM + lehre.tbl_lehrveranstaltung + JOIN + lehre.tbl_lehreinheit USING(lehrveranstaltung_id) + JOIN + lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id = " . $this->escape(intval($lvid)); + + if(isset($angezeigtes_stsem) && $angezeigtes_stsem != ''){ + $query .= " AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem); + } + + $res = $this->execReadOnlyQuery($query); + return $res; + } + + public function getStudentEMail($lvid, $angezeigtes_stsem) + { + $query = " + SELECT + DISTINCT vw_lehreinheit.stg_kurzbz, vw_lehreinheit.stg_typ, + vw_lehreinheit.semester, COALESCE(vw_lehreinheit.verband,'') as verband, + COALESCE(vw_lehreinheit.gruppe,'') as gruppe, + vw_lehreinheit.gruppe_kurzbz, tbl_gruppe.mailgrp + FROM + campus.vw_lehreinheit + LEFT JOIN + public.tbl_gruppe USING(gruppe_kurzbz) + WHERE + lehrveranstaltung_id = " . $this->escape(intval($lvid)) . " + AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem); + + $res = $this->execReadOnlyQuery($query); + return $res; + } } diff --git a/application/models/education/Lvangebot_model.php b/application/models/education/Lvangebot_model.php index e16b726dd..8d5096fb0 100644 --- a/application/models/education/Lvangebot_model.php +++ b/application/models/education/Lvangebot_model.php @@ -11,4 +11,39 @@ class Lvangebot_model extends DB_Model $this->dbTable = 'lehre.tbl_lvangebot'; $this->pk = 'lvangebot_id'; } + +/** + * Prueft ob eine Abmeldung von einer Lehrveranstaltung moeglich ist + * und liefert die Gruppen von denen sich abgemeldet werden kann + * @param $lehrveranstaltung_id + * @param $studiensemester_kurzbz + * @param $uid + * @return $gruppen Array mit den Gruppen + */ + public function AbmeldungMoeglich($lehrveranstaltung_id, $studiensemester_kurzbz, $uid) + { + $query = "SELECT + gruppe_kurzbz + FROM + lehre.tbl_lvangebot + JOIN public.tbl_benutzergruppe USING(studiensemester_kurzbz, gruppe_kurzbz) + WHERE + tbl_lvangebot.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz)." + AND tbl_benutzergruppe.uid = " . $this->escape($uid)." + AND (tbl_lvangebot.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id))." + OR tbl_lvangebot.lehrveranstaltung_id IN(SELECT lehrveranstaltung_id_kompatibel + FROM lehre.tbl_lehrveranstaltung_kompatibel + WHERE lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id))." + ) + )"; + $res = $this->execReadOnlyQuery($query); + $rows = (hasData($res)) ? getData($res) : array(); + + $gruppen=array(); + foreach($rows as $row) + { + $gruppen[] = $row->gruppe_kurzbz; + } + return $gruppen; + } } diff --git a/application/models/person/Benutzergruppe_model.php b/application/models/person/Benutzergruppe_model.php index e569094c4..fba797641 100644 --- a/application/models/person/Benutzergruppe_model.php +++ b/application/models/person/Benutzergruppe_model.php @@ -12,4 +12,25 @@ class Benutzergruppe_model extends DB_Model $this->pk = array('gruppe_kurzbz', 'uid'); $this->hasSequence = false; } + + /** + * Laedt die User in einer Benutzergruppe + * @param gruppe_kurzbz, stsem + * @return array + */ + public function getUids($gruppe_kurzbz, $stsem) + { + $query = " + SELECT + uid + FROM + public.tbl_benutzergruppe + WHERE + gruppe_kurzbz = " . $this->escape($gruppe_kurzbz) . " + AND studiensemester_kurzbz = " . $this->escape($stsem); + + $res = $this->execReadOnlyQuery($query); + $uids = (hasData($res)) ? getData($res) : array(); + return $uids; + } } diff --git a/application/models/ressource/Lehretools_model.php b/application/models/ressource/Lehretools_model.php new file mode 100644 index 000000000..69d9f6555 --- /dev/null +++ b/application/models/ressource/Lehretools_model.php @@ -0,0 +1,62 @@ +dbTable = 'campus.tbl_lehre_tools'; + $this->pk = 'lehre_tools_id'; + } + + /** + * + * Laedt die Tools zu einer Lehrveranstaltung + * @param $lehrveranstaltung_id + * @param $studiensemester_kurzbz + */ + public function getTools($lehrveranstaltung_id, $studiensemester_kurzbz, $sprache) + { + $query = "SELECT + lehre_tools_id, + bezeichnung[(SELECT index FROM public.tbl_sprache WHERE sprache = " . $this->escape($sprache) . ")] AS bezeichnung, + kurzbz, + basis_url, + logo_dms_id + FROM + campus.tbl_lehre_tools + JOIN campus.tbl_lehre_tools_organisationseinheit USING(lehre_tools_id) + WHERE + campus.tbl_lehre_tools_organisationseinheit.aktiv AND + ( + oe_kurzbz IN( + SELECT + tbl_studiengang.oe_kurzbz + FROM + lehre.tbl_lehrveranstaltung + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . " + ) + OR + oe_kurzbz IN( + SELECT + lehrfach.oe_kurzbz + FROM + lehre.tbl_lehreinheit + JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(lehrfach_id=lehrfach.lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . " + AND tbl_lehreinheit.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . " + ) + ) + ORDER BY lehre_tools_id"; + + $toolsres = $this->execReadOnlyQuery($query); + $tools = (hasData($toolsres)) ? getData($toolsres) : array(); + + return $tools; + } +} \ No newline at end of file diff --git a/application/models/system/Variable_model.php b/application/models/system/Variable_model.php index 875fc8876..bfa1dcd98 100644 --- a/application/models/system/Variable_model.php +++ b/application/models/system/Variable_model.php @@ -66,6 +66,15 @@ class Variable_model extends DB_Model } } } + + if (!isset($vardata['emailadressentrennzeichen'])) + { + $vardata['emailadressentrennzeichen'] = + (defined('DEFAULT_EMAILADRESSENTRENNZEICHEN')) + ? DEFAULT_EMAILADRESSENTRENNZEICHEN + : ','; + } + $result = success($vardata); }