mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
126defadb7
UHSTAT ausgefüllt haben damit diese direkt verglichen und gelöscht werden können. Fehlende DB checks hinzugefügt
1721 lines
70 KiB
PHP
1721 lines
70 KiB
PHP
<?php
|
|
/*
|
|
* Copyright (C) 2006 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: Christian Paminger < christian.paminger@technikum-wien.at >
|
|
* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
|
|
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
|
|
* Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
|
|
*/
|
|
/**
|
|
* Script zum Zusammenlegen Doppelter Studenten
|
|
* Es werden zwei Listen mit Studenten angezeigt
|
|
* Links wird der Student markiert, der mit dem
|
|
* rechts markierten zusammengelegt werden soll.
|
|
* Der linke Student wird danach entfernt.
|
|
*/
|
|
require_once ('../../config/vilesci.config.inc.php');
|
|
require_once ('../../include/basis_db.class.php');
|
|
require_once ('../../include/person.class.php');
|
|
require_once ('../../include/functions.inc.php');
|
|
require_once ('../../include/benutzerberechtigung.class.php');
|
|
require_once ('../../include/akte.class.php');
|
|
require_once ('../../include/dms.class.php');
|
|
require_once ('../../include/adresse.class.php');
|
|
require_once ('../../include/personlog.class.php');
|
|
require_once ('../../include/prestudent.class.php');
|
|
require_once ('../../include/benutzer.class.php');
|
|
require_once ('../../include/mitarbeiter.class.php');
|
|
require_once ('../../include/fotostatus.class.php');
|
|
require_once ('../../include/kontakt.class.php');
|
|
require_once ('../../include/dokument.class.php');
|
|
require_once ('../../include/reihungstest.class.php');
|
|
require_once ('../../include/pruefling.class.php');
|
|
require_once ('../../include/udf.class.php');
|
|
|
|
|
|
if (! $db = new basis_db())
|
|
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
|
|
|
|
$uid = get_uid();
|
|
|
|
$rechte = new benutzerberechtigung();
|
|
$rechte->getBerechtigungen($uid);
|
|
if (! $rechte->isBerechtigt('basis/person', null, 'suid'))
|
|
die($rechte->errormsg);
|
|
|
|
$udf = new UDF();
|
|
$msg_info = array();
|
|
$msg_error = array();
|
|
$msg_warning = array();
|
|
$outp = '';
|
|
|
|
$filter = isset($_REQUEST['filter']) ? $_REQUEST['filter'] : '';
|
|
// Filterstring saeubern
|
|
if ($filter != '')
|
|
{
|
|
// String aufsplitten und Sonderzeichen entfernen
|
|
$searchItems = explode(' ', TRIM(str_replace(',', '', $filter), ' !.?'));
|
|
// Leerzeichen und Whitespaces entfernen
|
|
$searchItems = preg_replace("/\s/", '', $searchItems);
|
|
// Leere Strings aus Array entfernen
|
|
while ($array_key = array_search("", $searchItems))
|
|
unset($searchItems[$array_key]);
|
|
|
|
// Wenn Zeichen uebrig bleiben
|
|
if (implode(',', $searchItems) != '')
|
|
{
|
|
$filter = implode(' ', $searchItems);
|
|
}
|
|
else
|
|
$filter = '';
|
|
}
|
|
|
|
// Wenn 2 Personen IDs uebergeben werden, diese Personen laden
|
|
// Wenn nur eine Person ID uebergeben wird, alle Personen mit diesem Namen laden
|
|
if (isset($_GET['person_id_1']) && $_GET['person_id_1'] != '' && isset($_GET['person_id_2']) && $_GET['person_id_2'] != '')
|
|
{
|
|
$person_id_1 = $_GET['person_id_1'];
|
|
$person_id_2 = $_GET['person_id_2'];
|
|
}
|
|
elseif ((isset($_GET['person_id_1']) && $_GET['person_id_1'] != '') || (isset($_GET['person_id_2']) && $_GET['person_id_2'] != ''))
|
|
{
|
|
if (isset($_GET['person_id_1']) && $_GET['person_id_1'] != '')
|
|
{
|
|
$person = new person($_GET['person_id_1']);
|
|
$filter = $person->nachname.' '.$person->vorname;
|
|
$person_id_1 = '';
|
|
$person_id_2 = '';
|
|
}
|
|
elseif (isset($_GET['person_id_2']) && $_GET['person_id_2'] != '')
|
|
{
|
|
$person = new person($_GET['person_id_2']);
|
|
$filter = $person->nachname.' '.$person->vorname;
|
|
$person_id_1 = '';
|
|
$person_id_2 = '';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$person_id_1 = '';
|
|
$person_id_2 = '';
|
|
}
|
|
|
|
if (isset($_GET['radio_1']) || isset($_POST['radio_1']))
|
|
{
|
|
$personToDelete = (isset($_GET['radio_1']) ? $_GET['radio_1'] : $_POST['radio_1']);
|
|
}
|
|
else
|
|
{
|
|
$personToDelete = - 1;
|
|
}
|
|
if (isset($_GET['radio_2']) || isset($_POST['radio_2']))
|
|
{
|
|
$personToKeep = (isset($_GET['radio_2']) ? $_GET['radio_2'] : $_POST['radio_2']);
|
|
}
|
|
else
|
|
{
|
|
$personToKeep = - 1;
|
|
}
|
|
|
|
if (isset($personToDelete) && isset($personToKeep) && $personToDelete >= 0 && $personToKeep >= 0)
|
|
{
|
|
if ($personToDelete == $personToKeep)
|
|
{
|
|
$msg_error = "Die Datensaetze duerfen nicht die gleiche ID haben";
|
|
}
|
|
else
|
|
{
|
|
// Prüfen, ob tbl_alma existiert (also ob ALMA extension installiert ist)
|
|
if($result = @$db->db_query("SELECT 1 FROM sync.tbl_alma LIMIT 1"))
|
|
{
|
|
// Wenn Person in ALMA Bibliothek vorkommt, ggf. die Person dort übernehmen
|
|
$alma_has_personToKeep = false;
|
|
$alma_has_personToDelete = false;
|
|
$alma_update_obj = new StdClass();
|
|
$alma_query_upd = '';
|
|
|
|
$alma_query = "
|
|
SELECT *
|
|
FROM sync.tbl_alma
|
|
WHERE (
|
|
person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR
|
|
person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . "
|
|
)";
|
|
|
|
if ($result = $db->db_query($alma_query))
|
|
{
|
|
while ($row = $db->db_fetch_object($result))
|
|
{
|
|
if ($row->person_id == $personToKeep)
|
|
{
|
|
$alma_has_personToKeep = true;
|
|
}
|
|
if ($row->person_id == $personToDelete)
|
|
{
|
|
$alma_has_personToDelete = true;
|
|
$alma_update_obj = $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Falls nur die zu löschende Person in ALMA vorhanden ist, mit der zu behaltenden Person ersetzen
|
|
if ($alma_has_personToDelete && !$alma_has_personToKeep)
|
|
{
|
|
$alma_query_upd = "
|
|
UPDATE sync.tbl_alma
|
|
SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . "
|
|
WHERE alma_match_id = " . $alma_update_obj->alma_match_id . "
|
|
AND person_id = " . $alma_update_obj->person_id . ";";
|
|
}
|
|
// Falls bereits doppelte Einträge in ALMA vorhanden sind (zu löschende und zu behaltende), manuell lösen
|
|
elseif ($alma_has_personToDelete && $alma_has_personToKeep)
|
|
{
|
|
die('Es sind bereits beide Personen in ALMA vorhanden. Bitte zuerst direkt im ALMA Bibliotheksystem und in der tbl_alma lösen.');
|
|
}
|
|
}
|
|
|
|
// Prüfen, ob tbl_sap_students exisitiert
|
|
if($result = @$db->db_query("SELECT 1 FROM sync.tbl_sap_students LIMIT 1"))
|
|
{
|
|
// Wenn Person in SAP students vorkommt, ggf. die Person dort übernehmen
|
|
$sap_students_has_personToKeep = false;
|
|
$sap_students_has_personToDelete = false;
|
|
$sap_students_update_obj = new StdClass();
|
|
$sap_students_query_upd = '';
|
|
|
|
$sap_students_query = "
|
|
SELECT *
|
|
FROM sync.tbl_sap_students
|
|
WHERE (
|
|
person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR
|
|
person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . "
|
|
)";
|
|
|
|
if ($result = $db->db_query($sap_students_query)) {
|
|
while ($row = $db->db_fetch_object($result)) {
|
|
if ($row->person_id == $personToKeep) {
|
|
$sap_students_has_personToKeep = true;
|
|
}
|
|
if ($row->person_id == $personToDelete) {
|
|
$sap_students_has_personToDelete = true;
|
|
$sap_students_update_obj = $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Wenn die zu löschende Person in SAP students eingetragen ist, dann mit der zu behaltenden Person überschreiben
|
|
if ($sap_students_has_personToDelete && !$sap_students_has_personToKeep) {
|
|
$sap_students_query_upd = "
|
|
UPDATE sync.tbl_sap_students
|
|
SET person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . "
|
|
WHERE sap_user_id = " . $db->db_add_param($sap_students_update_obj->sap_user_id, FHC_STRING) . "
|
|
AND person_id = " . $sap_students_update_obj->person_id . ";";
|
|
}
|
|
// Wenn doppelte Personeneinträge in SAP students vorhanden sind (zu löschende UND zu behaltende Person),
|
|
// dann manuell lösen
|
|
elseif ($sap_students_has_personToDelete && $sap_students_has_personToKeep) {
|
|
die('Es sind bereits beide Personen in SAP vorhanden. Bitte zuerst direkt in der tbl_sap_students lösen.');
|
|
}
|
|
}
|
|
|
|
$personToDelete_obj = new person();
|
|
if ($personToDelete_obj->load($personToDelete))
|
|
{
|
|
$error = false;
|
|
$sql_query_upd1 = "BEGIN;";
|
|
$personToKeep_obj = new person();
|
|
$personToKeep_obj->load($personToKeep);
|
|
|
|
// Wenn beide Personen eine SVNR oder ein Ersatzkennzeichen haben, abbrechen
|
|
if (($personToDelete_obj->ersatzkennzeichen != '' && $personToKeep_obj->ersatzkennzeichen != '') ||
|
|
($personToDelete_obj->svnr != '' && $personToKeep_obj->svnr != ''))
|
|
{
|
|
$msg_error[] = 'Beide Personen haben eine Sozialversicherungsnummer oder ein Ersatzkennzeichen und können nicht zusammengelegt werden.<br>
|
|
Bitte wenden Sie sich an einen Administrator.';
|
|
$error = true;
|
|
}
|
|
|
|
// Wenn beide Personen eine Matr_nr haben, abbrechen
|
|
if ($personToDelete_obj->matr_nr != '' && $personToKeep_obj->matr_nr != ''
|
|
&& $personToDelete_obj->matr_nr != $personToKeep_obj->matr_nr)
|
|
{
|
|
$msg_error[] = 'Beide Personen haben eine Matrikelnummer und können nicht zusammengelegt werden.<br>
|
|
Bitte wenden Sie sich an einen Administrator.';
|
|
$error = true;
|
|
}
|
|
|
|
// Wenn beide Personen ein BPK haben, abbrechen
|
|
if ($personToDelete_obj->bpk != '' && $personToKeep_obj->bpk != '' && $personToDelete_obj->bpk != $personToKeep_obj->bpk)
|
|
{
|
|
$msg_error[] = 'Beide Personen haben unterschiedliche BPK und können nicht zusammengelegt werden.<br>
|
|
Bitte wenden Sie sich an einen Administrator.';
|
|
$error = true;
|
|
}
|
|
|
|
// Wenn zwei gleiche rt_person Einträge vorhanden sind, wird ein Fehler ausgegeben und abgebrochen
|
|
$reihungstest_personToKeep = new reihungstest();
|
|
$reihungstest_personToKeep->getReihungstestPerson($personToKeep);
|
|
$doppelteReihungstestzuordnung = false;
|
|
|
|
foreach ($reihungstest_personToKeep->result as $row)
|
|
{
|
|
$rt_doppelt = new reihungstest();
|
|
if ($rt_doppelt->checkPersonRtStudienplanExists($personToDelete, $row->reihungstest_id, $row->studienplan_id))
|
|
{
|
|
$doppelteReihungstestzuordnung = true;
|
|
$msg_error[] = "Die Person ".$personToDelete." hat schon eine Reihungstestzuordnung
|
|
zu Reihungstest ID ".$row->reihungstest_id." im Studienplan ".$row->studienplan_id.".<br>
|
|
Sie müssen die Datensätze manuell bereinigen, bevor Sie die Personen zusammenlegen können.";
|
|
$error = true;
|
|
break;
|
|
}
|
|
}
|
|
if ($doppelteReihungstestzuordnung === false)
|
|
$sql_query_upd1 .= "UPDATE public.tbl_rt_person SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
|
|
|
|
$personUDF = $udf->personHasUDF();
|
|
|
|
if ($personUDF)
|
|
{
|
|
$udfToKeep = json_decode($personToKeep_obj->udf_values, true);
|
|
$udfToDelete = json_decode($personToDelete_obj->udf_values, true);
|
|
|
|
$udfToKeep = is_null($udfToKeep) ? array() : $udfToKeep;
|
|
$udfToDelete = is_null($udfToDelete) ? array() : $udfToDelete;
|
|
|
|
if ($udfToKeep != $udfToDelete)
|
|
{
|
|
foreach ($udfToDelete as $key => $udfValue)
|
|
{
|
|
if (!array_key_exists($key, $udfToKeep))
|
|
{
|
|
$udfToKeep[$key] = $udfValue;
|
|
}
|
|
elseif ($udfToKeep[$key] !== $udfValue && !is_null($udfValue))
|
|
{
|
|
if (is_null($udfToKeep[$key]))
|
|
$udfToKeep[$key] = $udfValue;
|
|
else
|
|
{
|
|
$msg_error[] = 'Beide Personen haben unterschiedliche Werte in den UDFs und können nicht zusammengelegt werden.<br>
|
|
Sie müssen die Datensätze manuell bereinigen, bevor Sie die Personen zusammenlegen können.';
|
|
$error = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($result = @$db->db_query("SELECT 1 FROM public.tbl_kennzeichen LIMIT 1"))
|
|
{
|
|
$kennzeichen_has_personToKeep = array();
|
|
$kennzeichen_has_personToDelete = array();
|
|
|
|
$kennzeichen_query = "
|
|
SELECT *
|
|
FROM public.tbl_kennzeichen
|
|
WHERE (
|
|
person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR
|
|
person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . "
|
|
)
|
|
ORDER BY kennzeichentyp_kurzbz, aktiv DESC";
|
|
|
|
if ($result = $db->db_query($kennzeichen_query))
|
|
{
|
|
while ($row = $db->db_fetch_object($result))
|
|
{
|
|
if ($row->person_id === $personToKeep)
|
|
{
|
|
$kennzeichen_has_personToKeep[] = $row;
|
|
}
|
|
else if ($row->person_id === $personToDelete)
|
|
{
|
|
$kennzeichen_has_personToDelete[] = $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!empty($kennzeichen_has_personToDelete))
|
|
{
|
|
foreach ($kennzeichen_has_personToDelete as $kennzeichen_toDelete)
|
|
{
|
|
$kennzeichen_toKeep_Kurzbz = array_column($kennzeichen_has_personToKeep, 'kennzeichentyp_kurzbz');
|
|
|
|
if (in_array($kennzeichen_toDelete->kennzeichentyp_kurzbz, $kennzeichen_toKeep_Kurzbz))
|
|
{
|
|
$kennzeichen_toKeep_Keys = array_keys($kennzeichen_toKeep_Kurzbz, $kennzeichen_toDelete->kennzeichentyp_kurzbz);
|
|
|
|
foreach ($kennzeichen_toKeep_Keys as $key)
|
|
{
|
|
if (($kennzeichen_has_personToKeep[$key]->aktiv === 't' && $kennzeichen_toDelete->aktiv === 'f') ||
|
|
($kennzeichen_has_personToKeep[$key]->aktiv === 'f' && $kennzeichen_toDelete->aktiv === 't') ||
|
|
($kennzeichen_has_personToKeep[$key]->aktiv === 'f' && $kennzeichen_toDelete->aktiv === 'f'))
|
|
{
|
|
if ($kennzeichen_has_personToKeep[$key]->inhalt !== $kennzeichen_toDelete->inhalt)
|
|
{
|
|
$sql_query_upd1 .= "UPDATE public.tbl_kennzeichen SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE kennzeichen_id=" . $db->db_add_param($kennzeichen_toDelete->kennzeichen_id, FHC_INTEGER) . ";";
|
|
$kennzeichen_has_personToKeep[] = $kennzeichen_toDelete;
|
|
continue 2;
|
|
}
|
|
else
|
|
{
|
|
if ($kennzeichen_toDelete->aktiv === 'f')
|
|
{
|
|
$sql_query_upd1 .= "DELETE FROM public.tbl_kennzeichen WHERE kennzeichen_id=" . $db->db_add_param($kennzeichen_toDelete->kennzeichen_id, FHC_INTEGER) . ";";
|
|
$msg_warning[] = "Das nicht aktive Kennzeichen mit der ID '" . $kennzeichen_toDelete->kennzeichen_id . "' wurde gelöscht, <br>
|
|
da es der gleiche Inhalt wie beim Kennzeichen mit der ID '". $kennzeichen_has_personToKeep[$key]->kennzeichen_id ."' ist.";
|
|
continue 2;
|
|
}
|
|
$msg_error[] = 'Beide Personen haben ein Kennzeichen mit dem gleichen Typ ('. $kennzeichen_toDelete->kennzeichentyp_kurzbz.') und den gleichen Inhalt. Können nicht zusammengelegt werden.<br>
|
|
Sie müssen die Datensätze manuell bereinigen, bevor Sie die Personen zusammenlegen können.';
|
|
$error = true;
|
|
break 2;
|
|
}
|
|
}
|
|
else if ($kennzeichen_has_personToKeep[$key]->aktiv === 't' && $kennzeichen_toDelete->aktiv === 't')
|
|
{
|
|
$msg_error[] = 'Beide Personen haben ein aktives Kennzeichen mit dem gleichen Typ ('. $kennzeichen_toDelete->kennzeichentyp_kurzbz.'). Können nicht zusammengelegt werden.<br>
|
|
Sie müssen die Datensätze manuell bereinigen, bevor Sie die Personen zusammenlegen können.';
|
|
$error = true;
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$sql_query_upd1 .= "UPDATE public.tbl_kennzeichen SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE kennzeichen_id=" . $db->db_add_param($kennzeichen_toDelete->kennzeichen_id, FHC_INTEGER) . ";";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($result = @$db->db_query("SELECT 1 FROM bis.tbl_uhstat1daten LIMIT 1"))
|
|
{
|
|
$uhstat_has_personToKeep = array();
|
|
$uhstat_has_personToDelete = array();
|
|
|
|
$uhstat_query = "
|
|
SELECT uhstat1daten_id, person_id
|
|
FROM bis.tbl_uhstat1daten
|
|
WHERE (
|
|
person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR
|
|
person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . "
|
|
)
|
|
ORDER BY updateamum DESC NULLS LAST, insertamum DESC NULLS LAST";
|
|
|
|
// Herausfinden, ob UHSTAT Daten der löschenden oder zu belassenden Person zugeordnet sind
|
|
if ($result = $db->db_query($uhstat_query))
|
|
{
|
|
while ($row = $db->db_fetch_object($result))
|
|
{
|
|
if ($row->person_id === $personToKeep)
|
|
{
|
|
$uhstat_has_personToKeep[] = $row;
|
|
}
|
|
else if ($row->person_id === $personToDelete)
|
|
{
|
|
$uhstat_has_personToDelete[] = $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
// wenn UHSTAT Daten an Person, die gelöscht werden soll, hängen
|
|
if (!empty($uhstat_has_personToDelete))
|
|
{
|
|
// Wenn es auch UHSTAT Daten für die Person, die bleibt, gibt
|
|
if (!empty($uhstat_has_personToKeep))
|
|
{
|
|
// Unklar: welche Version der Daten soll behalten werden?
|
|
$msg_error[] = 'Beide Personen haben UHSTAT1 Daten. Können nicht zusammengelegt werden.<br>
|
|
Sie müssen die Datensätze manuell bereinigen, bevor Sie die Personen zusammenlegen können:<br>
|
|
<a href="'.APP_ROOT.'index.ci.php/codex/UHSTAT1?person_id='.$personToDelete.'" target="_blank">zum UHSTAT von Person A</a>
|
|
/
|
|
<a href="'.APP_ROOT.'index.ci.php/codex/UHSTAT1?person_id='.$personToKeep.'" target="_blank">zum UHSTAT von Person B</a>
|
|
<br>';
|
|
|
|
$error = true;
|
|
}
|
|
else
|
|
{
|
|
// Es gibt nur UHSTAT Daten für die zu löschende Person: Update
|
|
foreach ($uhstat_has_personToDelete as $uhstat_toDelete)
|
|
{
|
|
$sql_query_upd1 .= "UPDATE bis.tbl_uhstat1daten SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE uhstat1daten_id=" . $db->db_add_param($uhstat_toDelete->uhstat1daten_id, FHC_INTEGER) . ";";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($result = @$db->db_query("SELECT 1 FROM public.tbl_rueckstellung LIMIT 1"))
|
|
{
|
|
$rueckstellung_has_personToKeep = array();
|
|
$rueckstellung_has_personToDelete = array();
|
|
|
|
$rueckstellung_query = "
|
|
SELECT rueckstellung_id, person_id
|
|
FROM public.tbl_rueckstellung
|
|
WHERE (
|
|
person_id = " . $db->db_add_param($personToKeep, FHC_INTEGER) . " OR
|
|
person_id = " . $db->db_add_param($personToDelete, FHC_INTEGER) . "
|
|
)
|
|
ORDER BY insertamum DESC NULLS LAST";
|
|
|
|
// Herausfinden, ob Rueckstellung Daten der löschenden oder zu belassenden Person zugeordnet sind
|
|
if ($result = $db->db_query($rueckstellung_query))
|
|
{
|
|
while ($row = $db->db_fetch_object($result))
|
|
{
|
|
if ($row->person_id === $personToKeep)
|
|
{
|
|
$rueckstellung_has_personToKeep[] = $row;
|
|
}
|
|
else if ($row->person_id === $personToDelete)
|
|
{
|
|
$rueckstellung_has_personToDelete[] = $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
// wenn Rueckstellung Daten an Person, die gelöscht werden soll, hängen
|
|
if (!empty($rueckstellung_has_personToDelete))
|
|
{
|
|
// Wenn es auch Rueckstellung Daten für die Person, die bleibt, gibt
|
|
if (!empty($rueckstellung_has_personToKeep))
|
|
{
|
|
// Unklar: welche Version der Daten soll behalten werden?
|
|
$msg_error[] = 'Beide Personen haben Rückstellung Daten. Können nicht zusammengelegt werden.<br>
|
|
Sie müssen die Datensätze manuell bereinigen, bevor Sie die Personen zusammenlegen können.';
|
|
$error = true;
|
|
}
|
|
else
|
|
{
|
|
// Es gibt nur Rueckstellung Daten für die zu löschende Person: Update
|
|
foreach ($rueckstellung_has_personToDelete as $rueckstellung_toDelete)
|
|
{
|
|
$sql_query_upd1 .= "UPDATE public.tbl_rueckstellung SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE rueckstellung_id=" . $db->db_add_param($rueckstellung_toDelete->rueckstellung_id, FHC_INTEGER) . ";";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($error == false)
|
|
{
|
|
// Wenn bei einer der Personen das Foto gesperrt ist, dann die Sperre uebernehmen
|
|
if ($personToDelete_obj->foto_sperre)
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET foto_sperre=true WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
|
|
// Wenn die zu loeschende Person ein Foto hat, und die andere nicht,
|
|
// dann wird das Foto, die Fotosperre und die Historie des Fotostatus übernommen
|
|
if ($personToDelete_obj->foto != '' && $personToKeep_obj->foto == '')
|
|
{
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET foto=" . $db->db_add_param($personToDelete_obj->foto) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person_fotostatus SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$msg_warning[] = "Das Foto der zu löschenden Person wurde übernommen";
|
|
}
|
|
// Wenn 2 Fotos vorhanden sind, wird das Aktuellere (aus der Akte) übernommen, skaliert und dessen Fotostatus übernommen
|
|
elseif ($personToDelete_obj->foto != '' && $personToKeep_obj->foto != '')
|
|
{
|
|
$akte1 = new akte();
|
|
$akte1->getAkten($personToDelete, 'Lichtbil', null, null, true);
|
|
if (isset($akte1->result[0]->insertamum))
|
|
$insertamum1 = $akte1->result[0]->insertamum;
|
|
else
|
|
$insertamum1 = 0;
|
|
|
|
$akte2 = new akte();
|
|
$akte2->getAkten($personToKeep, 'Lichtbil', null, null, true);
|
|
if (isset($akte2->result[0]->insertamum))
|
|
$insertamum2 = $akte2->result[0]->insertamum;
|
|
else
|
|
$insertamum2 = 0;
|
|
|
|
// Die zu löschende Person hat ein aktuelleres Foto -> dieses nehmen
|
|
if ($insertamum1 > $insertamum2)
|
|
{
|
|
$akteInhalt = $akte1->result[0]->inhalt;
|
|
$akteDMS = $akte1->result[0]->dms_id;
|
|
// Bestehende Fotohistorie löschen und jene vom neuen Foto übernehmen
|
|
$sql_query_upd1 .= "DELETE FROM public.tbl_person_fotostatus WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person_fotostatus SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$msg_warning[] = "Das Foto von Person ".$personToDelete." war aktueller und wurde übernommen";
|
|
}
|
|
elseif ($insertamum1 < $insertamum2)
|
|
{
|
|
$akteInhalt = $akte2->result[0]->inhalt;
|
|
$akteDMS = $akte2->result[0]->dms_id;
|
|
// Bestehende Fotohistorie löschen und jene vom neuen Foto übernehmen
|
|
$sql_query_upd1 .= "DELETE FROM public.tbl_person_fotostatus WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$msg_warning[] = "Das Foto von Person ".$personToKeep." war aktueller und wurde übernommen";
|
|
}
|
|
else
|
|
{
|
|
$akteInhalt = '';
|
|
$akteDMS = '';
|
|
}
|
|
// Wenn Inhalt vorhanden, diesen laden, sonst aus DMS
|
|
$base64foto = '';
|
|
if (isset($akteInhalt) && $akteInhalt != '')
|
|
{
|
|
$base64foto = $akteInhalt;
|
|
}
|
|
elseif (isset($akteDMS) && $akteDMS != '')
|
|
{
|
|
$dms = new dms();
|
|
if ($dms->load($akteDMS))
|
|
{
|
|
$filename = DMS_PATH . $dms->filename;
|
|
$base64foto = base64_encode(file_get_contents($filename));
|
|
}
|
|
}
|
|
|
|
// Bild in tbl_person auf 240x320 skalieren
|
|
$base64_src = resize($base64foto, 240, 320);
|
|
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET foto=" . $db->db_add_param($base64_src) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
}
|
|
|
|
// Wenn Ersatzkennzeichen und Sozialversicherungsnummer vorhanden ist, beide erhalten
|
|
// Setzen erst möglich, wenn $personToDelete_obj gelöscht
|
|
|
|
$ersatzkennzeichen = '';
|
|
if ($personToDelete_obj->ersatzkennzeichen == '' && $personToKeep_obj->ersatzkennzeichen != '')
|
|
$ersatzkennzeichen = $personToKeep_obj->ersatzkennzeichen;
|
|
if ($personToKeep_obj->ersatzkennzeichen == '' && $personToDelete_obj->ersatzkennzeichen != '')
|
|
$ersatzkennzeichen = $personToDelete_obj->ersatzkennzeichen;
|
|
|
|
$sozialversicherungsnummer = '';
|
|
if ($personToDelete_obj->svnr == '' && $personToKeep_obj->svnr != '')
|
|
$sozialversicherungsnummer = $personToKeep_obj->svnr;
|
|
if ($personToKeep_obj->svnr == '' && $personToDelete_obj->svnr != '')
|
|
$sozialversicherungsnummer = $personToDelete_obj->svnr;
|
|
|
|
$matr_nr = '';
|
|
if ($personToDelete_obj->matr_nr == '' && $personToKeep_obj->matr_nr != '')
|
|
$matr_nr = $personToKeep_obj->matr_nr;
|
|
if ($personToKeep_obj->matr_nr == '' && $personToDelete_obj->matr_nr != '')
|
|
$matr_nr = $personToDelete_obj->matr_nr;
|
|
else
|
|
$matr_nr = $personToKeep_obj->matr_nr;
|
|
|
|
$bpk = '';
|
|
if ($personToDelete_obj->bpk == '' && $personToKeep_obj->bpk != '')
|
|
$bpk = $personToKeep_obj->bpk;
|
|
if ($personToKeep_obj->bpk == '' && $personToDelete_obj->bpk != '')
|
|
$bpk = $personToDelete_obj->bpk;
|
|
else
|
|
$bpk = $personToKeep_obj->bpk;
|
|
|
|
// Beide Anmerkungen behalten, wenn vorhanden und Person_id der gelöschten Person in die Anmerkung schreiben
|
|
$anmerkung = '';
|
|
if ($personToDelete_obj->anmerkungen == '' && $personToKeep_obj->anmerkungen != '')
|
|
$anmerkung = $personToKeep_obj->anmerkungen;
|
|
if ($personToKeep_obj->anmerkungen == '' && $personToDelete_obj->anmerkungen != '')
|
|
$anmerkung = $personToDelete_obj->anmerkungen;
|
|
if ($personToKeep_obj->anmerkungen != '' && $personToDelete_obj->anmerkungen != '')
|
|
$anmerkung = $personToKeep_obj->anmerkungen."
|
|
Alte Anmerkungen: ".$personToDelete_obj->anmerkungen;
|
|
|
|
$anmerkung .= "
|
|
|
|
Zusammengelegt mit Person-ID ".$personToDelete_obj->person_id." am ".date('d.m.Y H:i:s')." von ".$uid;
|
|
|
|
// Letztbenutzten Zugangscode abfragen und übernehmen
|
|
$zugangscode = '';
|
|
$log = new personlog();
|
|
$log->getLog($personToDelete, null, null, array('name' => 'Login with code'));
|
|
if (isset($log->logs[0]))
|
|
$logZugriff1 = strtotime($log->logs[0]->zeitpunkt);
|
|
else
|
|
$logZugriff1 = 0;
|
|
|
|
$log->getLog($personToKeep, null, null, array('name' => 'Login with code'));
|
|
if (isset($log->logs[0]))
|
|
$logZugriff2 = strtotime($log->logs[0]->zeitpunkt);
|
|
else
|
|
$logZugriff2 = 0;
|
|
|
|
if ($logZugriff1 > $logZugriff2)
|
|
$zugangscode = $personToDelete_obj->zugangscode;
|
|
elseif ($logZugriff2 > $logZugriff1)
|
|
$zugangscode = $personToKeep_obj->zugangscode;
|
|
else
|
|
$zugangscode = $personToKeep_obj->zugangscode;
|
|
|
|
$sql_query_upd1 .= "UPDATE lehre.tbl_abschlusspruefung SET pruefer1=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE pruefer1=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE lehre.tbl_abschlusspruefung SET pruefer2=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE pruefer2=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE lehre.tbl_abschlusspruefung SET pruefer3=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE pruefer3=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE lehre.tbl_projektbetreuer SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE lehre.tbl_vertrag SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_adresse SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_akte SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_bankverbindung SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_benutzer SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_kontakt SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_konto SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_msg_message SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_msg_recipient SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_msg_status SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_notizzuordnung SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_personfunktionstandort SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_preincoming SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_preincoming SET person_id_coordinator_dep=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id_coordinator_dep=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_preincoming SET person_id_coordinator_int=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id_coordinator_int=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_preincoming SET person_id_emergency=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id_emergency=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_preinteressent SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE public.tbl_prestudent SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE system.tbl_filters SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE system.tbl_log SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE system.tbl_person_lock SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE system.tbl_issue SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE wawi.tbl_betriebsmittelperson SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= "UPDATE wawi.tbl_konto SET person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . " WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
$sql_query_upd1 .= $alma_query_upd;
|
|
$sql_query_upd1 .= $sap_students_query_upd;
|
|
|
|
$sql_query_upd1 .= "DELETE FROM public.tbl_person WHERE person_id=" . $db->db_add_param($personToDelete, FHC_INTEGER) . ";";
|
|
|
|
// Ersatzkennzeichen und Sozialversicherungsnummer erst setzen, wenn nur mehr eine Person vorhanden ist
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET ersatzkennzeichen=" . $db->db_add_param($ersatzkennzeichen, FHC_STRING) . ", svnr=" . $db->db_add_param($sozialversicherungsnummer, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
|
|
// Zugangscode erst setzen, wenn nur mehr eine Person vorhanden ist
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET zugangscode=" . $db->db_add_param($zugangscode, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
|
|
// Matr_nr erst setzen, wenn nur mehr eine Person vorhanden ist
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET matr_nr=" . $db->db_add_param($matr_nr, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
|
|
// BPK erst setzen, wenn nur mehr eine Person vorhanden ist
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET bpk=" . $db->db_add_param($bpk, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
|
|
// Anmerkung erst setzen, wenn nur mehr eine Person vorhanden ist
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET anmerkung=" . $db->db_add_param($anmerkung, FHC_STRING) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
|
|
if ($personUDF)
|
|
$sql_query_upd1 .= "UPDATE public.tbl_person SET udf_values=" . $db->db_add_param(json_encode($udfToKeep)) . " WHERE person_id=" . $db->db_add_param($personToKeep, FHC_INTEGER) . ";";
|
|
|
|
if ($db->db_query($sql_query_upd1))
|
|
{
|
|
$msg_info[] = "Update Query:";
|
|
$msg_info = array_merge($msg_info, explode(';', $sql_query_upd1));
|
|
$db->db_query("COMMIT;");
|
|
// Logeintrag schreiben
|
|
PersonLog($personToKeep, 'Action', array(
|
|
'name' => 'Persons merged',
|
|
'message' => 'Person with id ' . $personToDelete . ' merged into person with id ' . $personToKeep,
|
|
'success' => 'true'
|
|
), 'datenwartung', 'core', null, $uid);
|
|
|
|
/*
|
|
* ----------------------------------------------------------------------
|
|
* Adressen der verbliebenen Person laden und zusammenräumen
|
|
* -----------------------------------------------------------------------
|
|
*/
|
|
$adresse = new adresse();
|
|
$adresse->load_pers($personToKeep);
|
|
$adressArray = array();
|
|
$adressLoeschArray = array();
|
|
|
|
// Alle Adressen in ein Array schreiben
|
|
foreach ($adresse->result AS $row)
|
|
{
|
|
$clean_strasse = str_replace(array(' ',' ',',','/','.',':',';','-'), '', strtolower($row->strasse));
|
|
$clean_strasse = str_replace('straße', 'strasse', $clean_strasse);
|
|
$adressArray[] = array('adresse_id' => $row->adresse_id,
|
|
'cleanstrasse' => $clean_strasse,
|
|
'strasse' => $row->strasse,
|
|
'plz' => $row->plz,
|
|
'ort' => $row->ort,
|
|
'gemeinde' => $row->gemeinde,
|
|
'nation' => $row->nation,
|
|
'heimatadresse' => $row->heimatadresse,
|
|
'zustelladresse' => $row->zustelladresse
|
|
);
|
|
}
|
|
// Sortiert die Adressen
|
|
function sortAdressArray($a, $b)
|
|
{
|
|
$c = strcmp($b['cleanstrasse'],$a['cleanstrasse']);
|
|
$c .= strcmp($b['plz'], $a['plz']);
|
|
$c .= strcmp($b['ort'], $a['ort']);
|
|
$c .= $b['heimatadresse'] - $a['heimatadresse'];
|
|
$c .= $b['zustelladresse'] - $a['zustelladresse'];
|
|
return $c;
|
|
}
|
|
usort($adressArray, "sortAdressArray");
|
|
|
|
$cleanstrasse = '';
|
|
$plz = '';
|
|
$ort = '';
|
|
foreach ($adressArray AS $key => $value)
|
|
{
|
|
// Leere/Halbleere Datensätze löschen
|
|
if (($value['cleanstrasse'] == '' && $value['plz'] == '' && $value['ort'] == '') ||
|
|
($value['cleanstrasse'] == '' && $value['plz'] != '' && $value['ort'] == '') ||
|
|
($value['cleanstrasse'] == '' && $value['plz'] == '' && $value['ort'] != ''))
|
|
{
|
|
unset($adressArray[$key]);
|
|
$adressLoeschArray[] = $value['adresse_id'];
|
|
continue;
|
|
}
|
|
if ($cleanstrasse != '')
|
|
{
|
|
// Wenn die Strasse gleich der vorherigen ist, PLZ und Ort vergleichen
|
|
if ($cleanstrasse == $value['cleanstrasse'])
|
|
{
|
|
if ($plz == $value['plz'] || $value['plz'] == '')
|
|
{
|
|
if ($ort == $value['ort'] || $value['ort'] == '')
|
|
{
|
|
unset($adressArray[$key]);
|
|
$adressLoeschArray[] = $value['adresse_id'];
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
$ort = $value['ort'];
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$plz = $value['plz'];
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
$cleanstrasse = $value['cleanstrasse'];
|
|
$plz = $value['plz'];
|
|
$ort = $value['ort'];
|
|
}
|
|
// Adressen im $adressLoeschArray löschen
|
|
if (count($adressLoeschArray) > 0)
|
|
{
|
|
foreach ($adressLoeschArray AS $key => $value)
|
|
{
|
|
$adresse->delete($value);
|
|
$msg_warning[] = "Adresse mit ID" . $value . " gelöscht";
|
|
}
|
|
}
|
|
// Wenn mehr als eine Adresse mit Heimatadresse übrig bleibt, Warnung ausgeben
|
|
$anzahlHeimatadressen = 0;
|
|
foreach ($adressArray AS $key => $value)
|
|
{
|
|
if ($value['heimatadresse'] === true)
|
|
$anzahlHeimatadressen++;
|
|
}
|
|
if ($anzahlHeimatadressen > 1)
|
|
$msg_error[] = "Es ist mehr als eine Adresse als Heimatadresse gekennzeichnet";
|
|
|
|
/*
|
|
* -------------------------------------------------------------------
|
|
* Kontakte der verbliebenen Person laden und zusammenräumen
|
|
* -------------------------------------------------------------------
|
|
*/
|
|
$kontakt = new kontakt();
|
|
$kontakt->load_pers($personToKeep);
|
|
$kontaktArray = array();
|
|
$kontaktLoeschArray = array();
|
|
foreach ($kontakt->result AS $row)
|
|
{
|
|
// Telefonnummer validieren
|
|
if ($row->kontakttyp != 'email' && $row->kontakttyp != 'homepage')
|
|
$cleanKontakt = preg_replace("/[^0-9+]/", '', $row->kontakt);
|
|
else
|
|
$cleanKontakt = $row->kontakt;
|
|
|
|
$kontaktArray[] = array('kontakt_id' => $row->kontakt_id,
|
|
'cleanKontakt' => $cleanKontakt,
|
|
'kontakttyp' => $row->kontakttyp,
|
|
'kontakt' => $row->kontakt,
|
|
'anmerkung' => $row->anmerkung,
|
|
'zustellung' => $row->zustellung
|
|
);
|
|
}
|
|
|
|
// Sortiert die Kontakte
|
|
function sortKontaktArray($a, $b)
|
|
{
|
|
//$c = strcmp($a['kontakttyp'],$b['kontakttyp']);
|
|
$c = strcmp($b['cleanKontakt'], $a['cleanKontakt']);
|
|
$c .= strcmp($a['kontakttyp'],$b['kontakttyp']);
|
|
$c .= strcmp($b['anmerkung'], $a['anmerkung']);
|
|
$c .= $b['zustellung'] - $a['zustellung'];
|
|
return $c;
|
|
}
|
|
usort($kontaktArray, "sortKontaktArray");
|
|
|
|
$cleanKontakt = '';
|
|
$anmerkung = '';
|
|
foreach ($kontaktArray AS $key => $value)
|
|
{
|
|
// Leere/Halbleere Datensätze löschen
|
|
if ($value['cleanKontakt'] == '' && $value['anmerkung'] == '' )
|
|
{
|
|
unset($kontaktArray[$key]);
|
|
$kontaktLoeschArray[] = $value['kontakt_id'];
|
|
continue;
|
|
}
|
|
if ($cleanKontakt != '')
|
|
{
|
|
// Wenn der Kontakt gleich dem vorherigen ist, Anmerkung vergleichen
|
|
if ($cleanKontakt == $value['cleanKontakt'])
|
|
{
|
|
if ($anmerkung == $value['anmerkung'] || $value['anmerkung'] == '')
|
|
{
|
|
unset($kontaktArray[$key]);
|
|
$kontaktLoeschArray[] = $value['kontakt_id'];
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
$anmerkung = $value['anmerkung'];
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
$cleanKontakt = $value['cleanKontakt'];
|
|
$anmerkung = $value['anmerkung'];
|
|
}
|
|
// Kontakte im $kontaktLoeschArray löschen
|
|
if (count($kontaktLoeschArray) > 0)
|
|
{
|
|
foreach ($kontaktLoeschArray AS $key => $value)
|
|
{
|
|
$kontakt->delete($value);
|
|
$msg_warning[] = "Kontakt mit ID" . $value . " gelöscht";
|
|
}
|
|
}
|
|
|
|
/*
|
|
* --------------------------------------------------------
|
|
* Doppelte PreStudenten löschen
|
|
* --------------------------------------------------------
|
|
*/
|
|
$prestudenten = new prestudent();
|
|
$prestudenten->getPrestudenten($personToKeep);
|
|
$statusArrayWichtige = array(); // Array mit allen PreStudentStatus die NICHT Interessent oder Abgewiesener sind
|
|
|
|
foreach ($prestudenten->result AS $key => $value)
|
|
{
|
|
$laststatus = new prestudent();
|
|
$laststatus->getLastStatus($value->prestudent_id);
|
|
$prestudentStatus = new prestudent();
|
|
$prestudentStatus->getPrestudentRolle($value->prestudent_id);
|
|
|
|
foreach ($prestudentStatus->result AS $row)
|
|
{
|
|
if ($row->status_kurzbz != 'Interessent' && $row->status_kurzbz != 'Abgewiesener')
|
|
$statusArrayWichtige[$value->prestudent_id][] = $row->status_kurzbz;
|
|
}
|
|
if (isset($statusArrayWichtige[$value->prestudent_id]))
|
|
$statusArrayWichtige[$value->prestudent_id] = array_unique($statusArrayWichtige[$value->prestudent_id]);
|
|
|
|
$studiengang = new studiengang($value->studiengang_kz);
|
|
$prestudenten->result[$key]->studiensemester_kurzbz = $laststatus->studiensemester_kurzbz;
|
|
$prestudenten->result[$key]->orgform_kurzbz = $laststatus->orgform_kurzbz;
|
|
$prestudenten->result[$key]->status_kurzbz = $laststatus->status_kurzbz;
|
|
$prestudenten->result[$key]->bewerbung_abgeschicktamum = $laststatus->bewerbung_abgeschicktamum;
|
|
$prestudenten->result[$key]->bestaetigtam = $laststatus->bestaetigtam;
|
|
$prestudenten->result[$key]->ausbildungssemester = $laststatus->ausbildungssemester;
|
|
$prestudenten->result[$key]->studiengang_typ = $studiengang->typ;
|
|
$prestudenten->result[$key]->anzahlStatus = $prestudentStatus->num_rows;
|
|
}
|
|
|
|
$statusreihenfolge = array('Aufgenommener','Wartender','Bewerber','Interessent','Abgewiesener');
|
|
|
|
function sortPrestudents($a, $b)
|
|
{
|
|
global $statusreihenfolge;
|
|
$c = $a->studiengang_kz - $b->studiengang_kz;
|
|
$c .= strcmp(strtolower($b->studiensemester_kurzbz), strtolower($a->studiensemester_kurzbz));
|
|
$c .= strcmp(strtolower($b->orgform_kurzbz), strtolower($a->orgform_kurzbz));
|
|
|
|
// Sortiert den Status nach der vorgegebenen Liste $statusreihenfolge
|
|
$x = array_search($a->status_kurzbz, $statusreihenfolge);
|
|
$y = array_search($b->status_kurzbz, $statusreihenfolge);
|
|
if($x === false && $y === false)
|
|
{
|
|
$c .= 0;
|
|
}
|
|
elseif ($x === false)
|
|
{
|
|
$c .= 1;
|
|
}
|
|
elseif ($y === false)
|
|
{
|
|
$c .= -1;
|
|
}
|
|
else
|
|
{
|
|
$c .= $x - $y;
|
|
}
|
|
|
|
$c .= $b->anzahlStatus - $a->anzahlStatus;
|
|
$c .= $b->bestaetigtam - $a->bestaetigtam;
|
|
$c .= $b->bewerbung_abgeschicktamum - $a->bewerbung_abgeschicktamum;
|
|
$c .= $b->ausbildungssemester - $a->ausbildungssemester;
|
|
$c .= $b->zgvmas_code - $a->zgvmas_code;
|
|
$c .= strcmp(strtolower($b->zgvmaort), strtolower($a->zgvmaort));
|
|
$c .= $b->zgvmadatum - $a->zgvmadatum;
|
|
$c .= strcmp(strtolower($b->zgvmanation), strtolower($a->zgvmanation));
|
|
$c .= $b->zgv_code - $a->zgv_code;
|
|
$c .= strcmp(strtolower($b->zgvort), strtolower($a->zgvort));
|
|
$c .= $b->zgvdatum - $a->zgvdatum;
|
|
$c .= strcmp(strtolower($b->zgvnation), strtolower($a->zgvnation));
|
|
return $c;
|
|
}
|
|
|
|
usort($prestudenten->result, "sortPrestudents");
|
|
|
|
$prestudentUDF = $udf->prestudentHasUDF();
|
|
$prestudentenArray = array();
|
|
$kontaktLoeschArray = array();
|
|
foreach ($prestudenten->result AS $key => $row)
|
|
{
|
|
$prestudentenArray[] = array(
|
|
'prestudent_id' => $row->prestudent_id,
|
|
'studiengang_kz' => $row->studiengang_kz,
|
|
'studiensemester_kurzbz' => $row->studiensemester_kurzbz,
|
|
'orgform_kurzbz' => $row->orgform_kurzbz,
|
|
'status_kurzbz' => $row->status_kurzbz,
|
|
'bewerbung_abgeschicktamum' => $row->bewerbung_abgeschicktamum,
|
|
'bestaetigtam' => $row->bestaetigtam,
|
|
'ausbildungssemester' => $row->ausbildungssemester,
|
|
'zgv_code' => $row->zgv_code,
|
|
'zgvort' => $row->zgvort,
|
|
'zgvdatum' => $row->zgvdatum,
|
|
'zgvnation' => $row->zgvnation,
|
|
'zgvmas_code' => $row->zgvmas_code,
|
|
'zgvmaort' => $row->zgvmaort,
|
|
'zgvmadatum' => $row->zgvmadatum,
|
|
'zgvmanation' => $row->zgvmanation,
|
|
'studiengang_typ' => $row->studiengang_typ
|
|
);
|
|
if ($prestudentUDF)
|
|
$prestudentenArray[$key] = array_merge($prestudentenArray[$key], array('udf_values' => $row->udf_values));
|
|
}
|
|
|
|
/*
|
|
* Entscheidung, ob und welche doppelten PreStudenten gelöscht werden
|
|
* Wenn Studiengang, Studiensemester und OrgForm gleich sind, wird eventuell einer gelöscht
|
|
*
|
|
* Der "höchste" Status laut Liste $statusreihenfolge wird behalten.
|
|
* Wenn es Widersprüche bei der ZGV gibt, wird dies in $warningList ausgegeben
|
|
*
|
|
* Wenn ein PreStudent in seiner Historie ausschließlich Interessent und Abgewiesener hat,
|
|
* wird einer gelöscht. Bei allen anderen wird eine Warnung ausgegeben
|
|
*
|
|
*/
|
|
$studiengang_kz = '';
|
|
$anmerkung = '';
|
|
$prestudentLoeschArray = array();
|
|
$prueflingTransferArray = array();
|
|
$warningList = array();
|
|
$i = 0;
|
|
foreach ($prestudentenArray AS $key => $value)
|
|
{
|
|
if ($studiengang_kz != '')
|
|
{
|
|
// Wenn der Studiengang gleich dem vorherigen ist, Studiensemester vergleichen
|
|
if ($studiengang_kz == $value['studiengang_kz'])
|
|
{
|
|
// Wenn das Studiensemester gleich dem vorherigen ist, prüfen ob der Status gleich ist
|
|
if ($studiensemester_kurzbz == $value['studiensemester_kurzbz'])
|
|
{
|
|
// Wenn die OrgForm leer oder gleich der vorherigen ist, prüfen ob der Status gleich ist
|
|
if ($orgform_kurzbz == '' || $orgform_kurzbz == $value['orgform_kurzbz'])
|
|
{
|
|
// Wenn der Status nicht Interessent oder Abgewiesener ist, wird mit dem nächsten weitergemacht und eine Warnung ausgegeben
|
|
if ($value['status_kurzbz'] != 'Interessent' && $value['status_kurzbz'] != 'Abgewiesener')
|
|
{
|
|
$warningList['statusUnklar'][$i][1] = $prestudentId;
|
|
$warningList['statusUnklar'][$i][2] = $value['prestudent_id'];
|
|
$i++;
|
|
continue;
|
|
}
|
|
|
|
//Wenn die UDF values nicht zusammengeführt werden können, wird mit dem nächsten weitergemacht und eine Warnung ausgegeben
|
|
if ($prestudentUDF)
|
|
{
|
|
$udfError = false;
|
|
|
|
$udfToKeep = json_decode($prestudentenArray[$previousKey]['udf_values'], true);;
|
|
$udfToKeep = is_null($udfToKeep) ? array() : $udfToKeep;
|
|
|
|
$udfToDelete = json_decode($value['udf_values'], true);
|
|
$udfToDelete = is_null($udfToDelete) ? array() : $udfToDelete;
|
|
|
|
if ($udfToKeep != $udfToDelete)
|
|
{
|
|
foreach ($udfToDelete as $udfKey => $udfValue)
|
|
{
|
|
if (!array_key_exists($udfKey, $udfToKeep))
|
|
{
|
|
$udfToKeep[$udfKey] = $udfValue;
|
|
}
|
|
elseif ($udfToKeep[$udfKey] !== $udfValue && !is_null($udfValue))
|
|
{
|
|
if (is_null($udfToKeep[$udfKey]))
|
|
$udfToKeep[$udfKey] = $udfValue;
|
|
else
|
|
{
|
|
|
|
$warningList['udfUnklar'][$i][1] = $prestudentId;
|
|
$warningList['udfUnklar'][$i][2] = $value['prestudent_id'];
|
|
$i++;
|
|
$udfError = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$prestudentenArray[$previousKey]['udf_values'] = json_encode($udfToKeep);
|
|
if ($udfError)
|
|
continue;
|
|
|
|
}
|
|
// Wenn der Status gleich ist, wird auf bestätigt-datum geprüft
|
|
if ($status_kurzbz == $value['status_kurzbz'])
|
|
{
|
|
// Wenn bestätigt gleich oder leer ist und die ZGV leer ist, wird die ZGV vom nächsten Datensatz übernommen, falls eine vorhanden ist
|
|
//if ($bestaetigtam == '' || $bestaetigtam == $value['bestaetigtam'])
|
|
{
|
|
// Bei Master wird die Master-ZGV berücksichtigt, bei allen anderen die Bachelor-ZGV
|
|
if ($value['studiengang_typ'] == 'm')
|
|
{
|
|
if ($zgvmas_code == '' && $zgvmaort == '' && $zgvmadatum == '' && $zgvmanation == '' &&
|
|
($value['zgvmas_code'] != '' || $value['zgvmaort'] != '' || $value['zgvmadatum'] != '' || $value['zgvmanation'] != ''))
|
|
{
|
|
$prestudentenArray[$previousKey]['zgvmas_code'] = $zgvmas_code = $value['zgvmas_code'];
|
|
$prestudentenArray[$previousKey]['zgvmaort'] = $zgvmaort = $value['zgvmaort'];
|
|
$prestudentenArray[$previousKey]['zgvmadatum'] = $zgvmadatum = $value['zgvmadatum'];
|
|
$prestudentenArray[$previousKey]['zgvmanation'] = $zgvmanation = $value['zgvmanation'];
|
|
// Wenn kein Status außer Interessent und Abgewiesener mehr vorhanden ist, löschen
|
|
if (!isset($statusArrayWichtige[$value['prestudent_id']]))
|
|
{
|
|
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
|
|
unset($prestudentenArray[$key]);
|
|
$prestudentLoeschArray[] = $value['prestudent_id'];
|
|
}
|
|
continue;
|
|
}
|
|
elseif (($value['zgvmas_code'] != '' && $zgvmas_code != $value['zgvmas_code']) ||
|
|
($value['zgvmaort'] != '' && $zgvmaort != $value['zgvmaort']) ||
|
|
($value['zgvmadatum'] != '' && $zgvmadatum != $value['zgvmadatum']) ||
|
|
($value['zgvmanation'] != '' && $zgvmanation != $value['zgvmanation']))
|
|
{
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvcode'] = $value['zgvmas_code'];
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvmaort'] = $value['zgvmaort'];
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvmadatum'] = $value['zgvmadatum'];
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvmanation'] = $value['zgvmanation'];
|
|
// Wenn kein Status außer Interessent und Abgewiesener mehr vorhanden ist, löschen
|
|
if (!isset($statusArrayWichtige[$value['prestudent_id']]))
|
|
{
|
|
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
|
|
unset($prestudentenArray[$key]);
|
|
$prestudentLoeschArray[] = $value['prestudent_id'];
|
|
}
|
|
$i++;
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ($zgv_code == '' && $zgvort == '' && $zgvdatum == '' && $zgvnation == '' &&
|
|
($value['zgv_code'] != '' || $value['zgvort'] != '' || $value['zgvdatum'] != '' || $value['zgvnation'] != ''))
|
|
{
|
|
$prestudentenArray[$previousKey]['zgv_code'] = $zgv_code = $value['zgv_code'];
|
|
$prestudentenArray[$previousKey]['zgvort'] = $zgvort = $value['zgvort'];
|
|
$prestudentenArray[$previousKey]['zgvdatum'] = $zgvdatum = $value['zgvdatum'];
|
|
$prestudentenArray[$previousKey]['zgvnation'] = $zgvnation = $value['zgvnation'];
|
|
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
|
|
unset($prestudentenArray[$key]);
|
|
$prestudentLoeschArray[] = $value['prestudent_id'];
|
|
continue;
|
|
}
|
|
elseif (($value['zgv_code'] != '' && $zgv_code != $value['zgv_code']) ||
|
|
($value['zgvort'] != '' && $zgvort != $value['zgvort']) ||
|
|
($value['zgvdatum'] != '' && $zgvdatum != $value['zgvdatum']) ||
|
|
($value['zgvnation'] != '' && $zgvnation != $value['zgvnation']))
|
|
{
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvcode'] = $value['zgv_code'];
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvort'] = $value['zgvort'];
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvdatum'] = $value['zgvdatum'];
|
|
$warningList['zgvUnklar'][$prestudentId][$i]['zgvnation'] = $value['zgvnation'];
|
|
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
|
|
unset($prestudentenArray[$key]);
|
|
$prestudentLoeschArray[] = $value['prestudent_id'];
|
|
$i++;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setPrueflingTransfer($value['prestudent_id'], $prestudentId, $prueflingTransferArray);
|
|
unset($prestudentenArray[$key]);
|
|
$prestudentLoeschArray[] = $value['prestudent_id'];
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$prestudentId = $value['prestudent_id'];
|
|
$studiengang_kz = $value['studiengang_kz'];
|
|
$studiensemester_kurzbz = $value['studiensemester_kurzbz'];
|
|
$status_kurzbz = $value['status_kurzbz'];
|
|
$orgform_kurzbz = $value['orgform_kurzbz'];
|
|
$bestaetigtam = $value['bestaetigtam'];
|
|
$bewerbung_abgeschicktamum = $value['bewerbung_abgeschicktamum'];
|
|
$zgv_code = $value['zgv_code'];
|
|
$zgvort = $value['zgvort'];
|
|
$zgvdatum = $value['zgvdatum'];
|
|
$zgvnation = $value['zgvnation'];
|
|
$zgvmas_code = $value['zgvmas_code'];
|
|
$zgvmaort = $value['zgvmaort'];
|
|
$zgvmadatum = $value['zgvmadatum'];
|
|
$zgvmanation = $value['zgvmanation'];
|
|
$previousKey = $key;
|
|
if ($prestudentUDF)
|
|
{
|
|
$udfToKeep = json_decode($value['udf_values'], true);
|
|
$udfToKeep = is_null($udfToKeep) ? array() : $udfToKeep;
|
|
}
|
|
}
|
|
|
|
// Messages in $msg_warning schreiben
|
|
$messageOutput = '';
|
|
if (isset($warningList['zgvUnklar']))
|
|
{
|
|
foreach ($warningList['zgvUnklar'] as $verbleibenderPrestudent => $gefundeneZgv)
|
|
{
|
|
$messageOutput .= '<div>Bei Prestudent ID '.$verbleibenderPrestudent.' sind widersprüchliche ZGV-Angaben vorhanden.
|
|
<br>Folgende ZGV-Daten sind bei anderen PreStudenten gespeichert:<br>';
|
|
|
|
foreach ($gefundeneZgv as $key => $zgvArray)
|
|
{
|
|
foreach ($zgvArray as $zgv => $wert)
|
|
{
|
|
$messageOutput .= ' '.$zgv.': '.$wert.'<br>';
|
|
}
|
|
$messageOutput .= '<br>';
|
|
}
|
|
$messageOutput .= '</div>';
|
|
}
|
|
}
|
|
|
|
$msg_warning[] = $messageOutput;
|
|
$messageOutput = '';
|
|
|
|
if (isset($warningList['statusUnklar']))
|
|
{
|
|
foreach ($warningList['statusUnklar'] as $key => $value)
|
|
{
|
|
$messageOutput .= '<div>Bei folgenden PreStudenten ist der Status widersprüchlich oder unklar:<br>';
|
|
|
|
foreach ($value as $key => $presstudentid)
|
|
{
|
|
$messageOutput .= ' '.$presstudentid.'<br>';
|
|
}
|
|
$messageOutput .= '</div>';
|
|
}
|
|
}
|
|
|
|
$msg_warning[] = $messageOutput;
|
|
$messageOutput = '';
|
|
if(isset($warningList['udfUnklar']))
|
|
{
|
|
foreach ($warningList['udfUnklar'] as $key => $value) {
|
|
|
|
$messageOutput .= '<div>Bei folgenden PreStudenten sind die UDFs widersprüchlich oder unklar:<br>';
|
|
|
|
foreach ($value as $presstudentid)
|
|
{
|
|
$messageOutput .= ' '.$presstudentid.'<br>';
|
|
}
|
|
$messageOutput .= '</div>';
|
|
}
|
|
}
|
|
|
|
$msg_warning[] = $messageOutput;
|
|
|
|
//Wenn Prüfling auf zu löschenden Prestudenten zeigt und ggf auf bleibenden umhängen.
|
|
foreach ($prueflingTransferArray as $pruefling_id => $prestudent_id)
|
|
{
|
|
$transferqry = "UPDATE testtool.tbl_pruefling SET prestudent_id=" . $db->db_add_param($prestudent_id, FHC_INTEGER) . " WHERE pruefling_id=" . $db->db_add_param($pruefling_id, FHC_INTEGER) . ";";
|
|
|
|
if (!$db->db_query($transferqry))
|
|
{
|
|
$msg_error[] = 'Fehler beim Aktualisieren des Prüflings '.$pruefling_id;
|
|
}
|
|
else
|
|
$msg_warning[] = 'Prüfling '.$pruefling_id.' auf prestudent '.$prestudent_id.' aktualisiert';
|
|
}
|
|
|
|
// Prestudenten in $prestudentLoeschArray löschen
|
|
foreach ($prestudentLoeschArray AS $key => $value)
|
|
{
|
|
//Schauen ob akzeptierte Dokumente vorhanden sind und ggf entfernen
|
|
$akzeptierteDokumente = new dokument();
|
|
$akzeptierteDokumente->getPrestudentDokumente($value);
|
|
if (count($akzeptierteDokumente->result) > 0)
|
|
{
|
|
foreach ($akzeptierteDokumente->result as $row)
|
|
{
|
|
$akzeptierteDokumente->delete($row->dokument_kurzbz, $value);
|
|
}
|
|
}
|
|
//Rollen laden und einzeln löschen
|
|
$prestudentenRollen = new prestudent();
|
|
$prestudentenRollen->getPrestudentRolle($value);
|
|
|
|
foreach ($prestudentenRollen->result as $row)
|
|
{
|
|
$prestudentenRollen->delete_rolle($row->prestudent_id, $row->status_kurzbz, $row->studiensemester_kurzbz, $row->ausbildungssemester);
|
|
}
|
|
|
|
if (!$prestudentenRollen->deletePrestudent($value))
|
|
$msg_error[] = 'Fehler beim Löschen des Prestudenten '.$value;
|
|
else
|
|
$msg_warning[] = 'Prestudent '.$value.' gelöscht';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$msg_error[] = "Die Änderung konnte nicht durchgeführt werden!";
|
|
$db->db_query("ROLLBACK;");
|
|
|
|
$msg_error = array_merge($msg_error, explode(';', $sql_query_upd1));
|
|
$msg_error[] = "ROLLBACK";
|
|
}
|
|
$personToDelete = 0;
|
|
$personToKeep = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$msg_info[] = "Fehler beim Laden der zu löschenden Person";
|
|
}
|
|
}
|
|
}
|
|
if ((isset($personToDelete) && ! isset($personToKeep)) || (! isset($personToDelete) && isset($personToKeep)) || ($personToDelete < 0 || $personToKeep < 0))
|
|
{
|
|
$msg_info[] = "Es muß je ein Radio-Button pro Tabelle angeklickt werden";
|
|
}
|
|
|
|
/**
|
|
* Holt sich Prüflinge zu einem zu löschenden Prestudenten,
|
|
* speichert auf welchen Prestudenten die Prüflinge "umgehängt" werden sollen.
|
|
* @param $prestudentIdToDelete prestudent_id des zu löschenden Prestudenten
|
|
* @param $prestudentIdToKeep prestudent_id des behaltenen Prestundenten
|
|
* @param $prueflingTransferArray zum Speichern, form [pruefling_id] => neue_prestudent_id
|
|
*/
|
|
function setPrueflingTransfer($prestudentIdToDelete, $prestudentIdToKeep, &$prueflingTransferArray)
|
|
{
|
|
$pruefling = new pruefling();
|
|
|
|
if (is_numeric($prestudentIdToDelete) && is_numeric($prestudentIdToKeep) &&
|
|
$pruefling->getPrueflinge($prestudentIdToDelete))
|
|
{
|
|
foreach ($pruefling->result as $pr)
|
|
{
|
|
$prueflingTransferArray[$pr->pruefling_id] = (int)$prestudentIdToKeep;
|
|
}
|
|
}
|
|
}
|
|
|
|
function resize($base64, $width, $height) // 828 x 1104 -> 240 x 320
|
|
{
|
|
ob_start();
|
|
$image = imagecreatefromstring(base64_decode($base64));
|
|
|
|
// Hoehe und Breite neu berechnen
|
|
list ($width_orig, $height_orig) = getimagesizefromstring(base64_decode($base64));
|
|
|
|
if ($width && ($width_orig < $height_orig))
|
|
{
|
|
$width = intval(($height / $height_orig) * $width_orig);
|
|
}
|
|
else
|
|
{
|
|
$height = intval(($width / $width_orig) * $height_orig);
|
|
}
|
|
|
|
$image_p = imagecreatetruecolor($width, $height);
|
|
// $image = imagecreatefromjpeg($filename);
|
|
|
|
// Bild nur verkleinern aber nicht vergroessern
|
|
if ($width_orig > $width || $height_orig > $height)
|
|
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
|
|
else
|
|
$image_p = $image;
|
|
|
|
imagejpeg($image_p);
|
|
$retval = ob_get_contents();
|
|
ob_end_clean();
|
|
$retval = base64_encode($retval);
|
|
|
|
@imagedestroy($image_p);
|
|
@imagedestroy($image);
|
|
return $retval;
|
|
}
|
|
?>
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<link href="../../skin/fhcomplete.css" rel="stylesheet" type="text/css">
|
|
<link href="../../skin/vilesci.css" rel="stylesheet" type="text/css">
|
|
<link href="../../skin/jquery.css" rel="stylesheet" type="text/css" />
|
|
<script type="text/javascript"
|
|
src="../../vendor/jquery/jquery1/jquery-1.12.4.min.js"></script>
|
|
<script type="text/javascript"
|
|
src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
|
|
<script type="text/javascript"
|
|
src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
|
<script type="text/javascript"
|
|
src="../../include/js/jquery.ui.datepicker.translation.js"></script>
|
|
<link href="../../skin/tablesort.css" rel="stylesheet" type="text/css" />
|
|
<script type="text/javascript">
|
|
|
|
$(document).ready(function()
|
|
{
|
|
$('#t1').tablesorter(
|
|
{
|
|
sortList: [[2,0],[3,0]],
|
|
widgets: ["zebra"],
|
|
headers: { 8: {sorter: false}}
|
|
});
|
|
$('#t2').tablesorter(
|
|
{
|
|
sortList: [[3,0],[4,0]],
|
|
widgets: ["zebra"],
|
|
headers: { 0: {sorter: false}}
|
|
});
|
|
// $("input[name='radio_1']").click(function() {
|
|
// alert( "Handler for .click() called." );
|
|
// });
|
|
|
|
});
|
|
function enable(id)
|
|
{
|
|
if (id == 'radio_1')
|
|
var radios = document.getElementsByName('radio_2');
|
|
else
|
|
var radios = document.getElementsByName('radio_1');
|
|
for (var i=0, iLen=radios.length; i<iLen; i++) {
|
|
radios[i].disabled = false;
|
|
}
|
|
}
|
|
function disable(id)
|
|
{
|
|
document.getElementById(id).disabled = true;
|
|
}
|
|
function checkPersonen()
|
|
{
|
|
// Check, ob jeweils ein Radiobutton ausgewählt wurde
|
|
if(!$('input[type=radio][name=radio_1]').is(':checked') || !$('input[type=radio][name=radio_2]').is(':checked'))
|
|
{
|
|
alert('Bitte wählen Sie auf beiden Seiten einen Radio-Button aus');
|
|
return false;
|
|
}
|
|
|
|
// Wenn die Personen zu unterschiedlich sind, Warnung ausgeben
|
|
// Prüfen auf Vorname, Nachname, Geburtsdatum
|
|
var nachnameLinks = $('input[type=radio][name=radio_1]:checked').closest('tr').find('.nachname').text().toLowerCase();
|
|
var nachnameRechts = $('input[type=radio][name=radio_2]:checked').closest('tr').find('.nachname').text().toLowerCase();
|
|
var vornameLinks = $('input[type=radio][name=radio_1]:checked').closest('tr').find('.vorname').text().toLowerCase();
|
|
var vornameRechts = $('input[type=radio][name=radio_2]:checked').closest('tr').find('.vorname').text().toLowerCase();
|
|
var gebdatumLinks = $('input[type=radio][name=radio_1]:checked').closest('tr').find('.gebdatum').text().toLowerCase();
|
|
var gebdatumRechts = $('input[type=radio][name=radio_2]:checked').closest('tr').find('.gebdatum').text().toLowerCase();
|
|
|
|
if ( nachnameLinks != nachnameRechts
|
|
|| vornameLinks != vornameRechts
|
|
|| (gebdatumLinks != '' && gebdatumRechts != '' && gebdatumLinks != gebdatumRechts))
|
|
return confirm('Die Datensätze sind auffallend unterschiedlich. Wollen Sie fortfahren?');
|
|
else
|
|
return true;
|
|
}
|
|
function changeImageSize(id)
|
|
{
|
|
if (document.getElementById(id).style.height == '50px')
|
|
{
|
|
document.getElementById(id).style.height = '130px';
|
|
document.getElementById(id).style.maxWidth = '87px';
|
|
}
|
|
else
|
|
{
|
|
document.getElementById(id).style.height = '50px';
|
|
document.getElementById(id).style.maxWidth = '38px';
|
|
}
|
|
}
|
|
</script>
|
|
<style>
|
|
.button {
|
|
font-size: 16px;
|
|
font-family: Helvetica, Arial, sans-serif;
|
|
color: #ffffff;
|
|
text-decoration: none;
|
|
border-radius: 3px;
|
|
-webkit-border-radius: 3px;
|
|
-moz-border-radius: 3px;
|
|
background-color: #5cb85c;
|
|
border-top: 6px solid #5cb85c;
|
|
border-bottom: 6px solid #5cb85c;
|
|
border-right: 12px solid #5cb85c;
|
|
border-left: 12px solid #5cb85c;
|
|
display: inline-block;
|
|
"
|
|
}
|
|
</style>
|
|
|
|
<title>Personen-Zusammenlegung</title>
|
|
</head>
|
|
<body>
|
|
<H1>Zusammenlegen von Personendatensätzen</H1>
|
|
|
|
<?php
|
|
echo $outp;
|
|
echo "<form name='suche' action='personen_wartung.php' method='POST'>";
|
|
echo '<input name="filter" type="text" value="' . $db->convert_html_chars($filter) . '" size="64" maxlength="64">';
|
|
echo '<input type="submit" value=" suchen ">';
|
|
echo "</form>";
|
|
|
|
if ($filter != '' || ($person_id_1 != '' && $person_id_2 != ''))
|
|
{
|
|
$studiengang = new studiengang();
|
|
$studiengang->getAll('typ, kurzbz', false);
|
|
|
|
/*
|
|
* echo '<br>
|
|
* <center>
|
|
* <h2><span style="font-size:0.7em">'.$msg_info.'</span></h2></center>
|
|
* <br>';
|
|
*/
|
|
$messageOutput = '';
|
|
if (count($msg_error) > 0)
|
|
{
|
|
foreach ($msg_error as $value)
|
|
{
|
|
$messageOutput .= '<p class="error">'.$value.'</p>';
|
|
}
|
|
}
|
|
if (count($msg_warning) > 0)
|
|
{
|
|
foreach ($msg_warning as $value)
|
|
{
|
|
$messageOutput .= '<p class="warning">'.$value.'</p>';
|
|
}
|
|
}
|
|
if (count($msg_info) > 0)
|
|
{
|
|
foreach ($msg_info as $value)
|
|
{
|
|
$messageOutput .= '<br/>'.$value;
|
|
}
|
|
}
|
|
echo '<br><br><div contenteditable="false" style="width: 100%; height : 150px; border : 1px dotted grey; overflow-y:auto; text-align: left; font-size: 9pt">' . $messageOutput . '</div><br>';
|
|
|
|
// Tabellen anzeigen
|
|
echo '<form name="form_table" action="personen_wartung.php?filter='.$db->convert_html_chars($filter).'&person_id_1='.$person_id_1.'&person_id_2='.$person_id_2.'" method="POST">';
|
|
echo '<div style="text-align: center"><input type="submit" value="Zusammenlegen" class="button" onclick="return checkPersonen()"></div>';
|
|
echo "<table width='100%' border='0' cellspacing='0' cellpadding='0'>";
|
|
echo "<tr>";
|
|
|
|
echo '<td valign="top" style="text-align: center;"><span style="font-size: 1.5em; color: red;">Person wird gelöscht:</span>';
|
|
|
|
// Tabelle 1
|
|
echo '<table id="t1" class="tablesorter" style="padding-right: 5px"><thead><tr>';
|
|
echo "<th>ID</th>";
|
|
echo "<th>Foto</th>";
|
|
echo "<th>Nachname</th>";
|
|
echo "<th>Vorname</th>";
|
|
echo "<th>Geb.datum</th>";
|
|
echo "<th>SVNr</th>";
|
|
echo "<th>Ersatzkennz.</th>";
|
|
echo "<th>Rollen</th>";
|
|
echo "<th> </th></tr></thead><tbody>";
|
|
|
|
// Wenn Person IDs uebergeben werden, werden diese geladen
|
|
if ($person_id_1 != '' && $person_id_2 != '')
|
|
{
|
|
$person = new person();
|
|
$person->personen[] = new person($person_id_1);
|
|
$person->personen[] = new person($person_id_2);
|
|
}
|
|
else
|
|
{
|
|
$person = new person();
|
|
$person->getTab($filter);
|
|
}
|
|
|
|
$i = 0;
|
|
foreach ($person->personen as $l)
|
|
{
|
|
$rollen = '<ul style="margin: 0; padding-left: 10px;">';
|
|
// Prestudent Rollen laden
|
|
$prestudent = new prestudent();
|
|
$prestudent->getPrestudenten($l->person_id);
|
|
if(count($prestudent->result) > 0)
|
|
{
|
|
foreach ($prestudent->result as $row)
|
|
{
|
|
$laststatus = new prestudent();
|
|
$laststatus->getLastStatus($row->prestudent_id);
|
|
$style = '';
|
|
if ($laststatus->status_kurzbz == 'Abgewiesener' || $laststatus->status_kurzbz == 'Abbrecher')
|
|
$style = 'color: darkred;';
|
|
elseif ($laststatus->status_kurzbz == 'Absolvent')
|
|
$style = 'color: grey;';
|
|
elseif ($laststatus->status_kurzbz == 'Student')
|
|
$style = 'color: green;';
|
|
|
|
if (isset($laststatus->status_mehrsprachig[DEFAULT_LANGUAGE]))
|
|
$status = $laststatus->status_mehrsprachig[DEFAULT_LANGUAGE];
|
|
else
|
|
$status = $laststatus->status_kurzbz;
|
|
|
|
$rollen .= '<li><span style="'.$style.'">'.$status.'</span> ('.$studiengang->kuerzel_arr[$row->studiengang_kz].' '.$laststatus->ausbildungssemester.'. Semester '.$laststatus->studiensemester_kurzbz.')</li>';
|
|
}
|
|
}
|
|
// Benutzer laden
|
|
$benutzer = new benutzer();
|
|
$benutzer->getBenutzerFromPerson($l->person_id);
|
|
if(count($benutzer->result) > 0)
|
|
{
|
|
foreach ($benutzer->result as $row)
|
|
{
|
|
$mitarbeiter = new mitarbeiter();
|
|
if ($mitarbeiter->load($row->uid))
|
|
$rollen .= '<li><span style="color: green">MitarbeiterIn UID</span> '.$mitarbeiter->uid.'</li>';
|
|
}
|
|
}
|
|
$rollen .= '</ul>';
|
|
|
|
echo "<tr>";
|
|
echo "<td>$l->person_id</td>";
|
|
echo '<td>'.($l->foto != '' ? '<img id="imgLeft_'.$l->person_id.'" src="../../content/bild.php?src=person&person_id='.$l->person_id.'" style="height: 50px; max-width: 38px" onclick="changeImageSize(\'imgLeft_'.$l->person_id.'\')">':'').'</td>';
|
|
echo "<td class='nachname'>$l->nachname</td>";
|
|
echo "<td class='vorname'>$l->vorname</td>";
|
|
echo "<td class='gebdatum'>$l->gebdatum</td>";
|
|
echo "<td>$l->svnr</td>";
|
|
echo "<td>$l->ersatzkennzeichen</td>";
|
|
echo "<td>$rollen</td>";
|
|
echo "<td style='text-align: right'><input type='radio' name='radio_1' id='radio_1_$l->person_id' value='$l->person_id' " . ((isset($personToDelete) && $personToDelete == $l->person_id) ? 'checked' : '') . " onclick='enable(\"radio_1\"); disable(\"radio_2_$l->person_id\")'></td>";
|
|
echo "</tr>";
|
|
$i ++;
|
|
}
|
|
echo "</tbody></table>";
|
|
echo "</td>";
|
|
// echo '<td valign="top"></td>';
|
|
echo '<td valign="top" style="text-align: center;"><span style="font-size: 1.5em; font-style: bold; color: green;">Person bleibt:</span>';
|
|
|
|
// Tabelle 2
|
|
echo '<table id="t2" class="tablesorter" style="padding-left: 5px"><thead><tr>';
|
|
echo "<th> </th>";
|
|
echo "<th>ID</th>";
|
|
echo "<th>Foto</th>";
|
|
echo "<th>Nachname</th>";
|
|
echo "<th>Vorname</th>";
|
|
echo "<th>Geb.datum</th>";
|
|
echo "<th>SVNr</th>";
|
|
echo "<th>Ersatzkennz.</th>";
|
|
echo "<th>Rollen</th>";
|
|
echo "</tr></thead><tbody>";
|
|
|
|
// Wenn Person IDs uebergeben werden, werden diese geladen
|
|
if ($person_id_1 != '' && $person_id_2 != '')
|
|
{
|
|
$person = new person();
|
|
$person->personen[] = new person($person_id_1);
|
|
$person->personen[] = new person($person_id_2);
|
|
}
|
|
else
|
|
{
|
|
$person = new person();
|
|
$person->getTab($filter);
|
|
}
|
|
|
|
$i = 0;
|
|
foreach ($person->personen as $l)
|
|
{
|
|
$rollen = '<ul style="margin: 0; padding-left: 10px;">';
|
|
// Prestudent Rollen laden
|
|
$prestudent = new prestudent();
|
|
$prestudent->getPrestudenten($l->person_id);
|
|
if(count($prestudent->result) > 0)
|
|
{
|
|
foreach ($prestudent->result as $row)
|
|
{
|
|
$laststatus = new prestudent();
|
|
$laststatus->getLastStatus($row->prestudent_id);
|
|
$style = '';
|
|
if ($laststatus->status_kurzbz == 'Abgewiesener' || $laststatus->status_kurzbz == 'Abbrecher')
|
|
$style = 'color: darkred;';
|
|
elseif ($laststatus->status_kurzbz == 'Absolvent')
|
|
$style = 'color: grey;';
|
|
elseif ($laststatus->status_kurzbz == 'Student')
|
|
$style = 'color: green;';
|
|
|
|
if (isset($laststatus->status_mehrsprachig[DEFAULT_LANGUAGE]))
|
|
$status = $laststatus->status_mehrsprachig[DEFAULT_LANGUAGE];
|
|
else
|
|
$status = $laststatus->status_kurzbz;
|
|
|
|
$rollen .= '<li><span style="'.$style.'">'.$status.'</span> ('.$studiengang->kuerzel_arr[$row->studiengang_kz].' '.$laststatus->ausbildungssemester.'. Semester '.$laststatus->studiensemester_kurzbz.')</li>';
|
|
}
|
|
}
|
|
// Benutzer laden
|
|
$benutzer = new benutzer();
|
|
$benutzer->getBenutzerFromPerson($l->person_id);
|
|
if(count($benutzer->result) > 0)
|
|
{
|
|
foreach ($benutzer->result as $row)
|
|
{
|
|
$mitarbeiter = new mitarbeiter();
|
|
if ($mitarbeiter->load($row->uid))
|
|
$rollen .= '<li><span style="color: green">MitarbeiterIn UID</span> '.$mitarbeiter->uid.'</li>';
|
|
}
|
|
}
|
|
$rollen .= '</ul>';
|
|
|
|
echo "<tr>";
|
|
echo "<td><input type='radio' name='radio_2' id='radio_2_$l->person_id' value='$l->person_id' " . ((isset($personToKeep) && $personToKeep == $l->person_id) ? 'checked' : '') . " onclick='enable(\"radio_2\"); disable(\"radio_1_$l->person_id\")'></td>";
|
|
echo "<td>$l->person_id</td>";
|
|
echo '<td>'.($l->foto != '' ? '<img id="imgRight_'.$l->person_id.'" src="../../content/bild.php?src=person&person_id='.$l->person_id.'" style="height: 50px; max-width: 38px" onclick="changeImageSize(\'imgRight_'.$l->person_id.'\')">':'').'</td>';
|
|
echo "<td class='nachname'>$l->nachname</td>";
|
|
echo "<td class='vorname'>$l->vorname</td>";
|
|
echo "<td class='gebdatum'>$l->gebdatum</td>";
|
|
echo "<td>$l->svnr</td>";
|
|
echo "<td>$l->ersatzkennzeichen</td>";
|
|
echo "<td>$rollen</td>";
|
|
echo "</tr>";
|
|
$i ++;
|
|
}
|
|
echo "</tbody></table>";
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
echo "</table>";
|
|
echo "</form>";
|
|
}
|
|
|
|
?>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|