diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index a8705e7f9..74722607f 100644 --- a/cis/private/lehre/abgabe_lektor_details.php +++ b/cis/private/lehre/abgabe_lektor_details.php @@ -125,7 +125,7 @@ $projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz; // paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden $paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); -if(!is_numeric($paIsCurrent) || $paIsCurrent < 0) +if(!is_bool($paIsCurrent)) { echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
 "; } @@ -166,7 +166,7 @@ if(in_array($betreuerart, array('Erstbegutachter', 'Senatsvorsitz'))) } // Mail mit Token an Zweitbegutachter senden - if (count($zweitbetreuerArr) > 0 && $paIsCurrent >= 1 && isset($_GET['zweitbegutachtertoken']) && isset($_GET['zweitbetreuer_person_id'])) + if (count($zweitbetreuerArr) > 0 && $paIsCurrent === true && 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)) @@ -482,7 +482,7 @@ $htmlstr .= "\n"; $htmlstr .= ""; $htmlstr .= ""; } diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index 860eb7579..f040ed034 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -472,8 +472,8 @@ if($command=="update" && $error!=true) else { // paarbeit sollte nur ab bestimmten Zeitpunkt online bewertet werden - $num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); - if(!is_numeric($num_rows_sem) || $num_rows_sem < 0) + $paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); + if(!is_bool($paIsCurrent)) { echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
 "; } diff --git a/cis/private/lehre/projektbeurteilungDocumentExport.php b/cis/private/lehre/projektbeurteilungDocumentExport.php new file mode 100644 index 000000000..195650a24 --- /dev/null +++ b/cis/private/lehre/projektbeurteilungDocumentExport.php @@ -0,0 +1,45 @@ +getBerechtigungen($user); + +$projektarbeit = new projektarbeit(); +$projektarbeit->load($_GET['projektarbeit_id']); + +$betreuer = new person(); +$betreuer->getPersonFromBenutzer($user); + +//Überprüft ob es der Betreuer oder der Student ist +if ($betreuer->person_id !== $_GET['person_id'] && $projektarbeit->student_uid !== $user && !$rechte->isBerechtigt('assistenz')) + die("

Sie haben keine Berechtigung für diese Aktion.

"); + +$projektarbeitVorlage = new projektarbeit(); + +// passende Vorlage holen +$vorlage = $projektarbeitVorlage->getVorlage($_GET['projektarbeit_id'], $_GET['betreuerart_kurzbz']); + + +if ($vorlage == null) + die("

".$projektarbeitVorlage->errormsg."

"); + +// weiterleiten auf Dokumentexport +header('Location: ' . APP_ROOT . '/cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php' + .'&xsl='.$vorlage.'&betreuerart_kurzbz=' . $_GET['betreuerart_kurzbz'] + . '&projektarbeit_id=' . $_GET['projektarbeit_id'] . '&person_id=' . $_GET['person_id']. '&uid=' . $user +); +die(); diff --git a/cis/private/pdfExport.php b/cis/private/pdfExport.php index ad2bb1fae..7393a084c 100644 --- a/cis/private/pdfExport.php +++ b/cis/private/pdfExport.php @@ -196,41 +196,41 @@ if (isset($_GET['output']) && $_GET['output'] != 'pdf') else $output = 'pdf'; -if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung')) -{ - if (!isset($_GET['betreuerart_kurzbz']) || !isset($_GET['person_id']) || !isset($_GET['projektarbeit_id'])) - die('Fehlerhafte Parameteruebergabe'); +//~ if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung')) +//~ { + //~ if (!isset($_GET['betreuerart_kurzbz']) || !isset($_GET['person_id']) || !isset($_GET['projektarbeit_id'])) + //~ die('Fehlerhafte Parameteruebergabe'); - $projektarbeit = new projektarbeit(); - $projektarbeit->load($_GET['projektarbeit_id']); + //~ $projektarbeit = new projektarbeit(); + //~ $projektarbeit->load($_GET['projektarbeit_id']); - $betreuer = new person(); - $betreuer->getPersonFromBenutzer($user); + //~ $betreuer = new person(); + //~ $betreuer->getPersonFromBenutzer($user); - //Überprüft ob es der Betreuer oder der Student ist - if ($betreuer->person_id !== $_GET['person_id'] && $projektarbeit->student_uid !== $user && !$rechte->isBerechtigt('assistenz')) - die("

