Index: trunk/info/info/alkisn/alkisfsnw.php
===================================================================
--- trunk/info/info/alkisn/alkisfsnw.php	(revision 422)
+++ trunk/info/info/alkisn/alkisfsnw.php	(revision 425)
@@ -6,5 +6,5 @@
 
 	Version:
-	2016-02-24 Version fuer norGIS-ALKIS-Import
+	2016-02-24 Version fÃŒr norGIS-ALKIS-Import
 	.....
 	2020-02-20 Authentifizierung ausgelagert in Function darf_ich()
@@ -14,6 +14,8 @@
 	2020-12-16 Input-Validation und Strict Comparisation (===)
 	2021-03-09 Link zum GebÃ€udenachweis auch mit "Bauwerke" betiteln
+	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
 
 ToDo:
+	- Tabbelle "nutz_21" ist ein Relikt von NorGIS/ALB und kÃ¶nnte in spÃ€teren Versionen fehlen.
 	- Buchung auf "fiktives Blatt" ist nur mit debug zu sehen: die <tr> in .css grau hinterlegen
 	- "Umschalter" (gleiches Modul) anders darstellen als Links zu ANDEREN Nachweisen
@@ -69,8 +71,9 @@
 <?php
 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
+$dbg=$debug; // CONF in Arbeits-Variable
 
 // Mit URL-Parameter "&nodebug=j" kann man die Entwicklungsumgebung (in Conf definiert) ausschalten. Blendet z.B. "fiktives Blatt" aus.
-// Manuell an die URL anfÃŒgen, wirkt nur temporÃ€r und wird nicht in Links weiter gereicht.
-if ($nodebug === "j") {$debug=0;} 
+// Wirkt temporÃ€r und wird nicht in Links weiter gereicht.
+if ($nodebug === "j") {$dbg=0;} 
 
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisfsnw.php'");
@@ -99,9 +102,9 @@
 to_char(cast(f.zeitpunktderentstehung AS date),'DD.MM.YYYY') AS zeitpunktderentstehung, f.istgebucht, g.gemarkungsnummer, g.bezeichnung, r.bezeichnung AS rbez, k.bezeichnung AS kbez, m.bezeichnung AS mbez 
 FROM ax_flurstueck f 
-LEFT JOIN ax_gemarkung g ON f.gemeindezugehoerigkeit_land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-LEFT JOIN ax_regierungsbezirk r ON f.gemeindezugehoerigkeit_regierungsbezirk=r.regierungsbezirk 
-LEFT JOIN ax_kreisregion k ON f.gemeindezugehoerigkeit_regierungsbezirk=k.regierungsbezirk AND f.gemeindezugehoerigkeit_kreis=k.kreis 
-LEFT JOIN ax_gemeinde m ON m.regierungsbezirk=f.gemeindezugehoerigkeit_regierungsbezirk AND m.kreis=f.gemeindezugehoerigkeit_kreis AND m.gemeinde=f.gemeindezugehoerigkeit_gemeinde
-WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL AND m.endet IS NULL AND k.endet IS NULL AND r.endet IS NULL;";
+LEFT JOIN ax_gemarkung g ON f.gemeindezugehoerigkeit_land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ".UnqKatAmt("f","g")
+."LEFT JOIN ax_regierungsbezirk r ON f.gemeindezugehoerigkeit_regierungsbezirk=r.regierungsbezirk ".UnqKatAmt("f","r")
+."LEFT JOIN ax_kreisregion k ON f.gemeindezugehoerigkeit_regierungsbezirk=k.regierungsbezirk AND f.gemeindezugehoerigkeit_kreis=k.kreis ".UnqKatAmt("f","k")
+."LEFT JOIN ax_gemeinde m ON m.regierungsbezirk=f.gemeindezugehoerigkeit_regierungsbezirk AND m.kreis=f.gemeindezugehoerigkeit_kreis AND m.gemeinde=f.gemeindezugehoerigkeit_gemeinde ".UnqKatAmt("f","m")
+."WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL AND m.endet IS NULL AND k.endet IS NULL AND r.endet IS NULL;";
 
 $v = array($gmlid); // mit gml_id suchen
