authService->check(); } #[\Override] protected function prepareForValidation(): void { $rawSites = $this->input('employee_sites'); if (is_string($rawSites)) { $split = preg_split('/[\s,]+/', $rawSites) ?: []; $filtered = array_filter( array_map(static fn (string $s): string => strtoupper(trim($s)), $split), static fn (string $s): bool => $s !== '' ); $sites = array_values(array_unique($filtered)); } elseif (is_array($rawSites)) { $filtered = array_filter( array_map(static fn (mixed $s): string => is_string($s) ? strtoupper(trim($s)) : '', $rawSites), static fn (string $s): bool => $s !== '' ); $sites = array_values(array_unique($filtered)); } else { $sites = []; } $this->merge([ 'employee_sites' => $sites, ]); } /** * @return array */ public function rules(): array { return [ 'employee_sites' => ['present', 'array'], 'employee_sites.*' => ['string', 'regex:/^[A-Z]{2,}$/'], ]; } #[\Override] public function attributes(): array { return [ 'employee_sites' => 'Sites des salariés', 'employee_sites.*' => 'Code de site des salariés', ]; } /** * @return array */ #[\Override] public function messages(): array { return [ 'employee_sites.*.regex' => 'Chaque code de site doit être composé d\'au moins 2 lettres majuscules (ex: PA, NA, LY).', ]; } public function toUpdateSettingsInput(): UpdateSettingsInput { /** @var array $sites */ $sites = $this->validated('employee_sites', []); return new UpdateSettingsInput( employeeSites: array_map( static fn (string $site): ShopperSiteCode => new ShopperSiteCode($site), $sites ) ); } }