user(); if ( $user->hasRole( 'User' ) or $user->hasRole( 'Supervisor' ) ) { $medical_center_id = $user->medical_center_id; } elseif ( $request->has( 'medical_center_id' ) && $request->medical_center_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' => 'Suspended' , 'verified' => "Verified" , '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 , 'verified' => "Verified" , '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( UpdateInfoUserRequest $request ) { auth( 'api' )->user()->update( $request->validated() ); 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(); $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 ) { $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 ); } }