From 282b46d54e22a918b87b3779221bd4f989826eb8 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 23 Aug 2022 15:26:13 +0200 Subject: [PATCH 01/52] =?UTF-8?q?Added=20betreuerart=20Senatsvorsitz=20and?= =?UTF-8?q?=20Senatspr=C3=BCfer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/dbupdate_3.3.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 6824d350f..515a80bf5 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6273,6 +6273,34 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants } } +// lehre.tbl_betreuerart: add type Senatsvorsitz +if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatsvorsitz'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatsvorsitz', 'Senatsvorsitz kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatsvorsitz in lehre.tbl_betreuerart hinzugefügt'; + } +} + +// lehre.tbl_betreuerart: add type Senatsprüfer +if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatspruefer'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'Senatsprüfer kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatspruefer in lehre.tbl_betreuerart hinzugefügt'; + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; From 82d7891f3c81d4abdf33c2be5a04de7412b9ed0f Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 23 Aug 2022 17:45:12 +0200 Subject: [PATCH 02/52] =?UTF-8?q?Projektarbeitsbeurteilung=20possible=20fo?= =?UTF-8?q?r=20Pr=C3=BCfungssenat.=20Mails=20are=20sent=20to=20Senat=20mem?= =?UTF-8?q?bers,=20Senat=20members=20are=20displayed=20with=20correct=20la?= =?UTF-8?q?bels,=20external=20Pr=C3=BCfer=20can=20get=20login=20token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../education/Projektbetreuer_model.php | 36 +- cis/private/lehre/abgabe_lektor.php | 3 +- cis/private/lehre/abgabe_lektor_details.php | 336 +++++++----- cis/private/lehre/abgabe_student.php | 518 +++++++++--------- cis/private/lehre/abgabe_student_details.php | 95 ++-- include/projektbetreuer.class.php | 68 ++- locale/de-AT/abgabetool.php | 9 +- locale/en-US/abgabetool.php | 7 +- system/phrasesupdate.php | 20 + vilesci/lehre/abgabe_assistenz.php | 6 +- 10 files changed, 611 insertions(+), 487 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 0200f6468..f6205f67f 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -54,18 +54,28 @@ class Projektbetreuer_model extends DB_Model $qry = "SELECT DISTINCT ON (pers.person_id) pers.person_id, betreuerart_kurzbz, vorname, nachname, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, anrede, titelpre, titelpost, gebdatum, geschlecht, pa.projekttyp_kurzbz, - ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid - FROM lehre.tbl_projektarbeit pa - JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) - JOIN public.tbl_person pers USING (person_id) - LEFT JOIN public.tbl_benutzer ben USING (person_id) - LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid - WHERE ben.aktiv - AND projektarbeit_id = ? - AND betreuerart_kurzbz = ? - ORDER BY pers.person_id, CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter account first*/ - CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, /*user with account first*/ - ben.insertamum"; + ben.uid, ben.alias, ma.personalnummer, mitarbeiter_uid, student_uid, + ( + SELECT kontakt + FROM public.tbl_kontakt + WHERE kontakttyp = 'email' + AND person_id = pers.person_id + ORDER BY + CASE WHEN zustellung THEN 0 ELSE 1 END, + insertamum DESC NULLS LAST + LIMIT 1 + ) AS private_email + FROM lehre.tbl_projektarbeit pa + JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) + JOIN public.tbl_person pers USING (person_id) + LEFT JOIN public.tbl_benutzer ben USING (person_id) + LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid + WHERE (ben.aktiv OR ben.aktiv IS NULL) + AND projektarbeit_id = ? + AND betreuerart_kurzbz = ? + ORDER BY pers.person_id, CASE WHEN ma.mitarbeiter_uid IS NULL THEN 1 ELSE 0 END, /*Mitarbeiter account first*/ + CASE WHEN ben.uid IS NULL THEN 1 ELSE 0 END, /*user with account first*/ + ben.insertamum"; return $this->execQuery($qry, array($projektarbeit_id, $betreuerart_kurzbz)); } @@ -102,7 +112,7 @@ class Projektbetreuer_model extends DB_Model trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum FROM lehre.tbl_projektbetreuer betr - JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id + JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id JOIN public.tbl_person pers ON betr.person_id = pers.person_id LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id diff --git a/cis/private/lehre/abgabe_lektor.php b/cis/private/lehre/abgabe_lektor.php index 414c5e423..069f3caf3 100644 --- a/cis/private/lehre/abgabe_lektor.php +++ b/cis/private/lehre/abgabe_lektor.php @@ -75,8 +75,7 @@ $sql_query = "SELECT WHERE public.tbl_benutzer.person_id=lehre.tbl_projektbetreuer.person_id AND public.tbl_benutzer.uid=".$db->db_add_param($getuid).") ".($showall?'':' AND public.tbl_benutzer.aktiv AND lehre.tbl_projektarbeit.note IS NULL ')." - AND (betreuerart_kurzbz='Betreuer' OR betreuerart_kurzbz='Begutachter' OR betreuerart_kurzbz='Erstbegutachter' - OR betreuerart_kurzbz='Zweitbegutachter' OR betreuerart_kurzbz='Erstbetreuer') + AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatspruefer') ORDER BY tbl_projektarbeit.projektarbeit_id, betreuerart_kurzbz desc) as xy ORDER BY nachname"; diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index a508de098..ed33add27 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -121,9 +121,9 @@ $titel = $projektarbeit_obj->titel; $student_uid = $projektarbeit_obj->student_uid; // paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden -$num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); +$paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); -if(!is_numeric($num_rows_sem) || $num_rows_sem < 0) +if(!is_numeric($paIsCurrent) || $paIsCurrent < 0) { echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
 "; } @@ -143,27 +143,28 @@ if($num_rows_endupload < 0) } // Zweitbegutachter holen -if($betreuerart=="Erstbegutachter") +if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) { - $projektbetreuer = new projektbetreuer(); - $alleBegutachter = $projektbetreuer->getProjektbetreuer($projektarbeit_id); + $alleBegutachter = new projektbetreuer(); + $alleBegutachterRes = $alleBegutachter->getProjektbetreuer($projektarbeit_id); - if ($alleBegutachter) + if ($alleBegutachterRes) { - $alleBegutachterResults = $projektbetreuer->result; - - foreach ($alleBegutachterResults as $begutachter) + $zweitbetreuerArr = array(); + foreach ($alleBegutachter->result as $begutachter) { - if ($begutachter->betreuerart_kurzbz == "Erstbegutachter") + if (in_array($begutachter->betreuerart_kurzbz, array('Erstbegutacher', 'Senatsvorsitz'))) { + // dem Erstbetreuer zugewiesene Zweitbetreuer holen $erstbetreuer_id = $begutachter->person_id; - $zweitbegutachter = $projektbetreuer->getZweitbegutachterWithToken($erstbetreuer_id, $projektarbeit_id, $student_uid); - break; + $zweitbegutachter = new projektbetreuer(); + $zweitbegutachterRes = $zweitbegutachter->getZweitbegutachterWithToken($erstbetreuer_id, $projektarbeit_id, $student_uid); + if ($zweitbegutachterRes) $zweitbetreuerArr = array_merge($zweitbetreuerArr, $zweitbegutachter->result); } } // Mail mit Token an Zweitbegutachter senden - if ($zweitbegutachter && $num_rows_sem >= 1 && isset($_GET['zweitbegutachtertoken'])) + if ($zweitbegutachterRes && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id'])) { $qry_std="SELECT * FROM campus.vw_benutzer where uid=".$db->db_add_param($uid); if(!$result_std=$db->db_query($qry_std)) @@ -173,15 +174,24 @@ if($betreuerart=="Erstbegutachter") else { $row_std=@$db->db_fetch_object($result_std); - $mailres = sendZweitbegutachterMail($zweitbegutachter, $erstbetreuer_id, $row_std); + foreach ($zweitbetreuerArr as $zbg) + { + // if Zweitbetreuer is the one for which token was requested, send mail + if ($zbg->person_id == $_GET['zweitbetreuer_person_id']) + { + $mailres = sendZweitbegutachterMail($zbg, $erstbetreuer_id, $row_std); - if ($mailres) - { - echo "
".$p->t('abgabetool/zweitbegutachterMailGesendet', $zweitbegutachter->email)."
 "; - } - else - { - echo "".$p->t('abgabetool/fehlerMailZweitBegutachter')." Mail: ".$zweitbegutachter->email."
 "; + if ($mailres) + { + echo "
" + .$p->t('abgabetool/zweitbegutachterMailGesendet', array($zbg->voller_name, $zbg->email)) + ."
 "; + } + else + { + echo "".$p->t('abgabetool/fehlerMailZweitBegutachter')." Mail: ".$zbg->email."
 "; + } + } } } } @@ -465,7 +475,7 @@ $htmlstr .= "\n"; $htmlstr .= ""; $htmlstr .= ""; $htmlstr .= "\n"; -if (isset($zweitbegutachter) && $zweitbegutachter) // wenn es Zweitbegutachter gibt + +if (isset($zweitbetreuerArr) && is_array($zweitbetreuerArr)) // wenn es Zweitbetreuer gibt { - // Zweitbegutachter anzeigen + // Zweitbetreuer anzeigen $htmlstr .= "\n"; - $htmlstr .= "\n"; $htmlstr .= "\n"; $htmlstr .= "\n"; @@ -545,122 +571,122 @@ $htmlstr .= "\n"; $result=@$db->db_query($qry); - while ($row=@$db->db_fetch_object($result)) +while ($row=@$db->db_fetch_object($result)) +{ + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + $htmlstr .= "\n"; + if(!$row->abgabedatum) { - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; + if ($row->datumdatum>=date('Y-m-d')) && ($row->datumabgabedatum>$row->datum) + { + //Abgabe nach Termin - weiß auf hellrot + $bgcol='#EA7B7B'; + $fcol='#FFFFFF'; + } + else + { + //Abgabe vor Termin - schwarz auf grün + $bgcol='#00FF00'; + $fcol='#000000'; + } + } + //$htmlstr .= ""; + } + else + { + $htmlstr .= ""; + } + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + if($user==$row->insertvon && $betreuerart!="Zweitbegutachter") + { + $htmlstr .= " "; + if(!$row->abgabedatum) { - if ($row->datumdatum>=date('Y-m-d')) && ($row->datumt('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'>"; } else { - if($row->abgabedatum>$row->datum) - { - //Abgabe nach Termin - weiß auf hellrot - $bgcol='#EA7B7B'; - $fcol='#FFFFFF'; - } - else - { - //Abgabe vor Termin - schwarz auf grün - $bgcol='#00FF00'; - $fcol='#000000'; - } + $htmlstr .= " "; } - //$htmlstr .= ""; - } - else - { - $htmlstr .= ""; - } - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - if($user==$row->insertvon && $betreuerart!="Zweitbegutachter") - { - $htmlstr .= " "; - - if(!$row->abgabedatum) - { - $htmlstr .= " "; - } - else - { - $htmlstr .= " "; - } - } - else - { - $htmlstr .= " "; - } - if(file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf')) - { - $htmlstr .= " "; - } - else - { - $htmlstr .= " "; - } - if($row->abgabedatum && $row->paabgabetyp_kurzbz=="end") - { - $htmlstr .= " "; - } - else - { - $htmlstr .= " "; - } - $htmlstr .= " \n"; - - - $htmlstr .= "\n"; } + else + { + $htmlstr .= " "; + } + if(file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf')) + { + $htmlstr .= " "; + } + else + { + $htmlstr .= " "; + } + if($row->abgabedatum && $row->paabgabetyp_kurzbz=="end") + { + $htmlstr .= " "; + } + else + { + $htmlstr .= " "; + } + $htmlstr .= " \n"; + + + $htmlstr .= "\n"; +} //Eingabezeile fuer neuen Termin $htmlstr .= ''."\n"; @@ -721,10 +747,16 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, if (!$projektbetreuer) return $projektbetreuer; - $zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($erstbegutachter_person_id, $zweitbegutachter->projektarbeit_id, $student->uid); + $zweitbetrRes = $projektbetreuer->getZweitbegutachterWithToken( + $erstbegutachter_person_id, + $zweitbegutachter->projektarbeit_id, + $student->uid, + $zweitbegutachter->person_id + ); - if ($zweitbetr) + if ($zweitbetrRes && isset($projektbetreuer->result[0])) { + $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; diff --git a/cis/private/lehre/abgabe_student.php b/cis/private/lehre/abgabe_student.php index 2a328dd35..8782c84c1 100644 --- a/cis/private/lehre/abgabe_student.php +++ b/cis/private/lehre/abgabe_student.php @@ -1,248 +1,270 @@ - - * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > - * Rudolf Hangl < rudolf.hangl@technikum-wien.at > - * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > - */ - -require_once('../../../config/cis.config.inc.php'); -require_once('../../../include/functions.inc.php'); -require_once('../../../include/datum.class.php'); -require_once('../../../include/person.class.php'); -require_once('../../../include/benutzer.class.php'); -require_once('../../../include/student.class.php'); -require_once('../../../include/studiengang.class.php'); -require_once('../../../include/benutzerberechtigung.class.php'); -require_once('../../../include/phrasen.class.php'); - -$sprache = getSprache(); -$p = new phrasen($sprache); - -if (!$db = new basis_db()) - die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); - -$getuid=get_uid(); -$uid=$getuid; - -if(isset($_GET['uid'])) -{ - //Studentenansicht - $uid = $_GET['uid']; - //Rechte Pruefen - $allowed=false; - - $student = new student(); - if(!$student->load($uid)) - die($p->t('global/fehlerBeimErmittelnDerUID')); - - $stg_obj = new studiengang(); - if(!$stg_obj->load($student->studiengang_kz)) - die($p->t('global/fehlerBeimLesenAusDatenbank')); - - //Berechtigung ueber das Berechtigungssystem - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($getuid); - if($rechte->isBerechtigt('lehre/abgabetool',$stg_obj->oe_kurzbz,'s')) - $allowed=true; - - //oder Lektor mit Betreuung dieses Studenten - $qry = "SELECT 1 - FROM - lehre.tbl_projektarbeit - JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) - JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id) - WHERE - tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." AND - vw_benutzer.uid=".$db->db_add_param($getuid).";"; - - if($result = $db->db_query($qry)) - { - if($db->db_num_rows($result)>0) - { - $allowed=true; - } - } - - if(!$allowed) - { - die($p->t('abgabetool/keineBerechtigungStudentenansicht')); - } -} -$htmlstr = ''; -$htmlstr1 = ''; -$vorname=''; -$nachname=''; -$zweitbetreuer = ''; - -$sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bnachname, - (SELECT vorname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bvorname, - (SELECT titelpre FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpre, - (SELECT titelpost FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpost, - (SELECT person_id FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id - AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id, - (SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id - AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz, - tbl_projektbetreuer.person_id AS betreuer_person_id, - tbl_projekttyp.bezeichnung AS prjbez, *, - lehre.tbl_projektbetreuer.note as note, - public.tbl_benutzer.aktiv as aktiv, - (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt, - (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt - FROM lehre.tbl_projektarbeit - LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) - LEFT JOIN public.tbl_benutzer ON(uid=student_uid) - LEFT JOIN public.tbl_person ON(tbl_benutzer.person_id=tbl_person.person_id) - LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) - LEFT JOIN public.tbl_studiengang USING(studiengang_kz) - LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) - WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') - AND (tbl_projektbetreuer.betreuerart_kurzbz='Betreuer' - OR tbl_projektbetreuer.betreuerart_kurzbz='Begutachter' - OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer' - OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter') - AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." - ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz"; - -//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102'; -if(!$erg=$db->db_query($sql_query)) -{ - $errormsg=$p->t('global/fehlerBeimLesenAusDatenbank'); -} -else -{ - $htmlstr .= "
".$p->t('abgabetool/student').": ".$db->convert_html_chars($studentenname).""; -$semester_benotbar = $num_rows_sem >= 1; +$semester_benotbar = $paIsCurrent >= 1; $endupload_vorhanden = $num_rows_endupload >= 1; if ($semester_benotbar && $endupload_vorhanden) @@ -498,30 +508,46 @@ else } $htmlstr .= "
" . $p->t('abgabetool/titel') . ": ".$db->convert_html_chars($titel)."".$p->t('abgabetool/studentenansicht')."
" . $p->t('abgabetool/zweitBegutachter') . ": " . $zweitbegutachter->voller_name . ""; - - // keine Mail -> Fehler anzeigen - if (!isset($zweitbegutachter->email)) - $htmlstr .= "  " . $p->t("; - - // Token senden button wenn Zweitbegutachter extern ist und Projektarbeit nicht für altes Semester ist - if (isset($zweitbegutachter->email) && !isset($zweitbegutachter->uid) && $num_rows_sem >= 1) + $htmlstr .= ""; + $bart = ''; + foreach($zweitbetreuerArr as $zweitbetreuer) { - $htmlstr .= "
\n"; - $htmlstr .= ""; - $htmlstr .= ""; - $htmlstr .= ""; - $htmlstr .= " email) . "' alt='" . $p->t('abgabetool/zweitbetreuerMailSenden', $zweitbegutachter->email) . "'/>\n"; - $htmlstr .= " \n"; - $htmlstr .= "
"; - } + if ($bart !== $zweitbetreuer->betreuerart_kurzbz) + { + $htmlstr .= ($zweitbetreuer->betreuerart_kurzbz == 'Senatspruefer' ? $p->t('abgabetool/senatsPruefer') : $p->t('abgabetool/zweitBegutachter')); + $htmlstr .= ": "; + $bart = $zweitbetreuer->betreuerart_kurzbz; + } + else + $htmlstr .= ", "; + $htmlstr .= "" . $zweitbetreuer->voller_name . ""; + + // keine Mail -> Fehler anzeigen + if (!isset($zweitbetreuer->email)) + $htmlstr .= "  " . $p->t("; + + // Token senden button wenn Zweitbegutachter extern ist und Projektarbeit nicht für altes Semester ist + if (isset($zweitbetreuer->email) && !isset($zweitbetreuer->uid) && $paIsCurrent >= 1) + { + $htmlstr .= "
\n"; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= " voller_name, $zweitbetreuer->email)) . "' + alt='" . $p->t('abgabetool/zweitbetreuerMailSenden', array($zweitbetreuer->voller_name, $zweitbetreuer->email)) . "'/>\n"; + $htmlstr .= " "; + $htmlstr .= "
"; + } + } $htmlstr .= "
fixtermin=='t'?'checked=\"checked\"':'')." >"; + //$htmlstr .= "fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>"; + if($row->fixtermin=='t') + { + $htmlstr .= "JN".($row->abgabedatum==''?' ':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."       fixtermin=='t'?'checked=\"checked\"':'')." >"; - //$htmlstr .= "fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>"; - if($row->fixtermin=='t') - { - $htmlstr .= "JN".($row->abgabedatum==''?' ':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."                     PDF    zusätzliche Daten    
              PDF    zusätzliche Daten    