Sie haben keine Berechtigung für diese Aktion.

"); + //~ //Überprüft ob es der Betreuer oder der Student ist + //~ if ($betreuer->person_id !== $_GET['person_id'] && $projektarbeit->student_uid !== $user && !$rechte->isBerechtigt('assistenz')) + //~ die("

Sie haben keine Berechtigung für diese Aktion.

"); - switch ($_GET['betreuerart_kurzbz']) - { - case 'Begutachter' : - case 'Senatsvorsitz' : - $xsl = 'ProjektBeurteilungBA'; - break; - case 'Erstbegutachter' : - $xsl = 'ProjektBeurteilungMAErst'; - break; - case 'Zweitbegutachter' : - $xsl = 'ProjektBeurteilungMAZweit'; - break; - } + //~ switch ($_GET['betreuerart_kurzbz']) + //~ { + //~ case 'Begutachter' : + //~ case 'Senatsvorsitz' : + //~ $xsl = 'ProjektBeurteilungBA'; + //~ break; + //~ case 'Erstbegutachter' : + //~ $xsl = 'ProjektBeurteilungMAErst'; + //~ break; + //~ case 'Zweitbegutachter' : + //~ $xsl = 'ProjektBeurteilungMAZweit'; + //~ break; + //~ } - $allowed = true; -} + //~ $allowed = true; +//~ } $konto = new konto(); -if ((((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin')) || (isset($allowed) && $allowed === true)) +if (((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin')) { $buchungstypen = array(); if (defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN")) diff --git a/include/projektarbeit.class.php b/include/projektarbeit.class.php index 783a0670b..5f07cf69d 100644 --- a/include/projektarbeit.class.php +++ b/include/projektarbeit.class.php @@ -16,8 +16,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Authors: Christian Paminger , - * Andreas Oesterreicher and - * Rudolf Hangl . + * Andreas Oesterreicher and + * Rudolf Hangl . */ /** * Klasse projektarbeit @@ -27,7 +27,7 @@ require_once(dirname(__FILE__).'/basis_db.class.php'); class projektarbeit extends basis_db { - public $new; // boolean + public $new; // boolean public $result = array(); // adresse Objekt //Tabellenspalten @@ -59,6 +59,37 @@ class projektarbeit extends basis_db public $abgabedatum; + // Welche Version der Projektarbeit wird in welchem Semester verwendet + private $_versions = array( + 'Diplom' => array( + 'SS2025' => 3, + 'SS2023' => 2, + 'SS2022' => 1 + ), + 'Others' => array( + 'SS2025' => 2, + 'SS2022' => 1 + ) + ); + + // welche Vorlagen werden für welche Projekarbeitsversion verwendet (beginnend mit 0) + private $_projektarbeitVorlageMappings = array( + 'Begutachter' => array( + 2 => 'ProjektBeurteilungBAProzent', + 0 => 'ProjektBeurteilungBA' + ), + 'Senatsvorsitz' => array( + 2 => 'ProjektBeurteilungBAProzent', + 0 => 'ProjektBeurteilungBA' + ), + 'Erstbegutachter' => array( + 3 => 'ProjektBeurteilungMAProzent', + 0 => 'ProjektBeurteilungMAErst' + ), + 'Zweitbegutachter' => array( + 0 => 'ProjektBeurteilungMAZweit' + ) + ); /** * Konstruktor @@ -233,25 +264,25 @@ class projektarbeit extends basis_db $qry='BEGIN; INSERT INTO lehre.tbl_projektarbeit (projekttyp_kurzbz, titel, lehreinheit_id, student_uid, firma_id, note, punkte, beginn, ende, faktor, freigegeben, gesperrtbis, stundensatz, gesamtstunden, themenbereich, anmerkung, insertamum, insertvon, updateamum, updatevon, titel_english, final) VALUES('. - $this->db_add_param($this->projekttyp_kurzbz).', '. - $this->db_add_param($this->titel).', '. - $this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '. - $this->db_add_param($this->student_uid).', '. - $this->db_add_param($this->firma_id, FHC_INTEGER).', '. - $this->db_add_param($this->note).', '. - $this->db_add_param($this->punkte).', '. - $this->db_add_param($this->beginn).', '. - $this->db_add_param($this->ende).', '. - $this->db_add_param($this->faktor).', '. - $this->db_add_param($this->freigegeben, FHC_BOOLEAN).', '. - $this->db_add_param($this->gesperrtbis).', '. - $this->db_add_param($this->stundensatz).', '. - $this->db_add_param($this->gesamtstunden).', '. - $this->db_add_param($this->themenbereich).', '. - $this->db_add_param($this->anmerkung).', now(), '. - $this->db_add_param($this->insertvon).', now(), '. - $this->db_add_param($this->updatevon).','. - $this->db_add_param($this->titel_english).','. + $this->db_add_param($this->projekttyp_kurzbz).', '. + $this->db_add_param($this->titel).', '. + $this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '. + $this->db_add_param($this->student_uid).', '. + $this->db_add_param($this->firma_id, FHC_INTEGER).', '. + $this->db_add_param($this->note).', '. + $this->db_add_param($this->punkte).', '. + $this->db_add_param($this->beginn).', '. + $this->db_add_param($this->ende).', '. + $this->db_add_param($this->faktor).', '. + $this->db_add_param($this->freigegeben, FHC_BOOLEAN).', '. + $this->db_add_param($this->gesperrtbis).', '. + $this->db_add_param($this->stundensatz).', '. + $this->db_add_param($this->gesamtstunden).', '. + $this->db_add_param($this->themenbereich).', '. + $this->db_add_param($this->anmerkung).', now(), '. + $this->db_add_param($this->insertvon).', now(), '. + $this->db_add_param($this->updatevon).','. + $this->db_add_param($this->titel_english).','. $this->db_add_param($this->final, FHC_BOOLEAN).');'; } else @@ -471,92 +502,129 @@ class projektarbeit extends basis_db } /** - * Prüft ob Projektarbeit aktuell ist (ab bestimmtem Semester). - * Masterarbeiten sind ab der Änderung zur Gewichtung der Punkte aktuell, - * Bachelorarbeiten schon ab dem Umstieg auf das Online Beurteilungsformular. + * Prüft ob Projektarbeit aktuell ist (also zurzeit online bewertet wird). * @param $projektarbeit_id - * @return int -1 wenn Fehler, 0 wenn nicht aktuell, 1 wenn aktuell + * @return boolean */ public function projektarbeitIsCurrent($projektarbeit_id) { + $version = $this->getVersion($projektarbeit_id); // paarbeit sollte nur ab einem Studiensemester online bewertet werden - $qry="SELECT 1 - FROM lehre.tbl_projektarbeit - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." - AND - ( - ( - projekttyp_kurzbz = 'Diplom' - AND tbl_studiensemester.start::date >= ( - SELECT start - FROM public.tbl_studiensemester - WHERE studiensemester_kurzbz = 'SS2023' - )::date - ) - OR - ( - projekttyp_kurzbz <> 'Diplom' - AND tbl_studiensemester.start::date >= ( - SELECT start - FROM public.tbl_studiensemester - WHERE studiensemester_kurzbz = 'SS2022' - )::date - ) - ) - LIMIT 1"; - - $result_sem=$this->db_query($qry); - - if (!$result_sem) - { - $this->errormsg = "Fehler beim Ermitteln der Projektarbeit Aktualität"; - return -1; - } - - $num_rows = $this->db_num_rows($result_sem); - - if ($num_rows < 0) - { - $this->errormsg = "Fehler beim Ermitteln der Anzahl der aktuellen Projektarbeiten"; - } - - return $num_rows; + return $version === null ? null : $version->isCurrent; } /** - * Prüft ob Projektarbeit aktuell ist (ab bestimmtem Semester), vor der Änderung zur Gewichtung der Punkte. + * Holt sich Version der Projektarbeit. + * Liefert auch mit, ob die Version die aktuellste ist. + * z.B.: Masterarbeiten waren ab der Änderung zur Gewichtung der Punkte aktuell, + * Bachelorarbeiten waren ab dem Umstieg auf das Online Beurteilungsformular aktuell. * @param $projektarbeit_id - * @return int -1 wenn Fehler, 0 wenn nicht aktuell, 1 wenn aktuell + * @return objekt mit Versionsinfo, null im Fehlerfall */ - public function projektarbeitIsCurrentBeforeWeightening($projektarbeit_id) + public function getVersion($projektarbeit_id) { // paarbeit sollte nur ab einem Studiensemester online bewertet werden - $qry="SELECT 1 - FROM lehre.tbl_projektarbeit + $qry=" + SELECT + CASE + WHEN semesters_diplom.studiensemester_kurzbz IS NOT NULL + THEN semesters_diplom.studiensemester_kurzbz + ELSE semesters.studiensemester_kurzbz + END AS version_studiensemester_kurzbz, + pa.projekttyp_kurzbz + FROM + lehre.tbl_projektarbeit pa JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." - AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date - LIMIT 1"; + JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz) + LEFT JOIN ( + SELECT + start, studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + studiensemester_kurzbz IN (".$this->db_implode4SQL(array_keys($this->_versions['Others'])).") + ) semesters ON sem.start >= semesters.start AND pa.projekttyp_kurzbz <> 'Diplom' + LEFT JOIN ( + SELECT + start, studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + studiensemester_kurzbz IN (".$this->db_implode4SQL(array_keys($this->_versions['Diplom'])).") + ) semesters_diplom ON sem.start >= semesters_diplom.start AND pa.projekttyp_kurzbz = 'Diplom' + WHERE + projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)." + ORDER BY + semesters.start DESC, semesters_diplom.start DESC + LIMIT 1"; - $result_sem=$this->db_query($qry); + $errormsg = "Fehler beim Ermitteln der Projektarbeit Version"; - if (!$result_sem) + if ($this->db_query($qry)) { - $this->errormsg = "Fehler beim Ermitteln der Projektarbeit Aktualität"; - return -1; + if ($row = $this->db_fetch_object()) + { + // known project types + if (isset($this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz])) + { + $row->versionNumber = $this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz]; + $row->isCurrent = + $this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz] + == max($this->_versions[$row->projekttyp_kurzbz]); + + } + elseif (isset($this->_versions['Others'][$row->version_studiensemester_kurzbz])) + { + $row->versionNumber = $this->_versions['Others'][$row->version_studiensemester_kurzbz]; + $row->isCurrent = + $this->_versions['Others'][$row->version_studiensemester_kurzbz] + == max($this->_versions['Others']); + } + else + { + $row->isCurrent = false; + $row->versionNumber = 0; + } + return $row; + } + else + { + $this->errormsg = $errormsg; + return null; + } + } + else + { + $this->errormsg = $errormsg; + return null; + } + } + + /** + * Holt Version einer Projektarbeit für eine Betreuerart. + * @param $projektarbeit_id + * @param $betreuerart_kurzbz + * @return string Vorlagenname + */ + public function getVorlage($projektarbeit_id, $betreuerart_kurzbz) + { + $version = $this->getVersion($projektarbeit_id); + + if ($version == null) return null; + + $key = 0; + if (isset($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz])) + { + foreach ($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz] as $versionNumber => $vorlage) + { + if ($versionNumber <= $version->versionNumber && $versionNumber > $key) $key = $versionNumber; + } } - $num_rows = $this->db_num_rows($result_sem); - - if ($num_rows < 0) - { - $this->errormsg = "Fehler beim Ermitteln der Anzahl der aktuellen Projektarbeiten"; - } - - return $num_rows; + return + isset($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz][$key]) + ? $this->_projektarbeitVorlageMappings[$betreuerart_kurzbz][$key] + : ''; } } ?>
".$p->t('abgabetool/student').": ".$db->convert_html_chars($studentenname).""; -$semester_benotbar = $paIsCurrent >= 1; +$semester_benotbar = $paIsCurrent === true; $endupload_vorhanden = $num_rows_endupload >= 1; if ($semester_benotbar && $endupload_vorhanden) @@ -544,7 +544,7 @@ if (isset($zweitbetreuerArr) && is_array($zweitbetreuerArr)) // wenn es Zweitbet $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) + if (isset($zweitbetreuer->email) && !isset($zweitbetreuer->uid) && $paIsCurrent === true) { $htmlstr .= "
\n"; $htmlstr .= ""; diff --git a/cis/private/lehre/abgabe_student.php b/cis/private/lehre/abgabe_student.php index 2512d9831..0a0385970 100644 --- a/cis/private/lehre/abgabe_student.php +++ b/cis/private/lehre/abgabe_student.php @@ -195,13 +195,13 @@ else $htmlstr .= "
"; if (!is_null($row->babgeschickt)) - $htmlstr .= "".$p->t('abgabetool/projektbeurteilungErstDownload').""; + $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 .= "".$p->t('abgabetool/projektbeurteilungZweitDownload').""; $htmlstr .= "