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

Revision 399, 22.5 KB checked in by frank.jaeger, 6 years ago (diff)

ALKIS-Navigation für Mapbender 2: Input Validation für alle Parameter. Kleine Korrekturen.

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