From 28d0563fa5e6259e3fbe5280d52a88999ef839ad Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 25 May 2020 18:21:08 +0200 Subject: [PATCH 01/11] Digital Pruefungsprotokoll is displayed for Bachelor/Master, English/German --- .../controllers/lehre/Pruefungsprotokoll.php | 93 +++ .../education/Abschlusspruefung_model.php | 87 +++ .../models/education/Projektarbeit_model.php | 58 ++ .../views/lehre/pruefungsprotokoll.php | 152 +++++ public/css/lehre/pruefungsprotokoll.css | 11 + system/phrasesupdate.php | 626 ++++++++++++++++++ 6 files changed, 1027 insertions(+) create mode 100644 application/controllers/lehre/Pruefungsprotokoll.php create mode 100644 application/views/lehre/pruefungsprotokoll.php create mode 100644 public/css/lehre/pruefungsprotokoll.css diff --git a/application/controllers/lehre/Pruefungsprotokoll.php b/application/controllers/lehre/Pruefungsprotokoll.php new file mode 100644 index 000000000..9ac439fe1 --- /dev/null +++ b/application/controllers/lehre/Pruefungsprotokoll.php @@ -0,0 +1,93 @@ + 'lehre:r', + 'Protokoll' => 'lehre:r' + ) + ); + + // Load models + $this->load->model('education/Abschlusspruefung_model', 'AbschlusspruefungModel'); + $this->load->model('education/Abschlussbeurteilung_model', 'AbschlussbeurteilungModel'); + + // Load language phrases + $this->loadPhrases( + array( + 'abschlusspruefung' + ) + ); + + $this->_setAuthUID(); // sets property uid + + $this->setControllerId(); // sets the controller id + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + + /** + */ + public function Protokoll() + { + $abschlusspruefung_id = $this->input->get('abschlusspruefung_id'); + + if (!is_numeric($abschlusspruefung_id)) + show_error('invalid abschlusspruefung'); + + $abschlusspruefung = $this->AbschlusspruefungModel->getAbschlusspruefung($abschlusspruefung_id); + + if (isError($abschlusspruefung)) + show_error(getError($abschlusspruefung)); + else + $abschlusspruefung = getData($abschlusspruefung); + + $this->AbschlussbeurteilungModel->addOrder("(CASE WHEN abschlussbeurteilung_kurzbz = 'ausgezeichnet' THEN 1 + WHEN abschlussbeurteilung_kurzbz = 'gut' THEN 2 + WHEN abschlussbeurteilung_kurzbz = 'bestanden' THEN 3 + WHEN abschlussbeurteilung_kurzbz = 'angerechnet' THEN 4 + ELSE 5 + END + )"); + $abschlussbeurteilung = $this->AbschlussbeurteilungModel->load(); + + if (isError($abschlussbeurteilung)) + show_error(getError($abschlussbeurteilung)); + else + $abschlussbeurteilung = getData($abschlussbeurteilung); + + $data = array( + 'abschlusspruefung' => $abschlusspruefung, + 'abschlussbeurteilung' => $abschlussbeurteilung + ); + + $this->load->view('lehre/pruefungsprotokoll.php', $data); + } + + // ----------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * Retrieve the UID of the logged user and checks if it is valid + */ + private function _setAuthUID() + { + $this->_uid = getAuthUID(); + + if (!$this->_uid) show_error('User authentification failed'); + } +} diff --git a/application/models/education/Abschlusspruefung_model.php b/application/models/education/Abschlusspruefung_model.php index aef5f67c3..d1649a990 100644 --- a/application/models/education/Abschlusspruefung_model.php +++ b/application/models/education/Abschlusspruefung_model.php @@ -11,4 +11,91 @@ class Abschlusspruefung_model extends DB_Model $this->dbTable = 'lehre.tbl_abschlusspruefung'; $this->pk = 'abschlusspruefung_id'; } + + /** + * Gets data of an Abschlusspruefung, including Abschlussarbeit. + * @param $abschlusspruefung_id + * @return object + */ + public function getAbschlusspruefung($abschlusspruefung_id) + { + $this->load->model('crm/Student_model', 'StudentModel'); + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + $abschlusspruefungdata = array(); + + $this->addSelect('tbl_abschlusspruefung.datum, tbl_abschlusspruefung.abschlussbeurteilung_kurzbz, + studentpers.vorname AS vorname_student, studentpers.nachname AS nachname_student, studentpers.titelpre AS titelpre_student, studentpers.titelpost AS titelpost_student, studentben.uid AS uid_student, matrikelnr, + vorsitzenderpers.vorname AS vorname_vorsitz, vorsitzenderpers.nachname AS nachname_vorsitz, vorsitzenderpers.titelpre AS titelpre_vorsitz, vorsitzenderpers.titelpost AS titelpost_vorsitz, + erstprueferpers.vorname AS vorname_erstpruefer, erstprueferpers.nachname AS nachname_erstpruefer, erstprueferpers.titelpre AS titelpre_erstpruefer, erstprueferpers.titelpost AS titelpost_erstpruefer, + zweitprueferpers.vorname AS vorname_zweitpruefer, zweitprueferpers.nachname AS nachname_zweitpruefer, zweitprueferpers.titelpre AS titelpre_zweitpruefer, zweitprueferpers.titelpost AS titelpost_zweitpruefer + '); + $this->addJoin('public.tbl_benutzer studentben', 'tbl_abschlusspruefung.student_uid = studentben.uid'); + $this->addJoin('public.tbl_person studentpers', 'studentben.person_id = studentpers.person_id'); + $this->addJoin('public.tbl_student', 'studentben.uid = tbl_student.student_uid'); + $this->addJoin('public.tbl_benutzer vorsitzenderben', 'vorsitz = vorsitzenderben.uid', 'LEFT'); + $this->addJoin('public.tbl_person vorsitzenderpers', 'vorsitzenderben.person_id = vorsitzenderpers.person_id', 'LEFT'); + $this->addJoin('public.tbl_person erstprueferpers', 'pruefer1 = erstprueferpers.person_id', 'LEFT'); + $this->addJoin('public.tbl_person zweitprueferpers', 'pruefer2 = zweitprueferpers.person_id', 'LEFT'); + + $abschlusspruefung = $this->load($abschlusspruefung_id); + + if (isError($abschlusspruefung)) + return $abschlusspruefung; + elseif (hasData($abschlusspruefung)) + { + $abschlusspruefungdata = getData($abschlusspruefung)[0]; + + // get Studiengang of Student + $student_uid = $abschlusspruefungdata->uid_student; + $this->StudentModel->addSelect('prestudent_id'); + $prestudent_id = $this->StudentModel->load(array('student_uid' => $student_uid)); + + if (isError($prestudent_id)) + return $prestudent_id; + elseif (hasData($prestudent_id)) + { + //get Studiengangname from Studienplan and -ordnung + $studienordnung = $this->PrestudentstatusModel->getStudienordnungFromPrestudent(getData($prestudent_id)[0]->prestudent_id); + + if (isError($studienordnung)) + return $studienordnung; + elseif (hasData($studienordnung)) + { + $studienordnungdata = getData($studienordnung)[0]; + + $abschlusspruefungdata->studiengang_kz = $studienordnungdata->studiengang_kz; + $abschlusspruefungdata->studiengangbezeichnung = $studienordnungdata->studiengangbezeichnung; + $abschlusspruefungdata->studiengangbezeichnung_englisch = $studienordnungdata->studiengangbezeichnung_englisch; + + $this->StudiengangModel->addSelect('typ'); + $typ = $this->StudiengangModel->load($studienordnungdata->studiengang_kz); + if (isError($typ)) + return $typ; + elseif (hasData($typ)) + { + $abschlusspruefungdata->studiengangstyp = getData($typ)[0]->typ; + } + + // get Abschlussarbeit + $projekttyp = array('Bachelor','Diplom','Master','Dissertation','Lizenziat','Magister'); + $abschlussarbeit = $this->ProjektarbeitModel->getProjektarbeit($student_uid, $studienordnungdata->studiengang_kz, null, $projekttyp, true); + + if (isError($abschlussarbeit)) + return $abschlussarbeit; + if (hasData($abschlussarbeit)) + { + $abschlussarbeit = getData($abschlussarbeit)[0]; + $abschlusspruefungdata->projektarbeit_studiengangstyp_name = $abschlussarbeit->projekttyp_kurzbz; + $abschlusspruefungdata->abschlussarbeit_titel = $abschlussarbeit->titel; + $abschlusspruefungdata->abschlussarbeit_note = $abschlussarbeit->note; + } + } + } + } + + return success($abschlusspruefungdata); + } } diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php index e5652d6ff..109e23373 100644 --- a/application/models/education/Projektarbeit_model.php +++ b/application/models/education/Projektarbeit_model.php @@ -11,4 +11,62 @@ class Projektarbeit_model extends DB_Model $this->dbTable = 'lehre.tbl_projektarbeit'; $this->pk = 'projektarbeit_id'; } + + /** + * Gets Projektarbeit(en) of a student for a Studiengang, Semester, Projekttyp, final. + * @param $student_uid + * @param $studiengang_kz + * @param $studiensemester_kurzbz + * @param $projekttyp + * @param $final + * @return object + */ + public function getProjektarbeit($student_uid, $studiengang_kz = null, $studiensemester_kurzbz = null, $projekttyp = null, $final = null) + { + $qry = "SELECT + tbl_projektarbeit.* , tbl_projekttyp.bezeichnung + FROM + lehre.tbl_projektarbeit + JOIN + lehre.tbl_projekttyp USING (projekttyp_kurzbz), lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung + + WHERE + tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND + tbl_lehreinheit.lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id AND + tbl_projektarbeit.student_uid = ?"; + + $params = array($student_uid); + + if (isset($studiengang_kz)) + { + $qry .= ' AND tbl_lehrveranstaltung.studiengang_kz=?'; + $params[] = $studiengang_kz; + } + + if (isset($studiensemester_kurzbz)) + { + $qry .= ' AND tbl_lehreinheit.studiensemester_kurzbz=?'; + $params[] = $studiensemester_kurzbz; + } + + if (isset($projekttyp)) + { + if (is_array($projekttyp)) + $qry .= ' AND tbl_projektarbeit.projekttyp_kurzbz IN ?'; + else + $qry .= ' AND tbl_projektarbeit.projekttyp_kurzbz=?'; + + $params[] = $projekttyp; + } + + if (isset($final)) + { + $qry .= ' AND tbl_projektarbeit.final=?'; + $params[] = $final; + } + + $qry .= ' ORDER BY beginn DESC, projektarbeit_id DESC'; + + return $this->execQuery($qry, $params); + } } diff --git a/application/views/lehre/pruefungsprotokoll.php b/application/views/lehre/pruefungsprotokoll.php new file mode 100644 index 000000000..4d8705510 --- /dev/null +++ b/application/views/lehre/pruefungsprotokoll.php @@ -0,0 +1,152 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Pruefungsprotokoll', + 'jquery' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'dialoglib' => true, + 'ajaxlib' => true, + 'sbadmintemplate' => true, + 'customCSSs' => array( + 'public/css/sbadmin2/admintemplate_contentonly.css', + 'public/css/lehre/pruefungsprotokoll.css' + ), + 'customJSs' => array( + 'public/js/bootstrapper.js' + ) + ) +); +?> + +
+
+
+ studiengangstyp == 'b' ? 'Bachelor' : 'Master'; + $pruefung_name = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'PruefungBachelor') : $this->p->t('abschlusspruefung', 'PruefungMaster'); + $arbeit_name = $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'ArbeitBachelor') : $this->p->t('abschlusspruefung', 'ArbeitMaster'); + ?> +
+
+ +

+ studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'AbgehaltenAmBachelor') : $this->p->t('abschlusspruefung', 'AbgehaltenAmMaster'); ?> + studiengangbezeichnung?>, p->t('abschlusspruefung', 'Studiengangskennzahl') ?>  + studiengang_kz ?> +

+
+
+
+
+

+ titelpre_student . ' ' . $abschlusspruefung->vorname_student . ' ' . $abschlusspruefung->nachname_student . ' ' . $abschlusspruefung->titelpost_student?> +

+

p->t('abschlusspruefung', 'Personenkennzeichen') ?>: matrikelnr ?>

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + p->t('abschlusspruefung', 'Pruefungssenat') ?> +
+ p->t('abschlusspruefung', 'Vorsitz') ?> + + titelpre_vorsitz . ' ' . $abschlusspruefung->vorname_vorsitz . ' ' . $abschlusspruefung->nachname_vorsitz . ' ' . $abschlusspruefung->titelpost_vorsitz ?> +
+ p->t('abschlusspruefung', 'Erstpruefer') ?> + + titelpre_erstpruefer . ' ' . $abschlusspruefung->vorname_erstpruefer . ' ' . $abschlusspruefung->nachname_erstpruefer . ' ' . $abschlusspruefung->titelpost_erstpruefer ?> +
+ p->t('abschlusspruefung', 'Zweitpruefer') ?> + + titelpre_zweitpruefer . ' ' . $abschlusspruefung->vorname_zweitpruefer . ' ' . $abschlusspruefung->nachname_zweitpruefer . ' ' . $abschlusspruefung->titelpost_zweitpruefer ?> +
+ p->t('abschlusspruefung', 'Pruefungsdatum') ?> + + datum), 'd.m.Y'); ?> +
+ p->t('abschlusspruefung', 'EinverstaendniserklaerungName') ?> + + + p->t('abschlusspruefung', 'EinverstaendniserklaerungText') ?> +
+ p->t('abschlusspruefung', 'ThemaBeurteilung') ?>  + + abschlussarbeit_titel) ? $abschlusspruefung->abschlussarbeit_titel : '' ?> + + p->t('abschlusspruefung', 'Note') ?>: abschlussarbeit_note) ? $abschlusspruefung->abschlussarbeit_note : '' ?> +
+ p->t('abschlusspruefung', 'Pruefungsgegenstand') ?> + + studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'PruefungsgegenstandBachelor') : $this->p->t('abschlusspruefung', 'PruefungsgegenstandMaster')) ?> +
+ p->t('abschlusspruefung', 'Notizen') ?> +
+ +
+ studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'BeurteilungKriterienBachelor') : $this->p->t('abschlusspruefung', 'BeurteilungKriterienMaster')) ?> +
+ p->t('abschlusspruefung', 'Beurteilung') ?>: + +
+
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/public/css/lehre/pruefungsprotokoll.css b/public/css/lehre/pruefungsprotokoll.css new file mode 100644 index 000000000..7511ed8e2 --- /dev/null +++ b/public/css/lehre/pruefungsprotokoll.css @@ -0,0 +1,11 @@ +#protocoltbl textarea { + /* notiz field should stay in table */ + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; +} + +#protocoltbl td:nth-child(1) { + background-color: #f5f5f5; +} \ No newline at end of file diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 14af8e733..45d4183de 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -6766,6 +6766,632 @@ When on hold, the date is only a reminder.', ) ) ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'PruefungBachelor', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'kommissionelle Bachelorprüfung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Bachelor Examination before a Committee', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'PruefungMaster', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'kommissionelle Masterprüfung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Master Examination before a Committee', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'ArbeitBachelor', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bachelorarbeit', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Bachelor paper', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'ArbeitMaster', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Masterarbeit', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Master\'s Thesis', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Protokoll', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Protokoll', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Record of', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'AbgehaltenAmBachelor', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'abgehalten am FH-Bachelorstudiengang', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'held in the UAS Bachelor\'s Degree Program', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'AbgehaltenAmMaster', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'abgehalten am FH-Masterstudiengang', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'held in the UAS Master\'s Degree Program', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Studiengangskennzahl', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Studiengangskennzahl', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Classification Number', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Personenkennzeichen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Personenkennzeichen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Personal identity number', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Pruefungssenat', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungssenat', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Examining Committee', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Vorsitz', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Vorsitzende/r', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Chair', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Erstpruefer', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => '1. Prüfer/in', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '1st Examiner', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Zweitpruefer', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => '2. Prüfer/in', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '2nd Examiner', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Pruefungsdatum', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungsdatum', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Exam Date', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'EinverstaendniserklaerungName', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Einverständniserklärung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'EinverstaendniserklaerungText', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Der/Die Studierende bestätigt, sich in guter körperlicher und geistiger Verfassung zu befinden, + um die Prüfung durchzuführen und dass die technischen Voraussetzungen und gegeben sind.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'ThemaBeurteilung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Thema und Beurteilung der', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Topic and Assessment of', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Note', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Note', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Grade', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Pruefungsgegenstand', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungsgegenstand', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Subject of Examination', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Notizen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Notizen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Notes', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'PruefungsnotizenBachelor', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungsteil/e in Englisch (Optional - entsprechend der Vorgabe des Studiengangs): +<< Nichtzutreffendes Streichen >> +* Präsentation der Bachelorarbeit +* Prüfungsgespräch über die Bachelorarbeit + +Fragen zur Eröffnung des Prüfungsgesprächs +<< Bitte ausfüllen >> + +Gründe für negative Beurteilung ODER allfällige Anmerkungen bei positiver Beurteilung +<< Bitte ausfüllen >> + +Allfällige besondere Vorkommnisse +<< Bitte ausfüllen >>', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Parts of the examination held in English (Optional - in line with the degree program\'s guidelines): +<< Delete as appropriate >> +* Presentation of the Bachelor Paper +* Examination interview on the Bachelor Paper + +Question(s) to open the examination interview +<< Please fill out >> + +Reasons for failing OR any possible explanatory notes on a passing grade +<< Please fill out >> + +Any unusual occurrences +<< Please fill out >>', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'PruefungsnotizenMaster', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungsteil/e in Englisch (Optional - entsprechend der Vorgabe des Studiengangs): +<< Nichtzutreffendes Streichen >> +* Präsentation der Masterarbeit +* Prüfungsgespräch über die Masterarbeit und Querverbindungen zu Fächern des Studienplans +* Prüfungsgespräch über sonstige studienplanrelevante Inhalte + +Fragen zur Eröffnung des Prüfungsgesprächs +<< Bitte ausfüllen >> + +Gründe für negative Beurteilung ODER allfällige Anmerkungen bei positiver Beurteilung +<< Bitte ausfüllen >> + +Allfällige besondere Vorkommnisse +<< Bitte ausfüllen >>', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Parts of the examination held in English (Optional - in line with the degree program\'s guidelines): +<< Delete as appropriate >> +* Presentation of the Master\'s Thesis +* Examination interview on the Master\'s Thesis and its links to subjects of the curriculum +* Examination interview on other subjects relevant to the curriculum + +Question(s) to open the examination interview +<< Please fill out >> + +Reasons for failing OR any possible explanatory notes on a passing grade +<< Please fill out >> + +Any unusual occurrences +<< Please fill out >>', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'PruefungsgegenstandBachelor', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungsgespräch über die Bachelorarbeit', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Presentation and Examination interview on the Bachelor Paper', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'PruefungsgegenstandMaster', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfungsgespräch über die Masterarbeit und deren Querverbindungen zu Fächern des Studienplans sowie Prüfungsgespräch über das Stoffgebiet', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => 'Examination interview on the Master’s Thesis and its links to subjects of the curriculum as well as examination interview on a curricular theme', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'BeurteilungKriterienBachelor', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Beurteilung und Kriterien Bachelorprüfung
+ ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'BeurteilungKriterienMaster', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Beurteilung und Kriterien Masterprüfung
+ ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abschlusspruefung', + 'phrase' => 'Beurteilung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Beurteilung + ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Assessment', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ) ); From 2ca2ece708b436f0dc662597f1475118371387a1 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 26 May 2020 16:05:23 +0200 Subject: [PATCH 02/11] Abschlusspruefung database changes - created table lehre.tbl_abschlusspruefung_antritt - added protokoll,endezeit,pruefungsantritt_kurzbz,freigabedatum to lehre.tbl_abschlusspruefung --- system/dbupdate_3.3.php | 58 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index df4a1e77e..8d7f077ca 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -4115,6 +4115,61 @@ if(!$result = @$db->db_query('SELECT "Orgform DE", "Orgform EN" FROM public.vw_m echo '
public.vw_msg_vars added'; } +// TABLE lehre.tbl_abschlusspruefung_antritt +if (!@$db->db_query("SELECT 0 FROM lehre.tbl_abschlusspruefung_antritt WHERE 0 = 1")) +{ + $qry = ' + CREATE TABLE lehre.tbl_abschlusspruefung_antritt ( + pruefungsantritt_kurzbz character varying(20) NOT NULL, + bezeichnung character varying(64), + bezeichnung_english character varying(64) + ); + ALTER TABLE lehre.tbl_abschlusspruefung_antritt ADD CONSTRAINT pk_abschlusspruefung_antritt PRIMARY KEY (pruefungsantritt_kurzbz); + INSERT INTO lehre.tbl_abschlusspruefung_antritt(pruefungsantritt_kurzbz, bezeichnung, bezeichnung_english) VALUES (\'erstantritt\', \'Erstantritt\', \'1st Attempt\'); + INSERT INTO lehre.tbl_abschlusspruefung_antritt(pruefungsantritt_kurzbz, bezeichnung, bezeichnung_english) VALUES (\'erstewiederholung\', \'1. Wiederholung\', \'1st Retake\'); + INSERT INTO lehre.tbl_abschlusspruefung_antritt(pruefungsantritt_kurzbz, bezeichnung, bezeichnung_english) VALUES (\'zweitewiederholung\', \'2. Wiederholung\', \'2nd Retake\');'; + + if (!$db->db_query($qry)) + echo 'lehre.tbl_abschlusspruefung_antritt '.$db->db_last_error().'
'; + else + echo '
Created table lehre.tbl_abschlusspruefung_antritt'; + + // GRANT SELECT ON TABLE lehre.tbl_abschlusspruefung_antritt TO web; + $qry = 'GRANT SELECT ON TABLE lehre.tbl_abschlusspruefung_antritt TO web;'; + if (!$db->db_query($qry)) + echo 'lehre.tbl_abschlusspruefung_antritt '.$db->db_last_error().'
'; + else + echo '
Granted privileges to web on lehre.tbl_abschlusspruefung_antritt'; + + // GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE lehre.tbl_abschlusspruefung_antritt TO vilesci; + $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE lehre.tbl_abschlusspruefung_antritt TO vilesci;'; + if (!$db->db_query($qry)) + echo 'lehre.tbl_abschlusspruefung_antritt '.$db->db_last_error().'
'; + else + echo '
Granted privileges to vilesci on lehre.tbl_abschlusspruefung_antritt'; + + // COMMENT ON TABLE lehre.tbl_abschlusspruefung_antritt + $qry = 'COMMENT ON TABLE lehre.tbl_abschlusspruefung_antritt IS \'Type of Abschlusspruefung depending on number of attempts\';'; + if (!$db->db_query($qry)) + echo 'Adding comment to lehre.tbl_abschlusspruefung_antritt: '.$db->db_last_error().'
'; + else + echo '
Added comment to lehre.tbl_abschlusspruefung_antritt'; +} +// add protokoll,endezeit,pruefungsantritt_kurzbz,freigabedatum to lehre.tbl_abschlusspruefung +if(!$result = @$db->db_query("SELECT protokoll,endezeit,pruefungsantritt_kurzbz,freigabedatum FROM lehre.tbl_abschlusspruefung LIMIT 1")) +{ + $qry = "ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN protokoll text; + ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN endezeit time; + ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN pruefungsantritt_kurzbz character varying(20); + ALTER TABLE lehre.tbl_abschlusspruefung ADD CONSTRAINT fk_abschlusspruefung_antritt FOREIGN KEY (pruefungsantritt_kurzbz) REFERENCES lehre.tbl_abschlusspruefung_antritt (pruefungsantritt_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE; + ALTER TABLE lehre.tbl_abschlusspruefung ADD COLUMN freigabedatum date;"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_abschlusspruefung: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_abschlusspruefung: Spalten protokoll,endezeit,pruefungsantritt_kurzbz,freigabedatum hinzugefuegt'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -4218,7 +4273,8 @@ $tabellen=array( "fue.tbl_scrumteam" => array("scrumteam_kurzbz","bezeichnung","punkteprosprint","tasksprosprint","gruppe_kurzbz"), "fue.tbl_scrumsprint" => array("scrumsprint_id","scrumteam_kurzbz","sprint_kurzbz","sprintstart","sprintende","insertamum","insertvon","updateamum","updatevon"), "lehre.tbl_abschlussbeurteilung" => array("abschlussbeurteilung_kurzbz","bezeichnung","bezeichnung_english"), - "lehre.tbl_abschlusspruefung" => array("abschlusspruefung_id","student_uid","vorsitz","pruefer1","pruefer2","pruefer3","abschlussbeurteilung_kurzbz","akadgrad_id","pruefungstyp_kurzbz","datum","uhrzeit","sponsion","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","note"), + "lehre.tbl_abschlusspruefung" => array("abschlusspruefung_id","student_uid","vorsitz","pruefer1","pruefer2","pruefer3","abschlussbeurteilung_kurzbz","akadgrad_id","pruefungstyp_kurzbz","datum","uhrzeit","sponsion","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","note","protokoll","endezeit","pruefungsantritt_kurzbz","freigabedatum"), + "lehre.tbl_abschlusspruefung_antritt" => array("pruefungsantritt_kurzbz","bezeichnung","bezeichnung_english"), "lehre.tbl_akadgrad" => array("akadgrad_id","akadgrad_kurzbz","studiengang_kz","titel","geschlecht"), "lehre.tbl_anrechnung" => array("anrechnung_id","prestudent_id","lehrveranstaltung_id","begruendung_id","lehrveranstaltung_id_kompatibel","genehmigt_von","insertamum","insertvon","updateamum","updatevon","ext_id"), "lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"), From b56b5af5616bd5a0d7ce04d6ebe0ea87b73344e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 27 May 2020 11:36:06 +0200 Subject: [PATCH 03/11] =?UTF-8?q?Abschlusspr=C3=BCfungen=20im=20FAS=20f?= =?UTF-8?q?=C3=BCr=20digitales=20Pr=C3=BCfungsprotokoll=20adaptiert=20-=20?= =?UTF-8?q?Pr=C3=BCfungsantritt=20kann=20im=20FAS=20gesetzt=20werden=20-?= =?UTF-8?q?=20Freigabestatus=20des=20Protokolls=20wird=20im=20FAS=20angeze?= =?UTF-8?q?igt=20-=20Sortierung=20der=20Pr=C3=BCfungsantritte=20hinzugef?= =?UTF-8?q?=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/student/studentDBDML.php | 3 + .../student/studentabschlusspruefung.js.php | 6 + .../studentabschlusspruefungoverlay.xul.php | 45 +++++-- include/abschlusspruefung.class.php | 32 ++++- include/abschlusspruefung_antritt.class.php | 117 ++++++++++++++++++ rdf/abschlusspruefung.rdf.php | 10 ++ rdf/abschlusspruefung_antritt.rdf.php | 76 ++++++++++++ system/dbupdate_3.3.php | 9 +- 8 files changed, 283 insertions(+), 15 deletions(-) create mode 100644 include/abschlusspruefung_antritt.class.php create mode 100644 rdf/abschlusspruefung_antritt.rdf.php diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 8ec746015..2345141c7 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -3764,6 +3764,9 @@ if(!$error) $pruefung->pruefer2 = $_POST['pruefer2']; $pruefung->pruefer3 = $_POST['pruefer3']; $pruefung->abschlussbeurteilung_kurzbz = $_POST['abschlussbeurteilung_kurzbz']; + if(isset($_POST['pruefungsantritt_kurzbz'])) + $pruefung->pruefungsantritt_kurzbz = $_POST['pruefungsantritt_kurzbz']; + $pruefung->note = $_POST['notekommpruef']; $pruefung->akadgrad_id = $_POST['akadgrad_id']; $pruefung->pruefungstyp_kurzbz = $_POST['pruefungstyp_kurzbz']; diff --git a/content/student/studentabschlusspruefung.js.php b/content/student/studentabschlusspruefung.js.php index cac9cb78a..caaa32051 100644 --- a/content/student/studentabschlusspruefung.js.php +++ b/content/student/studentabschlusspruefung.js.php @@ -163,6 +163,7 @@ function StudentAbschlusspruefungDetailDisableFields(val) document.getElementById('student-abschlusspruefung-menulist-pruefer2').disabled=val; document.getElementById('student-abschlusspruefung-menulist-pruefer3').disabled=val; document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').disabled=val; + document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').disabled=val; document.getElementById('student-abschlusspruefung-menulist-notekommpruef').disabled=val; document.getElementById('student-abschlusspruefung-menulist-akadgrad').disabled=val; document.getElementById('student-abschlusspruefung-menulist-typ').disabled=val; @@ -186,6 +187,7 @@ function StudentAbschlusspruefungResetFields() document.getElementById('student-abschlusspruefung-menulist-pruefer2').value=''; document.getElementById('student-abschlusspruefung-menulist-pruefer3').value=''; document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value=''; + document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value=''; document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value=''; //document.getElementById('student-abschlusspruefung-menulist-akadgrad').value=''; //document.getElementById('student-abschlusspruefung-menulist-typ').value='Bachelor'; @@ -342,6 +344,7 @@ function StudentAbschlusspruefungAuswahl() pruefer3 = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefer3" )); pruefer3_nachname = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefer3_nachname" )); abschlussbeurteilung_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#abschlussbeurteilung_kurzbz" )); + pruefungsantritt_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#pruefungsantritt_kurzbz" )); notekommpruef = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#notekommpruef" )); akadgrad_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#akadgrad_id" )); datum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#datum" )); @@ -395,6 +398,7 @@ function StudentAbschlusspruefungAuswahl() MenulistSelectItemOnValue('student-abschlusspruefung-menulist-pruefer2', pruefer2); MenulistSelectItemOnValue('student-abschlusspruefung-menulist-pruefer3', pruefer3); document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value=abschlussbeurteilung_kurzbz; + document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value=pruefungsantritt_kurzbz; document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value=notekommpruef; document.getElementById('student-abschlusspruefung-menulist-akadgrad').value=akadgrad_id; document.getElementById('student-abschlusspruefung-datum-datum').value=datum; @@ -424,6 +428,7 @@ function StudentAbschlusspruefungSpeichern() var pruefer2 = MenulistGetSelectedValue('student-abschlusspruefung-menulist-pruefer2'); var pruefer3 = MenulistGetSelectedValue('student-abschlusspruefung-menulist-pruefer3'); var abschlussbeurteilung_kurzbz = document.getElementById('student-abschlusspruefung-menulist-abschlussbeurteilung').value; + var pruefungsantritt_kurzbz = document.getElementById('student-abschlusspruefung-menulist-pruefungsantritt').value; var notekommpruef = document.getElementById('student-abschlusspruefung-menulist-notekommpruef').value; var akadgrad_id = document.getElementById('student-abschlusspruefung-menulist-akadgrad').value; var datum = document.getElementById('student-abschlusspruefung-datum-datum').value; @@ -482,6 +487,7 @@ function StudentAbschlusspruefungSpeichern() req.add('pruefer2', pruefer2); req.add('pruefer3', pruefer3); req.add('abschlussbeurteilung_kurzbz', abschlussbeurteilung_kurzbz); + req.add('pruefungsantritt_kurzbz', pruefungsantritt_kurzbz); req.add('notekommpruef', notekommpruef); req.add('akadgrad_id', akadgrad_id); req.add('datum', ConvertDateToISO(datum)); diff --git a/content/student/studentabschlusspruefungoverlay.xul.php b/content/student/studentabschlusspruefungoverlay.xul.php index 3c915e270..e281a7a16 100644 --- a/content/student/studentabschlusspruefungoverlay.xul.php +++ b/content/student/studentabschlusspruefungoverlay.xul.php @@ -97,6 +97,14 @@ echo ''; class="sortDirectionIndicator" sort="rdf:http://www.technikum-wien.at/abschlusspruefung/rdf#uhrzeit" onclick="StudentAbschlusspruefungTreeSort()"/> +