Index: trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_eig.php	(revision 373)
+++ trunk/mapbender/http/nav/alkisnav_eig.php	(revision 374)
@@ -1,19 +1,10 @@
 <?php
-/* Version vom
-	2013-04-16 "import_request_variables" entfÃ€llt in PHP 5.4
-	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung".
-				Stufe 2: GB *und* FS mit einem Klick anzeigen.
-				BlÃ€tterfunktion (Folgeseiten) fÃŒr lange Listen. 
-				Function extern gemeinsam genutzt in _eig und _grd.
-				Dazu Var-Namen harmonisieren: $gb wird $blattgml.
-				ZurÃŒck-Link, Titel der Transaktion anzeigen.
-	2013-04-29	Darstellung mit IE
-	2013-05-07	Strukturierung des Programms, redundanten Code in Functions zusammen fassen
-	2013-05-14	Hervorhebung aktuelles Objekt, Parameter "gbkennz" auswerten,
-				Title auch auf Icon, IE zeigt sonst alt= als Title dar.
-	2014-09-09	PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
-	2014-09-15	Bei Relationen den Timestamp abschneiden, mehr "endet IS NULL"
-	2014-09-30	RÃŒckbau substring(gml_id)
-	2015-12-10	Umstellen .ico auf .png, Vermeidung nicht initialisierter Variable
+/*	Navigation mit ALKIS-Daten im Mapbender 2.7 - Teil EigentÃŒmer-Suche 
+	Diese Version des Programms verwendet die Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
+
+ Version vom
+	2016-02-11	Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
+	2016-03-02  $gemeinde auf feste LÃ€nge korrigieren
+	2016-07-18	Personendaten: Zeilen getauscht. Wie Brief-Anschrift.
 */
 
@@ -24,8 +15,9 @@
 
 $cntget = extract($_GET);
+$gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT); // temporÃ€r ..
 include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
 include("alkisnav_fkt.php"); // Funktionen
-$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
-$con = pg_connect ($con_string) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbname.$dbvers.$gkz);
+$con_string = "host=".$host." port=".$port." dbname=".$dbname.$gkz." user=".$user." password=".$password;
+$con = pg_connect ($con_string) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbname.$gkz);
 
 echo <<<END
@@ -59,6 +51,7 @@
 END;
 
-// Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen zu suchen
 function familiensuche() {
+	// Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen (Nachnamen) zu suchen.
+	// Bei versehendlich falschem Vornamen muss nicht von vorn begonnen werden.
 	global $gkz, $gemeinde, $epsg, $name;
 	if(isset($name)) { // Familiensuche
@@ -71,5 +64,6 @@
 }
 
-function personendaten() { // Adresse und Geburtsdatum der aktuellen Person ausgeben
+function personendaten() { 
+	// Adresse und Geburtsdatum der aktuellen Person ausgeben
 	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug
 
@@ -78,5 +72,5 @@
 	FROM ax_person p LEFT JOIN ax_anschrift a ON a.gml_id=ANY(p.hat) 
 	WHERE p.gml_id= $1 AND p.endet IS NULL AND a.endet IS NULL LIMIT 1;";	
-	// Es wird nur eine Zeile ausgewertet
+	// Es wird nur EINE Zeile ausgewertet
 
 	$v=array($person);
@@ -85,4 +79,5 @@
 	if (!$res) {echo "\n<p class='err'>Fehler bei Name</p>\n";}
 	$row = pg_fetch_array($res);
+
 	$zeil1=$row["nachnameoderfirma"].", ".$row["vorname"];
 	$gebdat=$row["geburtsdatum"];
@@ -92,16 +87,17 @@
 	$zeil1=htmlentities($zeil1, ENT_QUOTES, "UTF-8");
 
-	$zeil2=trim($row["plz"]." ".$row["ort_post"]);
+	// 2016-07-18: Zeile 2 mit 3 getauscht. Wie Brief-Anschrift
+	$zeil2= trim($row["strasse"]." ".$row["hausnummer"]);
 	if ($zeil2 != "") {
-		$zeil2="\n\t<br>".htmlentities($zeil2, ENT_QUOTES, "UTF-8");
-	}
-
-	$zeil3= trim($row["strasse"]." ".$row["hausnummer"]);
+		$zeil2= "\n\t<br>".htmlentities($zeil2, ENT_QUOTES, "UTF-8");
+	}
+
+	$zeil3=trim($row["plz"]." ".$row["ort_post"]);
 	if ($zeil3 != "") {
-		$zeil3= "\n\t<br>".htmlentities($zeil3, ENT_QUOTES, "UTF-8");
+		$zeil3="\n\t<br>".htmlentities($zeil3, ENT_QUOTES, "UTF-8");
 	}
 
 // Tabelle: Sp.1=Icon, Link zur Auskunft Person, Sp.2=Rahmen
-echo "
+	echo "
 <div class='pe aktuell'>
 <table>
@@ -118,10 +114,10 @@
 </table>
 </div>";
-return;
+	return;
 }
 
 function getEigByName() {
 	// 1 // Eigentuemer nach Name(-nsanfang)
-	global $gkz, $gemeinde, $epsg, $name, $person, $gfilter;
+	global $gkz, $debug, $gemeinde, $epsg, $name, $person, $gfilter;
 	$linelimit=150;
 	$arr = explode(",", $name);
@@ -141,7 +137,15 @@
 	} else {
 		$match1 = trim($name1)."%";
-	}		
+	}
+	
 	$sql ="SELECT p.nachnameoderfirma, p.vorname, p.gml_id FROM ax_person p ";
