Spaces:
No application file
No application file
namespace Mautic\ReportBundle\Scheduler\Validator; | |
use Mautic\ReportBundle\Entity\Report; | |
use Mautic\ReportBundle\Scheduler\Builder\SchedulerBuilder; | |
use Mautic\ReportBundle\Scheduler\Exception\InvalidSchedulerException; | |
use Mautic\ReportBundle\Scheduler\Exception\NotSupportedScheduleTypeException; | |
use Mautic\ReportBundle\Scheduler\Exception\ScheduleNotValidException; | |
use Symfony\Component\Validator\Constraint; | |
use Symfony\Component\Validator\ConstraintValidator; | |
class ScheduleIsValidValidator extends ConstraintValidator | |
{ | |
public function __construct( | |
private SchedulerBuilder $schedulerBuilder | |
) { | |
} | |
/** | |
* @param Report $report | |
*/ | |
public function validate($report, Constraint $constraint): void | |
{ | |
if (!$report->isScheduled()) { | |
$report->setAsNotScheduled(); | |
return; | |
} | |
if (is_null($report->getToAddress())) { | |
$this->context->buildViolation('mautic.report.schedule.to_address_required') | |
->atPath('toAddress') | |
->addViolation(); | |
} | |
if ($report->isScheduledDaily()) { | |
$report->ensureIsDailyScheduled(); | |
$this->buildScheduler($report); | |
return; | |
} | |
if ($report->isScheduledWeekly()) { | |
try { | |
$report->ensureIsWeeklyScheduled(); | |
$this->buildScheduler($report); | |
return; | |
} catch (ScheduleNotValidException) { | |
$this->addReportScheduleNotValidViolation(); | |
} | |
} | |
if ($report->isScheduledMonthly()) { | |
try { | |
$report->ensureIsMonthlyScheduled(); | |
$this->buildScheduler($report); | |
return; | |
} catch (ScheduleNotValidException) { | |
$this->addReportScheduleNotValidViolation(); | |
} | |
} | |
} | |
private function addReportScheduleNotValidViolation(): void | |
{ | |
$this->context->buildViolation('mautic.report.schedule.notValid') | |
->atPath('isScheduled') | |
->addViolation(); | |
} | |
private function buildScheduler(Report $report): void | |
{ | |
try { | |
$this->schedulerBuilder->getNextEvent($report); | |
return; | |
} catch (InvalidSchedulerException) { | |
$message = 'mautic.report.schedule.notValid'; | |
} catch (NotSupportedScheduleTypeException) { | |
$message = 'mautic.report.schedule.notSupportedType'; | |
} | |
$this->context->buildViolation($message) | |
->atPath('isScheduled') | |
->addViolation(); | |
} | |
} | |