From 671760eda44f25ccabb87688397f9fd4f019975e Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 5 Jun 2019 10:43:23 +1000 Subject: [PATCH] Fixes for unique email rule --- app/Http/Controllers/UserController.php | 2 +- app/Http/Requests/User/UpdateUserRequest.php | 6 +++++- app/Http/ValidationRules/UniqueUserRule.php | 19 ++++++++++++++++++- app/Providers/EventServiceProvider.php | 4 ++-- app/Providers/RouteServiceProvider.php | 6 +++++- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 87275a5b3e95..0c9766fb13a1 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -114,7 +114,7 @@ class UserController extends BaseController * @param int $id * @return \Illuminate\Http\Response */ - public function update(UpdateUserRequest $request) + public function update(UpdateUserRequest $request, User $user) { // } diff --git a/app/Http/Requests/User/UpdateUserRequest.php b/app/Http/Requests/User/UpdateUserRequest.php index 268bad4992ca..93c8868b44f0 100644 --- a/app/Http/Requests/User/UpdateUserRequest.php +++ b/app/Http/Requests/User/UpdateUserRequest.php @@ -12,6 +12,7 @@ namespace App\Http\Requests\User; use App\Http\Requests\Request; +use App\Http\ValidationRules\UniqueUserRule; class UpdateUserRequest extends Request { @@ -31,10 +32,13 @@ class UpdateUserRequest extends Request public function rules() { + + $input = $this->all(); + return [ 'first_name' => 'required|string|max:100', 'last_name' => 'required|string:max:100', - 'email' => new UniqueUserRule(), + 'email' => ['required', new UniqueUserRule($this->user, $input['email'])], ]; } diff --git a/app/Http/ValidationRules/UniqueUserRule.php b/app/Http/ValidationRules/UniqueUserRule.php index 9f8dacaaedbd..10bbf9c2c763 100644 --- a/app/Http/ValidationRules/UniqueUserRule.php +++ b/app/Http/ValidationRules/UniqueUserRule.php @@ -22,6 +22,18 @@ use Illuminate\Contracts\Validation\Rule; class UniqueUserRule implements Rule { + public $user; + + public $new_email; + + public function __construct($user, $new_email) + { + + $this->user= $user; + + $this->new_email = $new_email; + } + /** * @param string $attribute * @param mixed $value @@ -29,7 +41,12 @@ class UniqueUserRule implements Rule */ public function passes($attribute, $value) { - return ! $this->checkIfEmailExists($value); //if it exists, return false! + /* If the input has not changed, return early! */ + + if($this->user->email == $this->new_email) + return true; + else + return ! $this->checkIfEmailExists($value); //if it exists, return false! } /** diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 3eea45d70b2c..b9bc399c2bac 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -91,10 +91,10 @@ class EventServiceProvider extends ServiceProvider * * @return void */ - public function boot(DispatcherContract $events) + public function boot() { - parent::boot($events); + parent::boot(); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index e627800eb6b9..ae93d8fa2ecb 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -43,10 +43,14 @@ class RouteServiceProvider extends ServiceProvider Route::bind('client', function ($value) { $client = \App\Models\Client::withTrashed()->where('id', $this->decodePrimaryKey($value))->firstOrFail(); - // $client->with('contacts', 'primary_contact','country'); return $client; }); + Route::bind('user', function ($value) { + $user = \App\Models\User::withTrashed()->where('id', $this->decodePrimaryKey($value))->firstOrFail(); + return $user; + }); + Route::bind('invoice', function ($value) { return \App\Models\Invoice::withTrashed()->where('id', $this->decodePrimaryKey($value))->firstOrFail(); });