This commit is contained in:
Gerald Raab
2007-08-13 16:46:34 +00:00
parent 18308c8042
commit 63965a6cc9
+585
View File
@@ -0,0 +1,585 @@
<?php
// **************************************
// Syncronisiert alle Noten
// FAS -> VILESCI
// setzt vorraus: - tbl_sprache
// - tbl_studiengang
// einschraenkung auf studiengang_fk per http-get:
// sync_fas_vilesci_note_stg.php?stg_von=x&stg_bis=y
// **************************************
require_once('../../../vilesci/config.inc.php');
require_once('../../../include/zeugnisnote.class.php');
require_once('../../../include/pruefung.class.php');
$adress='fas_sync@technikum-wien.at';
//$adress='raab@technikum-wien.at';
$conn=pg_connect(CONN_STRING) or die("Connection zur Portal Datenbank fehlgeschlagen");
$conn_fas=pg_connect(CONN_STRING_FAS) or die("Connection zur Vilesci Datenbank fehlgeschlagen");
$startzeit = time();
$plausi_error=0;
$double_error=0;
$update_error_pruef=0;
$insert_error_pruef=0;
$update_error_zeug=0;
$insert_error_zeug=0;
$anz_update_pruef=0;
$anz_not_updated_pruef=0;
$anz_not_updated_zeug=0;
$anz_insert_pruef=0;
$anz_update_zeug=0;
$anz_insert_zeug=0;
$anz_processed_pruef=0;
$anz_processed_zeug=0;
$anz_processed=0;
$anz_students_processed = 0;
$stg_processed = "";
$headtext='';
$head_stg_text="Dies ist eine automatische Mail!\n\nFolgende Fehler sind bei der Synchronisation der Lehrveranstaltungen aufgetreten:\n\n";
$text='';
$double_lva = array();
$stg_data = array();
$fasnoten_arr = array(); //mehrdimensionaler array (lehrverstaltung_fk->(note_pk->("note"->"x","datum"->"y" ..)))
$mitarbeiter_arr = array(); //array (ext_id->mitarbeiter_uid)
$studenten_arr = array(); //array (ext_id->student_uid)
$lv_arr = array(); //array (lehrveranstaltung_fk->lehrveranstaltung_id)
$studsem_arr = array(); //array (ext_id->studiensemester_kurzbz)
$lehreinheiten_fas_arr = array();
$lehreinheiten_sync_arr = array();
//array aller mitarbeiter (ext_id->mitarbeiter_uid)
$sqlstr = "SELECT ext_id, mitarbeiter_uid FROM tbl_mitarbeiter";
if($result = pg_query($conn, $sqlstr))
{
while($row = pg_fetch_object($result))
$mitarbeiter_arr[$row->ext_id] = $row->mitarbeiter_uid;
}
//array aller studenten (ext_id->mitarbeiter_uid)
$sqlstr = "SELECT ext_id, student_uid FROM tbl_student";
if($result = pg_query($conn, $sqlstr))
{
while($row = pg_fetch_object($result))
$studenten_arr[$row->ext_id] = $row->student_uid;
}
//array aller lehrveranstaltungen aus sync-tabelle (lva_fas->lva_vilesci)
$sqlstr = "SELECT lva_fas, lva_vilesci FROM sync.tbl_synclehrveranstaltung";
if($result = pg_query($conn, $sqlstr))
{
while($row = pg_fetch_object($result))
$lv_arr[$row->lva_fas] = $row->lva_vilesci;
}
//array aller studiensemester (ext_id->studiensemester_kurzbz)
$sqlstr = "SELECT * FROM tbl_studiensemester";
if($result = pg_query($conn, $sqlstr))
{
while($row = pg_fetch_object($result))
$studsem_arr[$row->ext_id] = $row->studiensemester_kurzbz;
}
//array aller lehreinheiten in der synctabelle
$sqlstr = "SELECT * FROM sync.tbl_synclehreinheit";
if($result = pg_query($conn, $sqlstr))
{
while($row = pg_fetch_object($result))
$lehreinheiten_sync_arr[$row->lehreinheit_pk] = $row->lehreinheit_id;
}
//**** FUNCTIONS ****
function getNoten4Student($conn_fas, $student_fk)
{
$fasnoten_arr = array();
$mehrfach_arr = array();
$sqlstr = "SELECT note.note_pk,
note.student_fk,
note.lehrveranstaltung_fk,
note.datum,
note.note,
note.status,
note.bemerkung,
note.creationdate,
benutzer.name,
lehrveranstaltung.studiensemester_fk,
lehrveranstaltung.notenlektor_fk
FROM note, benutzer, lehrveranstaltung
WHERE note.creationuser = benutzer.benutzer_pk AND
note.lehrveranstaltung_fk = lehrveranstaltung.lehrveranstaltung_pk AND
note.student_fk = '".$student_fk."'
ORDER BY note.lehrveranstaltung_fk ASC, note.datum DESC, note.creationdate DESC";
if($result = pg_query($conn_fas, $sqlstr))
{
//$anzahl_quelle = pg_num_rows($result);
while($row = pg_fetch_object($result))
{
$bemerkung_history = "";
if (key_exists($row->lehrveranstaltung_fk,$fasnoten_arr))
{
$bemerkung_history = "Note am ".$row->datum.": ".$row->note;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 0;
}
else
{
$mehrfach_arr[$row->lehrveranstaltung_fk]["main"] = $row->note_pk;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 1;
}
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["note"] = $row->note;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["status"] = $row->status;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["creationdate"] = $row->creationdate;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["creationuser_name"] = $row->name;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["name"] = $row->name;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["studiensemester_fk"] = $row->studiensemester_fk;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["bemerkung"] = $row->bemerkung;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["datum"] = $row->datum;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["notenlektor_fk"] = $row->notenlektor_fk;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["student_fk"] = $row->student_fk;
$fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["ext_id"] = $row->note_pk;
if ($bemerkung_history != "")
$fasnoten_arr[$row->lehrveranstaltung_fk][$mehrfach_arr[$row->lehrveranstaltung_fk]["main"]]["bemerkung"] .= "\n".$bemerkung_history;
}
}
return $fasnoten_arr;
}
function getNoten4Studiengang($conn_fas, $studiengang_pk)
{
$fasnoten_arr = array();
$mehrfach_arr = array();
$sqlstr = "SELECT note.note_pk,
note.student_fk,
note.lehrveranstaltung_fk,
note.datum,
note.note,
note.status,
note.bemerkung,
note.creationdate,
benutzer.name,
lehrveranstaltung.studiensemester_fk,
lehrveranstaltung.notenlektor_fk,
note.student_fk
FROM note, benutzer, lehrveranstaltung, student
WHERE note.creationuser = benutzer.benutzer_pk AND
note.lehrveranstaltung_fk = lehrveranstaltung.lehrveranstaltung_pk AND
note.student_fk = student.student_pk AND
student.studiengang_fk = '".$studiengang_pk."'
ORDER BY note.student_fk ASC, note.lehrveranstaltung_fk ASC, note.datum DESC, note.creationdate DESC";
if($result = pg_query($conn_fas, $sqlstr))
{
//$anzahl_quelle = pg_num_rows($result);
while($row = pg_fetch_object($result))
{
$bemerkung_history = "";
if (key_exists($row->student_fk, $fasnoten_arr))
{
if (key_exists($row->lehrveranstaltung_fk,$fasnoten_arr[$row->student_fk]))
{
$bemerkung_history = "Note am ".$row->datum.": ".$row->note;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 0;
}
else
{
$mehrfach_arr[$row->student_fk][$row->lehrveranstaltung_fk]["main"] = $row->note_pk;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 1;
}
}
else
{
$mehrfach_arr[$row->student_fk][$row->lehrveranstaltung_fk]["main"] = $row->note_pk;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 1;
}
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["note"] = $row->note;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["status"] = $row->status;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["creationdate"] = $row->creationdate;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["creationuser_name"] = $row->name;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["name"] = $row->name;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["studiensemester_fk"] = $row->studiensemester_fk;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["bemerkung"] = $row->bemerkung;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["datum"] = $row->datum;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["notenlektor_fk"] = $row->notenlektor_fk;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["student_fk"] = $row->student_fk;
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["ext_id"] = $row->note_pk;
if ($bemerkung_history != "")
$fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$mehrfach_arr[$row->student_fk][$row->lehrveranstaltung_fk]["main"]]["bemerkung"] .= "\n".$bemerkung_history;
}
}
return $fasnoten_arr;
}
function getPruefungstyp($status)
{
$pruefungstyp = "";
if ($status == 1)
$pruefungstyp = "Termin1";
else if ($status == 2)
$pruefungstyp = "Termin2";
else if ($status == 11)
$pruefungstyp = "kommPruef";
else
$pruefungstyp = 'undefiniert'; //$status;
return $pruefungstyp;
}
function checkUpdatePruefung($conn, $pruef)
{
$sqlstr = "select * from lehre.tbl_pruefung where ext_id = '".$pruef->ext_id."'";
if($res = pg_query($conn, $sqlstr))
{
if($row = pg_fetch_object($res))
{
if ($row->lehreinheit_id == $pruef->lehreinheit_id && $row->student_uid == $pruef->student_uid && $row->mitarbeiter_uid == $pruef->mitarbeiter_uid && $row->note == $pruef->note && $row->pruefungstyp_kurzbz == $pruef->pruefungstyp_kurzbz && $row->datum == $pruef->datum and $row->anmerkung == $pruef->anmerkung)
return -1;
else
return $row->pruefung_id;
}
}
else
{
return false;
}
}
function checkUpdateZeugnis($conn, $zeug)
{
$sqlstr = "select * from lehre.tbl_zeugnisnote where ext_id = '".$zeug->ext_id."'";
if($res = pg_query($conn, $sqlstr))
{
if($row = pg_fetch_object($res))
{
if ($row->lehrveranstaltung_id == $zeug->lehrveranstaltung_id && $row->student_uid == $zeug->student_uid && $row->studiensemester_kurzbz == $zeug->studiensemester_kurzbz && $row->note == $zeug->note && $row->bemerkung == $zeug->bemerkung)
return -1;
else
return 1;
}
else
{
return false;
}
}
}
function getLehreinheitID($conn_fas, $note_pk)
{
$lehreinheiten_fas_arr = array();
$sqlstr = "select lehreinheit.lehreinheit_pk,note.note_pk from lehreinheit, lehrveranstaltung, note, student_gruppe where lehrveranstaltung.lehrveranstaltung_pk = lehreinheit.lehrveranstaltung_fk and note.lehrveranstaltung_fk = lehrveranstaltung.lehrveranstaltung_pk and note.student_fk=student_gruppe.student_fk and student_gruppe.gruppe_fk = lehreinheit.gruppe_fk and note.note_pk = '".$note_pk."'";
if($result = pg_query($conn_fas, $sqlstr))
{
while($row = pg_fetch_object($result))
$lehreinheiten_fas_arr[] = $row->lehreinheit_pk;
return $lehreinheiten_fas_arr;
}
else
return false;
}
$text .= "<table border='1'>";
//query bauen: falls http-get-einschraenkungen fuer student_fk
//sync_fas_vilesci_note.php?student_fk_von=x&student_fk_bis=y
/*
$getstr = "";
$sqlstr = "SELECT DISTINCT student_fk FROM note";
if (isset($_REQUEST["student_fk_von"]))
$getstr .= " student_fk >='".$_REQUEST["student_fk_von"]."'";
if (isset($_REQUEST["student_fk_bis"]))
{
if ($getstr != "")
$getstr .= " AND";
$getstr .= " student_fk <='".$_REQUEST["student_fk_bis"]."'";
}
if ($getstr != "")
$getstr = " WHERE ".$getstr;
$sqlstr = $sqlstr.$getstr." order by student_fk";
*/
$getstr = "";
$sqlstr = "select * from studiengang";
if (isset($_REQUEST["stg_von"]))
$getstr .= " studiengang_pk >= '".$_REQUEST["stg_von"]."'";
if (isset($_REQUEST["stg_bis"]))
{
if ($getstr != "")
$getstr .= " AND";
$getstr .= " studiengang_pk <= '".$_REQUEST["stg_bis"]."'";
}
if ($getstr != "")
$getstr = " WHERE".$getstr;
$sqlstr = $sqlstr.$getstr." order by studiengang_pk";
//echo $sqlstr;
//$sqlstr ="select count(*) from note, student where note.student_fk = student.student_pk and student.studiengang_fk = '16' and (note.student_fk=12217 or note.student_fk = 10704);";
if($result = pg_query($conn_fas, $sqlstr))
{
while($row = pg_fetch_object($result))
{
//$fasnoten_arr = getNoten4Student($conn_fas,$row->student_fk);
$fasnoten_arr = getNoten4Studiengang($conn_fas,$row->studiengang_pk);
$stg_processed .= $row->kuerzel." / ";
$studkeys_arr = array_keys($fasnoten_arr);
foreach ($studkeys_arr as $studkey)
{
$text .= "<b>*** Student: ".$studkey."</b><br>";
$anz_students_processed++;
$lvkeys_arr = array_keys($fasnoten_arr[$studkey]);
foreach ($lvkeys_arr as $lvkey)
{
$idkeys_arr = array_keys($fasnoten_arr[$studkey][$lvkey]);
foreach ($idkeys_arr as $idkey)
{
//echo "___".$idkey."<br>";
$anz_processed++;
$lehreinheit_id = $lvkey;
if (key_exists($fasnoten_arr[$studkey][$lvkey][$idkey]["student_fk"],$studenten_arr))
$student_uid = $studenten_arr[$fasnoten_arr[$studkey][$lvkey][$idkey]["student_fk"]];
else
$student_uid = "FEHLT";
$mitarbeiter_uid = $mitarbeiter_arr[$fasnoten_arr[$studkey][$lvkey][$idkey]["notenlektor_fk"]];
$note = $fasnoten_arr[$studkey][$lvkey][$idkey]["note"];
$pruefungstyp_kurzbz = getPruefungstyp($fasnoten_arr[$studkey][$lvkey][$idkey]["status"]);
$datum = $fasnoten_arr[$studkey][$lvkey][$idkey]["datum"];
$anmerkung = $fasnoten_arr[$studkey][$lvkey][$idkey]["bemerkung"];
$insertamum = $fasnoten_arr[$studkey][$lvkey][$idkey]["creationdate"];
$insertvon = $fasnoten_arr[$studkey][$lvkey][$idkey]["creationuser_name"];
$updatevon = "sync";
$ext_id = $idkey;
$zeugnistabeintrag = $fasnoten_arr[$studkey][$lvkey][$idkey]["main"];
if (key_exists($lvkey,$lv_arr))
$lehrveranstaltung_id = $lv_arr[$lvkey];
else
$lehrveranstaltung_id = "FEHLT";
$studiensemester_kurzbz = $studsem_arr[$fasnoten_arr[$studkey][$lvkey][$idkey]["studiensemester_fk"]];
if($lehreinheit_id_arr = getLehreinheitID($conn_fas,$idkey))
{
$lehreinheit_id = "FEHLT";
foreach($lehreinheit_id_arr as $lehreinh)
{
if (key_exists($lehreinh,$lehreinheiten_sync_arr))
{
$lehreinheit_id = $lehreinheiten_sync_arr[$lehreinh];
break;
}
}
}
else
$lehreinheit_id = "FEHLT";
//begin insert tbl_pruefung
$anz_processed_pruef++;
if($student_uid == "FEHLT")
{
$insert_error_pruef++;
$text .= "Pr&uuml;fung: Datensatz FAS ID".$idkey.": student_uid ohne zuordnung<br>";
}
else if($lehreinheit_id == "FEHLT")
{
$insert_error_pruef++;
$text .= "Pr&uuml;fung: Datensatz FAS ID".$idkey.": Lehreinheit ohne zuordnung<br>";
}
else
{
$pruef = new pruefung($conn);
$pruef->lehreinheit_id=$lehreinheit_id;
$pruef->student_uid=$student_uid;
$pruef->mitarbeiter_uid=$mitarbeiter_uid;
$pruef->note=$note;
$pruef->pruefungstyp_kurzbz=$pruefungstyp_kurzbz;
$pruef->datum=$datum;
$pruef->anmerkung=$anmerkung;
$pruef->insertamum=$insertamum;
$pruef->insertvon=$insertvon;
$pruef->updateamum=date("Y-m-d H:m:s");
$pruef->updatevon=$updatevon;
$pruef->ext_id=$ext_id;
if (!($pruef->pruefung_id=checkUpdatePruefung($conn,$pruef)))
$pruef->new = 1;
if($pruef->pruefung_id == -1)
$anz_not_updated_pruef++;
else
{
if(!$pruef->save())
{
echo $pruef->errormsg."<br>";
$text .= "Pr&uuml;fung: Datensatz FAS ID".$idkey.": ".$pruef->errormsg."<br>";
if($pruef->new)
$insert_error_pruef++;
else
$update_error_pruef++;
}
else
if($pruef->new)
$anz_insert_pruef++;
else
$anz_update_pruef++;
}
}
//begin insert tbl_zeugnisnote
if ($zeugnistabeintrag == 1)
{
$anz_processed_zeug++;
if($student_uid == "FEHLT")
{
$insert_error_zeug++;
$text .= "<span style='background-color:#cccccc;'>Zeugnis: Datensatz FAS ID".$idkey.": student_uid ohne zuordnung</span><br>";
}
else if ($lehrveranstaltung_id == "FEHLT")
{
$insert_error_zeug++;
$text .= "<span style='background-color:#cccccc;'>Zeugnis: Datensatz FAS ID".$idkey.": lehrveranstaltung_id ohne zuordnung</span><br>";
}
else
{
$zeug = new zeugnisnote($conn);
$zeug->lehrveranstaltung_id = $lehrveranstaltung_id;
$zeug->student_uid = $student_uid;
$zeug->studiensemester_kurzbz = $studiensemester_kurzbz;
$zeug->note = $note;
$zeug->uebernahmedatum = null;
$zeug->benotungsdatum = $datum;
$zeug->updateamum = date("Y-m-d H:m:s");
$zeug->updatevon = $updatevon;
$zeug->insertamum = $insertamum;
$zeug->insertvon = $insertvon;
$zeug->ext_id = $ext_id;
$zeug->bemerkung = $anmerkung;
if (!($zeug->check = checkUpdateZeugnis($conn,$zeug)))
$zeug->new = 1;
if($zeug->check == -1)
$anz_not_updated_zeug++;
else
{
if(!$zeug->save())
{
$text .= "<span style='background-color:#cccccc;'>Zeugnis: Datensatz FAS ID".$idkey.": ".$zeug->errormsg."</span><br>";
if($zeug->new)
$insert_error_zeug++;
else
$update_error_zeug++;
}
else
if($zeug->new)
$anz_insert_zeug++;
else
$anz_update_zeug++;
}
}
}
//debug-output start
/*
if ($zeugnistabeintrag == 1)
$text .= "<tr style='background:#eeeeee'>";
else
$text .= "<tr>";
$text .= "<td>".$lehreinheit_id."</td>";
$text .= "<td>".$student_uid."<br>(".$fasnoten_arr[$lvkey][$idkey]["student_fk"].")</td>";
$text .= "<td>".$mitarbeiter_uid."</td>";
$text .= "<td>".$note."</td>";
$text .= "<td>".$pruefungstyp_kurzbz."</td>";
$text .= "<td><textarea cols='40'>".$anmerkung."</textarea></td>";
$text .= "<td>".$insertamum."</td>";
$text .= "<td>".$insertvon."</td>";
$text .= "<td>now()</td>";
$text .= "<td>".$updatevon."</td>";
$text .= "<td>".$ext_id."</td>";
if ($zeugnistabeintrag == 1)
{
$text .= "<td style='background:#cccccc'>".$lehrveranstaltung_id."</td>";
$text .= "<td style='background:#cccccc'>".$studiensemester_kurzbz."</td>";
}
else
$text .= "<td></td><td></td>";
$text .= "</tr>";
*/
//debug-output ende
}
}
}
}
$text .= "</table>";
$text .= "<hr><h3>Stats</h3><hr>";
$text .= "Bearbeitete Studiengänge: ".$stg_processed."<br>";
$text .= "Anzahl der bearbeiteten Studenten: ".$anz_students_processed."<br>";
$text .= "Anzahl der bearbeiteten Datens&auml;tze: ".$anz_processed."<br>";
$text .= "Anzahl Pr&uuml;fungseintr&auml;ge: ".$anz_processed_pruef."<br>";
$text .= "Pr&uuml;fungen insert fehler/ok: <span style='color:red'>".$insert_error_pruef."</span>/".$anz_insert_pruef."<br>";
$text .= "Pr&uuml;fungen update fehler/ok/noupdate: <span style='color:red'> ".$update_error_pruef."</span>/".$anz_update_pruef."/".$anz_not_updated_pruef."<br>";
$text .= "Anzahl Zeugniseintr&auml;ge: ".$anz_processed_zeug."<br>";
$text .= "Zeugnisnoten insert fehler/ok: <span style='color:red'>".$insert_error_zeug."</span>/".$anz_insert_zeug.")<br>";
$text .= "Zeugnisnoten update fehler/ok/noupdate: <span style='color:red'> ".$update_error_zeug."</span>/".$anz_update_zeug."/".$anz_not_updated_zeug."<br>";
$stopzeit = time();
$runzeit = $stopzeit - $startzeit;
$text .= "Dauer: ".$runzeit." s";
$text.="\nEND OF SYNCHRONISATION\n";
if (mail($adress,"FAS - Vilesci (Noten/Pruefungen)",$headtext."\n\n".$text,"From: vilesci@technikum-wien.at"))
$sendmail=true;
else
$sendmail=false;
}
?>
<html>
<head>
<title>FAS - Vilesci (Noten)</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
if ($sendmail)
echo 'Mail wurde verschickt an '.$adress.'!<br>';
else
echo "Mail konnte nicht verschickt werden!<br>";
echo $headtext;
echo "<br><br>";
echo $text;
?>
</body>