PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.14.2
Independent Analytics – WordPress Analytics Plugin v2.14.2
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
BladeOne.php 2 years ago CSV.php 9 months ago Calculations.php 2 years ago Currency.php 8 months ago Device.php 1 year ago Device_Cache.php 2 years ago Dir.php 5 months ago Format.php 5 months ago Link_Validator.php 6 months ago Number_Formatter.php 5 months ago Obj.php 6 months ago Request.php 11 months ago Salt.php 1 year ago Security.php 1 year ago Server.php 2 years ago Singleton.php 2 years ago String_Util.php 2 years ago Timezone.php 5 months ago URL.php 6 months ago WP_Async_Request.php 1 year ago
WP_Async_Request.php
160 lines
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(array $data);
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 bool
78 */
79 public function dispatch() : bool
80 {
81 $optionDisableAsyncRequest = \get_option('iawp_disable_async_request', \false) === '1';
82 $constantDisableAsyncRequest = \defined('IAWP_DISABLE_ASYNC_REQUEST') && \IAWP_DISABLE_ASYNC_REQUEST === \true;
83 if ($optionDisableAsyncRequest || $constantDisableAsyncRequest) {
84 $this->handle($this->data);
85 return \true;
86 }
87 $url = \add_query_arg($this->get_query_args(), $this->get_query_url());
88 $args = $this->get_post_args();
89 $response = \wp_remote_post(\esc_url_raw($url), $args);
90 return !\is_wp_error($response);
91 }
92 /**
93 * Maybe handle
94 *
95 * Check for correct nonce and pass to handler.
96 */
97 public function maybe_handle()
98 {
99 // Don't lock up other requests while processing
100 \session_write_close();
101 \check_ajax_referer($this->identifier, 'nonce');
102 $this->handle($_POST);
103 \wp_die();
104 }
105 /**
106 * Get query args
107 *
108 * @return array
109 */
110 protected function get_query_args()
111 {
112 if (\property_exists($this, 'query_args')) {
113 return $this->query_args;
114 }
115 $args = ['action' => $this->identifier, 'nonce' => \wp_create_nonce($this->identifier)];
116 /*
117 * Filters the post arguments used during an async request.
118 *
119 * @param array $url
120 */
121 return \apply_filters($this->identifier . '_query_args', $args);
122 }
123 /**
124 * Get query URL
125 *
126 * @return string
127 */
128 protected function get_query_url()
129 {
130 if (\property_exists($this, 'query_url')) {
131 return $this->query_url;
132 }
133 $url = \admin_url('admin-ajax.php');
134 /*
135 * Filters the post arguments used during an async request.
136 *
137 * @param string $url
138 */
139 return \apply_filters($this->identifier . '_query_url', $url);
140 }
141 /**
142 * Get post args
143 *
144 * @return array
145 */
146 protected function get_post_args()
147 {
148 if (\property_exists($this, 'post_args')) {
149 return $this->post_args;
150 }
151 $args = ['timeout' => 0.01, 'blocking' => \false, 'body' => $this->data, 'cookies' => $_COOKIE, 'sslverify' => \apply_filters('https_local_ssl_verify', \false)];
152 /*
153 * Filters the post arguments used during an async request.
154 *
155 * @param array $args
156 */
157 return \apply_filters($this->identifier . '_post_args', $args);
158 }
159 }
160