1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
<?php
namespace AutomateWoo\Jobs;
use AutomateWoo\Exceptions\InvalidArgument; use AutomateWoo\Traits\ArrayValidator; use Exception;
defined( 'ABSPATH' ) || exit;
/** * AbstractOneTimeActionSchedulerJob class. * * A "one time job" is a job that receives all the items it needs to process immediately instead of in batches. * * @since 5.2.0 */ abstract class AbstractOneTimeActionSchedulerJob extends AbstractActionSchedulerJob implements OneTimeActionSchedulerJobInterface {
use ArrayValidator;
/** * Process a single item. * * @param array $item A single item to process. Expects a validated item. * * @throws Exception If an error occurs. The exception will be logged by ActionScheduler. */ abstract protected function process_item( array $item );
/** * Init the batch schedule for the job. * * The job name is used to generate the schedule event name. */ public function init() { add_action( $this->get_process_item_hook(), [ $this, 'handle_process_item_action' ] ); }
/** * Starts the job. * * @param array[] $items The items to process in the job. * Items are stored in the database so don't include full objects. * * @throws InvalidArgument If an item is not valid. */ public function start( array $items = [] ) { // Validate all items before adding scheduling any. foreach ( $items as $item ) { $this->validate_item( $item ); }
foreach ( $items as $item ) { $this->action_scheduler->schedule_immediate( $this->get_process_item_hook(), [ $item ] ); } }
/** * Handles the process item job action. * * @param array $item * * @throws Exception If an error occurs. * @throws InvalidArgument If args or an item is invalid. */ public function handle_process_item_action( array $item = [] ) { $this->validate_item( $item ); $this->process_item( $item ); }
/** * Validate an item to be processed by the job. * * @param array $item * * @throws InvalidArgument If the item is not valid. */ protected function validate_item( array $item ) { $this->validate_is_non_empty_array( $item ); } }
|