File "class-ajax.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/orderable/inc/vendor/iconic-onboard/inc/class-ajax.php
File size: 5.97 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* AJAX.
*
* @package iconic-onboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
if ( class_exists( 'Orderable_Onboard_Ajax' ) ) {
return;
}
/**
* Orderable_Onboard_Ajax.
*/
class Orderable_Onboard_Ajax {
/**
* Plugin Slug.
*
* @var mixed $plugin_slug
*/
protected static $plugin_slug;
/**
* Init
*
* @param array $args Configuration settings.
*/
public static function run( $args ) {
self::$plugin_slug = $args['plugin_slug'];
self::add_ajax_events();
}
/**
* Hook in methods - uses WordPress ajax handlers (admin-ajax).
*/
public static function add_ajax_events() {
$ajax_events = array(
'dismiss_modal' => false,
'save_modal' => false,
'install_plugin' => false,
);
$plugin_slug = self::$plugin_slug;
foreach ( $ajax_events as $ajax_event => $nopriv ) {
add_action( "wp_ajax_iconic_onboard_{$plugin_slug}_{$ajax_event}", array( __CLASS__, $ajax_event ) );
if ( $nopriv ) {
add_action( "wp_ajax_nopriv_iconic_onboard_{$plugin_slug}_{$ajax_event}", array( __CLASS__, $ajax_event ) );
}
}
}
/**
* Save dimiss key in wp_options when user dismiss modal
*
* @return void
*/
public static function dismiss_modal() {
check_ajax_referer( 'iconic-onboard', 'security' );
$plugin_slug = filter_input( INPUT_POST, 'plugin_slug' );
if ( $plugin_slug ) {
update_option( "{$plugin_slug}_onboard_dismiss_modal", '1' );
wp_send_json_success();
}
}
/**
* Runs when modal is saved.
*
* @return void
*/
public static function save_modal() {
check_ajax_referer( 'iconic-onboard', 'security' );
$plugin_slug = filter_input( INPUT_POST, 'plugin_slug' );
if ( $plugin_slug ) {
$fields_str = filter_input( INPUT_POST, 'fields' );
$fields_arr = array();
parse_str( $fields_str, $fields_arr );
$result = array(
'success' => true,
);
$result = apply_filters( "iconic_onboard_save_{$plugin_slug}_result", $result, $fields_arr );
if ( ! empty( $result['success'] ) ) {
update_option( "{$plugin_slug}_onboard_save_modal", '1' );
}
wp_send_json( $result );
}
}
/**
* Install a plugin from .org in the background via a cron job (used by
* installer - opt in).
*
* @throws Exception If unable to proceed with plugin installation.
* @since 2.6.0
*/
public static function install_plugin() {
$plugin_data = (array) filter_input( INPUT_POST, 'plugin_data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
if ( empty( $plugin_data ) ) {
wp_send_json_error();
}
$success = array(
'button' => '<a href="#" class="button button-large button-primary iconic-onboard-modal__button iconic-onboard-modal__nextslide ">' . __( 'Installed', 'iconic-onboard' ) . ' <span class="dashicons dashicons-yes"></span></a>',
);
if ( ! empty( $plugin_data['repo-slug'] ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
require_once ABSPATH . 'wp-admin/includes/plugin.php';
WP_Filesystem();
$skin = new Automatic_Upgrader_Skin();
$upgrader = new WP_Upgrader( $skin );
$installed_plugins = array_reduce( array_keys( get_plugins() ), array( 'Orderable_Onboard', 'associate_plugin_file' ) );
if ( empty( $installed_plugins ) ) {
$installed_plugins = array();
}
$plugin_slug = $plugin_data['repo-slug'];
$plugin_file = isset( $plugin_data['file'] ) ? $plugin_data['file'] : $plugin_slug . '.php';
$installed = false;
$activate = false;
// See if the plugin is installed already.
if ( isset( $installed_plugins[ $plugin_file ] ) ) {
$installed = true;
$activate = ! is_plugin_active( $installed_plugins[ $plugin_file ] );
}
// Install this thing!
if ( ! $installed ) {
// Suppress feedback.
ob_start();
try {
$plugin_information = plugins_api(
'plugin_information',
array(
'slug' => $plugin_slug,
'fields' => array(
'short_description' => false,
'sections' => false,
'requires' => false,
'rating' => false,
'ratings' => false,
'downloaded' => false,
'last_updated' => false,
'added' => false,
'tags' => false,
'homepage' => false,
'donate_link' => false,
'author_profile' => false,
'author' => false,
),
)
);
if ( is_wp_error( $plugin_information ) ) {
wp_send_json_error();
}
$package = $plugin_information->download_link;
$download = $upgrader->download_package( $package );
if ( is_wp_error( $download ) ) {
wp_send_json_error();
}
$working_dir = $upgrader->unpack_package( $download, true );
if ( is_wp_error( $working_dir ) ) {
wp_send_json_error();
}
$result = $upgrader->install_package(
array(
'source' => $working_dir,
'destination' => WP_PLUGIN_DIR,
'clear_destination' => false,
'abort_if_destination_exists' => false,
'clear_working' => true,
'hook_extra' => array(
'type' => 'plugin',
'action' => 'install',
),
)
);
if ( is_wp_error( $result ) ) {
wp_send_json_error();
}
$activate = true;
} catch ( Exception $e ) {
wp_send_json_error();
}
// Discard feedback.
ob_end_clean();
}
wp_clean_plugins_cache();
// Activate this thing.
if ( $activate ) {
try {
$result = activate_plugin( $installed ? $installed_plugins[ $plugin_file ] : $plugin_slug . '/' . $plugin_file );
if ( is_wp_error( $result ) ) {
wp_send_json_error();
}
wp_send_json_success( $success );
} catch ( Exception $e ) {
wp_send_json_error();
}
}
}
wp_send_json_success( $success );
}
}