\n"; - $htmlstr .= "\n"; - $htmlstr .= " - - - - - - - - "; - $htmlstr .= "\n"; - $i = 0; - while($row=$db->db_fetch_object($erg)) - { - $htmlstr1 = ''; - $zweitbetreuer_obj = new person(); - if ($zweitbetreuer_obj->load($row->zweitbetreuer_person_id)) - { - $zweitbetreuer = ', '.$db->convert_html_chars($row->zweitbetreuer_betreuerart_kurzbz).': '.$zweitbetreuer_obj->titelpre.' '.$zweitbetreuer_obj->vorname.' '.$zweitbetreuer_obj->nachname.' '.$zweitbetreuer_obj->titelpost; - } - $htmlstr1 = ''.$db->convert_html_chars($row->betreuerart_kurzbz).': '; - $vorname=$row->vorname; - $nachname=$row->nachname; - $uid=$row->uid; - ($row->btitelpre!=''?$htmlstr1 .= $row->btitelpre.' ':$htmlstr1 .= ''); - $htmlstr1 .= $row->bvorname.' '.$row->bnachname; - ($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= ''); - $htmlstr1 .= $zweitbetreuer; - $htmlstr .= " \n"; //class='liste".($i%2)."' - - if (is_null($row->note) && $row->aktiv === 't') - $htmlstr .= " \n"; - elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt)) - { - $htmlstr .= ""; - } else - { - $htmlstr .= ""; - } - - - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " "; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; -// $htmlstr .= " \n"; - $htmlstr .= " \n"; - $i++; - } - $htmlstr .= "
".$p->t('abgabetool/details')."".$p->t('lvplan/sem')."".$p->t('lvplan/stg')."".$p->t('global/mail')."".$p->t('abgabetool/betreuer')."".$p->t('abgabetool/typ')."".$p->t('abgabetool/titel')."
".$p->t('abgabetool/upload').""; - - if (!is_null($row->babgeschickt)) - $htmlstr .= "".$p->t('abgabetool/projektbeurteilungErstDownload').""; - - if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt)) - $htmlstr .= "/"; - - if (!is_null($row->zweitbetreuer_abgeschickt)) - $htmlstr .= "".$p->t('abgabetool/projektbeurteilungZweitDownload').""; - - $htmlstr .= "".$row->studiensemester_kurzbz."".strtoupper($row->typ.$row->kurzbz).""; - - $qry_betr="SELECT mitarbeiter_uid FROM public.tbl_person - JOIN public.tbl_benutzer USING(person_id) - JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) - WHERE person_id=".$db->db_add_param($row->betreuer_person_id, FHC_INTEGER).";"; - if($result_betr=$db->db_query($qry_betr)) - { - if($row_betr=$db->db_fetch_object($result_betr)) - { - $htmlstr.="email"; - } - else - { - $htmlstr.="UID unknown!"; - } - } - $htmlstr .= " ".$htmlstr1." ".$db->convert_html_chars($row->prjbez)."".$db->convert_html_chars($row->titel)."".$db->convert_html_chars($row->betreuerart_kurzbz)."
\n"; -} -echo ' - - - - Abgabesystem_Studentensicht - - - - - - - - - - - - -'; - - echo '

'.$p->t('abgabetool/ueberschrift'); - if(trim($uid)!='') - echo " ($uid $vorname $nachname)
Anleitung ".$p->t('global/handbuch')."
"; - echo '

'; - echo $htmlstr; - echo ' -'; -?> + + * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > + * Rudolf Hangl < rudolf.hangl@technikum-wien.at > + * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > + */ + +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/functions.inc.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/person.class.php'); +require_once('../../../include/benutzer.class.php'); +require_once('../../../include/student.class.php'); +require_once('../../../include/studiengang.class.php'); +require_once('../../../include/projektbetreuer.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/phrasen.class.php'); + +$sprache = getSprache(); +$p = new phrasen($sprache); + +if (!$db = new basis_db()) + die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); + +$getuid=get_uid(); +$uid=$getuid; + +if(isset($_GET['uid'])) +{ + //Studentenansicht + $uid = $_GET['uid']; + //Rechte Pruefen + $allowed=false; + + $student = new student(); + if(!$student->load($uid)) + die($p->t('global/fehlerBeimErmittelnDerUID')); + + $stg_obj = new studiengang(); + if(!$stg_obj->load($student->studiengang_kz)) + die($p->t('global/fehlerBeimLesenAusDatenbank')); + + //Berechtigung ueber das Berechtigungssystem + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($getuid); + if($rechte->isBerechtigt('lehre/abgabetool',$stg_obj->oe_kurzbz,'s')) + $allowed=true; + + //oder Lektor mit Betreuung dieses Studenten + $qry = "SELECT 1 + FROM + lehre.tbl_projektarbeit + JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) + JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id) + WHERE + tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." AND + vw_benutzer.uid=".$db->db_add_param($getuid).";"; + + if($result = $db->db_query($qry)) + { + if($db->db_num_rows($result)>0) + { + $allowed=true; + } + } + + if(!$allowed) + { + die($p->t('abgabetool/keineBerechtigungStudentenansicht')); + } +} +$htmlstr = ''; +$htmlstr1 = ''; +$vorname=''; +$nachname=''; +$zweitbetreuer = ''; +$senatspruefer = ''; + +$sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bnachname, + (SELECT vorname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bvorname, + (SELECT titelpre FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpre, + (SELECT titelpost FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpost, + (SELECT person_id FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id + AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id, + (SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id + AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz, + tbl_projektbetreuer.person_id AS betreuer_person_id, + tbl_projekttyp.bezeichnung AS prjbez, *, + lehre.tbl_projektbetreuer.note as note, + public.tbl_benutzer.aktiv as aktiv, + (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt, + (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt + FROM lehre.tbl_projektarbeit + LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) + LEFT JOIN public.tbl_benutzer ON(uid=student_uid) + LEFT JOIN public.tbl_person ON(tbl_benutzer.person_id=tbl_person.person_id) + LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + LEFT JOIN public.tbl_studiengang USING(studiengang_kz) + LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) + WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') + AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz') + AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." + ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz"; + +//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102'; +if(!$erg=$db->db_query($sql_query)) +{ + $errormsg=$p->t('global/fehlerBeimLesenAusDatenbank'); +} +else +{ + $htmlstr .= "
\n"; + $htmlstr .= "\n"; + $htmlstr .= " + + + + + + + + "; + $htmlstr .= "\n"; + $i = 0; + while($row=$db->db_fetch_object($erg)) + { + // get zweitbetreuer, if any + $htmlstr1 = ''; + $zweitbetreuer_obj = new person(); + if ($zweitbetreuer_obj->load($row->zweitbetreuer_person_id)) + { + $zweitbetreuer = ', '.$db->convert_html_chars($row->zweitbetreuer_betreuerart_kurzbz).': '.$zweitbetreuer_obj->titelpre.' '.$zweitbetreuer_obj->vorname.' '.$zweitbetreuer_obj->nachname.' '.$zweitbetreuer_obj->titelpost; + } + $htmlstr1 = ''.$db->convert_html_chars($row->betreuerart_kurzbz).': '; + + // get senatspruefer, if any + if ($row->betreuerart_kurzbz == 'Senatsvorsitz') + { + $senatspruefer_obj = new projektbetreuer(); + $senatsprueferRes = $senatspruefer_obj->getZweitbegutachterWithToken($row->betreuer_person_id, $row->projektarbeit_id, $row->uid); + if ($senatsprueferRes) + { + $senatspruefer .= ', Senatsprüfer: '; + $first = true; + foreach($senatspruefer_obj->result as $spr) + { + if (!$first) + $senatspruefer .= ', '; + $senatspruefer .= $spr->voller_name; + $first = false; + } + } + } + + $vorname=$row->vorname; + $nachname=$row->nachname; + $uid=$row->uid; + + ($row->btitelpre!=''?$htmlstr1 .= $row->btitelpre.' ':$htmlstr1 .= ''); + $htmlstr1 .= $row->bvorname.' '.$row->bnachname; + ($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= ''); + $htmlstr1 .= $zweitbetreuer; + $htmlstr1 .= $senatspruefer; + $htmlstr .= " \n"; //class='liste".($i%2)."' + + if (is_null($row->note) && $row->aktiv === 't') + $htmlstr .= " \n"; + elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt)) + { + $htmlstr .= ""; + } else + { + $htmlstr .= ""; + } + + + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " "; + $htmlstr .= " \n"; + $htmlstr .= " \n"; + $htmlstr .= " \n"; +// $htmlstr .= " \n"; + $htmlstr .= " \n"; + $i++; + } + $htmlstr .= "
".$p->t('abgabetool/details')."".$p->t('lvplan/sem')."".$p->t('lvplan/stg')."".$p->t('global/mail')."".$p->t('abgabetool/betreuer')."".$p->t('abgabetool/typ')."".$p->t('abgabetool/titel')."
".$p->t('abgabetool/upload').""; + + if (!is_null($row->babgeschickt)) + $htmlstr .= "".$p->t('abgabetool/projektbeurteilungErstDownload').""; + + if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt)) + $htmlstr .= "/"; + + if (!is_null($row->zweitbetreuer_abgeschickt)) + $htmlstr .= "".$p->t('abgabetool/projektbeurteilungZweitDownload').""; + + $htmlstr .= "".$row->note."".$row->studiensemester_kurzbz."".strtoupper($row->typ.$row->kurzbz).""; + + $qry_betr="SELECT mitarbeiter_uid FROM public.tbl_person + JOIN public.tbl_benutzer USING(person_id) + JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) + WHERE person_id=".$db->db_add_param($row->betreuer_person_id, FHC_INTEGER).";"; + if($result_betr=$db->db_query($qry_betr)) + { + if($row_betr=$db->db_fetch_object($result_betr)) + { + $htmlstr.="email"; + } + else + { + $htmlstr.="UID unknown!"; + } + } + $htmlstr .= " ".$htmlstr1." ".$db->convert_html_chars($row->prjbez)."".$db->convert_html_chars($row->titel)."".$db->convert_html_chars($row->betreuerart_kurzbz)."
\n"; +} +echo ' + + + + Abgabesystem_Studentensicht + + + + + + + + + + + + +'; + + echo '

'.$p->t('abgabetool/ueberschrift'); + if(trim($uid)!='') + echo " ($uid $vorname $nachname)
Anleitung ".$p->t('global/handbuch')."
"; + echo '

'; + echo $htmlstr; + echo ' +'; +?> diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index 29d74ab66..bead1a1e9 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -435,6 +435,8 @@ if($command=="update" && $error!=true) // 1. Begutachter mail ohne Token $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid; + $projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz; + $subject = $projektarbeit_obj->projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; $abgabetyp = $paabgabetyp_kurzbz == 'end' ? 'Endabgabe' : 'Zwischenabgabe'; $maildata = array(); @@ -452,7 +454,7 @@ if($command=="update" && $error!=true) 'ParbeitsbeurteilungEndupload', $maildata, $row_betr->mitarbeiter_uid."@".DOMAIN, - "Bachelor-/Masterarbeitsbetreuung", + $subject, 'sancho_header_min_bw.jpg', 'sancho_footer_min_bw.jpg', $user."@".DOMAIN); @@ -465,48 +467,63 @@ if($command=="update" && $error!=true) // 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern if ($paabgabetyp_kurzbz == 'end') { - $projektbetreuer = new projektbetreuer(); - $zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid); + // Zweitbegutachter holen + $zweitbegutachter = new projektbetreuer(); + $zweitbegutachterRes = $zweitbegutachter->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid); - if ($zweitbetr) + if ($zweitbegutachterRes) { - $tokenGenRes = $projektbetreuer->generateZweitbegutachterToken($zweitbetr->person_id, $projektarbeit_id); + $zweitbegutachterResults = $zweitbegutachter->result; - if (!$tokenGenRes) - echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; - - $zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid); - - if (!$zweitbetr) - echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; - - $intern = isset($zweitbetr->uid); - $mail_link = $intern ? $mail_fulllink : $mail_baselink; - - $zweitbetmaildata = array(); - $zweitbetmaildata['geehrt'] = "geehrte" . ($zweitbetr->anrede == "Herr" ? "r" : ""); - $zweitbetmaildata['anrede'] = $zweitbetr->anrede; - $zweitbetmaildata['betreuer_voller_name'] = $zweitbetr->voller_name; - $zweitbetmaildata['student_anrede'] = $maildata['student_anrede']; - $zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name']; - $zweitbetmaildata['abgabetyp'] = $abgabetyp; - $zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : ""; - $zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "

Zur Beurteilung der Arbeit

" : ""; - $zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($zweitbetr->zugangstoken) && !$intern ? "

Zugangstoken: " . $zweitbetr->zugangstoken . "

" : ""; - - $mailres = sendSanchoMail( - 'ParbeitsbeurteilungEndupload', - $zweitbetmaildata, - $zweitbetr->email, - "Masterarbeitsbetreuung", - 'sancho_header_min_bw.jpg', - 'sancho_footer_min_bw.jpg', - $user . "@" . DOMAIN - ); - - if (!$mailres) + foreach ($zweitbegutachterResults as $begutachter) { - echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + // token generieren, wenn noch nicht vorhanden und notwendig (wird in methode überprüft) + $tokenGenRes = $zweitbegutachter->generateZweitbegutachterToken($begutachter->person_id, $projektarbeit_id); + + if (!$tokenGenRes) + echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + + // Zweitbegutachter (evtl. mit Token) holen + $zweitbegutachterMitToken = new projektbetreuer(); + $begutachterMitTokenRes = $zweitbegutachterMitToken->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid, $begutachter->person_id); + + if (!$begutachterMitTokenRes) + echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + + // Email an Zweitbegutachter senden + if (isset($zweitbegutachterMitToken->result[0])) + { + $begutachterMitToken = $zweitbegutachterMitToken->result[0]; + + $intern = isset($begutachterMitToken->uid); + $mail_link = $intern ? $mail_fulllink : $mail_baselink; + + $zweitbetmaildata = array(); + $zweitbetmaildata['geehrt'] = "geehrte" . ($begutachterMitToken->anrede == "Herr" ? "r" : ""); + $zweitbetmaildata['anrede'] = $begutachterMitToken->anrede; + $zweitbetmaildata['betreuer_voller_name'] = $begutachterMitToken->voller_name; + $zweitbetmaildata['student_anrede'] = $maildata['student_anrede']; + $zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name']; + $zweitbetmaildata['abgabetyp'] = $abgabetyp; + $zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : ""; + $zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "

Zur Beurteilung der Arbeit

" : ""; + $zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($begutachterMitToken->zugangstoken) && !$intern ? "

Zugangstoken: " . $begutachterMitToken->zugangstoken . "

