19 declare(strict_types=1);
    30         bool $has_flexible_schedule,
    32         ?
int $default_schedule_value,
    36         $job_instance = 
new class (
    37             $has_flexible_schedule,
    38             $default_schedule_type,
    39             $default_schedule_value,
    45                 private readonly 
bool $has_flexible_schedule,
    47                 private readonly ?
int $default_schedule_value,
    51                 $this->schedule_type = $schedule_type;
    52                 $this->schedule_value = $schedule_value;
    55             public function getId(): 
string    65             public function getDescription(): 
string    70             public function hasAutoActivation(): 
bool    75             public function hasFlexibleSchedule(): 
bool    77                 return $this->has_flexible_schedule;
    82                 return $this->default_schedule_type;
    85             public function getDefaultScheduleValue(): ?
int    87                 return $this->default_schedule_value;
   100         return $job_instance;
   109             'Manual Run is Always Due' => [
   112                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   114                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   119                 CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   123             'Job Without Any Run is Always Due' => [
   126                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   128                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   133                 CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   137             'Daily Schedule / Did not run Today' => [
   140                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   142                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   149                     return self::$now->modify(
'-1 day');
   151                 CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   155             'Daily Schedule / Did run Today' => [
   158                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   160                     CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   169                 CronJobScheduleType::SCHEDULE_TYPE_DAILY,
   173             'Weekly Schedule / Did not run this Week' => [
   176                     CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   178                     CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   185                     return self::$now->modify(
'-1 week');
   187                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   191             'Weekly Schedule / Did run this Week' => [
   194                     CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   196                     CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   203                     return self::$now->modify(
'monday this week');
   205                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   209             'Monthly Schedule / Did not run this Month' => [
   212                     CronJobScheduleType::SCHEDULE_TYPE_MONTHLY,
   214                     CronJobScheduleType::SCHEDULE_TYPE_MONTHLY,
   221                     return self::$now->modify(
'last day of last month');
   223                 CronJobScheduleType::SCHEDULE_TYPE_MONTHLY,
   227             'Monthly Schedule / Did run this Month' => [
   230                     CronJobScheduleType::SCHEDULE_TYPE_MONTHLY,
   232                     CronJobScheduleType::SCHEDULE_TYPE_MONTHLY,
   239                     return self::$now->modify(
'first day of this month');
   241                 CronJobScheduleType::SCHEDULE_TYPE_MONTHLY,
   245             'Yearly Schedule / Did not run this Year' => [
   257                     return self::$now->modify(
'-1 year');
   263             'Yearly Schedule / Did run this Year' => [
   275                     return self::$now->modify(
'first day of January this year');
   281             'Quarterly Schedule / Did not run this Quarter' => [
   284                     CronJobScheduleType::SCHEDULE_TYPE_QUARTERLY,
   286                     CronJobScheduleType::SCHEDULE_TYPE_QUARTERLY,
   293                     $offset = (((
int) self::$now->format(
'n')) - 1) % 3;
   294                     self::$this_quarter_start = self::$now->modify(
"first day of -$offset month midnight");
   296                     return self::$this_quarter_start->modify(
'-1 seconds');
   298                 CronJobScheduleType::SCHEDULE_TYPE_QUARTERLY,
   302             'Quarterly Schedule / Did run this Quarter' => [
   305                     CronJobScheduleType::SCHEDULE_TYPE_QUARTERLY,
   307                     CronJobScheduleType::SCHEDULE_TYPE_QUARTERLY,
   314                     $offset = (((
int) self::$now->format(
'n')) - 1) % 3;
   315                     self::$this_quarter_start = self::$now->modify(
"first day of -$offset month midnight");
   317                     return self::$this_quarter_start->modify(
'+30 seconds');
   319                 CronJobScheduleType::SCHEDULE_TYPE_QUARTERLY,
   323             'Minutely Schedule / Did not run this Minute' => [
   326                     CronJobScheduleType::SCHEDULE_TYPE_IN_MINUTES,
   328                     CronJobScheduleType::SCHEDULE_TYPE_IN_MINUTES,
   335                     return self::$now->modify(
'-1 minute');
   337                 CronJobScheduleType::SCHEDULE_TYPE_IN_MINUTES,
   341             'Minutely Schedule / Did run this Minute' => [
   344                     CronJobScheduleType::SCHEDULE_TYPE_IN_MINUTES,
   346                     CronJobScheduleType::SCHEDULE_TYPE_IN_MINUTES,
   353                     return self::$now->modify(
'-30 seconds');
   355                 CronJobScheduleType::SCHEDULE_TYPE_IN_MINUTES,
   359             'Hourly Schedule / Did not run this Hour' => [
   362                     CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS,
   364                     CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS,
   371                     return self::$now->modify(
'-7 hours');
   373                 CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS,
   377             'Hourly Schedule / Did run this Hour' => [
   380                     CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS,
   382                     CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS,
   389                     return self::$now->modify(
'-7 hours +30 seconds');
   391                 CronJobScheduleType::SCHEDULE_TYPE_IN_HOURS,
   395             'Every 5 Days Schedule / Did not run for 5 Days' => [
   398                     CronJobScheduleType::SCHEDULE_TYPE_IN_DAYS,
   400                     CronJobScheduleType::SCHEDULE_TYPE_IN_DAYS,
   407                     return self::$now->modify(
'-5 days');
   409                 CronJobScheduleType::SCHEDULE_TYPE_IN_DAYS,
   413             'Every 5 Days Schedule / Did run withing the last 5 Days' => [
   416                     CronJobScheduleType::SCHEDULE_TYPE_IN_DAYS,
   418                     CronJobScheduleType::SCHEDULE_TYPE_IN_DAYS,
   425                     return self::$now->modify(
'-4 days');
   427                 CronJobScheduleType::SCHEDULE_TYPE_IN_DAYS,
   441         ?callable $last_run_datetime_callable,
   443         ?
int $schedule_value,
   446         $last_run_datetime = $last_run_datetime_callable ? $last_run_datetime_callable() : null;
   449             $job_instance->
isDue($last_run_datetime, $schedule_type, $schedule_value, $is_manual_run),
   450             'Last run: ' . ($last_run_datetime ? $last_run_datetime->format(DATE_ATOM) : 
'never')
   456         yield 
'Different Week' => [
   459                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   461                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   469                 return self::$now->modify(
'-1 week'); 
   474         yield 
'Same Week and Year, but different Month: December (now) and January (Last run)' => [
   477                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   479                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   494         yield 
'Same Week and Year and same Month: January' => [
   497                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   499                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   507                 return self::$now->modify(
   514         yield 
'Same Week (52nd), but Year Difference > 1' => [
   517                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   519                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   527                 return self::$now->modify(
'tuesday this week')->modify(
   534         yield 
'Same Week (52nd) in different Years, but Turn of the Year' => [
   537                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   539                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   547                 return self::$now->modify(
   554         yield 
'Same Week (52nd) in different Years, but not Turn of the Year' => [
   557                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   559                 CronJobScheduleType::SCHEDULE_TYPE_WEEKLY,
   581         callable $last_run_datetime_provider,
   584         $last_run_datetime = $last_run_datetime_provider();
   588             $job_instance->
isDue(
   594             'Last run: ' . $last_run_datetime->format(DATE_ATOM)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
isDue(?DateTimeImmutable $last_run, ?CronJobScheduleType $schedule_type, ?int $schedule_value, bool $is_manually_executed=false)
 
testWeeklySchedules(ilCronJob $job_instance, callable $last_run_datetime_provider, bool $should_be_due)
weeklyScheduleProvider 
 
static DateTimeImmutable $this_quarter_start
 
static getJob(bool $has_flexible_schedule, CronJobScheduleType $default_schedule_type, ?int $default_schedule_value, CronJobScheduleType $schedule_type, ?int $schedule_value)
 
testSchedule(ilCronJob $job_instance, bool $is_manual_run, ?callable $last_run_datetime_callable, CronJobScheduleType $schedule_type, ?int $schedule_value, bool $should_be_due)
jobProvider 
 
static DateTimeImmutable $now
 
static weeklyScheduleProvider()
 
__construct(Container $dic, ilPlugin $plugin)
 
getScheduleValue()
Get current schedule value (if flexible) 
 
getScheduleType()
Get current schedule type (if flexible)