Repo rebuild
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Countries\Rules;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\Validation\ValidationRule;
|
||||
use Modules\Countries\Models\Country;
|
||||
|
||||
class ValidIso3166CountryCode implements ValidationRule
|
||||
{
|
||||
public function __construct(
|
||||
private readonly bool $activeOnly = true,
|
||||
private readonly string $format = 'alpha2',
|
||||
) {}
|
||||
|
||||
public function validate(string $attribute, mixed $value, Closure $fail): void
|
||||
{
|
||||
if (! is_string($value) && ! is_int($value)) {
|
||||
$fail('The :attribute must be a valid ISO 3166 country code.');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$code = strtoupper(trim((string) $value));
|
||||
$query = Country::query();
|
||||
|
||||
match ($this->format) {
|
||||
'alpha2' => $query->where('alpha2', $code),
|
||||
'alpha3' => $query->where('alpha3', $code),
|
||||
'numeric' => $query->where('numeric', str_pad($code, 3, '0', STR_PAD_LEFT)),
|
||||
'any' => $query->forIsoCode($code),
|
||||
default => $query->whereRaw('1 = 0'),
|
||||
};
|
||||
|
||||
if ($this->activeOnly) {
|
||||
$query->where('is_active', true);
|
||||
}
|
||||
|
||||
if (! $query->exists()) {
|
||||
$fail('The :attribute must be a supported ISO 3166 country code.');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user