diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php
index 4da88e344..0200f6468 100644
--- a/application/models/education/Projektbetreuer_model.php
+++ b/application/models/education/Projektbetreuer_model.php
@@ -42,6 +42,34 @@ class Projektbetreuer_model extends DB_Model
}
}
+ /**
+ * Gets Betreuer of a certain Type of a Projektarbeit.
+ * Returns one row for each person.
+ * @param int $projektarbeit_id
+ * @param string $betreuerart_kurzbz
+ * @return array success with number of Betreuer or error
+ */
+ public function getBetreuerOfProjektarbeit($projektarbeit_id, $betreuerart_kurzbz)
+ {
+ $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";
+
+ return $this->execQuery($qry, array($projektarbeit_id, $betreuerart_kurzbz));
+ }
+
/**
* Get Projektbetreuer data by authentification token
* @param $zugangstoken
@@ -60,4 +88,83 @@ class Projektbetreuer_model extends DB_Model
return $this->execQuery($qry, array($zugangstoken));
}
+
+ /**
+ * Holt Zweitbegutachter einer Projektarbeit mit Mail.
+ * @param $erstbegutachter_person_id int person_id des Erstbegutachters
+ * @param $projektarbeit_id int
+ * @param $student_uid string uid des Studenten der Arbeit abgibt
+ * @return object | bool
+ */
+ public function getZweitbegutachterWithToken($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 betr.betreuerart_kurzbz = 'Zweitbegutachter'
+ 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
+ LIMIT 1";
+
+ return $this->execQuery($qry_betr, array($projektarbeit_id, $student_uid, $erstbegutachter_person_id));
+ }
+
+ /**
+ * Generiert neuen Token für externen Zweitbetreuer.
+ * @param int $zweitbegutachter_person_id
+ * @param int $projektarbeit_id
+ * @return array
+ */
+ public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id)
+ {
+ $betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id
+ 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'
+ LIMIT 1";
+
+ $betreueruidres = $this->execQuery($betreuerUidQry, array($projektarbeit_id, $zweitbegutachter_person_id));
+
+ if (!hasData($betreueruidres))
+ return error('Zweitbegutachter nicht gefunden');
+
+ $row_betr = getData($betreueruidres)[0];
+
+ if (!isset($row_betr->uid))
+ {
+ do {
+ $token = generateToken(16);
+ $qry_tokencheck = $this->load(array('zugangstoken' => $token));
+ } while(hasData($qry_tokencheck));
+
+ $result = $this->update(
+ array('projektarbeit_id' => $projektarbeit_id,
+ 'person_id' => $row_betr->person_id,
+ 'betreuerart_kurzbz' => 'Zweitbegutachter'),
+ array('zugangstoken' => $token,
+ 'zugangstoken_gueltigbis' => date('Y-m-d', strtotime('+1 year')))
+ );
+
+ return $result;
+ }
+ else
+ return success("Account vorhanden, kein Token benötigt");
+ }
}
diff --git a/application/models/system/Variablenname_model.php b/application/models/system/Variablenname_model.php
index 869a03275..33ace3c8d 100644
--- a/application/models/system/Variablenname_model.php
+++ b/application/models/system/Variablenname_model.php
@@ -12,7 +12,14 @@ class Variablenname_model extends DB_Model
) sem
WHERE start > now()
LIMIT 1;',
- 'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1'
+ 'infocenter_studiensgangtyp' => 'SELECT infocenter_studiensgangtyp FROM public.tbl_variablenname LIMIT 1;',
+ 'projektuebersicht_studiensemester' => 'SELECT studiensemester_kurzbz FROM (
+ SELECT DISTINCT ON (studienjahr_kurzbz) start, studiensemester_kurzbz
+ FROM public.tbl_studiensemester
+ ORDER BY studienjahr_kurzbz, start
+ ) sem
+ WHERE start > now()
+ LIMIT 1;'
);
/**
diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php
index 9f74d5cf8..a508de098 100644
--- a/cis/private/lehre/abgabe_lektor_details.php
+++ b/cis/private/lehre/abgabe_lektor_details.php
@@ -120,21 +120,28 @@ if(!$projektarbeit_obj->load($projektarbeit_id))
$titel = $projektarbeit_obj->titel;
$student_uid = $projektarbeit_obj->student_uid;
-// paarbeit sollte nur ab SS2021 online bewertet werden
-$qry_sem="SELECT 1
- FROM lehre.tbl_projektarbeit
- JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
- JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
- WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)."
- AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date
- LIMIT 1";
-$result_sem=$db->db_query($qry_sem);
-$num_rows_sem = $db->db_num_rows($result_sem);
-if($num_rows_sem < 0)
+// 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)
{
echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."
";
}
+// Endupload sollte vor Benotung durchgeführt worden sein
+$qry_endupload="SELECT 1
+ FROM campus.tbl_paabgabe
+ WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)."
+ AND paabgabetyp_kurzbz='end'
+ AND abgabedatum IS NOT NULL
+ LIMIT 1";
+$result_endupload=$db->db_query($qry_endupload);
+$num_rows_endupload = $db->db_num_rows($result_endupload);
+if($num_rows_endupload < 0)
+{
+ echo "".$p->t('abgabetool/fehlerErmittelnEnduploadProjektarbeit')."
";
+}
+
// Zweitbegutachter holen
if($betreuerart=="Erstbegutachter")
{
@@ -457,7 +464,11 @@ while ($result_nam && $row_nam=$db->db_fetch_object($result_nam))
$htmlstr .= "
| ".$p->t('abgabetool/student').": ".$db->convert_html_chars($studentenname)." | "; $htmlstr .= ""; -if ($num_rows_sem >= 1) + +$semester_benotbar = $num_rows_sem >= 1; +$endupload_vorhanden = $num_rows_endupload >= 1; + +if ($semester_benotbar && $endupload_vorhanden) { $htmlstr .= ""; } $htmlstr .= " | "; diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index e9384390b..29d74ab66 100644 --- a/cis/private/lehre/abgabe_student_details.php +++ b/cis/private/lehre/abgabe_student_details.php @@ -423,18 +423,9 @@ if($command=="update" && $error!=true) } else { - // paarbeit sollte nur ab SS2021 online bewertet werden - $qry_sem="SELECT 1 - FROM lehre.tbl_projektarbeit - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)." - AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date - LIMIT 1"; - - $result_sem=$db->db_query($qry_sem); - $num_rows_sem = $db->db_num_rows($result_sem); - if($num_rows_sem < 0) + // 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) { echo "".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."