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

Revision 413, 23.3 KB checked in by frank.jaeger, 5 years ago (diff)

Umstellung Suche (nav) auf Full-Schema, Nachkorrektur Auskunft.

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