. * * @link https://www.librenms.org * @copyright 2018 Tony Murray * @author Tony Murray */ namespace App\Http\Controllers\Widgets; use App\Models\Device; use Illuminate\Http\Request; use LibreNMS\Config; class WorldMapController extends WidgetController { protected $title = 'World Map'; public function __construct() { $this->defaults = [ 'title' => null, 'title_url' => Config::get('leaflet.tile_url', '{s}.tile.openstreetmap.org'), 'init_lat' => Config::get('leaflet.default_lat', 51.4800), 'init_lng' => Config::get('leaflet.default_lng', 0), 'init_zoom' => Config::get('leaflet.default_zoom', 2), 'group_radius' => Config::get('leaflet.group_radius', 80), 'status' => '0,1', 'device_group' => null, ]; } public function getView(Request $request) { $settings = $this->getSettings(); $status = explode(',', $settings['status']); $settings['dimensions'] = $request->get('dimensions'); $devices = Device::hasAccess($request->user()) ->with('location') ->isActive() ->whereIn('status', $status) ->when($settings['device_group'], function ($query) use ($settings) { $query->inDeviceGroup($settings['device_group']); }) ->get() ->filter(function ($device) use ($status) { /** @var Device $device */ if (! ($device->location_id && $device->location && $device->location->coordinatesValid())) { return false; } // add extra data $device->markerIcon = 'greenMarker'; $device->zOffset = 0; if ($device->status == 0) { $device->markerIcon = 'redMarker'; $device->zOffset = 10000; if ($device->isUnderMaintenance()) { if (in_array(0, $status)) { return false; } $device->markerIcon = 'blueMarker'; $device->zOffset = 5000; } } return true; }); $settings['devices'] = $devices; return view('widgets.worldmap', $settings); } public function getSettingsView(Request $request) { return view('widgets.settings.worldmap', $this->getSettings(true)); } }