1 | <?php |
---|
2 | /*********************************************** |
---|
3 | * File : osmmap.php |
---|
4 | * Project : piwigo-openstreetmap |
---|
5 | * Descr : Display a world map |
---|
6 | * |
---|
7 | * Created : 28.05.2013 |
---|
8 | * |
---|
9 | * Copyright 2013 <xbgmsharp@gmail.com> |
---|
10 | * |
---|
11 | * This program is free software: you can redistribute it and/or modify |
---|
12 | * it under the terms of the GNU General Public License as published by |
---|
13 | * the Free Software Foundation, either version 3 of the License, or |
---|
14 | * (at your option) any later version. |
---|
15 | * |
---|
16 | * This program is distributed in the hope that it will be useful, |
---|
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
19 | * GNU General Public License for more details. |
---|
20 | * |
---|
21 | * You should have received a copy of the GNU General Public License |
---|
22 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
---|
23 | * |
---|
24 | ************************************************/ |
---|
25 | |
---|
26 | if ( !defined('PHPWG_ROOT_PATH') ) |
---|
27 | define('PHPWG_ROOT_PATH','../../'); |
---|
28 | |
---|
29 | include_once( PHPWG_ROOT_PATH.'include/common.inc.php' ); |
---|
30 | include_once( dirname(__FILE__) .'/include/functions.php'); |
---|
31 | include_once( dirname(__FILE__) .'/include/functions_map.php'); |
---|
32 | |
---|
33 | $osm_dir = "piwigo-openstreetmap"; |
---|
34 | |
---|
35 | check_status(ACCESS_GUEST); |
---|
36 | //if (!isset($osm_dir)) |
---|
37 | // access_denied( 'Plugin not installed' ); |
---|
38 | |
---|
39 | osm_load_language(); |
---|
40 | load_language('plugin.lang', OSM_PATH); |
---|
41 | |
---|
42 | $section = ''; |
---|
43 | if ( $conf['question_mark_in_urls']==false and isset($_SERVER["PATH_INFO"]) and !empty($_SERVER["PATH_INFO"]) ) |
---|
44 | { |
---|
45 | $section = $_SERVER["PATH_INFO"]; |
---|
46 | $section = str_replace('//', '/', $section); |
---|
47 | $path_count = count( explode('/', $section) ); |
---|
48 | $page['root_path'] = PHPWG_ROOT_PATH.str_repeat('../', $path_count-1); |
---|
49 | if ( strncmp($page['root_path'], './', 2) == 0 ) |
---|
50 | { |
---|
51 | $page['root_path'] = substr($page['root_path'], 2); |
---|
52 | } |
---|
53 | } |
---|
54 | else |
---|
55 | { |
---|
56 | foreach ($_GET as $key=>$value) |
---|
57 | { |
---|
58 | if (!strlen($value)) $section=$key; |
---|
59 | break; |
---|
60 | } |
---|
61 | } |
---|
62 | |
---|
63 | // deleting first "/" if displayed |
---|
64 | $tokens = explode('/', preg_replace('#^/#', '', $section)); |
---|
65 | $next_token = 0; |
---|
66 | $result = osm_parse_map_data_url($tokens, $next_token); |
---|
67 | $page = array_merge( $page, $result ); |
---|
68 | |
---|
69 | if (isset($page['category'])) |
---|
70 | check_restrictions($page['category']['id']); |
---|
71 | |
---|
72 | // Fetch data with lat and lon |
---|
73 | |
---|
74 | $forbidden = get_sql_condition_FandF( |
---|
75 | array |
---|
76 | ( |
---|
77 | 'forbidden_categories' => 'category_id', |
---|
78 | 'visible_categories' => 'category_id', |
---|
79 | 'visible_images' => 'id' |
---|
80 | ), |
---|
81 | "\n AND" |
---|
82 | ); |
---|
83 | |
---|
84 | //$query="SELECT `lat`, `lon`, `name`, `path` FROM ".IMAGES_TABLE." WHERE `lat` IS NOT NULL AND `lon` IS NOT NULL;"; |
---|
85 | // SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', 1) full path without filename extension |
---|
86 | // SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', -1) full path with only filename extension |
---|
87 | |
---|
88 | $query="SELECT `lat`, `lon`, `name`, |
---|
89 | IF(`representative_ext` IS NULL, |
---|
90 | CONCAT(SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', 1 ), '-sq.', SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', -1 )), |
---|
91 | TRIM(LEADING '.' FROM |
---|
92 | REPLACE(`path`, `file`, |
---|
93 | CONCAT('pwg_representative/', |
---|
94 | CONCAT( |
---|
95 | TRIM(TRAILING '.' FROM SUBSTRING_INDEX(`file`, '.', 1 )), |
---|
96 | CONCAT('-sq.', `representative_ext`) |
---|
97 | ) |
---|
98 | ) |
---|
99 | ) |
---|
100 | ) |
---|
101 | ) AS pathurl, |
---|
102 | TRIM(TRAILING '/' FROM CONCAT( `id`, '/category/', IFNULL(`storage_category_id`, '') ) ) as imgurl, |
---|
103 | IFNULL(`comment`, '') AS `comment`, |
---|
104 | IFNULL(`author`, '') AS `author`, |
---|
105 | `width` |
---|
106 | FROM ".IMAGES_TABLE." AS i |
---|
107 | INNER JOIN ".IMAGE_CATEGORY_TABLE." AS ic ON id = ic.image_id |
---|
108 | WHERE `lat` IS NOT NULL AND `lon` IS NOT NULL ".$forbidden." group by `name`;"; |
---|
109 | //echo $query; |
---|
110 | $php_data = array_from_query($query); |
---|
111 | //print_r($php_data); |
---|
112 | $js_data = array(); |
---|
113 | foreach($php_data as $array) |
---|
114 | { |
---|
115 | // MySQL did all the job |
---|
116 | //print_r($array); |
---|
117 | $js_data[] = array((double)$array['lat'], |
---|
118 | (double)$array['lon'], |
---|
119 | $array['name'], |
---|
120 | $array['pathurl'], |
---|
121 | $array['imgurl'], |
---|
122 | $array['comment'], |
---|
123 | $array['author'], |
---|
124 | (int)$array['width'] |
---|
125 | ); |
---|
126 | } |
---|
127 | |
---|
128 | // Load parameter, fallback to default if unset |
---|
129 | $linkname = isset($conf['osm_conf']['left_menu']['link']) ? $conf['osm_conf']['left_menu']['link'] : 'OS World Map'; |
---|
130 | $popup = isset($conf['osm_conf']['left_menu']['popup']) ? $conf['osm_conf']['left_menu']['popup'] : 0; |
---|
131 | $popupinfo_name = isset($conf['osm_conf']['left_menu']['popupinfo_name']) ? $conf['osm_conf']['left_menu']['popupinfo_name'] : 0; |
---|
132 | $popupinfo_img = isset($conf['osm_conf']['left_menu']['popupinfo_img']) ? $conf['osm_conf']['left_menu']['popupinfo_img'] : 0; |
---|
133 | $popupinfo_link = isset($conf['osm_conf']['left_menu']['popupinfo_link']) ? $conf['osm_conf']['left_menu']['popupinfo_link'] : 0; |
---|
134 | $popupinfo_comment = isset($conf['osm_conf']['left_menu']['popupinfo_comment']) ? $conf['osm_conf']['left_menu']['popupinfo_comment'] : 0; |
---|
135 | $popupinfo_author = isset($conf['osm_conf']['left_menu']['popupinfo_author']) ? $conf['osm_conf']['left_menu']['popupinfo_author'] : 0; |
---|
136 | $baselayer = isset($conf['osm_conf']['map']['baselayer']) ? $conf['osm_conf']['map']['baselayer'] : 'mapnik'; |
---|
137 | $custombaselayer = isset($conf['osm_conf']['map']['custombaselayer']) ? $conf['osm_conf']['map']['custombaselayer'] : ''; |
---|
138 | $custombaselayerurl = isset($conf['osm_conf']['map']['custombaselayerurl']) ? $conf['osm_conf']['map']['custombaselayerurl'] : ''; |
---|
139 | $noworldwarp = isset($conf['osm_conf']['map']['noworldwarp']) ? $conf['osm_conf']['map']['noworldwarp'] : 'false'; |
---|
140 | $attrleaflet = isset($conf['osm_conf']['map']['attrleaflet']) ? $conf['osm_conf']['map']['attrleaflet'] : 'false'; |
---|
141 | $attrimagery = isset($conf['osm_conf']['map']['attrimagery']) ? $conf['osm_conf']['map']['attrimagery'] : 'false'; |
---|
142 | $attrmodule = isset($conf['osm_conf']['map']['attrplugin']) ? $conf['osm_conf']['map']['attrplugin'] : 'false'; |
---|
143 | |
---|
144 | $OSMCOPYRIGHT='Map data © <a href="http://www.openstreetmap.org" target="_blank">OpenStreetMap</a> (<a href="http://www.openstreetmap.org/copyright" target="_blank">ODbL</a>)'; |
---|
145 | |
---|
146 | // Load baselayerURL |
---|
147 | // Key1 BC9A493B41014CAABB98F0471D759707 |
---|
148 | if ($baselayer == 'mapnik') $baselayerurl = 'http://tile.openstreetmap.org/{z}/{x}/{y}.png'; |
---|
149 | else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png'; |
---|
150 | else if($baselayer == 'cloudmade') $baselayerurl = 'http://{s}.tile.cloudmade.com/7807cc60c1354628aab5156cfc1d4b3b/997/256/{z}/{x}/{y}.png'; |
---|
151 | else if($baselayer == 'mapnikde') $baselayerurl = 'http://www.toolserver.org/tiles/germany/{z}/{x}/{y}.png'; |
---|
152 | else if($baselayer == 'mapnikfr') $baselayerurl = 'http://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png'; |
---|
153 | else if($baselayer == 'custom') $baselayerurl = $custombaselayerurl; |
---|
154 | |
---|
155 | // Generate Javascript |
---|
156 | // ---------------------------------------- |
---|
157 | // no worldWarp (no world copies, restrict the view to one world) |
---|
158 | if($noworldwarp) |
---|
159 | { |
---|
160 | $nowarp = "noWrap: true, "; |
---|
161 | $worldcopyjump = "worldCopyJump: false, maxBounds: [ [82, -180], [-82, 180] ]"; |
---|
162 | } |
---|
163 | else |
---|
164 | { |
---|
165 | $nowarp = "noWrap: false, "; |
---|
166 | $worldcopyjump = "worldCopyJump: true"; |
---|
167 | } |
---|
168 | |
---|
169 | //$js = "\nvar addressPoints = ". json_encode($js_data, JSON_UNESCAPED_SLASHES) .";\n"; |
---|
170 | $js = "\nvar addressPoints = ". str_replace("\/","/",json_encode($js_data)) .";\n"; |
---|
171 | |
---|
172 | /* |
---|
173 | // Icons |
---|
174 | $js .= " |
---|
175 | var LeafIcon = L.Icon.extend({ |
---|
176 | options: { |
---|
177 | shadowUrl: 'plugins/piwigo-openstreetmap/leaflet/images/leaf-shadow.png', |
---|
178 | iconSize: [38, 95], |
---|
179 | shadowSize: [50, 64], |
---|
180 | iconAnchor: [22, 94], |
---|
181 | shadowAnchor: [4, 62], |
---|
182 | popupAnchor: [-3, -76] |
---|
183 | } |
---|
184 | }); |
---|
185 | |
---|
186 | var mapIcon = L.Icon.extend({ |
---|
187 | options: { |
---|
188 | shadowUrl: 'plugins/piwigo-openstreetmap/leaflet/images/mapicons-shadow.png', |
---|
189 | iconSize: [32, 37], |
---|
190 | shadowSize: [51, 37], |
---|
191 | iconAnchor: [19, 38], |
---|
192 | shadowAnchor: [-20, 33], |
---|
193 | popupAnchor: [-2, -10] |
---|
194 | } |
---|
195 | }); |
---|
196 | |
---|
197 | var greenIcon = new LeafIcon({iconUrl: 'plugins/piwigo-openstreetmap/leaflet/images/leaf-green.png'}), |
---|
198 | redIcon = new LeafIcon({iconUrl: 'plugins/piwigo-openstreetmap/leaflet/images/leaf-red.png'}), |
---|
199 | orangeIcon = new LeafIcon({iconUrl: 'plugins/piwigo-openstreetmap/leaflet/images/leaf-orange.png'}); |
---|
200 | |
---|
201 | var bluemapicons = new mapIcon({iconUrl: 'plugins/piwigo-openstreetmap/leaflet/images/mapicons-blue.png'}), |
---|
202 | greenmapicons = new mapIcon({iconUrl: 'plugins/piwigo-openstreetmap/leaflet/images/mapicons-green.png'}); |
---|
203 | "; |
---|
204 | */ |
---|
205 | |
---|
206 | // Create the map and get a new map instance attached and element with id="tile-map" |
---|
207 | $js .= "\nvar Url = '".$baselayerurl."', |
---|
208 | Attribution = '".$OSMCOPYRIGHT."', |
---|
209 | TileLayer = new L.TileLayer(Url, {maxZoom: 18, attribution: Attribution}), |
---|
210 | latlng = new L.LatLng(0, 0);\n"; |
---|
211 | $js .= "var map = new L.Map('map', {center: latlng, zoom: 2, layers: [TileLayer]});\n"; |
---|
212 | $js .= "map.attributionControl.setPrefix('');\n"; |
---|
213 | $js .= "var markers = new L.MarkerClusterGroup();\n"; |
---|
214 | $js .= "for (var i = 0; i < addressPoints.length; i++) { |
---|
215 | var a = addressPoints[i]; |
---|
216 | var title = a[2]; |
---|
217 | var pathurl = '". get_absolute_root_url() ."i.php?'+a[3]; |
---|
218 | var imgurl = '". get_absolute_root_url() ."picture.php?/'+a[4]; |
---|
219 | var comment = a[5]; |
---|
220 | var author = a[6]; |
---|
221 | var width = a[7]; |
---|
222 | var latlng = new L.LatLng(a[0], a[1]); |
---|
223 | var marker = new L.Marker(latlng, { title: title }); |
---|
224 | "; |
---|
225 | |
---|
226 | // create Popup |
---|
227 | if ($popup < 2) |
---|
228 | { |
---|
229 | $openpopup = ".openPopup()"; |
---|
230 | $myinfo = "'<p>"; |
---|
231 | if($popupinfo_name) |
---|
232 | { |
---|
233 | $myinfo .= "'+title+'"; |
---|
234 | } |
---|
235 | if($popupinfo_img and !$popupinfo_link) |
---|
236 | { |
---|
237 | $myinfo .= "<br /><img src=\"'+pathurl+'\">"; |
---|
238 | } |
---|
239 | else if($popupinfo_img and $popupinfo_link) |
---|
240 | { |
---|
241 | $myinfo .= "<br /><a href=\"'+imgurl+'\"><img src=\"'+pathurl+'\"></a>"; |
---|
242 | } |
---|
243 | if($popupinfo_comment) |
---|
244 | { |
---|
245 | $myinfo .= "<br />'+comment+'"; |
---|
246 | } |
---|
247 | if($popupinfo_author) |
---|
248 | { |
---|
249 | $myinfo .= "<br />'+author+'"; |
---|
250 | } |
---|
251 | $myinfo .= "</p>'"; |
---|
252 | $js .= "marker.bindPopup(".$myinfo.", {minWidth: '+width+'}).openPopup();"; |
---|
253 | } |
---|
254 | |
---|
255 | $js .= "\n markers.addLayer(marker); |
---|
256 | }"; |
---|
257 | $js .= "\nmap.addLayer(markers);\n"; |
---|
258 | |
---|
259 | // Attribution Credit and Copyright |
---|
260 | if($attrleaflet){ $js .= "map.attributionControl.addAttribution('".l10n('POWERBY')." <a href=\"http://leafletjs.com/\" target=\"_blank\">Leaflet</a>');\n"; } |
---|
261 | if($attrimagery){ $js .= "map.attributionControl.addAttribution('".l10n('IMAGERYBY')." ". imagery($baselayer, $custombaselayer)."');\n"; } |
---|
262 | if($attrmodule){ $js .= "map.attributionControl.addAttribution('".l10n('PLUGINBY')." <a href=\"https://github.com/xbgmsharp/piwigo-openstreetmap\" target=\"_blank\">xbgmsharp</a>');\n"; } |
---|
263 | |
---|
264 | $template->set_filename('map', dirname(__FILE__).'/template/osm-map.tpl' ); |
---|
265 | |
---|
266 | $template->assign($conf['osm_conf']); |
---|
267 | $template->assign( |
---|
268 | array( |
---|
269 | 'CONTENT_ENCODING' => get_pwg_charset(), |
---|
270 | 'OSM_PATH' => OSM_PATH, |
---|
271 | 'PLUGIN_ROOT_URL' => get_absolute_root_url().'plugins/'.$osm_dir, |
---|
272 | 'PLUGIN_LOCATION' => 'plugins/'.$osm_dir, |
---|
273 | 'GALLERY_TITLE' => $linkname .' - '. $conf['gallery_title'], |
---|
274 | 'HOME' => make_index_url(), |
---|
275 | 'HOME_PREV' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : get_absolute_root_url(), |
---|
276 | 'HOME_NAME' => l10n("Home"), |
---|
277 | 'HOME_PREV_NAME' => l10n("Previous"), |
---|
278 | 'TOTAL' => sprintf( l10n('%d photos'), count($php_data) ), |
---|
279 | 'OSMJS' => $js, |
---|
280 | ) |
---|
281 | ); |
---|
282 | |
---|
283 | $template->pparse('map'); |
---|
284 | $template->p(); |
---|
285 | ?> |
---|