diff --git a/application/controllers/api/frontend/v1/organisation/Studienjahr.php b/application/controllers/api/frontend/v1/organisation/Studienjahr.php new file mode 100644 index 000000000..cdbb524c7 --- /dev/null +++ b/application/controllers/api/frontend/v1/organisation/Studienjahr.php @@ -0,0 +1,80 @@ + self::PERM_LOGGED, + 'getNext' => self::PERM_LOGGED + ) + ); + // Load model StudiensemesterModel + $this->load->model('organisation/studienjahr_model', 'StudienjahrModel'); + } + + /** + * Get all Studienjahre. + * + * @param null|string $order Sorting order for the Studienjahr, 'asc' or 'desc'. Defaults to 'asc'. + * @param null|string $start Starting Studienjahre with given studienjahr_kurzbz + */ + public function getAll() + { + $order = $this->input->get('order'); + $start = $this->input->get('studienjahr_kurzbz'); + + if (strcasecmp($order, 'DESC') == 0) { + $this->StudienjahrModel->addOrder('studienjahr_kurzbz', 'DESC'); + } else { + $this->StudienjahrModel->addOrder('studienjahr_kurzbz', 'ASC'); + } + + if ($start) { + $result = $this->StudienjahrModel->loadWhere([ + 'studienjahr_kurzbz >= ' => $start + ]); + } else { + $result = $this->StudienjahrModel->load(); + } + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_DB); + } + + $this->terminateWithSuccess((getData($result) ?: [])); + } + + public function getNext() + { + $this->StudienjahrModel->addJoin('public.tbl_studiensemester', 'studienjahr_kurzbz'); + $this->StudienjahrModel->addOrder('start'); + $this->StudienjahrModel->addLimit(1); + + $result = $this->StudienjahrModel->loadWhere(['start >' => 'NOW()']); + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_DB); + } + + $this->terminateWithSuccess(current(getData($result))); + } +} diff --git a/application/controllers/api/frontend/v1/organisation/Studiensemester.php b/application/controllers/api/frontend/v1/organisation/Studiensemester.php index 72a449aaa..bb56ea71a 100644 --- a/application/controllers/api/frontend/v1/organisation/Studiensemester.php +++ b/application/controllers/api/frontend/v1/organisation/Studiensemester.php @@ -24,7 +24,8 @@ class Studiensemester extends FHCAPI_Controller parent::__construct( array( 'getAll' => self::PERM_LOGGED, - 'getAktNext' => self::PERM_LOGGED + 'getAktNext' => self::PERM_LOGGED, + 'getStudienjahrByStudiensemester' => self::PERM_LOGGED ) ); // Load model StudiensemesterModel @@ -115,4 +116,40 @@ class Studiensemester extends FHCAPI_Controller $this->terminateWithSuccess((getData($result) ?: '')); } + + /** + * Get Studienjahr by Studiensemester. + * input param semester: studiensemester_kurzbz + */ + public function getStudienjahrByStudiensemester() + { + $semester = $this->input->get('semester'); + + $studienjahrObj = null; + + if (!is_numeric($semester)) + { + $this->StudiensemesterModel->addSelect('studienjahr_kurzbz'); + $result = $this->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz =' => $semester)); + } + + if (hasData($result)) + { + $studienjahr = getData($result)[0]->studienjahr_kurzbz; + $startstudienjahr = substr($studienjahr, 0, 4); + $endstudienjahr = substr($studienjahr, 0, 2) . substr($studienjahr, -2); + + $studienjahrObj = new StdClass(); + + $studienjahrObj->studienjahr_kurzbz = $studienjahr; + $studienjahrObj->startstudienjahr = $startstudienjahr; + $studienjahrObj->endstudienjahr= $endstudienjahr; + } + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_DB); + } + + $this->terminateWithSuccess((getData(success($studienjahrObj)))); + } } diff --git a/application/controllers/jobs/OneTimeMessages.php b/application/controllers/jobs/OneTimeMessages.php index 525f63c3b..0e49ca8a5 100644 --- a/application/controllers/jobs/OneTimeMessages.php +++ b/application/controllers/jobs/OneTimeMessages.php @@ -52,6 +52,7 @@ class OneTimeMessages extends JOB_Controller JOIN public.tbl_prestudentstatus ps USING (prestudent_id) JOIN public.tbl_studiengang s USING (studiengang_kz) WHERE get_rolle_prestudent(ps.prestudent_id, NULL) = \'Wartender\' + AND ps.status_kurzbz = \'Wartender\' AND ps.studiensemester_kurzbz = ? AND ps.datum <= NOW() - \''.$days.' days\'::interval AND s.typ = ? diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 9b2532b4b..6dd214fbb 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -821,7 +821,7 @@ class ReihungstestJob extends JOB_Controller JOIN lehre.tbl_studienordnung USING (studienordnung_id) JOIN PUBLIC.tbl_studiengang ON (tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz) WHERE get_rolle_prestudent (tbl_prestudent.prestudent_id, ?) IN ('Aufgenommener','Bewerber','Wartender','Abgewiesener') - AND studiensemester_kurzbz = ? + AND studiensemester_kurzbz = ? AND tbl_studiengang.typ IN ('b', 'm') ) SELECT * FROM prst @@ -861,7 +861,7 @@ class ReihungstestJob extends JOB_Controller { // Alle niedrigeren Prios laden $qryNiedrPrios = " - SELECT DISTINCT + SELECT DISTINCT ON(prestudent_id) get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') AS laststatus, tbl_studienplan.orgform_kurzbz, tbl_person.nachname, @@ -880,7 +880,7 @@ class ReihungstestJob extends JOB_Controller AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."' AND tbl_studiengang.typ IN ('b', 'm') AND priorisierung > ".$row_ps->priorisierung." - ORDER BY studiengang_kz, laststatus + ORDER BY prestudent_id, studiengang_kz, laststatus, tbl_prestudentstatus.datum DESC "; // Wenn der letzte Status "Aufgenommener" ist, alle niedrigeren Prios auf "Abgewiesen" setzen @@ -976,7 +976,7 @@ class ReihungstestJob extends JOB_Controller FROM public.tbl_konto WHERE person_id = " . $row_ps->person_id . " AND studiensemester_kurzbz = '" . $row_ps->studiensemester_kurzbz . "' - AND buchungstyp_kurzbz = 'StudiengebuehrAnzahlung'"; + AND buchungstyp_kurzbz IN ('StudiengebuehrAnzahlung','KautionDrittStaat')"; $resultKautionExists = $db->execReadOnlyQuery($qryKautionExists); if (hasdata($resultKautionExists)) diff --git a/application/libraries/PermissionLib.php b/application/libraries/PermissionLib.php index c6e693666..42502f999 100644 --- a/application/libraries/PermissionLib.php +++ b/application/libraries/PermissionLib.php @@ -109,7 +109,7 @@ class PermissionLib foreach($oe_kurzbz as $value) { - $results[] = $this->isBerechtigt($berechtigung_kurzbz, $value, $art, $kostenstelle_id); + $results[] = $this->isBerechtigt($berechtigung_kurzbz, $art, $value, $kostenstelle_id); } if(!in_array(true, $results)) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 0a48965b5..056fb45d7 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -16,145 +16,21 @@ class Lehrveranstaltung_model extends DB_Model } /** - * Get Lehrveranstaltungen by eventQuery string. Use with autocomplete event queries. - * @param $eventQuery String - * @param string $studiensemester_kurzbz Filter by Studiensemester - * @param array $oes Filter by Organisationseinheiten - * @return array - */ - public function getAutocompleteSuggestions($eventQuery, $studiensemester_kurzbz = null, $oes = null) - { - $subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes); - $params = []; - - /* filter by input string */ - if (is_string($eventQuery)) { - $subQry.= ' AND lv.bezeichnung ILIKE ?'; - $params[] = '%' . $eventQuery . '%'; - } - - $qry = 'SELECT DISTINCT ON (lehrveranstaltung_id) * FROM ('. $subQry. ') AS tmp'; - - return $this->execQuery($qry, $params); - } - - /** - * Get Lehrveranstaltungen with its Stg, OE and OE-type. - * Filter by Studiensemester and Organisationseinheiten if necessary. - * @param $eventQuery String - * @param string $studiensemester_kurzbz Filter by Studiensemester - * @param array $oes Filter by Organisationseinheiten - * @param array $lv_ids Filter by Lehrveranstaltung-Ids - * @return array - */ - public function getLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lv_ids = null) - { - $subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes); - $qry = 'SELECT * FROM ('. $subQry. ') AS tmp'; - - if (isset($lv_ids) && is_array($lv_ids)) - { - /* filter by lv_ids */ - $implodedLvIds = "'". implode("', '", $lv_ids). "'"; - $qry.= ' WHERE lehrveranstaltung_id IN ('. $implodedLvIds. ')'; - } - - $qry.= ' ORDER BY stg_typ_kurzbz, orgform_kurzbz DESC'; - - return $this->execQuery($qry); - } - - /** - * Get basic query to retrieve Lehrveranstaltungen according to the Orgforms and Ausbildungssemesters actual Studienplan. - * - * @return string - */ - private function _getQryLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lehrtyp_kurzbz = 'lv') - { - $qry = ' - SELECT - lv.oe_kurzbz AS lv_oe_kurzbz, - CASE - WHEN oe.organisationseinheittyp_kurzbz = \'Kompetenzfeld\' THEN (\'KF \' || oe.bezeichnung) - WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung) - ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung) - END AS lv_oe_bezeichnung, - stplsem.studiensemester_kurzbz, - studienordnung_id, - sto.studiengang_kz, - stpl.studienplan_id, - stplsem.semester, - stpl.orgform_kurzbz, - upper(stg.typ || stg.kurzbz) AS stg_typ_kurzbz, - stg.bezeichnung AS stg_bezeichnung, - stgtyp.bezeichnung AS stg_typ_bezeichnung, - lv.lehrveranstaltung_id, - lv.semester, - lv.bezeichnung AS lv_bezeichnung, - ( - -- comma seperated string of all lehreinheitgruppen - SELECT string_agg(bezeichnung, \', \') AS lehreinheitgruppe_bezeichnung - FROM( - -- distinct bezeichnung, as may come multiple times from different lehreinheiten - SELECT DISTINCT ON (studiengang_kz, bezeichnung) studiengang_kz, bezeichnung FROM - ( - -- distinct lehreinheitgruppe, as may come multiple times from different lehrform - SELECT DISTINCT ON (legr.lehreinheitgruppe_id) legr.studiengang_kz, - -- get Spezialgruppe or Lehrverbandgruppe - COALESCE( - legr.gruppe_kurzbz, - CONCAT( UPPER(stg1.typ), UPPER(stg1.kurzbz), \'-\', legr.semester, legr.verband, legr.gruppe ) - ) as bezeichnung - FROM lehre.tbl_lehreinheitgruppe legr - JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung lv1 USING (lehrveranstaltung_id) - JOIN public.tbl_studiengang stg1 ON stg1.studiengang_kz = legr.studiengang_kz - WHERE lv1.lehrveranstaltung_id = lv.lehrveranstaltung_id - AND le.studiensemester_kurzbz = stplsem.studiensemester_kurzbz - ) AS lehreinheitgruppen - GROUP BY studiengang_kz, bezeichnung - ORDER BY studiengang_kz DESC - ) AS uniqueLehreinheitgruppen_bezeichnung - ) AS lehreinheitgruppen_bezeichnung - FROM - lehre.tbl_studienplan stpl - JOIN lehre.tbl_studienordnung sto USING (studienordnung_id) - JOIN lehre.tbl_studienplan_semester stplsem USING (studienplan_id) - JOIN lehre.tbl_studienplan_lehrveranstaltung stpllv ON (stpllv.studienplan_id = stpl.studienplan_id AND stpllv.semester = stplsem.semester) - JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id) - JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz) - JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz - JOIN public.tbl_studiengangstyp stgtyp ON stgtyp.typ = stg.typ - /* filter by lehrtyp_kurzbz, default is lvs only */ - WHERE - lehrtyp_kurzbz = '. $this->db->escape($lehrtyp_kurzbz); - - if (isset($studiensemester_kurzbz) && is_string($studiensemester_kurzbz)) - { - /* filter by studiensemester */ - $qry.= ' AND stplsem.studiensemester_kurzbz = '. $this->db->escape($studiensemester_kurzbz); - - } - - if (isset($oes) && is_array($oes)) - { - /* filter by organisationseinheit */ - $implodedOes = "'". implode("', '", $oes). "'"; - $qry.= ' AND lv.oe_kurzbz IN ('. $implodedOes. ')'; - } - - return $qry; - } - - /** - * Get all Templates and union with all Lehrveranstaltungen of given Studiensemester and Oes, that are assigned to - * a template. This data structure can be used for nested tabulator data tree. + * Get all Templates and its assigned Lehrveranstaltungen of given Studiensemester and Oes. + * Lvs are queried via actual Studienordnung and Studienplan. * * @param null|string $studiensemester_kurzbz * @param null|array $oes + * @param null $lehrveranstaltung_id Queries certain LV only * @return array|stdClass|null */ - public function getTemplateLvTree($studiensemester_kurzbz = null, $oes = null){ + public function getTemplateLvTree($studiensemester_kurzbz = null, $oes = null, $studienjahr_kurzbz = null){ + + if (is_string($studiensemester_kurzbz) && is_string($studienjahr_kurzbz)) + { + return error('Query not possible for both studiensemester and studienjahr'); + } + $params = []; $qry = ' WITH @@ -189,6 +65,17 @@ class Lehrveranstaltung_model extends DB_Model } + if (is_string($studienjahr_kurzbz)) { + /* filter by studiensemester */ + $params[] = $studienjahr_kurzbz; + $qry .= ' + AND stplsem.studiensemester_kurzbz IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE studienjahr_kurzbz = ? + )'; + } + if (is_array($oes)) { /* filter by organisationseinheit */ @@ -300,7 +187,15 @@ class Lehrveranstaltung_model extends DB_Model JOIN public.tbl_studiengangstyp stgtyp ON stgtyp.typ = stg.typ JOIN public.tbl_organisationseinheit oe ON oe.oe_kurzbz = lv.oe_kurzbz ORDER BY - oe.bezeichnung, lv.semester, lv.bezeichnung + -- Sort by lv.bezeichnung + lv.bezeichnung, + -- Within each group, ensure templates appear first + CASE + WHEN lv.lehrtyp_kurzbz = \'tpl\' THEN 0 + ELSE 1 + END, + -- Ensure assigend lvs follow their template, grouped by lehrveranstaltung_template_id + COALESCE(lv.lehrveranstaltung_template_id, lv.lehrveranstaltung_id) '; return $this->execQuery($qry, $params); @@ -811,6 +706,28 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($qry); } + /** + * Check if given LV is a template (Quellkurs) + * + * @param $lehrveranstaltung_id + * @return array|stdClass|void + */ + public function checkIsTemplate($lehrveranstaltung_id) + { + $this->addSelect('lehrtyp_kurzbz, lehrveranstaltung_template_id'); + $result = $this->load($lehrveranstaltung_id); + + if (isError($result)) + return error(getError($result)); + + if (hasData($result)) + { + return success( + getData($result)[0]->lehrtyp_kurzbz === 'tpl' && + getData($result)[0]->lehrveranstaltung_template_id === null + ); + } + } /** * Get ECTS Summe pro angerechnetes Quereinstiegssemester. diff --git a/application/models/organisation/Studienjahr_model.php b/application/models/organisation/Studienjahr_model.php index a6e1bc575..1686ddc48 100644 --- a/application/models/organisation/Studienjahr_model.php +++ b/application/models/organisation/Studienjahr_model.php @@ -1,4 +1,5 @@ execQuery($query); } + public function getNextStudienjahr() + { + $this->addJoin('public.tbl_studiensemester', 'studienjahr_kurzbz'); + $this->addOrder('start'); + $this->addLimit(1); + + return $this->loadWhere(['start >' => 'NOW()']); + } + public function getNextFrom($studienjahr_kurzbz) + { + $this->addLimit(1); + + return $this->loadWhere([ + 'studienjahr_kurzbz >' => $studienjahr_kurzbz + ]); + } /** * Get the current Studienjahr. During the summer term, continue using the previous Studienjahr. @@ -38,8 +55,7 @@ class Studienjahr_model extends DB_Model */ public function getLastOrAktStudienjahr($days = 60) { - if (!is_numeric($days)) - { + if (!is_numeric($days)) { $days = 60; } @@ -63,8 +79,7 @@ class Studienjahr_model extends DB_Model */ public function getAktOrNextStudienjahr($days = 62) { - if (!is_numeric($days)) - { + if (!is_numeric($days)) { $days = 62; } diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 0ea5b9328..f29ab223c 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -225,7 +225,7 @@ class Studiensemester_model extends DB_Model /** * @param string $student_uid - * + * * @return StdClass */ public function getWhereStudentHasLvs($student_uid) @@ -238,7 +238,7 @@ class Studiensemester_model extends DB_Model $this->db->where("v.lehreverzeichnis<>''"); $this->addOrder($this->dbTable . '.start'); - + return $this->loadWhere(['uid' => $student_uid, 'v.lehre' => true]); } @@ -291,6 +291,42 @@ class Studiensemester_model extends DB_Model return $studienjahrNumber; } + /** + * Get Studienjahr by Studiensemester. + * + * @param $studiensemester_kurzbz + * @return array|stdClass + */ + public function getStudienjahrByStudiensemester($studiensemester_kurzbz) + { + $studienjahrObj = null; + + if (!is_numeric($studiensemester_kurzbz)) + { + $this->StudiensemesterModel->addSelect('studienjahr_kurzbz'); + $result = $this->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz =' => $studiensemester_kurzbz)); + } + + if (hasData($result)) + { + $studienjahr = getData($result)[0]->studienjahr_kurzbz; + $startstudienjahr = substr($studienjahr, 0, 4); + $endstudienjahr = substr($studienjahr, 0, 2) . substr($studienjahr, -2); + + $studienjahrObj = new StdClass(); + + $studienjahrObj->studienjahr_kurzbz = $studienjahr; + $studienjahrObj->startstudienjahr = $startstudienjahr; + $studienjahrObj->endstudienjahr= $endstudienjahr; + } + + if (isError($result)) { + return error(getError($result)); + } + + return success($studienjahrObj); + } + /** * Holt Start und Ende des Studiensemester_kurzbz * @param studiensemester_kurzbz diff --git a/application/views/system/infocenter/infocenterAbgewiesenData.php b/application/views/system/infocenter/infocenterAbgewiesenData.php index da816b2c7..03397ff31 100644 --- a/application/views/system/infocenter/infocenterAbgewiesenData.php +++ b/application/views/system/infocenter/infocenterAbgewiesenData.php @@ -8,7 +8,7 @@ $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $LOGDATA_NAME = '\'Message sent\''; $LOGDATA_VON = '\'online\''; - $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; + $KAUTION_DRITT_STAAT = '\'KautionDrittStaat\''; $query = ' SELECT @@ -62,7 +62,7 @@ $query = ' FROM public.tbl_konto konto WHERE konto.person_id = p.person_id AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' - AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .' ) AS "Kaution" FROM public.tbl_prestudentstatus pss diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 956ad80d4..ebfd1db37 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -13,7 +13,7 @@ $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $AKTE_TYP = '\'identity\', \'zgv_bakk\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; - $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; + $KAUTION_DRITT_STAAT = '\'KautionDrittStaat\''; $ORG_NAME = '\'InfoCenter\''; $ONLINE = '\'online\''; @@ -302,7 +302,7 @@ FROM public.tbl_konto konto WHERE konto.person_id = p.person_id AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' - AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .' ) AS "Kaution" FROM public.tbl_person p LEFT JOIN ( diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 8003b42e0..27738719c 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -13,7 +13,8 @@ $ORG_NAME = '\'InfoCenter\''; $IDENTITY = '\'identity\''; $ONLINE = '\'online\''; - $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; + $KAUTION_DRITT_STAAT = '\'KautionDrittStaat\''; + $query = ' SELECT @@ -275,7 +276,7 @@ $query = ' FROM public.tbl_konto konto WHERE konto.person_id = p.person_id AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' - AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .' ) AS "Kaution" FROM public.tbl_person p LEFT JOIN ( diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index 7f9ee1288..c19b139b3 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -9,7 +9,8 @@ $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $ORG_NAME = '\'InfoCenter\''; - $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; + $KAUTION_DRITT_STAAT = '\'KautionDrittStaat\''; + $query = ' SELECT @@ -206,7 +207,7 @@ $query = ' FROM public.tbl_konto konto WHERE konto.person_id = p.person_id AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' - AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .' ) AS "Kaution" FROM public.tbl_person p LEFT JOIN ( diff --git a/cis/private/lehre/abgabe_lektor_details.php b/cis/private/lehre/abgabe_lektor_details.php index a8705e7f9..f97dfa159 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 .= " - + "; $htmlstr .= "\n"; @@ -544,7 +545,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 .= ""; } diff --git a/cis/private/lehre/abgabe_student_details.php b/cis/private/lehre/abgabe_student_details.php index 860eb7579..84ba608a1 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')."
 "; } @@ -495,7 +495,7 @@ if($command=="update" && $error!=true) $maildata['student_voller_name'] = trim($row_std->titelpre." ".$row_std->vorname." ".$row_std->nachname." ".$row_std->titelpost); $maildata['abgabetyp'] = $abgabetyp; $maildata['parbeituebersichtlink'] = "

