<?php
namespace App\Service;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Form\FormError;
use Symfony\Contracts\Translation\TranslatorInterface;
class ValidationService
{
static public function validateNotBlank($validator, $formField)
{
$assert = new Assert\NotBlank();
$errors = $validator->validate($formField->getData(), $assert);
if(count($errors) !== 0){
$formField->addError(new FormError("Campo obbligatorio"));
return false;
}
return true;
}
static public function validateNotBlankWithZero($validator, $formField)
{
$assert = new Assert\NotBlank();
$errors = $validator->validate($formField->getData(), $assert);
if(count($errors) !== 0 || $formField->getData() == 0){
$formField->addError(new FormError("Campo obbligatorio"));
return false;
}
return true;
}
static public function validateNotBlankType2($validator, $formData, $formFieldError)
{
$assert = new Assert\NotBlank();
$errors = $validator->validate($formData->getData(), $assert);
if(count($errors) !== 0){
$formFieldError->addError(new FormError("Campo obbligatorio"));
return false;
}
return true;
}
static public function validateNotBlankType3($validator, $formData, $formFieldError1, $formFieldError2)
{
$assert = new Assert\NotBlank();
$errors = $validator->validate($formData->getData(), $assert);
if(count($errors) !== 0){
$formFieldError1->addError(new FormError("Campo obbligatorio"));
$formFieldError2->addError(new FormError("Campo obbligatorio"));
return false;
}
return true;
}
static public function validateLength($formField, $length)
{
if(strlen($formField->getData()) > $length){
$formField->addError(new FormError("Inserire al massimo ".$length." caratteri"));
return false;
}
return true;
}
static public function validateDate($validator, $formField)
{
$assert = new Assert\Date();
$errors = $validator->validate($formField->getData(), $assert);
if(count($errors) !== 0){
$formField->addError(new FormError("Inserire una data valida"));
return false;
}
return true;
}
static public function validateCompareDate($formFieldFrom, $formFieldTo, $type, $errorMsg)
{
switch($type){
case 'minor':
if($formFieldFrom->getData()->format('Ymd') < $formFieldTo->getData()->format('Ymd')){
$formFieldFrom->addError(new FormError($errorMsg)); return false;
$formFieldTo->addError(new FormError($errorMsg)); return false;
}
break;
case 'minor-equal':
if($formFieldFrom->getData()->format('Ymd') <= $formFieldTo->getData()->format('Ymd')){
$formFieldFrom->addError(new FormError($errorMsg)); return false;
$formFieldTo->addError(new FormError($errorMsg)); return false;
}
break;
case 'major':
if($formFieldFrom->getData()->format('Ymd') > $formFieldTo->getData()->format('Ymd')){
$formFieldFrom->addError(new FormError($errorMsg)); return false;
$formFieldTo->addError(new FormError($errorMsg)); return false;
}
break;
case 'major-equal':
if($formFieldFrom->getData()->format('Ymd') >= $formFieldTo->getData()->format('Ymd')){
$formFieldFrom->addError(new FormError($errorMsg)); return false;
$formFieldTo->addError(new FormError($errorMsg)); return false;
}
break;
default: break;
}
return true;
}
static public function validateEmail($validator, $formField)
{
$assert = new Assert\Email();
$errors = $validator->validate($formField->getData(), $assert);
if(count($errors) !== 0){
$formField->addError(new FormError("Inserire una e-mail valida"));
return false;
}
return true;
}
static public function validateNotDuplicate($validator, $formField, $em, $entity, $parameters)
{
$value = $em->getRepository($entity)->findDuplicate($formField->getData(), $parameters);
if($value != null){
$formField->addError(new FormError("Valore giĆ presente"));
return false;
}
return true;
}
static public function validateRegex($validator, $formField, $pattern, $msg)
{
$assert = new Assert\Regex(['pattern' => $pattern]);
$errors = $validator->validate($formField->getData(), $assert);
if(count($errors) !== 0){
$formField->addError(new FormError($msg));
return false;
}
return true;
}
static public function validateFile($validator, $formField, $required, $file, $mb, $formats)
{
if($required){
$assert = new Assert\NotBlank();
$errors = $validator->validate($file, $assert);
if(count($errors) !== 0){
$formField->addError(new FormError("Inserire un file valido"));
return false;
}
}
if($file != null){
if(filesize($file) > ($mb * pow(2,20))){
$formField->addError(new FormError("Inserire un file di dimensione inferiore a ".$mb." MB"));
return false;
}
$found = false;
$first = true;
$formatsString = "";
foreach($formats as $format){
if($first) $first = false; else $formatsString.=', ';
$formatsString.= $format;
if($file->guessExtension() == $format){
$found = true;
break;
}
}
if(!$found){
$formField->addError(new FormError("Inserire un file in uno dei seguenti formati: ".$formatsString));
return false;
}
}
return true;
}
static public function validateMultipleEmailString($validator, $formField, $separatorPattern)
{
$emails = preg_split($separatorPattern, $formField->getData());
$assert = new Assert\Email();
foreach($emails as $email){
$errors = $validator->validate(rtrim(ltrim($email, " ")," "), $assert);
if(count($errors) !== 0){
$formField->addError(new FormError("Inserire una e-mail valida"));
return false;
}
}
return true;
}
}