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);
+
+?>
+
+
+
Fehler: ' . $bisarchiv->errormsg . '
'; + } + ?> + + + +Für dieses Semester sind keine archivierten Daten vorhanden.
'; + } + else + { + echo '| Typ | +Studiengang | +Stg. Kennzahl | +Datum | +Meldung | +Meldungsübersicht | +|
|---|---|---|---|---|---|---|
| ' . ucfirst($data->typ) . ' | '; + echo '' . $stgbez . ' | '; + echo '' . $data->studiengang_kz . ' | '; + echo '' . $datum->convertISODate($data->insertamum) . ' | '; + echo 'XML-Datei downloaden | '; + if($data->html != '') + echo 'ansehen | '; + else + echo ''; + echo ' |