Zur Projektarbeitsübersicht

"; - $maildata['bewertunglink'] = $num_rows_sem >= 1 && $paabgabetyp_kurzbz == 'end' ? "

Zur Beurteilung der Arbeit

" : ""; + $maildata['bewertunglink'] = $paIsCurrent && $paabgabetyp_kurzbz == 'end' ? "

Zur Beurteilung der Arbeit

" : ""; $maildata['token'] = ""; $mailres = sendSanchoMail( @@ -557,8 +557,8 @@ if($command=="update" && $error!=true) $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 . "

" : ""; + $zweitbetmaildata['bewertunglink'] = $paIsCurrent ? "

Zur Beurteilung der Arbeit

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

Zugangstoken: " . $begutachterMitToken->zugangstoken . "

" : ""; $mailres = sendSanchoMail( 'ParbeitsbeurteilungEndupload', diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php index a799c9fad..ac8cdaff4 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php @@ -241,7 +241,7 @@ if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1)) $name hat neue Noten für die Lehrveranstaltung\n\n
" . $sg->kuerzel . ' ' . $lv->semester . '.Semester - ' . $lv->bezeichnung . " " . $lv->orgform_kurzbz . " - " . $stsem . " + ' . $lv->bezeichnung . " - " .$lv->lehrform_kurzbz. " " . $lv->orgform_kurzbz . " - " . $stsem . "
eingetragen.\n

