diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index e6d307322..cf0c6755a 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -326,7 +326,7 @@ class InfoCenter extends Auth_Controller show_error('Person does not exist!'); $origin_page = $this->input->get(self::ORIGIN_PAGE); - if ($origin_page == self::INDEX_PAGE) + if (in_array($origin_page, array(self::INDEX_PAGE, self::ABGEWIESEN_PAGE))) { // mark person as locked for editing $result = $this->PersonLockModel->lockPerson($person_id, $this->_uid, self::APP); @@ -371,7 +371,14 @@ class InfoCenter extends Auth_Controller if (isError($result)) show_error(getError($result)); - $redirectLink = '/'.self::INFOCENTER_URI.'?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId(); + $origin_page = $this->input->get(self::ORIGIN_PAGE); + + if ($origin_page === self::ABGEWIESEN_PAGE) + $redirectLink = self::INFOCENTER_URI. '/' .self::ABGEWIESEN_PAGE; + else + $redirectLink = '/'.self::INFOCENTER_URI; + + $redirectLink .= '?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId(); // Force reload of Dataset after Unlock $redirectLink .= '&'.self::KEEP_TABLESORTER_FILTER.'=true'; diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 8875fd4c5..ed21082e2 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -326,10 +326,12 @@ class Person_model extends DB_Model SELECT p2.person_id FROM tbl_person p1 + JOIN tbl_prestudent ps ON p1.person_id = ps.person_id INNER JOIN ( - SELECT vorname, nachname, gebdatum, person_id - FROM tbl_person - ) p2 + SELECT vorname, nachname, gebdatum, person.person_id + FROM tbl_person person + JOIN tbl_prestudent sps ON person.person_id = sps.person_id + ) p2 ON (lower(p1.vorname) = lower(p2.vorname) AND lower(p1.nachname) = lower(p2.nachname) AND p1.gebdatum = p2.gebdatum) WHERE p1.person_id != p2.person_id AND (p1.person_id = ?)"; diff --git a/application/views/system/infocenter/infocenterAbgewiesenData.php b/application/views/system/infocenter/infocenterAbgewiesenData.php index d09f0f41e..2307ea87e 100644 --- a/application/views/system/infocenter/infocenterAbgewiesenData.php +++ b/application/views/system/infocenter/infocenterAbgewiesenData.php @@ -1,6 +1,7 @@ config->load('infocenter'); + $APP = '\'infocenter\''; $ABGEWIESENEN_STATUS = '\'Abgewiesener\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); @@ -17,6 +18,8 @@ $query = ' p.nachname AS "Nachname", so.studiengangkurzbzlang as "Studiengang", pss.insertamum AS "AbgewiesenAm", + pl.zeitpunkt AS "LockDate", + pl.lockuser AS "LockUser", ( SELECT l.zeitpunkt FROM system.tbl_log l @@ -54,6 +57,15 @@ $query = ' JOIN public.tbl_studiengang sg USING(studiengang_kz) JOIN lehre.tbl_studienplan sp USING(studienplan_id) JOIN lehre.tbl_studienordnung so USING(studienordnung_id) + LEFT JOIN ( + SELECT tpl.person_id, + tpl.zeitpunkt, + sp.nachname AS lockuser + FROM system.tbl_person_lock tpl + JOIN public.tbl_benutzer sb USING (uid) + JOIN public.tbl_person sp ON sb.person_id = sp.person_id + WHERE tpl.app = '.$APP.' + ) pl USING(person_id) WHERE pss.status_kurzbz = '. $ABGEWIESENEN_STATUS .' AND pss.studiensemester_kurzbz = '. $STUDIENSEMESTER .' AND (sg.typ IN ('. $STUDIENGANG_TYP .') @@ -70,6 +82,7 @@ $query = ' 'requiredPermissions' => 'infocenter', 'datasetRepresentation' => 'tablesorter', 'checkboxes' => 'PersonId', + 'additionalColumns' => array('Details'), 'columnsAliases' => array( 'PersonId', 'PreStudentID', @@ -77,11 +90,23 @@ $query = ' ucfirst($this->p->t('person', 'nachname')), ucfirst($this->p->t('lehre', 'studiengang')), ucfirst($this->p->t('infocenter', 'abgewiesenam')), + ucfirst($this->p->t('global', 'sperrdatum')), + ucfirst($this->p->t('global', 'gesperrtVon')), ucfirst($this->p->t('global', 'nachricht')), ucfirst($this->p->t('infocenter', 'kaution')) ), 'formatRow' => function($datasetRaw) { + /* NOTE: Dont use $this here for PHP Version compatibility */ + $datasetRaw->{'Details'} = sprintf( + 'Details', + site_url('system/infocenter/InfoCenter/showDetails'), + $datasetRaw->{'PersonId'}, + 'abgewiesen', + (isset($_GET['fhc_controller_id']) ? $_GET['fhc_controller_id'] : ''), + (isset($_GET['filter_id']) ? $_GET['filter_id'] : '') + ); + if ($datasetRaw->{'Nachricht'} === null) { $datasetRaw->{'Nachricht'} = 'Nein'; @@ -103,10 +128,29 @@ $query = ' { $datasetRaw->{'Kaution'} = 'Offen'; } + + if ($datasetRaw->{'LockDate'} == null) + { + $datasetRaw->{'LockDate'} = '-'; + } + + if ($datasetRaw->{'LockUser'} == null) + { + $datasetRaw->{'LockUser'} = '-'; + } $datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i'); return $datasetRaw; + }, + + 'markRow' => function($datasetRaw) { + + if ($datasetRaw->LockDate != null) + { + return FilterWidget::DEFAULT_MARK_ROW_CLASS; + } } + ); echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 401e34099..c61bb3cd2 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -57,10 +57,11 @@ if (isset($lockedby)): echo $this->p->t('global', 'wirdBearbeitetVon').': '; echo $lockedby; - if ($origin_page == 'index'): + if (in_array($origin_page, array('index', 'abgewiesen'))): $unlockpath = 'unlockPerson/'.$stammdaten->person_id; $unlockpath .= '?fhc_controller_id='.$fhc_controller_id; $unlockpath .= '&filter_id='.$prev_filter_id; + $unlockpath .= '&origin_page='.$origin_page; ?>    diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index 6f47992a1..9f6cd4fb7 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -161,7 +161,7 @@ if(!isset($_SESSION['pruefling_id'])) $pruefling = new pruefling(); $pruefling->load($_SESSION['pruefling_id']); -if ($pruefling->gesperrt === 't') +if ($pruefling->isGesperrt($_SESSION['pruefling_id'])) die(""); if (!in_array($gebiet_id, $_SESSION['alleGebiete'])) diff --git a/cis/testtool/login.php b/cis/testtool/login.php index 0b114b8c5..0ff84f4a0 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -362,6 +362,8 @@ if ((isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) && $pruefling->idnachweis = ''; $pruefling->registriert = date('Y-m-d H:i:s'); $pruefling->prestudent_id = $_SESSION['prestudent_id']; + $pruefling->gesperrt = $pruefling->isGesperrt(null, $_SESSION['prestudent_id']); + if ($pruefling->save()) { $_SESSION['pruefling_id']=$pruefling->pruefling_id; @@ -385,6 +387,7 @@ if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) $pruefling->registriert = date('Y-m-d H:i:s'); $pruefling->prestudent_id = $_SESSION['prestudent_id']; $pruefling->semester = $_POST['semester']; + $pruefling->gesperrt = $pruefling->isGesperrt(null, $_SESSION['prestudent_id']); if ($pruefling->save()) { $_SESSION['pruefling_id']=$pruefling->pruefling_id; diff --git a/include/pruefling.class.php b/include/pruefling.class.php index fc64d90c4..efe660ca9 100644 --- a/include/pruefling.class.php +++ b/include/pruefling.class.php @@ -108,12 +108,13 @@ class pruefling extends basis_db if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE { - $qry = 'BEGIN;INSERT INTO testtool.tbl_pruefling (studiengang_kz, idnachweis, registriert, prestudent_id, semester) VALUES('. + $qry = 'BEGIN;INSERT INTO testtool.tbl_pruefling (studiengang_kz, idnachweis, registriert, prestudent_id, semester, gesperrt) VALUES('. $this->db_add_param($this->studiengang_kz).",". $this->db_add_param($this->idnachweis).",". $this->db_add_param($this->registriert).",". $this->db_add_param($this->prestudent_id).",". - $this->db_add_param($this->semester).");"; + $this->db_add_param($this->semester).",". + $this->db_add_param($this->gesperrt, FHC_BOOLEAN).");"; } else { @@ -122,7 +123,8 @@ class pruefling extends basis_db ' idnachweis='.$this->db_add_param($this->idnachweis).','. ' registriert='.$this->db_add_param($this->registriert).','. ' semester='.$this->db_add_param($this->semester).','. - ' prestudent_id='.$this->db_add_param($this->prestudent_id, FHC_INTEGER). + ' prestudent_id='.$this->db_add_param($this->prestudent_id, FHC_INTEGER).','. + ' gesperrt='.$this->db_add_param($this->gesperrt, FHC_BOOLEAN). " WHERE pruefling_id=".$this->db_add_param($this->pruefling_id, FHC_INTEGER, false).";"; } @@ -557,5 +559,43 @@ class pruefling extends basis_db return false; } } + + public function isGesperrt($pruefling_id = null, $prestudent_id = null) + { + if (is_null($pruefling_id) && is_null($prestudent_id)) + { + $this->errormsg = 'Falsche Parameterübergabe'; + return false; + } + + $qry = "SELECT spruefling.gesperrt + FROM testtool.tbl_pruefling + RIGHT JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING (person_id) + JOIN public.tbl_prestudent pss ON pss.person_id = tbl_person.person_id + JOIN testtool.tbl_pruefling spruefling ON pss.prestudent_id = spruefling.prestudent_id + WHERE spruefling.gesperrt"; + + if (!is_null($pruefling_id)) + $qry .= " AND tbl_pruefling.pruefling_id = ".$this->db_add_param($pruefling_id, FHC_INTEGER); + + if (!is_null($prestudent_id)) + $qry .= " AND tbl_prestudent.prestudent_id = ".$this->db_add_param($prestudent_id, FHC_INTEGER); + + $qry .= " LIMIT 1"; + + if($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) == 0) + return false; + else + return true; + } + else + { + $this->errormsg = 'Fehler bei einer Abfrage'; + return false; + } + } } ?> diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index eba880225..2ace5e760 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -42,6 +42,7 @@ require_once('dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php'); require_once('dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php'); require_once('dbupdate_3.4/30537_anmerkung_in_tbl_rolleberechtigung.php'); require_once('dbupdate_3.4/30181_tabelle_anrechnung_neue_attribute_fuer_begruendung.php'); +require_once('dbupdate_3.4/29529_infocenter_anpassungen.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4/29529_infocenter_anpassungen.php b/system/dbupdate_3.4/29529_infocenter_anpassungen.php new file mode 100644 index 000000000..e11f3ed39 --- /dev/null +++ b/system/dbupdate_3.4/29529_infocenter_anpassungen.php @@ -0,0 +1,34 @@ +db_query("SELECT has_sequence_privilege('web', 'testtool.tbl_pruefling_pruefling_id_seq', 'UPDATE')")) +{ + + if($db->db_fetch_object($result)->has_sequence_privilege === "f") + { + $qry = "GRANT SELECT, UPDATE ON SEQUENCE testtool.tbl_pruefling_pruefling_id_seq to web;"; + + if(!$db->db_query($qry)) + echo 'testtool.tbl_pruefling Berechtigungen: '.$db->db_last_error().'
'; + else + echo '
Web User fuer testtool.tbl_pruefling berechtigt'; + } +} + +// Update Berechtigungen fuer vilesci User erteilen fuer tbl_pruefling_pruefling_id_seq +if($result = @$db->db_query("SELECT has_sequence_privilege('vilesci', 'testtool.tbl_pruefling_pruefling_id_seq', 'UPDATE')")) +{ + if($db->db_fetch_object($result)->has_sequence_privilege === "f") + { + $qry = "GRANT SELECT, UPDATE ON SEQUENCE testtool.tbl_pruefling_pruefling_id_seq to vilesci;"; + + if(!$db->db_query($qry)) + echo 'testtool.tbl_pruefling Berechtigungen: '.$db->db_last_error().'
'; + else + echo '
vilesci User fuer testtool.tbl_pruefling berechtigt'; + } +} + + diff --git a/system/filtersupdate.php b/system/filtersupdate.php index dcf01b577..cc9abfb98 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -520,7 +520,8 @@ $filters = array( {"name": "Studiengang"}, {"name": "AbgewiesenAm"}, {"name": "Nachricht"}, - {"name": "Kaution"} + {"name": "Kaution"}, + {"name": "LockUser"} ], "filters": [] } diff --git a/vilesci/stammdaten/auswertung_fhtw.php b/vilesci/stammdaten/auswertung_fhtw.php index 616369d8f..e52235fda 100644 --- a/vilesci/stammdaten/auswertung_fhtw.php +++ b/vilesci/stammdaten/auswertung_fhtw.php @@ -490,22 +490,67 @@ if ($rtprueflingEntSperren) exit(); } - if (isset($_POST['prestudent_id']) && is_numeric($_POST['prestudent_id']) + if (isset($_POST['person_id']) && is_numeric($_POST['person_id']) && isset($_POST['art'])) { - $qry = "UPDATE testtool.tbl_pruefling SET gesperrt =" . $db->db_add_param($_POST['art'], 'BOOLEAN') . " - WHERE prestudent_id IN - (SELECT prestudent_id FROM public.tbl_prestudent ps - JOIN public.tbl_person tp ON tp.person_id = ps.person_id - WHERE tp.person_id = (SELECT person_id FROM public.tbl_prestudent sps WHERE sps.prestudent_id = " . $db->db_add_param($_POST['prestudent_id']) . "));"; + $qry = "SELECT pruefling_id + FROM testtool.tbl_pruefling + WHERE prestudent_id IN ( + SELECT prestudent_id + FROM public.tbl_prestudent + WHERE person_id = ". $db->db_add_param($_POST['person_id']) . " + )"; if ($result = $db->db_query($qry)) { - $msg = $_POST['art'] === 'false' ? 'Pruefling wurde gesperrt' : 'Pruefling wurde freigeschaltet'; - echo json_encode(array( - 'status' => 'ok', - 'msg' => $msg)); - exit(); + if ($db->db_num_rows($result) === 0) + { + $ps = new prestudent(); + $ps->getPrestudenten($_POST['person_id']); + + $prestudent = new prestudent($ps->result[0]->prestudent_id); + $prestudent->getLastStatus($prestudent->prestudent_id); + + $pruefling = new pruefling(); + $pruefling->new = true; + $pruefling->studiengang_kz = $prestudent->studiengang_kz; + $pruefling->registriert = date('Y-m-d H:i:s'); + $pruefling->semester = $prestudent->ausbildungssemester; + $pruefling->prestudent_id = $prestudent->prestudent_id; + $pruefling->gesperrt = true; + + $resultSperre = $pruefling->save(); + } + else + { + $pruefling_ids = array(); + + while ($row = $db->db_fetch_object($result)) + $pruefling_ids[] = $row->pruefling_id; + + $qry = "UPDATE testtool.tbl_pruefling + SET gesperrt =" . $db->db_add_param($_POST['art'], 'BOOLEAN') . " + WHERE pruefling_id IN (" . $db->db_implode4SQL($pruefling_ids) . ")"; + + $resultSperre = $db->db_query($qry); + } + + if ($resultSperre) + { + $msg = $_POST['art'] === 'false' ? 'Pruefling wurde gesperrt' : 'Pruefling wurde freigeschaltet'; + echo json_encode(array( + 'status' => 'ok', + 'msg' => $msg)); + exit(); + } + else + { + echo json_encode(array( + 'status' => 'fehler', + 'msg' => 'Fehler beim speichern der Daten' + )); + exit(); + } } else { @@ -1660,6 +1705,7 @@ if (isset($_REQUEST['reihungstest']) || isset($_POST['rtauswsubmit'])) } $gebiete_arr = array(); + $gesperrt_arr = array(); while ($row = $db->db_fetch_object($result)) { // Hack für BEW-BB, wenn auch BEW-DL-Ergebnisse vorliegen @@ -1676,7 +1722,10 @@ if (isset($_REQUEST['reihungstest']) || isset($_POST['rtauswsubmit'])) $ergebnis[$row->prestudent_id] = new stdClass(); $gebiete_arr[$row->prestudent_id] = array(); } - + + if (!isset($gesperrt_arr[$row->person_id])) + $gesperrt_arr[$row->person_id] = new stdClass(); + $ergebnis[$row->prestudent_id]->prestudent_id = $row->prestudent_id; $ergebnis[$row->prestudent_id]->person_id = $row->person_id; $ergebnis[$row->prestudent_id]->reihungstest_id = $row->reihungstest_id; @@ -1688,7 +1737,6 @@ if (isset($_REQUEST['reihungstest']) || isset($_POST['rtauswsubmit'])) $ergebnis[$row->prestudent_id]->geschlecht = $row->geschlecht; $ergebnis[$row->prestudent_id]->idnachweis = $row->idnachweis; $ergebnis[$row->prestudent_id]->registriert = $row->registriert; - $ergebnis[$row->prestudent_id]->gesperrt = $row->gesperrt; $ergebnis[$row->prestudent_id]->stg_kurzbz = $row->stg_kurzbz; $ergebnis[$row->prestudent_id]->stg_bez = $row->stg_bez; $ergebnis[$row->prestudent_id]->ausbildungssemester = $row->ausbildungssemester; @@ -1700,6 +1748,13 @@ if (isset($_REQUEST['reihungstest']) || isset($_POST['rtauswsubmit'])) $ergebnis[$row->prestudent_id]->teilgenommen = $db->db_parse_bool($row->teilgenommen); $ergebnis[$row->prestudent_id]->qualifikationskurs = $db->db_parse_bool($row->qualifikationskurs); $ergebnis[$row->prestudent_id]->letzter_status = $row->letzter_status; + $ergebnis[$row->prestudent_id]->gesperrt = $row->gesperrt; + + $gesperrt = $db->db_parse_bool($row->gesperrt); + if (!isset($gesperrt_arr[$row->person_id]->gesperrt) || ($gesperrt_arr[$row->person_id]->gesperrt !== true && $gesperrt === true)) + { + $gesperrt_arr[$row->person_id]->gesperrt = $gesperrt; + } if (!isset($ergebnis[$row->prestudent_id]->gebiet[$row->gebiet_id])) { @@ -2450,7 +2505,7 @@ else }); } } - function prueflingEntSperren(prestudent_id, name, art) + function prueflingEntSperren(person_id, name, art) { if (art === true) var text = "sperren"; @@ -2460,7 +2515,7 @@ else if (confirm("Wollen Sie den Studenten "+ name + " wirklich " + text + "?")) { data = { - prestudent_id: prestudent_id, + person_id: person_id, art: art, rtprueflingEntSperren: true }; @@ -2474,21 +2529,31 @@ else { if(data.status !== "ok") { - $("#msgbox").attr("class","alert alert-danger"); - $("#msgbox").show(); - $("#msgbox").html(data["msg"]); + if (data.status === "warning") + { + $("#msgbox").attr("class","alert alert-warning"); + $("#msgbox").show(); + $("#msgbox").html(data["msg"]); + $("#msgbox").html(data["msg"]).delay(2000).fadeOut(); + } + else + { + $("#msgbox").attr("class","alert alert-danger"); + $("#msgbox").show(); + $("#msgbox").html(data["msg"]); + } } else { if (art === true) { - $("#prueflingentsperren_" + prestudent_id).removeClass("hidden"); - $("#prueflingsperren_" + prestudent_id).addClass("hidden"); + $(".prueflingentsperren_" + person_id).removeClass("hidden"); + $(".prueflingsperren_" + person_id).addClass("hidden"); } else if (art === false) { - $("#prueflingsperren_" + prestudent_id).removeClass("hidden"); - $("#prueflingentsperren_" + prestudent_id).addClass("hidden"); + $(".prueflingsperren_" + person_id).removeClass("hidden"); + $(".prueflingentsperren_" + person_id).addClass("hidden"); } } }, @@ -3318,10 +3383,10 @@ else echo " -
+ - + ";