ldc-boutique-cnc/app/Rules/Adult.php
2022-09-03 16:56:16 +02:00

98 lines
2.3 KiB
PHP

<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Carbon\Carbon;
class Adult implements Rule
{
/**
* Error message
*
* @var string
*/
private $error_messages = "la date de naissance est incorrecte";
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Determine if the validation rule passes.
*
* @param mixed $attribute
* @param mixed $value
* @return boolean
*
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
*/
public function passes($attribute, $value)
{
//@phpcs:enable
$MJ = Carbon::now()->subYears(18);
if ($this->isSqlDate($value)) {
$d = Carbon::createFromFormat('Y-m-d', $value);
if (!$d->lessThanOrEqualTo($MJ)) {
$this->error_messages = __("Vous devez être majeur pour vous inscrire.");
return false;
}
} elseif ($this->isFormDate($value)) {
$d = Carbon::createFromFormat('d/m/Y', $value);
if (!$d->lessThanOrEqualTo($MJ)) {
$this->error_messages = __("Vous devez être majeur pour vous inscrire.");
return false;
}
} else {
$this->error_messages = __("Erreur sur le champs : date de naissance.");
return false;
}
// Pass.
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return $this->error_messages;
}
/**
* Check if provided string is formatted for mysql
*
* @param string $date
* @return boolean
*/
private function isSqlDate(string $date)
{
if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)) {
return true;
}
return false;
}
/**
* Check if provided string is formatted DD/MM/AAAA
*
* @param string $date
* @return boolean
*/
private function isFormDate(string $date)
{
if (preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$/", $date)) {
return true;
}
return false;
}
}