-	if ($gfilter > 0) {
+
+// Der Filter auf "Gemeinde" bleibt hier zunÃ€chst unberÃŒcksichtigt, bis im NorGIS-ALKIS-Importer ein Ersatz
+// geschaffen wurde fÃŒr die Tabelle "gemeinde_person" aus dem Post-Processing der "klassischen" Datenstruktur.
+// Es kÃ¶nnen somit Personen gefunden werden, die kein GrundstÃŒck im berechtigten Bereich haben.
+// Wenn eine Gemeinde-DB aus eigenem NBA geladen wurde, ist das unkritisch.
+// Wenn eine Gemeinde aus einer kreisweiten DB beauskunftet wird, ist das so noch nicht einsetzbar. 
+
+/*	if ($gfilter > 0) {
 		$sql.="JOIN gemeinde_person g ON p.gml_id=g.person WHERE p.endet IS NULL AND ";
 		switch ($gfilter) {
@@ -151,7 +155,8 @@
 				$sql.="g.gemeinde in ('".str_replace(",", "','", $gemeinde)."') AND "; break;
 		}
-	} else {
+	} else { */
 		$sql.="WHERE p.endet IS NULL AND ";
-	}
+//	}
+
 	if($match1 != '%'){
 		$sql.="nachnameoderfirma ILIKE $1 AND p.vorname ILIKE $2 ";		
@@ -167,4 +172,5 @@
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1='".$match."'</p>";}
 		return;
 	}
@@ -192,12 +198,11 @@
 	// 2 // GrundbÃŒcher zur gewÃ€hlten Person
 // Es wird in dieser Function nicht geprÃŒft, ob die gefundenen GrundbÃŒcher auch FlurstÃŒcke
-// haben, die im gefilterten Bereich (Gemeinde) liegen. Es kÃ¶nnen daher Sackgassen entstehen,
+// haben, die im gefilterten Bereich (Gemeinde) liegen. Es kÃ¶nnen daher "Sackgassen" entstehen,
 // also GrundbÃŒcher, die in der nÃ€chsten Stufe bei Filterung nicht zu Treffern fÃŒhren.
-// Das Joinen bis zum FS unter BerÃŒcksichtigung von speziellen Buchungen ist zu aufwÃ€ndig.
+// Das Joinen bis zum FS unter BerÃŒcksichtigung von speziellen Buchungen ist aber zu aufwÃ€ndig.
 // Dann kann entweder das FS gleich mit ausgegeben werden -> getGBuFSbyPerson.
 // Alternativ wÃŒrde eine Hilfstabelle benÃ¶tigt, in der im PostProcessing 
 // das GB-zu-Gemeinde-VerhÃ€ltnis vorbereitet wird.
 	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $debug, $bltbez, $bltblatt, $bltseite, $kennztyp, $zgbbez;
-	# $zblatt, $zblattn, $zblattz, $zbvnr;
 	$linelimit=150;
 
@@ -252,5 +257,5 @@
 		$gml=$row["gml_g"];
 		$blatt=$row["blatt"];
-		zeile_blatt($zgbbez, $beznam, $gml, $blatt, false, $person, false);
+		zeile_blatt($zgbbez, "", $gml, $blatt, false, $person, false);
 		$cnt++;
 	}
@@ -313,5 +318,5 @@
 		$blatt=$row["blatt"];
 		zeile_gbbez ($beznam, $bezirk, false);
-		zeile_blatt($bezirk, $beznam, $blattgml, $blatt, false, $person, true);	
+		zeile_blatt($bezirk, "", $blattgml, $blatt, false, $person, true);	
 	}
 	GB_Buchung_FS(250, ""); // Blatt > Grundst. > FS, max. 250, ohne Link "Buchung"
