-
Notifications
You must be signed in to change notification settings - Fork 3
/
class-job-agency-job.php
117 lines (97 loc) · 2.63 KB
/
class-job-agency-job.php
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
class Job_Agency_Job {
private $id = null;
private $type = '';
private $status = '';
private $payload = '';
private $created_date = null;
private $completed_date = null;
private $result = '';
public function __construct( $job_data ) {
$this->id = $job_data->id;
$this->type = $job_data->type;
$this->status = $job_data->status;
$this->created_date = strtotime( $job_data->created_date );
$this->payload = maybe_unserialize( $job_data->payload );
if ( $job_data->completed_date )
$this->completed_date = strtotime( $job_data->completed_date );
if ( isset( $job_data->result ) )
$this->result = unserialize( $job_data->result );
}
/**
* Get the ID for the job
*/
public function get_id() {
return $this->id;
}
/**
* Get the type for the job
*/
public function get_type() {
return $this->type;
}
/**
* Mark the job as started, so now one else will try and start it
*/
public function start() {
$this->update_status( 'started' );
}
/**
* Get the status of the job
*/
public function get_status() {
return $this->status;
}
/**
* Get the result of a job
*/
public function get_result() {
return $this->result;
}
/**
* Update the status of the job to something
*
* @param $status $string
*/
public function update_status( $status ) {
$this->status = $status;
$this->save();
do_action( 'job_agency_job_updated_status', $status, $this );
}
/**
* Set the job as completed, good work!
*/
public function complete() {
if ( is_wp_error( $this->result ) )
$this->status = 'errored';
else
$this->status = 'completed';
$this->completed_date = time();
$this->save();
do_action( 'job_agency_job_updated_status', $this->status, $this );
}
/**
* Save the current job state to the database
*/
public function save() {
global $wpdb;
return (bool)$wpdb->update( Job_Agency::get_table_name(),
array(
'type' => $this->type,
'status' => $this->status,
'created_date' => date( 'Y-m-d H:i:s', $this->created_date ),
'completed_date' => $this->completed_date ? date( 'Y-m-d H:i:s', $this->completed_date ) : null,
'payload' => serialize( $this->payload ),
'result' => $this->result === null ? '' : serialize( $this->result ),
), array( 'id' => $this->id ) );
}
/**
* Call the callable that will be responsible for handling this job
*/
public function call_handler() {
if ( is_callable( $this->type ) )
$this->result = call_user_func( $this->type, $this->payload );
else
$this->result = apply_filters( 'job_agency_do_job_' . $this->type, $this->payload, $this );
}
}