]> git.openstreetmap.org Git - nominatim.git/blob - lib-php/template/search-xml.php
Merge branch 'osm-search:master' into check-database-on-frozen-database
[nominatim.git] / lib-php / template / search-xml.php
1 <?php
2 /**
3  * SPDX-License-Identifier: GPL-2.0-only
4  *
5  * This file is part of Nominatim. (https://nominatim.org)
6  *
7  * Copyright (C) 2022 by the Nominatim developer community.
8  * For a full list of authors see the git log.
9  */
10 header('content-type: text/xml; charset=UTF-8');
11
12 echo '<';
13 echo '?xml version="1.0" encoding="UTF-8" ?';
14 echo ">\n";
15
16 echo '<';
17 echo (isset($sXmlRootTag)?$sXmlRootTag:'searchresults');
18 echo " timestamp='".date(DATE_RFC822)."'";
19 echo " attribution='Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright'";
20 echo " querystring='".htmlspecialchars($sQuery, ENT_QUOTES)."'";
21 if (isset($aMoreParams['viewbox'])) {
22     echo " viewbox='".htmlspecialchars($aMoreParams['viewbox'], ENT_QUOTES)."'";
23 }
24 if (isset($aMoreParams['exclude_place_ids'])) {
25     echo " exclude_place_ids='".htmlspecialchars($aMoreParams['exclude_place_ids'])."'";
26 }
27 echo " more_url='".htmlspecialchars($sMoreURL)."'";
28 echo ">\n";
29
30 foreach ($aSearchResults as $iResNum => $aResult) {
31     echo "<place place_id='".$aResult['place_id']."'";
32     $sOSMType = formatOSMType($aResult['osm_type']);
33     if ($sOSMType) {
34         echo " osm_type='$sOSMType'";
35         echo " osm_id='".$aResult['osm_id']."'";
36     }
37     echo " place_rank='".$aResult['rank_search']."'";
38     echo " address_rank='".$aResult['rank_address']."'";
39
40     if (isset($aResult['aBoundingBox'])) {
41         echo ' boundingbox="';
42         echo join(',', $aResult['aBoundingBox']);
43         echo '"';
44     }
45
46     if (isset($aResult['asgeojson'])) {
47         echo ' geojson=\'';
48         echo $aResult['asgeojson'];
49         echo '\'';
50     }
51
52     if (isset($aResult['assvg'])) {
53         echo ' geosvg=\'';
54         echo $aResult['assvg'];
55         echo '\'';
56     }
57
58     if (isset($aResult['astext'])) {
59         echo ' geotext=\'';
60         echo $aResult['astext'];
61         echo '\'';
62     }
63
64     if (isset($aResult['zoom'])) {
65         echo " zoom='".$aResult['zoom']."'";
66     }
67
68     echo " lat='".$aResult['lat']."'";
69     echo " lon='".$aResult['lon']."'";
70     echo " display_name='".htmlspecialchars($aResult['name'], ENT_QUOTES)."'";
71
72     echo " class='".htmlspecialchars($aResult['class'])."'";
73     echo " type='".htmlspecialchars($aResult['type'], ENT_QUOTES)."'";
74     echo " importance='".htmlspecialchars($aResult['importance'])."'";
75     if (isset($aResult['icon']) && $aResult['icon']) {
76         echo " icon='".htmlspecialchars($aResult['icon'], ENT_QUOTES)."'";
77     }
78
79     $bHasDelim = false;
80
81     if (isset($aResult['askml'])) {
82         if (!$bHasDelim) {
83             $bHasDelim = true;
84             echo '>';
85         }
86         echo "\n<geokml>";
87         echo $aResult['askml'];
88         echo '</geokml>';
89     }
90
91     if (isset($aResult['sExtraTags'])) {
92         if (!$bHasDelim) {
93             $bHasDelim = true;
94             echo '>';
95         }
96         echo "\n<extratags>";
97         foreach ($aResult['sExtraTags'] as $sKey => $sValue) {
98             echo '<tag key="'.htmlspecialchars($sKey).'" value="'.htmlspecialchars($sValue).'"/>';
99         }
100         echo '</extratags>';
101     }
102
103     if (isset($aResult['sNameDetails'])) {
104         if (!$bHasDelim) {
105             $bHasDelim = true;
106             echo '>';
107         }
108         echo "\n<namedetails>";
109         foreach ($aResult['sNameDetails'] as $sKey => $sValue) {
110             echo '<name desc="'.htmlspecialchars($sKey).'">';
111             echo htmlspecialchars($sValue);
112             echo '</name>';
113         }
114         echo '</namedetails>';
115     }
116
117     if (isset($aResult['address'])) {
118         if (!$bHasDelim) {
119             $bHasDelim = true;
120             echo '>';
121         }
122         echo "\n";
123         foreach ($aResult['address']->getAddressNames() as $sKey => $sValue) {
124             $sKey = str_replace(' ', '_', $sKey);
125             echo "<$sKey>";
126             echo htmlspecialchars($sValue);
127             echo "</$sKey>";
128         }
129     }
130
131     if ($bHasDelim) {
132         echo '</place>';
133     } else {
134         echo '/>';
135     }
136 }
137
138 echo '</' . (isset($sXmlRootTag)?$sXmlRootTag:'searchresults') . '>';