Files
cssd-back/app/Http/Controllers/UserController.php
T
2019-09-15 19:29:43 +04:30

201 lines
7.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StoreUserRequest;
use App\MedicalCenter;
use App\User;
use App\Message;
class UserController extends Controller
{
public function index(Request $request)
{
$user = auth('api')->user();
if ($user->cant('list', User::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if ($user->hasRole('Supervisor')) {
$medical_center_id = $user->medical_center_id;
}
elseif($request->has('medicalCenter_id') && $request->medicalCenter_id) {
$medical_center_id = $request->medical_center_id;
} else {
$medical_center_id = null;
}
$Users = User::when($request->has('name') && $request->name, function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request)
{
$from = ($request->fromPicker) ? date($request->fromPicker . ' 00:00:00') : date('2010-01-01' . ' 00:00:00');
$upTo = ($request->upToPicker) ? date($request->upToPicker . ' 23:59:59') : date('Y-m-d' . ' 23:59:59');
return $query->whereBetween('created_at', [$from, $upTo]);
})
->when($request->has('cell_number') && $request->cell_number, function($query) use($request){
$query->where('cell_number', 'LIKE', '%'.$request->cell_number.'%');
})
->when($request->has('role') && $request->role, function($query) use($request){
$query->role($request->role);
})
->when($medical_center_id, function($query) use ($medical_center_id){
$query->where('medical_center_id', $medical_center_id);
})
->with(['medical_center', 'roles'])->paginate(10);
return \MessageResponse::data($Users);
}
public function store(StoreUserRequest $request)
{
if (auth('api')->user()->cant('store', User::class)) {
return \MessageResponse::error(trans('messages.failed'));
}
$UserData = [
'name' => $request->name ,
'cell_number' => $request->cell_number ,
'medical_center_id' => $request->medical_center_id ,
'status' => 'PreRegister',
'verified' => 1,
'password' => bcrypt($request->password),
];
User::create($UserData);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(User $User)
{
return \MessageResponse::data($User);
}
public function update(StoreUserRequest $request, User $User)
{
if (auth('api')->user()->cant('update', $User)) {
return \MessageResponse::error(trans('messages.failed'));
}
$UserData = [
'name' => $request->name ,
'cell_number' => $request->cell_number ,
'medical_center_id' => $request->medical_center_id ,
'status' => 'PreRegister',
'verified' => 1,
'password' => bcrypt($request->password),
];
$User->update($UserData);
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(User $User)
{
if (auth('api')->user()->cant('delete', $User)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$User->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function getByMedicalCenter(MedicalCenter $MedicalCenter)
{
$user = auth('api')->user();
if (auth('api')->user()->cant('getByMedicalCenter', $MedicalCenter)) {
return \MessageResponse::error(trans('messages.failed'));
}
$MedicalCenter = $MedicalCenter->load(['users' => function ($query) use ($user) {
if ($user->hasRole('User')) {
return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status'])->where('id', $user->id);
} else {
return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status']);
}
}, 'users.roles']);
return \MessageResponse::data($MedicalCenter);
}
public function changeStatus(User $User)
{
if (auth('api')->user()->cant('changeStatus', User::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if ($User->status == 'Active') {
$User->status = 'Suspended';
$tokens = \DB::table('oauth_access_tokens')->where('user_id', $User->id);
foreach($tokens->get() as $token) {
\DB::table('oauth_refresh_tokens')->where('access_token_id', $token->id)->delete();
}
$tokens->delete();
} else {
$User->status = 'Active';
}
$User->save();
return \MessageResponse::data($User);
}
public function changeRole(User $User, Request $request)
{
if (auth('api')->user()->cant('changeRole', User::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$User->syncRoles($request->roles);
return \MessageResponse::data($User);
}
public function updateInfo(Request $request)
{
auth('api')->user()->update($request->all());
return \MessageResponse::success(trans('messages.success'));
}
public function getInfo()
{
$user = auth('api')->user();
$user->load('medical_center');
return \MessageResponse::data([ 'user' => $user, 'roles' => auth('api')->user()->getRoleNames() ]);
}
public function getMessages()
{
$User = auth('api')->user();
// $ReceivedMessages = $User->messagesReceived;
// $SentMessages = $User->messagesSent;
$SentMessages = Message::with('recipient_user')->where('sender_user_id', $User->id)->get();
$ReceivedMessages = Message::with('sender_user')->where('recipient_user_id', $User->id)->get();
return \MessageResponse::data(['ReceivedMessages' => $ReceivedMessages, 'SentMessages' => $SentMessages]);
}
public function searchUser(Request $request)
{
// if (auth('api')->user()->cant('searchUser', User::class)) {
// return \MessageResponse::error(trans('messages.access_denied'));
// }
$role = null;
$medical_center_id = null;
$User = auth('api')->user();
if ($User->hasRole('Supervisor') || $User->hasRole('User')) {
$medical_center_id = $User->medical_center_id;
if ($User->hasRole('Supervisor')){
$role = 'Admin';
}
}
$users = User::where('id', '<>', $User->id)->select('id', 'name')->where('name', 'LIKE', '%'.$request->name.'%')
->when($medical_center_id, function($query) use ($medical_center_id){
$query->where('medical_center_id', $medical_center_id);
})
->when($role, function($query) use($role){
$query->role($role);
})
->get();
return \MessageResponse::data($users);
}
}