76 lines
2.5 KiB
PHP
76 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Requests;
|
|
|
|
use App\Http\Requests\Concerns\HasEmailRateLimit;
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Uwil\LaravelCommon\Helpers\ToolboxHelper;
|
|
use Illuminate\Validation\Validator;
|
|
|
|
class JoinGroupRequest extends FormRequest
|
|
{
|
|
use HasEmailRateLimit;
|
|
|
|
public function authorize(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function rules(): array
|
|
{
|
|
ToolboxHelper::validateRecaptcha($this);
|
|
|
|
return [
|
|
'lastName' => ['required', 'string', 'min:3', 'max:50'],
|
|
'firstName' => ['required', 'string', 'min:3','max:50'],
|
|
'email' => ['required', 'email', 'email:strict,rfc,spoof', 'max:255'],
|
|
'role' => ['required', 'string', 'min:3','max:30'],
|
|
'company' => ['required', 'string', 'min:3','max:60'],
|
|
'community' => ['required', 'string'],
|
|
'phone' => ['required', 'string', 'min:10','max:10', 'regex:/^[0-9+\-\s]+$/'],
|
|
'message' => ['required', 'string', 'min:5', 'max:255'],
|
|
'supportsManifesto' => ['nullable', 'boolean'],
|
|
'acceptsUsage' => ['required', 'accepted'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array<string, string>
|
|
*/
|
|
public function messages(): array
|
|
{
|
|
return [
|
|
'lastName.required' => 'Le nom est obligatoire.',
|
|
'firstName.required' => 'Le prénom est obligatoire.',
|
|
'email.required' => "L'adresse e-mail est obligatoire.",
|
|
'email.email' => "L'adresse e-mail n'est pas valide.",
|
|
'role.required' => 'La fonction est obligatoire.',
|
|
'company.required' => 'La société est obligatoire.',
|
|
'community.required' => 'Veuillez sélectionner une communauté.',
|
|
'phone.required' => 'Le numéro de téléphone est obligatoire.',
|
|
'message.required' => 'Le message est obligatoire.',
|
|
'acceptsUsage.accepted' => "Vous devez accepter l'utilisation de vos données.",
|
|
'phone.regex' => 'Le numéro de téléphone ne doit contenir que des chiffres.',
|
|
];
|
|
}
|
|
|
|
protected function rateLimitPrefix(): string
|
|
{
|
|
return 'join-group';
|
|
}
|
|
|
|
protected function rateLimitMessageKey(): string
|
|
{
|
|
return 'validation.too_many_attempts';
|
|
}
|
|
|
|
public function withValidator(Validator $validator): void
|
|
{
|
|
$validator->after(fn (Validator $v) => $this->applyEmailRateLimit($v));
|
|
}
|
|
}
|