Index: trunk/mapbender/http/nav/alkisnav_fkt.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 278)
+++ trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 282)
@@ -1,23 +1,142 @@
 <?php
 /* Version vom 
-	2013-04-26	NEU Function "GB_Buchung_FS" ausgelagert.
-					Code aus aus _eig soll auch in _grd verwendet werden
-		Dazu Var-Namen harmonisieren:
-		_eig    _grd     NEU
-		$gb     $gblatt  $blattgml
+	2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
 */
 
+// function Typ "zeile_**"  = Ausgabe eines Knotens
+// - Icon,  ggf. mit Link zur Buchauskunft
+// - Zeile, ggf. mit Link zur weiteren AuflÃ¶sung untergeordneter Knoten
+// Hierin die Encodierung fÃŒr url und HTML.
+
+function zeile_ag ($ag, $anr) {	// Zeile  A m t s g e r i c h t
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	if ($ag == "") {
+		$agd=$anr; // Ersatz: Nummer statt Name. Besser: Name immer fÃŒllen
+	} else {
+		$agd=htmlentities($ag, ENT_QUOTES, "UTF-8");
+	}
+	echo "\n<div class='ga' title='Amtsgericht'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Gericht.ico' width='16' height='16' alt='Amtsgericht'> ";
+		echo "AG <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>";		
+		echo $agd."</a> (".$anr.")";
+	echo "\n</div>";
+	return;
+}
+
+function zeile_gbbez ($gnam, $zgbbez) {	// Zeile Grundbuch - B e z i r k
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	$gnamd=htmlentities($gnam, ENT_QUOTES, "UTF-8");
+	echo "\n<div class='gk' title='GB-Bezirk'>";
+		echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'> ";
+		echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez."'>";		
+		echo "Bezirk ".$gnamd."</a> (".suchfeld($zgbbez).")";			
+	echo "\n</div>";
+	return;
+}
+
+function zeile_blatt ($bezirk, $beznam, $blattgml, $blatt, $dienend, $person) {
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	// Zeile Grundbuch - B l a t t
+	$blattd=ltrim($blatt, "0"); // Display-Version ohne fÃŒhrende Nullen
+	if ( $dienend) {$dientxt="dienendes ";}
+	$blattlnk=urlencode($blatt); // trailing Blank
+	if ($beznam != "") {$nam = $beznam." ";}
+	echo "\n<div class='gb' title='".$dientxt."GB-Blatt'>";
+	if ($blattgml == "") { // Link zum Nachweis nur wenn GML bekannt
+		echo "\n\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt'>";
+	} else {
+		echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$blattgml."\")'>";
+			echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt'>";
+		echo "\n\t</a> ";
+	}
+	echo $nam." <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg;
+	echo "&amp;blattgml=".$blattgml."&amp;gbkennz=".$bezirk."-".$blattlnk;
+
+	echo "&amp;gbbeznam=".urlencode($beznam);
+
+	if ($person != "") {echo "&amp;person=".$person;} // nur fÃŒr EigentÃŒmer-Suche
+	echo "'>Blatt&nbsp;".$blattd."</a>\n</div>";
+	return;
+}
+
+function zeile_buchung ($buchunggml, $bvnr, $gbkennz, $dienend) {
+	// Zeile  B u c h u n g s s t e l l e  -  GrundstÃŒck ausgeben
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	if ($bvnr == 0) {
+		$bvnra = "-";
+	} else {
+		$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
+	}
+	if ($diened) {
+		$ti="dienendes&nbsp;";
+		$re="Recht an ";
+	} else {
+		$ti="";
+		$re="";
+	}
+	echo "\n<div class='gs' title='".$ti."Grundst&uuml;ck'>";
+	echo "\n\t<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+	echo $re."Buchung";
+
+	if ($gbkennz == "") { // ohne Link
+		echo "&nbsp;".$bvnra."&nbsp;";
+	} else { // Bezirk-Blatt-lfd
+		echo "\n\t<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;buchunggml=".$buchunggml;			
+		echo "&amp;gbkennz=".$gbkennz;
+		echo "'>&nbsp;".$bvnra."&nbsp;</a>";
+	}
+	echo "\n</div>";	
+	return 0;
+}
+
+function zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur) {
+	// Zeile mit Icon (Link zum Buch-Nachweis) und Text (Link zum Positionieren)
+	global $gkz, $gemeinde, $epsg, $auskpath, $scalefs;
+
+	echo "\n<div class='fs'>";
+	echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
+	echo "\n\t</a>\n\t";			
+
+	echo "&nbsp;<a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+	echo "javascript:";
+		echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
+		echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
+		echo "parent.parent.showHighlight(".$x.",".$y.");' ";
+	echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+	echo "onmouseout='parent.parent.hideHighlight()'>";
+
+	if ($gmkg == "" ) {
+		echo "Flst. "; // Im FS-Teil: Gem+Flur als Knoten darÃŒber ($gmkg und $flur leer)
+	} else {
+		echo $gmkg." "; // Im GB-und Nam-Teil in der Zeile angezeigt
+	}
+	if ($flur != "" ) {echo $flur."-";}
+	echo $fskenn."</a>\n</div>";
+	return;
+}
+
+function zeile_person ($persongml, $nachname, $vorname) {
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	// Zeile  P e r s o n   (oder Firma)
+	$nnam=htmlentities($nachname, ENT_QUOTES, "UTF-8");
+	$namlnk=urlencode($nachname);
+	$vnam=htmlentities($vorname, ENT_QUOTES, "UTF-8");
+	// Link zur Auskunft Person  +++ Icon differenzieren? Firma/Person
+	echo "\n<br>\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$gml."\")'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG'>";
+	echo "\n\t</a> ";		
+	echo "\n<a title='Person' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$persongml."&amp;name=".$namlnk."'>".$nnam.", ".$vnam."</a>";
+	return;
+}
+
 function GB_Buchung_FS ($linelimit) {
-// Zu einem Grundbuch-Blatt (identifiziert ÃŒber seine gml_id):
-//  - suchen der Buchungen (Gruppenwechsel) 
-//  - und FlurstÃŒcke (Links)
-// Wird verwendet in den Modulen _eig und _grd.
-// 2013-04-26	Noch kein BlÃ€ttern und noch keine BerÃŒcksichtigung des Filters auf "Gemeinde"
-// ToDo: ZÃ€hler fÃŒr Blatt, Buchung, FS - am Ende ausgeben
-
-	global $gkz, $gemeinde, $blattgml, $scalefs, $auskpath, $epsg, $gfilter, $debug;
+// Zu einem Grundbuch-Blatt (identifiziert ÃŒber seine gml_id) suchen der 
+// Buchungen (Gruppenwechsel) und FlurstÃŒcke (Links)
+	global $gkz, $gemeinde, $blattgml, $epsg, $gfilter, $debug;
 
 	// SQL-Bausteine vorbereiten
-	$sql1 ="SELECT s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
+	// SQL vorne gleich
+	$sql1 ="SELECT s1.laufendenummer AS lfd, s1.gml_id AS bsgml, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
 	if($epsg == "25832") { // Transform nicht notwendig
 		$sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
@@ -28,16 +147,20 @@
 	}
 	$sql1.="g.gemarkung, g.gemarkungsname ";
-   $sql1.="FROM alkis_beziehungen vbg ";
+	$sql1.="FROM alkis_beziehungen vbg ";
 	$sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von = s1.gml_id "; 
 
-	// Zwischen-JOIN (zusÃ€tzlich nur bei zweiter Abfrage)
-	$sqlz ="JOIN alkis_beziehungen vss ON vss.beziehung_von = s1.gml_id ";
-	$sqlz.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu = s2.gml_id ";
-
-	$sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id = vfb.beziehung_zu ";
-	$sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id = vfb.beziehung_zu ";
-
-	$sql2.="JOIN ax_flurstueck f ON vfb.beziehung_von = f.gml_id ";
-   $sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
+	// Zwischen-JOIN verschieden
+	$sqlz1 ="JOIN alkis_beziehungen vfb ON s1.gml_id = vfb.beziehung_zu ";
+	
+	$sqlz2 ="JOIN alkis_beziehungen vss ON vss.beziehung_von = s1.gml_id ";
+	$sqlz2.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu = s2.gml_id ";
+	$sqlz2.="JOIN alkis_beziehungen vfb ON s2.gml_id = vfb.beziehung_zu ";
+
+	// ++	JOIN alkis_beziehungen - ax_buchungsblatt 
+	//		fÃŒr Link auf Buchung mit komplettem Grundbuchennzeichen
+
+	// SQL hinten gleich
+	$sql2 ="JOIN ax_flurstueck f ON vfb.beziehung_von = f.gml_id ";
+	$sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
 	$sql2.="WHERE vbg.beziehung_zu= $1 AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
 	switch ($gfilter) {
@@ -47,15 +170,16 @@
 			$sql2.="AND g.gemeinde in (".$gemeinde.") "; break;
 	}
-	$sql2.="ORDER BY s1.laufendenummer, f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
-
-	// Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck.
-	$sql=$sql1.$sqla1.$sql2; // Direkte Buchungen
+	$sql2.="ORDER BY cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
+
+	// Abfrage:  d i r e k t e  B u c h u n g e n
+	// Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< FlurstÃŒck
+	#$sql=$sql1.$sqlz1.$sql2; // Direkte Buchungen
 
 	$v=array($blattgml, $linelimit);
-	$res=pg_prepare("", $sql);
+	$res=pg_prepare("", $sql1.$sqlz1.$sql2);
 	$res=pg_execute("", $v);
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
-		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		#if ($debug >= 3) {echo "\n<p class='err'>".$sql1.$sqlz1.$sql2."</p>";}
 		return;
 	}