" : ""; + + $mailres = sendSanchoMail( + 'ParbeitsbeurteilungEndupload', + $zweitbetmaildata, + $begutachterMitToken->email, + $subject, + 'sancho_header_min_bw.jpg', + 'sancho_footer_min_bw.jpg', + $user . "@" . DOMAIN + ); + + if (!$mailres) + { + echo "" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "
 "; + } + } } } } diff --git a/include/projektbetreuer.class.php b/include/projektbetreuer.class.php index 04ba36b26..e55ad08d1 100644 --- a/include/projektbetreuer.class.php +++ b/include/projektbetreuer.class.php @@ -395,40 +395,66 @@ class projektbetreuer extends basis_db * @param $erstbegutachter_person_id int person_id des Erstbegutachters * @param $projektarbeit_id int * @param $student_uid string uid des Studenten der Arbeit abgibt + * @param $zweitbegutachter_person_id int person_id des Zweitbegutachters (wenn mehrere Zweitbetreuer zu einem Erstbegutachter erwartet werden) * @return object | bool */ - public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid) + public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid, $zweitbegutachter_person_id = null) { - $qry_betr="SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, + $qry_betr="SELECT DISTINCT ON (betr.person_id) betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, + tbl_benutzer.uid, kontakt, betr.betreuerart_kurzbz, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum FROM lehre.tbl_projektbetreuer betr - JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id + JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id JOIN public.tbl_person pers ON betr.person_id = pers.person_id LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' - WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter' + WHERE + ( + ( + betr.betreuerart_kurzbz = 'Zweitbegutachter' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)." + AND betreuerart_kurzbz = 'Erstbegutachter' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + OR + ( + betr.betreuerart_kurzbz = 'Senatspruefer' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)." + AND betreuerart_kurzbz = 'Senatsvorsitz' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + ) AND betr.projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." AND parb.student_uid = ".$this->db_add_param($student_uid)." - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)." - AND betreuerart_kurzbz = 'Erstbegutachter' - AND projektarbeit_id = betr.projektarbeit_id - ) - AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL) - ORDER BY betr.insertamum DESC - LIMIT 1"; + AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; + + if (isset($zweitbegutachter_person_id)) + { + $qry_betr .= " AND betr.person_id = ".$this->db_add_param($zweitbegutachter_person_id, FHC_INTEGER); + } + + $qry_betr .= " ORDER BY betr.person_id DESC, + (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ + SELECT 1 FROM public.tbl_mitarbeiter ma + WHERE ma.mitarbeiter_uid = tbl_benutzer.uid + ) THEN 0 ELSE 1 END), betr.insertamum DESC"; if ($betr=$this->db_query($qry_betr)) { - $row_betr = $this->db_fetch_object($betr); - - if ($row_betr) - return $row_betr; - else - return false; + $result = array(); + while ($row_betr = $this->db_fetch_object()) + { + $this->result[] = $row_betr; + } + return true; } else { @@ -451,7 +477,7 @@ class projektbetreuer extends basis_db LEFT JOIN public.tbl_benutzer USING(person_id) WHERE projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." AND tbl_projektbetreuer.person_id = ".$this->db_add_param($zweitbegutachter_person_id, FHC_INTEGER)." - AND betreuerart_kurzbz = 'Zweitbegutachter' + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer') LIMIT 1"; if ($betreueruidres = $this->db_query($betreuerUidQry)) @@ -494,7 +520,7 @@ class projektbetreuer extends basis_db zugangstoken_gueltigbis = CURRENT_DATE + interval '1 year' WHERE projektarbeit_id = " . $this->db_add_param($projektarbeit_id, FHC_INTEGER) . " AND person_id = " . $this->db_add_param($row_betr->person_id, FHC_INTEGER) . " - AND betreuerart_kurzbz = 'Zweitbegutachter'"; + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer')"; if ($this->db_query($qry_upd)) { diff --git a/locale/de-AT/abgabetool.php b/locale/de-AT/abgabetool.php index c4b17318b..e52b91c9a 100644 --- a/locale/de-AT/abgabetool.php +++ b/locale/de-AT/abgabetool.php @@ -83,12 +83,13 @@ $this->phrasen['abgabetool/gelesenUndAkzeptiert']='Gelesen und akzeptiert'; $this->phrasen['abgabetool/erklaerungNichtAkzeptiert']='Erklärung nicht akzeptiert'; $this->phrasen['abgabetool/downloadProjektarbeit']='Dokument herunterladen'; $this->phrasen['abgabetool/zweitBegutachter']='ZweitbegutachterIn'; -$this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Zugangstoken an ZweitbegutachterIn noch einmal senden'; -$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail an ZweitbegutachterIn (%s) gesendet'; -$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Mail an ZweitbegutachterIn (%s) senden'; -$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='keine Zustellmail für Zweitbegutachter vorhanden!'; +$this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Zugangstoken noch einmal senden'; +$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail an %s (%s) gesendet'; +$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Mail an %s (%s) senden'; +$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='keine Zustellmail vorhanden!'; $this->phrasen['abgabetool/projektbeurteilungDownload']='Projektbeurteilung herunterladen'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter'; $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim Ermitteln des Enduplaods der Projektarbeit'; +$this->phrasen['abgabetool/senatsPruefer']='Prüfer'; ?> diff --git a/locale/en-US/abgabetool.php b/locale/en-US/abgabetool.php index b05456faa..27a885a11 100644 --- a/locale/en-US/abgabetool.php +++ b/locale/en-US/abgabetool.php @@ -84,11 +84,12 @@ $this->phrasen['abgabetool/erklaerungNichtAkzeptiert']='Declaration not accepted $this->phrasen['abgabetool/downloadProjektarbeit']='Download File'; $this->phrasen['abgabetool/zweitBegutachter']='Second assessor'; $this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Resend access token to second assessor'; -$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Send mail to second assessor (%s)'; -$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail sent to second assessor (%s)'; -$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='Second assessor has no delivery mail adress!'; +$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Send mail to assessor %s (%s)'; +$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail sent to assessor %s (%s)'; +$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='Assessor has no delivery mail adress!'; $this->phrasen['abgabetool/projektbeurteilungDownload']='Thesis-Assessment download'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor'; $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when getting endupload of project work'; +$this->phrasen['abgabetool/senatsPruefer']='Examiner'; ?> diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index ca59997fa..7f051459d 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10389,6 +10389,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'senatsvorsitz', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Senatsvorsitz', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Assessor', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', diff --git a/vilesci/lehre/abgabe_assistenz.php b/vilesci/lehre/abgabe_assistenz.php index 3c939a330..4de70fd31 100644 --- a/vilesci/lehre/abgabe_assistenz.php +++ b/vilesci/lehre/abgabe_assistenz.php @@ -149,11 +149,7 @@ else LEFT JOIN PUBLIC.tbl_benutzer ON (PUBLIC.tbl_benutzer.person_id = PUBLIC.tbl_person.person_id) LEFT JOIN PUBLIC.tbl_mitarbeiter ON (PUBLIC.tbl_benutzer.uid = PUBLIC.tbl_mitarbeiter.mitarbeiter_uid) WHERE projektarbeit_id = ".$db->db_add_param($row->projektarbeit_id, FHC_INTEGER)." - AND ( - tbl_projektbetreuer.betreuerart_kurzbz = 'Erstbegutachter' - OR tbl_projektbetreuer.betreuerart_kurzbz = 'Betreuer' - OR tbl_projektbetreuer.betreuerart_kurzbz = 'Begutachter' - ) + AND tbl_projektbetreuer.betreuerart_kurzbz IN ('Erstbegutachter', 'Betreuer', 'Begutachter', 'Senatsvorsitz') UNION From a1622d8b7473a1ab0f00b3ea5156405b0a9d142c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 17:05:30 +0200 Subject: [PATCH 03/52] made betreuert SenatsprueferIn gender neutral --- system/dbupdate_3.3.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 515a80bf5..e362bedba 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6292,7 +6292,7 @@ if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerar { if($db->db_num_rows($result)==0) { - $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'Senatsprüfer kommissionelle Prüfung');"; + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'SenatsprüferIn kommissionelle Prüfung');"; if(!$db->db_query($qry)) echo 'Betreuerart: '.$db->db_last_error().'
'; From 1d5d5e4a84b575af9a98ae7f694cdc95d80972f8 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 18:07:34 +0200 Subject: [PATCH 04/52] added getEndabgabe method to Paabgabe model --- .../models/education/Paabgabe_model.php | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/application/models/education/Paabgabe_model.php b/application/models/education/Paabgabe_model.php index 087c27663..b876030a6 100644 --- a/application/models/education/Paabgabe_model.php +++ b/application/models/education/Paabgabe_model.php @@ -1,7 +1,6 @@ dbTable = 'campus.tbl_paabgabe'; $this->pk = 'paabgabe_id'; } + + /** + * Gets last Endabgabe of a Projektarbeit, including filename. + * @param int $projektarbeit_id + * @return object + */ + public function getEndabgabe($projektarbeit_id) + { + $qry = "SELECT paabgabe_id, student_uid, paabg.datum, paabg.abgabedatum, projekttyp_kurzbz, titel, titel_english, + paabgabe_id || '_' || student_uid || '.pdf' AS filename + FROM campus.tbl_paabgabe paabg + JOIN lehre.tbl_projektarbeit USING (projektarbeit_id) + WHERE projektarbeit_id = ? + AND paabgabetyp_kurzbz = 'end' + AND paabg.abgabedatum IS NOT NULL + ORDER BY paabg.abgabedatum, paabg.datum DESC + LIMIT 1"; + + return $this->execQuery($qry, array($projektarbeit_id)); + } } From 2125fdc21913ab563a3b3b4c444b65059b40c449 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 18:09:30 +0200 Subject: [PATCH 05/52] sending of zweitbetreuer mail with token: correct subject depending on projekttyp --- cis/private/lehre/abgabe_lektor_details.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index ed33add27..852529d53 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -119,6 +119,7 @@ if(!$projektarbeit_obj->load($projektarbeit_id)) die('Fehler beim Laden der Projektarbeit'); $titel = $projektarbeit_obj->titel; $student_uid = $projektarbeit_obj->student_uid; +$projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz; // paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden $paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); @@ -179,7 +180,7 @@ if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) // if Zweitbetreuer is the one for which token was requested, send mail if ($zbg->person_id == $_GET['zweitbetreuer_person_id']) { - $mailres = sendZweitbegutachterMail($zbg, $erstbetreuer_id, $row_std); + $mailres = sendZweitbegutachterMail($zbg, $erstbetreuer_id, $row_std, $projekttyp_kurzbz); if ($mailres) { @@ -734,7 +735,7 @@ echo $htmlstr; * @param object $student * @return bool|projektbetreuer|void|null */ -function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, $student) +function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, $student, $projekttyp_kurzbz) { if (!isset($zweitbegutachter->email) || $zweitbegutachter->email == '') return false; @@ -758,6 +759,7 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, { $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); + $mail_subject = $projekttyp_kurzbz == 'Diplom' ? "Masterarbeitsbetreuung" : "Bachelorarbeitsbetreuung"; $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; $mail_link = $intern ? $mail_fulllink : $mail_baselink; @@ -777,7 +779,7 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, 'ParbeitsbeurteilungEndupload', $maildata, $zweitbetr->email, - "Masterarbeitsbetreuung", + $mail_subject, 'sancho_header_min_bw.jpg', 'sancho_footer_min_bw.jpg' ); From 60d675f22b1a316d8bcb321dd08f5545c056d8d3 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 18:09:53 +0200 Subject: [PATCH 06/52] added parbeitDownload phrases for Projektarbeitsbeurteilung --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 7f051459d..db9a33812 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10409,6 +10409,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'parbeitDownload', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Download Projektarbeit', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Download thesis', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 1d408b9d65e475c2e3eeda9a79c48f0325b66474 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 19:39:31 +0200 Subject: [PATCH 07/52] added comment to getZweitbegutachterWithToken method in projektbetreuer class --- include/projektbetreuer.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/projektbetreuer.class.php b/include/projektbetreuer.class.php index e55ad08d1..1fe2a5e1a 100644 --- a/include/projektbetreuer.class.php +++ b/include/projektbetreuer.class.php @@ -421,7 +421,7 @@ class projektbetreuer extends basis_db AND projektarbeit_id = betr.projektarbeit_id ) ) - OR + OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ ( betr.betreuerart_kurzbz = 'Senatspruefer' AND EXISTS ( From 2ff067193d868ca43b6919e14d17748f4d661e23 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 24 Aug 2022 19:39:59 +0200 Subject: [PATCH 08/52] added Senatsvorsitz to betreuerart kurzbz in pdfExport --- cis/private/pdfExport.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cis/private/pdfExport.php b/cis/private/pdfExport.php index 99b5c94f0..2743205d1 100644 --- a/cis/private/pdfExport.php +++ b/cis/private/pdfExport.php @@ -150,14 +150,14 @@ if (isset($_GET['betreuerart_kurzbz'])) if (isset($_GET['xsl']) && $_GET['xsl'] == 'Zahlung') { $requestdata = $_SERVER['QUERY_STRING']; - + $log = new Webservicelog(); $log->webservicetyp_kurzbz = 'content'; $log->request_id = isset($_GET['buchungsnummern']) && !empty($_GET['buchungsnummern']) ? $_GET['buchungsnummern'] : NULL; $log->beschreibung = 'Zahlungsbestaetigungsdownload'; $log->request_data = $requestdata; $log->execute_user = get_uid(); - + $log->save(true); } @@ -207,6 +207,7 @@ if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung')) switch ($_GET['betreuerart_kurzbz']) { case 'Begutachter' : + case 'Senatsvorsitz' : $xsl = 'ProjektBeurteilungBA'; break; case 'Erstbegutachter' : From 92762c5dc2ace2b6cf61c641f880c97719b64996 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Sat, 27 Aug 2022 01:34:03 +0200 Subject: [PATCH 09/52] Projektarbeitsbeurteilung: - getZweitbegutachterWithToken: returns Zweitbegutachter (Senatspruefer) from Senatspruefungen as well - added phrase --- .../education/Projektbetreuer_model.php | 66 +++++++++++++------ system/phrasesupdate.php | 20 ++++++ 2 files changed, 67 insertions(+), 19 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index f6205f67f..d23342c85 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -106,8 +106,10 @@ class Projektbetreuer_model extends DB_Model * @param $student_uid string uid des Studenten der Arbeit abgibt * @return object | bool */ - public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid) + public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid, $zweitbegutachter_person_id = null) { + $params = array($erstbegutachter_person_id, $erstbegutachter_person_id, $projektarbeit_id, $student_uid); + $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum @@ -117,20 +119,46 @@ class Projektbetreuer_model extends DB_Model LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' - WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter' + WHERE + ( + ( + betr.betreuerart_kurzbz = 'Zweitbegutachter' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Erstbegutachter' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ + ( + betr.betreuerart_kurzbz = 'Senatspruefer' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Senatsvorsitz' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + ) AND betr.projektarbeit_id = ? AND parb.student_uid = ? - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ? - AND betreuerart_kurzbz = 'Erstbegutachter' - AND projektarbeit_id = betr.projektarbeit_id - ) - AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL) - ORDER BY betr.insertamum DESC + AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; + + if (isset($zweitbegutachter_person_id)) + { + $qry_betr .= " AND betr.person_id = ?"; + $params[] = $zweitbegutachter_person_id; + } + + $qry_betr .= " ORDER BY betr.person_id DESC, + (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ + SELECT 1 FROM public.tbl_mitarbeiter ma + WHERE ma.mitarbeiter_uid = tbl_benutzer.uid + ) THEN 0 ELSE 1 END), betr.insertamum DESC LIMIT 1"; - return $this->execQuery($qry_betr, array($projektarbeit_id, $student_uid, $erstbegutachter_person_id)); + return $this->execQuery($qry_betr, $params); } /** @@ -141,23 +169,23 @@ class Projektbetreuer_model extends DB_Model */ public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id) { - $betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id + $betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id, betreuerart_kurzbz FROM lehre.tbl_projektbetreuer JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_benutzer USING(person_id) WHERE projektarbeit_id = ? AND tbl_projektbetreuer.person_id = ? - AND betreuerart_kurzbz = 'Zweitbegutachter' + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer') LIMIT 1"; - $betreueruidres = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id)); + $betreueruidRes = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id)); - if (!hasData($betreueruidres)) + if (!hasData($betreueruidRes)) return error('Zweitbegutachter nicht gefunden'); - $row_betr = getData($betreueruidres)[0]; + $zweitbetreuer = getData($betreueruidRes)[0]; - if (!isset($row_betr->uid)) + if (!isset($zweitbetreuer->uid)) { do { $token = generateToken(16); @@ -166,8 +194,8 @@ class Projektbetreuer_model extends DB_Model $result = $this->update( array('projektarbeit_id' => $projektarbeit_id, - 'person_id' => $row_betr->person_id, - 'betreuerart_kurzbz' => 'Zweitbegutachter'), + 'person_id' => $zweitbetreuer->person_id, + 'betreuerart_kurzbz' => $zweitbetreuer->betreuerart_kurzbz), array('zugangstoken' => $token, 'zugangstoken_gueltigbis' => date('Y-m-d', strtotime('+1 year'))) ); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index db9a33812..0c2bb0edf 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10429,6 +10429,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'betreuerart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Betreuerart', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Assessor type', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 824a148b92cb67ae84c1ba3bf5c088f8cb0861a5 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 31 Aug 2022 13:38:38 +0200 Subject: [PATCH 10/52] adapted core to Projektarbeitsbeurteilung Zweitbegutachter/Erstbegutacher Controller split --- .../education/Projektbetreuer_model.php | 82 +++++++++---------- cis/private/lehre/abgabe_lektor_details.php | 13 +-- cis/private/lehre/abgabe_student_details.php | 5 +- 3 files changed, 52 insertions(+), 48 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index d23342c85..8a333d47c 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -111,52 +111,52 @@ class Projektbetreuer_model extends DB_Model $params = array($erstbegutachter_person_id, $erstbegutachter_person_id, $projektarbeit_id, $student_uid); $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, - trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, - CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum - FROM lehre.tbl_projektbetreuer betr - JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id - JOIN public.tbl_person pers ON betr.person_id = pers.person_id - LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true - LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id - LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' - WHERE - ( + trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, + CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum + FROM lehre.tbl_projektbetreuer betr + JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id + JOIN public.tbl_person pers ON betr.person_id = pers.person_id + LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true + LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id + LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end' + WHERE ( - betr.betreuerart_kurzbz = 'Zweitbegutachter' - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ? - AND betreuerart_kurzbz = 'Erstbegutachter' - AND projektarbeit_id = betr.projektarbeit_id + ( + betr.betreuerart_kurzbz = 'Zweitbegutachter' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Erstbegutachter' + AND projektarbeit_id = betr.projektarbeit_id + ) + ) + OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ + ( + betr.betreuerart_kurzbz = 'Senatspruefer' + AND EXISTS ( + SELECT 1 FROM lehre.tbl_projektbetreuer + WHERE person_id = ? + AND betreuerart_kurzbz = 'Senatsvorsitz' + AND projektarbeit_id = betr.projektarbeit_id + ) ) ) - OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ - ( - betr.betreuerart_kurzbz = 'Senatspruefer' - AND EXISTS ( - SELECT 1 FROM lehre.tbl_projektbetreuer - WHERE person_id = ? - AND betreuerart_kurzbz = 'Senatsvorsitz' - AND projektarbeit_id = betr.projektarbeit_id - ) - ) - ) - AND betr.projektarbeit_id = ? - AND parb.student_uid = ? - AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; + AND betr.projektarbeit_id = ? + AND parb.student_uid = ? + AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)"; - if (isset($zweitbegutachter_person_id)) - { - $qry_betr .= " AND betr.person_id = ?"; - $params[] = $zweitbegutachter_person_id; - } + if (isset($zweitbegutachter_person_id)) + { + $qry_betr .= " AND betr.person_id = ?"; + $params[] = $zweitbegutachter_person_id; + } - $qry_betr .= " ORDER BY betr.person_id DESC, - (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ - SELECT 1 FROM public.tbl_mitarbeiter ma - WHERE ma.mitarbeiter_uid = tbl_benutzer.uid - ) THEN 0 ELSE 1 END), betr.insertamum DESC - LIMIT 1"; + $qry_betr .= " ORDER BY betr.person_id DESC, + (CASE WHEN EXISTS ( /* if multiple accounts, prioritize mitarbeiter */ + SELECT 1 FROM public.tbl_mitarbeiter ma + WHERE ma.mitarbeiter_uid = tbl_benutzer.uid + ) THEN 0 ELSE 1 END), betr.insertamum DESC + LIMIT 1"; return $this->execQuery($qry_betr, $params); } diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index 852529d53..eb41620ce 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -144,7 +144,7 @@ if($num_rows_endupload < 0) } // Zweitbegutachter holen -if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) +if(in_array($betreuerart, array('Erstbegutachter', 'Senatsvorsitz'))) { $alleBegutachter = new projektbetreuer(); $alleBegutachterRes = $alleBegutachter->getProjektbetreuer($projektarbeit_id); @@ -154,7 +154,7 @@ if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) $zweitbetreuerArr = array(); foreach ($alleBegutachter->result as $begutachter) { - if (in_array($begutachter->betreuerart_kurzbz, array('Erstbegutacher', 'Senatsvorsitz'))) + if (in_array($begutachter->betreuerart_kurzbz, array('Erstbegutachter', 'Senatsvorsitz'))) { // dem Erstbetreuer zugewiesene Zweitbetreuer holen $erstbetreuer_id = $begutachter->person_id; @@ -165,7 +165,7 @@ if(in_array($betreuerart, array('Erstbegutacher', 'Senatsvorsitz'))) } // Mail mit Token an Zweitbegutachter senden - if ($zweitbegutachterRes && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id'])) + if (count($zweitbetreuerArr) > 0 && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id'])) { $qry_std="SELECT * FROM campus.vw_benutzer where uid=".$db->db_add_param($uid); if(!$result_std=$db->db_query($qry_std)) @@ -481,7 +481,8 @@ $endupload_vorhanden = $num_rows_endupload >= 1; if ($semester_benotbar && $endupload_vorhanden) { - $htmlstr .= "
"; + $beurtPfad = $betreuerart == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'; + $htmlstr .= ""; $htmlstr .= "\n"; $htmlstr .= "\n"; $htmlstr .= "
"; @@ -759,8 +760,8 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, { $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); - $mail_subject = $projekttyp_kurzbz == 'Diplom' ? "Masterarbeitsbetreuung" : "Bachelorarbeitsbetreuung"; - $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; + $mail_subject = $projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungZweitbegutachter"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; $mail_link = $intern ? $mail_fulllink : $mail_baselink; diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index bead1a1e9..522e89dd3 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -433,7 +433,7 @@ if($command=="update" && $error!=true) $row_std=$db->db_fetch_object($result_std); // 1. Begutachter mail ohne Token - $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung"; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid; $projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz; $subject = $projektarbeit_obj->projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; @@ -495,6 +495,9 @@ if($command=="update" && $error!=true) { $begutachterMitToken = $zweitbegutachterMitToken->result[0]; + $path = $begutachterMitToken->betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/$path"; + $mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid; $intern = isset($begutachterMitToken->uid); $mail_link = $intern ? $mail_fulllink : $mail_baselink; From cc33502ab3ad6ce31fd1819d62b8f768a80a19f9 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 1 Sep 2022 02:23:32 +0200 Subject: [PATCH 11/52] adapted "resend token for Begutachter" mail to Projektarbeitsbeurteilung controller split --- application/models/education/Projektbetreuer_model.php | 5 +++-- cis/private/lehre/abgabe_lektor_details.php | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 8a333d47c..db9310eed 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -110,9 +110,10 @@ class Projektbetreuer_model extends DB_Model { $params = array($erstbegutachter_person_id, $erstbegutachter_person_id, $projektarbeit_id, $student_uid); - $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt, + $qry_betr = "SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name, - CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum + CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, kontakt, + abg.abgabedatum, betr.betreuerart_kurzbz FROM lehre.tbl_projektbetreuer betr JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id JOIN public.tbl_person pers ON betr.person_id = pers.person_id diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index eb41620ce..2bda94848 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -760,8 +760,9 @@ function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, { $zweitbetr = $projektbetreuer->result[0]; $intern = isset($zweitbetr->uid); + $mail_link_path = $zweitbetr->betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'; $mail_subject = $projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung'; - $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungZweitbegutachter"; + $mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/$mail_link_path"; $mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid; $mail_link = $intern ? $mail_fulllink : $mail_baselink; From 450b0b64339db9316e196676c474eccf981a1ea8 Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 14 Sep 2022 15:55:07 +0200 Subject: [PATCH 12/52] Initial commit --- include/berechtigung.class.php | 37 + .../benutzerberechtigung_autocomplete.php | 116 ++ .../benutzerberechtigung_details.php | 1149 +++++++++++------ 3 files changed, 914 insertions(+), 388 deletions(-) create mode 100644 vilesci/stammdaten/benutzerberechtigung_autocomplete.php diff --git a/include/berechtigung.class.php b/include/berechtigung.class.php index 684ad4e81..ab224be4d 100644 --- a/include/berechtigung.class.php +++ b/include/berechtigung.class.php @@ -312,5 +312,42 @@ class berechtigung extends basis_db return false; } } + + /** + * Sucht nach Berechtigungen + * @param string $searchItem Suchbegriff + * @return boolean + */ + public function searchBerechtigungen($searchItem) + { + $this->result=array(); + $qry = 'SELECT * FROM system.tbl_berechtigung WHERE + ( + LOWER(berechtigung_kurzbz) LIKE LOWER(\'%'.$this->db_escape(($searchItem)).'%\') + OR + LOWER(beschreibung) LIKE LOWER(\'%'.$this->db_escape(($searchItem)).'%\') + )'; + + $qry .= ' ORDER BY berechtigung_kurzbz'; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new berechtigung(); + + $obj->berechtigung_kurzbz = $row->berechtigung_kurzbz; + $obj->beschreibung = $row->beschreibung; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Berechtigungen'; + return false; + } + } } ?> \ No newline at end of file diff --git a/vilesci/stammdaten/benutzerberechtigung_autocomplete.php b/vilesci/stammdaten/benutzerberechtigung_autocomplete.php new file mode 100644 index 000000000..07e57809e --- /dev/null +++ b/vilesci/stammdaten/benutzerberechtigung_autocomplete.php @@ -0,0 +1,116 @@ + + */ +require_once ('../../config/vilesci.config.inc.php'); +require_once ('../../include/functions.inc.php'); +require_once ('../../include/basis_db.class.php'); +require_once ('../../include/ort.class.php'); +require_once ('../../include/benutzer.class.php'); +require_once ('../../include/studiengang.class.php'); +require_once ('../../include/berechtigung.class.php'); +require_once ('../../include/organisationseinheit.class.php'); +require_once ('../../include/sprache.class.php'); + +if (! $db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + +$uid = get_uid(); +$sprache = getSprache(); + +if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'benutzer') +{ + $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); + if (is_null($search) || $search == '') + exit(); + + $benutzer = new benutzer(); + + if ($benutzer->search(array( + $search + ))) + { + $result_obj = array(); + foreach ($benutzer->result as $row) + { + $item['vorname'] = html_entity_decode($row->vorname); + $item['nachname'] = html_entity_decode($row->nachname); + $item['uid'] = html_entity_decode($row->uid); + $result_obj[] = $item; + } + echo json_encode($result_obj); + } + exit(); +} + +if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'berechtigung') +{ + $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); + if (is_null($search) || $search == '') + exit(); + + $berechtigung = new berechtigung(); + + if ($berechtigung->searchBerechtigungen($search)) + { + $result_obj = array(); + foreach ($berechtigung->result as $row) + { + $item['berechtigung_kurzbz'] = html_entity_decode($row->berechtigung_kurzbz); + $item['beschreibung'] = html_entity_decode($row->beschreibung); + $result_obj[] = $item; + } + echo json_encode($result_obj); + } + exit(); +} + +if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'oe_kurzbz') +{ + $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); + if (is_null($search) || $search == '') + exit(); + + $search = array($search); + $oe = new organisationseinheit(); + $oe->search($search); + + $stg = new studiengang(); + $stg->search($search); + foreach($stg->result as $row) + { + if($row->aktiv===true) + $oe->result[] = new organisationseinheit($row->oe_kurzbz); + } + + if(is_array($oe->result) && count($oe->result) > 0) + { + $result_obj = array(); + foreach($oe->result as $row) + { + if($row->aktiv==true) + { + $item['oe_kurzbz'] = html_entity_decode($row->oe_kurzbz); + $item['organisationseinheittyp_kurzbz'] = html_entity_decode($row->organisationseinheittyp_kurzbz); + $item['bezeichnung'] = html_entity_decode($row->bezeichnung); + $result_obj[] = $item; + } + } + echo json_encode($result_obj); + } + exit(); +} + +?> diff --git a/vilesci/stammdaten/benutzerberechtigung_details.php b/vilesci/stammdaten/benutzerberechtigung_details.php index 83a9c34bb..03e7b15b9 100644 --- a/vilesci/stammdaten/benutzerberechtigung_details.php +++ b/vilesci/stammdaten/benutzerberechtigung_details.php @@ -37,7 +37,28 @@ require_once('../../include/person.class.php'); require_once('../../include/benutzer.class.php'); require_once('../../include/funktion.class.php'); require_once('../../include/wawi_kostenstelle.class.php'); +require_once('../../include/log.class.php'); +/* + * TODOs + * + +Checkbox-Range +Mehrfach-Löschen + + +Wawi und kostenstelle ausblenden +Checkbox markieren bei (doppel)klick auf Zeile + +---------------------- + +Nach übertragen gleich zu Person springen +Bug in Kopieren - Verdoppelt alle Einträge +Sortierreihenfolge. OE wird anscheinend nicht sortiert +ART prüfen auf schreibweise +BEschreibungstexte bestehender Rechte + + */ $user = get_uid(); $rechte = new benutzerberechtigung(); @@ -51,7 +72,8 @@ if(!$rechte->isBerechtigt('basis/berechtigung')) //$reloadstr = ''; // neuladen der liste im oberen frame $htmlstr = ''; -$errorstr = ''; //fehler beim insert +$errorstr = ''; +$successstr = ''; $sel = ''; $chk = ''; $oe_arr = array(); @@ -73,64 +95,161 @@ $neu = false; $negativ = false; $filter=(isset($_GET['filter'])?$_GET['filter']:'alle'); -if(isset($_POST['del'])) +if(isset($_POST['delete']) && $_POST['delete'] != '') { if(!$rechte->isBerechtigt('basis/berechtigung', null, 'suid')) - die('Sie haben keine Berechtigung fuer diese Aktion'); + die($rechte->errormsg); - $benutzerberechtigung_id = $_POST['benutzerberechtigung_id']; + $benutzerberechtigung_id = $_POST['delete']; $ber = new benutzerberechtigung(); if(!$ber->delete($benutzerberechtigung_id)) $errorstr .= 'Datensatz konnte nicht gelöscht werden!'; - //$reloadstr .= "\n"; + //$reloadstr .= ""; } -if(isset($_POST['kopieren'])) +if(isset($_POST['delete_multi']) && $_POST['delete_multi'] != '') { + if(!$rechte->isBerechtigt('basis/berechtigung', null, 'suid')) + die($rechte->errormsg); + + if (isset($_POST['dataset'])) + { + $i = 0; + foreach ($_POST['dataset'] AS $benutzerberechtigung_id => $value) + { + // Nur markierte Rechte kopieren + if (!isset($value['check'])) + { + continue; + } + + $ber = new benutzerberechtigung(); + if(!$ber->delete($benutzerberechtigung_id)) + { + $errorstr .= 'Datensatz konnte nicht gelöscht werden!'; + } + else + { + $i ++; + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = 'Berechtigung gelöscht'; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } + } + if ($errorstr == '') + { + $successstr .= "".$i." Rechte erfolgreich gelöscht
"; + } + } + + + + //$reloadstr .= ""; + +} + +if(isset($_POST['uebertragen']) && $_POST['uebertragen_nach'] != '') +{ + //echo '
', var_dump($_POST), '
';exit(); if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) { - $uid = $_POST['uid']; - $uid_von = $_POST['uid_von']; + $uidVon = $_POST['uid']; + $copyTo = $_POST['uebertragen_nach']; - $rechtevon = new benutzerberechtigung(); - if(!$rechtevon->loadBenutzerRollen($uid_von)) - die('Fehler beim Laden der Berechtigung von '.$uid_von); - - foreach($rechtevon->berechtigungen AS $row) + if (isset($_POST['dataset'])) { - //Nur aktive Berechtigungen kopieren - if(($row->start=='' || $row->start<=date('Y-m-d')) && ($row->ende=='' || $row->ende>=date('Y-m-d'))) + $i = 0; + foreach ($_POST['dataset'] AS $key => $value) { + // Nur markierte Rechte kopieren + if (!isset($value['check'])) + { + continue; + } + + $rolle_kurzbz = (isset($value['rolle_kurzbz']) ? $value['rolle_kurzbz'] : ''); + $berechtigung_kurzbz = (isset($value['berechtigung_kurzbz']) ? $value['berechtigung_kurzbz'] : ''); + $art = (isset($value['art']) ? $value['art'] : ''); + $oe_kurzbz = (isset($value['oe_kurzbz']) ? $value['oe_kurzbz'] : ''); + $kostenstelle_id = (isset($value['kostenstelle_id']) ? $value['kostenstelle_id'] : ''); + $start = (isset($value['start']) ? $value['start'] : ''); + $ende = (isset($value['ende']) ? $value['ende'] : ''); + $anmerkung = (isset($value['anmerkung']) ? $value['anmerkung'] : ''); + + $funktion_kurzbz = (isset($value['funktion_kurzbz']) ? $value['funktion_kurzbz'] : ''); + $studiensemester_kurzbz = null; + $ber = new benutzerberechtigung(); - $ber->new = true; - //$ber->benutzerberechtigung_id = $benutzerberechtigung_id; - $ber->art = $row->art; - $ber->oe_kurzbz = $row->oe_kurzbz; - $ber->berechtigung_kurzbz = $row->berechtigung_kurzbz; - $ber->rolle_kurzbz = $row->rolle_kurzbz; - $ber->uid = $uid; - $ber->funktion_kurzbz = $row->funktion_kurzbz; - $ber->studiensemester_kurzbz = $row->studiensemester_kurzbz; - $ber->start = $row->start; - $ber->ende = $row->ende; - $ber->negativ = $row->negativ; - $ber->insertamum=date('Y-m-d H:i:s'); + $ber->insertamum = date('Y-m-d H:i:s'); $ber->insertvon = $user; + $ber->new = true; + + if (isset($value['negativ'])) + $ber->negativ = true; + else + $ber->negativ = false; + + $ber->art = $art; + $ber->oe_kurzbz = $oe_kurzbz; + $ber->berechtigung_kurzbz = $berechtigung_kurzbz; + $ber->rolle_kurzbz = $rolle_kurzbz; + $ber->uid = $copyTo; + $ber->funktion_kurzbz = $funktion_kurzbz; + $ber->studiensemester_kurzbz = $studiensemester_kurzbz; + $ber->start = $start; + $ber->ende = $ende; $ber->updateamum = date('Y-m-d H:i:s'); $ber->updatevon = $user; - $ber->kostenstelle_id = $row->kostenstelle_id; - $ber->anmerkung = 'Kopiert von UID '.$uid_von.($row->anmerkung!=''?'. Anmerkung von UID '.$uid_von.': '.$row->anmerkung:''); + $ber->kostenstelle_id = $kostenstelle_id; + $ber->anmerkung = 'Kopiert von UID '.$uidVon.($anmerkung!=''?'. Anmerkung von UID '.$uidVon.': '.$anmerkung:''); if(!$ber->save()) { - if (!$ber->new) - $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; + $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; } + else + { + $i ++; + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = 'Berechtigung übertragen von '.$uidVon.' nach '.$copyTo; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } + } + if ($errorstr == '') + { + $successstr .= "".$i." Rechte erfolgreich kopiert
"; + echo ""; } } } @@ -140,71 +259,137 @@ if(isset($_POST['kopieren'])) } } -if(isset($_POST['schick']) || isset($_POST['copy'])) +if(isset($_POST['schick'])) { if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) { - $benutzerberechtigung_id = $_POST['benutzerberechtigung_id']; - $art = $_POST['art']; - $oe_kurzbz = (isset($_POST['oe_kurzbz'])?$_POST['oe_kurzbz']:''); - $berechtigung_kurzbz = (isset($_POST['berechtigung_kurzbz'])?$_POST['berechtigung_kurzbz']:''); - $rolle_kurzbz = (isset($_POST['rolle_kurzbz'])?$_POST['rolle_kurzbz']:''); - $uid = $_POST['uid']; - $funktion_kurzbz = $_POST['funktion_kurzbz']; - $studiensemester_kurzbz = null;//$_POST['studiensemester_kurzbz']; - $start = $_POST['start']; - $ende = $_POST['ende']; - $kostenstelle_id = (isset($_POST['kostenstelle_id'])?$_POST['kostenstelle_id']:''); - $anmerkung = (isset($_POST['anmerkung'])?$_POST['anmerkung']:''); + if (isset($_POST['dataset'])) + { + foreach ($_POST['dataset'] AS $benutzerberechtigung_id => $value) + { + $rolle_kurzbz = (isset($value['rolle_kurzbz']) ? $value['rolle_kurzbz'] : ''); + $berechtigung_kurzbz = (isset($value['berechtigung_kurzbz']) ? $value['berechtigung_kurzbz'] : ''); + $art = (isset($value['art']) ? $value['art'] : ''); + $oe_kurzbz = (isset($value['oe_kurzbz']) ? $value['oe_kurzbz'] : ''); + $kostenstelle_id = (isset($value['kostenstelle_id']) ? $value['kostenstelle_id'] : ''); + $start = (isset($value['start']) ? $value['start'] : ''); + $ende = (isset($value['ende']) ? $value['ende'] : ''); + $uid = $_POST['uid']; + $anmerkung = (isset($value['anmerkung']) ? $value['anmerkung'] : ''); + $funktion_kurzbz = (isset($_POST['funktion_kurzbz']) ? $_POST['funktion_kurzbz'] : ''); + $studiensemester_kurzbz = null; + + $ber = new benutzerberechtigung(); + if (isset($_POST['neu'])) + { + $ber->insertamum = date('Y-m-d H:i:s'); + $ber->insertvon = $user; + $ber->new = true; + } + else + { + if(!$ber->load($benutzerberechtigung_id)) + die('Fehler beim Laden der Berechtigung'); + } + if (isset($value['negativ'])) + $ber->negativ = true; + else + $ber->negativ = false; + + $ber->benutzerberechtigung_id = $benutzerberechtigung_id; + $ber->art = $art; + $ber->oe_kurzbz = $oe_kurzbz; + $ber->berechtigung_kurzbz = $berechtigung_kurzbz; + $ber->rolle_kurzbz = $rolle_kurzbz; + $ber->uid = $uid; + $ber->funktion_kurzbz = $funktion_kurzbz; + $ber->studiensemester_kurzbz = $studiensemester_kurzbz; + $ber->start = $start; + $ber->ende = $ende; + $ber->updateamum = date('Y-m-d H:i:s'); + $ber->updatevon = $user; + $ber->kostenstelle_id = $kostenstelle_id; + $ber->anmerkung = $anmerkung; + + if(!$ber->save()) + { + if (!$ber->new) + $errorstr .= "Datensatz konnte nicht upgedatet werden!".$ber->errormsg; + else + $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; + } + else + { + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + if (isset($_POST['neu'])) + $log->beschreibung = 'Neue Berechtigung für '.$uid.' angelegt'; + else + $log->beschreibung = 'Berechtigung für '.$uid.' aktualisiert'; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } + } + } + } + else + { + $errorstr.='Fehler beim Speichern: '.$rechte->errormsg; + } +} + +if(isset($_POST['copy']) && $_POST['copy'] != '') +{ + if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) + { $ber = new benutzerberechtigung(); - if (isset($_POST['neu']) || isset($_POST['copy'])) - { - $ber->insertamum=date('Y-m-d H:i:s'); - $ber->insertvon = $user; - $ber->new = true; - } - else - { - if(!$ber->load($benutzerberechtigung_id)) - die('Fehler beim Laden der Berechtigung'); - } - if (isset($_POST['negativ'])) - $ber->negativ = true; - else - $ber->negativ = false; + if(!$ber->load($_POST['copy'])) + die('Fehler beim Laden der Berechtigung'); - $ber->benutzerberechtigung_id = $benutzerberechtigung_id; - $ber->art = $art; - $ber->oe_kurzbz = $oe_kurzbz; - $ber->berechtigung_kurzbz = $berechtigung_kurzbz; - $ber->rolle_kurzbz = $rolle_kurzbz; - $ber->uid = $uid; - $ber->funktion_kurzbz = $funktion_kurzbz; - $ber->studiensemester_kurzbz = $studiensemester_kurzbz; - $ber->start = $start; - $ber->ende = $ende; - $ber->updateamum = date('Y-m-d H:i:s'); - $ber->updatevon = $user; - $ber->kostenstelle_id = $kostenstelle_id; - $ber->anmerkung = $anmerkung; + $ber->new = true; + $ber->insertamum = date('Y-m-d H:i:s'); + $ber->insertvon = $user; - if(!$ber->save()){ + if(!$ber->save()) + { if (!$ber->new) $errorstr .= "Datensatz konnte nicht upgedatet werden!".$ber->errormsg; else $errorstr .= "Datensatz konnte nicht gespeichert werden!".$ber->errormsg; } - /*if ($ber->new) + else { - $reloadstr .= "\n"; - }*/ + //Log schreiben + $log = new log(); + + $logdata = var_export((array) $ber, true); + $log->new = true; + $log->sql = $logdata; + $log->sqlundo = 'Kein Undo vorhanden'; + $log->executetime = date('Y-m-d H:i:s'); + $log->mitarbeiter_uid = $user; + $log->beschreibung = 'Berechtigung für '.$uid.' kopiert'; + + if(!$log->save()) + { + $errorstr .= "Fehler beim schreiben des Log-Eintrags
"; + } + } } else { - $errorstr.='Fehler beim Speichern: Sie haben keine Berechtigung zum Speichern'; + $errorstr.='Fehler beim Speichern: '.$rechte->errormsg; } } @@ -220,10 +405,10 @@ sort($rolle_arr); $b->getBerechtigungen(); foreach($b->result as $berechtigung) { - $berechtigung_arr[] = $berechtigung->berechtigung_kurzbz; + $berechtigung_arr[$berechtigung->berechtigung_kurzbz] = $berechtigung->beschreibung; $berechtigung_beschreibung_arr[] = $berechtigung->beschreibung; } -//var_dump($berechtigung_arr); + $st = new studiensemester(); $st->getAll(); foreach($st->studiensemester as $studiensemester) @@ -233,6 +418,10 @@ foreach($st->studiensemester as $studiensemester) $oe = new organisationseinheit(); $oe->getAll(); +foreach ($oe->result AS $row) +{ + $oe_arr[$row->oe_kurzbz] = $row->organisationseinheittyp_kurzbz.' '.$row->bezeichnung; +} $kostenstelle = new wawi_kostenstelle(); $kostenstelle->getAll(); @@ -259,13 +448,16 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $rights->loadBenutzerRollen($uid); $name = new benutzer(); $name->load($uid); - $htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")\n"; + + $htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")"; + $htmlstr .= "