@@ -349,5 +354,5 @@
 	// Baustein 1: SQL-Anfang fuer beide Varianten
 	$sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, b.bezeichnung AS beznam, 
-	s1.gml_id as bsgml, s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemarkung, ot.gemarkungsname, ";
+	s1.gml_id as bsgml, s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemashl, trim(trailing from ot.gemarkung) AS gemarkungsname, ";
 	if($epsg == "25832") { // Transform nicht notwendig
 		$sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
@@ -373,7 +378,6 @@
 
 	// Baustein 2: SQL-Ende fuer beide Varianten
-	$sql2 ="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil
+	$sql2 ="JOIN gema_shl ot ON f.land || f.gemarkungsnummer = ot.gemashl  "; // Ortsteil
 	$sql2.="WHERE nn.benennt = $1 AND nn.endet IS NULL AND gb.endet IS NULL AND s1.endet IS NULL AND f.endet IS NULL ";
-
 	$sqlw2="AND s2.endet IS NULL ";
 
@@ -389,8 +393,9 @@
 	switch ($gfilter) { // Gemeinde-Filter
 		case 1: // Einzelwert
-			$sql2.="AND ot.gemeinde='".$gemeinde."' "; break;
+			$sql2.="AND substring(ot.gemshl from 6 for 3)='".$gemeinde."' "; break;
 		case 2: // Liste
-			$sql2.="AND ot.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
-	}
+			$sql2.="AND substring(ot.gemshl from 6 for 3) in ('".str_replace(",", "','", $gemeinde)."') "; break;
+	}
+
 	$sql3 ="ORDER BY b.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
 	// Sortier-Problem: laufendenummer in varchar linksbÃŒndig
@@ -448,5 +453,6 @@
 			if ($gwgb != $gb_gml) { // Gruppierung Blatt (Grundbuch)
 				$blatt=$row["blatt"];
-				zeile_blatt($bezirk, $beznam, $gb_gml, $blatt, false, $person, false);
+			//	zeile_blatt($bezirk, $beznam, $gb_gml, $blatt, false, $person, false);
+				zeile_blatt($bezirk, "", $gb_gml, $blatt, false, $person, false);
 				$gwgb = $gb_gml;	// Steuerg GW GB
 				$gwbv = ""; 		// Steuerg GW BVNR
@@ -466,6 +472,12 @@
 			$zfs1++;
 		}
+
 		if($zfs1 == 0) {
 			if ($bltrecht == "ohne") {echo "\n<p class='anz'>Keine direkte Buchung gefunden.</p>";}
+			/* nur Entw. 
+			if ($debug > 1) {
+				echo "\n<p class='dbg'>Keine direkte Buchung gefunden.</p>";
+				if ($debug > 2) {echo "<p class='err'>SQL = '".$sql."', $1 = '".$person."'<p>";}
+			} */
 		} elseif($zfs1 >= $linelimit) { // das Limit war zu knapp
 			echo "\n<p class='blt'>";
@@ -492,5 +504,6 @@
 			}
 		}
-	}	
+	}
+
 	if ($bltrecht == "" and $zfs1 > 0) { // beides
 		echo "<hr>"; // dann Trenner
@@ -523,5 +536,5 @@
 				$beznam=$row["beznam"];
 				$blatt=$row["blatt"];
-				zeile_blatt ($bezirk, $beznam, $gb_gml, $blatt, false, $person, false);
+				zeile_blatt ($bezirk, "", $gb_gml, $blatt, false, $person, false);
 				$gwgb = $gb_gml;	// Steuerg GW GB
 				$gwbv = ""; 		// Steuerg GW BVNR
@@ -532,5 +545,4 @@
 				$bsgml=$row["bsgml"];
 				zeile_buchung($bsgml, $bvnr, "", true, false); // Recht an ... // ohne Link!
-			#	zeile_buchung($bsgml, $bvnr, $bezirk."-".$blatt, true, false); // Recht an ...
 			}
 			$fs_gml=$row["gml_id"];
@@ -620,5 +632,4 @@
 	} else { // mit Filter auf Gemeinde: weniger Daten?
 		if ($kennztyp > 1) {
-			#trans="Grundb. und Flurst. in ".$zgbbez." von .. "; // zu lang
 			$trans="Grdb. und Flst. von .. in .."; // Filter GB-Bez,
 			// darunter sind dann Name und Bezirk farblich markiert
@@ -650,5 +661,5 @@
 
 // Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion 
-// im Kopf des Ergebnisrahmens anzeigen.
+//  im Kopf des Ergebnisrahmens anzeigen.
 // Dazu die im HTML-Header definierte Javascript-Function benutzen.
 // Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt.