@@ -63,19 +187,10 @@
 	$gwbv="";
 	while($row = pg_fetch_array($res)) {	
-
-		// Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
 		$bvnr=$row["lfd"];
-		if ($gwbv != $bvnr) {
-			if ($bvnr == 0) {
-				$bvnra = "-";
-			} else {
-				$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
-			}
-			$gwbv = $bvnr; // Steuerg GW BVNR
-			echo "\n<div class='gs' title='Grundst&uuml;ck'>";
-			echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
-			echo "Buchung ".$bvnra."</div>";
+		$bsgml=$row["bsgml"]; // Buchungsstelle gml_id
+		if ($gwbv != $bvnr) { // Gruppierung Buchungs-Stelle (BVNR)
+			$gwbv = $bvnr;
+			zeile_buchung ($bsgml, $bvnr, "", false); // FÃŒr GB-Kennz. (-> Link) fehlt Bezirk + Blatt
 		}
-
 		$fs_gml=$row["gml_id"];
 		$gmkg=$row["gemarkungsname"];
@@ -85,62 +200,35 @@
 		$x=$row["x"];
 		$y=$row["y"];
-		echo "\n<div class='fs'>";
-			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
-				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
-			echo "\n\t</a> ";	
-			echo "\n\t".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
-					echo "javascript:";
-					echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
-					echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
-					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
-				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
-				echo "onmouseout='parent.parent.hideHighlight()'>";
-			echo " Flur ".$flur." ".$fskenn."</a>";
-		echo "\n</div>";
+		zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur);
 		$zfs1++;
 	}