".$errorstr."

".$successstr."

"; + //Formular zum Kopieren von Berechtigungen - $htmlstr .= "
\n"; - $htmlstr .= "Berechtigungen (aktive) kopieren von UID \n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "
\n"; + //$htmlstr .= "
"; + //$htmlstr .= "Berechtigungen (aktive) kopieren von UID "; + //$htmlstr .= ""; + //$htmlstr .= ""; + //$htmlstr .= "
"; $i = 0; // Zusätzlich jede Funktion mit einer gültigen Berechtigung anzeigen @@ -291,11 +483,13 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $i++; if ($i==1) { - $htmlstr .= "Geerbte Berechtigungen aus Funktion\n"; + $htmlstr .= "

Geerbte Berechtigungen aus Funktion(en) "; } - $htmlstr .= ($i>1?", ":"").$funktion_bezeichnung->beschreibung.""; + $htmlstr .= ($i > 1 ? ", " : "").$funktion_bezeichnung->beschreibung; } } + if(!empty($funktionsrecht)) + $htmlstr .= '

'; } } elseif(isset($_REQUEST['funktion_kurzbz']) && $_REQUEST['funktion_kurzbz']!='') @@ -307,10 +501,10 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) die('Funktion existiert nicht'); $rights->loadBenutzerRollen(null, $funktion_kurzbz); - $htmlstr .= "Berechtigungen der Funktion ".$funktion->beschreibung."\n"; + $htmlstr .= "Berechtigungen der Funktion ".$funktion->beschreibung.""; } - //$htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")".$funktion_kurzbz."\n"; + //$htmlstr .= "Berechtigungen von ".$name->nachname." ".$name->vorname." (".$uid.")".$funktion_kurzbz.""; /*$htmlstr .= '      Filter: Alle | nur WaWi @@ -318,16 +512,19 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) ';*/ - $htmlstr .= "\n"; //Alternatives styling fuer Tablesorter um Platz zu sparen. - $htmlstr .= "\n"; + //////////////// + // Neue Berechtigung einfügen + //////////////// + + $htmlstr .= "
"; + $htmlstr .= ""; $htmlstr .= " - - - + + @@ -335,63 +532,52 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) - - \n"; + "; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= ""; - //Status - $htmlstr .= " \n"; + $htmlstr .= ""; //Rolle - $htmlstr .= " \n"; + $htmlstr .= " "; //Berechtigung_kurzbz - $htmlstr .= " \n"; + $htmlstr .= " "; //Art - $htmlstr .= " \n"; + $htmlstr .= " "; //Organisationseinheit - if($funktion_kurzbz!='') - $htmlstr .= " \n"; + if($funktion_kurzbz != '') + { + $htmlstr .= " "; + } else { - $htmlstr .= " \n"; + $htmlstr .= " "; } //Kostenstelle - $htmlstr .= " \n"; + $htmlstr .= " "; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; + //Negativ + $htmlstr .= " "; + + //Start + $htmlstr .= " "; + + //Ende + $htmlstr .= " "; //Anmerkung - $htmlstr .= " \n"; + $htmlstr .= " "; - $htmlstr .= " "; - $htmlstr .= "\n"; - $htmlstr .= " \n"; + $htmlstr .= " "; + $htmlstr .= ""; + $htmlstr .= "
Rolle Berechtigung ArtOrganisationseinheitKostenstelleOrganisationseinheitKostenstelle Neg Gültig ab Gültig bisInfo
 Neu: "; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " OE aus MA-FunktionOE aus MA-Funktion"; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= "
