updated rules

This commit is contained in:
2023-05-08 21:51:52 +10:00
parent 86a0936cd4
commit e2efa1f1bd

View File

@@ -2,19 +2,12 @@
namespace App\Http\Requests; namespace App\Http\Requests;
use App\Rules\RequiredIfAny;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use App\Rules\Uniqueish; use App\Rules\Uniqueish;
class UserRequest extends BaseRequest class UserRequest extends BaseRequest
{ {
/**
* Fields that are required unless all are null.
*
* @var string[]
*/
protected $required_with_all = ['first_name','last_name','display_name','phone'];
/** /**
* Apply the additional POST base rules to this request * Apply the additional POST base rules to this request
* *
@@ -22,10 +15,18 @@ class UserRequest extends BaseRequest
*/ */
public function postRules() public function postRules()
{ {
$user = auth()->user();
$isAdminUser = $user->hasPermission('admin/users');
return [ return [
'first_name' => 'required|string|max:255|min:2', 'first_name' => ($isAdminUser === true ? 'required_with:last_name,display_name,phone' : 'required') . '|string|max:255|min:2',
'last_name' => 'required|string|max:255|min:2', 'last_name' => ($isAdminUser === true ? 'required_with:first_name,display_name,phone' : 'required') . '|string|max:255|min:2',
'display_name' => 'required|string|max:255|uniqueish:users', 'display_name' => [
$isAdminUser === true ? 'required_with:first_name,last_name,phone' : 'required',
'string',
'max:255',
new Uniqueish('users')
],
'email' => 'required|string|email|max:255|unique:users', 'email' => 'required|string|email|max:255|unique:users',
'phone' => ['string', 'regex:/^(\+|00)?[0-9][0-9 \-\(\)\.]{7,32}$/'], 'phone' => ['string', 'regex:/^(\+|00)?[0-9][0-9 \-\(\)\.]{7,32}$/'],
'email_verified_at' => 'date' 'email_verified_at' => 'date'
@@ -39,34 +40,36 @@ class UserRequest extends BaseRequest
*/ */
public function putRules() public function putRules()
{ {
$user = $this->route('user'); $user = auth()->user();
$ruleUser = $this->route('user');
$required_with_all = count($this->required_with_all) > 0 ? 'required_with_all:' . implode(',', $this->required_with_all) : ''; $isAdminUser = $user->hasPermission('admin/users');
return [ return [
'first_name' => "nullable|string|required_if_any:users,last_name,display_name,phone,password|between:2,255", 'first_name' => [
'last_name' => "nullable|required_if_any:users,first_name,display_name,phone,password|string|max:255|min:2", $isAdminUser === true ? 'required_with:last_name,display_name,phone' : 'required',
'display_name' => [
'nullable',
'required_if_any:users,first_name,last_name,phone,password',
'string', 'string',
'max:255', 'between:2,255',
'min:2', ],
(new Uniqueish('users', 'display_name'))->ignore($user->id), 'last_name' => $isAdminUser === true ? 'required_with:first_name,display_name,phone|string|between:2,255' : 'required|string|between:2,255',
'display_name' => [
$isAdminUser === true ? 'required_with:first_name,last_name,phone' : 'required',
'string',
'between:2,255',
(new Uniqueish('users', 'display_name'))->ignore($ruleUser->id)
], ],
'email' => [ 'email' => [
'string', 'string',
'email', 'email',
'max:255', 'max:255',
Rule::unique('users')->ignore($user->id)->when( Rule::unique('users')->ignore($ruleUser->id)->when(
$this->email !== $user->email, $this->email !== $ruleUser->email,
function ($query) { function ($query) {
return $query->where('email', $this->email); return $query->where('email', $this->email);
} }
), ),
], ],
'phone' => ['nullable', 'regex:/^(\+|00)?[0-9][0-9 \-\(\)\.]{7,32}$/'], 'phone' => ['nullable', 'regex:/^(\+|00)?[0-9][0-9 \-\(\)\.]{7,32}$/'],
'password' => "nullable|{$required_with_all}|string|min:8" 'password' => "nullable|string|min:8"
]; ];
} }
} }