source: trunk/mapbender/http/nav/alkisnav_grd.php @ 410

Revision 410, 22.8 KB checked in by frank.jaeger, 5 years ago (diff)

Suche nach Grundbuchblatt: Ein einheitliches Format wird jetzt vorausgesetzt. Fälle mit Zusatzbuchstabe über Wildcard finden, wenn nur Nummer und kein Buchstabe eingegeben wurde.

Line 
1<?php
2/*      Navigation mit ALKIS-Daten im Mapbender 2 - Teil Grundbuch-Suche
3        Datenbank-Struktur aus dem norGIS-ALKIS-Importer.
4Version vom
5        2016-02-11 Version fÃŒr norGIS-ALKIS-Import aus Version Classic abgeleitet.
6        2016-03-02 $gemeinde auf feste LÀnge korrigieren
7        2016-11-28 Gemeinsam genutzte Datenbanken ermöglichen
8        2018-02-15 Strikte Input-Validation der Parameter
9        2018-11-02 Suche GB-Blatt in "function gml_blatt": Jetzt einheitliches DB-Format. Zusatzbuchstabe mit Wildcard wenn nicht angegeben.
10*/
11
12$cntget = extract($_GET);
13
14// Input-Validation
15// Parameter aus Konfiguration oder Links sollten keine "Eingabefehler" enthalten.
16// Entweder falsche Konfiguration oder Hack. Programm sofort abbrechen.
17if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} // Mandant, muss! Formularfeld hidden
18
19if(isset($epsg)) { // SRS, Formularfeld hidden
20        if (preg_match('#^EPSG:[0-9]{4,5}$#', $epsg)) { // Prefix aus MB-Mapframe
21                $epsg = str_replace("EPSG:", "" , $epsg);
22        } elseif (!preg_match('#^[0-9]{4,5}$#', $epsg)) { // nur die Nummer
23                die("Eingabefehler epsg");
24        }
25} else { // Nichts ÃŒbergeben
26        $epsg=$gui_epsg; // dann default aus Conf
27}
28
29// Filter-Parameter fÃŒr Gemeindenummer in Kreis-Datenbank aus der Mapbender GUI-Konfiguration, Formularfeld hidden
30if (isset($gemeinde) AND trim($gemeinde, '0') != "") {
31        if (!preg_match('#^[0-9]{1,3}$#', $gemeinde)) {die("Eingabefehler Gemeinde");}
32        $gemeinde=str_pad($gemeinde, 3, "0", STR_PAD_LEFT);
33        if(strpos($gemeinde, ",") === false) {
34                $gfilter = 1; // Einzelwert
35        } else {
36                $gfilter = 2; // Liste
37        }
38} else { // Kein Filter
39        $gemeinde = "";
40        $gfilter = 0;
41}
42
43// Optionale Parameter. Links aus der Baumstruktur. Wenn nicht gesetzt, dann die Variable initialisieren.
44if (isset($ag) and $ag != "" ) { // Amtsgericht-Nummer
45        if (!preg_match('#^[0-9]{4}$#', $ag)) {die("Eingabefehler Amtsgericht");}
46} else {
47        $ag="";
48}
49if (isset($buchunggml) and $buchunggml != "" ) {
50        if (!preg_match('#^[0-9a-zA-Z]{16}$#', $buchunggml)) {die("Eingabefehler GML-ID Buchung");}
51} else {
52        $buchunggml="";
53}
54if (isset($blattgml) and $blattgml != "" ) {
55        if (!preg_match('#^[0-9a-zA-Z]{16}$#', $blattgml)) {die("Eingabefehler GML-ID Blatt");}
56} else {
57        $blattgml="";
58}
59if (isset($gbbeznam) and $gbbeznam != "" ) {
60        if (!preg_match('#^[a-zA-ZÀÌöÄÜÖß12 -]{3,40}$#', $gbbeznam)) {die("Eingabefehler Grundbuch-Bezirks-Name '".$gbbeznam."'");}
61} else {
62        $gbbeznam="";
63}
64
65include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
66include("alkisnav_fkt.php"); // Funktionen
67$con = pg_connect ($dbconn) or die ("Fehler bei der Verbindung zur Datenbank ".$dbpre.$dbgkz);
68
69echo <<<END
70<!doctype html>
71<html lang="de">
72<head>
73        <meta http-equiv="cache-control" content="no-cache">
74        <meta http-equiv="pragma" content="no-cache">
75        <meta http-equiv="expires" content="0">
76        <meta charset="utf-8">
77        <title>ALKIS-Suche Grundbuch</title>
78        <link rel="stylesheet" type="text/css" href="alkisnav.css">
79        <script type="text/javascript">
80                function imFenster(dieURL) {
81                        var link = encodeURI(dieURL);
82                        window.open(link,'','left=10,top=10,width=680,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
83                }
84                function transtitle(trans) {
85                        document.getElementById('transaktiontitle').innerHTML = trans;
86                }
87                function formular_belegung(suchMich) {
88                        parent.GrdGazetteerFrame.gbkennz.value=suchMich;
89                }
90        </script>
91</head>
92<body>
93<a href='javascript:history.back()'>
94        <img src="ico/zurueck.png" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
95</a>&nbsp;
96<span title='zuletzt ausgef&uuml;hrte Aktion'>
97        <dfn class='title' id='transaktiontitle'></dfn>
98</span>
99
100END;
101
102function ListAG($liste_ag, $aktuell) {
103        // Amtsgerichte (Grundbuchamt) auflisten, dazu als Filter die AG-Liste aus Conf-Datei verwenden.
104        global $debug;
105        $linelimit=40;
106
107        $sql="SELECT stelle, bezeichnung AS ag FROM ax_dienststelle "
108        ."WHERE stelle IN (".$liste_ag.") AND stellenart = 1000 AND endet IS NULL ORDER BY bezeichnung LIMIT $1 ;";
109        $res = pg_prepare("", $sql);
110        $res = pg_execute("", array($linelimit));
111        if (!$res) {
112                echo "\n<p class='err'>Fehler bei Amtsgerichte</p>";
113                if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
114                return 0;
115        }
116        $cnt = 0;
117        while($row = pg_fetch_array($res)) { // Loop AG
118                $anr=$row["stelle"];
119                $ag=$row["ag"];         
120                zeile_ag ($ag, $anr, $aktuell);
121                $cnt++;
122        }
123        // Foot
124        if($cnt == 0){
125                echo "\n<p class='anz'>Kein Amtsgericht aus Liste ".$$liste_ag.".</p>";
126        } elseif ($cnt >= $linelimit) {
127                echo "\n<p title='Bitte eindeutiger qualifizieren'>".$cnt." Amtsgerichte ... und weitere</p>";
128        } elseif ($cnt > 1) {
129                echo "\n<p class='anz'>".$cnt." Amtsgerichte</p>";
130        }
131        return 0;
132}
133
134function ListGBBez($agkey) {
135        // Grundbuch-Bezirke zu einem Amtsgericht auflisten.
136        // Auch wenn BlÀtter vorhanden sind, kann es eine "Sackgasse" sein.
137        // Manchmal haben die BlÀtter keine FlurstÃŒcke im Filter-Bereich (Gemeinde).
138        global $debug;
139        $linelimit=100; // Bezirke/AG
140
141        // Head
142        ListAG("'".$agkey."'", true); // hier nur fÃŒr 1
143
144        // Body
145        // Die Subquery stellt sicher, dass nur Bezirke aufgelistet werden, die auch BlÀtter enthalten
146        $sql ="SELECT g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g JOIN ax_dienststelle a ON g.stelle=a.stelle "
147        ."WHERE a.stelle = $1 AND a.stellenart = 1000 AND a.endet IS NULL AND g.endet IS NULL "
148        ."AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land AND b.bezirk=g.bezirk AND b.endet IS NULL LIMIT 1) IS NULL "
149        ."ORDER BY g.bezeichnung LIMIT $2 ;";
150
151        $v = array($agkey, $linelimit);
152        $res = pg_prepare("", $sql);
153        $res = pg_execute("", $v);
154        if (!$res) {
155                echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
156                #if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
157                return 0;
158        }
159        $cnt = 0;
160        while($row = pg_fetch_array($res)) { // Loop BEZIRK
161                $gnam=$row["bezeichnung"];
162                $gnr=$row["bezirk"];
163                zeile_gbbez($gnam, $gnr, false);
164                $cnt++;
165        }
166        // Foot
167        if($cnt == 0){
168                echo "\n<p class='anz'>Kein Bezirk mit Bl&auml;ttern.</p>";
169        } elseif ($cnt >= $linelimit) {
170                echo "\n<p class='anz' title='Bitte Name des Bezirks suchen lassen'>".$cnt." Bezirke ... und weitere</p>";
171        } elseif($cnt > 1) {
172                echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit       
173        }
174        return;
175}
176
177function ag_bez_head($gbbez, $bezaktuell) {
178        // Zu einem Grundbuchbezirks-SchlÃŒssel die Zeilen "AG" und "Bezirk" ausgeben
179        // Parameter = SchlÃŒssel des Bezirks
180        #global $debug;
181        $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g "
182        ."JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 AND g.endet IS NULL AND a.endet IS NULL LIMIT 1;";
183        $v=array($gbbez);
184        $res=pg_prepare("", $sql);
185        $res=pg_execute("", $v);
186        if (!$res) {
187                echo "\n<p class='err'>Fehler bei Amtsgericht und Grundbuchbezirk.</p>";
188                #if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
189        }
190        $row = pg_fetch_array($res);
191        if ($row) {
192                $gnam=$row["bezeichnung"]; // GB-Bezirk Bezeichnung
193                $ag=$row["ag"]; // AG Bezeichnung
194                $anr=$row["stelle"]; // AG Key
195                zeile_ag($ag, $anr, false); // Amtsgericht
196                zeile_gbbez($gnam, $gbbez, $bezaktuell); // Bezirk
197        } else {
198                echo "\n<div class='gk' title='Grundbuchbezirk'>";
199                        echo "\n\t\t<p class='err'><img class='nwlink' src='ico/GB-Bezirk.png' width='16' height='16' alt='Bez.'>";
200                                echo  " Bezirk '".$gbbez."' ist unbekannt.</p>";
201                echo "\n</div>";
202                return;
203        }
204        return;
205}
206
207function SuchGBBezName() {
208        // Grundbuch-Bezirk suchen nach Name(-nsanfang)
209        global $gkz, $gemeinde, $debug, $gbkennz;
210        $linelimit=80;
211
212        $sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g "
213        ."JOIN ax_dienststelle a ON g.stelle=a.stelle "
214        ."WHERE g.bezeichnung ILIKE $1 AND g.endet IS NULL AND a.endet IS NULL "
215        ."ORDER BY a.bezeichnung, g.bezeichnung LIMIT $2 ;"; // "AND a.stellenart=1000 " Amtsgericht
216        if ( $gbkennz == "") {
217                $match = "%";
218        } else {       
219                if(preg_match("/\*/",$gbkennz)){
220                        $match = trim(preg_replace("/\*/i","%", strtoupper($gbkennz)));
221                        if (substr($match, strlen($match), 1) != "%") {$match.="%";} // Wildcard am Ende obligatorisch
222                } else {
223                        $match = trim($gbkennz)."%";
224                }       
225        }
226        $v = array($match, $linelimit);
227        $res = pg_prepare("", $sql);
228        $res = pg_execute("", $v);
229        if (!$res) {
230                echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
231                return 1;
232        }
233        $cnt=0;
234        $gwag="";
235        while($row = pg_fetch_array($res)) { // Loop BEZIRK
236                $anr=$row["stelle"]; // Gruppierung AG
237                if ($gwag != $anr) {
238                        $gwag = $anr;
239                        $ag=$row["ag"];
240                        zeile_ag($ag, $anr, false);
241                }
242                $gnam=$row["bezeichnung"];
243                $gnr=$row["bezirk"];
244                zeile_gbbez ($gnam, $gnr, false);
245                $cnt++;
246        }
247        // Foot
248        if($cnt == 0){
249                echo "\n<p class='anz'>Kein Grundbuchbezirk.</p>";
250        } elseif ($cnt >= $linelimit) {
251                echo "\n<p title='Bitte eindeutiger qualifizieren'>".$cnt." Bezirke ... und weitere</p>";
252        } elseif ($cnt == 1) {
253                return $gnr; // Wenn eindeutig, gleich weiter
254        } elseif ($cnt > 1) {
255                echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit       
256        }
257        return;
258}
259 
260function EinBezirk($showParent) {
261        // Kennzeichen bestehend nur aus GB-Bezirk-SchlÃŒssel wurde eingegeben
262        global $gemeinde, $debug, $zgbbez, $auskpath;
263        $linelimit=300; // max. Blatt je Bezirk
264        // Dies Limit ist nicht ausreichend fÃŒr alle BlÀtter eines Bezirks, aber ...
265        // Wenn man die Blatt-Nr nicht kennt, kommt man hier sowieso nicht weiter.
266        // Es nutzt also nichts, hier tausende Nummern aufzulisten.
267        // +++ BlÀtter-Funktion einfÃŒhren analog Modul _eig
268
269        // Head
270        if ($showParent) {
271                ag_bez_head($zgbbez, true); // AG und BEZ ausgeben
272        }
273        // Body
274        $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b "
275        ."WHERE b.bezirk= $1 AND b.endet IS NULL ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
276        $v=array($zgbbez, $linelimit);
277        $res=pg_prepare("", $sql);
278        $res=pg_execute("", $v);
279        if (!$res) {
280                echo "\n<p class='err'>Fehler bei Bezirk.</p>";
281                #if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
282        }
283        $cntbl=0; // Counter Blatt/Bezirk
284        while($row = pg_fetch_array($res)) { // Loop BLATT     
285                $blatt=$row["blatt"];
286                $blattgml=$row["gml_id"];
287                zeile_blatt($zgbbez, "", $blattgml, $blatt, false, "", false);
288                $cntbl++;
289        }
290        // Foot
291        if($cntbl == 0) {
292                echo "\n<p class='anz'>Kein Blatt im Bezirk.</p>";
293        } elseif($cntbl >= $linelimit) {
294                echo "\n<p class='anz'>".$cntbl." Bl&auml;tter ... und weitere</p>";
295                // +++ Hier oft ÃŒberschritten! BlÀtter-Funktion einfÃŒhren
296                echo "\n<p>Geben sie ein: '".$zgbbez."-999A'<br>wobei '999A' = gesuchtes GB-Blatt</p>";
297                // Vorbelegen des Eingabefeldes fÃŒr neue Suche
298                echo "<script type='text/javascript'>parent.GrdGazetteerFrame.gbkennz.value='".$zgbbez."-';</script>";
299        } elseif ($cntbl > 1) {
300                echo "\n<p class='anz'>".$cntbl." Bl&auml;tter</p>"; // im Limit       
301        }
302        return;
303}
304
305function gml_blatt() {
306        // Kennzeichen "Bezirk + Blatt" eingegeben. Dazu die gml_id des Blattes ermitteln.
307        // 2018-10: Sonderfall Buchstabe: Auch finden wenn der nicht eingegeben wurde.
308        global $debug, $zgbbez, $zblatt, $zblattn, $zblattz;
309        $sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b "
310        ."WHERE b.bezirk= $1 AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung ";
311        if ($zblattz == "") { // kein Buchstabe angegeben
312        //      $sql.="IN ('".$zblattn."','".str_pad($zblattn, 6, "0", STR_PAD_LEFT)." ','".str_pad($zblattn, 7, "0", STR_PAD_LEFT)."');"; // frÃŒher uneinheitlich gefÃŒllt
313                $sql.="LIKE '".str_pad($zblattn, 6, "0", STR_PAD_LEFT)."_';"; // Buchstabe wird trotzdem gefunden
314        } else { // Buchstaben-Erweiterung wurde angegeben: '000123A'
315                $sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."';";
316        }
317        $v=array($zgbbez);
318        $res=pg_prepare("", $sql);
319        $res=pg_execute("", $v);
320        if (!$res) {
321                echo "\n<p class='err'>Fehler bei Blatt (Kennzeichen).</p>";
322                return;
323        }
324        $cntbl=0; // Counter Blatt
325        while($row = pg_fetch_array($res)) {   
326                $bl_gml=$row["gml_id"];
327                $zblatt=$row["blatt"]; // das tatsaechliche Format (mit/ohne fuehrende 0)
328                $cntbl++;
329        }
330        if($cntbl == 0) {
331                echo "\n<p class='err'>Grundbuchblatt '".$zgbbez."-".$zblatt."' nicht gefunden.</p>";
332        } elseif ($cntbl == 1) {
333                return $bl_gml;
334        }
335        return;
336}
337
338function EinBlatt($showParent) {
339        // Kennzeichen Bezirk + Blatt wurde eingegeben oder verlinkt
340        global $debug, $gemeinde, $zgbbez, $zblatt, $blattgml, $gbbeznam;
341        // Head
342        if ($showParent) {
343                ag_bez_head($zgbbez, false); // AG + BEZ
344                zeile_blatt ($zgbbez, "", $blattgml, $zblatt, false, "", true);
345        }
346        // Body
347        GB_Buchung_FS(1000, $zgbbez."-".$zblatt); // Blatt -> Buchung -> Flurstueck (Limitiert)
348        // ++ besser Limit runter und "BlÀttern"-Funktion einfÃŒhren
349        return;
350}
351
352function gml_buchungsstelle() {
353        // Kennzeichen "Bezirk + Blatt + BVNR" wurde eingegeben.
354        // Dazu die gml_id der Buchungsstelle ermitteln, um "function EinGrundstueck" benutzen zu können.
355        global $debug, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr;
356
357        // Blatt ->  B u c h u n g s s t e l l e
358        $sql ="SELECT s.gml_id FROM ax_buchungsstelle s "
359        ."JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id "
360        ."WHERE b.bezirk= $1 AND s.endet IS NULL AND b.endet IS NULL AND b.buchungsblattnummermitbuchstabenerweiterung ";
361
362        if ($zblattz == "") { // Ohne Buchstabenerweiterung
363                //Formate '123','000123 ','0000123'
364                $sql.="IN ('".$zblattn."','".str_pad($zblattn, 6, "0", STR_PAD_LEFT)." ','".str_pad($zblattn, 7, "0", STR_PAD_LEFT)."')";
365        } else { // Mit Buchstabenerweiterung: '000123A'
366                $sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."'";
367        }
368        $sql.=" AND s.laufendenummer= $2 ;";
369
370        $v=array($zgbbez, $zbvnr);
371        $res=pg_prepare("", $sql);
372        $res=pg_execute("", $v);
373        if (!$res) {
374                echo "\n<p class='err'>Fehler bei Buchungsstelle (Kennzeichen).</p>";
375                return;
376        }
377        $zbs=0;
378        while($row = pg_fetch_array($res)) {   
379                $bs_gml=$row["gml_id"];
380                $zbs++;
381        }
382        if($zbs == 0) {
383                echo "\n<p class='err'>Buchung ".$zgbbez."-".$zblattn.$zblattz."-".$zbvnr." nicht gefunden.</p>";
384                return;
385        } else {
386                return $bs_gml;
387        }
388}
389
390function EinGrundstueck($showParent) {
391        // Die gml_id der Buchungsstelle (BVNR, GrundstÃŒck) ist bekannt = $buchunggml
392        // Die gebuchten FlurstÃŒcke und dienende/herrschenden Buchungen werden ausgegeben.
393        global $debug, $gemeinde, $epsg, $buchunggml, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr, $gfilter;
394        // NoLimit?
395
396        // Head
397        if ($showParent) { // wenn Kennzeichen bekannt ist, dann auch Blatt ausgeben
398                if ($zgbbez.$zblatt != "") {
399                        ag_bez_head($zgbbez, false); // AG + BEZ
400                        zeile_blatt ($zgbbez, "", "", $zblatt, false, "", false);
401                        // Parameter 2 ($gnam) leer lassen Knoten "Bezirk" steht drÃŒber
402                } else {
403                        echo "<p class='err'>Kennzeichen Bezirk und Blatt nicht gesetzt</p>";
404                } // ++ suchen!
405                zeile_buchung($buchunggml, $zbvnr, $zgbbez."-".$zblattn.$zblattz, false, true);
406        }
407
408// dienend $1 gml_id von
409//         Buchungsstelle  <an<  Buchungsstelle sh
410//         (dienend)                (herrschend)
411
412// direkt  $1 gml_id von
413//         Buchungsstelle                           <istGebucht< FlurstÃŒck >> Gemarkung
414
415// Recht   $1 gml_id von
416//         Buchungsstelle  >an>  Buchungsstelle sd  <istGebucht< FlurstÃŒck >> Gemarkung
417//         (herrschend)             (dienend)   sd  >istBestandteilVon> bd >> gd
418
419        // Body
420        // Anfang (Select-Liste) gleich
421        $sqlanf ="SELECT g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
422        if($epsg == "25832") { // Transform nicht notwendig
423                $sqlanf.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
424                $sqlanf.="st_y(st_Centroid(f.wkb_geometry)) AS y ";
425        } else { 
426                $sqlanf.="st_x(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS x, ";
427                $sqlanf.="st_y(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS y ";                     
428        }
429        // Filter gleich
430        $sqlfilter="";
431        switch ($gfilter) { // Filter Gemeinde
432                case 1: // Einzel
433                        $sqlfitler="AND f.gemeinde='".$gemeinde."' "; break;
434                case 2: // Liste
435                        $sqlfilter="AND f.gemeinde in ('".str_replace(",", "','", $gemeinde)."') "; break;
436        }
437
438        // Direkte Buchungen (Flurst.)
439        $sql =$sqlanf."FROM ax_flurstueck f JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
440        $sql.="WHERE f.istgebucht = $1 AND f.endet IS NULL ".$sqlfilter."ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
441
442        $v=array($buchunggml);
443        $res=pg_prepare("", $sql);
444        $res=pg_execute("", $v);
445        if (!$res) {
446                echo "\n<p class='err'>Fehler bei Buchungsstelle (gml, direkt).</p>";
447                if ($debug >= 3) {
448                        echo "\n<p class='err'>'".$sql."'<br>\nmit $1 ='".$buchunggml."'</p>";
449                }
450        }
451        $zfs1=0;
452        while($row = pg_fetch_array($res)) {   
453                $fs_gml=$row["gml_id"];
454                $gmkg=$row["bezeichnung"];
455                $flur=$row["flurnummer"];
456                $fskenn=$row["zaehler"];
457                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
458                zeile_flurstueck ($fs_gml, $fskenn, $row["x"], $row["y"], $gmkg, $flur, false);
459                $zfs1++;
460        }
461        // Zwischen-Foot
462        if($zfs1 == 0) {
463                echo "\n<p class='anz'>Kein Flurst&uuml;ck zu dieser Buchung</p>";
464        } elseif($zfs1 > 1) {
465                echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke</p>";
466        }
467        if($zfs1 > 0) { // wenn's was zu trennen gibt
468                echo "<hr>"; // Trennen
469        }
470
471        // Recht "an" (dienende Buchungen und ihre Flurst.)
472
473        $sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt, "
474        ."gd.stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez "
475        ."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) "
476        ."JOIN ax_flurstueck f ON f.istgebucht=sd.gml_id "
477        ."JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer "
478        ."JOIN ax_buchungsblatt bd ON sd.istbestandteilvon=bd.gml_id "
479        ."JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk "
480        ."WHERE sh.gml_id = $1 AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND bd.endet IS NULL AND gd.endet IS NULL "
481
482        .$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
483
484        $v=array($buchunggml);
485        $res=pg_prepare("", $sql);
486        $res=pg_execute("", $v);
487        if (!$res) {
488                echo "\n<p class='err'>Fehler bei Buchungsstelle (gml, Recht an).</p>";
489                if ($debug >= 3) {
490                        echo "\n<p class='err'>'".$sql."'<br>\nmit $1 ='".$buchunggml."'</p>";
491                }
492        }
493        $zfs2=0;
494        $gwblatt="";
495        while($row = pg_fetch_array($res)) {
496                $dienstelle=$row["stelle"];     // Stelle (AG) des dien. Grdst.
497                $dienbezgml=$row["dienbezgml"]; // Bezirk des dien. GS: gml, Nr. und Bezeichnung
498                $diengbbez=$row["diengbbez"];   // Bezeichnung
499                $dienbezirk=$row["bezirk"];     // Key
500                $dienbltgml=$row["dienbltgml"]; // dien. Blatt, gml und Nr
501                $dienblatt=$row["dienblatt"];
502                $diengml=$row["diengml"];       // gml_id des dien. Grdst.
503                $dienlfd=$row["dienlfd"];       // BVNR (laufendNr) des dien. GS
504                if ($gwblatt != $dienblatt) { // Grupp. Blatt - dien.
505                        if ($gwblatt == "") { // der erste "dienende": Einleitungs-Zeile
506                                $aber="";
507                                if($zfs1 == 0) {$aber="Aber ein ";}
508                                echo "\n<p class='anz' title='Die oben genannte Buchung hat ein Recht an den folgenden Buchungen'>".$aber."Recht an ..</p>";
509                        }
510                        $gwblatt = $dienblatt; // Steuerg GW Blatt
511                        zeile_blatt($dienbezirk, $diengbbez, $dienbltgml, $dienblatt, true, "", false);
512                        $gwbvnr="";
513                }
514                if ($gwbvnr != $dienlfd) { // Gruppierung Buchung (BVNR) - dienend
515                        $gwbvnr = $dienlfd; // Steuerg GW BVNR
516                        zeile_buchung($diengml, $dienlfd, $dienbezirk."-".$dienblatt, true, false);
517                } // ++ Buchungsart? Welches Recht?
518                $fs_gml=$row["gml_id"];
519                $gmkg=$row["bezeichnung"];
520                $flur=$row["flurnummer"];
521                $fskenn=$row["zaehler"];
522                if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
523                zeile_flurstueck ($fs_gml, $fskenn, $row["x"],$row["y"], $gmkg, $flur, false);
524                $zfs2++;
525        }
526
527// Teil 3 - noch nicht umgesetzt
528// ToDo: Wenn nur 1 GrundstÃŒck untersucht wird, dann dazu auch die berechtigten (herrschenden) GrundbÃŒcher anzeigen und verlinken (ohne FS)
529
530        // Foot
531        if($zfs2 == 0 AND $zfs1 == 0) {
532                echo "\n<p class='anz'>Kein Recht an Flst.</p>";
533        } elseif($zfs2 > 1) {
534                echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>";
535        }
536        return;
537}
538
539// ===========
540// Start hier!
541// ===========
542
543// Validation: Eingabefeld aus Formular.
544// Suchbegriff (Bezirksname) oder Grundbuch-Kennzeichen gggg-999999z-BVNR (17).
545// Hier formatierte Meldung und html-Foot.
546if (isset($gbkennz) and $gbkennz != "" ) {
547        if (!preg_match('#^[0-9a-zA-ZÀöÌÄÖÜß* -]{1,25}$#', $gbkennz)) {
548                echo "<p class='err'>Eingabe unzul&auml;ssig!</p>";
549                $gbkennz="";
550        }
551} else {
552        $gbkennz="";
553}
554
555// Das eingegebene Kennzeichen fÃŒr "Anzeige" und "weitere Links" zerlegen,
556// auch wenn ÃŒber einen ein Self-Link mit gml_id aufgerufen.
557$kennztyp=ZerlegungGBKennz($gbkennz);
558
559// Wurde eine gml_id (internes Kennzeichen) aus einem Self-Link verwendet?
560// Dann hat DAS PrioritÀt, dann also *nicht* nach $gbkennz suchen.
561if ($buchunggml != "") { // gml der Buchungsstelle
562        $trans="Flurst&uuml;cke zur Buchungsstelle"; // Link
563        EinGrundstueck(true);
564
565} elseif($blattgml != "") { // gml des GB-Blattes
566        $trans="GB-Blatt mit Buchungen und Flst.";
567        EinBlatt(true);
568
569} elseif($ag != "") { // Key des Amtsgerichtes
570        $trans="GB-Bezirke zum Amtsgericht";
571        ListGBBez($ag);
572
573} else { // kein Self-Link sondern manuelle Eingabe im Formular
574        switch ($kennztyp) { // wurde oben bereits analysiert und zerlegt
575                case 0: // keine Eingabe
576                        $trans="Liste der Amtsgerichte";
577                        ListAG($ag_liste, false);
578                        break;
579                case 1: // Eingabe Bezirk-Name (-Teil) -> gefilterte Liste der Bezirke
580                        $trans="Bezirke suchen \"".$gbkennz."\"";
581                        $beznr=SuchGBBezName();
582                        if ($beznr > 0) {  // wenn der Suchbegriff eindeutig war, ..
583                                $zgbbez=$beznr;
584                                $trans="Bezirk gefunden, Bl&auml;tter dazu";
585                                EinBezirk(false); // .. dann gleich weiter
586                        };
587                        break;
588                case 2: // Eingabe Bezirk-Nummer -> Liste der BlÀtter im Bezirk
589                        $trans="Bl&auml;tter im GB-Bezirk";
590                        EinBezirk(true);
591                        break;
592                case 3: // Eingabe GB-Blatt -> Liste der Buchungen auf dem Blatt
593                        $trans="Buchungen auf GB-Blatt";
594                        $blattgml=gml_blatt(); // gml_id zum Blatt suchen
595                        if ($blattgml != "") { // gefunden             
596                                if (EinBlatt(true) == 1) { // wenn darauf genau eine Buchung ist
597                                        $trans="GB-Blatt und 1 Buchung"; // dann gleich tiefer rein
598                                        $buchunggml=gml_buchungsstelle(); // gml_id der Buchung
599                                        EinGrundstueck(false);
600                                }
601                        }
602                        break;
603                case 4: // Eingabe Buchung (GrundstÃŒck) -> Liste der FlurstÃŒcke
604                        $buchunggml=gml_buchungsstelle(); // gml_id zum Kennzeichen
605                        if ($buchunggml != "") {                // .. wurde geliefert
606                                $trans="Flurst&uuml;cke zur Buchungsstelle"; // Eingabe
607                                EinGrundstueck(true);   // mit Backlink
608                        } else{
609                                $trans="Suche Buchungsstelle";
610                        }
611                        break;
612                case 9: // Fehler
613                        $trans="fehlerhafte Eingabe";
614                        echo "\n<p class='err'>Bitte ein g&uuml;ltiges Grundbuchkennzeichen eingegeben, Format 'gggg-999999A-llll</p>";
615                        break;
616        }
617}
618
619// Nach Durchlaufen des PHP-Scriptes die zuletzt ausgefÃŒhrte Transaktion
620//  im Kopf des Ergebnisrahmens anzeigen.
621// Dazu die im HTML-Header definierte Javascript-Function benutzen.
622// Alternativ wird auch aus dem Javascript "positionieren Karte" dieser Titel gesetzt.
623echo "
624<script type='text/javascript'>
625        transtitle('".$trans."');
626</script>";
627
628?>
629
630</body>
631</html>
Note: See TracBrowser for help on using the repository browser.