source: trunk/info/info/alkisn/alkisfkt.php @ 422

Revision 422, 32.9 KB checked in by frank.jaeger, 3 years ago (diff)

Aktualisierungen der ALKIS-Buchauskunft, neues Modul für Bauwerke, Härtung

Line 
1<?php
2/*      Modul: alkisfkt.php
3
4        ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
5        F u n c t i o n s
6
7        Version:
8        2016-02-24 Version fuer norGIS-ALKIS-Import, "function linkgml" raus. Case-EntschlÃŒsselung raus.
9        ....
10        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF'] fÃŒr Einsatz hinter Gateway mit Änderung des Pfades (Docker/QWC2)
11        2020-12-09 Entschl. BodenschÀtzung korrigiert in function werteliste()
12        2020-12-15 Input-Validation und Strict Comparisation (===)
13        2020-12-16 Sonderfall QWC2 API-Gateway-Umleitung bei Selbstverlinkung
14*/
15
16function selbstverlinkung() {
17//      Aus der Server-Variable den Pfad entfernen.
18        global $pfadlos_selbstlink;
19        If ($pfadlos_selbstlink === 1) { // pfad-lose Selbstverlinkung hinter einer Umleitung. z.B. QWC2 API-Gateway
20                // Pfad entfernen
21                $mod=strrchr($_SERVER['PHP_SELF'], '/');
22                $mod=substr($mod, 1);
23        } else { // normaler Webserver, die Systemvariable ist korrekt
24                $mod=$_SERVER['PHP_SELF'];
25        }
26        return $mod;
27}
28
29function darf_ich() {
30//      Am Anfang jedes Moduls aufrufen um $customer zu fÃŒllen.       
31//      Nach EinfÃŒhrung eines automatisch einloggenden anonymen Mapbender-Gast-Benutzers muss dieser bei der Authentifizierung ausgeschlossen werden.
32        global $auth, $customer, $mb_guest_user, $debug;
33
34        if ($auth === "") {     // nicht prÃŒfen
35        //      if ($debug > 1) {echo "\n<p class='dbg'>keine Berechtigungs-PrÃŒfung</p>";}
36                $customer = "(unbekannt)";
37                return 1;       // alles erlaubt
38
39        } elseif ($auth === "mapbender") {
40
41        //      if ($debug > 1) {echo "\n<p class='dbg' Berechtigungs-Pr&uuml;fung Mapbender</p>";}
42                $customer = "";
43                include '/opt/gdi/mapbender/http/php/mb_validateSession.php';
44               
45                if (!isset($_SESSION)) { // keine (passende) Session
46                        if ($debug > 1) {echo "\n<p class='dbg'>Session nicht gesetzt</p>";}
47                } elseif ( !isset($_SESSION["mb_user_name"]) )  {
48                        if ($debug > 1) {echo "\n<p class='dbg'>username nicht gesetzt</p>";}
49                } else {
50                        $customer = $_SESSION["mb_user_name"]; // angemeldeter Benutzer
51                }
52                //if ($debug > 1) {echo "\n<p class='dbg'>Customer '".$customer."'</p>";}
53                if ($customer == "") {  // Wer bin ich?
54                        echo "<p class='stop2'>Aufruf nur aus Mapbender erlaubt.</p>";
55                        return 0;
56                } elseif ($customer == $mb_guest_user) { // in conf festgelegt
57                        echo "<p class='stop2'>Eine Anmeldung im Mapbender ist notwendig.</p>";
58                        return 0;       // gast-User darf nix
59                } else {
60                        return 1;       // echter User, ist erlaubt
61                }
62
63        } elseif ($auth === "qwc2") {
64
65                if ($debug > 1) {echo "\n<p class='dbg'>Berechtigungs-PrÃŒfung QWC2 -GEPLANT-</p>";}
66
67                // BAUSTELLE: Hier den Code einfÃŒgen um im QWC2 die Berechtigung zu prÃŒfen und den Benutzer auszulesen.
68                // Guggs du: https://git.sourcepole.ch/krz_dt/qwc2/-/issues/78
69
70                $customer = "(Unbekannt)";
71                echo "<p class='stop2'>Berechtigungspr&uuml;fung fÃŒr QWC2 ist noch nicht m&ouml;glich.</p>";
72                return 1;       // vorlÀufig erlaubt
73
74        } else {
75
76                echo "\n<p class='stop2'>Die Berechtigungs-PrÃŒfung ist falsch konfiguriert</p>";
77                return 0;       // verboten
78        }
79}
80
81function footer($gmlid, $link, $append) {
82        // Einen Seitenfuss ausgeben.
83        // Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
84        // Den URL-Parameter "&showkey=j/n" umschalten lassen.
85        // $append wird angehaengt wenn gefuellt. Anwendung: &eig=j bei FS-NW, &ltyp=m/p/o bei Lage
86        global $gkz, $showkey, $hilfeurl, $debug, $customer;
87
88        echo "<footer>";
89        // S c r e e n - F o o t
90        echo "\n<div class='confbereich noprint'>"
91        ."\n\t<table class='outer'>\n\t<tr>";
92
93        // Spalte 1: Info Benutzerkennung
94        if (isset($customer)) { // ÃŒber global von fkt. darf_ich()
95                echo "\n\t\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
96        } else {
97                echo "\n\t\t<td>&nbsp;</td>";
98        }
99
100        // Spalte 2: Umschalter
101        echo "\n\t\t<td title='Konfiguration'>";
102                $mylink ="\n\t\t\t<a class='keyswitch' href='".$link."gkz=".$gkz."&amp;gmlid=".$gmlid.$append;
103                if ($showkey) { // Umschalten SchlÃŒssel ein/aus
104                        echo $mylink."&amp;showkey=n' title='Verschl&uuml;sselungen ausblenden'>Schl&uuml;ssel aus</a>";
105                } else {
106                        echo $mylink."&amp;showkey=j' title='Verschl&uuml;sselungen anzeigen'>Schl&uuml;ssel ein</a>";
107                }
108                if ($debug > 0) { // FÃŒr Entwickler temporÀr eine Ansicht OHNE debug
109                        echo "<br>".$mylink."&amp;nodebug=j' title='Debug-Ausgaben tempor&auml;r abschalten'>Ansicht ohne Testausgaben</a>";
110                }
111        echo "\n\t\t</td>";
112
113        // Spalte 3
114        echo "\n\t\t<td title='Hilfe'>"
115                ."\n\t\t\t<p class='nwlink'>\n\t\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t\t</p>\n\t\t</td>"
116                ."\n\t</tr>\n\t</table>"
117        ."\n</div>\n";
118
119        // P r i n t - F o o t
120        if (isset($customer)) {
121                echo "\n<p class='onlyprint'><i>Benutzer:&nbsp;".$customer."</i></p>";
122        }
123
124        echo "</footer>";
125        return 0;
126}
127
128function ber_bs_zaehl($gmls) {
129        // Berechtigte Buchungs-Stellen zaehlen.
130
131        // Buchungstelle dienend <(Recht)an< Buchungstelle herrschend
132        $sql ="SELECT count(sh.gml_id) AS anz FROM ax_buchungsstelle sd JOIN ax_buchungsstelle sh ON sd.gml_id=ANY(sh.an) "
133        ."WHERE sd.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL;";
134        $v = array($gmls); // GML dienende Buchungs-Stelle
135        $resan = pg_prepare("", $sql);
136        $resan = pg_execute("", $v);
137        if (!$resan) {echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen zaehlen'.</p>";}
138        $rowan = pg_fetch_assoc($resan);
139        $anz=$rowan["anz"];
140        pg_free_result($resan);
141        return $anz; // Funktionswert = Anzahl der berechtigten Buchungen
142}
143
144function buchung_anzg($gmlbs, $eig, $jsfenster, $gml_fs, $trtyp) {
145        // In einem FS-Nachw. EINE Buchungsstelle anzeigen.
146        // Parameter:
147        //  $gmlbs: GML-ID der anzuzeigenden Buchungs-Stelle
148        //  $eig: EigentÃŒmer ausgeben j/n
149        //  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
150        //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
151        //      $trtyp: Tabellen-Zeilen-Typ. Werte: 1="mit GS-Link", 2="ohne GS-Link", 3="ohne GS-Link +Zeile einfÀrben"
152        global $gkz, $debug, $showkey, $bartgrp, $barttypgrp, $stufe;
153
154        $sqlbs="SELECT sh.gml_id AS hgml, sh.buchungsart, sh.laufendenummer as lfd, sh.zaehler, sh.nenner, sh.nummerimaufteilungsplan as nrpl, sh.beschreibungdessondereigentums as sond, " // Buchungs-Stelle herrschend
155        ."b.gml_id AS g_gml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart, z.bezeichnung, a.beschreibung AS bart, a.dokumentation AS barttitle, w.beschreibung AS blattartv "
156        ."FROM ax_buchungsstelle sh "
157        ."JOIN ax_buchungsblatt b ON b.gml_id=sh.istbestandteilvon "
158        ."LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk "
159        ."LEFT JOIN ax_buchungsart_buchungsstelle a ON sh.buchungsart = a.wert " // entschl. Buchungsart
160        ."LEFT JOIN ax_blattart_buchungsblatt w ON b.blattart = w.wert " // entschl. Blatt-Art
161        ."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL;";
162
163        $v = array($gmlbs); // ID dienende Buchungs-Stelle
164        $resbs = pg_prepare("", $sqlbs);
165        $resbs = pg_execute("", $v);
166        if (!$resbs) {
167                echo "\n<p class='err'>Fehler bei 'Buchungsstelle ausgeben'.</p>";
168                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlbs."'", $sqlbs), ENT_QUOTES, "UTF-8")."</p>";}
169        }
170        $gezeigt = 0; // Funktionswert default
171
172        if ($rowbs = pg_fetch_assoc($resbs)) { // ein Treffer
173                $blattkeyber=$rowbs["blattart"]; // Schluessel von Blatt-Art des GB
174                if ($blattkeyber != '5000' or $debug > 1) { // "Fiktives Blatt" nur bei Entwicklung anzeigen
175                        $gezeigt = 1; // Funktionswert nach Treffer
176                        $hgml=$rowbs["hgml"]; // GML-ID der (herrschenden) BuchungsStelle
177                        $bartkey=$rowbs["buchungsart"]; // Buchungsart SchlÃŒssel
178                        $bart=$rowbs["bart"]; // Buchungsart Text
179                        $beznam=$rowbs["bezeichnung"]; // Bezirk
180                        $blattartber=$rowbs["blattartv"]; // Wert von Blatt-Art des GB
181                        $nrpl=$rowbs["nrpl"]; // Nr im Auft.plan
182                        $sond=$rowbs["sond"]; // Beschr. d.Sondereigentums
183                        $gbgml=$rowbs["g_gml"]; // GML-ID des Grundbuch-Blattes
184                        $blatt=ltrim($rowbs["blatt"], "0");
185                        $lfd=ltrim($rowbs["lfd"], "0");
186                        if ($bartkey != $bartgrp) { // Wechsel der Buchungsart
187                                $barttitle=$rowbs["barttitle"]; // Buchungsart ErklÀrung
188                                switch (true) { // Die Buchungsart einem Typ (Gruppierung) zuweisen
189                                        case ($bartkey <= 1999): $barttyp = "E"; break; // Eigentum/GrundstÃŒck
190                                        case ($bartkey >= 2000): $barttyp = "R"; break; // GrundstÃŒcksgleiches Recht, z.B. 2101 "Erbbaurecht"
191                                        default: $barttyp = "E"; break;
192                                }
193                                if ($barttypgrp != $barttyp) { // Wenn der Typ wechselt, neue Überschrift in Tabelle
194                                        switch ($barttyp) { // Text der Überschrift
195                                                case "E":
196                                                        if ($eig === 'j') {$h3txt = "Buchung und Eigentum";}
197                                                        else {$h3txt = "Buchung";}
198                                                break;
199                                                case "R": $h3txt = "Grundst&uuml;cksgleiche Rechte"; break;
200                                        }
201                                        if ($barttypgrp === "" and $gml_fs != "") { // die erste Überschrift mit ID und Umschalter
202                                                echo "\n\t<tr>\n\t\t<td colspan='3'>\n\t\t\t<h3 id='gb'>".$h3txt."</h3>\n\t\t</td>"; // 1-3
203                                                echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>" // 4
204                                                        ."\n\t\t\t\t<a href='".selbstverlinkung()."?gkz=".$gkz."&amp;gmlid=".$gml_fs;
205                                                        if ($showkey) {echo "&amp;showkey=j";}
206                                                        if ($eig=="j") { // Umschalter: FS-Nachweis ruft sich selbst mit geaendertem Parameter auf. Positionierung auf Marke "#gb"
207                                                                echo "&amp;eig=n#gb' title='Umschalter: Flurst&uuml;cksnachweis'>ohne Eigent&uuml;mer</a>";
208                                                        } else {
209                                                                echo "&amp;eig=j#gb' title='Umschalter: Flurst&uuml;cks- und Eigent&uuml;mernachweis'>mit Eigent&uuml;mer "
210                                                                ."<img src='ico/EigentuemerGBzeile.png' width='16' height='16' alt=''></a>";
211                                                        }
212                                                echo "\n\t\t\t</p>\n\t\t</td>";
213                                        } else {
214                                                echo "\n\t<tr>\n\t\t<td colspan='3'>\n\t\t\t<h3>".$h3txt."</h3>\n\t\t</td>\n\t\t<td>&nbsp;</td>"; // 1-4
215                                        }
216                                        echo "\n\t</tr>";
217                                        $barttypgrp = $barttyp;
218                                }
219
220                                // +++ mehr Abstand oben zur Zeile in .css?
221                                echo "\n\t<tr>" // Buchungsart als Zwischenzeile
222                                        ."\n\t\t<td class='ll'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Buchungsart:</td>" // 1
223                                        ."\n\t\t<td colspan='2' title='".$barttitle."'>"; // 2-3
224                                                if ($showkey) {echo "<span class='key'>(".$bartkey.")</span> ";}
225                                                echo "<span class='wichtig'>".$bart."</span>"
226                                        ."</td>"
227                                        ."\n\t\t<td></td>" // 4
228                                ."\n\t</tr>";
229                                $bartgrp=$bartkey; // Gruppe merken
230                        } // Ende Wechsel der Buchungsart
231
232                        echo "\n\t<tr>" // Zeile mit 4 Spalten fÃŒr Buchung und EigentÃŒmer
233                                ."\n\t\t<td class='ll'><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Buchung:"; // 1
234                        if ($showkey and $debug > 2) {echo "<br><span class='key'>Stufe ".$stufe."<br>".$hgml."</span> ";}
235                        echo "</td>\n\t\t<td colspan='2'>"; // 2-3
236
237                                        // innere Tabelle: Rahmen mit GB-Kennz.
238                                        if ($blattkeyber == 1000) {
239                                                echo "\n\t\t\t<table class='kennzgb' title='Bestandskennzeichen'>";
240                                        } else {
241                                                echo "\n\t\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
242                                        }
243                                        echo "\n\t\t\t<tr>"
244                                                ."\n\t\t\t\t<td class='head'>Bezirk</td>"
245                                                ."\n\t\t\t\t<td class='head'>";
246                                                if ($showkey) {echo "<span class='key'>".$blattkeyber."</span> ";}
247                                                echo $blattartber."</td>"
248                                                ."\n\t\t\t\t<td class='head'>Lfd-Nr</td>"
249                                        ."\n\t\t\t</tr>";
250
251                                        if ($trtyp === 3) { // Treffer-Grundst. einfÀrben
252                                                echo "\n\t\t\t<tr class='paa'>";
253                                        } else {
254                                                echo "\n\t\t\t<tr>";
255                                        }
256                                        echo "\n\t\t\t\t<td title='Grundbuchbezirk'>";
257                                                if ($showkey) {echo "<span class='key'>".$rowbs["bezirk"]."</span><br>";}
258                                                echo $beznam."</td>"
259                                                ."\n\t\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
260                                                ."\n\t\t\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$lfd."</td>"
261                                        ."\n\t\t\t</tr>"
262                                        ."\n\t\t\t</table>";
263
264                                        if ($rowbs["zaehler"] != "") {
265                                                echo "\n\t\t\t<p class='ant'>".$rowbs["zaehler"]."/".$rowbs["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
266                                        }
267                                        if ($nrpl != "") {
268                                                echo "\n\t\t\t<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$nrpl."</span> im Aufteilungsplan.</p>";
269                                        }
270                                        if ($sond != "") {
271                                                echo "\n\t\t\t<p class='sond' title='Sondereigentum'>Verbunden mit dem Sondereigentum: ".$sond."</p>";
272                                        }
273                                echo "\n\t\t</td>"; // 2-3
274
275                                echo "\n\t\t<td>"; // 4
276                                        echo "\n\t\t\t<p class='nwlink noprint'>";
277                                        // Bestand
278                                                if ($showkey) {echo "<span class='key'>".$blattkeyber."</span> ";}
279                                                $url="alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml;
280                                                if ($showkey) {$url.="&amp;showkey=j";}
281                                                if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";} // Sonderfall "Inlay" aus Feature-Info
282                                                echo "\n\t\t\t\t<a href='".$url."' title='Grundbuchnachweis'>".$blattartber
283                                                        ." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
284                                                ."</a>";
285                                        // Buchung
286                                                if ($trtyp === 1) {
287                                                        echo "<br>";
288                                                        if ($showkey) {echo "<span class='key'>".$bartkey."</span> ";}
289                                                        $url="alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$hgml;
290                                                        if ($showkey) {$url.="&amp;showkey=j";}
291                                                        if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";}
292                                                        echo "\n\t\t\t\t<a href='".$url."' title='GrundstÃŒcksnachweis: ".$bart."'>Buchung"
293                                                                ." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
294                                                        ."</a>";
295                                                }
296                                        echo "\n\t\t\t</p>"
297                                ."\n\t\t</td>" // 4
298                        ."\n\t</tr>";
299                        if ($eig === "j") {
300                                if ($jsfenster) {$lnkclass = "imFenster";} else {$lnkclass = "";}
301                                $n = eigentuemer($gbgml, true, $lnkclass); // mit Adresse
302                        }
303                }
304        }
305        pg_free_result($resbs);
306       
307        //if ($debug > 1) {echo "\n<p class='dbg'>Ende function buchung_anzg(), Return = ". $gezeigt ."</p>";}
308       
309        return $gezeigt; // 1 wenn eine Buchung ausgegeben wurde
310}
311
312function ber_bs_anzg($gmls, $eig, $jsfenster, $gml_fs, $gsanfrd) {
313        // In einem FS-Nachw. die berechtigten (herrschenden) Buchungsstellen anzeigen z.B. "Wohnungs-/Teileigentum".
314        // Parameter:
315        //  $gmls: GML-ID der dienenden Buchungs-Stelle. Im ersten Durchlauf also, die BS auf der das FS gebucht ist.
316        //  $eig: EigentÃŒmer ausgeben j/n
317        //  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
318        //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
319        //      $gsanfrd: In einem GS-Nachw. die GML-ID der in de URL angeforderten Buchungsstelle (-> Hervorhebung)
320        global $debug, $gezeigt;
321
322        // sh=Buchungstelle herrschend >(Recht)an> sd=Buchungstelle dienend >istBestandteilVon> BLATT -> Bezirk
323        $sql="SELECT sh.gml_id AS hgml, sh.buchungsart, sh.laufendenummer as lfd, sh.zaehler, sh.nenner, sh.nummerimaufteilungsplan as nrpl, sh.beschreibungdessondereigentums as sond, "
324        ."b.gml_id AS g_gml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung as blatt, b.blattart "
325        ."FROM ax_buchungsstelle sh JOIN ax_buchungsblatt b ON b.gml_id=sh.istbestandteilvon "
326        ."WHERE $1 = ANY(sh.an) AND sh.endet IS NULL AND b.endet IS NULL "
327        ."ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;";
328
329        $v = array($gmls); // ID dienende BuchungsStelle
330        $resber = pg_prepare("", $sql);
331        $resber = pg_execute("", $v);
332        if (!$resber) {
333                echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>";
334                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmls."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
335        }
336        $an=0;
337        $verfolg=array(); // Ein (zunÀchst leeres) Array fÃŒr weitere GML-IDs anlegen
338        while($rowan = pg_fetch_assoc($resber)) { // Loop durch Result von berechtigte BS
339                $hgml=$rowan["hgml"]; // GML-ID der berechtigten Buchungs-Stelle
340
341                if ($hgml === $gsanfrd) {
342                        $trtyp=3; // einfÀrben, o. Lnk.
343                } else {
344                        if ($gezeigt) {
345                                $trtyp=2; // ohne Link auf GS
346                        } else { // Wenn Stufe 1 "Fiktives Blatt" war, welches ausgeblendet wurde, dann auf Stufe 2 einen GS-Link ausgeben
347                                $trtyp=1; // mit Link auf GS
348                        }
349                }
350                $gezeigt2=buchung_anzg($hgml, $eig, $jsfenster, $gml_fs, $trtyp); // Die herrschende Buchung anzeigen wenn nicht fiktiv
351                $an++;
352                $weitere=ber_bs_zaehl($hgml);
353                if ($weitere > 0) { // gibt es WEITERE berechtigte Buchungen dazu?
354                        $verfolg[] = $hgml; // neuen Wert fÃŒr weitere Verfolgung in Array anfÃŒgen
355                }
356        }
357        pg_free_result($resber);
358        return $verfolg; // weitere zu verfolgende GML-ID zurÃŒck geben
359}
360
361function kurz_namnr($lang) {
362        // Namensnummer kÃŒrzen. Nicht benötigte Stufen der Dezimalklassifikation abschneiden
363        $kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende)
364        $kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang)
365        $kurz=ltrim($kurz, "0"); // fuehr. Nullen
366        $kurz=str_replace(".0",".",$kurz); // fuehr. Null jeder Stufe
367        $kurz=rtrim($kurz); // Leerzeichen hinten
368        // echo "/n<p class='dbg'> lang='".$lang."'</p>/n<p class='dbg'> kurz='".$kurz."'</p>";
369        return $kurz;
370}
371
372function bnw_fsdaten($lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
373/*      Bestandsnachweis - Flurstuecksdaten
374        Die Tabellenzeilen mit den Flurstuecksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben.
375        Die Funktion wird je einmal aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall).
376        Weiterere Aufrufe ggf. bei Erbbaurecht fÃŒr die mit "an" verknuepften Buchungsstellen.
377        Tabellenkopf wird im aufrufenden Programm ausgegeben. */
378        global $debug, $gkz, $showkey, $filtkreis, $filtgem, $trclass;
379
380        // F L U R S T U E C K
381        $sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche "
382        ."FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer "
383        ."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 ";
384        if ($filtgem === '') { // ungefiltert
385                $v=array($gml_bs);
386        } else {
387                $sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // ZustÀndiges Gebiet
388                $v=array($gml_bs, $filtkreis, $filtgem);
389        }
390        $sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
391        $resf = pg_prepare("", $sql);
392        $resf = pg_execute("", $v);
393        if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
394
395        if($bvnraus) { // nur bei direkten Buchungen die lfdNr ausgeben
396                $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
397        } else {
398                $bvnr="";
399        }
400        $altbvnr=""; // ++ besser mit "$j === 0" steuern?
401        $j=0;
402        while($rowf = pg_fetch_assoc($resf)) {
403                $flur= $rowf["flurnummer"];
404                $fskenn=$rowf["zaehler"];
405                if ($rowf["nenner"] != "") { // Bruch
406                        $fskenn.="/".$rowf["nenner"];
407                }
408                $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m&#178;";
409
410                echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
411                        // Sp. 1-3 der Tab. aus Buchungsstelle, nicht aus FS
412                        if($bvnr === $altbvnr) { // gleiches Grundstueck, leer lassen
413                                echo "\n\t<td>&nbsp;</td>"
414                                ."\n\t<td>&nbsp;</td>"
415                                ."\n\t<td>&nbsp;</td>";
416                        } else { // Sprungmarke, BVNR
417                                echo "\n\t<td id='bvnr".$bvnr."'>"; // Sprungmarke
418                                //      echo "\n\t\t<a id='bvnr".$bvnr."'></a>";
419                                        echo "<span class='wichtig'>".$bvnr."</span>"
420                                ."\n\t</td>";
421
422                                echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart
423                                        if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";} // Schluessel
424                                        echo $ba; // entschluesselt
425                                echo "</td>"
426                                ."\n\t<td>&nbsp;</td>"; // Anteil
427                        }
428
429                        // Sp. 4-7 aus Flurstueck
430                        echo "\n\t<td>";
431                        if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
432                        echo $rowf["bezeichnung"]."</td>"
433                        ."\n\t<td>".$flur."</td>"
434                        ."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span>"
435                        ."</td>"
436                        ."\n\t<td class='flag'>".$flae."</td>"; // "width" hier (flaG) erweiterbar, weil in andere Zeile die Buchungsart steht
437                        echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
438                //      if($bvnr != $altbvnr) {
439                        if($j === 0) {
440                                echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bs;
441                                        if ($showkey) {echo "&amp;showkey=j";}
442                                        echo "' title='Grundst&uuml;cksnachweis'>Buchung "
443                                        ."<img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
444                                ."</a>";
445
446                        }
447                                echo "\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
448                                        if ($showkey)   {echo "&amp;showkey=j";}
449                                        echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
450                                        ."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
451                                ."</a>"
452                        ."\n\t\t</p>\n\t</td>"
453                ."\n</tr>";
454                $altbvnr=$bvnr;
455                $j++;
456        }
457        pg_free_result($resf);
458        return $j;
459}
460
461function eigentuemer($gmlid, $mitadresse, $lnkclass) {
462        // Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben
463        //  Sp.1="EigentÃŒmer" Sp.2=NamNr, Sp.3=Name/Adresse, Sp.4=Link
464        // Parameter:
465        //      $gmlid = ID GB-Blattes
466        //      $mitadresse = Option (true/false) ob die Adresszeile ausgegeben werden soll
467        // Return = Anzahl Namensnummern
468
469        // Schleife 1: N a m e n s n u m m e r
470        // Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt
471        global $debug, $gkz, $showkey;
472
473        if ($lnkclass == "") {
474                $lnkvor = "";
475                $lnknach = "";
476        } else { // Link ÃŒber Java-Class "imFenster" aus alkisinlayausk.php
477                $lnkvor  = "javascript:".$lnkclass."(\"";
478                $lnknach = "\")";
479        }
480
481        $sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass, n.benennt, wn.beschreibung AS adrv, we.beschreibung AS eiartv "
482        ."FROM ax_namensnummer n "
483        ."LEFT JOIN ax_artderrechtsgemeinschaft_namensnummer wn ON n.artderrechtsgemeinschaft = wn.wert "
484        ."LEFT JOIN ax_eigentuemerart_namensnummer we ON n.eigentuemerart = we.wert "
485        ."WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
486        // +++  LEFT JOIN bis ax_Person statt Person als Schleife zu holen,
487        //              VerknÃŒpfungsfeld "benennt" ist leer bei "Beschrieb der Rechtsgemeinschaft".
488
489        $v = array($gmlid); // GB-Blatt
490        $resn = pg_prepare("", $sqln);
491        $resn = pg_execute("", $v);
492
493        if (!$resn) {
494                echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>"; // kein Fehler bei Blattarten > 1000
495                //if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".str_replace("$1", "'".$gmlid."'", $sqln )."</p>";}
496        }
497
498        $n=0; // Z.NamNum.
499        while($rown = pg_fetch_assoc($resn)) {
500                $gmlnn=$rown["gml_id"];
501                $namnum=kurz_namnr($rown["lfd"]);
502                $rechtsg=$rown["adr"];
503                echo "\n\t<tr>";
504                        if($n === 0) { // erste EigentÃŒmer-Zeile zu einer Buchung
505                                echo "\n\t\t<td class='ll'><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Eigent&uuml;mer:</td>"; // 1
506                        } else { // Folgezeile
507                                echo "\n\t\t<td class='ll'>&nbsp;</td>"; // 1
508                        }
509
510                        if ($rechtsg != "" ) { // Erbengemeinschaft usw.
511                                echo "\n\t\t<td colspan='2'>"; // 2-3
512                                if ($rechtsg == 9999) { // sonstiges
513                                        echo "\n\t\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
514                                } else {
515                                        echo "\n\t\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
516                                }
517                        } else { // Namensnummer
518                                echo "\n\t\t<td class='nanu' title='Namens-Nummer'>\n\t\t\t<p>".$namnum."&nbsp;</p>\n\t\t</td>" // 2
519                                . "\n\t\t<td>"; // 3
520
521                        }
522                        //if ($rown["anlass"] > 0 ) {echo "<p>Anlass=".$rown["anlass"]."</p>";}
523
524                        // Andere Namensnummern?  Relation:  ax_namensnummer >bestehtAusRechtsverhaeltnissenZu>  ax_namensnummer
525                        // Die Relation 'Namensnummer' besteht aus RechtsverhÀltnissen zu 'Namensnummer' sagt aus, dass mehrere Namensnummern zu einer Rechtsgemeinschaft gehören können.
526                        // Die Rechtsgemeinschaft selbst steht unter einer eigenen AX_Namensnummer, die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt.
527
528                // Schleife 2: P e r s o n
529                // +++ bei SQL Namensnummer oben gleich mit JOIN dazu holen, statt dieser Schleife
530                // Beziehung: ax_person  <benennt<  ax_namensnummer
531                $sqlp="SELECT nachnameoderfirma, vorname, geburtsname, to_char(cast(geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, namensbestandteil, akademischergrad "
532                ."FROM ax_person WHERE gml_id= $1 AND endet IS NULL;";
533                $gmlpers=$rown["benennt"]; // leer bei RechtsverhÀltnis
534                $v = array($gmlpers); // gml_id von ax_person
535                $resp = pg_prepare("", $sqlp);
536                $resp = pg_execute("", $v);
537                if (!$resp) {
538                        echo "\n\t<p class='err'>Fehler bei Person</p>";
539                        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1", "'".$gmlpers."'", $sqlp)."</p>";}
540                }
541
542                $i=0; // cnt Person
543                while($rowp = pg_fetch_assoc($resp)) { // Schleife weglassen: "benennt" ist KEIN Array!
544                        $diePerson=""; //++ Anrede?
545                        if ($rowp["akademischergrad"] != "") {$diePerson=$rowp["akademischergrad"]." ";}
546                        $diePerson.=$rowp["nachnameoderfirma"];
547                        if ($rowp["vorname"] != "") {$diePerson.=", ".$rowp["vorname"];}
548                        if ($rowp["namensbestandteil"] != "") {$diePerson.=". ".$rowp["namensbestandteil"];}
549                        if ($rowp["geburtsdatum"] != "") {$diePerson.=", geb. ".$rowp["geburtsdatum"];}
550                        if ($rowp["geburtsname"] != "") {$diePerson.=", geb. ".$rowp["geburtsname"];}
551                        $diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute
552                        $eiartkey=$rown["eigentuemerart"]; // Key
553                        $eiart=$rown["eiartv"]; // Value
554
555                        echo "\n\t\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t\t</td>"; // 3 - Person in Sp.3 hinter NamNum (Sp.2)
556                        echo "\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>"; // 4
557                                if ($showkey AND $eiartkey != '') {echo "<span class='key' title='Eigent&uuml;merart'>".$eiartkey."</span> ";}
558                                echo "\n\t\t\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$gmlpers;
559                                if ($showkey) {echo "&amp;showkey=j";}
560                                if ($eiartkey === "") {$eiart="Eigent&uuml;mer" ;} // Default. Ersatz-Text, wenn nicht gefÃŒllt
561                                echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart
562                                ." <img src='ico/Eigentuemer.png' width='16' height='16' alt=''></a>\n\t\t\t</p>"
563                        ."\n\t\t</td>" // 4
564                        ."\n\t</tr>";
565
566                        if ($mitadresse) {
567                                // Schleife 3: optional  A d r e s s e  zur Person
568                                $sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
569                                ."FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 AND a.endet IS NULL AND p.endet IS NULL ORDER BY a.beginnt DESC LIMIT 2;";
570                                $v = array($gmlpers);
571                                $resa = pg_prepare("", $sqla);
572                                $resa = pg_execute("", $v);
573                                if (!$resa) {
574                                        echo "\n\t<p class='err'>Fehler bei Adressen</p>";
575                                        if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1", "'".$gmlpers."'", $sqla)."</p>";}
576                                }
577                                $j=0;
578                                while($rowa = pg_fetch_assoc($resa)) {
579                                        $j++;
580                                        if ($j === 1) { // erste ("jÃŒngste") Adresse anzeigen
581                                                $gmla=$rowa["gml_id"];
582                                                $plz=$rowa["plz"]; // integer
583                                                if($plz === 0) {
584                                                        $plz="";
585                                                } else {
586                                                        $plz=str_pad($plz, 5, "0", STR_PAD_LEFT);
587                                                }
588                                                $ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
589                                                $str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
590                                                $hsnr=$rowa["hausnummer"];
591                                                $land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
592
593                                                echo "\n\t<tr>"
594                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
595                                                        ."\n\t\t<td>&nbsp;</td>" // 2
596                                                        ."\n\t\t<td><p class='gadr'>"; // 3
597                                                        if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
598                                                        if ($plz.$ort != "") {echo $plz." ".$ort;}
599                                                        if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
600                                                echo "</p></td>" // 3
601                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
602                                        } else { // manchmal doppelte Angaben
603                                                echo "\n\t<tr>"
604                                                        ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
605                                                        ."\n\t\t<td>&nbsp;</td>" // 2
606                                                        ."\n\t\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>" // 3
607                                                        ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
608                                        }
609                                } // Ende Loop Adresse zur Person
610                                pg_free_result($resa);
611                        }
612                        // 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG"
613                        $i++; // cnt Person
614
615                        $zaehler=$rown["zaehler"];
616                        if ($zaehler != "") { // Anteil als eigene Tab-Zeile
617                                $zaehler=str_replace(".", ",", $zaehler); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
618                                $nenner=str_replace(".", ",", $rown["nenner"]);
619                                $comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
620                                echo "\n\t<tr>"
621                                ."\n\t\t<td class='ll'>&nbsp;</td>" // 1
622                                ."\n\t\t<td>&nbsp;</td>" // 2
623                                ."\n\t\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>" // 3
624                                ."\n\t\t<td>&nbsp;</td>\n\t</tr>"; // 4
625                        }
626                } // End Loop Person
627                pg_free_result($resp);
628
629                if ($i === 0) { // KEINE Person. benennt ist leer. Das kommt vor hinter der Zeile "Erbengemeinschaft" und ist dann KEIN Fehler
630                        if ($rechtsg === 9999) {
631                                if ($debug > 1) {echo "\n\t\t\t<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";}
632                        } else {
633                                echo "\n<p class='err'>(Die Person mit der ID '".$gmlpers."' fehlt im Datenbestand)</p>";
634                        }
635                        echo "</td>\n\t\t<td>&nbsp;</td>\n\t</tr>";
636                }
637                $n++; // cnt NamNum
638        } // End Loop NamNum
639
640        pg_free_result($resn);
641        return $n;
642}
643
644function werteliste ($bez ,$sqlin) {
645        // Eine oder mehrere EntschlÃŒsselungen in eine Zeile ausgeben.
646        // Dient dazu, SchlÃŒssel-ARRAYs auflösen ohne die Zeile im JOIN mehrfach aufzulisten
647        // Anwendung: FS-Nachweis BodenschÀtzung
648        global $debug;
649
650        if ($bez === 'e') {$tabelle = 'ax_entstehungsartoderklimastufewasserverhaeltnisse_bodensc';}
651        elseif ($bez === 's') {$tabelle = 'ax_sonstigeangaben_bodenschaetzung';}
652
653        $sql="SELECT wert, beschreibung FROM ".$tabelle." WHERE wert IN (".$sqlin.") ORDER BY wert LIMIT $1 ;";
654        $v = array('9');
655        $res = pg_prepare("", $sql);
656        $res = pg_execute("", $v);
657        if (!$res) {
658                echo "\n<p class='err'>Fehler bei Werteliste.</p>";
659                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
660                return;
661        }
662        $i=0;
663        while($row = pg_fetch_assoc($res)) {
664                echo " ".$row["beschreibung"];
665                $i++;   
666        }
667        pg_free_result($res);
668        if ($i === 0) {
669                echo "(kein Treffer)";
670                if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
671        }
672        return;
673}
674
675function fortfuehrungen($entsteh, $dbzeart, $dbzename) {
676// Tabelle im Kopf von FlurstÃŒck und FS-Historie. 2 Z./Sp. Entstehung/FortfÃŒhrung
677// Parameter: Die DB-Spalten "zeitpunktderentstehung", "zeigtaufexternes_art" und "zeigtaufexternes_name"
678        global $debug, $showkey;
679
680//      if ($debug > 2) {echo "<p class='dbg'>function fortfuehrungen<br>1: ".$dbzeart."<br>2: ".$dbzename."</p>";}
681 
682        echo "\n\t<table class='fsd'>" // FS-Daten 2 Spalten
683                ."\n\t\t<tr>\n\t\t\t<td>Entstehung</td>"
684                ."\n\t\t\t<td title='Zeitpunkt der Enstehung'>".$entsteh."</td>\n\t\t</tr>";
685        echo "\n\t<tr>"
686                ."\n\t\t\t<td>";
687        $arrart=explode(",", trim($dbzeart, "{}"));
688        foreach($arrart AS $artval) { // Zeile fÃŒr jedes Element
689                $artval=trim($artval, '"');
690// ibR: {"Entstehung des FlurstÃŒcks/5200","Letzte FortfÃŒhrung des FlurstÃŒcks/5300",urn:adv:fachdatenverbindung:AA_Antrag}
691// AED: {http://geoportal.kreis-herford.de/alkis/alkis.html#5200,http://geoportal.kreis-herford.de/alkis/alkis.html#5300,urn:adv:fachdatenverbindung:AA_Antrag}
692
693                $artpos=strpos($artval, '#');
694                if ($artpos > 0) { // AED
695                        $artkey=substr($artval, $artpos + 1);
696                        switch ($artkey) { // keine SchlÃŒsseltabelle?
697                                case '5100': $arttxt="Grundst&uuml;ckshinweis (aus ALB-Historie)"; break;
698                                case '5200': $arttxt="Entstehung des Flurst&uuml;cks"; break;
699                                case '5300': $arttxt="Letzte Fortf&uuml;hrung des Flurst&uuml;cks"; break;
700                                default: $arttxt=$artval;
701                        }
702                        if ($showkey) {echo "<span class='key'><a target='_blank' href='".$artval."'>".$artkey."</a></span> ";}
703                        echo $arttxt."<br>";
704                } else {
705                        $artpos=strpos($artval, '/');
706                        if ($artpos > 0) { // ibR
707                                $artkey=substr($artval, $artpos + 1);
708                                $arttxt=substr($artval, 0, $artpos);
709                                if ($showkey) {echo "<span class='key'>".$artkey."</span> ";}
710                                echo $arttxt."<br>";
711                        }
712                }
713        }
714        echo "</td>"
715        ."\n\t\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
716        $arrname=explode(",", trim($dbzename, "{}"));
717        foreach($arrname AS $val) {
718                echo trim($val, '"')."<br>";
719        }
720        echo "</td>"
721        ."\n\t\t</tr>"
722        ."\n\t</table>";
723}
724
725function fskenn_dbformat ($fskennz) {
726        // Erzeugt, wenn notwendig, aus dem Bindetrich-getrennten FlurstÃŒckskennzeichen "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz"
727        // das ALKIS-DB-interne Format des FlurstÃŒckskennzeichens.
728        global $defland;
729        $arr=explode("-", $fskennz, 4); // zerlegen
730        $zgemkg=trim($arr[0]);
731        if (strlen($zgemkg) === 20 and !isset($arr[1])) {
732                $fskzdb=$zgemkg; // ist schon Datenbank-Feldformat
733        } else { // Das Kennzeichen auseinander nehmen.
734                if (strlen($zgemkg) === 6) {
735                        $land=substr($zgemkg, 0, 2);
736                        $zgemkg=substr($zgemkg, 2, 4);
737                } else { // kein schöner Land ..
738                        $land=$defland; // Default-Land aus config
739                }
740                $zflur=str_pad($arr[1], 3 , "0", STR_PAD_LEFT); // Flur-Nr
741                $zfsnr=trim($arr[2]); // FlurstÃŒcke-Nr
742                $zn=explode("/", $zfsnr, 2); // Bruch?
743                $zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);
744                if (isset($zn[1])) {
745                        $znenner=trim($zn[1]);
746                } else {
747                        $znenner="";
748                }
749                if (trim($znenner, " 0.") === "") { // kein Bruch oder nur Nullen
750                        $znenner="____"; // in DB-Spalte mit Tiefstrich aufgefÃŒllt
751                } else {
752                        $zn=explode(".", $znenner, 2); // .00 wegwerfen
753                        $znenner=str_pad($zn[0], 4 , "0", STR_PAD_LEFT);
754                }
755                // die Teile stellengerecht wieder zusammen setzen             
756                $fskzdb=$land.$zgemkg.$zflur.$zzaehler.$znenner.'__'; // FS-Kennz. Format Datenbank
757        }
758        return $fskzdb;
759}
760
761?>
Note: See TracBrowser for help on using the repository browser.