PluginProbe
Independent Analytics – WordPress Analytics Plugin / 2.10.4
Independent Analytics – WordPress Analytics Plugin v2.10.4
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
153 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\Utils;
7
8 /**
9 * Abstract WP_Async_Request class.
10 *
11 * @abstract
12 * @internal
13 */
14 abstract class WP_Async_Request
15 {
16 /**
17 * Prefix
18 *
19 * (default value: 'wp')
20 *
21 * @var string
22 */
23 protected $prefix = 'wp';
24 /**
25 * Action
26 *
27 * (default value: 'async_request')
28 *
29 * @var string
30 */
31 protected $action = 'async_request';
32 /**
33 * Identifier
34 *
35 * @var mixed
36 */
37 protected $identifier;
38 /**
39 * Data
40 *
41 * (default value: array())
42 *
43 * @var array
44 */
45 protected $data = [];
46 /**
47 * Initiate new async request
48 */
49 public function __construct()
50 {
51 $this->identifier = $this->prefix . '_' . $this->action;
52 \add_action('wp_ajax_' . $this->identifier, [$this, 'maybe_handle']);
53 \add_action('wp_ajax_nopriv_' . $this->identifier, [$this, 'maybe_handle']);
54 }
55 /**
56 * Handle
57 *
58 * Override this method to perform any actions required
59 * during the async request.
60 */
61 protected abstract function handle();
62 /**
63 * Set data used during the request
64 *
65 * @param array $data Data.
66 *
67 * @return $this
68 */
69 public function data($data)
70 {
71 $this->data = $data;
72 return $this;
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 return \wp_remote_post(\esc_url_raw($url), $args);
84 }
85 /**
86 * Maybe handle
87 *
88 * Check for correct nonce and pass to handler.
89 */
90 public function maybe_handle()
91 {
92 // Don't lock up other requests while processing
93 \session_write_close();
94 \check_ajax_referer($this->identifier, 'nonce');
95 $this->handle();
96 \wp_die();
97 }
98 /**
99 * Get query args
100 *
101 * @return array
102 */
103 protected function get_query_args()
104 {
105 if (\property_exists($this, 'query_args')) {
106 return $this->query_args;
107 }
108 $args = ['action' => $this->identifier, 'nonce' => \wp_create_nonce($this->identifier)];
109 /*
110 * Filters the post arguments used during an async request.
111 *
112 * @param array $url
113 */
114 return \apply_filters($this->identifier . '_query_args', $args);
115 }
116 /**
117 * Get query URL
118 *
119 * @return string
120 */
121 protected function get_query_url()
122 {
123 if (\property_exists($this, 'query_url')) {
124 return $this->query_url;
125 }
126 $url = \admin_url('admin-ajax.php');
127 /*
128 * Filters the post arguments used during an async request.
129 *
130 * @param string $url
131 */
132 return \apply_filters($this->identifier . '_query_url', $url);
133 }
134 /**
135 * Get post args
136 *
137 * @return array
138 */
139 protected function get_post_args()
140 {
141 if (\property_exists($this, 'post_args')) {
142 return $this->post_args;
143 }
144 $args = ['timeout' => 0.01, 'blocking' => \false, 'body' => $this->data, 'cookies' => $_COOKIE, 'sslverify' => \apply_filters('https_local_ssl_verify', \false)];
145 /*
146 * Filters the post arguments used during an async request.
147 *
148 * @param array $args
149 */
150 return \apply_filters($this->identifier . '_post_args', $args);
151 }
152 }
153