diff --git a/include/dvb.class.php b/include/dvb.class.php index e3eba7162..257fb4ee0 100644 --- a/include/dvb.class.php +++ b/include/dvb.class.php @@ -122,6 +122,30 @@ class dvb extends basis_db return ErrorHandler::error(); } + // Wenn nicht gefunden, wird zusaetzlich noch eine Namenssuche gestartet + if ($matrikelnummer == false || $matrikelnummer == '') + { + $this->debug('Keine Matrikelnummer gefunden -> Suche per Nachname'); + $nachnameresult = $this->existsByNachname($person_id); + if (ErrorHandler::isSuccess($nachnameresult)) + { + if (ErrorHandler::hasData($nachnameresult) + && isset($nachnameresult->retval->matrikelnummer) + && $nachnameresult->retval->matrikelnummer != '') + { + $this->debug('Nachnamensuche erfolgreich'); + $matrikelnummer = $nachnameresult->retval->matrikelnummer; + if(isset($nachnameresult->retval->bpk)) + $bpk = $nachnameresult->retval->bpk; + } + else + { + $this->errormsg = 'Namenssuche ergab nicht eindeutige Treffer -> manuelle Pruefung ist erforderlich'; + return ErrorHandler::error(); + } + } + } + if ($matrikelnummer !== false && $matrikelnummer != '') { // Matrikelnummer wurde gefunden @@ -142,12 +166,6 @@ class dvb extends basis_db } else { - if($this->existsByName($person_id)) - { - $this->errormsg = 'Namenssuche ergab Treffer -> manuelle Pruefung erforderlich'; - return ErrorHandler::error(); - } - if($softrun == true) { $this->errormsg = 'Nicht gefunden Softrun enabled keine Meldung'; @@ -1220,7 +1238,13 @@ class dvb extends basis_db } } - public function existsByName($person_id) + /** + * Prueft ob eine Person aufgrund Nachname und Geburtsdatum gefunden wird + * @param $person_id PersonID der gesuchten Person. + * @return Success wenn gefunden, error wenn nicht gefunden. Hat die Person 100% Uebereinstimmung der Daten + * dann wird auch MatrNr und BPK als Retrun geliefert. + */ + public function existsByNachname($person_id) { $person = new person(); if($person->load($person_id)) @@ -1236,18 +1260,46 @@ class dvb extends basis_db { if(isset($row->vorname) && isset($row->nachname)) { + $this->debug('Eintrag gefunden -> Pruefe Eindeutigkeit'); + // Vorpruefung des Datenverbund if(mb_substr(mb_strtolower($row->vorname),0,5) == mb_substr(mb_strtolower($person->vorname),0,5) && mb_substr(mb_strtolower($row->nachname),0,10) == mb_substr(mb_strtolower($person->nachname),0,10)) { - return true; + // Bei 100% eindeutiger Uebereinstimmung werden die Daten zurueckgeliefert + if (mb_strtolower($row->geschlecht) == mb_strtolower($person->geschlecht) + && $row->staatsangehoerigkeit == $person->staatsbuergerschaft + && mb_strtolower($row->nachname) == mb_strtolower($person->nachname) + && ( + mb_strtolower($row->vorname) == mb_strtolower($person->vorname) + || + mb_strtolower($row->vorname) == mb_strtolower($person->vorname.' '.$person->vornamen) + ) + && $row->matrikelnummer != '' + && count($result->retval->data) == 1 + ) + { + $this->debug('Uebereinstimmung gefunden'); + $retval = new stdClass(); + if(isset($row->bpk) && $row->bpk!='') + $retval->bpk = $row->bpk; + $retval->matrikelnummer = $row->matrikelnummer; + return ErrorHandler::success($retval); + } + else + { + $this->debug('keine 100% Eindeutigkeit gegeben:'.print_r($result->retval->data,true)); + // Uebereinstimmung gefunden aber nicht 100% eindeutig + return ErrorHandler::success(); + } } } } - return false; + $this->debug('Keine Uebereinstimmung per Namenssuche'); + return ErrorHandler::error(); } else { - return false; + return ErrorHandler::error(); } } } @@ -1338,7 +1390,7 @@ class dvb extends basis_db foreach ($domnodes_matrikelnummer as $row) { // MatrikelNr Found - $data->matrikelnr = $row->textContent; + $data->matrikelnummer = $row->textContent; break; } $domnodes_bpk = $row_student->getElementsByTagNameNS($namespace, 'personenkennzeichen');