diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 25f353c12..52b18b056 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -36,6 +36,7 @@ require_once('../../../include/notenschluessel.class.php'); require_once('../../../include/Excel/excel.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/pruefung.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); $uid = get_uid(); @@ -44,7 +45,7 @@ $uid = get_uid(); $sprache = getSprache(); $p = new phrasen($sprache); -if(!check_lektor($uid)) +if (!check_lektor($uid)) die('Sie haben keine Berechtigung fuer diese Seite'); if (!$db = new basis_db()) @@ -90,6 +91,21 @@ if(isset($_GET['lehreinheit_id'])) else $lehreinheit_id = ''; +// Permissions +$berechtigung = new benutzerberechtigung(); +$berechtigung->getBerechtigungen($uid); + +// LV load +$lvobj = new lehrveranstaltung($lvid); + +// Check permissions +if (!$berechtigung->isBerechtigt('admin') + && !$berechtigung->isBerechtigt('assistenz') + && !$berechtigung->isBerechtigt('lehre', $lvobj->oe_kurzbz, 's') + && !check_lektor_lehrveranstaltung($uid, $lvid, $stsem) +) + die('Sie haben keine Berechtigung fuer diese Seite'); + /* * Create Excel File */ @@ -143,8 +159,6 @@ else // let's merge $format_title->setAlign('merge'); - $lvobj = new lehrveranstaltung($lvid); - $worksheet->write(0,0,$p->t('anwesenheitsliste/notenliste')." ".($sprache=='English'?$lvobj->bezeichnung_english:$lvobj->bezeichnung),$format_bold); $stg_obj = new studiengang($stg); diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 943363f6d..7351b865b 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -373,4 +373,8 @@ define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false); //enable tags in StudVW define('STV_TAGS_ENABLED', false); + +//student accounts grace period +define('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_PERIOD', '0 days'); +define('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES', serialize(array('NO_DEFINED_ROLE'))); ?> diff --git a/include/benutzerberechtigung.class.php b/include/benutzerberechtigung.class.php index 69d4947bf..4685f4bbb 100644 --- a/include/benutzerberechtigung.class.php +++ b/include/benutzerberechtigung.class.php @@ -340,6 +340,40 @@ class benutzerberechtigung extends basis_db return true; } + protected function hasPreStudentStatusInGracePeriod($uid) + { + $period = defined('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_PERIOD') + ? STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_PERIOD + : '0 days'; + $mapfunc = function($val) { + return $this->db_add_param($val); + }; + $roles = defined('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES') + ? implode(', ', array_map($mapfunc, unserialize(STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES))) + : 'NO_DEFINED_ROLE'; + + $sql = <<db_add_param($uid)} + AND + vs.aktiv = false + AND + public.get_rolle_prestudent(vs.prestudent_id, null) IN ({$roles}) + AND + (vs.updateaktivam + INTERVAL {$this->db_add_param($period)})::date >= CURRENT_DATE +EOSQL; + $result = $this->db_query($sql); + if($result && $this->db_num_rows($result) > 0) + { + return true; + } + return false; + } + /** * Laedt die Berechtigungen eines Users * @param $uid @@ -355,7 +389,8 @@ class benutzerberechtigung extends basis_db if($row = $this->db_fetch_object($result)) { // Wenn die Person nicht aktiv ist dann hat diese auch keine Rechte - if($this->db_parse_bool($row->aktiv) == false) + if($this->db_parse_bool($row->aktiv) == false + && $this->hasPreStudentStatusInGracePeriod($uid) === false) return false; } else