-	if($zfs1 == 0) { 
-		// "nichts gefunden" erst melden, wenn auch Teil 2 (Rechte an) nichts findet
-	} elseif($zfs1 >= $linelimit) {
-		echo "\n<p class='anz'>... und weitere</p>";
-	// +++  BlÃ€ttern einfÃŒhren?
+	#if($zfs1 == 0) { // "nichts gefunden" erst melden, wenn auch Teil 2 (Rechte an) nichts findet
+	#} else
+	if($zfs1 >= $linelimit) {
+		echo "\n<p class='anz'>... und weitere</p>"; // +++  BlÃ€ttern einfÃŒhren?
 	} elseif($zfs1 > 1) { // ab 2
 		echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke zum Grundbuch</p>";
 	}
-
-	if($zfs1 > 1) { // wenn's was zu trennen gibt
-		echo "<hr>"; // Trennen
-	}
-
-	// Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
-	// buchungsStelle2 < an < buchungsStelle1
-	$sql=$sql1.$sqlz.$sqla2.$sql2; // Rechte an
-
+	if($zfs1 > 0) {echo "<hr>";} // Trennen
+
+	// Abfrage:  R e c h t e  a n   /   d i e n e n d e  B u c h u n g e n
 	$v=array($blattgml, $linelimit);
-	$res=pg_prepare("", $sql);
+	$res=pg_prepare("", $sql1.$sqlz2.$sql2);
 	$res=pg_execute("", $v);
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
-		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+		#if ($debug >= 3) {echo "\n<p class='dbg'>".$sql1.$sqlz2.$sql2."</p>";}
 		return;
 	}
 	$zfs2=0;
+	#$gwblatt="";
 	$gwbv="";
 	while($row = pg_fetch_array($res)) {	
-
-		// Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
 		$bvnr=$row["lfd"];
-		if ($gwbv != $bvnr) {
-			if ($bvnr == 0) {
-				$bvnra = "-";
-			} else {
-				$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
-			}
-			$gwbv = $bvnr; // Steuerg GW BVNR
-			echo "\n<div class='gs' title='Grundst&uuml;ck'>";
-			echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
-			echo "Buchung ".$bvnra."</div>";
+		$bsgml=$row["bsgml"]; // Buchungsstelle gml_id
+		if ($gwbv != $bvnr) { // Gruppierung Buchung (BVNR) - dienend
+			$gwbv = $bvnr;
+			zeile_buchung ($bsgml, $bvnr, "", true);
 		}
-
 		$fs_gml=$row["gml_id"];
 		$gmkg=$row["gemarkungsname"];
@@ -150,17 +238,5 @@
 		$x=$row["x"];
 		$y=$row["y"];
-		echo "\n<div class='fs'>";
-			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
-				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
-			echo "\n\t</a> ";	
-			echo "\n\tRecht an ".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
-					echo "javascript:";
-					echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
-					echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
-					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
-				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
-				echo "onmouseout='parent.parent.hideHighlight()'>";
-			echo " Flur ".$flur." ".$fskenn."</a>";
-		echo "\n</div>";
+		zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur);
 		$zfs2++;
 	}
@@ -168,6 +244,5 @@
 		echo "\n<p class='anz'>Kein Flurst&uuml;ck im berechtigten Bereich.</p>";
 	} elseif($zfs >= $linelimit) {
-		echo "\n<p class='anz'>... und weitere</p>";
-	// +++ BlÃ€ttern einfÃŒhren?
+		echo "\n<p class='anz'>... und weitere</p>"; // BlÃ€ttern einfÃŒhren?
 	} elseif($zfs2 > 1) { // keine Meldung "nichts gefunden - Rechte an" wenn Treffer in Teil 1
 		echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>";
