public function update(Request $request, $event_id)
 {
     $users_ids = explode(",", $request->input('user_id'));
     $roster_data = Roster::where('id', '=', $event_id)->first();
     $roster = Roster::find($event_id);
     if (!Common::isInTheFuture(Common::formatDateTimeForSQL($roster_data->start_time))) {
         return response()->json(['range' => 'You cannot update past event'], 422);
     }
     $status = $request->input('status');
     $supervisor = $request->input('supervisor');
     if (Auth::user()->role != "worker") {
         $this->validate($request, ['time_range' => ['regex:/[0-9]{1,2}\\/[0-9]{1,2}\\/[0-9]{4}\\s[0-9]{1,2}:[0-9]{2}\\s(AM|PM)\\s-\\s[0-9]{1,2}\\/[0-9]{1,2}\\/[0-9]{4}\\s[0-9]{1,2}:[0-9]{2}\\s(AM|PM)/'], 'address' => 'required', 'coordinates' => 'required', 'name' => 'required']);
         list($start, $end) = explode(' - ', $request->input('time_range'));
         $overlapping_users = [];
         foreach ($users_ids as $user_id) {
             if (Roster::overlap($user_id, Common::formatDateTimeForSQL($start), Common::formatDateTimeForSQL($end), $event_id) === true) {
                 $overlapping_users[] = User::getNameById($user_id);
             }
         }
         if (count($overlapping_users)) {
             return response()->json(['range' => 'The time range overlaps for ' . implode(', ', $overlapping_users) . '.'], 422);
         }
         foreach ($users_ids as $user_id) {
             $roster->users()->updateExistingPivot($user_id, ['status' => $status[$user_id] ?? 'pending', 'is_supervisor' => $supervisor[$user_id] ?? 0]);
         }
         $roster->name = $request->input('name');
         $roster->start_time = Common::formatDateTimeForSQL($start);
         $roster->end_time = Common::formatDateTimeForSQL($end);
         $roster->other = $request->input('other');
         $roster->address = $request->input('address');
         $roster->coordinates = $request->input('coordinates');
         if ($roster_data->start_time != $start) {
             foreach ($users_ids as $user_id) {
                 Notification::add($user_id, 'UPDATE_EVENT', ['start' => Common::formatDateTimeForSQL($start), 'end' => Common::formatDateTimeForSQL($end), 'title' => $roster->name, 'admin_id' => Auth::user()->id]);
             }
         } else {
             if ($roster_data->end_time != $end) {
                 foreach ($users_ids as $user_id) {
                     Notification::add($user_id, 'UPDATE_EVENT', ['start' => Common::formatDateTimeForSQL($start), 'end' => Common::formatDateTimeForSQL($end), 'title' => $roster->name, 'admin_id' => Auth::user()->id]);
                 }
             }
         }
     } else {
         $id = Auth::user()->id;
         $status = $status[$id];
         $roster_status = Roster::where('id', '=', $event_id)->with(['users' => function ($q) use($id) {
             $q->select('status', 'user_id', 'roster_id')->where('users.id', '=', $id);
         }])->first()->users[0]->status;
         if ($status == "canceled") {
             return response()->json(['range' => 'You are not authorized to cancel event'], 422);
         }
         if ($roster_status != 'pending') {
             return response()->json(['range' => 'You cannot update this event'], 422);
         }
         $roster->users()->updateExistingPivot(Auth::user()->id, ['status' => $status]);
     }
     $roster->save();
     return response()->json(['Data is updated'], 200);
 }