@@ -110,5 +113,12 @@
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Flurstuecksdaten</p>";
-	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
+	if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
+}
+if ($dbg > 0) {
+	$zeianz=pg_num_rows($res);
+	if ($zeianz > 1){
+		echo "\n<p class='err'>Die Abfrage liefert mehr als ein (".$zeianz.") Flurst&uuml;cks-Objekt!</p>";
+		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
+	}
 }
 if ($row = pg_fetch_assoc($res)) {
@@ -137,5 +147,5 @@
 } else {
 	echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ck mit gml_id=".$gmlid."</p>";
-	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
+	if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
 	echo "\n</body>\n</html>";
 	return;
@@ -155,5 +165,5 @@
 if ( ($filtkreis != '' and $filtkreis != $kreis) or ($filtgem != '' and $filtgem != $gemeinde) ) {
 	// Einer der gesetzten Filter passt nicht
-	if ($debug > 2) { //++ SchÃ¶nes Bild? Stop-Zeichen?
+	if ($dbg > 2) { //++ SchÃ¶nes Bild? Stop-Zeichen?
 		echo "\n<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>"
 		."\n<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
@@ -180,11 +190,11 @@
 
 echo "\n<hr>\n<table class='fs'>"; // FS-Teil 6 Spalten
-echo "\n<tr>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>\n\t\t<td></td>" // 1-5 in erster Zeile kein "colspan" verwenden
-	."\n\t\t<td>\n\t\t<p class='nwlink noprint'>weitere Auskunft:</p></td>" // 6
+echo "\n<tr>\n\t<td></td>\n\t<td></td>\n\t<td></td>\n\t<td></td>\n\t<td></td>" // 1-5 in erster Zeile kein "colspan" verwenden
+	."\n\t<td><p class='nwlink noprint'>weitere Auskunft:</p></td>"
 ."\n</tr>";
 
 echo "\n<tr>" // Zeile: G e b i e t s z u g e h o e r i g k e i t  Gemeinde / Kreis / Regierungsbezirk
-	."\n\t<td class='ll'><img title='Im Gebiet von' src='ico/Gemeinde.png' width='16' height='16' alt=''> Gebiet:</td>" // 1
-	."\n\t<td>Gemeinde<br>Kreis<br>Regierungsbezirk</td>" // 2
+	."\n\t<td class='ll'><img title='Im Gebiet von' src='ico/Gemeinde.png' width='16' height='16' alt=''> Gebiet:</td>"
+	."\n\t<td>Gemeinde<br>Kreis<br>Regierungsbezirk</td>"
 	."\n\t<td class='lr' colspan='3'>"; // 3-5
 		if ($showkey) {echo "<span class='key'>(".$gemeinde.")</span> ";}
@@ -195,6 +205,7 @@
 		echo $rbez
 	."</td>"
-	."\n\t<td class='nwlink'>" // 5
-		."\n\t\t<p class='nwlink noprint'>"
+	."\n\t<td class='nwlink'>";
+	if ($fsHistorie){ // conf
+		echo "\n\t\t<p class='nwlink noprint'>"
 		."\n\t\t\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
 		if ($showkey) {echo "&amp;showkey=j";}
@@ -202,6 +213,7 @@
 		."<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>"
 		."</a>"
-		."\n\t\t</p>"
-	."\n\t</td>" // 6
+		."\n\t\t</p>\n\t";
+	}
+	echo "</td>"
 ."\n</tr>";
 
@@ -222,7 +234,7 @@
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer</p>";
-	if ($debug > 1) {
+	if ($dbg > 1) {
 		echo "\n<p class='dbg'>Fehler:".pg_last_error()."</p>";
-		if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
+		if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
 	}
 } else {
@@ -281,6 +293,6 @@
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
-	//if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";}
-	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
+	//if ($dbg > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";}
+	if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
 }
 $j=0;
@@ -353,5 +365,5 @@
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Suche tats. Nutzung</p>";
-	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$fskennzalb."'",$sql), ENT_QUOTES, "UTF-8")."'</p>";}
+	if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$fskennzalb."'",$sql), ENT_QUOTES, "UTF-8")."'</p>";}
 }
 $j=0;
@@ -513,11 +525,11 @@
 
 // Gemeinsame FlÃ€che suchen: entweder (ST_Intersects and not ST_Touches) oder (2xST_Within OR ST_Overlaps), ST_Intersects liefert auch angrenzende
-$sql_boden="SELECT b.artderfestlegung AS wert, a.beschreibung AS art_verf, b.gml_id AS verf_gml, b.bezeichnung AS verf_bez, 
+$sql_boden ="SELECT b.artderfestlegung AS wert, a.beschreibung AS art_verf, b.gml_id AS verf_gml, b.bezeichnung AS verf_bez, 
 b.name AS verf_name, d.bezeichnung AS stelle_bez, d.stelle AS stelle_key 
 FROM ax_flurstueck f 
 JOIN ax_bauraumoderbodenordnungsrecht b ON ST_Within(b.wkb_geometry, f.wkb_geometry) OR ST_Within(f.wkb_geometry, b.wkb_geometry) OR ST_Overlaps(b.wkb_geometry, f.wkb_geometry)
 LEFT JOIN ax_artderfestlegung_bauraumoderbodenordnungsrecht a ON b.artderfestlegung=a.wert 
