| 1 |
<?php |
| 2 |
namespace LearnPress\Ajax; |
| 3 |
|
| 4 |
use Exception; |
| 5 |
use LearnPress\Helpers\Response; |
| 6 |
use LearnPress\TemplateHooks\Admin\AdminHelpCenterDataTemplate; |
| 7 |
use LearnPress\TemplateHooks\Admin\AdminThemesDataTemplate; |
| 8 |
use LP_Helper; |
| 9 |
use stdClass; |
| 10 |
use Throwable; |
| 11 |
|
| 12 |
defined( 'ABSPATH' ) || exit; |
| 13 |
|
| 14 |
/** |
| 15 |
* class AjaxBase |
| 16 |
* |
| 17 |
* @since 4.2.7.6 |
| 18 |
* @version 1.0.2 |
| 19 |
*/ |
| 20 |
class LoadContentViaAjax extends AbstractAjax { |
| 21 |
public function load_content_via_ajax() { |
| 22 |
$response = new Response(); |
| 23 |
|
| 24 |
try { |
| 25 |
$params = wp_unslash( $_REQUEST['data'] ?? '' ); |
| 26 |
if ( empty( $params ) ) { |
| 27 |
throw new Exception( 'Error: params invalid!' ); |
| 28 |
} |
| 29 |
|
| 30 |
$params = LP_Helper::json_decode( $params, true ); |
| 31 |
|
| 32 |
if ( empty( $params['callback'] ) || |
| 33 |
! isset( $params['args'] ) ) { |
| 34 |
throw new Exception( 'Error: params invalid!' ); |
| 35 |
} |
| 36 |
|
| 37 |
// @var array $args |
| 38 |
$args = $params['args']; |
| 39 |
$callBack = $params['callback']; |
| 40 |
|
| 41 |
if ( empty( $callBack['class'] ) || |
| 42 |
empty( $callBack['method'] ) ) { |
| 43 |
throw new Exception( 'Error: callback invalid!' ); |
| 44 |
} |
| 45 |
|
| 46 |
$class = $callBack['class']; |
| 47 |
$method = $callBack['method']; |
| 48 |
|
| 49 |
// Security: check callback is registered. |
| 50 |
$allow_callbacks = apply_filters( |
| 51 |
'lp/rest/ajax/allow_callback', |
| 52 |
[ |
| 53 |
'LP_Admin_Dashboard:order_statistic', |
| 54 |
'LP_Admin_Dashboard:plugin_status_content', |
| 55 |
AdminHelpCenterDataTemplate::class . ':html_data_online', |
| 56 |
AdminThemesDataTemplate::class . ':html_data_online', |
| 57 |
] |
| 58 |
); |
| 59 |
$callBackStr = $class . ':' . $method; |
| 60 |
if ( ! in_array( $callBackStr, $allow_callbacks ) ) { |
| 61 |
throw new Exception( 'Error: callback is not register!' ); |
| 62 |
} |
| 63 |
|
| 64 |
// Check class and method is callable. |
| 65 |
if ( is_callable( [ $class, $method ] ) ) { |
| 66 |
$data = call_user_func( [ $class, $method ], $args ); |
| 67 |
} else { |
| 68 |
throw new Exception( 'Error: callback is not callable!' ); |
| 69 |
} |
| 70 |
|
| 71 |
if ( ! $data instanceof stdClass && ! isset( $data->content ) ) { |
| 72 |
throw new Exception( 'Error: data content invalid!' ); |
| 73 |
} |
| 74 |
|
| 75 |
$response->message = $data->message ?? ''; |
| 76 |
unset( $data->message ); |
| 77 |
|
| 78 |
$response->status = $data->status ?? Response::STATUS_SUCCESS; |
| 79 |
unset( $data->status ); |
| 80 |
|
| 81 |
$response->data = $data; |
| 82 |
} catch ( Throwable $e ) { |
| 83 |
$response->message = $e->getMessage(); |
| 84 |
} |
| 85 |
|
| 86 |
wp_send_json( $response ); |
| 87 |
} |
| 88 |
} |
| 89 |
|