diff --git a/include/bisarchiv.class.php b/include/bisarchiv.class.php new file mode 100644 index 000000000..855e3c828 --- /dev/null +++ b/include/bisarchiv.class.php @@ -0,0 +1,233 @@ + + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class bisarchiv extends basis_db +{ + public $errormsg; + public $result; + + // Tabellenspalten + public $id; + public $studiensemster; + public $meldung; + public $html; + public $studiengang_kz; + public $insertamum; + public $insertvon; + public $typ; + + /** + * Konstruktor + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Prueft die Variablen auf Gueltigkeit + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + if($this->studiensemster == null || mb_strlen($this->studiensemster) > 6) + { + $this->errormsg = "Studiensemester ist ungueltig"; + return false; + } + + if($this->meldung == null) + { + $this->errormsg = "Meldung ist ungueltig"; + return false; + } + + if(empty($this->typ)) + { + $this->errormsg = "Typ ist ungueltig"; + return false; + } + + if($this->typ == "studenten") + { + if(!is_numeric($this->studiengang_kz)) + { + $this->errormsg = "Studiengangkennzahl ist ungueltig"; + return false; + } + } + else + { + if(!empty($this->studiengang_kz)) + { + $this->errormsg = "Studiengangkennzahl ist ungueltig"; + return false; + } + } + + if($this->insertvon == null) + { + $this->errormsg = "Mitarbeiter ist ungueltig"; + return false; + } + + return true; + } + + /** + * Speichert den aktuellen Datensatz in die Datenbank + * @return true wenn ok, false im Fehlerfall + */ + public function save() + { + // abbrechen wenn bereits ein Fehler aufgetreten ist + if($this->errormsg != '') + return false; + + // Variablen pruefen + if(!$this->validate()) + return false; + + $qry = "INSERT INTO bis.tbl_archiv (studiensemester, meldung, html, studiengang_kz, insertamum, insertvon, typ) VALUES (" + . $this->db_add_param($this->studiensemster) . "," + . $this->db_add_param($this->meldung) . "," + . $this->db_add_param($this->html) . "," + . $this->db_add_param($this->studiengang_kz) . "," + . "CURRENT_TIMESTAMP," + . $this->db_add_param($this->insertvon) . "," + . $this->db_add_param($this->typ) . ")"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = "Fehler beim Speichern der Daten"; + return false; + } + } + + /** + * Liest die Dateien der Meldung aus + * @return true wenn ok, false im Fehlerfall + */ + public function readFile($file, $type) + { + if(strpos($file, '..') !== false || preg_match('/\.(xml|html)$/', $file) === 0) + { + $this->errormsg = "Datei ungueltig"; + return false; + } + + $contents = null; + + if(is_readable($file)) + { + $handle = fopen($file, "r"); + $contents = fread($handle, filesize($file)); + fclose($handle); + } + else + { + $this->errormsg = "Datei kann nicht gelesen werden"; + return false; + } + + switch($type) + { + case 'xml': + $this->meldung = $contents; + return true; + case 'html': + $this->html = $contents; + return true; + default: + $this->errormsg = "Typ ist ungueltig"; + return false; + } + } + + /** + * Gibt die BIS-Daten für das gewünschte Semester zurück + * @param $sem Studiensemester + * @return true wenn ok, false im Fehlerfall + */ + public function getBisData($sem) + { + $qry = "SELECT id, meldung, html, studiengang_kz, insertamum, typ " + . "FROM bis.tbl_archiv " + . "WHERE studiensemester = " . $this->db_add_param($sem) . "" + . "ORDER BY insertamum DESC"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->result[] = $row; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Lädt die BIS-Meldung mit der angegebenen ID + * @param $id ID der Meldung + * @return true wenn ok, false im Fehlerfall + */ + public function load($id) + { + if(!is_numeric($id)) + { + $this->errormsg = 'ID muss eine gueltige Zahl sein'; + return false; + } + + $qry = "SELECT id, meldung, html, studiengang_kz, insertamum, typ " + . "FROM bis.tbl_archiv " + . "WHERE id = " . $this->db_add_param($id); + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $this->id = $id; + $this->meldung = $row->meldung; + $this->html = $row->html; + $this->studiengang_kz = $row->studiengang_kz; + $this->insertamum = $row->insertamum; + $this->typ = $row->typ; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + +} \ No newline at end of file diff --git a/system/checksystem.php b/system/checksystem.php index 5fe67ca16..6681efdc9 100644 --- a/system/checksystem.php +++ b/system/checksystem.php @@ -2437,9 +2437,52 @@ if(!$result = @$db->db_query("SELECT oeffentlich FROM public.tbl_reihungstest LI echo ' public.tbl_reihungstest: Spalte oeffentlich hinzugefuegt!
'; } +// BIS-Archiv +if(!$result = @$db->db_query("SELECT 1 FROM bis.tbl_archiv LIMIT 1;")) +{ + $qry = " + + CREATE TABLE bis.tbl_archiv + ( + id integer, + studiensemester varchar(6), + meldung xml, + html text, + studiengang_kz bigint, + insertamum timestamp, + insertvon varchar(32), + typ varchar(16) + ); + + ALTER TABLE bis.tbl_archiv ADD CONSTRAINT pk_archiv PRIMARY KEY (id); + + CREATE SEQUENCE bis.seq_archiv_id + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + ALTER TABLE bis.tbl_archiv ALTER COLUMN id SET DEFAULT nextval('bis.seq_archiv_id'); + ALTER TABLE bis.tbl_archiv ADD CONSTRAINT fk_archiv_studiensemester FOREIGN KEY (studiensemester) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE; + ALTER TABLE bis.tbl_archiv ADD CONSTRAINT fk_archiv_studiengang_kz FOREIGN KEY (studiengang_kz) REFERENCES public.tbl_studiengang(studiengang_kz) ON DELETE RESTRICT ON UPDATE CASCADE; + ALTER TABLE bis.tbl_archiv ADD CONSTRAINT fk_benutzer_archiv FOREIGN KEY (insertvon) REFERENCES public.tbl_benutzer(uid) ON DELETE RESTRICT ON UPDATE CASCADE; + + GRANT SELECT, INSERT, UPDATE, DELETE ON bis.tbl_archiv TO vilesci; + GRANT SELECT, UPDATE ON bis.seq_archiv_id TO vilesci; + + GRANT SELECT, INSERT, UPDATE, DELETE ON bis.tbl_archiv TO web; + GRANT SELECT, UPDATE ON bis.seq_archiv_id TO web; + "; + if(!$db->db_query($qry)) + echo 'BIS-Archiv: '.$db->db_last_error().'
'; + else + echo ' Tabellen fuer BIS-Archiv hinzugefuegt!
'; +} + echo '


'; $tabellen=array( + "bis.tbl_archiv" => array("id","studiensemester","meldung","html","studiengang_kz","insertamum","insertvon","typ"), "bis.tbl_ausbildung" => array("ausbildungcode","ausbildungbez","ausbildungbeschreibung"), "bis.tbl_berufstaetigkeit" => array("berufstaetigkeit_code","berufstaetigkeit_bez","berufstaetigkeit_kurzbz"), "bis.tbl_beschaeftigungsart1" => array("ba1code","ba1bez","ba1kurzbz"), diff --git a/vilesci/bis/archiv.php b/vilesci/bis/archiv.php new file mode 100644 index 000000000..c32724db7 --- /dev/null +++ b/vilesci/bis/archiv.php @@ -0,0 +1,273 @@ + + */ +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/bisarchiv.class.php'); +require_once('../../include/studiengang.class.php'); +require_once('../../include/studiensemester.class.php'); +require_once('../../include/datum.class.php'); + +$uid = get_uid(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); +if(!$rechte->isBerechtigt('student/stammdaten',null,'suid') && !$rechte->isBerechtigt('assistenz',null,'suid') && + !$rechte->isBerechtigt('admin',null,'suid') && !$rechte->isBerechtigt('mitarbeiter/stammdaten',null,'suid')) +{ + die('Sie haben keine Berechtigung für diese Seite'); +} + +// XML-Datei oder HTML-Übersicht ausgeben +isset($_GET['action']) ? $action = $_GET['action'] : $action = null; +isset($_GET['id']) ? $id = $_GET['id'] : $id = null; +if($action == 'xml' || $action == 'html') +{ + $bisarchiv = new bisarchiv(); + if(!$bisarchiv->load($id)) + { + echo $bisarchiv->errormsg; + exit; + } + + if($action == 'xml') + { + header("Content-type: text/xml"); + echo $bisarchiv->meldung; + exit; + } + else if($action == 'html') + { + echo $bisarchiv->html; + exit; + } +} + +$datum = new datum(); +$bisarchiv = new bisarchiv(); +$studiengang = new studiengang(); +$studiengang->getAll('bezeichnung'); +$studiensemester = new studiensemester(); +$studiensemester->getAll(); +$aktsem = $studiensemester->getakt(); +isset($_GET['anzeige']) ? $anzeige = $_GET['anzeige'] : $anzeige = $aktsem; +$prevsem = $studiensemester->getPreviousFrom($anzeige); +$nextsem = $studiensemester->getNextFrom($anzeige); + +// Archiv-Navigation erstellen +$prevsem != null ? $prevnav = '' : $prevnav = null; +$nextsem != null ? $nextnav = '' : $nextnav = null; + +// Daten archivieren +if($action == null && isset($_POST['action'])) + $action = $_POST['action']; + +if($action != null) +{ + if($action == "archivieren") + { + isset($_GET['meldung']) ? $meldung = $_GET['meldung'] : $meldung = null; + isset($_GET['html']) ? $html = $_GET['html'] : $html = null; + isset($_GET['stg']) ? $stg = $_GET['stg'] : $stg = null; + isset($_GET['sem']) ? $sem = $_GET['sem'] : $sem = null; + isset($_GET['typ']) ? $typ = $_GET['typ'] : $typ = null; + } + if($action == "upload") + { + $html = null; + $meldung = null; + $stg = null; + isset($_POST['typ']) ? $typ = $_POST['typ'] : $typ = null; + isset($_POST['sem']) ? $sem = $_POST['sem'] : $sem = null; + if($typ != "mitarbeiter") + isset($_POST['stg']) ? $stg = $_POST['stg'] : $stg = null; + + if(!empty($_FILES)) + { + if($_FILES['meldung']['type'] == 'text/xml') + { + move_uploaded_file($_FILES['meldung']['tmp_name'], "bisdaten/" . basename($_FILES['meldung']['name'])); + $meldung = "bisdaten/" . basename($_FILES['meldung']['name']); + } + } + } + + if($html != null) + { + $bisarchiv->readFile($html, 'html'); + } + $bisarchiv->readFile($meldung, 'xml'); + $bisarchiv->studiengang_kz = $stg; + $bisarchiv->studiensemster = $sem; + $bisarchiv->insertvon = $uid; + $bisarchiv->typ = $typ; + $result = $bisarchiv->save(); +} + +// Daten des aktuellen Semesters ermitteln +$bisarchiv->getBisData($anzeige); + +?> + + + + BIS - Archiv + + + + + + + + +

