%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/diaspora/api_internal/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\UpdateUserRequest;
use App\Http\Requests\Api\v1\Users\UploadImageRequest;
use App\Models\Role;
use App\Models\User;
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', function ($q) {
                          $q->whereIn('name', [
                              'admin',
                              'editor',
                              'redactor',
                          ]);
                      });

        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%");
        }
        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);
        activity()
            ->causedBy($this->user)
            ->performedOn($user)
            ->log('created');
        return $this->item($user, new UserTransformer());
    }

    public function update(UpdateUserRequest $request, $id)
    {
        $user = User::query()
                    ->findOrFail($id);
        $user->update($request->only(['name', 'surname']));
        activity()
            ->causedBy($this->user)
            ->performedOn($user)
            ->log('updated');
        return $this->item($user, new UserTransformer());
    }

    public function destroy($id)
    {
        /** @var User $user */
        $user = User::query()
                    ->findOrFail($id);
        try {
            $user->delete();
            activity()
                ->causedBy($this->user)
                ->performedOn($user)
                ->log('deleted');
        } 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();
        activity()
            ->causedBy($this->user)
            ->performedOn($user)
            ->log('confirmed');
        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();
        activity()
            ->causedBy($this->user)
            ->performedOn($user)
            ->log('enabled');
        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();
        activity()
            ->causedBy($this->user)
            ->performedOn($user)
            ->log('disabled');
        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()
                                     ->whereIn('name', [
                                         'admin',
                                         'editor',
                                         'redactor',
                                     ])
                                     ->get(), new RoleTransformer());
    }

    public function getAvailableUsers()
    {
        return $this->collection(User::query()->orderBy('name')->orderBy('surname')
                                     ->get(), new UserTransformer());
    }

}

Zerion Mini Shell 1.0