oont-contents/plugins/astra-addon/admin/core/includes/class-astra-addon-admin-ajax.php
2025-02-08 15:10:23 +01:00

406 lines
12 KiB
PHP

<?php
/**
* Astra Admin Ajax Base.
*
* @package Astra
* @since 4.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Class Astra_Addon_Admin_Ajax.
*
* @since 4.0.0
*/
class Astra_Addon_Admin_Ajax {
/**
* Ajax action prefix.
*
* @var string
* @since 4.0.0
*/
private $prefix = 'astra';
/**
* Instance
*
* @var object Class object.
* @since 4.0.0
*/
private static $instance;
/**
* Initiator
*
* @since 4.0.0
* @return object initialized object of class.
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Erros class instance.
*
* @var object
* @since 4.0.0
*/
private $errors = array();
/**
* Constructor
*
* @since 4.0.0
*/
public function __construct() {
$this->errors = array(
'permission' => __( 'Sorry, you are not allowed to do this operation.', 'astra-addon' ),
'nonce' => __( 'Nonce validation failed', 'astra-addon' ),
'default' => __( 'Sorry, something went wrong.', 'astra-addon' ),
'invalid' => __( 'No post data found!', 'astra-addon' ),
);
// Ajax requests.
add_action( 'wp_ajax_astra_addon_update_module_status', array( $this, 'update_module_status' ) );
add_action( 'wp_ajax_astra_addon_bulk_activate_modules', array( $this, 'bulk_activate_modules' ) );
add_action( 'wp_ajax_astra_addon_bulk_deactivate_modules', array( $this, 'bulk_deactivate_modules' ) );
add_action( 'wp_ajax_astra_addon_clear_cache', array( $this, 'clear_cache' ) );
// Enable/Disable beta updates.
add_action( 'wp_ajax_astra_beta_updates', array( $this, 'enable_disable_beta_updates' ) );
// Enable/Disable file generation.
add_action( 'wp_ajax_astra_file_generation', array( $this, 'enable_disable_file_generation' ) );
// Enable/Disable file generation.
add_action( 'wp_ajax_astra_addon_update_whitelabel', array( $this, 'astra_addon_update_whitelabel' ) );
}
/**
* Return settings for admin dashboard app.
*
* @param array $data_settings admin settings based on their data types.
*
* @return array
* @since 4.0.0
*/
public function astra_admin_settings_typewise( $data_settings ) {
return $data_settings;
}
/**
* Update pro addon module status. activate/deactivate
*
* @since 4.0.0
*/
public function update_module_status() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( $response_data );
}
if ( empty( $_POST ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
/**
* Nonce verification.
*/
if ( ! check_ajax_referer( 'astra_addon_update_admin_setting', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$module_id = isset( $_POST['module_id'] ) ? sanitize_text_field( $_POST['module_id'] ) : '';
$module_status = isset( $_POST['module_status'] ) ? sanitize_text_field( $_POST['module_status'] ) : '';
$extensions = Astra_Ext_Extension::get_enabled_addons();
$extensions[ $module_id ] = 'activate' === $module_status ? $module_id : false;
$extensions = array_map( 'esc_attr', $extensions );
Astra_Admin_Helper::update_admin_settings_option( '_astra_ext_enabled_extensions', $extensions );
if ( 'http2' == $module_id ) {
Astra_Admin_Helper::update_admin_settings_option( '_astra_ext_http2', true );
}
set_transient( 'astra_addon_activated_transient', $module_id );
wp_send_json_success();
}
/**
* Activate all module
*/
public function bulk_activate_modules() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( $response_data );
}
if ( empty( $_POST ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
/**
* Nonce verification.
*/
if ( ! check_ajax_referer( 'astra_addon_update_admin_setting', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
// Get all extensions.
$all_extensions = Astra_Ext_Extension::get_addons();
// Sanitize Addon list.
foreach ( $all_extensions as $key => $value ) {
$all_extensions[ sanitize_key( $key ) ] = $value;
}
$new_extensions = array();
// Set all extension to enabled.
foreach ( $all_extensions as $slug => $value ) {
$new_extensions[ $slug ] = $slug;
}
// Escape attrs.
$new_extensions = array_map( 'esc_attr', $new_extensions );
// Update new_extensions.
Astra_Admin_Helper::update_admin_settings_option( '_astra_ext_enabled_extensions', $new_extensions );
Astra_Admin_Helper::update_admin_settings_option( '_astra_ext_http2', true );
set_transient( 'astra_addon_activated_transient', $new_extensions );
wp_send_json_success();
}
/**
* Deactivate all module
*/
public function bulk_deactivate_modules() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( $response_data );
}
if ( empty( $_POST ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
/**
* Nonce verification.
*/
if ( ! check_ajax_referer( 'astra_addon_update_admin_setting', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
// Get all extensions.
$old_extensions = array_map( 'sanitize_text_field', Astra_Ext_Extension::get_enabled_addons() );
$new_extensions = array();
// Set all extension to enabled.
foreach ( $old_extensions as $slug => $value ) {
$new_extensions[ $slug ] = false;
}
// Escape attrs.
$new_extensions = array_map( 'esc_attr', $new_extensions );
// Update new_extensions.
Astra_Admin_Helper::update_admin_settings_option( '_astra_ext_enabled_extensions', $new_extensions );
Astra_Admin_Helper::delete_admin_settings_option( '_astra_ext_http2' );
set_transient( 'astra_addon_deactivated_transient', $new_extensions );
wp_send_json_success();
}
/**
* Clear assets cache.
*/
public function clear_cache() {
Astra_Minify::refresh_assets();
wp_send_json_success();
}
/**
* Ajax handler to enable / disable the beta updates for Astra Theme and Astra Pro.
*
* @since 1.5.1
* @return void
*/
public function enable_disable_beta_updates() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( $response_data );
}
if ( empty( $_POST ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
/**
* Nonce verification.
*/
if ( ! check_ajax_referer( 'astra_addon_update_admin_setting', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$status = isset( $_POST['status'] ) ? sanitize_text_field( $_POST['status'] ) : false;
if ( false !== $status ) {
Astra_Admin_Helper::update_admin_settings_option( '_astra_beta_updates', $status, true );
wp_send_json_success();
}
wp_send_json_error();
}
/**
* Ajax handler to enable / disable the file generation of scripts/styles for Astra Theme and Astra Pro.
*
* @since 1.5.1
* @return void
*/
public function enable_disable_file_generation() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( $response_data );
}
if ( empty( $_POST ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
/**
* Nonce verification.
*/
if ( ! check_ajax_referer( 'astra_addon_update_admin_setting', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$status = isset( $_POST['status'] ) ? sanitize_text_field( $_POST['status'] ) : false;
if ( false !== $status ) {
update_option( '_astra_file_generation', $status );
wp_send_json_success();
}
wp_send_json_error();
}
/**
* Save whitelabel Settings.
*
* @since 4.0.0
*/
public function astra_addon_update_whitelabel() {
$response_data = array( 'message' => $this->get_error_msg( 'permission' ) );
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( $response_data );
}
if ( empty( $_POST ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
/**
* Nonce verification.
*/
if ( ! check_ajax_referer( 'astra_addon_update_admin_setting', 'security', false ) ) {
$response_data = array( 'message' => $this->get_error_msg( 'nonce' ) );
wp_send_json_error( $response_data );
}
$white_label_settings = Astra_Ext_White_Label_Markup::get_white_labels();
$data = isset( $_POST['data'] ) ? array_map( 'sanitize_text_field', json_decode( stripslashes( sanitize_text_field( $_POST['data'] ) ), true ) ) : array();
$parent = isset( $_POST['parent'] ) ? sanitize_text_field( $_POST['parent'] ) : false;
$key = isset( $_POST['key'] ) ? sanitize_text_field( $_POST['key'] ) : false;
$value = isset( $_POST['value'] ) ? stripslashes( sanitize_text_field( $_POST['value'] ) ) : false;
if ( $parent && $key ) {
if ( ! $parent || ! $key || ! $value ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
$white_label_settings[ $parent ][ $key ] = $value;
} else {
if ( ! $data ) {
$response_data = array( 'message' => $this->get_error_msg( 'invalid' ) );
wp_send_json_error( $response_data );
}
$white_label_settings['astra-agency']['author'] = isset( $data['agencyAuthorName'] ) ? $data['agencyAuthorName'] : $white_label_settings['astra-agency']['author'];
$white_label_settings['astra-agency']['author_url'] = isset( $data['agencyAuthorURL'] ) ? $data['agencyAuthorURL'] : $white_label_settings['astra-agency']['author_url'];
$white_label_settings['astra-agency']['licence'] = isset( $data['agencyLicenseLink'] ) ? $data['agencyLicenseLink'] : $white_label_settings['astra-agency']['licence'];
$white_label_settings['astra']['name'] = isset( $data['themeName'] ) ? $data['themeName'] : $white_label_settings['astra']['name'];
$white_label_settings['astra']['description'] = isset( $data['themeDescription'] ) ? $data['themeDescription'] : $white_label_settings['astra']['description'];
$white_label_settings['astra']['screenshot'] = isset( $data['themeScreenshotURL'] ) ? $data['themeScreenshotURL'] : $white_label_settings['astra']['screenshot'];
$white_label_settings['astra']['icon'] = isset( $data['themeIconURL'] ) ? $data['themeIconURL'] : $white_label_settings['astra']['icon'];
$white_label_settings['astra-pro']['name'] = isset( $data['pluginName'] ) ? $data['pluginName'] : $white_label_settings['astra-pro']['name'];
$white_label_settings['astra-pro']['description'] = isset( $data['pluginDescription'] ) ? $data['pluginDescription'] : $white_label_settings['astra-pro']['description'];
$white_label_settings['astra-sites']['name'] = isset( $data['sTPluginName'] ) ? $data['sTPluginName'] : $white_label_settings['astra-sites']['name'];
$white_label_settings['astra-sites']['description'] = isset( $data['sTPluginDescription'] ) ? $data['sTPluginDescription'] : $white_label_settings['astra-sites']['description'];
}
Astra_Admin_Helper::update_admin_settings_option( '_astra_ext_white_label', $white_label_settings, true );
$theme_name = Astra_Ext_White_Label_Markup::get_whitelabel_string( 'astra', 'name', 'astra' );
$response = array(
'rebranded_theme_name' => rawurlencode( $theme_name ),
);
wp_send_json_success( $response );
}
/**
* Get ajax error message.
*
* @param string $type Message type.
* @return string
* @since 4.0.0
*/
public function get_error_msg( $type ) {
if ( ! isset( $this->errors[ $type ] ) ) {
$type = 'default';
}
return $this->errors[ $type ];
}
}
Astra_Addon_Admin_Ajax::get_instance();