BIS - Meldung archivieren

+ Die Meldung wurde erfolgreich archiviert.

'; + else + echo '

Fehler: ' . $bisarchiv->errormsg . '

'; + } + ?> + +
+
+ BIS-Meldung manuell archivieren +

+ + +

+

+ + +

+

+ + +

+

+ + +

+ + + +
+
+ +

BIS-Archiv für

+ result == null) + { + echo '

Für dieses Semester sind keine archivierten Daten vorhanden.

'; + } + else + { + echo ' + + + + + + + + + + + '; + + foreach($bisarchiv->result as $data) + { + $stgbez = null; + if($data->studiengang_kz != '') + { + $studiengang->load($data->studiengang_kz); + $stgbez = $studiengang->bezeichnung . ' - ' . $studiengang->kurzbzlang . ' (' . $studiengang->kuerzel . ')'; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if($data->html != '') + echo ''; + else + echo ''; + echo ''; + } + + echo '
TypStudiengangStg. KennzahlDatumMeldungMeldungsübersicht
' . ucfirst($data->typ) . '' . $stgbez . '' . $data->studiengang_kz . '' . $datum->convertISODate($data->insertamum) . 'XML-Datei downloadenansehen
'; + } + ?> + + \ No newline at end of file diff --git a/vilesci/bis/personalmeldung.php b/vilesci/bis/personalmeldung.php index 7369a53a3..178ad350e 100644 --- a/vilesci/bis/personalmeldung.php +++ b/vilesci/bis/personalmeldung.php @@ -417,5 +417,6 @@ foreach($mitarbeiter_gesamt as $row) echo ''; } echo '
'; +echo 'Mitarbeiter-BIS-Meldung archivieren
'; echo "XML-Datei für Mitarbeiter-BIS-Meldung

"; ?> \ No newline at end of file diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index d1dd17671..0154dc736 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -124,11 +124,11 @@ else die('

Es wurde kein Studiengang ausgewählt!

'); } -/* - standortcode 22=Wien -derzeit fuer alle Studierende der gleiche Standort -ToDo: Standort sollte pro Student konfigurierbar sein. -*/ +/* + standortcode 22=Wien +derzeit fuer alle Studierende der gleiche Standort +ToDo: Standort sollte pro Student konfigurierbar sein. +*/ $standortcode='22'; if(in_array($stg_kz,array('265','268','761','760','266','267','764','269','400'))) $standortcode='14'; // Pinkafeld @@ -503,6 +503,7 @@ fclose($dateiausgabe); if(file_exists($ddd)) { + echo 'BIS-Meldung Stg '.$stg_kz.' archivieren
'; echo 'XML-Datei für BIS-Meldung Stg '.$stg_kz.'
'; } if(file_exists($eee))