Die Noten können jetzt ins Zeugnis übernommen werden.\n"; diff --git a/cis/private/lehre/projektbeurteilungDocumentExport.php b/cis/private/lehre/projektbeurteilungDocumentExport.php new file mode 100644 index 000000000..08f7127ee --- /dev/null +++ b/cis/private/lehre/projektbeurteilungDocumentExport.php @@ -0,0 +1,26 @@ +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'] +); +die(); diff --git a/cis/private/pdfExport.php b/cis/private/pdfExport.php index ad2bb1fae..d4638d1bd 100644 --- a/cis/private/pdfExport.php +++ b/cis/private/pdfExport.php @@ -196,41 +196,35 @@ if (isset($_GET['output']) && $_GET['output'] != 'pdf') else $output = 'pdf'; -if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung')) +// Berechtigungprüfung Projektarbeit +if (isset($_GET['projektarbeit_id'])) { - if (!isset($_GET['betreuerart_kurzbz']) || !isset($_GET['person_id']) || !isset($_GET['projektarbeit_id'])) - die('Fehlerhafte Parameteruebergabe'); + $projektarbeitVorlage = new projektarbeit(); + $allePaVorlagen = $projektarbeitVorlage->getAllVorlagen(); - $projektarbeit = new projektarbeit(); - $projektarbeit->load($_GET['projektarbeit_id']); + if (!is_array($allePaVorlagen)) + die("

