/ app / Rules / UserInProject.php
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  }