"; + + $htmlstr .= "
"; + + //////////////// + // Tabelle für bestehende Berechtigungen + //////////////// + + $htmlstr .= "
"; + + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= " + + + +
+ + +
+ "; + $htmlstr .= ""; + $htmlstr .= ""; + $htmlstr .= " + + + + + + + + + + + + + + + "; foreach($rights->berechtigungen as $b) { @@ -430,199 +659,139 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) break; default: break; } - if(isset($_POST['edit']) && $_POST['benutzerberechtigung_id']==$b->benutzerberechtigung_id) + + $htmlstr .= " "; + $heute = strtotime(date('Y-m-d')); + if ($b->ende!='' && strtotime($b->ende) < $heute) { - $htmlstr .= " \n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - - $heute = strtotime(date('Y-m-d')); - if ($b->ende!='' && strtotime($b->ende)<$heute) - { - $status="ampel_rot.png"; - $titel="ccc"; - } - elseif ($b->start!='' && strtotime($b->start)>$heute) - { - $status="ampel_gelb.png"; - $titel="bbb"; - } - else - { - $status="ampel_gruen.png"; - $titel="aaa"; - } - //Status - $htmlstr .= " \n"; - //Rolle - $htmlstr .= " \n"; - - //Berechtigung - $htmlstr .= " \n"; - - //Art - $htmlstr .= " \n"; - - //Organisationseinheit - if($funktion_kurzbz!='') - $htmlstr .= " \n"; - else - { - $htmlstr .= " \n"; - } - - //Kostenstelle - $htmlstr .= " \n"; - - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - - $htmlstr .= " "; - $htmlstr .= " "; - $htmlstr .= "\n"; - $htmlstr .= " \n"; + $titel="ccc"; + $style = 'style="border-left: 10px solid tomato; border-right: 10px solid transparent; text-align: center; vertical-align: middle"'; + } + elseif ($b->start!='' && strtotime($b->start) > $heute) + { + $titel="bbb"; + $style = 'style="border-left: 10px solid gold; border-right: 10px solid transparent; text-align: center; vertical-align: middle"'; } else { - $htmlstr .= " \n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; - $htmlstr .= "\n"; + $titel="aaa"; + $style = 'style="border-left: 10px solid LightGreen; border-right: 10px solid transparent; text-align: center; vertical-align: middle"'; + } + // Auswahlcheckbox + $htmlstr .= " "; - $heute = strtotime(date('Y-m-d')); - if ($b->ende!='' && strtotime($b->ende)<$heute) + //Rolle + $htmlstr .= " \n"; - //Rolle - $htmlstr .= " \n"; + $sel = ""; + $htmlstr .= ""; + } + $htmlstr .= " "; + $htmlstr.=""; - //Berechtigung - $htmlstr .= " \n"; + //Berechtigung + $htmlstr .= " "; - //Art - $htmlstr .= " \n"; + //Art + $htmlstr .= " "; - //Organisationseinheit - $oekey = $oe->result; - $org = new organisationseinheit(); - $org->load($b->oe_kurzbz); - $htmlstr .= " \n"; - - //Kostenstelle - $kst = new wawi_kostenstelle(); - $kst->load($b->kostenstelle_id); - if(!$kst->aktiv) - $style='style="text-decoration:line-through;"'; - else - $style=''; - $htmlstr .= " \n"; - - - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - $htmlstr .= " \n"; - - $htmlstr .= " "; - $htmlstr .= " "; - $htmlstr .= "\n"; - $htmlstr .= " \n"; + //Organisationseinheit + if($funktion_kurzbz != '') + { + $htmlstr .= " "; + } + else + { + $htmlstr .= " "; } + //Kostenstelle + $htmlstr .= " "; + + //Negativ-Checkbox + $htmlstr .= " "; + + //Gültig ab + $htmlstr .= " "; + + // Gültig bis + $htmlstr .= " "; + + //Anmerkung + $htmlstr .= " "; + + //Info + $htmlstr .= " "; + + $htmlstr .= " "; + $htmlstr .= " "; } - - $htmlstr .= "
RolleBerechtigungArtOrganisationseinheitKostenstelleNegGültig abGültig bisAnmerkungInfo
aktiv"; - - // Wenn editiert wird, zu der Zeile Springen - $htmlstr.=" - - "; - $htmlstr.="OE aus MA-Funktionnegativ?'checked="checked"':'')." onchange='markier(\"td_".$b->benutzerberechtigung_id."\")'>anmerkung))."' size='30' maxlength='256' markier(\"td_".$b->benutzerberechtigung_id."\")'>information  
"; + $htmlstr .= " ".$titel.""; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " aktiv$b->rolle_kurzbz$b->berechtigung_kurzbz"; + $htmlstr .= " ".$b->berechtigung_kurzbz.""; + $htmlstr .= " berechtigung_kurzbz] : '')."'>"; + $htmlstr .= " ".$b->art.""; + $htmlstr .= " ".$b->art.""; + $htmlstr .= " "; + $htmlstr .= " ".$org->organisationseinheittyp_kurzbz." ".$org->bezeichnung."$kst->bezeichnungnegativ?'checked="checked"':'')." onchange='markier(\"td_".$b->benutzerberechtigung_id."\")' disabled>".$b->start."".$b->ende."".$b->anmerkung."information
OE aus MA-Funktion"; + $htmlstr .= " ".($b->oe_kurzbz != '' ? $oe_arr[$b->oe_kurzbz] : '').""; + $htmlstr .= " "; + $htmlstr .= " oe_kurzbz] : '')."'>"; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " negativ?'checked="checked"':'').">"; + $htmlstr .= " "; + $htmlstr .= " ".$b->start.""; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " ".$b->ende.""; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " anmerkung))."' size='30' maxlength='256'>"; + $htmlstr .= " information"; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= "
\n"; + $htmlstr .= ""; + $htmlstr .= '
+
'; + $htmlstr .= ''; + $htmlstr .= ' + +
'; + $htmlstr .= ""; } -$htmlstr .= "
".$errorstr."
\n"; + ?> @@ -635,58 +804,19 @@ $htmlstr .= "
".$errorstr."
\n"; - - - + + + + + + - + + -

