*/ /* * Prueft die Daten in der Datenbank auf konsistenz und gibt Hinweise * bei fehlerhafter Datenmigration oder Datenmanipulation direkt auf Datenbankebene */ require_once('../config/vilesci.config.inc.php'); require_once('../include/functions.inc.php'); require_once('../include/benutzerberechtigung.class.php'); $uid = get_uid(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); if(!$rechte->isBerechtigt('admin')) { die('Sie haben keine Berechtigung fuer diese Seite (admin)'); } $db = new basis_db(); $error_kritisch=0; $error_warning=0; echo ' Konsistenzpruefung '; /************************************************************************************ * Pruefung auf falschen Personenkreislauf * tbl_person->tbl_benutzer->tbl_student->tbl_prestudent->tbl_person */ $qry = "SELECT vorname, nachname, tbl_benutzer.uid, tbl_prestudent.prestudent_id, tbl_person.person_id as pers_person_id, tbl_prestudent.person_id pre_person_id FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) JOIN public.tbl_student ON(uid=student_uid) JOIN public.tbl_prestudent USING(prestudent_id) WHERE tbl_person.person_id<>tbl_prestudent.person_id ORDER BY nachname, vorname, uid"; if($result = $db->db_query($qry)) { echo '

Inkonsistenter Personenkreislauf tbl_person->tbl_benutzer->tbl_student->tbl_prestudent->tbl_person

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_kritisch++; echo ''; } echo ''; } } flush(); /************************************************************************************** * UIDs ohne Student und ohne Mitarbeiter * */ $qry = "SELECT tbl_benutzer.uid, tbl_benutzer.person_id, tbl_person.vorname, tbl_person.nachname FROM public.tbl_benutzer LEFT JOIN public.tbl_person USING(person_id) WHERE NOT EXISTS (SELECT 1 FROM public.tbl_student WHERE student_uid=tbl_benutzer.uid) AND NOT EXISTS (SELECT 1 FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=tbl_benutzer.uid)"; if($result = $db->db_query($qry)) { echo '

Benutzer ohne Student und ohne Mitarbeiter Eintrag

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } /************************************************************************************** * Studentenstatus ohne UID * */ $qry = "SELECT distinct tbl_person.person_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id FROM public.tbl_prestudentstatus JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_person USING(person_id) WHERE status_kurzbz IN('Student','Absolvent','Diplomand','Incoming') AND NOT EXISTS (SELECT 1 FROM public.tbl_student WHERE prestudent_id=tbl_prestudent.prestudent_id)"; if($result = $db->db_query($qry)) { echo '

Prestudenten mit Studenten/Absolventen/Diplomanden/Incoming Status aber ohne StudentUID

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_kritisch++; echo ' '; } echo ''; } } /************************************************************************************** * StgKz von Stunent und Prestudent unterschiedlich * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id, tbl_student.student_uid, tbl_student.studiengang_kz as stud_studiengang_kz, tbl_prestudent.studiengang_kz as pre_studiengang_kz FROM public.tbl_student JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_person USING(person_id) WHERE tbl_student.studiengang_kz<>tbl_prestudent.studiengang_kz"; if($result = $db->db_query($qry)) { echo '

Studiengangskennzahl von tbl_student ungleich tbl_prestudent

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_kritisch++; echo ' '; } echo ''; } } /************************************************************************************** * Studenten ohne passenden Status * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id, tbl_student.student_uid, get_rolle_prestudent(prestudent_id, null) as laststatus FROM public.tbl_student JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_person USING(person_id) WHERE NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id AND status_kurzbz in('Student','Incoming','Diplomand','Absolvent'))"; if($result = $db->db_query($qry)) { echo '

Studenten ohne Status Student/Diplomand/Incoming/Absolvent

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } /************************************************************************************** * Prestudenten ohne Status * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id FROM public.tbl_prestudent JOIN public.tbl_person USING(person_id) WHERE NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id)"; if($result = $db->db_query($qry)) { echo '

Prestudenten ohne Status

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } /************************************************************************************** * Studenten ohne Studentlehrverband eintrag * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid FROM public.tbl_student JOIN public.tbl_benutzer ON(uid=student_uid) JOIN public.tbl_person USING(person_id) WHERE NOT EXISTS(SELECT 1 FROM public.tbl_studentlehrverband WHERE student_uid=tbl_student.student_uid)"; if($result = $db->db_query($qry)) { echo '

Studenten ohne Studentlehrverband Eintrag

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } /************************************************************************************** * Incoming ohne IO Datensatz * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid FROM public.tbl_student JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_person USING(person_id) WHERE NOT EXISTS(SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid) AND EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id AND status_kurzbz='Incoming')"; if($result = $db->db_query($qry)) { echo '

Incoming ohne IO-Datensatz

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } /************************************************************************************** * Personenkennzeichen passt nicht zur Studiengangskennzahl * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid, tbl_student.matrikelnr, tbl_student.studiengang_kz FROM public.tbl_student JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_person USING(person_id) WHERE tbl_student.studiengang_kz<1000 AND tbl_student.studiengang_kz>0 AND tbl_student.studiengang_kz::text!=trim(leading '0' from substring(matrikelnr,5,3))"; if($result = $db->db_query($qry)) { echo '

Personenkennzeichen passt nicht zum Studiengang

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } /************************************************************************************** * Absolventen ohne Abschlusspruefung * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid FROM public.tbl_student JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_person USING(person_id) WHERE tbl_student.studiengang_kz<1000 AND tbl_student.studiengang_kz>0 AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE status_kurzbz='Absolvent' AND prestudent_id=tbl_student.prestudent_id) AND NOT EXISTS(SELECT 1 FROM lehre.tbl_abschlusspruefung WHERE student_uid=tbl_student.student_uid)"; if($result = $db->db_query($qry)) { echo '

Absolventen ohne Abschlusspruefung

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } /************************************************************************************** * Studenten mit mind. 2 Stati ohne Noten * */ $qry = "SELECT tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid FROM public.tbl_student JOIN public.tbl_prestudent USING(prestudent_id) JOIN public.tbl_person USING(person_id) WHERE tbl_student.studiengang_kz<1000 AND tbl_student.studiengang_kz>0 AND 1<(SELECT count(*) FROM public.tbl_prestudentstatus WHERE status_kurzbz='Student' AND prestudent_id=tbl_student.prestudent_id) AND NOT EXISTS(SELECT 1 FROM lehre.tbl_zeugnisnote WHERE student_uid=tbl_student.student_uid)"; if($result = $db->db_query($qry)) { echo '

Studenten mit mind. 2 Studentenstati aber ohne Noten

'; $anzahl = $db->db_num_rows($result); echo ''.$anzahl.' Probleme gefunden'; if($anzahl>0) { echo '
Anzeigen >>'; echo ' '; while($row = $db->db_fetch_object($result)) { $error_warning++; echo ' '; } echo ''; } } // ************************************************************************************ echo '
'; echo '
Kritische Fehler: '.($error_kritisch>0?'':'').$error_kritisch.''; echo '
Warnungen: '.($error_warning>0?'':'').$error_warning.''; echo '







'; ?>