File "UsersApiController.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Controllers/Api/V1/Admin/UsersApiController.php
File size: 6.58 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Controllers\Api\V1\Admin;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\MediaUploadingTrait;
use App\Http\Requests\Admin\StoreUserRequest;
use App\Http\Requests\Admin\UpdateUserRequest;
use App\Http\Resources\Admin\UserEmployeeResource;
use App\Http\Resources\Admin\UserResource;
use App\Http\Resources\Admin\UserResourceWithRoles;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\Gate;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpFoundation\Response;
class UsersApiController extends Controller
{
use MediaUploadingTrait;
public function index(Request $request)
{
abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$noPaging = $request->get('no_paging') === "true";
$users = User::when($request->filled('search'), function ($query) use ($request){
$search = addslashes($request->get('search'));
$query->whereRaw("name like '%".$search."%' OR email like '%".$search."%' OR phone_number like '%".$search."%' OR secondary_email like '%".$search."%' OR secondary_phone like '%".$search."%' OR company like '%".$search."%' OR fax_number like '%".$search."%'");
})->when($request->filled('role'), function ($query) use ($request){
$query->whereHas(
'roles', function($q) use ($request){
$q->where('id', $request->get('role'));
});
})->where('id', '<>', 1)
->where('id', '<>', auth()->id())
->with('roles')
->orderBy('created_at', 'DESC');
$users = $noPaging ? $users->get() : $users->paginate(50);
UserResource::withoutWrapping();
return UserResource::collection($users);
}
public function get_user_types()
{
abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
return \response()
->json(['data' => User::USER_TYPE_RADIO], Response::HTTP_OK);
}
public function get_user_durations()
{
abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
return \response()
->json(['data' => User::REMINDER_DURATION], Response::HTTP_OK);
}
public function get_employees(Request $request)
{
abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$users = User::when($request->filled('name'), function ($query) use ($request){
$query->where('name', 'like', "%{$request->get('name')}%");
})
->where('user_type', 2)->get();
UserEmployeeResource::withoutWrapping();
return UserEmployeeResource::collection($users);
}
public function get_customers()
{
abort_if(Gate::denies('user_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$users = User::where('user_type', 3)->get();
UserEmployeeResource::withoutWrapping();
return UserEmployeeResource::collection($users);
}
public function change_status($id)
{
abort_if(Gate::denies('user_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$user = User::findOrFail($id);
$user->status = !$user->status;
$user->save();
return response()
->json(['message' => 'Status updated successfully!'], Response::HTTP_OK);
}
public function store(StoreUserRequest $request)
{
$user = $request->validated();
$user = User::create($user);
$user->email_verified_at = now();
$user->save();
$user->roles()->sync($request->input('roles', []));
if ($request->hasFile('profile_image')) {
$user->addMediaFromRequest('profile_image')
->toMediaCollection('profile_image', 'user');
}
try {
event(new Registered($user));
} catch (\Exception $e) {
Log::info($e->getMessage());
}
return (new UserResource($user))
->response()
->setStatusCode(Response::HTTP_CREATED);
}
public function show(User $user)
{
abort_if(Gate::denies('user_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');
UserResourceWithRoles::withoutWrapping();
return new UserResourceWithRoles($user->load(['roles']));
}
public function update(UpdateUserRequest $request, User $user)
{
$user->update([
'name' => $request->get('name'),
'email' => $request->get('email'),
'phone_number' => $request->get('phone_number'),
'secondary_email' => $request->get('secondary_email'),
'secondary_phone' => $request->get('secondary_phone'),
'secondary_name' => $request->get('secondary_name'),
'company' => $request->get('company'),
'fax_number' => $request->get('fax_number'),
'user_type' => $request->get('user_type'),
'status' => $request->get('status'),
'reminder_duration' => $request->get('reminder_duration'),
'sms_notification' => $request->get('sms_notification'),
]);
if ($request->has('password')) {
$user->update([
'password' => $request->get('password')
]);
}
if ($request->has('birth_date')){
$user->update([
'birth_date' => Carbon::make($request->get('birth_date')),
]);
}
$user->roles()->sync($request->input('roles', []));
if ($request->hasFile('profile_image')) {
if (!empty($user->profile_image)) {
$user->profile_image->delete();
}
$user->addMediaFromRequest('profile_image')
->toMediaCollection('profile_image', 'user');
}
return (new UserResource($user))
->response()
->setStatusCode(Response::HTTP_CREATED);
}
public function destroy(User $user)
{
abort_if(Gate::denies('user_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
try {
$user->delete();
return response(['message' => 'User deleted successfully'], Response::HTTP_OK);
}catch (\Exception $e){
Log::channel('db_errors')->info('Record Deletion Error : User -> '.$user->id);
Log::channel('db_errors')->info($e->getMessage());
return response([
'message' => "Record not deleted.",
'errors' => ["error" => ["Unable to delete user."]]
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
}