PluginProbe
Flash Toolkit / trunk
Flash Toolkit vtrunk
trunk 1.0 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6
flash-toolkit / includes / libraries / wp-async-request.php

wp-async-request.php in Flash Toolkit trunk, at includes/libraries/wp-async-request.php

164 lines 2.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * WP Async Request
4 *
5 * @package WP-Background-Processing
6 */
7
8 if ( ! class_exists( 'WP_Async_Request' ) ) {
9
10 /**
11 * Abstract WP_Async_Request class.
12 *
13 * @abstract
14 */
15 abstract class WP_Async_Request {
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 = array();
54
55 /**
56 * Initiate new async request
57 */
58 public function __construct() {
59 $this->identifier = $this->prefix . '_' . $this->action;
60
61 add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );
62 add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );
63 }
64
65 /**
66 * Set data used during the request
67 *
68 * @param array $data Data.
69 *
70 * @return $this
71 */
72 public function data( $data ) {
73 $this->data = $data;
74
75 return $this;
76 }
77
78 /**
79 * Dispatch the async request
80 *
81 * @return array|WP_Error
82 */
83 public function dispatch() {
84 $url = add_query_arg( $this->get_query_args(), $this->get_query_url() );
85 $args = $this->get_post_args();
86
87 return wp_remote_post( esc_url_raw( $url ), $args );
88 }
89
90 /**
91 * Get query args
92 *
93 * @return array
94 */
95 protected function get_query_args() {
96 if ( property_exists( $this, 'query_args' ) ) {
97 return $this->query_args;
98 }
99
100 return array(
101 'action' => $this->identifier,
102 'nonce' => wp_create_nonce( $this->identifier ),
103 );
104 }
105
106 /**
107 * Get query URL
108 *
109 * @return string
110 */
111 protected function get_query_url() {
112 if ( property_exists( $this, 'query_url' ) ) {
113 return $this->query_url;
114 }
115
116 return admin_url( 'admin-ajax.php' );
117 }
118
119 /**
120 * Get post args
121 *
122 * @return array
123 */
124 protected function get_post_args() {
125 if ( property_exists( $this, 'post_args' ) ) {
126 return $this->post_args;
127 }
128
129 return array(
130 'timeout' => 0.01,
131 'blocking' => false,
132 'body' => $this->data,
133 'cookies' => $_COOKIE,
134 'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
135 );
136 }
137
138 /**
139 * Maybe handle
140 *
141 * Check for correct nonce and pass to handler.
142 */
143 public function maybe_handle() {
144 // Don't lock up other requests while processing.
145 session_write_close();
146
147 check_ajax_referer( $this->identifier, 'nonce' );
148
149 $this->handle();
150
151 wp_die();
152 }
153
154 /**
155 * Handle
156 *
157 * Override this method to perform any actions required
158 * during the async request.
159 */
160 abstract protected function handle();
161
162 }
163 }
164