validate([ 'dashboard' => 'integer', 'bare' => 'nullable|in:yes', ]); $view = Config::get('front_page'); if (view()->exists("overview.custom.$view")) { return view("overview.custom.$view"); } elseif (method_exists($this, $view)) { return $this->{$view}($request); } return $this->default($request); } public function default(Request $request) { $user = Auth::user(); $dashboards = Dashboard::allAvailable($user)->with('user:user_id,username')->get()->keyBy('dashboard_id'); // Split dashboards into user owned or shared [$user_dashboards, $shared_dashboards] = $dashboards->partition(function ($dashboard) use ($user) { return $dashboard->user_id == $user->user_id; }); if (! empty($request->dashboard) && isset($dashboards[$request->dashboard])) { // specific dashboard $dashboard = $dashboards[$request->dashboard]; } else { $user_default_dash = (int) UserPref::getPref($user, 'dashboard'); $global_default = (int) Config::get('webui.default_dashboard_id'); // load user default if (isset($dashboards[$user_default_dash])) { $dashboard = $dashboards[$user_default_dash]; // load global default } elseif (isset($dashboards[$global_default])) { $dashboard = $dashboards[$global_default]; // load users first dashboard } elseif (! empty($user_dashboards)) { $dashboard = $user_dashboards->first(); } // specific dashboard was requested, but doesn't exist if (isset($dashboard) && ! empty($request->dashboard)) { Toastr::error( "Dashboard #$request->dashboard does not exist! Loaded " . htmlentities($dashboard->dashboard_name) . ' instead.', 'Requested Dashboard Not Found!' ); } } if (! isset($dashboard)) { $dashboard = Dashboard::create([ 'dashboard_name' => 'Default', 'user_id' => $user->user_id, ]); } $data = $dashboard ->widgets() ->select(['user_widget_id', 'users_widgets.widget_id', 'title', 'widget', 'col', 'row', 'size_x', 'size_y', 'refresh', 'settings']) ->join('widgets', 'widgets.widget_id', '=', 'users_widgets.widget_id') ->get(); if ($data->isEmpty()) { $data[] = ['user_widget_id'=>'0', 'widget_id'=>1, 'title'=>'Add a widget', 'widget'=>'placeholder', 'col'=>1, 'row'=>1, 'size_x'=>6, 'size_y'=>2, 'refresh'=>60, ]; } $bare = $request->bare; $data = serialize(json_encode($data)); $dash_config = unserialize($data); $hide_dashboard_editor = UserPref::getPref($user, 'hide_dashboard_editor'); $widgets = Widget::select('widget_id', 'widget_title')->orderBy('widget_title')->get(); $user_list = []; if ($user->can('manage', User::class)) { $user_list = User::select(['username', 'user_id']) ->where('user_id', '!=', $user->user_id) ->orderBy('username') ->get(); } return view('overview.default', compact('bare', 'dash_config', 'dashboard', 'hide_dashboard_editor', 'user_dashboards', 'shared_dashboards', 'widgets', 'user_list')); } public function simple(Request $request) { //TODO: All below missing D.ignore = '0' check $ports_down = []; $bgp_down = []; $devices_uptime = []; $syslog = []; $devices_down = Device::hasAccess(Auth::user()) ->isDown() ->limit(Config::get('front_page_down_box_limit')) ->get(); if (Config::get('warn.ifdown')) { $ports_down = Port::hasAccess(Auth::user()) ->isDown() ->limit(Config::get('front_page_down_box_limit')) ->with('device') ->get(); } $services_down = Service::hasAccess(Auth::user()) ->isCritical() ->limit(Config::get('front_page_down_box_limit')) ->with('device') ->get(); // TODO: is inAlarm() equal to: bgpPeerAdminStatus != 'start' AND bgpPeerState != 'established' AND bgpPeerState != '' ? if (Config::get('enable_bgp')) { $bgp_down = BgpPeer::hasAccess(Auth::user()) ->inAlarm() ->limit(Config::get('front_page_down_box_limit')) ->with('device') ->get(); } if (filter_var(Config::get('uptime_warning'), FILTER_VALIDATE_FLOAT) !== false && Config::get('uptime_warning') > 0 ) { $devices_uptime = Device::hasAccess(Auth::user()) ->isUp() ->whereUptime(Config::get('uptime_warning')) ->limit(Config::get('front_page_down_box_limit')) ->get(); $devices_uptime = $devices_uptime->reject(function ($device) { return Config::getOsSetting($device->os, 'bad_uptime') == true; }); } if (Config::get('enable_syslog')) { $syslog = Syslog::hasAccess(Auth::user()) ->orderBy('timestamp', 'desc') ->limit(20) ->with('device') ->get(); } return view('overview.simple', compact('devices_down', 'ports_down', 'services_down', 'bgp_down', 'devices_uptime', 'syslog')); } }