From 09f83c20442b69c3699e508083a6b36a19e39f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20=C3=87ak=C4=B1rel?= Date: Thu, 29 Apr 2021 15:19:05 +0300 Subject: [PATCH] Add customer/user's email validation --- app/Http/Requests/Auth/User.php | 18 +++++++++++++++++- app/Http/Requests/Common/Contact.php | 16 ++++++++++++++-- app/Http/Requests/Portal/Profile.php | 22 +++++++++++++++++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/app/Http/Requests/Auth/User.php b/app/Http/Requests/Auth/User.php index 189aace21..1854306e3 100644 --- a/app/Http/Requests/Auth/User.php +++ b/app/Http/Requests/Auth/User.php @@ -2,10 +2,14 @@ namespace App\Http\Requests\Auth; +use App\Traits\Contacts; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class User extends FormRequest { + use Contacts; + /** * Determine if the user is authorized to make this request. * @@ -29,12 +33,22 @@ class User extends FormRequest $picture = 'mimes:' . config('filesystems.mimes') . '|between:0,' . config('filesystems.max_size') * 1024; } + $email = ['required', 'email']; + if ($this->getMethod() == 'PATCH') { // Updating user $id = is_numeric($this->user) ? $this->user : $this->user->getAttribute('id'); $password = ''; $companies = $this->user->can('read-common-companies') ? 'required' : ''; $roles = $this->user->can('read-auth-roles') ? 'required' : ''; + + if ($this->user->contact) { + $email[] = Rule::unique('contacts') + ->ignore($this->user->contact->id) + ->where('company_id', company_id()) + ->where('type', $this->getCustomerTypes()) + ->where('deleted_at'); + } } else { // Creating user $id = null; @@ -43,9 +57,11 @@ class User extends FormRequest $roles = 'required'; } + $email[] = Rule::unique('users')->ignore($id)->where('deleted_at'); + return [ 'name' => 'required|string', - 'email' => 'required|email|unique:users,email,' . $id . ',id,deleted_at,NULL', + 'email' => $email, 'password' => $password . 'confirmed', 'companies' => $companies, 'roles' => $roles, diff --git a/app/Http/Requests/Common/Contact.php b/app/Http/Requests/Common/Contact.php index 1c93fcb3c..7edca1811 100644 --- a/app/Http/Requests/Common/Contact.php +++ b/app/Http/Requests/Common/Contact.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\Common; use App\Abstracts\Http\FormRequest; +use Illuminate\Validation\Rule; class Contact extends FormRequest { @@ -23,7 +24,7 @@ class Contact extends FormRequest */ public function rules() { - $email = ''; + $email = []; $required = ''; $type = $this->request->get('type', 'customer'); @@ -43,7 +44,18 @@ class Contact extends FormRequest } if (!empty($this->request->get('email'))) { - $email = 'email|unique:contacts,NULL,' . $id . ',id,company_id,' . $company_id . ',type,' . $type . ',deleted_at,NULL'; + $email[] = 'email'; + $email[] = Rule::unique('contacts') + ->ignore($id) + ->where('company_id', $company_id) + ->where('type', $type) + ->where('deleted_at'); + + if (isset($model) && $this->$model->user_id) { + $email[] = Rule::unique('users') + ->ignore($this->$model->user_id) + ->where('deleted_at'); + } } return [ diff --git a/app/Http/Requests/Portal/Profile.php b/app/Http/Requests/Portal/Profile.php index 097c501b9..f90648080 100644 --- a/app/Http/Requests/Portal/Profile.php +++ b/app/Http/Requests/Portal/Profile.php @@ -2,10 +2,14 @@ namespace App\Http\Requests\Portal; +use App\Traits\Contacts; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class Profile extends FormRequest { + use Contacts; + /** * Determine if the user is authorized to make this request. * @@ -31,9 +35,25 @@ class Profile extends FormRequest $picture = 'mimes:' . config('filesystems.mimes') . '|between:0,' . config('filesystems.max_size') * 1024; } + $email = [ + 'required', + 'email', + Rule::unique('users') + ->ignore($id) + ->where('deleted_at'), + ]; + + if (user()->contact) { + $email[] = Rule::unique('contacts') + ->ignore(user()->contact->id) + ->where('company_id', company_id()) + ->where('type', $this->getCustomerTypes()) + ->where('deleted_at'); + } + return [ 'name' => 'required|string', - 'email' => 'required|email|unique:users,email,' . $id . ',id,deleted_at,NULL', + 'email' => $email, 'password' => 'confirmed', 'picture' => $picture, ];