query()->select( 'users.id', 'users.email', 'users.name', 'users.email_verified_at', 'users.created_at', 'users.status', 'roles.name as role_name', 'roles.id as role_id' ) ->join('model_has_roles', 'users.id', '=', 'model_has_roles.model_id') ->join('roles', 'model_has_roles.role_id', '=', 'roles.id') ->where('roles.name','=',config('access.users.admin_role')) ->where('roles.name','!=',config('access.users.super_admin_role')) ->where('roles.name','!=',config('access.users.shravak')); // $columns = ['', 'id', 'name', 'email', 'status', 'email_verified_at', 'created_at']; $columns = ['', 'id', 'name', 'email', 'created_at']; if (isset($request['status']) && $request['status'] != '') { $searchQuery = $searchQuery->where('users.status', $request['status']); } if (isset($request['email']) && !empty($request['email'])) { $searchQuery = $searchQuery->where('email', 'like', "%".$request['email']."%"); } if (isset($request['order']) && $request['order'] != "") { $searchQuery = $searchQuery->orderBy( $columns[$request['order'][0]['column']], $request['order'][0]['dir'] ); } } catch (Exception $ex) { Log::error($ex->getMessage()); } return $searchQuery; } /** * This function is for the format the Datatable columns * * @param $request * @return object */ public function getForDataTable($request): object { $response = (object)[]; try { $dataTableQuery = $this->prepareSearchQuery($request) ->orderBy('id', 'DESC'); $response = Datatables::of($dataTableQuery) ->addColumn( 'checkbox_action', function ($user) { return $user->checkbox_action; } ) ->addIndexColumn() // ->addColumn( // 'status', // function ($user) { // return $user->status_action; // } // ) // ->addColumn( // 'email_verified_at', // function ($user) { // return (($user->email_verified_at) ? defaultDateTimeFormat($user->email_verified_at) : '-'); // } // ) ->addColumn( 'created_at', function ($user) { return (($user->created_at) ? defaultDateTimeFormat($user->created_at) : '-'); } ) ->addColumn( 'action', function ($user) { if (!empty($user->roles[0]['name']) != config('access.users.admin_role') || !empty($user->roles[0]['name']) != config('access.users.super_admin_role') || loggedInUser()->isSuperAdmin() || loggedInUser()->isAdmin() ) { return $user->admin_action_buttons; } return ""; } ) ->setRowId( function ($user) { return 'recordRow-' . $user->id; } ) ->rawColumns(['status', 'action', 'checkbox_action', 'email_verified_at']) ->make(true); } catch (Exception $ex) { Log::error($ex->getMessage()); } return $response; } /** * This function is for the create user * * @param array $request * @return User * @throws GeneralException */ public function create(array $request): User { try { return DB::transaction( function () use ($request) { $user = $this->query()->create( [ 'name' => $request['name'], 'email' => $request['email'], 'email_hash' => $request['email'], 'password' => !empty($request['password']) ? bcrypt($request['password']) : Constant::NULL, 'username' => generateUsername($request['name']), // 'status' => !empty($request['status']) ? Constant::STATUS_ONE : Constant::STATUS_ZERO, // 'email_verified_at' => !empty($request['is_verify']) ? Carbon::now() : Constant::NULL, // 'invite_status' => !empty($request['save_and_invite']) ? Constant::STATUS_ONE : Constant::STATUS_ZERO, // 'invite_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : Constant::NULL, // 'created_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : Constant::NULL ] ); // This function call for assign the role for the user $user->assignRole($request['role_id']); //Send invite email to the user // SendInviteUserJob::dispatch($user); return $user; } ); } catch (Exception $ex) { Log::error($ex->getMessage()); throw new GeneralException(__('message.create_admin_error')); } } /** * This function is for the update user * * @param object $user * @param array $request * @return User * @throws GeneralException */ public function update(object $user, array $request): User { try { return DB::transaction( function () use ($user, $request) { $this->query()->where('id', $user->id)->update( [ 'name' => !empty($request['name']) ? $request['name'] : $user->name, 'email' => !empty($request['email']) ? encryptMe(strtolower($request['email'])) : $user->email, 'email_hash' => !empty($request['email']) ? md5(strtolower($request['email'])) : $user->email_hash, 'password' => !empty($request['password']) ? bcrypt($request['password']) : $user->password, // 'username' => !empty($request['username']) ? $request['username'] : $user->username, // 'status' => isset($request['status']) ? Constant::STATUS_ONE : Constant::STATUS_ZERO, // 'email_verified_at' => isset($request['is_verify']) ? Carbon::now() : $user->email_verified_at, // 'invite_status' => isset($request['save_and_invite']) ? Constant::STATUS_ONE : $user->invite_status, // 'invite_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : $user->invite_by, // 'updated_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : $user->updated_by, ] ); $user->assignRole($request['role_id']); //Send invite email to the user // if (!empty($request['save_and_invite'])) { // SendInviteUserJob::dispatch($user); // } return $user; }); } catch (Exception $ex) { Log::error($ex->getMessage()); throw new GeneralException(__('message.update_admin_error')); } } /** * This function is for the flush existing role and assign the updated role to the user * * @param string $roles * @param object $user * @return void */ protected function flushRoles(string $roles, object $user) { //Flush roles out, then add array of new ones if (!empty($user->roles[0]->id)) { $user->removeRole($user->roles[0]->id); } $user->assignRole($roles); } /** * This function is for the multiple records action from the grid * * @param string $actionType * @param array $data * @return bool * @throws GeneralException */ public function gridActions(string $actionType, array $data): bool { try { switch ($actionType) { case Constant::STATUS_ACTIVE : $this->query()->whereIn('id', $data)->update(['status' => Constant::STATUS_ONE]); return Constant::STATUS_TRUE; case Constant::STATUS_INACTIVE : $this->query()->whereIn('id', $data)->update(['status' => Constant::STATUS_ZERO]); return Constant::STATUS_TRUE; case Constant::STATUS_DELETE : $this->query()->whereIn('id', $data)->forceDelete(); return Constant::STATUS_TRUE; default: break; } } catch (Exception $ex) { Log::error($ex->getMessage()); throw new GeneralException(__('message.delete_admin_error')); } } }