PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.11.0
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.11.0
4.11.0 4.10.0 4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / Job / JobTransientCache.php
wp-staging / Framework / Job Last commit date
Ajax 1 day ago BackgroundProcessing 1 day ago Dto 1 day ago Exception 1 day ago Interfaces 1 day ago Jobs 1 day ago Task 1 day ago Traits 10 months ago AbstractJob.php 1 day ago JobProvider.php 1 day ago JobServiceProvider.php 1 day ago JobTransientCache.php 1 day ago ProcessLock.php 1 day ago
JobTransientCache.php
311 lines
1 <?php
2
3 namespace WPStaging\Framework\Job;
4
5
6
7
8
9 class JobTransientCache
10 {
11
12
13
14
15
16
17 const JOB_TRANSIENT_EXPIRY = 60 * 6;
18
19
20
21
22
23
24
25 const JOB_TRANSIENT_EXPIRY_ON_COMPLETE = 15;
26
27
28
29
30
31 const TRANSIENT_CURRENT_JOB = 'wpstg_current_job';
32
33
34
35
36 const STATUS_RUNNING = 'running';
37
38
39
40
41 const STATUS_SUCCESS = 'success';
42
43
44
45
46 const STATUS_FAILED = 'failed';
47
48
49
50
51 const STATUS_CANCELLED = 'cancelled';
52
53
54
55
56 const STATUS_STALED = 'staled';
57
58
59
60
61 const SEVERITY_ERROR = 'error';
62
63
64
65
66
67 const SEVERITY_NOTICE = 'notice';
68
69
70
71
72 const JOB_TYPE_BACKUP = 'Backup';
73
74
75
76
77 const JOB_TYPE_RESTORE = 'Restore';
78
79
80
81
82 const JOB_TYPE_EXTRACT = 'Extract';
83
84
85
86
87 const JOB_TYPE_CANCEL = 'Cancel';
88
89
90
91
92 const JOB_TYPE_PLUGINS_UPDATER = 'Plugins_Updater';
93
94
95
96
97 const JOB_TYPE_STAGING_CREATE = 'Staging_Create';
98
99
100
101
102 const JOB_TYPE_STAGING_UPDATE = 'Staging_Update';
103
104
105
106
107 const JOB_TYPE_STAGING_RESET = 'Staging_Reset';
108
109
110
111
112 const JOB_TYPE_STAGING_PUSH = 'Staging_Push';
113
114
115
116
117 const JOB_TYPE_STAGING_DELETE = 'Staging_Delete';
118
119
120
121
122 const JOB_TYPE_PULL_PREPARE = 'Pull_Prepare';
123
124
125
126
127 const JOB_TYPE_PULL_RESTORE = 'Pull_Restore';
128
129
130
131
132 const JOB_TYPE_REMOTE_UPLOAD = 'Remote_Upload';
133
134
135
136
137 const CANCELABLE_JOBS = [
138 self::JOB_TYPE_BACKUP,
139 self::JOB_TYPE_RESTORE,
140 self::JOB_TYPE_EXTRACT,
141 self::JOB_TYPE_PULL_PREPARE,
142 self::JOB_TYPE_PULL_RESTORE,
143 self::JOB_TYPE_STAGING_CREATE,
144 self::JOB_TYPE_STAGING_UPDATE,
145 self::JOB_TYPE_STAGING_RESET,
146 self::JOB_TYPE_REMOTE_UPLOAD,
147 ];
148
149
150
151
152
153
154
155
156 public function startJob(string $jobId, string $jobTitle, string $jobType = 'job', string $queueId = '')
157 {
158 $jobData = [
159 'jobId' => $jobId,
160 'title' => $jobTitle,
161 'type' => $jobType,
162 'status' => self::STATUS_RUNNING,
163 'startedAt' => time(),
164 'updatedAt' => time(),
165 'queueId' => $queueId,
166 'message' => '',
167 ];
168
169 delete_transient(self::TRANSIENT_CURRENT_JOB);
170 set_transient(self::TRANSIENT_CURRENT_JOB, $jobData, self::JOB_TRANSIENT_EXPIRY);
171 }
172
173
174
175
176
177
178
179 public function markAsPreInitialized()
180 {
181 $jobData = $this->getJob();
182 if ($jobData === null) {
183 return;
184 }
185
186 $jobData['preInitAt'] = time();
187 delete_transient(self::TRANSIENT_CURRENT_JOB);
188 set_transient(self::TRANSIENT_CURRENT_JOB, $jobData, self::JOB_TRANSIENT_EXPIRY);
189 }
190
191
192
193
194
195 public function updateTitle(string $title)
196 {
197 $jobData = $this->getJob();
198 $jobData['title'] = $title;
199 $jobData['updatedAt'] = time();
200
201 set_transient(self::TRANSIENT_CURRENT_JOB, $jobData, self::JOB_TRANSIENT_EXPIRY);
202 }
203
204
205
206
207 public function completeJob()
208 {
209 $this->stopJob(self::STATUS_SUCCESS);
210 }
211
212
213
214
215 public function cancelJob(string $jobTitle)
216 {
217 $this->stopJob(self::STATUS_CANCELLED, $jobTitle);
218 }
219
220
221
222
223
224
225
226
227
228
229 public function failJob(string $title = '', string $message = '', string $severity = '')
230 {
231 $this->stopJob(self::STATUS_FAILED, $title, $message, $severity);
232 }
233
234
235
236
237 public function getJob()
238 {
239 $jobData = get_transient(self::TRANSIENT_CURRENT_JOB);
240 if (empty($jobData['jobId'])) {
241 return null;
242 }
243
244 return $jobData;
245 }
246
247 public function getJobId(): string
248 {
249 $jobData = $this->getJob();
250 if (empty($jobData['jobId'])) {
251 return '';
252 }
253
254 return $jobData['jobId'];
255 }
256
257 public function getJobStatus(): string
258 {
259 $jobData = $this->getJob();
260 if (empty($jobData['status'])) {
261 return '';
262 }
263
264 return $jobData['status'];
265 }
266
267
268
269
270 public function update()
271 {
272 $jobData = $this->getJob();
273 $jobData['updatedAt'] = time();
274
275 delete_transient(self::TRANSIENT_CURRENT_JOB);
276 set_transient(self::TRANSIENT_CURRENT_JOB, $jobData, self::JOB_TRANSIENT_EXPIRY);
277 }
278
279
280
281
282
283
284
285 private function stopJob(string $status, string $title = '', string $message = '', string $severity = '')
286 {
287 $jobData = $this->getJob();
288 $jobData['status'] = $status;
289 $jobData['updatedAt'] = time();
290 if (!empty($title)) {
291 $jobData['title'] = $title;
292 }
293
294 if (!empty($message)) {
295 $jobData['message'] = $message;
296 }
297
298
299
300
301
302 if ($severity !== '') {
303 $jobData['severity'] = $severity;
304 }
305
306
307 delete_transient(self::TRANSIENT_CURRENT_JOB);
308 set_transient(self::TRANSIENT_CURRENT_JOB, $jobData, self::JOB_TRANSIENT_EXPIRY_ON_COMPLETE);
309 }
310 }
311