PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7
4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 4.2.1 All 138 releases
learnpress / inc / class-lp-request-handler.php

class-lp-request-handler.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7, at inc/class-lp-request-handler.php

513 lines 11.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class LP_Request
4 *
5 * Process actions by request param
6 *
7 * @author ThimPress
8 * @package LearnPress/Classes
9 * @version 1.0
10 */
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit;
14 }
15
16 /**
17 * Class LP_Request
18 */
19 class LP_Request {
20
21 /**
22 * @var bool
23 */
24 public static $ajax_shutdown = true;
25
26 /**
27 * Constructor
28 */
29 public static function init() {
30
31 self::$ajax_shutdown = learn_press_is_ajax();
32
33 if ( is_admin() ) {
34 add_action( 'init', array( __CLASS__, 'process_request' ), 50 );
35 } else {
36 add_action( 'template_include', array( __CLASS__, 'process_request' ), 50 );
37 }
38
39 self::register( 'lp-ajax', array( __CLASS__, 'do_ajax' ) );
40
41 add_action( 'wp_loaded', array( 'LP_Forms_Handler', 'init' ), 10 );
42 }
43
44 public static function get_header() {
45 ob_start();
46 }
47
48 /**
49 * Process actions
50 *
51 * @param string $template
52 *
53 * @return string
54 */
55 public static function process_request( $template ) {
56 if ( ! empty( $_REQUEST ) ) {
57 foreach ( $_REQUEST as $key => $value ) {
58 $key = LP_Helper::sanitize_params_submitted( $key );
59 $value = LP_Helper::sanitize_params_submitted( $value );
60 do_action( 'learn_press_request_handler_' . $key, $value, $key );
61 }
62 }
63
64 return $template;
65 }
66
67 /**
68 * Register new request
69 *
70 * @param string|array $action
71 * @param mixed $function
72 * @param int $priority
73 */
74 public static function register( $action, $function = '', $priority = 5 ) {
75 if ( is_array( $action ) ) {
76 foreach ( $action as $item ) {
77 $item = wp_parse_args(
78 $item,
79 array(
80 'action' => '',
81 'callback' => '',
82 'priority' => 5,
83 )
84 );
85 if ( ! $item['action'] || ! $item['callback'] ) {
86 continue;
87 }
88
89 list( $action, $callback, $priority ) = array_values( $item );
90 add_action( 'learn_press_request_handler_' . $action, $callback, $priority, 2 );
91 }
92 } else {
93 add_action( 'learn_press_request_handler_' . $action, $function, $priority, 2 );
94 }
95 }
96
97 /**
98 * Register ajax action.
99 * Add ajax into queue by an action and then LP check if there is a request
100 * with key lp-ajax=action-name then do the action "action-name". By default,
101 * ajax action is called if user is logged. But, it can be call in case user
102 * is not logged in if the action is passed with key :nopriv at the end.
103 *
104 * E.g:
105 * + Only for user is logged in
106 * LP_Request::register_ajax( 'action', 'function_to_call', 5 )
107 *
108 * + For guest
109 * LP_Request::register_ajax( 'action:nopriv', 'function_to_call', 5 )
110 *
111 * @param string $action
112 * @param mixed $function
113 * @param int $priority
114 */
115 public static function register_ajax( $action, $function, $priority = 5 ) {
116 if ( is_array( $action ) ) {
117 foreach ( $action as $args ) {
118 if ( ! empty( $args['action'] ) && ! empty( $args['callback'] ) ) {
119 self::register_ajax( $args['action'], $args['callback'], ! empty( $args['priority'] ) ? $args['priority'] : 5 );
120 }
121 }
122
123 return;
124 }
125 $actions = self::parse_action( $action );
126
127 if ( isset( $actions['nonce'] ) ) {
128 add_filter( 'learn-press/ajax/verify-none/' . $actions['action'], array( __CLASS__, 'verify_nonce' ) );
129 }
130
131 add_action( 'learn-press/ajax/' . $actions['action'], $function, $priority );
132
133 /**
134 * No requires logged in?
135 */
136 if ( isset( $actions['nopriv'] ) ) {
137 add_action( 'learn-press/ajax/no-priv/' . $actions['action'], $function, $priority );
138 }
139 }
140
141 /**
142 * Do ajax if there is a 'lp-ajax' in $_REQUEST
143 *
144 * @param string $action
145 */
146 public static function do_ajax( $action ) {
147
148 if ( ! defined( 'LP_DOING_AJAX' ) ) {
149 define( 'LP_DOING_AJAX', true );
150 }
151
152 LP_Gateways::instance()->get_available_payment_gateways();
153
154 if ( has_filter( 'learn-press/ajax/verify-none/' . $action ) ) {
155 if ( ! self::verify_nonce( $action ) ) {
156 die( '0' );
157 }
158 }
159
160 if ( is_user_logged_in() ) {
161 $has_action = has_action( 'learn-press/ajax/' . $action );
162
163 /**
164 * @since 3.0.0
165 */
166 do_action( 'learn-press/ajax/' . $action );
167 } else {
168
169 $has_action = has_action( 'learn-press/ajax/no-priv/' . $action );
170
171 /**
172 * @since 3.0.0
173 */
174 do_action( 'learn-press/ajax/no-priv/' . $action );
175 }
176
177 if ( $has_action && self::$ajax_shutdown ) {
178 die( '{END_AJAX}' );
179 }
180 }
181
182 public static function verify_nonce( $action, $nonce = '' ) {
183 return wp_verify_nonce( $nonce ? $nonce : self::get_string( "{$action}-nonce" ), $action );
184 }
185
186 public static function parse_action( $action ) {
187 $args = explode( ':', $action );
188 $actions = array(
189 'action' => $args[0],
190 );
191
192 if ( sizeof( $args ) > 1 ) {
193 array_shift( $args );
194 foreach ( $args as $arg ) {
195 $actions[ $arg ] = $arg;
196 }
197 }
198
199 return $actions;
200 }
201
202 /**
203 * Get variable value from Server environment.
204 *
205 * @param string $var
206 * @param mixed $default
207 * @param string $type
208 * @param string $env
209 *
210 * @return mixed
211 */
212 public static function get( $var, $default = false, $type = '', $env = 'request' ) {
213 switch ( strtolower( $env ) ) {
214 case 'post':
215 $env = LP_Helper::sanitize_params_submitted( $_POST );
216 break;
217 case 'get':
218 $env = LP_Helper::sanitize_params_submitted( $_GET );
219 break;
220 case 'put':
221 case 'delete':
222 $data = file_get_contents( 'php://input' );
223 $env = array();
224 parse_str( $data, $env );
225 break;
226 case 'wp':
227 global $wp;
228 $env = $wp->query_vars;
229 break;
230 default:
231 $env = LP_Helper::sanitize_params_submitted( $_REQUEST );
232 }
233
234 $return = array_key_exists( $var, $env ) ? $env[ $var ] : $default;
235 switch ( $type ) {
236 case 'int':
237 $return = intval( $return );
238 break;
239 case 'float':
240 $return = floatval( $return );
241 break;
242 case 'bool':
243 try {
244 $value = strtolower( $return );
245 } catch ( Exception $e ) {
246 $value = $return;
247 }
248
249 if ( in_array( $value, array( 'true', 'yes', 'on', 'enable' ) ) ) {
250 $return = true;
251 } elseif ( in_array( $value, array( 'false', 'no', 'off', 'disable' ) ) ) {
252 $return = false;
253 } else {
254 $return = ! ! $return;
255 }
256 break;
257 case 'string':
258 $return = (string) $return;
259 break;
260 case 'array':
261 $return = $return ? (array) $return : array();
262 break;
263 }
264
265 LP_Helper::sanitize_params_submitted( $return );
266
267 return $return;
268 }
269
270 /**
271 * Get value int from environment.
272 *
273 * @param string $var
274 * @param mixed $default
275 * @param string $env
276 *
277 * @return int
278 */
279 public static function get_int( $var, $default = false, $env = 'request' ) {
280 return self::get( $var, $default, 'int', $env );
281 }
282
283 /**
284 * Get value float from environment.
285 *
286 * @param string $var
287 * @param mixed $default
288 * @param string $env
289 *
290 * @return float
291 */
292 public static function get_float( $var, $default = false, $env = 'request' ) {
293 return self::get( $var, $default, 'float', $env );
294 }
295
296 /**
297 * Get value bool from environment.
298 *
299 * @param string $var
300 * @param mixed $default
301 * @param string $env
302 *
303 * @return bool
304 */
305 public static function get_bool( $var, $default = false, $env = 'request' ) {
306 return self::get( $var, $default, 'bool', $env );
307 }
308
309 /**
310 * Get value string from environment.
311 *
312 * @param string $var
313 * @param mixed $default
314 * @param string $env
315 *
316 * @return string
317 */
318 public static function get_string( $var, $default = false, $env = 'request' ) {
319 return self::get( $var, $default, 'string', $env );
320 }
321
322 /**
323 * Get value array from environment.
324 *
325 * @param string $var
326 * @param mixed $default
327 * @param string $env
328 *
329 * @return array
330 */
331 public static function get_array( $var, $default = false, $env = 'request' ) {
332 return self::get( $var, $default, 'array', $env );
333 }
334
335 /**
336 * Get value from $_POST.
337 *
338 * @param string $var
339 * @param mixed $default
340 *
341 * @return mixed
342 */
343 public static function get_post( $var, $default = false, $type = '' ) {
344 return self::get( $var, $default, $type, 'post' );
345 }
346
347 /**
348 * Get value int from $_POST.
349 *
350 * @param string $var
351 * @param mixed $default
352 *
353 * @return int
354 */
355 public static function get_post_int( $var, $default = false ) {
356 return self::get_post( $var, $default, 'int' );
357 }
358
359 /**
360 * Get value float from $_POST.
361 *
362 * @param string $var
363 * @param mixed $default
364 *
365 * @return float
366 */
367 public static function get_post_float( $var, $default = false ) {
368 return self::get_post( $var, $default, 'float' );
369 }
370
371 /**
372 * Get value bool from $_POST.
373 *
374 * @param string $var
375 * @param mixed $default
376 *
377 * @return bool
378 */
379 public static function get_post_bool( $var, $default = false ) {
380 return self::get_post( $var, $default, 'bool' );
381 }
382
383 /**
384 * Get value string from $_POST.
385 *
386 * @param string $var
387 * @param mixed $default
388 *
389 * @return string
390 */
391 public static function get_post_string( $var, $default = false ) {
392 return self::get_post( $var, $default, 'string' );
393 }
394
395 /**
396 * Get value array from $_POST.
397 *
398 * @param string $var
399 * @param mixed $default
400 *
401 * @return array
402 */
403 public static function get_post_array( $var, $default = false ) {
404 return self::get_post( $var, $default, 'array' );
405 }
406
407 /**
408 * Get email field and validate.
409 *
410 * @param string $var
411 * @param bool $default
412 *
413 * @return bool|string
414 */
415 public static function get_email( $var, $default = false ) {
416 $email = self::get_string( $var, $default );
417 if ( ! is_email( $email ) ) {
418 $email = $default;
419 }
420
421 return $email;
422 }
423
424 /**
425 * Get a batch of params from request into an array.
426 *
427 * @return array
428 */
429 public static function get_list() {
430 if ( func_num_args() < 1 ) {
431 return array();
432 }
433
434 $list = array();
435 foreach ( func_get_args() as $key ) {
436 $list[ $key ] = self::get( $key );
437 }
438
439 return $list;
440 }
441
442 /**
443 * Parse string from request to array by comma.
444 *
445 * @param string $var
446 * @param string $separator
447 *
448 * @return array
449 */
450 public static function get_list_array( $var, $separator = ',' ) {
451 $list = self::get_string( $var );
452
453 if ( ! $list ) {
454 return array();
455 }
456
457 if ( $separator === ',' ) {
458 $list = preg_split( '!\s?,\s?!', $list );
459 } else {
460 $list = explode( $separator, $list );
461 }
462
463 return array_map( 'trim', $list );
464 }
465
466 /**
467 * Get param 'redirect' in request.
468 *
469 * @param string $default
470 *
471 * @return string
472 */
473 public static function get_redirect( $default = '' ) {
474 $redirect = self::get_string( 'redirect' );
475
476 if ( $redirect ) {
477 $redirect = urldecode( $redirect );
478 } else {
479 $redirect = $default;
480 }
481
482 return $redirect;
483 }
484
485 public static function get_cookie( $name, $def = false, $global = false ) {
486 if ( $global ) {
487 return $_COOKIE[ $name ] ?? $def;
488 }
489
490 $cookie = isset( $_COOKIE['LP'] ) ? (array) json_decode( stripslashes( $_COOKIE['LP'] ) ) : array();
491
492 return $cookie[ $name ] ?? $def;
493 }
494
495 public static function set_cookie( $name, $value, $expires = '', $domain = '', $path = '', $secure = false ) {
496 if ( func_num_args() > 2 ) {
497 learn_press_setcookie( $name, $value, $expires, $secure );
498 } else {
499 $cookie = isset( $_COOKIE['LP'] ) ? maybe_unserialize( $_COOKIE['LP'] ) : array();
500
501 $cookie[ $name ] = $value;
502 learn_press_setcookie( 'LP', $value );
503 }
504 }
505 }
506
507 LP_Request::init();
508
509 // Backward compatibility for 2.x.x
510 class LP_Request_Handler extends LP_Request {
511
512 }
513