%PDF- %PDF-
Direktori : /var/www/html/news/app/Http/Controllers/Api/ |
Current File : /var/www/html/news/app/Http/Controllers/Api/UsersController.php |
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\ApiController; use App\Http\Requests\Media\UploadImageRequest; use App\Http\Requests\User\UserAttachRoleRequest; use App\Http\Requests\User\UserChangePasswordRequest; use App\Http\Requests\User\UserDetachRoleRequest; use App\Http\Requests\User\UserStoreRequest; use App\Http\Requests\User\UserUpdateRequest; use App\Repositories\Media\MediaRepository; use App\Repositories\Role\RolesRepository; use App\Repositories\User\UsersRepository; use App\Transformers\MediaTransformer; use App\Transformers\UserTransformer; use EllipseSynergie\ApiResponse\Contracts\Response; use Exception; use Illuminate\Http\Request; class UsersController extends ApiController { /** * @var UsersRepository */ private $usersRepository; /** * @var RolesRepository */ private $rolesRepository; /** * @var MediaRepository */ private $mediaRepository; /** * UsersController constructor. * @param Response $response * @param UsersRepository $usersRepository * @param RolesRepository $rolesRepository * @param MediaRepository $mediaRepository */ public function __construct(Response $response, UsersRepository $usersRepository, RolesRepository $rolesRepository, MediaRepository $mediaRepository) { parent::__construct($response); $this->transformer = new UserTransformer; $this->usersRepository = $usersRepository; $this->rolesRepository = $rolesRepository; $this->mediaRepository = $mediaRepository; } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return $this->response->withPaginator($this->usersRepository->paginate(), $this->transformer); } /** * Store a newly created resource in storage. * * @param UserStoreRequest $request * @return \Illuminate\Http\Response */ public function store(UserStoreRequest $request) { $user = $this->usersRepository->create($request->all()); return $this->response->withItem($user, $this->transformer); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { return $this->response->withItem($this->usersRepository->findOrFail($id), $this->transformer); } /** * Update the specified resource in storage. * * @param UserUpdateRequest $request * @param int $id * @return \Illuminate\Http\Response */ public function update(UserUpdateRequest $request, $id) { $user = $this->usersRepository->findOrFail($id); $user->update($request->all()); return $this->response->withItem($user, $this->transformer); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { $user = $this->usersRepository->findOrFail($id); $result = $this->usersRepository->delete($user->id); if (!$result) { return $this->response->errorInternalError('Unexpected error occurred'); } return response([], 204); } /** * @param UserChangePasswordRequest $request * @param $user * @return mixed */ public function changePassword(UserChangePasswordRequest $request, $user) { $user = $this->usersRepository->findOrFail($user); $user->password = $request->get('new_password'); $user->save(); return $this->response->withItem($user, $this->transformer); } /** * @param UserAttachRoleRequest $request * @param $user * @return mixed */ public function attachRole(UserAttachRoleRequest $request, $user) { $user = $this->usersRepository->findOrFail($user); $role = $this->rolesRepository->findOrFail($request->get('role_id')); $user->attachRole($role); return $this->response->withItem($user, $this->transformer); } /** * @param UserDetachRoleRequest $request * @param $user * @return mixed */ public function detachRole(UserDetachRoleRequest $request, $user) { $user = $this->usersRepository->findOrFail($user); $role = $this->rolesRepository->findOrFail($request->get('role_id')); $user->detachRole($role); return $this->response->withItem($user, $this->transformer); } /** * @param UploadImageRequest $request * @param $user * @return mixed */ public function uploadPicture(UploadImageRequest $request, $user) { try { $user = $this->usersRepository->findOrFail($user); $directory = public_path() . '/uploads/avatars/'; $file_name = $this->mediaRepository->createImage($directory, $request->get('source')); if (!$file_name) { return $this->response->errorWrongArgs('Media source not readable'); } $media = $this->usersRepository->changeProfilePicture($user, $file_name, $request->get('file_name')); return $this->response->withItem($media, new MediaTransformer); } catch (Exception $e) { return $this->response->errorInternalError($e->getMessage()); } } /** * @param Request $request * @param $user * @return mixed */ public function enableUser(Request $request, $user) { try { $user = $this->usersRepository->findOrFail($user); $user = $this->usersRepository->enableUser($user); return $this->response->withItem($user, $this->transformer); } catch (Exception $e) { return $this->response->errorInternalError($e->getMessage()); } } /** * @param Request $request * @param $user * @return mixed */ public function disableUser(Request $request, $user) { try { $user = $this->usersRepository->findOrFail($user); $user = $this->usersRepository->disableUser($user); return $this->response->withItem($user, $this->transformer); } catch (Exception $e) { return $this->response->errorInternalError($e->getMessage()); } } }