<?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;
}
static public function validateCsvDelimiter($filename, $delimiter, $formField)
{
$valid = true;
$handle = fopen($filename, 'r');
if(strlen($delimiter) !== 1)
$valid = false;
if($valid)
if($handle === false)
$valid = false;
// Il delimitatore deve essere presente nella prima riga
if($valid){
if(strpos(fgets($handle), $delimiter) === false)
$valid = false;
}
// Proviamo a usare fgetcsv
if($valid){
$row = fgetcsv($handle, 0, $delimiter);
$valid = is_array($row) && count($row) > 1;
}
fclose($handle);
if(!$valid){
$formField->addError(new FormError("Il separatore selezionato non trova riscontro nel file!"));
return false;
}
return true;
}
static public function validateCsvHasEmptyRows($filename, $separator, $formField)
{
$valid = true;
if(!file_exists($filename))
return false;
if(($handle = fopen($filename, 'r')) !== false){
while(($row = fgetcsv($handle, 0, $separator)) !== false){
// Rimuovo spazi e valori null
$row = array_map('trim', $row);
// Se TUTTI i valori sono vuoti => riga vuota
if (count(array_filter($row, fn($v) => $v !== '')) === 0) {
$valid = false;
}
}
}
fclose($handle);
if(!$valid){
$formField->addError(new FormError("Il file contiene righe vuote!"));
return false;
}
return true;
}
}