BIS-Archiv hinzugefügt

This commit is contained in:
nkrondraf
2015-02-03 11:14:10 +01:00
parent a6c7c8f32a
commit 3043568aff
5 changed files with 556 additions and 5 deletions
+233
View File
@@ -0,0 +1,233 @@
<?php
/* Copyright (C) 2015 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Nikolaus Krondraf <nikolaus.krondraf@technikum-wien.at>
*/
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;
}
}
}
+43
View File
@@ -2437,9 +2437,52 @@ if(!$result = @$db->db_query("SELECT oeffentlich FROM public.tbl_reihungstest LI
echo ' public.tbl_reihungstest: Spalte oeffentlich hinzugefuegt!<br>';
}
// 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 '<strong>BIS-Archiv: '.$db->db_last_error().'</strong><br>';
else
echo ' Tabellen fuer BIS-Archiv hinzugefuegt!<br>';
}
echo '<br><br><br>';
$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"),
+273
View File
@@ -0,0 +1,273 @@
<?php
/* Copyright (C) 2015 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Nikolaus Krondraf <nikolaus.krondraf@technikum-wien.at>
*/
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 = '<a href="archiv.php?anzeige=' . $prevsem . '">&Lt;</a>' : $prevnav = null;
$nextsem != null ? $nextnav = '<a href="archiv.php?anzeige=' . $nextsem . '">&Gt;</a>' : $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);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>BIS - Archiv</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="../../skin/vilesci.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="../../include/js/jquery.js"></script>
<link rel="stylesheet" href="../../skin/tablesort.css" type="text/css"/>
<style type="text/css">
form { width: 700px; }
label { float: left; width: 130px; }
.msg { font-weight: bold; }
.error { color: red; }
#t1 { width: 75%; }
</style>
<script language="JavaScript" type="text/javascript">
$(document).ready(function()
{
$("#t1").tablesorter(
{
widgets: ["zebra"],
headers: {
4: {
sorter: false
},
5: {
sorter: false
}
},
sortList: [[3,1]]
});
$("#typ").change(function(){
if($("#typ").val() == 'studenten')
$("#select-stg").show();
else
$("#select-stg").hide();
})
});
</script>
</head>
<body>
<h1>BIS - Meldung archivieren</h1>
<?php
if($action != null)
{
if($result)
echo '<p class="msg">Die Meldung wurde erfolgreich archiviert.</p>';
else
echo '<p class="msg error">Fehler: ' . $bisarchiv->errormsg . '</p>';
}
?>
<form enctype="multipart/form-data" action="archiv.php" method="post">
<fieldset>
<legend>BIS-Meldung manuell archivieren</legend>
<p>
<label for="sem">Studiensemester</label>
<select id="sem" name="sem">
<?php
foreach($studiensemester->studiensemester as $obj)
{
if($obj->studiensemester_kurzbz == $aktsem)
$property = ' selected';
else
$property = null;
echo '<option value="' . $obj->studiensemester_kurzbz . '"' . $property . '>' . $obj->studiensemester_kurzbz . '</option>';
}
?>
</select>
</p>
<p>
<label for="typ">Typ</label>
<select id="typ" name="typ">
<option value="studenten">Studenten</option>
<option value="mitarbeiter">Mitarbeiter</option>
</select>
</p>
<p id="select-stg">
<label for="stg">Studiengang</label>
<select id="stg" name="stg">
<?php
foreach($studiengang->result as $obj)
{
echo '<option value="' . $obj->studiengang_kz . '">' . $obj->bezeichnung . ' - ' . $obj->kurzbzlang . ' (' . $obj->kuerzel . ')</option>';
}
?>
</select>
</p>
<p>
<label for="meldung">XML-Datei</label>
<input type="file" id="meldung" name="meldung" value="" />
</p>
<input type="submit" value="Datei archivieren" /> <input type="reset" value="zurücksetzen" />
<input type="hidden" name="action" value="upload" />
</fieldset>
</form>
<h2><?php echo $prevnav; ?> BIS-Archiv für <?php echo $anzeige . " " . $nextnav; ?></h2>
<?php
if($bisarchiv->result == null)
{
echo '<p>Für dieses Semester sind keine archivierten Daten vorhanden.</p>';
}
else
{
echo '<table class="tablesorter" id="t1">
<thead>
<tr>
<th>Typ</th>
<th>Studiengang</th>
<th>Stg. Kennzahl</th>
<th>Datum</th>
<th>Meldung</th>
<th>Meldungsübersicht</th>
</tr>
</thead>
<tbody>';
foreach($bisarchiv->result as $data)
{
$stgbez = null;
if($data->studiengang_kz != '')
{
$studiengang->load($data->studiengang_kz);
$stgbez = $studiengang->bezeichnung . ' - ' . $studiengang->kurzbzlang . ' (' . $studiengang->kuerzel . ')';
}
echo '<tr>';
echo '<td>' . ucfirst($data->typ) . '</td>';
echo '<td>' . $stgbez . '</td>';
echo '<td>' . $data->studiengang_kz . '</td>';
echo '<td>' . $datum->convertISODate($data->insertamum) . '</td>';
echo '<td><a href="archiv.php?id=' . $data->id . '&action=xml">XML-Datei downloaden</a></td>';
if($data->html != '')
echo '<td><a href="archiv.php?id=' . $data->id . '&action=html" target="_blank">ansehen</a></td>';
else
echo '<td></td>';
echo '</tr>';
}
echo '</tbody></table>';
}
?>
</body>
</html>
+1
View File
@@ -417,5 +417,6 @@ foreach($mitarbeiter_gesamt as $row)
echo '</tr>';
}
echo '</tbody></table><br>';
echo '<a href="archiv.php?meldung='.$ddd.'&sem='.$stsem.'&typ=mitarbeiter&action=archivieren">Mitarbeiter-BIS-Meldung archivieren</a><br>';
echo "<a href=$ddd>XML-Datei f&uuml;r Mitarbeiter-BIS-Meldung</a><br><br>";
?>
+6 -5
View File
@@ -124,11 +124,11 @@ else
die('<H2>Es wurde kein Studiengang ausgew&auml;hlt!</H2>');
}
/*
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 '<a href="archiv.php?meldung='.$ddd.'&html='.$eee.'&stg='.$stg_kz.'&sem='.$ssem.'&typ=studenten&action=archivieren">BIS-Meldung Stg '.$stg_kz.' archivieren</a><br>';
echo '<a href="'.$ddd.'">XML-Datei f&uuml;r BIS-Meldung Stg '.$stg_kz.'</a><br>';
}
if(file_exists($eee))