Berechtigung - Rolle - Übersicht

+

Berechtigung - Rolle -

deleteRolleBerechtigung($rolle_kurzbz, $berechtigung_kurzbz)): ?> Fehler beim Löschen: errormsg ?> - Berechtigung gelöscht! + Berechtigung gelöscht! -
- Zurück + Zurück zur Rollenübersicht -

RolleBerechtigung "":

- +

getBerechtigungen(); ?>
+ - - - + + + +
@@ -154,6 +216,8 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); getRolleBerechtigung($rolle_kurzbz); foreach($berechtigungen->result as $rolle): ?> @@ -161,7 +225,7 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); From 29809b6bf1ab0403e87e3debfdb80d7482389d6a Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 8 Nov 2022 16:15:16 +0100 Subject: [PATCH 18/52] moved Beurteilungsformulare Pruefungssenat changes to dbupdate_3.4 --- system/dbupdate_3.3.php | 28 ---------------------------- system/dbupdate_3.4.php | 2 ++ system/dbupdate_3.4/19154.php | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 28 deletions(-) create mode 100644 system/dbupdate_3.4/19154.php diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 342c9d264..3c016cc39 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6807,34 +6807,6 @@ if(!@$db->db_query("SELECT herkunftsland_code FROM bis.tbl_bisio LIMIT 1")) echo '
Spalte herkunftsland_code in bis.tbl_bisio hinzugefügt'; } -// lehre.tbl_betreuerart: add type Senatsvorsitz -if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatsvorsitz'")) -{ - if($db->db_num_rows($result)==0) - { - $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatsvorsitz', 'Senatsvorsitz kommissionelle Prüfung');"; - - if(!$db->db_query($qry)) - echo 'Betreuerart: '.$db->db_last_error().'
'; - else - echo '
Neue Betreuerart Senatsvorsitz in lehre.tbl_betreuerart hinzugefügt'; - } -} - -// lehre.tbl_betreuerart: add type Senatsprüfer -if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatspruefer'")) -{ - if($db->db_num_rows($result)==0) - { - $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'SenatsprüferIn kommissionelle Prüfung');"; - - if(!$db->db_query($qry)) - echo 'Betreuerart: '.$db->db_last_error().'
'; - else - echo '
Neue Betreuerart Senatspruefer in lehre.tbl_betreuerart hinzugefügt'; - } -} - // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index c3600d250..5c79d6c76 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -28,6 +28,8 @@ require_once('dbupdate_3.4/example2.php'); ... */ +require_once('dbupdate_3.4/19154.php'); + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4/19154.php b/system/dbupdate_3.4/19154.php new file mode 100644 index 000000000..c13a7b98e --- /dev/null +++ b/system/dbupdate_3.4/19154.php @@ -0,0 +1,30 @@ +db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatsvorsitz'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatsvorsitz', 'Senatsvorsitz kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatsvorsitz in lehre.tbl_betreuerart hinzugefügt'; + } +} + +// lehre.tbl_betreuerart: add type Senatsprüfer +if($result = $db->db_query("SELECT 1 FROM lehre.tbl_betreuerart WHERE betreuerart_kurzbz='Senatspruefer'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_betreuerart(betreuerart_kurzbz, beschreibung) VALUES('Senatspruefer', 'SenatsprüferIn kommissionelle Prüfung');"; + + if(!$db->db_query($qry)) + echo 'Betreuerart: '.$db->db_last_error().'
'; + else + echo '
Neue Betreuerart Senatspruefer in lehre.tbl_betreuerart hinzugefügt'; + } +} From f0b36610b7323f02d4dd181ddec3f2e45ab81744 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 10 Nov 2022 19:38:16 +0100 Subject: [PATCH 19/52] Projektarbeitsbeurteilung: added phrases, updated filter for uebersicht-page --- system/filtersupdate.php | 13 ++++++------- system/phrasesupdate.php | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/system/filtersupdate.php b/system/filtersupdate.php index c9c14d2a1..a3bb99a43 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -1035,7 +1035,6 @@ $filters = array( {"name": "Note"}, {"name": "ErstNachname"}, {"name": "ErstAbgeschickt"}, - {"name": "ZweitNachname"}, {"name": "ZweitAbgeschickt"} ], "filters": [] @@ -1111,12 +1110,12 @@ $filters = array( {"name": "Standardkostenstelle"} ], "filters": [ - { - "name": "Nachname", - "option": "", - "condition": "", - "operation": "" - } + { + "name": "Nachname", + "option": "", + "condition": "", + "operation": "" + } ] } ', diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 3bb133f09..8e01d29bd 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10449,6 +10449,26 @@ Any unusual occurrences ) ) ), + array( + 'app' => 'projektarbeitsbeurteilung', + 'category' => 'projektarbeitsbeurteilung', + 'phrase' => 'nebenBegutachter', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Nebenbegutachter*in', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'secondary assessor', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'anrechnung', From 763b0bb756f406df18fa1e6fa3fdd2e5c198e9d3 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 16 Nov 2022 17:19:13 +0100 Subject: [PATCH 20/52] renamed betreuerart of secondary examiner of bachelor thesis with Vorsitz from Senatspruefer to Senatsmitglied --- .../education/Projektbetreuer_model.php | 4 +-- cis/private/lehre/abgabe_lektor.php | 20 +++++++------ cis/private/lehre/abgabe_lektor_details.php | 2 +- cis/private/lehre/abgabe_student.php | 30 ++++++++++++------- include/projektbetreuer.class.php | 6 ++-- locale/de-AT/abgabetool.php | 2 +- locale/en-US/abgabetool.php | 2 +- system/dbupdate_3.4/19154.php | 10 +++---- system/phrasesupdate.php | 2 +- 9 files changed, 44 insertions(+), 34 deletions(-) diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index db9310eed..93fb656a7 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -133,7 +133,7 @@ class Projektbetreuer_model extends DB_Model ) OR /* either Zweitbegutachter of masterarbeit, or Kommissionsprüfer if Kommission */ ( - betr.betreuerart_kurzbz = 'Senatspruefer' + betr.betreuerart_kurzbz = 'Senatsmitglied' AND EXISTS ( SELECT 1 FROM lehre.tbl_projektbetreuer WHERE person_id = ? @@ -176,7 +176,7 @@ class Projektbetreuer_model extends DB_Model LEFT JOIN public.tbl_benutzer USING(person_id) WHERE projektarbeit_id = ? AND tbl_projektbetreuer.person_id = ? - AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatspruefer') + AND betreuerart_kurzbz IN ('Zweitbegutachter', 'Senatsmitglied') LIMIT 1"; $betreueruidRes = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id)); diff --git a/cis/private/lehre/abgabe_lektor.php b/cis/private/lehre/abgabe_lektor.php index 6b087d256..3d20c8a7e 100644 --- a/cis/private/lehre/abgabe_lektor.php +++ b/cis/private/lehre/abgabe_lektor.php @@ -61,8 +61,10 @@ $sql_query = "SELECT FROM (SELECT tbl_person.vorname, tbl_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz, tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, - tbl_projektbetreuer.betreuerart_kurzbz, tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz - FROM lehre.tbl_projektarbeit LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id) + tbl_projektbetreuer.betreuerart_kurzbz, tbl_betreuerart.beschreibung AS betreuerart_beschreibung, tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz + FROM lehre.tbl_projektarbeit + LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id) + LEFT JOIN lehre.tbl_betreuerart using(betreuerart_kurzbz) LEFT JOIN public.tbl_benutzer on(uid=student_uid) LEFT JOIN public.tbl_student on(public.tbl_benutzer.uid=public.tbl_student.student_uid) LEFT JOIN public.tbl_person on(tbl_benutzer.person_id=tbl_person.person_id) @@ -75,7 +77,7 @@ $sql_query = "SELECT WHERE public.tbl_benutzer.person_id=lehre.tbl_projektbetreuer.person_id AND public.tbl_benutzer.uid=".$db->db_add_param($getuid).") ".($showall?'':' AND public.tbl_benutzer.aktiv AND lehre.tbl_projektarbeit.note IS NULL ')." - AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatspruefer') + AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatsmitglied') ORDER BY tbl_projektarbeit.projektarbeit_id, betreuerart_kurzbz desc) as xy ORDER BY nachname"; @@ -111,7 +113,7 @@ else $htmlstr .= "
\n"; $htmlstr .= " \n"; $htmlstr .= " \n"; - $htmlstr .= " \n"; + $htmlstr .= " \n"; $htmlstr .= " \n"; $i++; } @@ -126,11 +128,11 @@ echo ' '.$p->t('abgabetool/abgabetool').' - - - - - + + + + + - + - + - +"; + +} + if(isset($_POST['schick'])) { if($rechte->isBerechtigt('basis/berechtigung', null, 'suid')) @@ -418,9 +482,10 @@ if (!$b = new berechtigung()) $b->getRollen(); foreach($b->result as $berechtigung) { - $rolle_arr[] = $berechtigung->rolle_kurzbz; + $rolle_arr[$berechtigung->rolle_kurzbz] = $berechtigung->beschreibung; } -sort($rolle_arr); +ksort($rolle_arr, SORT_STRING | SORT_FLAG_CASE); + $b->getBerechtigungen(); foreach($b->result as $berechtigung) { @@ -592,10 +657,10 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) //Rolle $htmlstr .= " "; @@ -683,8 +748,8 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " - - + + @@ -742,22 +807,32 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) //Rolle $htmlstr .= " "; @@ -827,13 +902,13 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " "; //Gültig ab - $htmlstr .= " "; // Gültig bis - $htmlstr .= " "; @@ -842,7 +917,8 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " "; - $htmlstr .= " "; $htmlstr .= " "; } $htmlstr .= "
art ?> beschreibung ?> - + entfernen ".strtoupper($row->typ.$row->kurzbz)."".$db->convert_html_chars($row->studiensemester_kurzbz)."".$db->convert_html_chars($row->titel)."".$db->convert_html_chars($row->betreuerart_kurzbz)."".($row->betreuerart_beschreibung == null ? $db->convert_html_chars($row->betreuerart_kurzbz) : $db->convert_html_chars($row->betreuerart_beschreibung))."
RolleBerechtigungRolleBerechtigung Art Organisationseinheit Kostenstelle"; - $htmlstr .= " "; $htmlstr .= " "; - for ($i = 0; $i < sizeof($rolle_arr); $i++) + foreach ($rolle_arr AS $key => $value) { - if ($b->rolle_kurzbz == $rolle_arr[$i]) + if ($b->rolle_kurzbz == $key) { - $sel = " selected"; + $sel = " selected='selected'"; } else $sel = ""; - $htmlstr .= ""; + $htmlstr .= ""; } $htmlstr .= " "; if ($b->rolle_kurzbz != '') { - $htmlstr .= " "; + $htmlstr .= " "; } $htmlstr.=""; + $htmlstr .= " "; $htmlstr .= " ".$b->start.""; $htmlstr .= " "; $htmlstr .= " "; + $htmlstr .= " "; $htmlstr .= " ".$b->ende.""; $htmlstr .= " "; $htmlstr .= " "; $htmlstr .= " anmerkung))."' data-toggle='tooltip' @@ -856,36 +932,54 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) $htmlstr .= " + data-placement='auto'> "; - $htmlstr .= " "; - $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " "; + $htmlstr .= " "; $htmlstr .= "
"; $htmlstr .= '
- -
- -
- + +
+
+ +
+ +
+ +
-
'; $htmlstr .= ""; - + $htmlstr .= "
















"; } ?> @@ -910,7 +1004,203 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) ?> - + + + + + + + + + + + + + +

