diff --git a/app/Http/Requests/User/StoreUserRequest.php b/app/Http/Requests/User/StoreUserRequest.php index 57d8baf4b465..09b4e149aa76 100644 --- a/app/Http/Requests/User/StoreUserRequest.php +++ b/app/Http/Requests/User/StoreUserRequest.php @@ -16,6 +16,7 @@ use App\Factory\UserFactory; use App\Http\Requests\Request; use App\Http\ValidationRules\Ninja\CanAddUserRule; use App\Http\ValidationRules\User\AttachableUser; +use App\Http\ValidationRules\User\HasValidPhoneNumber; use App\Http\ValidationRules\ValidUserForCompany; use App\Libraries\MultiDB; use App\Models\User; @@ -49,6 +50,7 @@ class StoreUserRequest extends Request if (Ninja::isHosted()) { $rules['id'] = new CanAddUserRule(); + $rules['phone'] = ['sometimes', new HasValidPhoneNumber()]; } return $rules; diff --git a/app/Http/Requests/User/UpdateUserRequest.php b/app/Http/Requests/User/UpdateUserRequest.php index 2e2a95bb7f7b..2e98774d1d0c 100644 --- a/app/Http/Requests/User/UpdateUserRequest.php +++ b/app/Http/Requests/User/UpdateUserRequest.php @@ -13,9 +13,13 @@ namespace App\Http\Requests\User; use App\Http\Requests\Request; use App\Http\ValidationRules\UniqueUserRule; +use App\Http\ValidationRules\User\HasValidPhoneNumber; class UpdateUserRequest extends Request { + + private bool $phone_has_changed = false; + /** * Determine if the user is authorized to make this request. * @@ -38,6 +42,9 @@ class UpdateUserRequest extends Request $rules['email'] = ['email', 'sometimes', new UniqueUserRule($this->user, $input['email'])]; } + if(Ninja::isHosted() && $this->phone_has_changed) + $rules['phone'] = ['sometimes', new HasValidPhoneNumber()]; + return $rules; } @@ -57,6 +64,10 @@ class UpdateUserRequest extends Request $input['last_name'] = strip_tags($input['last_name']); } + if(strlen($input['phone']) > 1 && ($this->user->phone != $input['phone'])) + $this->phone_has_changed = true; + $this->replace($input); } + } diff --git a/app/Http/ValidationRules/User/HasValidPhoneNumber.php b/app/Http/ValidationRules/User/HasValidPhoneNumber.php new file mode 100644 index 000000000000..556bce5bf391 --- /dev/null +++ b/app/Http/ValidationRules/User/HasValidPhoneNumber.php @@ -0,0 +1,77 @@ +user()->account?->companies()?->first()?->country(); + + if(!$country || strlen($user->phone) < 2) + return true; + + $countryCode = $country->iso_3166_2; + + try{ + + $phone_number = $twilio->lookups->v1->phoneNumbers($value) + ->fetch(["countryCode" => $countryCode]); + + $user = auth()->user(); + $user->phone = $phone_number->phoneNumber; + $user->verified_phone_number = true; + $user->save(); + + return true; + + } + catch(\Exception $e) { + return false; + } + + } + + public function messages() + { + return [ + 'phone' => ctrans('texts.phone_validation_error'), + ]; + } +} diff --git a/app/Jobs/User/VerifyPhone.php b/app/Jobs/User/VerifyPhone.php index 592e965d8527..6aa0823b0ff2 100644 --- a/app/Jobs/User/VerifyPhone.php +++ b/app/Jobs/User/VerifyPhone.php @@ -22,7 +22,6 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Http\Request; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; diff --git a/lang/en/texts.php b/lang/en/texts.php index e8d3de54481c..27f7c0626744 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -4777,7 +4777,7 @@ $LANG = array( 'invoice_task_project' => 'Invoice Task Project', 'invoice_task_project_help' => 'Add the project to the invoice line items', 'bulk_action' => 'Bulk Action', - + 'phone_validation_error' => 'This phone number is not valid, please enter in E.164 format', ); return $LANG;