Changeset 425 for trunk/info/info/alkisn/alkisgsnw.php
- Timestamp:
- 12/30/21 17:49:00 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/info/info/alkisn/alkisgsnw.php
r422 r425 11 11 2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF'] 12 12 2020-12-15 Input-Validation und Strict Comparisation (===) 13 14 ++ ToDo: Den Fall berÃŒcksichtigen, dass die Buchung vorhanden ist, aber das GB nicht (ModellschwÀche). Meldungen ausgeben. 13 2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche) 14 15 ToDo: 16 - Den Fall berÃŒcksichtigen, dass die Buchung vorhanden ist, aber das GB nicht (ModellschwÀche). Meldungen ausgeben. 17 - bei Aufruf herrschende Buchung mit mehreren dienenden Buchungen: Links zu den dienenden Buchungen anzeigen 15 18 */ 16 19 … … 18 21 // Daten zur Buchungsstelle (GS = GrundstÃŒck) aus der DB lesen. 19 22 // Suche wahlweise ÃŒber die GML-ID oder ÃŒber das GrundstÃŒcks-Kennzeichen (Bezirk-Blatt-LfdNr) aus der URL. 20 global $gkz, $showkey, $d ebug, $defland, $gsbez, $gsblatt, $gslfdnr, $gsbart;23 global $gkz, $showkey, $dbg, $defland, $gsbez, $gsblatt, $gslfdnr, $gsbart; 21 24 22 25 $sqlgs="SELECT s.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, s.laufendenummer, s.buchungsart " 23 26 ."FROM ax_buchungsstelle s JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id "; 24 // Falls das Buchungsblatt fehlt (ModellschwÀche) wÀre ein LEFT JOIN hier nÃŒtzlich. Das Fehlen aber kontrollieren! ++27 // Falls das Buchungsblatt fehlt (ModellschwÀche) wÀre ein LEFT JOIN hier nÃŒtzlich. Das Fehlen aber kontrollieren! 25 28 26 29 if ($gskennz == '') { // normaler Link ÃŒber gmlid … … 66 69 } 67 70 68 function bs_dienend($gmlid_h) { 69 // Eine ggf. vorhandene dienende Buchungsstelle suchen und dessen GML_ID liefern. 70 global $debug, $gerooted; 71 function Back2theRoots($gmlid) { 72 // Die Buchungsstelle aus dem Aufruf-Parameter wenn eindeutig möglich iterativ zurÃŒck fÃŒhren auf die dienende Buchungsstelle, 73 // auf der die FlurstÃŒcke gebucht sind (Buchungsart="GrundstÃŒck" oder Blattart="fiktives Blatt"). 74 // Der GrundstÃŒcksnachweis wird aus anderen Modulen nur fÃŒr die "GrundstÃŒck"-Buchung aufgerufen, so dass diese Suche nicht notwendig ist. 75 // Bei Aufrufen von auÃen kann dies aber sinnvoll sein. 76 77 // ToDo: um Mehr als eine Stufe zurÃŒck fÃŒhren (max. 3) 78 79 global $gkz, $dbg, $showkey, $gerooted; 80 $gd=$gmlid; // gml dienend 81 71 82 // BS-herrschend (bekannt) >an[]> BS-dienend (gesucht) 72 $sqld="SELECT d.gml_id FROM ax_buchungsstelle d JOIN ax_buchungsstelle h ON d.gml_id=any(h.an) " 73 ."WHERE h.gml_id = $1 and d.endet IS NULL AND h.endet IS NULL"; 74 $v=array($gmlid_h); 75 $resd=pg_prepare("", $sqld); 76 $resd=pg_execute("", $v); 77 $cntd=0; 78 while($rowd=pg_fetch_assoc($resd)) { 79 $cntd++; 80 $gmlid_d=$rowd["gml_id"]; 81 } 82 if ($cntd === 0) { // KEINE dienende BS 83 $gmlid_d=""; 84 } elseif ($cntd > 1) { // Problem: mehrere dienende BS 85 $gmlid_d=""; // wennn mehrere (.an=Array[]), dann nicht eindeutig rÃŒckfÃŒhrbar. 86 $gerooted=false; // Root nicht erreicht 87 if ($debug > 2 ) { // Meldung? Auswahl? 88 echo "\n<p class='err'>Mehrere 'diendende' Buchungen zur Buchung '".$gmlid_h."'</p>"; 89 } 90 } 91 pg_free_result($resd); 92 return $gmlid_d; 93 } 94 95 function Back2theRoots($gmlid_h) { 96 // Eine Buchungsstelle (aus dem Aufruf-Parameter) zurÃŒck fÃŒhren auf die Basis-Buchungsstelle 97 // Suchen bis Buchungsart="GrundstÃŒck" oder ggf. Blattart="fiktives Blatt" 98 global $debug; 99 $gh=$gmlid_h; // herrschend 100 $gd=$gh; // dienend 101 $gr=$gd; // root 83 $sql="SELECT d.gml_id, d.laufendenummer FROM ax_buchungsstelle d JOIN ax_buchungsstelle h ON d.gml_id=any(h.an) " 84 ."WHERE h.gml_id = $1 and d.endet IS NULL AND h.endet IS NULL ORDER BY d.laufendenummer;"; 85 102 86 while($gd != "") { 103 $gr=$gd; // sichern 104 $gd=bs_dienend($gh); // an? 105 $gh=$gd; // fuer weitere Loop 106 } 87 $gr=$gd; // gml Return 88 $v=array($gd); 89 $res=pg_prepare("", $sql); 90 $res=pg_execute("", $v); 91 $zeianz=pg_num_rows($res); 92 if ($zeianz == 0){ // sollte nicht vorkommen, die Buchungsart "GrundstÃŒck" ruft dies NICHT auf 93 if ($dbg > 1 ) {echo "\n<p class='err'>Keine 'diendende' Buchung zur Buchung '".$gd."'</p>";} 94 $gd=""; 95 } elseif ($zeianz == 1){ 96 if ($dbg > 1 ) {echo "\n<p class='dbg'>Eine 'diendende' Buchung zur Buchung '".$gd."'</p>";} 97 $row=pg_fetch_assoc($res); 98 $gd=$row["gml_id"]; 99 } else { // > 1 // Seltener Sonderfall 100 if ($dbg > 1 ) {echo "\n<p class='dbg'>".$zeianz." 'diendende' Buchungen zur Buchung '".$gd."'</p>";} 101 $gerooted=false; // Root (GrundstÃŒck) wird nicht erreicht 102 $gd=""; // wenn mehrere (.an=Array[]), dann nicht eindeutig rÃŒckfÃŒhrbar 103 echo "\n<table class='fs'>\n<tr>\n\t<td class='heads'>Hinweis</td>" 104 ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>" 105 ."\n</tr>"; 106 echo "\n<tr>\n\t<td>Die angeforderte Buchung hat Rechte an ".$zeianz." anderen Buchungen." 107 ."<br>Für die Anzeige der Flurstücke muss eine dieser Grundstücks-Buchungen gewählt werden.</td>" 108 ."\n\t<td>\n\t\t<p class='nwlink noprint'>"; 109 while($row=pg_fetch_assoc($res)) { 110 $gml_d=$row["gml_id"]; 111 $bvnr=ltrim($row["laufendenummer"], '0'); 112 echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&gmlid=".$gml_d; 113 if ($showkey) {echo "&showkey=j";} 114 echo "' title='Grundstücksnachweis'>Buchung ".$bvnr 115 ." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''></a><br>"; 116 } 117 echo "\n\t\t</p>\n\t</td>\n</tr>\n</table>"; 118 } 119 } 120 pg_free_result($res); 107 121 return $gr; 108 122 } 109 123 110 // H i e rS t a r t124 // S t a r t 111 125 ini_set("session.cookie_httponly", 1); 112 126 session_start(); … … 156 170 <?php 157 171 $erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); } 158 159 if ($nodebug === "j") {$d ebug=0;}172 $dbg=$debug; // CONF in Arbeits-Variable 173 if ($nodebug === "j") {$dbg=0;} 160 174 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisgsnw.php'"); 161 175 if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>"; 162 176 163 $gmlid_p=$gmlid; // Wert aus Parameter merken 164 $gerooted=true; // Auskunft beginnt mit dienendem GrundstÃŒck 165 $gmlid=get_GS_Daten($gmlid, $gskennz); // nachschauen 166 $gml_anfrd=$gmlid; // ursprÃŒngliche Anforderung aus URL merken 177 $gml_anfrd=$gmlid; // ursprÃŒngliche Anforderung aus URL merken 178 $gerooted=true; // Auskunft beginnt mit (dienendem) GrundstÃŒck 179 $gmlid=get_GS_Daten($gmlid, $gskennz); // nachschauen, Variablen setzen, Keine Ausgabe 167 180 if ($gmlid == "") { // nix gefunden 168 181 die("Kein Treffer"); 169 } else { // Treffer170 if ($gsbart != "1100") { // Buchungsart "GrundstÃŒck"171 $gmlid_r=Back2theRoots($gmlid);172 if ($gmlid_r != $gmlid) { // wurde hoch gerÃŒckt173 $gmlid=get_GS_Daten($gmlid_r, ""); // damit weiter arbeiten174 }175 }176 182 } 177 183 echo "<p class='balken gskennz'>ALKIS Grundstück ".$gsbez."-".rtrim($gsblatt)."-".$gslfdnr." </p>\n\n<h2>Grundstück</h2>"; // Balken 178 184 179 if ($gerooted) { 180 // F l u r s t u e c k e 181 echo "\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurstücke</h3>" 182 ."\n<table class='fs'>"; 183 echo "\n<tr>" // Kopfzeile 185 // F l u r s t ÃŒ c k e 186 echo "\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurstücke</h3>"; 187 188 if ($gsbart > 1102){ // Recht an .. 189 $gmlid_r=Back2theRoots($gmlid); 190 if ($gmlid_r != $gmlid) { // wurde hoch gerÃŒckt 191 $gmlid=get_GS_Daten($gmlid_r, ""); // damit weiter arbeiten 192 } 193 } 194 if ($gerooted) { // // Buchungsart (aufgeteiltes) GrundstÃŒck (nicht Recht an ..) 195 echo "\n<table class='fs'>\n<tr>" // Kopfzeile 184 196 ."\n\t<td class='heads'>Gemarkung</td>" 185 197 ."\n\t<td class='heads'>Flur</td>" 186 198 ."\n\t<td class='heads fsnr' title='Flurstücksnummer (Zähler / Nenner)'><span class='wichtig'>Flurst.</span></td>" 187 ."\n\t<td class='head fla g'>Fläche</td>"199 ."\n\t<td class='head fla'>Fläche</td>" 188 200 ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>" 189 201 ."\n</tr>"; … … 191 203 //++ Tabelle hat noch Platz, SQL in der Loop oder Subquery wÀre möglich, weil i.d.R. nur wenige FS je GS gebucht sind. 192 204 193 $sqlfs ="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche194 FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer195 WHERE f.istgebucht = $1 AND f.endet IS NULL AND g.endet IS NULL ";205 $sqlfs ="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche " 206 ."FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ".UnqKatAmt("f","g") 207 ."WHERE f.istgebucht = $1 AND f.endet IS NULL AND g.endet IS NULL "; 196 208 if ($filtgem === '' ) { // ungefiltert 197 209 $v=array($gmlid); … … 236 248 if ($j === 0) {echo "\n<tr class='unp'>\n\t<td colspan='5'><p class='warn'>Keine Flurstücke im berechtigten Bereich.</p></td>\n</tr>";} 237 249 echo "\n</table>"; 238 } else { // konnte nicht bis zur Basis aufsteigen239 echo "<p>Die angeforderte Buchung hat Rechte an mehreren anderen Buchungen."240 ."<br>Für die Anzeige der Flurstücke muss eine dieser Buchungen (Grundstück) gewählt werden.</p>";241 // Auswahl anbieten? Sonst ÃŒber den Link "Bestand" recherchieren.242 250 } 243 251 … … 268 276 $anzber=count($verf_next); 269 277 } 270 echo "\n</table>\n\n"; 271 //if ($debug > 1) {echo "<p class='dbg'>Buchung gezeigt = ".$gezeigt."</p>";} 272 278 echo "\n</table>\n"; 273 279 pg_close($con); 274 echo <<<END 275 <div class='buttonbereich noprint'> 276 <hr> 277 <a title="zurück" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zurück"></a> 278 <a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a> 279 END; 280 281 echo "<div class='buttonbereich noprint'>\n<hr>" 282 ."\n\t<a title='zurück' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zurück'></a> "; 283 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> ";} 280 284 if ($stufe < 3) { 281 285 echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"".$gmlid."\")'><img src='ico/download_gs.png' width='32' height='16' alt='Export'></a>";
Note: See TracChangeset
for help on using the changeset viewer.