This commit is contained in:
Yuri Kuznetsov
2024-02-29 15:47:59 +02:00
parent 55dd4ecf74
commit 9b3c59bfa4
2 changed files with 18 additions and 19 deletions
@@ -27,40 +27,36 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Services;
namespace Espo\Classes\FieldValidators\ScheduledJob\Scheduling;
use Cron\CronExpression;
use Espo\Core\Utils\DateTime;
use Espo\Entities\ScheduledJob as ScheduledJobEntity;
use Espo\Core\FieldValidation\Validator;
use Espo\Core\FieldValidation\Validator\Data;
use Espo\Core\FieldValidation\Validator\Failure;
use Espo\Entities\ScheduledJob;
use Espo\ORM\Entity;
use Espo\Core\Exceptions\BadRequest;
use Exception;
use stdClass;
/**
* @extends Record<ScheduledJobEntity>
* @implements Validator<ScheduledJob>
*/
class ScheduledJob extends Record
class Valid implements Validator
{
// @todo Move to field validator.
public function processValidation(Entity $entity, stdClass $data): void
public function validate(Entity $entity, string $field, Data $data): ?Failure
{
parent::processValidation($entity, $data);
$scheduling = $entity->getScheduling();
if (!$scheduling) {
throw new BadRequest();
if ($scheduling === null) {
return null;
}
try {
$cronExpression = CronExpression::factory($scheduling);
/** @phpstan-ignore-next-line*/
$cronExpression->getNextRunDate()->format(DateTime::SYSTEM_DATE_TIME_FORMAT);
new CronExpression($scheduling);
}
catch (Exception) {
throw new BadRequest("Not valid scheduling expression.");
return Failure::create();
}
return null;
}
}
@@ -20,7 +20,10 @@
"required": true,
"view": "views/scheduled-job/fields/scheduling",
"tooltip": true,
"audited": true
"audited": true,
"validatorClassNameList": [
"Espo\\Classes\\FieldValidators\\ScheduledJob\\Scheduling\\Valid"
]
},
"lastRun": {
"type": "datetime",