diff --git a/application/controllers/api/frontend/v1/LvMenu.php b/application/controllers/api/frontend/v1/LvMenu.php index 199c6f8df..a9cbf4647 100644 --- a/application/controllers/api/frontend/v1/LvMenu.php +++ b/application/controllers/api/frontend/v1/LvMenu.php @@ -54,7 +54,7 @@ class LvMenu extends FHCAPI_Controller $this->terminateWithError('Missing parameters', self::ERROR_TYPE_GENERAL); // FH-Core Variables - // ############################################# + // ########################################################################################## require_once(FHCPATH.'config/cis.config.inc.php'); require_once(FHCPATH.'include/lehrveranstaltung.class.php'); @@ -65,6 +65,7 @@ class LvMenu extends FHCAPI_Controller 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'); // get the sprache $sprache = getSprache(); @@ -114,6 +115,14 @@ class LvMenu extends FHCAPI_Controller $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) @@ -206,17 +215,38 @@ class LvMenu extends FHCAPI_Controller } // 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); + + $this->fhc_menu_download($menu, $angemeldet, $user_is_allowed_to_upload, $rechte, $semester, $kurzbz, $studiengang_kz, $short_short_name, $short, $p); + + $this->fhc_menu_notenliste($menu, $angemeldet, $is_lector, $lvid, $studiengang_kz, $angezeigtes_stsem, $kurzbz, $semester, $short_short_name, $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_stundenupload($menu, $angemeldet, $lvid, $is_lector, $studiengang_kz, $kurzbz, $semester, $short, $short_short_name, $p); + + $this->fhc_menu_emailStudierende($menu, $angemeldet, $lehreinheit->lehreinheit_id, $p); + + $this->fhc_menu_pinboard($menu, $angemeldet, $is_lector, $studiengang_kz, $semester, $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_anrechnungLector($menu, $rechte, $angezeigtes_stsem, $p); // Addons Menu Logic - // ############################################# - + // ########################################################################################## Events::trigger('lvMenuBuild', // callback function for the onEvents to add newValues to the $menu function ($addonMenu) use (&$menu) { @@ -233,9 +263,22 @@ class LvMenu extends FHCAPI_Controller $angezeigtes_stsem, $lektor_der_lv, $lehrfach_oe_kurzbz_arr, - $is_lector + $is_lector, + $angemeldet ); + + // Menu sortieren + // ########################################################################################## + foreach ($menu as $key => $row){ + $pos[$key] = $row['position']; + } + + array_multisort($pos, SORT_ASC, SORT_NUMERIC, $menu); + + // HTTP response + // ########################################################################################## + $this->terminateWithSuccess($menu); } @@ -285,7 +328,7 @@ class LvMenu extends FHCAPI_Controller { $dir_name = $this->ensureDirectoryExists($kurzbz, $semester, $short_short_name, 'semesterplan','teacher'); - $dir_empty = count(scandir($dir_name)) == 2 ? true : false; + $dir_empty = $this->isDirectoryEmpty($dir_name); if($dir_empty == false) { @@ -325,6 +368,331 @@ class LvMenu extends FHCAPI_Controller } } + 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, + '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, + 'text'=>$text + ); + } + } + + private function fhc_menu_feedback(&$menu, $angemeldet, $lvid, $p){ + //FEEDBACK + if((!defined('CIS_LEHRVERANSTALTUNG_FEEDBACK_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_FEEDBACK_ANZEIGEN) && $angemeldet) + { + $menu[]=array + ( + 'id'=>'core_menu_feedback', + 'position'=>'50', + 'name'=>$p->t('lehre/feedback'), + 'icon'=>'../../../skin/images/button_feedback.png', + 'link'=>'feedback.php?lvid='.$lvid, + 'text'=>'' + ); + } + } + + private function fhc_menu_gesamtnote(&$menu, $angemeldet, $lvid, $lv_obj, $is_lector, $angezeigtes_stsem, $p){ + //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'=>$p->t('lehre/gesamtnote'), + 'icon'=>'../../../skin/images/button_endnote.png', + 'link'=>'benotungstool/lvgesamtnoteverwalten.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem) + ); + } + else + { + $menu[]=array + ( + 'id'=>'core_menu_gesamtnote', + 'position'=>'80', + 'name'=>$p->t('lehre/gesamtnote'), + 'icon'=>'../../../skin/images/button_endnote.png', + 'text'=>$p->t('lehre/noteneingabedeaktiviert') + ); + } + } + } + + 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'), + 'icon'=>'../../../skin/images/button_studiupload.png', + 'link'=>$link, + 'link_target'=>$link_target + ); + } + } + + private function fhc_menu_emailStudierende(&$menu, $angemeldet, $lehreinheit_id,$p){ + // Email an Studierende + if((!defined('CIS_LEHRVERANSTALTUNG_MAILSTUDIERENDE_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_MAILSTUDIERENDE_ANZEIGEN) && $angemeldet) + { + $nomail=''; + $mailto='mailto:'; + + // load the Lehreinheit model and get the student mails + $this->load->model('education/Lehreinheit_model','LehreinheitModel'); + $studentMails = $this->LehreinheitModel->getStudentenMail($lehreinheit_id); + + // 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 = array_map( + function($mail_obj){ + return $mail_obj->mail; + },$studentMails); + + $mailto = implode(',',$studentMails); + + //todo logic for nomail is missing + if($nomail!='') + $link_onclick='alert(\''.$p->t('lehre/keinMailverteiler',array($nomail)).'\');'; + else + $link_onclick=''; + + $menu[]=array + ( + 'id'=>'core_menu_mailanstudierende', + 'position'=>'100', + 'name'=>$p->t('lehre/mail'), + 'icon'=>'../../../skin/images/button_feedback.png', + 'link'=>$mailto, + 'link_onclick'=>$link_onclick + ); + } + } + + 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').""; + + $menu[]=array + ( + 'id'=>'core_menu_pinboard', + 'position'=>'110', + 'name'=>$p->t('lehre/pinboard'), + 'icon'=>'../../../skin/images/button_pinboard.png', + 'link'=>'../../../cms/news.php?studiengang_kz='.urlencode($studiengang_kz).'&semester='.urlencode($semester), + 'text'=>$text + ); + } + } + + private function fhc_menu_abmeldung(&$menu, $user, $is_lector, $lvid, $angezeigtes_stsem, $p){ + if(!defined('CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN) + { + if(!$is_lector) + { + $lvangebot = new lvangebot(); + $gruppen = $lvangebot->AbmeldungMoeglich($lvid, $angezeigtes_stsem, $user); + if(count($gruppen)>0) + { + $menu[]=array + ( + 'id'=>'core_menu_abmeldung', + 'position'=>'120', + 'name'=>$p->t('lehre/abmelden'), + 'icon'=>'../../../skin/images/button_studiupload.png', + 'link'=>'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 = new lehre_tools(); + if($lehretools->getTools($lvid, $angezeigtes_stsem)) + { + 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], + 'icon'=>'../../../cms/dms.php?id='.$row->logo_dms_id, + 'link'=>$row->basis_url, + 'link_target'=>'_blank' + ); + } + } + } + } + + private function fhc_menu_anrechnungStudent(&$menu, $rechte, $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')) + { + $menu[]=array + ( + 'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse', + 'position'=>'128', + 'name'=>$p->t('lehre/anrechnung'), + 'icon'=>'../../../skin/images/button_listen.png', + 'link' => APP_ROOT. 'index.ci.php/lehre/anrechnung/RequestAnrechnung?studiensemester='.urlencode($angezeigtes_stsem).'&lv_id='.urlencode($lvid) + ); + } + } + + private function fhc_menu_anrechnungLector(&$menu, $rechte, $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')) + { + $menu[]=array + ( + 'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse_empfehlen', + 'position'=>'128', + 'name'=>$p->t('lehre/anrechnungen'), + 'icon'=>'../../../skin/images/button_listen.png', + 'link' => APP_ROOT. 'index.ci.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; @@ -338,5 +706,9 @@ class LvMenu extends FHCAPI_Controller return $dir_name; } + + private function isDirectoryEmpty($dir){ + return count(scandir($dir)) == 2 ? true : false; + } }