From 578afaeb089bbec9e5b841a851ab13a2824aaa7e Mon Sep 17 00:00:00 2001 From: SimonGschnell Date: Fri, 5 Jul 2024 15:21:14 +0200 Subject: [PATCH] adds fh-core menu logic WIP --- .../controllers/api/frontend/v1/LvMenu.php | 281 +++++++++++++++++- 1 file changed, 268 insertions(+), 13 deletions(-) diff --git a/application/controllers/api/frontend/v1/LvMenu.php b/application/controllers/api/frontend/v1/LvMenu.php index d9a4550eb..199c6f8df 100644 --- a/application/controllers/api/frontend/v1/LvMenu.php +++ b/application/controllers/api/frontend/v1/LvMenu.php @@ -35,31 +35,26 @@ class LvMenu extends FHCAPI_Controller */ public function __construct() { - - // NOTE(chris): additional permission checks will be done in SearchBarLib parent::__construct([ 'getLvMenu' => self::PERM_LOGGED ]); - - } //------------------------------------------------------------------------------------------------------------------ // Public methods /** - * Gets a JSON body via HTTP POST and provides the parameters + * */ public function getLvMenu($lvid, $studiensemester_kurzbz) { - + + // return early if parameters are missing if(!isset($lvid) || !isset($studiensemester_kurzbz)) $this->terminateWithError('Missing parameters', self::ERROR_TYPE_GENERAL); - $menu = array(); - - // get the menu of the fhc core, look menu_lv.class.php - //todo + // FH-Core Variables + // ############################################# require_once(FHCPATH.'config/cis.config.inc.php'); require_once(FHCPATH.'include/lehrveranstaltung.class.php'); @@ -71,17 +66,277 @@ class LvMenu extends FHCAPI_Controller require_once(FHCPATH.'include/studiengang.class.php'); require_once(FHCPATH.'include/phrasen.class.php'); + // get the sprache + $sprache = getSprache(); + $p = new phrasen($sprache); + + // get the db + if (!$db = new basis_db()) + die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); + + // get the user + if (!$user=get_uid()) + die($p->t('global/nichtAngemeldet')); + + // check if is_lector + if(check_lektor($user)) + $is_lector=true; + else + $is_lector=false; + + // 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; + + // define studiengang_kz / semester / lehrverzeichnis + $studiengang_kz = $lv->studiengang_kz; + $semester = $lv->semester; + $short = $lv->lehreverzeichnis; + + // load studiengang + $stg_obj = new studiengang(); + $stg_obj->load($lv->studiengang_kz); + $kurzbz = $stg_obj->kuerzel; + + $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; + + $lehrveranstaltung_obj = new lehrveranstaltung(); + $result = $lehrveranstaltung_obj->getLehreinheitenOfLv($lvid, $user, $angezeigtes_stsem); + + if(count($result)>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->lehrfach_id_mitarbeiter($angezeigtes_stsem,$user,$lvid); + } + else + { + $result = $this->lehreinheit->lehrfach_id_studierender($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; + } + } + + // lektor der lv + $lektor_der_lv=false; + + $db_result = $lehreinheit->lehreinheitInfo($lvid,$angezeigtes_stsem,$lehrfach_id); + + $num_rows_result = count($db_result); + + if($num_rows_result > 0) + { + + 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 != '') + { + $vertrag = new vertrag(); + if (!$vertrag->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=='t') + $style='style="font-weight: bold"'; + else + $style=''; + + } + } + + //Berechtigungen auf Fachbereichsebene + $lehrfach_oe_kurzbz_arr = array(); + if($result = $lv_obj->getBerechtigungenAufFachberechsebene($lvid,$angezeigtes_stsem)) + { + foreach($result as $row) + { + $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; + } + } + } + + // FH-Core Menu Logic + // ############################################# + + $menu = array(); + + $this->fhc_menu_lvinfo($menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $rechte, $lehrfach_oe_kurzbz_arr, $p); + + $this->fhc_menu_semesterplan($menu, $angemeldet, $user_is_allowed_to_upload, $rechte, $lvid, $studiengang_kz, $kurzbz, $semester, $short_short_name, $p); + + // Addons Menu Logic + // ############################################# + Events::trigger('lvMenuBuild', // callback function for the onEvents to add newValues to the $menu - function ($newValue) use (&$menu) { - $menu[]= $newValue; + function ($addonMenu) use (&$menu) { + foreach($addonMenu as $m){ + $menu[]= $m; + } }, $lvid, - $studiensemester_kurzbz + $studiensemester_kurzbz, + $studiengang_kz, + $p, + $rechte, + $lv, + $angezeigtes_stsem, + $lektor_der_lv, + $lehrfach_oe_kurzbz_arr, + $is_lector ); $this->terminateWithSuccess($menu); } + + + private function fhc_menu_lvinfo(&$menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $rechte, $lehrfach_oe_kurzbz_arr, $p){ + + // LVINFO + if(!defined('CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_LVINFO_ANZEIGEN) + { + $text=''; + $need_br=false; + + // 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) + || $rechte->isBerechtigt('lehre/lvinfo',$studiengang_kz) + || $rechte->isBerechtigtMultipleOe('lehre/lvinfo', $lehrfach_oe_kurzbz_arr) + ) + { + if($need_br) + $text.= "
"; + $text.= "".$p->t('lehre/lvInfoBearbeiten').""; + } + elseif ($is_lector) + { + $text.= "
Bearbeiten der LV-Infos derzeit gesperrt"; + } + + $menu[]=array + ( + 'id'=>'core_menu_lvinfo', + 'position'=>'10', + 'name'=>$p->t('lehre/lehrveranstaltungsinformation'), + 'icon'=>'../../../skin/images/button_lvinfo.png', + 'link'=>'', + 'text'=>$text + ); + } + } + + 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 = count(scandir($dir_name)) == 2 ? true : false; + + 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, + 'link_target'=>'_blank', + 'text'=>$text + ); + } + } + + 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; + } }