*/
require_once('../config/system.config.inc.php');
require_once('../include/basis_db.class.php');
require_once('../version.php');
require_once('../include/benutzerberechtigung.class.php');
require_once('../include/studiengang.class.php');
require_once('../include/prestudent.class.php');
require_once('../include/student.class.php');
require_once('../include/studiensemester.class.php');
// Datenbank Verbindung
$db = new basis_db();
echo '
Studienplan_id prestudentstatus
Studienplan_id Update ';
$uid = get_uid();
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
if(!$rechte->isBerechtigt('admin'))
{
exit('Sie haben keine Berechtigung');
}
$startString = "Starten";
if(isset($_POST["start"]) && $_POST["start"] == "start")
{
set_time_limit(10000);
if($result = $db->db_query("
SELECT prestudent_id, orgform_kurzbz, studiengang_kz, studiensemester_kurzbz, ausbildungssemester, status_kurzbz
FROM public.tbl_prestudentstatus
JOIN public.tbl_prestudent USING(prestudent_id)
WHERE studienplan_id IS NULL order by 3,4,5"))
{
$all_count = $db->db_num_rows($result);
$entries_not_unique = 0;
$entries_not_found = 0;
$entries_with_error = 0;
$array_stg_without_studienplan = array();
$array_orgform = array();
$array_no_orgform = array();
$array_studienplan_semester = array();
$array_not_unique = array();
echo "Es gibt " . $all_count . " zu bearbeitende Einträge ";
while($row = $db->db_fetch_object($result))
{
$qry_search="
SELECT
studienplan_id
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE tbl_studienordnung.studiengang_kz=".$db->db_add_param($row->studiengang_kz)."
AND lehre.tbl_studienplan.orgform_kurzbz=
(
SELECT COALESCE
(
".$db->db_add_param($row->orgform_kurzbz).",
(
SELECT orgform_kurzbz FROM public.tbl_studiengang
WHERE
studiengang_kz=(SELECT studiengang_kz FROM public.tbl_prestudent WHERE prestudent_id=".$db->db_add_param($row->prestudent_id,FHC_INTEGER).")
)
)
)
AND EXISTS
(
SELECT 1 FROM lehre.tbl_studienplan_semester
WHERE
studienplan_id=tbl_studienplan.studienplan_id
AND studiensemester_kurzbz=".$db->db_add_param($row->studiensemester_kurzbz)."
AND semester=".$db->db_add_param($row->ausbildungssemester,FHC_INTEGER)."
LIMIT 1
);
";
$result_search = $db->db_query($qry_search);
$ct = $db->db_num_rows($result_search);
if($ct < 1)
{
// Es wurde kein genau passender Studienplan gefunden
if(in_array($row->status_kurzbz,array('Abbrecher','Unterbrecher','Diplomand','Absolvent')))
{
// Schauen ob fuer das vorherige Studiensemester ein eindeutiger Eintrag vorhanden ist
// Da bei diesen Statuseintraegen Studiensemster und Ausbildungssemester meist versetzt sind
// (zB Wintersemester 2. Semester)
$stsem_obj = new studiensemester();
$stsem_prev = $stsem_obj->getPreviousFrom($row->studiensemester_kurzbz);
$qry_search="
SELECT
studienplan_id
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE tbl_studienordnung.studiengang_kz=".$db->db_add_param($row->studiengang_kz)."
AND lehre.tbl_studienplan.orgform_kurzbz=
(
SELECT COALESCE
(
".$db->db_add_param($row->orgform_kurzbz).",
(
SELECT orgform_kurzbz FROM public.tbl_studiengang
WHERE
studiengang_kz=(SELECT studiengang_kz FROM public.tbl_prestudent WHERE prestudent_id=".$db->db_add_param($row->prestudent_id,FHC_INTEGER).")
)
)
)
AND EXISTS
(
SELECT 1 FROM lehre.tbl_studienplan_semester
WHERE
studienplan_id=tbl_studienplan.studienplan_id
AND studiensemester_kurzbz=".$db->db_add_param($stsem_prev)."
AND semester=".$db->db_add_param($row->ausbildungssemester,FHC_INTEGER)."
LIMIT 1
);
";
if($result_search_alternativ = $db->db_query($qry_search))
{
if($db->db_num_rows($result_search_alternativ)==1)
{
// Es wurde ein eindeutiger Eintrag gefunden
// dieser wird gesetzt
$sp = $db->db_fetch_object($result_search_alternativ);
if(!$db->db_query("UPDATE public.tbl_prestudentstatus SET studienplan_id=".$db->db_add_param($sp->studienplan_id, FHC_INTEGER).
" WHERE prestudent_id=".$db->db_add_param($row->prestudent_id, FHC_INTEGER).
" AND status_kurzbz=".$db->db_add_param($row->status_kurzbz).
" AND studiensemester_kurzbz=".$db->db_add_param($row->studiensemester_kurzbz).
" AND ausbildungssemester=".$db->db_add_param($row->ausbildungssemester, FHC_INTEGER)
))
$entries_with_error ++;
continue;
}
}
}
// Pruefen ob der Studiengang in diesem Semester Studienplaene hat
// unabhaengig der orgform
$qry_analyze3="
SELECT
studienplan_id
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE EXISTS
(
SELECT 1 FROM lehre.tbl_studienplan_semester
WHERE
studienplan_id=tbl_studienplan.studienplan_id
AND studiensemester_kurzbz=".$db->db_add_param($row->studiensemester_kurzbz)."
AND semester=".$db->db_add_param($row->ausbildungssemester,FHC_INTEGER)."
LIMIT 1
)
AND studiengang_kz =
(
SELECT studiengang_kz
FROM public.tbl_prestudent
WHERE prestudent_id=".$db->db_add_param($row->prestudent_id)."
);";
$result_analyze3 = $db->db_query($qry_analyze3);
$cnt = $db->db_num_rows($result_analyze3);
if($cnt == 0)
{
$key = $row->studiengang_kz." ".$row->ausbildungssemester." ".$row->studiensemester_kurzbz." ".$row->status_kurzbz;
if(!isset($array_studienplan_semester[$key]))
{
$info = array("stg_kz" => $row->studiengang_kz, "ausbildungssemester" => $row->ausbildungssemester, "studiensemester_kurzbz" => $row->studiensemester_kurzbz, "status_kurzbz" => $row->status_kurzbz, "count" => 0);
$array_studienplan_semester[$key] = $info;
}
$array_studienplan_semester[$key]["count"] ++;
$analyse_gefunden=true;
}
elseif($cnt == 1)
{
// Wenn es in dem Studiengang genau einen passenden Studienplan gibt
// dieser jedoch die falsche orgform hat, dann wird dieser trotzdem gesetzt
// da dies bei alten Studiengaengen nicht immer so genau angelegt wurde
$sp = $db->db_fetch_object($result_analyze3);
if(!$db->db_query("UPDATE public.tbl_prestudentstatus SET studienplan_id=".$db->db_add_param($sp->studienplan_id, FHC_INTEGER).
" WHERE prestudent_id=".$db->db_add_param($row->prestudent_id, FHC_INTEGER).
" AND status_kurzbz=".$db->db_add_param($row->status_kurzbz).
" AND studiensemester_kurzbz=".$db->db_add_param($row->studiensemester_kurzbz).
" AND ausbildungssemester=".$db->db_add_param($row->ausbildungssemester, FHC_INTEGER)
))
$entries_with_error ++;
continue;
}
$entries_not_found++;
$analyse_gefunden=false;
/* load informations about the student */
$ps = new prestudent();
$ps->load($row->prestudent_id);
$stud = new student();
$uid = $stud->getUid($row->prestudent_id);
// Pruefen ob die Orgform generell existiert in einem Studienplan
$qry_analyze1="
SELECT
studienplan_id
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE lehre.tbl_studienplan.orgform_kurzbz=
(
SELECT COALESCE
(
".$db->db_add_param($row->orgform_kurzbz).",
(
SELECT orgform_kurzbz FROM public.tbl_studiengang
WHERE
studiengang_kz=(SELECT studiengang_kz FROM public.tbl_prestudent WHERE prestudent_id=".$db->db_add_param($row->prestudent_id,FHC_INTEGER).")
)
)
)
";
$result_analyze1 = $db->db_query($qry_analyze1);
if($db->db_num_rows($result_analyze1) == 0)
{
$orgform = $row->orgform_kurzbz;
if($orgform == null)
{
$qry_analyze1_2="
SELECT orgform_kurzbz FROM public.tbl_studiengang
WHERE
studiengang_kz=(SELECT studiengang_kz FROM public.tbl_prestudent WHERE prestudent_id=".$db->db_add_param($row->prestudent_id,FHC_INTEGER).")";
$result_analyze1_2 = $db->db_query($qry_analyze1_2);
if($row3 = $db->db_fetch_object($result_analyze1_2))
$orgform = $row3->orgform_kurzbz;
}
if($orgform == null)
{
if(!isset($array_no_orgform[$row->prestudent_id]))
{
$info = array("uid" => $uid, "vorname" => $ps->vorname, "nachname" => $ps->nachname, "stg_kz" => $row->studiengang_kz, "count" => 0);
$array_no_orgform[$row->prestudent_id] = $info;
}
$array_no_orgform[$row->prestudent_id]["count"] ++;
}
else
{
$key = $orgform;
if(!isset($array_orgform[$key]))
{
$info = array("orgform_kurzbz" => $orgform, "count" => 0);
$array_orgform[$key] = $info;
}
$array_orgform[$key]["count"] ++;
}
$analyse_gefunden=true;
}
// Pruefen ob der Studiengang Studienplaene hat
$qry_analyze2="
SELECT
studienplan_id
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
WHERE tbl_studienordnung.studiengang_kz=".$db->db_add_param($row->studiengang_kz);
$result_analyze2 = $db->db_query($qry_analyze2);
if($db->db_num_rows($result_analyze2) == 0)
{
$key = $row->studiengang_kz;
if(!isset($array_stg_without_studienplan[$key]))
{
$info = array("stg_kz" => $row->studiengang_kz, "count" => 0);
$array_stg_without_studienplan[$key] = $info;
}
$array_stg_without_studienplan[$key]["count"] ++;
$analyse_gefunden=true;
}
/*if(!$analyse_gefunden)
var_dump($row);
*/
}
else if($ct > 1)
{
// Es wurden mehrere passende Studienplaene gefunden
// Eindeutige zuordnung nicht moeglich
$ps = new prestudent();
$ps->load($row->prestudent_id);
$stud = new student();
$uid = $stud->getUid($row->prestudent_id);
if(!isset($array_not_unique[$row->prestudent_id]))
{
$info = array("prestudent_id" => $row->prestudent_id, "uid" => $uid, "vorname" => $ps->vorname, "nachname" => $ps->nachname, "stg_kz" => $row->studiengang_kz, "count" => 0);
$array_not_unique[$row->prestudent_id] = $info;
}
$array_not_unique[$row->prestudent_id]["count"] ++;
$entries_not_unique++;
}
else
{
// Es wurde ein eindeutiger Eintrag gefunden
// dieser wird gesetzt
$sp = $db->db_fetch_object($result_search);
if(!$db->db_query("UPDATE public.tbl_prestudentstatus SET studienplan_id=".$db->db_add_param($sp->studienplan_id, FHC_INTEGER).
" WHERE prestudent_id=".$db->db_add_param($row->prestudent_id, FHC_INTEGER).
" AND status_kurzbz=".$db->db_add_param($row->status_kurzbz).
" AND studiensemester_kurzbz=".$db->db_add_param($row->studiensemester_kurzbz).
" AND ausbildungssemester=".$db->db_add_param($row->ausbildungssemester, FHC_INTEGER)
))
$entries_with_error ++;
}
}
$rest_count = $all_count - $entries_not_found - $entries_not_unique - $entries_with_error;
$quote = 100/$all_count*$rest_count;
$color = "black";
if($quote < 33.3)
$color = "red";
else if($quote > 33.3 && $quote < 66.6)
$color = "orange";
else
$color = "green";
echo "Es wurden " . $rest_count . " Einträge eingetragen ";
echo $entries_not_found." wurden nicht gefunden ";
echo $entries_not_unique." sind nicht eindeutig ";
echo $entries_with_error." konnten aufgrund eines Fehlers nicht eingetragen werden ";
echo "Es wurde eine quote von " . round($quote,2) . "% erreicht ";
echo "Details ";
$ct = countIntArray($array_no_orgform);
if($ct)
{
echo $ct . " Einträge ohne Orgform(Prestudentstatus/Studiengang) ";
echo "";
}
$ct = countIntArray($array_stg_without_studienplan);
if($ct)
{
echo $ct . " Einträge ohne Studienplan ";
echo "";
echo "Anzahl Studiengang Studiengang Kennzahl Kurzbezeichnung ";
foreach($array_stg_without_studienplan as $k => $i)
{
$stg = new studiengang();
$stg->load($i["stg_kz"]);
echo "".$i["count"]." ".$stg->bezeichnung." ".$i["stg_kz"]." ".$stg->kurzbzlang." ";
}
echo "
";
}
$ct = countIntArray($array_orgform);
if($ct)
{
echo $ct . " Einträge mit unbekannter Orgform ";
echo "";
}
$ct = countIntArray($array_studienplan_semester);
if($ct)
{
echo $ct . " Einträge ohne Studienplan - Semester Zuordnung ";
echo "";
echo "Gruppierung findet hier nach Studiengang und Prestudentstatus statt";
echo "
";
echo "Anzahl Studiengang Studiengang Kennzahl Ausbildungssemester Semester Kurzbezeichnung Status ";
foreach($array_studienplan_semester as $k => $i)
{
$stg = new studiengang();
$stg->load($i["stg_kz"]);
echo "".$i["count"]." ".$stg->bezeichnung." ".$i["stg_kz"]." ".$i["ausbildungssemester"]." ".$i["studiensemester_kurzbz"]." ".$stg->kurzbzlang." ".$i["status_kurzbz"]." ";
}
echo "
";
echo "
";
}
$ct = countIntArray($array_not_unique);
if($ct)
{
echo $ct . " Einträge, welche nicht eindeutig ermittelt werden konnten ";
echo "";
echo "Anzahl Prestudent_id Vorname Nachname UID Studiengang ";
foreach($array_not_unique as $k => $i)
{
$stg = new studiengang();
$stg->load($i["stg_kz"]);
echo "".$i["count"]." ".$i["prestudent_id"]." ".$i["vorname"]." ".$i["nachname"]." ".$i["uid"]." ".$stg->bezeichnung." ";
}
echo "
";
}
}
$startString = "Neu Starten";
}
else
{
?>
Der folgende Vorgang kann unter Umständen mehrere Minuten dauern!
Es wird versucht anhand der orgform_kurzbz, der prestudent_id, der studiensemester_kurzbz und des ausbildungssemesters die studienplan_id des prestudentstatus zu ermitteln
Es werden nur Einträge mit studienplan_id IS NULL geändert
Hinweis:
Vor diesem Skript sollte Checksystem ausgeführt werden!
Wenn die Studienordnungen nicht vollständig eingepflegt sind, kann dieses Script ausgeführt werden um Dummy Studienpläne aufgrund von Statuseinträgen zu generieren!
';
function countIntArray($arr)
{
$count = 0;
foreach($arr as $k => $i)
{
if(is_array($i))
{
$count += countIntArray($i);
}
else if($k == "count" && is_numeric($i))
{
$count += $i;
}
}
return $count;
}
?>