SettingsHelper = new SettingsHelper(); } public function timeline(Request $request) { $user = Auth::user(); // Let's check if the user has the permission to view the timeline if ($user->can('reporting')) { $conds = $this->SettingsHelper->defaultConds(); if($request->has('daterange')){ $range = explode(' - ',$request->daterange); $filter_from = new Carbon($range[0]); $conds['from'] = $filter_from->format('Y-m-d 00:00:00'); $filter_to = new Carbon($range[1]); $conds['to'] = $filter_to->format('Y-m-d 23:59:59'); } $filter_area = view('reporting::widgets.filter_area'); $filter_area->with('conds',$conds); $filter_area->with('did_ext',$request->did_ext); $filter_area->with('submit_route',route('reporting.cctimeline')); $view = view('reporting::timeline'); $view->with('filter_area',$filter_area); $data = DB::table(config('database.connections.mysql.database') . '.activity_log') ->select( 'activity_log.created_at', 'activity_log.subject_id', 'activity_log.description', 'activity_log.log_name', 'users.name', 'users.email' ) ->join(config('database.connections.mysql.database') . '.users', config('database.connections.mysql.database') . '.users.id', '=', config('database.connections.mysql.database') . '.activity_log.subject_id') ->whereBetween('activity_log.created_at', [$conds['from'], $conds['to']]); $data->orderBy('activity_log.subject_id')->orderBy('activity_log.created_at', 'ASC'); $data = $data->get()->toArray(); $lastEntries = []; foreach ($data as $key => $item) { $nextItem = null; for ($i = $key + 1; $i < count($data); $i++) { if ($data[$i]->subject_id == $item->subject_id) { $nextItem = $data[$i]; break; } } if ($nextItem) { $diff = Carbon::parse($item->created_at)->diff(Carbon::parse($nextItem->created_at)); $days = $diff->d; $hours = $diff->h; $minutes = $diff->i; $seconds = $diff->s; $item->finished_at = $nextItem->created_at; $item->duration = sprintf("%02d:%02d:%02d:%02d", $days, $hours, $minutes, $seconds); } else { unset($data[$key]); // Drop the item if it doesn't contain a duration } } $view->with('data',json_encode(array_values($data))); // Reindex the array } return $view; } }