%PDF- %PDF-
Direktori : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/UsersController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Exports\UsersExport; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\v1\Users\ChangePasswordRequest; use App\Http\Requests\Api\v1\Users\CreateUserRequest; use App\Http\Requests\Api\v1\Users\UpdateProfileRequest; use App\Http\Requests\Api\v1\Users\UpdateUserRequest; use App\Http\Requests\Api\v1\Users\UploadImageRequest; use App\Models\Role; use App\Models\User; use App\Notifications\AccountDisabledNotification; use App\Notifications\AccountEnabledNotification; use App\Transformers\RoleTransformer; use App\Transformers\UserTransformer; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; class UsersController extends ApiController { /** * User $user. */ protected $user; /** * PostsController constructor. */ public function __construct() { $this->user = auth() ->guard('api') ->user(); } /** * @param Request $request * @return UsersController */ public function index(Request $request) { /** @var LengthAwarePaginator $result */ $result = $this->filterUsers($request) ->paginate($request->get('perPage')); return $this->withPaginated($result, new UserTransformer()); } private function filterUsers(Request $request) { $result = User::query() ->whereHas('roles'); if ($name = $request->get('name')) { $result = $result->where('name', 'like', "$name%"); } if ($surname = $request->get('surname')) { $result = $result->where('surname', 'like', "$surname%"); } if ($email = $request->get('email')) { $result = $result->where('email', 'like', "$email%"); } if ($search = $request->get('search')) { $result = $result->where('email', 'like', "%$search%") ->orWhere('surname', 'like', "%$search%") ->orWhere('name', 'like', "%$search%"); } return $result; } /** * @param $id * @return UsersController */ public function show($id) { $user = User::query() ->find($id); return $this->item($user, new UserTransformer()); } public function store(CreateUserRequest $request) { /** @var User $user */ $user = User::query() ->create($request->only(['name', 'surname', 'email', 'password'])); $role = Role::findById($request->get('role_id')); $user->roles() ->attach($role); return $this->item($user, new UserTransformer()); } public function update(UpdateUserRequest $request, $id) { $user = User::query() ->findOrFail($id); $user->update($request->only(['name', 'surname'])); return $this->item($user, new UserTransformer()); } public function destroy($id) { /** @var User $user */ $user = User::query() ->findOrFail($id); try { $user->delete(); } catch (\Exception $e) { return $this->wrongArguments([ 'message' => 'Not possible to delete this user for the moment, please contact your system admin!', ]); } return []; } /** * @param $id * @return \Illuminate\Http\JsonResponse */ public function confirm($id) { /** @var User $user */ $user = User::query() ->findOrFail($id); $user->confirm(); return $this->item($user, new UserTransformer); } /** * @param $id * @return \Illuminate\Http\JsonResponse */ public function enable($id) { /** @var User $user */ $user = User::query() ->findOrFail($id); $user->enable(); $user->notify(new AccountEnabledNotification()); return $this->item($user, new UserTransformer); } /** * @param $id * @return \Illuminate\Http\JsonResponse */ public function disable($id) { /** @var User $user */ $user = User::query() ->findOrFail($id); $user->disable(); $user->notify(new AccountDisabledNotification()); return $this->item($user, new UserTransformer); } /** * @param ChangePasswordRequest $request * @param $id * @return \Illuminate\Http\JsonResponse */ public function updatePassword(ChangePasswordRequest $request, $id) { /** @var User $user */ $user = User::query() ->findOrFail($id); $user->updatePassword($request->get('password')); return $this->item($user, new UserTransformer); } /** * @param UploadImageRequest $request * @param $id * @return \Illuminate\Http\JsonResponse */ public function uploadImage(UploadImageRequest $request, $id) { /** @var User $user */ $user = User::query() ->findOrFail($id); try { $user->uploadImage($request->get('image')); } catch (\Exception $e) { return $this->wrongArguments($e->getMessage()); } return $this->item($user->fresh(), new UserTransformer); } public function exportExcel(Request $request) { return (new UsersExport($this->filterUsers($request)))->download('protocols.xlsx'); } public function getRoles() { return $this->collection(Role::query() ->get(), new RoleTransformer()); } public function getAvailableUsers() { return $this->collection(User::query() ->orderBy('name') ->orderBy('surname') ->get(), new UserTransformer()); } /** * @param UpdateProfileRequest $request * @param User $user * @return \Illuminate\Http\JsonResponse */ public function updateProfile(UpdateProfileRequest $request, User $user) { $user->companyProfile() ->updateOrCreate([ 'user_id' => $user->id, ], $request->only([ 'name', 'company', 'email', 'phone', 'country_id', 'city', 'street', 'zip_code', ])); return $this->item($user, new UserTransformer()); } }