, run_at: DateTimeImmutable|null, group: string, unique_key: string|null}> */ private array $jobs = []; /** * Next id. * * @var int */ private int $next_id = 1; /** * {@inheritDoc} * * @param string $hook Hook. * @param array $args Args. * @param DateTimeImmutable|null $run_at Run at. * @param string $group Group. * @param string|null $unique_key Unique. */ public function schedule_single( string $hook, array $args, ?DateTimeImmutable $run_at = null, string $group = 'bookline', ?string $unique_key = null ): int { if ( null !== $unique_key ) { foreach ( $this->jobs as $job ) { if ( $job['hook'] === $hook && $job['unique_key'] === $unique_key && $job['group'] === $group ) { return $job['id']; } } } $id = $this->next_id++; $this->jobs[] = [ 'id' => $id, 'hook' => $hook, 'args' => $args, 'run_at' => $run_at, 'group' => $group, 'unique_key' => $unique_key, ]; return $id; } /** * {@inheritDoc} * * @param string $hook Hook. * @param int $interval Interval. * @param string $group Group. */ public function schedule_recurring( string $hook, int $interval, string $group = 'bookline' ): void { $this->schedule_single( $hook, [ 'interval' => $interval ], null, $group, 'recurring:' . $hook ); } /** * {@inheritDoc} * * @param string $hook Hook. * @param array $args Args. * @param string $group Group. */ public function cancel( string $hook, array $args = [], string $group = 'bookline' ): void { $this->jobs = array_values( array_filter( $this->jobs, static function ( array $job ) use ( $hook, $args, $group ): bool { if ( $job['hook'] !== $hook || $job['group'] !== $group ) { return true; } return $job['args'] !== $args; } ) ); } /** * {@inheritDoc} * * @param string $group Group. */ public function cancel_group( string $group = 'bookline' ): void { $this->jobs = array_values( array_filter( $this->jobs, static fn( array $job ): bool => $job['group'] !== $group ) ); } /** * {@inheritDoc} */ public function is_available(): bool { return true; } /** * {@inheritDoc} * * @param string $group Group. */ public function pending_count( string $group = 'bookline' ): int { $count = 0; foreach ( $this->jobs as $job ) { if ( $job['group'] === $group ) { ++$count; } } return $count; } /** * {@inheritDoc} * * @param string $group Group. */ public function failed_count( string $group = 'bookline' ): int { unset( $group ); return 0; } /** * All jobs (tests). * * @return list, run_at: DateTimeImmutable|null, group: string, unique_key: string|null}> * * @since 0.1.0 */ public function jobs(): array { return $this->jobs; } }