-
Notifications
You must be signed in to change notification settings - Fork 134
/
llms.abstract.notification.processor.php
138 lines (114 loc) · 2.88 KB
/
llms.abstract.notification.processor.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
/**
* LifterLMS Notification Background Processor Abstract
*
* @package LifterLMS/Abstracts/Classes
*
* @since 3.8.0
* @version 3.38.0
*/
defined( 'ABSPATH' ) || exit;
require_once LLMS_PLUGIN_DIR . 'includes/libraries/wp-background-processing/wp-async-request.php';
require_once LLMS_PLUGIN_DIR . 'includes/libraries/wp-background-processing/wp-background-process.php';
/**
* LifterLMS Notification Background Processor abstract class
*
* @since 3.8.0
* @since 3.38.0 Modified return of `dispatch()` override to return the return value of the parent method.
*/
abstract class LLMS_Abstract_Notification_Processor extends WP_Background_Process {
/**
* Enables event logging
*
* @var boolean
*/
private $enable_logging = true;
/**
* Constructor
*
* @since 3.8.0
* @version 3.8.0
*/
public function __construct() {
parent::__construct();
if ( ! defined( 'LLMS_NOTIFICATIONS_LOGGING' ) ) {
define( 'LLMS_NOTIFICATIONS_LOGGING', true );
}
$this->enable_logging = ( defined( 'LLMS_NOTIFICATIONS_LOGGING' ) && LLMS_NOTIFICATIONS_LOGGING );
}
/**
* Called when queue is emptied and action is complete
*
* @return void
* @since 3.8.0
* @version 3.8.0
*/
protected function complete() {
$this->log( sprintf( 'Processing for %s finished', $this->action ) );
parent::complete();
}
/**
* Starts the queue
*
* @since 3.8.0
* @since 3.38.0 Added return from parent method.
*
* @return array|WP_Error Response from `wp_remote_post()`.
*/
public function dispatch() {
$this->log( sprintf( 'Dispatching %s', $this->action ) );
$dispatched = parent::dispatch();
if ( is_wp_error( $dispatched ) ) {
$this->log( sprintf( 'Unable to dispatch %1$s: %2$s' ), $this->action, $dispatched->get_error_message() );
}
return $dispatched;
}
/**
* Handle cron healthcheck
*
* Restart the background process if not already running
* and data exists in the queue.
*
* Overridden to enable the "force" option to work, replaces "exit" with "return"
* so that we can redirect and manually call the cronjob
*
* @return void
* @since 3.8.0
* @version 3.8.0
*/
public function handle_cron_healthcheck() {
if ( $this->is_process_running() ) {
// Background process already running.
return;
}
if ( $this->is_queue_empty() ) {
// No data to process.
$this->clear_scheduled_event();
return;
}
$this->handle();
}
/**
* Returns true if the processor is running
*
* @return boolean
* @since 3.8.0
* @version 3.8.0
*/
public function is_processing() {
return ( false === $this->is_queue_empty() );
}
/**
* Log event data to an update file when logging enabled
*
* @param mixed $data data to log
* @return void
* @since 3.8.0
* @version 3.8.0
*/
public function log( $data ) {
if ( $this->enable_logging ) {
llms_log( $data, 'notifications' );
}
}
}