UserInProject.php
1 <?php 2 3 namespace App\Rules; 4 5 use Illuminate\Contracts\Validation\InvokableRule; 6 use App\Models\Dossier; 7 use App\Models\User; 8 9 class UserInProject implements InvokableRule 10 { 11 public function __construct(public ?int $dossierId) 12 { 13 // 14 } 15 16 /** 17 * Run the validation rule. 18 * 19 * @param string $attribute 20 * @param mixed $value 21 * @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail 22 * @return void 23 */ 24 public function __invoke($attribute, $value, $fail) 25 { 26 $user = User::where('username', $value)->first(); 27 if (!$user) { 28 return $fail(__('validation.inbox.user.not_found')); 29 } 30 31 $dossier = Dossier::find($this->dossierId); 32 if (!$dossier) { 33 return $fail(__('validation.inbox.user.dossier_not_found')); 34 } 35 36 if ( 37 !$user->isInDossier($dossier) 38 and !$dossier->inboxFiles()->where('user_id', $user->id)->exists() 39 ) { 40 return $fail(__('validation.inbox.user.not_in_project')); 41 } 42 } 43 }