, * * Beschreibung: * Dieses Skript prueft die Datenbank auf Aenderungen bezueglich eine_uid, dabei werden fehlende Attribute angelegt. */ require_once('../config/system.config.inc.php'); require_once('../include/basis_db.class.php'); $db = new basis_db(); echo ' CS-EineUid '; $all_tables_to_update = array ( "bis.tbl_bisio", "campus.tbl_lvgesamtnote", "campus.tbl_studentbeispiel", "campus.tbl_studentuebung", "campus.tbl_legesamtnote", ); if(!isset($_POST["action"]) || $_POST["action"] != "start") { $needed = false; foreach($all_tables_to_update as $t) { if(checkForUpdates($db, $t)) $needed = true; } if($needed) { echo "

ACHTUNG!

"; echo "

Folgendes wird geändert:

"; echo "

"; foreach($all_tables_to_update as $t) describeOneChange($db, $t); echo "

"; echo "
"; } else { echo "

Es sind keine Änderungen vorzunehmen!

"; } } else { echo '

Systemcheck!

'; echo '

DB-Updates!

'; // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; foreach($all_tables_to_update as $t) modifyOneTable($db, $t); } function describeOneChange($db, $tablename) { if(!$result = @$db->db_query("SELECT prestudent_id FROM ".$tablename." LIMIT 1;")) { echo "
".$tablename.": student_uid wird gelöscht!
"; echo "
".$tablename.": prestudent_id wird eingefügt!
"; } } function checkForUpdates($db, $tablename) { if(!$result = @$db->db_query("SELECT prestudent_id FROM ".$tablename." LIMIT 1;")) { return true; } return false; } function modifyOneTable($db, $tablename) { if(!$result = @$db->db_query("SELECT prestudent_id FROM ".$tablename." LIMIT 1;")) { //spalte einfuegen $add_qry = 'BEGIN; ALTER TABLE '.$tablename.' ADD COLUMN prestudent_id int; UPDATE '.$tablename.' SET prestudent_id = (SELECT prestudent_id FROM public.tbl_student WHERE student_uid='.$tablename.'.student_uid);'; $db->db_query($add_qry); //constraints: prestudent_id FK, prestudent_id NOT NULL $constraint_qry = 'ALTER TABLE '.$tablename.' ALTER COLUMN prestudent_id SET NOT NULL; ALTER TABLE '.$tablename.' ADD CONSTRAINT prestudent_id FOREIGN KEY (prestudent_id) REFERENCES public.tbl_prestudent (prestudent_id);'; if(!$db->db_query($constraint_qry)) { echo ''.$tablename.': '.$db->db_last_error().'
'; } else { echo ' '.$tablename.': Spalte prestudent_id hinzugefuegt!
'; echo ' '.$tablename.': Spalte student_uid auf prestudent_id geändert!
'; echo ' '.$tablename.': Spalte prestudent_id constraints eingefuegt!
'; //student_uid löschen $qry = 'ALTER TABLE '.$tablename.' DROP COLUMN student_uid;'; if(!$db->db_query($qry)) { echo ''.$tablename.': '.$db->db_last_error().'
'; echo ''.$tablename.': ACHTUNG! In diesem Fall sollte prestudent_id ordnungsgemäß eingetragen sein, jedoch student_uid nicht gelöscht worden sein. Das Skript erneut zu starten wird nicht funktionieren!
'; } else { echo ' '.$tablename.': Spalte student_uid gelöscht!
'; $db->db_query("COMMIT;"); return; } } } $db->db_query("ROLLBACK;"); } $tabellen=array( "bis.tbl_bisio" => array("bisio_id","mobilitaetsprogramm_code","nation_code","von","bis","zweck_code","updateamum","updatevon","insertamum","insertvon", "ext_id","ort","universitaet","lehreinheit_id","prestudent_id"), "campus.tbl_lvgesamtnote" => array("lehrveranstaltung_id","studiensemester_kurzbz","note","mitarbeiter_uid","benotungsdatum","freigabedatum","bemerkung","freigabevon_uid","prestudent_id","punkte","ext_id","updateamum","updatevon","insertamum","insertvon"), ); echo '

Gegenpruefung!

'; $error=false; $sql_query="SELECT schemaname,tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema' AND schemaname != 'sync' AND schemaname != 'addon';"; if (!$result=@$db->db_query($sql_query)) echo '
'.$db->db_last_error().'
'; else while ($row=$db->db_fetch_object($result)) { $fulltablename=$row->schemaname.'.'.$row->tablename; if (isset($tabellen[$fulltablename])) if (!$result_fields=@$db->db_query("SELECT * FROM $fulltablename LIMIT 1;")) echo '
'.$db->db_last_error().'
'; else for ($i=0; $i<$db->db_num_fields($result_fields); $i++) { $found=false; $fieldnameDB=$db->db_field_name($result_fields,$i); foreach ($tabellen[$fulltablename] AS $fieldnameARRAY) if ($fieldnameDB==$fieldnameARRAY) { $found=true; break; } if (!$found) { echo 'Attribut '.$fulltablename.'.'.$fieldnameDB.' existiert in der DB, aber nicht in diesem Skript!
'; $error=true; } } } if($error==false) echo '
Gegenpruefung fehlerfrei'; echo ''; ?>