Current Path : /storage/v11800/affypharma/public_html/wp-content/plugins/auxin-elements/admin/includes/classes/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/affypharma/public_html/wp-content/plugins/auxin-elements/admin/includes/classes/class-auxin-upgrader-ajax-handlers.php |
<?php
class Auxin_Upgrader_Ajax_Handlers {
protected $skin;
public function __construct(){
// Include upgrader class
include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
$this->skin = new WP_Ajax_Upgrader_Skin();
}
public function run( $key, $type ){
switch ( $type ) {
case 'themes':
$this->update_theme( $key );
break;
case 'plugins':
$this->update_plugin( $key );
break;
default:
wp_send_json_error( array(
'slug' => '',
'errorCode' => 'invalid_update_type',
'errorMessage' => __( 'Please enter a valid update type.', 'auxin-elements' )
) );
}
}
/**
* Ajax handler for updating a plugin.
*
* @see Auxin_Upgrader_Plugin
*
* @global WP_Filesystem_Base $wp_filesystem Subclass
*/
private function update_plugin( $plugin ) {
$plugin = plugin_basename( sanitize_text_field( wp_unslash( $plugin ) ) );
$status = array(
'update' => 'plugin',
'slug' => sanitize_key( wp_unslash( dirname( $plugin ) ) )
);
if ( ! current_user_can( 'update_plugins' ) || 0 !== validate_file( $plugin ) ) {
$status['errorMessage'] = __( 'Sorry, you are not allowed to update plugins for this site.' );
wp_send_json_error( $status );
}
$upgrader = new Auxin_Upgrader_Plugin( $this->skin );
$result = $upgrader->start_upgrade( array( $plugin ), array(
'clear_update_cache' => 'last_checked'
) );
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
$status['debug'] = $this->skin->get_upgrade_messages();
}
if ( is_wp_error( $this->skin->result ) ) {
$status['errorCode'] = $this->skin->result->get_error_code();
$status['errorMessage'] = $this->skin->result->get_error_message();
wp_send_json_error( $status );
} elseif ( $this->skin->get_errors()->get_error_code() ) {
$status['errorMessage'] = $this->skin->get_error_messages();
wp_send_json_error( $status );
} elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) {
$plugin_update_data = current( $result );
/*
* If the `update_plugins` site transient is empty (e.g. when you update
* two plugins in quick succession before the transient repopulates),
* this may be the return.
*
* Preferably something can be done to ensure `update_plugins` isn't empty.
* For now, surface some sort of error here.
*/
if ( true === $plugin_update_data ) {
$status['errorMessage'] = __( 'Plugin update failed.' );
wp_send_json_error( $status );
}
$status['successMessage'] = __( 'Plugin updated successfully.' );
wp_send_json_success( $status );
} elseif ( false === $result ) {
global $wp_filesystem;
$status['errorCode'] = 'unable_to_connect_to_filesystem';
$status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' );
// Pass through the error from WP_Filesystem if one was raised.
if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
$status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
}
wp_send_json_error( $status );
}
// An unhandled error occurred.
$status['errorMessage'] = __( 'Plugin update failed.' );
wp_send_json_error( $status );
}
/**
* Ajax handler for updating a theme.
*
* @see Auxin_Upgrader_Theme
*
* @global WP_Filesystem_Base $wp_filesystem Subclass
*/
private function update_theme( $stylesheet ) {
$stylesheet = preg_replace( '/[^A-z0-9_\-]/', '', wp_unslash( $stylesheet ) );
$status = array(
'update' => 'theme',
'slug' => sanitize_key( wp_unslash( dirname( $stylesheet ) ) )
);
if ( ! current_user_can( 'update_themes' ) ) {
$status['errorMessage'] = __( 'Sorry, you are not allowed to update themes for this site.' );
wp_send_json_error( $status );
}
$upgrader = new Auxin_Upgrader_Theme( $this->skin );
$result = $upgrader->start_upgrade( array( $stylesheet ), array(
'clear_update_cache' => 'last_checked'
) );
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
$status['debug'] = $this->skin->get_upgrade_messages();
}
if ( is_wp_error( $this->skin->result ) ) {
$status['errorCode'] = $this->skin->result->get_error_code();
$status['errorMessage'] = $this->skin->result->get_error_message();
wp_send_json_error( $status );
} elseif ( $this->skin->get_errors()->get_error_code() ) {
$status['errorMessage'] = $this->skin->get_error_messages();
wp_send_json_error( $status );
} elseif ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
// Theme is already at the latest version.
if ( true === $result[ $stylesheet ] ) {
$status['errorMessage'] = $upgrader->strings['up_to_date'];
wp_send_json_error( $status );
}
$status['successMessage'] = __( 'Theme updated successfully.' );
wp_send_json_success( $status );
} elseif ( false === $result ) {
global $wp_filesystem;
$status['errorCode'] = 'unable_to_connect_to_filesystem';
$status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' );
// Pass through the error from WP_Filesystem if one was raised.
if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
$status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
}
wp_send_json_error( $status );
}
// An unhandled error occurred.
$status['errorMessage'] = __( 'Update failed.' );
wp_send_json_error( $status );
}
}