+ + + + + From 43f613b0bc286bf9c85981727fe187d7e3890447 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 5 Apr 2023 13:32:32 +0200 Subject: [PATCH 48/52] =?UTF-8?q?=C3=84nderung=20FHStG=20auf=20FHG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rdf/diplomasupplement.xml.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rdf/diplomasupplement.xml.php b/rdf/diplomasupplement.xml.php index 47da798b7..4f19566d2 100644 --- a/rdf/diplomasupplement.xml.php +++ b/rdf/diplomasupplement.xml.php @@ -257,7 +257,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") if($row->typ=='d') { echo ' UNESCO ISCED 7'; - echo ' '; + echo ' '; echo ' '; echo ' '; echo ' '; @@ -269,7 +269,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") elseif($row->typ=='m') { echo ' UNESCO ISCED 7'; - echo ' '; + echo ' '; echo ' '; echo ' '; echo ' '; @@ -281,7 +281,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") elseif($row->typ=='b') { echo ' UNESCO ISCED 6'; - echo ' '; + echo ' '; echo ' '; echo ' '; echo ' '; @@ -299,8 +299,8 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") elseif($row->typ=='l' || $row->typ=='k' || $row->typ=='e') { echo ' UNESCO ISCED 7'; - echo ' Lehrgang zur Weiterbildung nach §9 FHStG idgF.'; - echo ' Certificate Program for Further Education subjected to § 9 FHStG'; + echo ' Lehrgang zur Weiterbildung nach §9 FHG idgF.'; + echo ' Certificate Program for Further Education subjected to § 9 FHG'; echo ' '; echo ' '; echo ' '; From 326b53544a47dcc8e0fc5a61eb40f94023cc47b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 5 Apr 2023 16:28:19 +0200 Subject: [PATCH 49/52] =?UTF-8?q?=C3=9Cbernahme=20Optimierung=20der=20Anwe?= =?UTF-8?q?senheitsabfrage=20von=20BFI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/anwesenheit.class.php | 1373 +++++++++++++++++---------------- 1 file changed, 714 insertions(+), 659 deletions(-) diff --git a/include/anwesenheit.class.php b/include/anwesenheit.class.php index 3365e6d68..2b8389c79 100644 --- a/include/anwesenheit.class.php +++ b/include/anwesenheit.class.php @@ -1,659 +1,714 @@ - - */ -/** - * Klasse zur Verwaltung der Anwesenheiten der Studierenden - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); -require_once(dirname(__FILE__).'/../config/global.config.inc.php'); - -class anwesenheit extends basis_db -{ - public $new=true; // boolean - public $result = array(); - - public $anwesenheit_id; // serial - public $uid; // varchar(32) - public $einheiten; // numeric(3,1) - public $datum; // date - public $anwesend; // boolean - public $lehreinheit_id; // bigint - public $anmerkung; // varchar(256) - - /** - * Konstruktor - * @param $anwesenheit_id ID des Datensatzes der geladen werden soll (Default=null) - */ - public function __construct($anwesenheit_id=null) - { - parent::__construct(); - - if(!is_null($anwesenheit_id)) - $this->load($anwesenheit_id); - } - - /** - * Laedt den Datensatz mit der ID $anwesenheit_id - * @param $anwesenheit_id ID des Datensatzes - * @return true wenn ok, false im Fehlerfall - */ - public function load($anwesenheit_id) - { - //Pruefen ob anwesenheit_id eine gueltige Zahl ist - if(!is_numeric($anwesenheit_id) || $anwesenheit_id == '') - { - $this->errormsg = 'Anwesenheit_id muss eine Zahl sein'; - return false; - } - - //Daten aus der Datenbank lesen - $qry = "SELECT * FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER, false); - - if(!$this->db_query($qry)) - { - $this->errormsg = 'Fehler bei einer Datenbankabfrage'; - return false; - } - - if($row = $this->db_fetch_object()) - { - $this->anwesenheit_id = $row->anwesenheit_id; - $this->uid = $row->uid; - $this->einheiten = $row->einheiten; - $this->datum = $row->datum; - $this->anwesend = $this->db_parse_bool($row->anwesend); - $this->lehreinheit_id = $row->lehreinheit_id; - $this->anmerkung = $row->anmerkung; - $this->new=false; - } - else - { - $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; - return false; - } - - return true; - } - - /** - * Prueft die Variablen auf Gueltigkeit - * @return true wenn ok, false im Fehlerfall - */ - protected function validate() - { - //Zahlenfelder pruefen - if(!is_numeric($this->anwesenheit_id) && $this->anwesenheit_id!='') - { - $this->errormsg='anwesenheit_id enthaelt ungueltige Zeichen'; - return false; - } - - //Gesamtlaenge pruefen - if(mb_strlen($this->anmerkung)>255) - { - $this->errormsg = 'Anmerkung darf nicht länger als 255 Zeichen sein'; - return false; - } - - $this->errormsg = ''; - return true; - } - - /** - * Speichert den aktuellen Datensatz in die Datenbank - * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt - * andernfalls wird der bestehende Datensatz aktualisiert - * @return true wenn ok, false im Fehlerfall - */ - public function save() - { - //Variablen pruefen - if(!$this->validate()) - return false; - - if($this->new) - { - //Neuen Datensatz einfuegen - $qry='BEGIN;INSERT INTO campus.tbl_anwesenheit (uid, einheiten, anwesend, datum, lehreinheit_id, anmerkung) VALUES('. - $this->db_add_param($this->uid).', '. - $this->db_add_param($this->einheiten).', '. - $this->db_add_param($this->anwesend, FHC_BOOLEAN).', '. - $this->db_add_param($this->datum).', '. - $this->db_add_param($this->lehreinheit_id).', '. - $this->db_add_param($this->anmerkung).');'; - } - else - { - //Pruefen ob id eine gueltige Zahl ist - if(!is_numeric($this->anwesenheit_id)) - { - $this->errormsg = 'anwesenheit_id muss eine gueltige Zahl sein'; - return false; - } - $qry='UPDATE campus.tbl_anwesenheit SET'. - ' uid='.$this->db_add_param($this->uid).', '. - ' einheiten='.$this->db_add_param($this->einheiten).', '. - ' anwesend='.$this->db_add_param($this->anwesend,FHC_BOOLEAN).', '. - ' datum='.$this->db_add_param($this->datum).', '. - ' lehreinheit_id='.$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '. - ' anmerkung='.$this->db_add_param($this->anmerkung).' '. - 'WHERE anwesenheit_id='.$this->db_add_param($this->anwesenheit_id, FHC_INTEGER, false).';'; - } - - if($this->db_query($qry)) - { - if($this->new) - { - //naechste ID aus der Sequence holen - $qry="SELECT currval('campus.seq_anwesenheit_anwesenheit_id') as id;"; - if($this->db_query($qry)) - { - if($row = $this->db_fetch_object()) - { - $this->anwesenheit_id = $row->id; - $this->db_query('COMMIT'); - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = "Fehler beim Auslesen der Sequence"; - return false; - } - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - - } - else - { - $this->errormsg = 'Fehler beim Speichern des Datensatzes'; - return false; - } - return $this->anwesenheit_id; - } - - /** - * Laedt die Anwesenheiten einer Lehreinheit/Datum - * @param $lehreinheit_id - * @param $datum - * @return boolean true wenn ok, false im Fehlerfall - */ - public function getAnwesenheitLehreinheit($lehreinheit_id, $datum=null) - { - $qry = "SELECT * FROM campus.tbl_anwesenheit - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); - - if(!is_null($datum)) - $qry.=" AND datum=".$this->db_add_param($datum); - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new anwesenheit(); - - $obj->anwesenheit_id = $row->anwesenheit_id; - $obj->uid = $row->uid; - $obj->einheiten = $row->einheiten; - $obj->datum = $row->datum; - $obj->anwesend = $this->db_parse_bool($row->anwesend); - $obj->lehreinheit_id = $row->lehreinheit_id; - $obj->anmerkung = $row->anmerkung; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - public function loadAnwesenheitMitarbeiter($mitarbeiter_uid, $lehreinheit_id) - { - $qry = "SELECT - datum, a.einheiten, - (SELECT true FROM campus.tbl_anwesenheit - WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." AND datum=a.datum LIMIT 1) as anwesend, - (SELECT stundensatz FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid).") as stundensatz - FROM - (SELECT datum, count(distinct stunde) as einheiten FROM lehre.tbl_stundenplan - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." - GROUP by datum) as a - "; - - if($result = $this->db_query($qry)) - { - $this->anzahl_termine=0; - $this->anzahl_anwesend=0; - $this->anwesenheit = array(); - - while($row = $this->db_fetch_object($result)) - { - $anwesend = $this->db_parse_bool($row->anwesend); - $key = $lehreinheit_id.'/'.$row->datum; - - $this->anwesenheit[$key]['anwesend'] = ($anwesend?true:false); - $this->anwesenheit[$key]['lehreinheit_id'] = $lehreinheit_id; - $this->anwesenheit[$key]['datum']=$row->datum; - $this->anwesenheit[$key]['einheiten']=$row->einheiten; - $this->anwesenheit[$key]['stundensatz']=$row->stundensatz; - - $this->anzahl_termine++; - if($anwesend) - $this->anzahl_anwesend++; - } - if($this->anzahl_termine>0) - { - $this->prozent_anwesend=$this->anzahl_anwesend/$this->anzahl_termine*100; - } - return true; - } - else - { - $this->errormsg='Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Liefert für Student und Einheit wieviel Einheiten als anwesend/abwesend - * eingetragen sind. - * - * @param string $uid - * @param int $lehreinheit_id - * @param bool $anwesend - * @return int - */ - public function getAnwesenheit($uid, $lehreinheit_id, $anwesend = FALSE) - { - $qry = 'SELECT sum(einheiten) AS einheiten ' - . 'FROM campus.tbl_anwesenheit ' - . 'WHERE uid = ' . $this->db_add_param($uid) - . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id, FHC_INTEGER) - . ' AND anwesend = ' . $this->db_add_param($anwesend, FHC_BOOLEAN); - - $result = $this->db_query($qry); - $row = $this->db_fetch_object($result); - - return $row->einheiten; - } - - /** - * Liefert die Anwesenheiten/Abwesenheiten eines Studenten bei einer LV - * - * @param string $student_uid - * @param int $lehrveranstaltung_id - * @param string $studiensemester_kurzbz - * @param boolean $anwesend - * @return boolean - */ - public function getAnwesenheitLehrveranstaltung($student_uid, $lehrveranstaltung_id, $studiensemester_kurzbz, $anwesend=false) - { - $qry = 'SELECT - distinct tbl_anwesenheit.* - FROM - campus.tbl_anwesenheit - JOIN campus.vw_student_lehrveranstaltung USING(uid) - WHERE - uid='.$this->db_add_param($student_uid).' - AND vw_student_lehrveranstaltung.lehreinheit_id=tbl_anwesenheit.lehreinheit_id - AND lehrveranstaltung_id='.$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER).' - AND studiensemester_kurzbz='.$this->db_add_param($studiensemester_kurzbz).' - AND anwesend=' . $this->db_add_param($anwesend, FHC_BOOLEAN).' - ORDER BY datum'; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new anwesenheit(); - - $obj->anwesenheit_id = $row->anwesenheit_id; - $obj->uid = $row->uid; - $obj->einheiten = $row->einheiten; - $obj->datum = $row->datum; - $obj->anwesend = $this->db_parse_bool($row->anwesend); - $obj->lehreinheit_id = $row->lehreinheit_id; - $obj->anmerkung = $row->anmerkung; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Liefert die Termine an denen eine Abwesenheit eingetragen ist. - * - * @param string $uid - * @param int $lehreinheit_id - * @return array - */ - public function getAbwesendTermine($uid, $lehreinheit_id) - { - - $qry = 'SELECT datum, einheiten ' - . 'FROM campus.tbl_anwesenheit ' - . 'WHERE uid = ' . $this->db_add_param($uid) - . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id) - . ' AND anwesend = FALSE ' - . 'ORDER BY datum'; - - $result = $this->db_query($qry); - $ret_obj = array(); - - while($row = $this->db_fetch_object($result)) - { - $ret_obj[] = $row; - } - - return $ret_obj; - } - - public function getAmpel($anwesenheit_relativ) - { - - if($anwesenheit_relativ < FAS_ANWESENHEIT_ROT) - { - return 'red'; - } - elseif($anwesenheit_relativ < FAS_ANWESENHEIT_GELB) - { - return 'yellow'; - } - else - { - return 'green'; - } - } - - /** - * Prueft ob Anwesenheiten erfasst wurden - * @param $lehreinheit_id ID der Lehreinheit - * @param $datum Datum - * @param $uid UID des Studierenden - * @return boolean true wenn vorhanden, sonst false - */ - public function AnwesenheitExists($lehreinheit_id, $datum, $uid=null) - { - $qry = "SELECT - 1 - FROM - campus.tbl_anwesenheit - WHERE - anwesend=true - AND lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum); - - if($uid!='') - $qry.=" AND uid=".$this->db_add_param($uid); - - if($result = $this->db_query($qry)) - { - if($this->db_num_rows($result)>0) - return true; - else - return false; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Prueft ob Anwesenheiten erfasst wurden - * @param $lehreinheit_id ID der Lehreinheit - * @param $datum Datum - * @param $uid UID des Studierenden - * @return boolean true wenn vorhanden, sonst false - */ - public function AnwesenheitEntryExists($lehreinheit_id, $datum, $uid=null) - { - $qry = "SELECT - 1 - FROM - campus.tbl_anwesenheit - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum)." - AND uid=".$this->db_add_param($uid); - - if($result = $this->db_query($qry)) - { - if($this->db_num_rows($result)>0) - return true; - else - return false; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Anwesenheiten in Prozent von Studierenden bei Lehrveranstaltungen - * Wenn die StudentUID uebergeben wird, werden alle Lehrveranstaltungen zu denen der Studierenden zugeteilt ist inkl Prozent der Anwesenheit - * Wenn die LehrveranstaltungID uebergeben wird, werden alle Studierenden geholt die zugeteilt sind inkl Prozent der Anwesenheit - * Es werden pro Student die Anwesenheiten berechnet aufgrund der Lehreinheit zu der sie zugeordnet sind - * @param $studiensemester_kurzbz - * @param $student_uid - * @param $lehrveranstaltung_id - * @return boolean true wenn ok, false im fehlerfall - */ - public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null) - { - $qry = "SELECT lehrveranstaltung_id, bezeichnung, vorname, wahlname, nachname,uid, sum(anwesend) as anwesend, sum(nichtanwesend) as nichtanwesend, sum(gesamtstunden) as gesamtstunden FROM ( - SELECT - lehrveranstaltung_id, bezeichnung, vorname, wahlname, nachname, uid, - ( - SELECT - sum(einheiten) - FROM - campus.tbl_anwesenheit - WHERE - lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id - AND uid=vw_student_lehrveranstaltung.uid - AND anwesend - ) as anwesend, - ( - SELECT - sum(einheiten) - FROM - campus.tbl_anwesenheit - WHERE - lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id - AND uid=vw_student_lehrveranstaltung.uid - AND NOT anwesend - ) as nichtanwesend, - ( - SELECT count(*) anzahl FROM - (SELECT datum, stunde FROM campus.vw_stundenplan - WHERE lehreinheit_id=vw_student_lehrveranstaltung.lehreinheit_id - AND (vw_stundenplan.titel not like '%Nebenprüfung%' OR vw_stundenplan.titel is null) GROUP BY datum, stunde) as a - ) as gesamtstunden - FROM - campus.vw_student_lehrveranstaltung - JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) - WHERE - studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); - - if(!is_null($lehrveranstaltung_id)) - $qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id); - if(!is_null($student_uid)) - $qry.=" AND uid=".$this->db_add_param($student_uid); - - $qry.=") as b GROUP BY lehrveranstaltung_id, bezeichnung, vorname, wahlname, nachname, uid"; - - if($lehrveranstaltung_id!='') - $qry.=" order by nachname, vorname "; - elseif($student_uid!='') - $qry.=" order by bezeichnung"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new stdClass(); - $obj->bezeichnung = $row->bezeichnung; - $obj->anwesend = $row->anwesend; - $obj->nichtanwesend = $row->nichtanwesend; - $obj->gesamtstunden = $row->gesamtstunden; - - $obj->erfassteanwesenheit = $row->anwesend+$row->nichtanwesend; - if($row->gesamtstunden=='' || $obj->erfassteanwesenheit=='') - $obj->prozent=100; - else - $obj->prozent = number_format(100-(100/$obj->gesamtstunden*$row->nichtanwesend),2); - $obj->vorname = $row->vorname; - $obj->wahlname = $row->wahlname; - $obj->nachname = $row->nachname; - $obj->uid = $row->uid; - $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg='Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Aendert die bestehende Anwesenheit - * @param $lehreinheit_id ID der Lehreinheit - * @param $datum Datum - * @param $uid UID des Studierenden - * @return boolean true ok, sonst false - */ - public function AnwesenheitToggle($lehreinheit_id, $datum, $uid) - { - if($this->AnwesenheitEntryExists($lehreinheit_id, $datum, $uid)) - { - $qry = "UPDATE - campus.tbl_anwesenheit - SET anwesend= NOT anwesend - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum)." - AND uid=".$this->db_add_param($uid); - - if($result = $this->db_query($qry)) - { - if($this->db_affected_rows($result)>0) - return true; - else - { - $this->errormsg='Anwesenheitsliste wurde noch nicht erfasst'; - return false; - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - else - { - // Anwesenheitsliste wurde noch nicht erfasst. Eintrag neu anlegen - - // Einheiten ermitteln - $qry = "SELECT - distinct stunde - FROM - lehre.tbl_stundenplan - WHERE - lehreinheit_id=".$this->db_add_param($lehreinheit_id)." - AND datum=".$this->db_add_param($datum); - - if($result = $this->db_query($qry)) - { - if($anzahl = $this->db_num_rows($result)) - { - $einheiten = $anzahl; - } - } - if($einheiten>0) - { - $this->lehreinheit_id=$lehreinheit_id; - $this->datum = $datum; - $this->uid = $uid; - $this->anwesend=true; - $this->new=true; - $this->einheiten=$einheiten; - if($this->save()) - return true; - else - { - $this->errormsg = 'Fehler beim Speichern der Daten'; - return true; - } - } - else - { - $this->errormsg = 'Anzahl der Einheiten fuer diesen Tag konnte nicht ermittelt werden'; - return false; - } - } - } - - /** - * Loescht eine Anwesenheit - * @param anwesenheit_id integer ID der Anwesenheit. - * @return boolean true wenn ok , false im fehlerfall - */ - public function delete($anwesenheit_id) - { - $qry = "DELETE FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER).";"; - - if($this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Löschen der Anwesenheit'; - return false; - } - } -} + + */ +/** + * Klasse zur Verwaltung der Anwesenheiten der Studierenden + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/../config/global.config.inc.php'); + +class anwesenheit extends basis_db +{ + public $new=true; // boolean + public $result = array(); + + public $anwesenheit_id; // serial + public $uid; // varchar(32) + public $einheiten; // numeric(3,1) + public $datum; // date + public $anwesend; // boolean + public $lehreinheit_id; // bigint + public $anmerkung; // varchar(256) + + /** + * Konstruktor + * @param $anwesenheit_id ID des Datensatzes der geladen werden soll (Default=null) + */ + public function __construct($anwesenheit_id=null) + { + parent::__construct(); + + if(!is_null($anwesenheit_id)) + $this->load($anwesenheit_id); + } + + /** + * Laedt den Datensatz mit der ID $anwesenheit_id + * @param $anwesenheit_id ID des Datensatzes + * @return true wenn ok, false im Fehlerfall + */ + public function load($anwesenheit_id) + { + //Pruefen ob anwesenheit_id eine gueltige Zahl ist + if(!is_numeric($anwesenheit_id) || $anwesenheit_id == '') + { + $this->errormsg = 'Anwesenheit_id muss eine Zahl sein'; + return false; + } + + //Daten aus der Datenbank lesen + $qry = "SELECT * FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER, false); + + if(!$this->db_query($qry)) + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + + if($row = $this->db_fetch_object()) + { + $this->anwesenheit_id = $row->anwesenheit_id; + $this->uid = $row->uid; + $this->einheiten = $row->einheiten; + $this->datum = $row->datum; + $this->anwesend = $this->db_parse_bool($row->anwesend); + $this->lehreinheit_id = $row->lehreinheit_id; + $this->anmerkung = $row->anmerkung; + $this->new=false; + } + else + { + $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; + return false; + } + + return true; + } + + /** + * Prueft die Variablen auf Gueltigkeit + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + //Zahlenfelder pruefen + if(!is_numeric($this->anwesenheit_id) && $this->anwesenheit_id!='') + { + $this->errormsg='anwesenheit_id enthaelt ungueltige Zeichen'; + return false; + } + + //Gesamtlaenge pruefen + if(mb_strlen($this->anmerkung)>255) + { + $this->errormsg = 'Anmerkung darf nicht länger als 255 Zeichen sein'; + return false; + } + + $this->errormsg = ''; + return true; + } + + /** + * Speichert den aktuellen Datensatz in die Datenbank + * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt + * andernfalls wird der bestehende Datensatz aktualisiert + * @return true wenn ok, false im Fehlerfall + */ + public function save() + { + //Variablen pruefen + if(!$this->validate()) + return false; + + if($this->new) + { + //Neuen Datensatz einfuegen + $qry='BEGIN;INSERT INTO campus.tbl_anwesenheit (uid, einheiten, anwesend, datum, lehreinheit_id, anmerkung) VALUES('. + $this->db_add_param($this->uid).', '. + $this->db_add_param($this->einheiten).', '. + $this->db_add_param($this->anwesend, FHC_BOOLEAN).', '. + $this->db_add_param($this->datum).', '. + $this->db_add_param($this->lehreinheit_id).', '. + $this->db_add_param($this->anmerkung).');'; + } + else + { + //Pruefen ob id eine gueltige Zahl ist + if(!is_numeric($this->anwesenheit_id)) + { + $this->errormsg = 'anwesenheit_id muss eine gueltige Zahl sein'; + return false; + } + $qry='UPDATE campus.tbl_anwesenheit SET'. + ' uid='.$this->db_add_param($this->uid).', '. + ' einheiten='.$this->db_add_param($this->einheiten).', '. + ' anwesend='.$this->db_add_param($this->anwesend,FHC_BOOLEAN).', '. + ' datum='.$this->db_add_param($this->datum).', '. + ' lehreinheit_id='.$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '. + ' anmerkung='.$this->db_add_param($this->anmerkung).' '. + 'WHERE anwesenheit_id='.$this->db_add_param($this->anwesenheit_id, FHC_INTEGER, false).';'; + } + + if($this->db_query($qry)) + { + if($this->new) + { + //naechste ID aus der Sequence holen + $qry="SELECT currval('campus.seq_anwesenheit_anwesenheit_id') as id;"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->anwesenheit_id = $row->id; + $this->db_query('COMMIT'); + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = "Fehler beim Auslesen der Sequence"; + return false; + } + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + + } + else + { + $this->errormsg = 'Fehler beim Speichern des Datensatzes'; + return false; + } + return $this->anwesenheit_id; + } + + /** + * Laedt die Anwesenheiten einer Lehreinheit/Datum + * @param $lehreinheit_id + * @param $datum + * @return boolean true wenn ok, false im Fehlerfall + */ + public function getAnwesenheitLehreinheit($lehreinheit_id, $datum=null) + { + $qry = "SELECT * FROM campus.tbl_anwesenheit + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); + + if(!is_null($datum)) + $qry.=" AND datum=".$this->db_add_param($datum); + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new anwesenheit(); + + $obj->anwesenheit_id = $row->anwesenheit_id; + $obj->uid = $row->uid; + $obj->einheiten = $row->einheiten; + $obj->datum = $row->datum; + $obj->anwesend = $this->db_parse_bool($row->anwesend); + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->anmerkung = $row->anmerkung; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + public function loadAnwesenheitMitarbeiter($mitarbeiter_uid, $lehreinheit_id) + { + $qry = "SELECT + datum, a.einheiten, + (SELECT true FROM campus.tbl_anwesenheit + WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." AND datum=a.datum LIMIT 1) as anwesend, + (SELECT stundensatz FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid).") as stundensatz + FROM + (SELECT datum, count(distinct stunde) as einheiten FROM lehre.tbl_stundenplan + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." + GROUP by datum) as a + "; + + if($result = $this->db_query($qry)) + { + $this->anzahl_termine=0; + $this->anzahl_anwesend=0; + $this->anwesenheit = array(); + + while($row = $this->db_fetch_object($result)) + { + $anwesend = $this->db_parse_bool($row->anwesend); + $key = $lehreinheit_id.'/'.$row->datum; + + $this->anwesenheit[$key]['anwesend'] = ($anwesend?true:false); + $this->anwesenheit[$key]['lehreinheit_id'] = $lehreinheit_id; + $this->anwesenheit[$key]['datum']=$row->datum; + $this->anwesenheit[$key]['einheiten']=$row->einheiten; + $this->anwesenheit[$key]['stundensatz']=$row->stundensatz; + + $this->anzahl_termine++; + if($anwesend) + $this->anzahl_anwesend++; + } + if($this->anzahl_termine>0) + { + $this->prozent_anwesend=$this->anzahl_anwesend/$this->anzahl_termine*100; + } + return true; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Liefert für Student und Einheit wieviel Einheiten als anwesend/abwesend + * eingetragen sind. + * + * @param string $uid + * @param int $lehreinheit_id + * @param bool $anwesend + * @return int + */ + public function getAnwesenheit($uid, $lehreinheit_id, $anwesend = FALSE) + { + $qry = 'SELECT sum(einheiten) AS einheiten ' + . 'FROM campus.tbl_anwesenheit ' + . 'WHERE uid = ' . $this->db_add_param($uid) + . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id, FHC_INTEGER) + . ' AND anwesend = ' . $this->db_add_param($anwesend, FHC_BOOLEAN); + + $result = $this->db_query($qry); + $row = $this->db_fetch_object($result); + + return $row->einheiten; + } + + /** + * Liefert die Anwesenheiten/Abwesenheiten eines Studenten bei einer LV + * + * @param string $student_uid + * @param int $lehrveranstaltung_id + * @param string $studiensemester_kurzbz + * @param boolean $anwesend + * @return boolean + */ + public function getAnwesenheitLehrveranstaltung($student_uid, $lehrveranstaltung_id, $studiensemester_kurzbz, $anwesend=false) + { + $qry = 'SELECT + distinct tbl_anwesenheit.* + FROM + campus.tbl_anwesenheit + JOIN campus.vw_student_lehrveranstaltung USING(uid) + WHERE + uid='.$this->db_add_param($student_uid).' + AND vw_student_lehrveranstaltung.lehreinheit_id=tbl_anwesenheit.lehreinheit_id + AND lehrveranstaltung_id='.$this->db_add_param($lehrveranstaltung_id, FHC_INTEGER).' + AND studiensemester_kurzbz='.$this->db_add_param($studiensemester_kurzbz).' + AND anwesend=' . $this->db_add_param($anwesend, FHC_BOOLEAN).' + ORDER BY datum'; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new anwesenheit(); + + $obj->anwesenheit_id = $row->anwesenheit_id; + $obj->uid = $row->uid; + $obj->einheiten = $row->einheiten; + $obj->datum = $row->datum; + $obj->anwesend = $this->db_parse_bool($row->anwesend); + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->anmerkung = $row->anmerkung; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Liefert die Termine an denen eine Abwesenheit eingetragen ist. + * + * @param string $uid + * @param int $lehreinheit_id + * @return array + */ + public function getAbwesendTermine($uid, $lehreinheit_id) + { + + $qry = 'SELECT datum, einheiten ' + . 'FROM campus.tbl_anwesenheit ' + . 'WHERE uid = ' . $this->db_add_param($uid) + . ' AND lehreinheit_id = ' . $this->db_add_param($lehreinheit_id) + . ' AND anwesend = FALSE ' + . 'ORDER BY datum'; + + $result = $this->db_query($qry); + $ret_obj = array(); + + while($row = $this->db_fetch_object($result)) + { + $ret_obj[] = $row; + } + + return $ret_obj; + } + + public function getAmpel($anwesenheit_relativ) + { + + if($anwesenheit_relativ < FAS_ANWESENHEIT_ROT) + { + return 'red'; + } + elseif($anwesenheit_relativ < FAS_ANWESENHEIT_GELB) + { + return 'yellow'; + } + else + { + return 'green'; + } + } + + /** + * Prueft ob Anwesenheiten erfasst wurden + * @param $lehreinheit_id ID der Lehreinheit + * @param $datum Datum + * @param $uid UID des Studierenden + * @return boolean true wenn vorhanden, sonst false + */ + public function AnwesenheitExists($lehreinheit_id, $datum, $uid=null) + { + $qry = "SELECT + 1 + FROM + campus.tbl_anwesenheit + WHERE + anwesend=true + AND lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum); + + if($uid!='') + $qry.=" AND uid=".$this->db_add_param($uid); + + if($result = $this->db_query($qry)) + { + if($this->db_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Prueft ob Anwesenheiten erfasst wurden + * @param $lehreinheit_id ID der Lehreinheit + * @param $datum Datum + * @param $uid UID des Studierenden + * @return boolean true wenn vorhanden, sonst false + */ + public function AnwesenheitEntryExists($lehreinheit_id, $datum, $uid=null) + { + $qry = "SELECT + 1 + FROM + campus.tbl_anwesenheit + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum)." + AND uid=".$this->db_add_param($uid); + + if($result = $this->db_query($qry)) + { + if($this->db_num_rows($result)>0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Anwesenheiten in Prozent von Studierenden bei Lehrveranstaltungen + * Wenn die StudentUID uebergeben wird, werden alle Lehrveranstaltungen zu denen der Studierenden zugeteilt ist inkl Prozent der Anwesenheit + * Wenn die LehrveranstaltungID uebergeben wird, werden alle Studierenden geholt die zugeteilt sind inkl Prozent der Anwesenheit + * Es werden pro Student die Anwesenheiten berechnet aufgrund der Lehreinheit zu der sie zugeordnet sind + * @param $studiensemester_kurzbz + * @param $student_uid + * @param $lehrveranstaltung_id + * @return boolean true wenn ok, false im fehlerfall + */ + public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid=null, $lehrveranstaltung_id=null) + { + $qry = "SELECT + lehrveranstaltung_id, vorname, nachname, wahlname, student_uid as uid, bezeichnung, + gesamt as gesamtstunden, anwesend, nichtanwesend, trunc(100-(nichtanwesend/gesamt)*100,2) as prozent + FROM + ( + SELECT + vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid, + count(stundenplan_id) as gesamt, + case when anwesend.summe is null then 0 else anwesend.summe end as anwesend, + case when nichtanwesend.summe is null then 0 else nichtanwesend.summe end as nichtanwesend + FROM + ( + SELECT + sum(stundenplan_id) as stundenplan_id, datum, stunde, lehrveranstaltung_id, + bezeichnung, studiensemester_kurzbz, studiengang_kz, + TRIM( + CASE WHEN stp.gruppe_kurzbz is not null then stp.gruppe_kurzbz + else stp.semester||(case when verband is null then '' else stp.verband end)||(case when stp.gruppe is null then '' else stp.gruppe end) end) as gruppe + FROM + lehre.tbl_lehrveranstaltung lv + JOIN lehre.tbl_lehreinheit le using (lehrveranstaltung_id) + JOIN lehre.tbl_stundenplan stp using (lehreinheit_id,studiengang_kz) + WHERE + studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + AND (titel not like '%Nebenprüfung%' OR titel is null) + + group by datum, stunde, lehrveranstaltung_id, bezeichnung, studiensemester_kurzbz, studiengang_kz, stp.gruppe_kurzbz, stp.semester, stp.verband, stp.gruppe + )x + JOIN ( + SELECT semester::text as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz + FROM + public.tbl_studentlehrverband + WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + UNION + + SELECT semester||verband as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz + FROM + public.tbl_studentlehrverband + WHERE + studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + UNION + + SELECT semester||verband||gruppe as gruppe, public.tbl_studentlehrverband.studiensemester_kurzbz, student_uid, studiengang_kz + FROM + public.tbl_studentlehrverband + WHERE + studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + UNION + + SELECT gruppe_kurzbz as gruppe, public.tbl_benutzergruppe.studiensemester_kurzbz, uid as student_uid, studiengang_kz + FROM + public.tbl_benutzergruppe + JOIN + public.tbl_gruppe using (gruppe_kurzbz) + WHERE studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + + )a using (gruppe, studiensemester_kurzbz, studiengang_kz) + JOIN public.tbl_benutzer b on b.uid = student_uid + JOIN public.tbl_person p using(person_id) + LEFT JOIN( + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe + FROM + campus.tbl_anwesenheit a + JOIN lehre.tbl_lehreinheit le using (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + WHERE + anwesend = true AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + GROUP BY + lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz + )anwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + LEFT JOIN( + SELECT lehrveranstaltung_id, studiensemester_kurzbz, uid as student_uid, sum(einheiten) as summe + FROM + campus.tbl_anwesenheit a + JOIN lehre.tbl_lehreinheit le using (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + WHERE + anwesend = false AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)." + GROUP BY + lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz + )nichtanwesend using(lehrveranstaltung_id, student_uid, studiensemester_kurzbz) + WHERE + lehrveranstaltung_id > 0 + "; + + if(!is_null($student_uid)) + $qry.=" AND student_uid=".$this->db_add_param($student_uid); + if(!is_null($lehrveranstaltung_id)) + $qry.=" AND lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id); + + $qry.="group by + vorname, nachname, wahlname, lehrveranstaltung_id, bezeichnung, gruppe, student_uid, anwesend.summe, nichtanwesend.summe + )m"; + + if($lehrveranstaltung_id != '') + $qry.=" order by nachname, vorname "; + elseif($student_uid != '') + $qry.=" order by bezeichnung"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new stdClass(); + $obj->bezeichnung = $row->bezeichnung; + $obj->anwesend = $row->anwesend; + $obj->nichtanwesend = $row->nichtanwesend; + $obj->gesamtstunden = $row->gesamtstunden; + + $obj->erfassteanwesenheit = $row->anwesend+$row->nichtanwesend; + if($row->gesamtstunden=='' || $obj->erfassteanwesenheit=='') + $obj->prozent=100; + else + $obj->prozent = number_format(100-(100/$obj->gesamtstunden*$row->nichtanwesend),2); + $obj->vorname = $row->vorname; + $obj->wahlname = $row->wahlname; + $obj->nachname = $row->nachname; + $obj->uid = $row->uid; + $obj->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg='Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Aendert die bestehende Anwesenheit + * @param $lehreinheit_id ID der Lehreinheit + * @param $datum Datum + * @param $uid UID des Studierenden + * @return boolean true ok, sonst false + */ + public function AnwesenheitToggle($lehreinheit_id, $datum, $uid) + { + if($this->AnwesenheitEntryExists($lehreinheit_id, $datum, $uid)) + { + $qry = "UPDATE + campus.tbl_anwesenheit + SET anwesend= NOT anwesend + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum)." + AND uid=".$this->db_add_param($uid); + + if($result = $this->db_query($qry)) + { + if($this->db_affected_rows($result)>0) + return true; + else + { + $this->errormsg='Anwesenheitsliste wurde noch nicht erfasst'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + else + { + // Anwesenheitsliste wurde noch nicht erfasst. Eintrag neu anlegen + + // Einheiten ermitteln + $qry = "SELECT + distinct stunde + FROM + lehre.tbl_stundenplan + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id)." + AND datum=".$this->db_add_param($datum); + + if($result = $this->db_query($qry)) + { + if($anzahl = $this->db_num_rows($result)) + { + $einheiten = $anzahl; + } + } + if($einheiten>0) + { + $this->lehreinheit_id=$lehreinheit_id; + $this->datum = $datum; + $this->uid = $uid; + $this->anwesend=true; + $this->new=true; + $this->einheiten=$einheiten; + if($this->save()) + return true; + else + { + $this->errormsg = 'Fehler beim Speichern der Daten'; + return true; + } + } + else + { + $this->errormsg = 'Anzahl der Einheiten fuer diesen Tag konnte nicht ermittelt werden'; + return false; + } + } + } + + /** + * Loescht eine Anwesenheit + * @param anwesenheit_id integer ID der Anwesenheit. + * @return boolean true wenn ok , false im fehlerfall + */ + public function delete($anwesenheit_id) + { + $qry = "DELETE FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER).";"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Löschen der Anwesenheit'; + return false; + } + } +} From 5d668791f937706a9a235f18acff1bbd47753fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 14 Apr 2023 14:37:52 +0200 Subject: [PATCH 50/52] =?UTF-8?q?Projektphase=20in=20der=20Zeiterfassung?= =?UTF-8?q?=20werden=20tempor=C3=A4r=207=20Monate=20in=20die=20Vergangenhe?= =?UTF-8?q?it=20anzgezeigt=20um=20die=20Erfassung=20von=20alten=20Eintr?= =?UTF-8?q?=C3=A4gen=20zu=20erm=C3=B6glichen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/projektphase.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/projektphase.class.php b/include/projektphase.class.php index 4e3c38b7c..c1cd8322c 100644 --- a/include/projektphase.class.php +++ b/include/projektphase.class.php @@ -718,10 +718,10 @@ class projektphase extends basis_db ( ( (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) - AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) + AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null) ) AND ( (tbl_projektphase.start<=now() or tbl_projektphase.start is null) - AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) + AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null) ) ) AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid); @@ -787,10 +787,10 @@ class projektphase extends basis_db ( ( (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) - AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) + AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null) ) AND ( (tbl_projektphase.start<=now() or tbl_projektphase.start is null) - AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) + AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null) ) ) AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)." From 1fa215103ce941ebd0e38f07ff6c86bff3f3e4e6 Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 19 Apr 2023 15:42:51 +0200 Subject: [PATCH 51/52] Insert- und Update-Daten bei Prestudentstatus im FAS --- content/student/studentdetailoverlay.xul.php | 20 ++++++++++++++++++++ rdf/prestudentrolle.rdf.php | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/content/student/studentdetailoverlay.xul.php b/content/student/studentdetailoverlay.xul.php index ec72ee756..845d48397 100644 --- a/content/student/studentdetailoverlay.xul.php +++ b/content/student/studentdetailoverlay.xul.php @@ -783,6 +783,22 @@ echo ''; class="sortDirectionIndicator" sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund" /> +