| 
									
										
										
										
											2015-08-01 15:36:15 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /* Copyright (C) 2014 Daniel Preussker <f0o@devilcode.org> | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Custom Frontpage | 
					
						
							|  |  |  |  * @author f0o <f0o@devilcode.org> | 
					
						
							|  |  |  |  * @copyright 2014 f0o, LibreNMS | 
					
						
							|  |  |  |  * @license GPL | 
					
						
							|  |  |  |  * @package LibreNMS | 
					
						
							|  |  |  |  * @subpackage Frontpage | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if ($config['map']['engine'] == 'leaflet') { | 
					
						
							| 
									
										
										
										
											2015-09-20 20:37:28 +00:00
										 |  |  |     if (defined('show_settings') && $config['front_page'] == "pages/front/tiles.php") { | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |         $temp_output = ' | 
					
						
							|  |  |  | <form class="form" onsubmit="widget_settings(this); return false;"> | 
					
						
							|  |  |  |   <div class="form-group"> | 
					
						
							|  |  |  |     <div class="col-sm-4"> | 
					
						
							|  |  |  |       <label for="init_lat" class="control-label">Initial Latitude: </label> | 
					
						
							|  |  |  |     </div> | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |     <div class="col-sm-8"> | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |       <input class="form-control" name="init_lat" id="input_lat_'.$unique_id.'" value="'.$widget_settings['init_lat'].'" placeholder="ie. 51.4800 for Greenwich"> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  |   <div class="form-group"> | 
					
						
							|  |  |  |     <div class="col-sm-4"> | 
					
						
							|  |  |  |       <label for="init_lng" class="control-label">Initial Longitude: </label> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="col-sm-6"> | 
					
						
							|  |  |  |       <input class="form-control" name="init_lng" id="input_lng_'.$unique_id.'" value="'.$widget_settings['init_lng'].'" placeholder="ie. 0 for Greenwich"> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  |   <div class="form-group"> | 
					
						
							|  |  |  |     <div class="col-sm-4"> | 
					
						
							|  |  |  |       <label for="init_zoom" class="control-label">Initial Zoom: </label> | 
					
						
							|  |  |  |     </div> | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |     <div class="col-sm-8"> | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |       <select class="form-control" name="init_zoom" id="select_zoom'.$unique_id.'"> | 
					
						
							|  |  |  |         '; | 
					
						
							|  |  |  |         for ($i=0; $i<19; $i++) { | 
					
						
							|  |  |  |     	if ($i == $widget_settings['init_zoom']) { | 
					
						
							|  |  |  |                 $temp_output .= '<option selected value="'.$i.'">'.$i.'</option>'; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else { | 
					
						
							|  |  |  |                 $temp_output .= '<option value="'.$i.'">'.$i.'</option>'; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $temp_output .= ' | 
					
						
							|  |  |  |       </select> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							| 
									
										
										
										
											2015-10-17 11:31:57 +02:00
										 |  |  |   <div class="form-group"> | 
					
						
							|  |  |  |     <div class="col-sm-4"> | 
					
						
							|  |  |  |       <label for="group_radius" class="control-label">Grouping radius: </label> | 
					
						
							|  |  |  |     </div> | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |     <div class="col-sm-8"> | 
					
						
							| 
									
										
										
										
											2015-10-17 11:31:57 +02:00
										 |  |  |       <input class="form-control" name="group_radius" id="input_radius_'.$unique_id.'" value="'.$widget_settings['group_radius'].'" placeholder="default 80"> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |     <div class="form-group"> | 
					
						
							|  |  |  |         <div class="col-sm-4"> | 
					
						
							|  |  |  |             <label for="status" class="control-label">Show devices: </label> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |         <div class="col-sm-8"> | 
					
						
							| 
									
										
										
										
											2015-11-18 22:01:38 +00:00
										 |  |  |             <select class="form-control" name="status" id="status_'.$unique_id.'">'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 $temp_output .= '<option value="0,1"'; | 
					
						
							|  |  |  |                 if ($widget_settings['status'] == '0,1') { | 
					
						
							|  |  |  |                     $temp_output .= ' selected'; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $temp_output .= '>Up + Down</option> | 
					
						
							|  |  |  |                 <option value="1"'; | 
					
						
							|  |  |  |                 if ($widget_settings['status'] == '1') { | 
					
						
							|  |  |  |                     $temp_output .= ' selected'; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $temp_output .= '>Up</option> | 
					
						
							|  |  |  |                 <option value="0"'; | 
					
						
							|  |  |  |                 if ($widget_settings['status'] == '0') { | 
					
						
							|  |  |  |                     $temp_output .= ' selected'; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $temp_output .= '>Down</option> | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |             </select> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |   <div class="form-group"> | 
					
						
							|  |  |  |     <div class="col-sm-2"> | 
					
						
							|  |  |  |       <button type="submit" class="btn btn-default">Set</button> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </form> | 
					
						
							|  |  |  |         '; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else { | 
					
						
							|  |  |  |         $temp_output = ' | 
					
						
							| 
									
										
										
										
											2015-08-01 15:36:15 +00:00
										 |  |  | <script src="js/leaflet.js"></script> | 
					
						
							|  |  |  | <script src="js/leaflet.markercluster-src.js"></script> | 
					
						
							|  |  |  | <script src="js/leaflet.awesome-markers.min.js"></script> | 
					
						
							|  |  |  | <div id="leaflet-map"></div> | 
					
						
							|  |  |  | <script> | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |         '; | 
					
						
							| 
									
										
										
										
											2015-09-20 20:37:28 +00:00
										 |  |  |         if (!empty($widget_settings) && !empty($widget_settings['init_lat']) && !empty($widget_settings['init_lng'])) { | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |             $init_lat = $widget_settings['init_lat']; | 
					
						
							|  |  |  |             $init_lng = $widget_settings['init_lng']; | 
					
						
							|  |  |  |             $init_zoom = $widget_settings['init_zoom']; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         elseif (isset($config['leaflet'])) { | 
					
						
							|  |  |  |             $init_lat = $config['leaflet']['default_lat']; | 
					
						
							|  |  |  |             $init_lng = $config['leaflet']['default_lng']; | 
					
						
							|  |  |  |             $init_zoom = $config['leaflet']['default_zoom']; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-10-17 11:31:57 +02:00
										 |  |  |         if (!empty($widget_settings['group_radius'])) { | 
					
						
							|  |  |  |             $group_radius = $widget_settings['group_radius']; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							|  |  |  |             $group_radius = 80; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |         if (empty($widget_settings['status']) && $widget_settings['status'] != '0') { | 
					
						
							|  |  |  |             $widget_settings['status'] = '0,1'; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |         $map_init = "[" . $init_lat . ", " . $init_lng . "], " . sprintf("%01.0f", $init_zoom); | 
					
						
							|  |  |  |         $temp_output .= 'var map = L.map(\'leaflet-map\').setView('.$map_init.'); | 
					
						
							| 
									
										
										
										
											2015-08-01 15:36:15 +00:00
										 |  |  | L.tileLayer(\'//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\', {
 | 
					
						
							|  |  |  |     attribution: \'© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors\' | 
					
						
							|  |  |  | }).addTo(map); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-17 11:31:57 +02:00
										 |  |  | var markers = L.markerClusterGroup({ | 
					
						
							|  |  |  |     maxClusterRadius: ' . $group_radius . ', | 
					
						
							| 
									
										
										
										
											2015-12-13 20:01:08 +00:00
										 |  |  |     iconCreateFunction: function (cluster) { | 
					
						
							|  |  |  |         var markers = cluster.getAllChildMarkers(); | 
					
						
							|  |  |  |         var n = 0; | 
					
						
							|  |  |  |         newClass = "greenCluster marker-cluster marker-cluster-small leaflet-zoom-animated leaflet-clickable"; | 
					
						
							|  |  |  |         for (var i = 0; i < markers.length; i++) { | 
					
						
							|  |  |  |             if (markers[i].options.icon.options.markerColor == "red") { | 
					
						
							|  |  |  |                 newClass = "redCluster marker-cluster marker-cluster-small leaflet-zoom-animated leaflet-clickable"; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return L.divIcon({ html: cluster.getChildCount(), className: newClass, iconSize: L.point(40, 40) }); | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2015-10-17 11:31:57 +02:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2015-08-01 15:36:15 +00:00
										 |  |  | var redMarker = L.AwesomeMarkers.icon({ | 
					
						
							|  |  |  |     icon: \'server\', | 
					
						
							|  |  |  |     markerColor: \'red\', prefix: \'fa\', iconColor: \'white\' | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | var greenMarker = L.AwesomeMarkers.icon({ | 
					
						
							|  |  |  |     icon: \'server\', | 
					
						
							|  |  |  |     markerColor: \'green\', prefix: \'fa\', iconColor: \'white\' | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |         '; | 
					
						
							|  |  |  |         // Checking user permissions
 | 
					
						
							|  |  |  |         if (is_admin() || is_read()) { | 
					
						
							|  |  |  |         // Admin or global read-only - show all devices
 | 
					
						
							| 
									
										
										
										
											2015-11-16 18:50:52 -08:00
										 |  |  |             $sql = "SELECT DISTINCT(`device_id`),`devices`.`location`,`hostname`,`os`,`status`,`lat`,`lng` FROM `devices`
 | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |                     LEFT JOIN `locations` ON `devices`.`location`=`locations`.`location` | 
					
						
							| 
									
										
										
										
											2015-11-16 18:50:52 -08:00
										 |  |  |                     WHERE `disabled`=0 AND `ignore`=0 AND ((`lat` != '' AND `lng` != '') OR (`devices`.`location` REGEXP '\[[0-9\.\, ]+\]')) | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |                       AND `status` IN (".$widget_settings['status'].") | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |                     ORDER BY `status` ASC, `hostname`";
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							|  |  |  |         // Normal user - grab devices that user has permissions to
 | 
					
						
							| 
									
										
										
										
											2015-11-16 18:50:52 -08:00
										 |  |  |             $sql = "SELECT DISTINCT(`devices`.`device_id`) as `device_id`,`devices`.`location`,`hostname`,`os`,`status`,`lat`,`lng`
 | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |                     FROM `devices_perms`, `devices` | 
					
						
							|  |  |  |                     LEFT JOIN `locations` ON `devices`.`location`=`locations`.`location` | 
					
						
							| 
									
										
										
										
											2015-11-16 18:50:52 -08:00
										 |  |  |                     WHERE `disabled`=0 AND `ignore`=0 AND ((`lat` != '' AND `lng` != '') OR (`devices`.`location` REGEXP '\[[0-9\.\, ]+\]')) | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |                     AND `devices`.`device_id` = `devices_perms`.`device_id` | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |                     AND `devices_perms`.`user_id` = ? AND `status` IN (".$widget_settings['status'].") | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |                     ORDER BY `status` ASC, `hostname`";
 | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |             $param[] = $_SESSION['user_id']; | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-11-16 17:27:47 -08:00
										 |  |  |         foreach (dbFetchRows($sql, $param) as $map_devices) { | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |             $icon = 'greenMarker'; | 
					
						
							| 
									
										
										
										
											2015-10-13 16:46:31 +02:00
										 |  |  |             $z_offset = 0; | 
					
						
							| 
									
										
										
										
											2015-11-16 18:50:52 -08:00
										 |  |  |             $tmp_loc = parse_location($map_devices['location']); | 
					
						
							|  |  |  |             if (!empty($tmp_loc['lat']) && !empty($tmp_loc['lng'])) { | 
					
						
							|  |  |  |                 $map_devices['lat'] = $tmp_loc['lat']; | 
					
						
							|  |  |  |                 $map_devices['lng'] = $tmp_loc['lng']; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |             if ($map_devices['status'] == 0) { | 
					
						
							|  |  |  |                 $icon = 'redMarker'; | 
					
						
							| 
									
										
										
										
											2015-10-13 16:46:31 +02:00
										 |  |  |                 $z_offset = 10000;  // move marker to foreground
 | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |             $temp_output .= "var title = '<a href=\"" . generate_device_url($map_devices) . "\"><img src=\"".getImageSrc($map_devices)."\" width=\"32\" height=\"32\" alt=\"\">".$map_devices['hostname']."</a>';
 | 
					
						
							| 
									
										
										
										
											2015-10-13 16:46:31 +02:00
										 |  |  | var marker = L.marker(new L.LatLng(".$map_devices['lat'].", ".$map_devices['lng']."), {title: title, icon: $icon, zIndexOffset: $z_offset}); | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  | marker.bindPopup(title); | 
					
						
							|  |  |  |     markers.addLayer(marker);\n";
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $temp_output .= 'map.addLayer(markers); | 
					
						
							| 
									
										
										
										
											2015-08-31 19:10:53 +00:00
										 |  |  | map.scrollWheelZoom.disable(); | 
					
						
							|  |  |  | $(document).ready(function(){ | 
					
						
							|  |  |  |     $("#leaflet-map").on("click", function(event) {   | 
					
						
							|  |  |  |         map.scrollWheelZoom.enable(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     $("#leaflet-map").mouseleave(function(event) {   | 
					
						
							|  |  |  |         map.scrollWheelZoom.disable(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2015-08-01 15:36:15 +00:00
										 |  |  | </script>'; | 
					
						
							| 
									
										
										
										
											2015-09-10 15:26:19 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | else { | 
					
						
							| 
									
										
										
										
											2015-08-01 15:36:15 +00:00
										 |  |  |     $temp_output = 'Mapael engine not supported here'; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unset($common_output); | 
					
						
							|  |  |  | $common_output[] = $temp_output; |