PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.17
Independent Analytics – WordPress Analytics Plugin v1.17
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / utils / wp-async-request.php
independent-analytics / IAWP / utils Last commit date
array_to_csv.php 3 years ago date_format.php 3 years ago exact_range.php 3 years ago number_formatter.php 3 years ago relative_range.php 3 years ago request.php 3 years ago salt.php 3 years ago security.php 3 years ago singleton.php 3 years ago string.php 3 years ago timezone.php 3 years ago url.php 3 years ago wp-async-request.php 3 years ago
wp-async-request.php
184 lines
1 <?php
2 /**
3 * WP Async Request
4 */
5
6 namespace IAWP;
7
8 /**
9 * Abstract WP_Async_Request class.
10 *
11 * @abstract
12 */
13 abstract class WP_Async_Request
14 {
15 /**
16 * Prefix
17 *
18 * (default value: 'wp')
19 *
20 * @var string
21 */
22 protected $prefix = 'wp';
23
24 /**
25 * Action
26 *
27 * (default value: 'async_request')
28 *
29 * @var string
30 */
31 protected $action = 'async_request';
32
33 /**
34 * Identifier
35 *
36 * @var mixed
37 */
38 protected $identifier;
39
40 /**
41 * Data
42 *
43 * (default value: array())
44 *
45 * @var array
46 */
47 protected $data = [];
48
49 /**
50 * Initiate new async request
51 */
52 public function __construct()
53 {
54 $this->identifier = $this->prefix . '_' . $this->action;
55
56 add_action('wp_ajax_' . $this->identifier, [$this, 'maybe_handle']);
57 add_action('wp_ajax_nopriv_' . $this->identifier, [$this, 'maybe_handle']);
58 }
59
60 /**
61 * Set data used during the request
62 *
63 * @param array $data Data.
64 *
65 * @return $this
66 */
67 public function data($data)
68 {
69 $this->data = $data;
70
71 return $this;
72 }
73
74 /**
75 * Dispatch the async request
76 *
77 * @return array|WP_Error
78 */
79 public function dispatch()
80 {
81 $url = add_query_arg($this->get_query_args(), $this->get_query_url());
82 $args = $this->get_post_args();
83
84 return wp_remote_post(esc_url_raw($url), $args);
85 }
86
87 /**
88 * Get query args
89 *
90 * @return array
91 */
92 protected function get_query_args()
93 {
94 if (property_exists($this, 'query_args')) {
95 return $this->query_args;
96 }
97
98 $args = [
99 'action' => $this->identifier,
100 'nonce' => wp_create_nonce($this->identifier),
101 ];
102
103 /*
104 * Filters the post arguments used during an async request.
105 *
106 * @param array $url
107 */
108 return apply_filters($this->identifier . '_query_args', $args);
109 }
110
111 /**
112 * Get query URL
113 *
114 * @return string
115 */
116 protected function get_query_url()
117 {
118 if (property_exists($this, 'query_url')) {
119 return $this->query_url;
120 }
121
122 $url = admin_url('admin-ajax.php');
123
124 /*
125 * Filters the post arguments used during an async request.
126 *
127 * @param string $url
128 */
129 return apply_filters($this->identifier . '_query_url', $url);
130 }
131
132 /**
133 * Get post args
134 *
135 * @return array
136 */
137 protected function get_post_args()
138 {
139 if (property_exists($this, 'post_args')) {
140 return $this->post_args;
141 }
142
143 $args = [
144 'timeout' => 0.01,
145 'blocking' => false,
146 'body' => $this->data,
147 'cookies' => $_COOKIE,
148 'sslverify' => apply_filters('https_local_ssl_verify', false),
149 ];
150
151 /*
152 * Filters the post arguments used during an async request.
153 *
154 * @param array $args
155 */
156 return apply_filters($this->identifier . '_post_args', $args);
157 }
158
159 /**
160 * Maybe handle
161 *
162 * Check for correct nonce and pass to handler.
163 */
164 public function maybe_handle()
165 {
166 // Don't lock up other requests while processing
167 session_write_close();
168
169 check_ajax_referer($this->identifier, 'nonce');
170
171 $this->handle();
172
173 wp_die();
174 }
175
176 /**
177 * Handle
178 *
179 * Override this method to perform any actions required
180 * during the async request.
181 */
182 abstract protected function handle();
183 }
184