PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.14.2
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / WordPressLibraries / WPAsyncRequest.php
give / src / Framework / WordPressLibraries Last commit date
WPAsyncRequest.php 2 years ago WPBackgroundProcess.php 2 years ago
WPAsyncRequest.php
170 lines
1 <?php
2
3 namespace Give\Framework\WordPressLibraries;
4
5 /**
6 * This is a fork of WP_Async_Request that adds GiveWP namespaces to prevent conflicts with other plugins.
7 *
8 * IMPORTANT: Developers, please be aware that the usage of WPAsyncRequest and WPBackgroundProcess is discouraged as they are included only for legacy purposes.
9 * Instead, it is strongly recommended to use Action Scheduler for any asynchronous processing needs.
10 * Action Scheduler is available, provides a more efficient solution, and is the preferred choice for new development.
11 *
12 * @since 2.32.0
13 */
14 abstract class WPAsyncRequest
15 {
16
17 /**
18 * Prefix
19 *
20 * (default value: 'wp')
21 *
22 * @var string
23 * @access protected
24 */
25 protected $prefix = 'wp';
26
27 /**
28 * Action
29 *
30 * (default value: 'async_request')
31 *
32 * @var string
33 * @access protected
34 */
35 protected $action = 'async_request';
36
37 /**
38 * Identifier
39 *
40 * @var mixed
41 * @access protected
42 */
43 protected $identifier;
44
45 /**
46 * Data
47 *
48 * (default value: array())
49 *
50 * @var array
51 * @access protected
52 */
53 protected $data = [];
54
55 /**
56 * Initiate new async request
57 */
58 public function __construct()
59 {
60 $this->identifier = $this->prefix . '_' . $this->action;
61
62 add_action('wp_ajax_' . $this->identifier, [$this, 'maybe_handle']);
63 add_action('wp_ajax_nopriv_' . $this->identifier, [$this, 'maybe_handle']);
64 }
65
66 /**
67 * Set data used during the request
68 *
69 * @param array $data Data.
70 *
71 * @return $this
72 */
73 public function data($data)
74 {
75 $this->data = $data;
76
77 return $this;
78 }
79
80 /**
81 * Dispatch the async request
82 *
83 * @return array|WP_Error
84 */
85 public function dispatch()
86 {
87 $url = add_query_arg($this->get_query_args(), $this->get_query_url());
88 $args = $this->get_post_args();
89
90 return wp_remote_post(esc_url_raw($url), $args);
91 }
92
93 /**
94 * Get query args
95 *
96 * @return array
97 */
98 protected function get_query_args()
99 {
100 if (property_exists($this, 'query_args')) {
101 return $this->query_args;
102 }
103
104 return [
105 'action' => $this->identifier,
106 'nonce' => wp_create_nonce($this->identifier),
107 ];
108 }
109
110 /**
111 * Get query URL
112 *
113 * @return string
114 */
115 protected function get_query_url()
116 {
117 if (property_exists($this, 'query_url')) {
118 return $this->query_url;
119 }
120
121 return admin_url('admin-ajax.php');
122 }
123
124 /**
125 * Get post args
126 *
127 * @return array
128 */
129 protected function get_post_args()
130 {
131 if (property_exists($this, 'post_args')) {
132 return $this->post_args;
133 }
134
135 return [
136 'timeout' => 0.01,
137 'blocking' => false,
138 'body' => $this->data,
139 'cookies' => $_COOKIE,
140 'sslverify' => apply_filters('https_local_ssl_verify', false),
141 ];
142 }
143
144 /**
145 * Maybe handle
146 *
147 * Check for correct nonce and pass to handler.
148 */
149 public function maybe_handle()
150 {
151 // Don't lock up other requests while processing
152 session_write_close();
153
154 check_ajax_referer($this->identifier, 'nonce');
155
156 $this->handle();
157
158 wp_die();
159 }
160
161 /**
162 * Handle
163 *
164 * Override this method to perform any actions required
165 * during the async request.
166 */
167 abstract protected function handle();
168
169 }
170