-LEFT JOIN ax_dienststelle d ON b.stelle=d.stelle 
-WHERE f.gml_id = $1 AND f.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL";
+LEFT JOIN ax_dienststelle d ON b.stelle=d.stelle ".UnqKatAmt("b","d")
+."WHERE f.gml_id = $1 AND f.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL";
 
 pg_prepare($con, "bodeneuordnung", $sql_boden);
@@ -525,5 +537,5 @@
 if (!$res_bodeneuordnung) {
 	echo "\n<p class='err'>Fehler bei Bau-, Raum- oder Bodenordnungsrecht</p>";
-	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sql_boden)."</p>";}
+	if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sql_boden)."</p>";}
 }
 $sql_str="SELECT gml_id FROM ax_besondereflurstuecksgrenze WHERE endet IS NULL AND 1000 = ANY(artderflurstuecksgrenze) 
@@ -534,5 +546,5 @@
 if (!$res_strittigeGrenze) {
 	echo "\n<p class='err'>Fehler bei strittige Grenze</p>";
-	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sql_str)."</p>";}
+	if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sql_str)."</p>";}
 }
 if (pg_num_rows($res_bodeneuordnung) > 0 OR pg_num_rows($res_strittigeGrenze) > 0) {
@@ -609,5 +621,5 @@
 	$anzber=ber_bs_zaehl($gml_buchungsstelle);	// Anzahl berechtigte Buchungen (nÃ€chste Stufe) zu dieser Buchung ermitteln
 	$verf_next = array($gml_buchungsstelle);	// Start Recursion mit einem Element
-	//if ($debug > 1) {echo "<p class='dbg'>Nach Stufe ".$stufe.", Anzahl: ". $anzber ."</p>";}
+	//if ($dbg > 1) {echo "<p class='dbg'>Nach Stufe ".$stufe.", Anzahl: ". $anzber ."</p>";}
 
 	while ($anzber > 0 ) { // Stufe - recursiv in die Tiefe, solange es was zu verfolgen gibt
@@ -621,5 +633,5 @@
 				$verf_neu=ber_bs_anzg($gml_ber_bs, $eig, false, $gmlid, ""); // Anzeige ber. Buchungst., ggf. mit EigentÃŒmer.
 				$anz_neu=count($verf_neu); // Das Ergebnis zÃ€hlen
-			//	if ($debug > 2) {echo "<p class='dbg'>Weiter zu verfolgen: Stufe ".$stufe.", Element ".$i.", Anzahl: ".$anz_neu."</p>";}
+			//	if ($dbg > 2) {echo "<p class='dbg'>Weiter zu verfolgen: Stufe ".$stufe.", Element ".$i.", Anzahl: ".$anz_neu."</p>";}
 				if ($anz_neu > 0) { // wenn neue geliefert
 					$verf_next=array_merge($verf_next, $verf_neu); // die neuen an die Sammlung heften
@@ -628,9 +640,7 @@
 		} // Ende Buchungs-Array in der Stufe
 		$anzber=count($verf_next); // Sammlung auf Stufe zÃ€hlen, Steuert die Schleife.
-		//if ($debug > 1) {echo "<p class='dbg'>Nach Stufe ".$stufe.", Anzahl: ". $anzber ."</p>";}
 	} // Ende Stufe
 
 	echo "\n</table>\n\n";
-	//if ($debug > 1) {echo "<p class='dbg'>Buchung gezeigt = ".$gezeigt."</p>";}
 
 	// Fehler aus "ModellschwÃ€che" erkennen.
@@ -641,5 +651,5 @@
 		echo "<p class='err'>Das Grundbuch zur Buchung '".$gml_buchungsstelle."' fehlt in der Datenbank.</p>";
 		
-		if ($debug > 1) { // fehlt die Buchung??
+		if ($dbg > 1) { // fehlt die Buchung??
 			echo "<p class='dbg'>Suchen mit SQL: SELECT * FROM ax_buchungsstelle WHERE gml_id='".$gml_buchungsstelle."'; </p>";
 		}
@@ -651,11 +661,8 @@
 
 pg_close($con);
-echo <<<END
-<div class='buttonbereich noprint'>
-<hr>
-	<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
-	<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
-END;
-echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"" . $gmlid . "\")'><img src='ico/download_fs.png' width='32' height='16' alt='Export'></a>&nbsp;\n</div>";
+echo "<div class='buttonbereich noprint'>\n<hr>"
+	."\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;";
+if ($PrntBtn==true){echo "\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";}
+echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"".$gmlid."\")'><img src='ico/download_fs.png' width='32' height='16' alt='Export'></a>&nbsp;\n</div>";
 
 footer($gmlid, selbstverlinkung()."?", "&amp;eig=".$eig);
