PluginProbe
Independent Analytics – WordPress Analytics Plugin / 1.20.0
Independent Analytics – WordPress Analytics Plugin v1.20.0
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 All 120 releases
independent-analytics / IAWP / Utils / WP_Async_Request.php
WP_Async_Request.php
152 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * WP Async Request
5 */
6 namespace IAWP_SCOPED\IAWP\Utils;
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 * Action
25 *
26 * (default value: 'async_request')
27 *
28 * @var string
29 */
30 protected $action = 'async_request';
31 /**
32 * Identifier
33 *
34 * @var mixed
35 */
36 protected $identifier;
37 /**
38 * Data
39 *
40 * (default value: array())
41 *
42 * @var array
43 */
44 protected $data = [];
45 /**
46 * Initiate new async request
47 */
48 public function __construct()
49 {
50 $this->identifier = $this->prefix . '_' . $this->action;
51 \add_action('wp_ajax_' . $this->identifier, [$this, 'maybe_handle']);
52 \add_action('wp_ajax_nopriv_' . $this->identifier, [$this, 'maybe_handle']);
53 }
54 /**
55 * Set data used during the request
56 *
57 * @param array $data Data.
58 *
59 * @return $this
60 */
61 public function data($data)
62 {
63 $this->data = $data;
64 return $this;
65 }
66 /**
67 * Dispatch the async request
68 *
69 * @return array|\WP_Error
70 */
71 public function dispatch()
72 {
73 $url = \add_query_arg($this->get_query_args(), $this->get_query_url());
74 $args = $this->get_post_args();
75 return \wp_remote_post(\esc_url_raw($url), $args);
76 }
77 /**
78 * Get query args
79 *
80 * @return array
81 */
82 protected function get_query_args()
83 {
84 if (\property_exists($this, 'query_args')) {
85 return $this->query_args;
86 }
87 $args = ['action' => $this->identifier, 'nonce' => \wp_create_nonce($this->identifier)];
88 /*
89 * Filters the post arguments used during an async request.
90 *
91 * @param array $url
92 */
93 return \apply_filters($this->identifier . '_query_args', $args);
94 }
95 /**
96 * Get query URL
97 *
98 * @return string
99 */
100 protected function get_query_url()
101 {
102 if (\property_exists($this, 'query_url')) {
103 return $this->query_url;
104 }
105 $url = \admin_url('admin-ajax.php');
106 /*
107 * Filters the post arguments used during an async request.
108 *
109 * @param string $url
110 */
111 return \apply_filters($this->identifier . '_query_url', $url);
112 }
113 /**
114 * Get post args
115 *
116 * @return array
117 */
118 protected function get_post_args()
119 {
120 if (\property_exists($this, 'post_args')) {
121 return $this->post_args;
122 }
123 $args = ['timeout' => 0.01, 'blocking' => \false, 'body' => $this->data, 'cookies' => $_COOKIE, 'sslverify' => \apply_filters('https_local_ssl_verify', \false)];
124 /*
125 * Filters the post arguments used during an async request.
126 *
127 * @param array $args
128 */
129 return \apply_filters($this->identifier . '_post_args', $args);
130 }
131 /**
132 * Maybe handle
133 *
134 * Check for correct nonce and pass to handler.
135 */
136 public function maybe_handle()
137 {
138 // Don't lock up other requests while processing
139 \session_write_close();
140 \check_ajax_referer($this->identifier, 'nonce');
141 $this->handle();
142 \wp_die();
143 }
144 /**
145 * Handle
146 *
147 * Override this method to perform any actions required
148 * during the async request.
149 */
150 protected abstract function handle();
151 }
152