Fehler beim Holen der Projektarbeit Vorlagen

"); - $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.

"); - - switch ($_GET['betreuerart_kurzbz']) + if (in_array($xsl, $allePaVorlagen)) { - case 'Begutachter' : - case 'Senatsvorsitz' : - $xsl = 'ProjektBeurteilungBA'; - break; - case 'Erstbegutachter' : - $xsl = 'ProjektBeurteilungMAErst'; - break; - case 'Zweitbegutachter' : - $xsl = 'ProjektBeurteilungMAZweit'; - break; - } + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); - $allowed = true; + $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.

"); + $paBerechtigt = 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') || (isset($paBerechtigt) && $paBerechtigt === true)) { $buchungstypen = array(); if (defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN")) diff --git a/cis/testtool/admin/uebersichtFragen.php b/cis/testtool/admin/uebersichtFragen.php index 46a70305e..8a069d908 100644 --- a/cis/testtool/admin/uebersichtFragen.php +++ b/cis/testtool/admin/uebersichtFragen.php @@ -177,6 +177,9 @@ if(isset($_REQUEST['AuswahlGebiet'])) WHERE gebiet_id=".$db->db_add_param($gebiet_id)." ORDER BY studiengang"; $result = $db->db_query($qry); + + $qry_anz_fragen = "SELECT count(*) FROM testtool.tbl_frage WHERE gebiet_id=".$db->db_add_param($gebiet_id)." AND demo=false"; + $result_anz_fragen = $db->db_fetch_object($db->db_query($qry_anz_fragen)); if ($gebietdetails) { @@ -215,6 +218,10 @@ if(isset($_REQUEST['AuswahlGebiet'])) + + + + diff --git a/content/functions.js.php b/content/functions.js.php index 9b75718d1..65622f9ae 100644 --- a/content/functions.js.php +++ b/content/functions.js.php @@ -217,6 +217,24 @@ function getDataFromClipboard() return pastetext; } +// **** +// * Kopiert Inhalte in die Zwischenablage +// **** +function copyToClipboard(link) +{ + netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); + try { + const clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"] + .getService(Components.interfaces.nsIClipboardHelper); + clipboard.copyString(link); + + // Erfolgsmeldung anzeigen + alert("Link erfolgreich in die Zwischenablage kopiert.\nBitte in anderem Browser einfügen und öffnen."); + } catch (e) { + alert("Fehler beim Kopieren in die Zwischenablage: " + e); + } +} + // **** // * Oeffnet ein neues Fenster welches dann die Datei 'action' mit dem POST Parameter 'data' aufruft // **** diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 12a28b943..ad15c6879 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -355,7 +355,8 @@ if(!$error) WHERE mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND - bismelden"; + bismelden AND + lower(mitarbeiter_uid) NOT LIKE '_dummy%'"; if(count($oe_arr)>0) $qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")"; diff --git a/content/messages.js.php b/content/messages.js.php index 3e72748ec..5afc6162f 100644 --- a/content/messages.js.php +++ b/content/messages.js.php @@ -175,7 +175,22 @@ function MessagesIFrameSetHTML(val) } //Value setzen if(val!='') + { editor.contentDocument.execCommand("inserthtml", false, val); + + setTimeout(function() + { + scrollToTop(); + }, 100); + } +} + +function scrollToTop() +{ + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + editor = document.getElementById('message-wysiwyg'); + + editor.contentWindow.scrollTo(0, 0); } function MessageIFrameInit() diff --git a/content/student/studentabschlusspruefung.js.php b/content/student/studentabschlusspruefung.js.php index dfdd102d5..892ae35f0 100644 --- a/content/student/studentabschlusspruefung.js.php +++ b/content/student/studentabschlusspruefung.js.php @@ -1113,15 +1113,15 @@ function StudentAbschlusspruefungTypChange() { if(document.getElementById('student-abschlusspruefung-menulist-typ').value=='Bachelor') { - document.getElementById('student-abschlusspruefung-label-pruefer1').value='Pruefer 1'; - document.getElementById('student-abschlusspruefung-label-pruefer2').value='Pruefer 2'; + document.getElementById('student-abschlusspruefung-label-pruefer1').value='PrueferIn 1'; + document.getElementById('student-abschlusspruefung-label-pruefer2').value='PrueferIn 2'; document.getElementById('student-abschlusspruefung-menulist-pruefer3').hidden=false; document.getElementById('student-abschlusspruefung-label-pruefer3').hidden=false; } else { - document.getElementById('student-abschlusspruefung-label-pruefer1').value='Pruefer 1 (Diplomarbeit)'; - document.getElementById('student-abschlusspruefung-label-pruefer2').value='Pruefer 2'; + document.getElementById('student-abschlusspruefung-label-pruefer1').value='PrueferIn 1 (Diplomarbeit)'; + document.getElementById('student-abschlusspruefung-label-pruefer2').value='PrueferIn 2'; document.getElementById('student-abschlusspruefung-menulist-pruefer3').hidden=true; document.getElementById('student-abschlusspruefung-label-pruefer3').hidden=true; } diff --git a/content/student/studentdetailoverlay.xul.php b/content/student/studentdetailoverlay.xul.php index 4b4fbdd63..132667395 100644 --- a/content/student/studentdetailoverlay.xul.php +++ b/content/student/studentdetailoverlay.xul.php @@ -74,7 +74,7 @@ echo '';
".$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) @@ -495,7 +495,8 @@ if ($semester_benotbar && $endupload_vorhanden) } else { - $quick_info = !$semester_benotbar ? $p->t('abgabetool/aeltereParbeitBenoten') : $p->t('abgabetool/keinEnduploadErfolgt'); + $quick_info = !$semester_benotbar ? $p->t('abgabetool/aeltereParbeitBenotenQuickInfo') : $p->t('abgabetool/keinEnduploadErfolgt'); + $info_text = !$semester_benotbar ? $p->t('abgabetool/aeltereParbeitBenoten') : $p->t('abgabetool/keinEnduploadErfolgt'); $htmlstr .= "
"; $htmlstr .= ""; @@ -516,7 +517,7 @@ else } $htmlstr .= "
" . $p->t('abgabetool/titel') . ": ".$db->convert_html_chars($titel)."".(isset($quick_info) ? $quick_info : '')."".(isset($info_text) ? $info_text : '')." ".$p->t('abgabetool/studentenansicht')."
"; 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 .= " Multipleresponse: '.($gebietdetails->multipleresponse==true?'Ja':'Nein').'
Fragen im Gebiet:'.$result_anz_fragen->count.'
Gestellte Fragen: '.$gebietdetails->maxfragen.'