wp_ajax_delete_plugin() – Ajax handler for deleting a plugin.

You appear to be a bot. Output may be restricted

Description

Ajax handler for deleting a plugin.

Usage

wp_ajax_delete_plugin();

Parameters

Returns

void

Source

File name: wordpress/wp-admin/includes/ajax-actions.php
Lines:

1 to 67 of 67
function wp_ajax_delete_plugin() {
  check_ajax_referer( 'updates' );

  if ( empty( $_POST['slug'] ) || empty( $_POST['plugin'] ) ) {
    wp_send_json_error(
      array(
        'slug'         => '',
        'errorCode'    => 'no_plugin_specified',
        'errorMessage' => __( 'No plugin specified.' ),
      )
    );
  }

  $plugin = plugin_basename( sanitize_text_field( wp_unslash( $_POST['plugin'] ) ) );

  $status = array(
    'delete' => 'plugin',
    'slug'   => sanitize_key( wp_unslash( $_POST['slug'] ) ),
  );

  if ( ! current_user_can( 'delete_plugins' ) || 0 !== validate_file( $plugin ) ) {
    $status['errorMessage'] = __( 'Sorry, you are not allowed to delete plugins for this site.' );
    wp_send_json_error( $status );
  }

  $plugin_data          = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
  $status['plugin']     = $plugin;
  $status['pluginName'] = $plugin_data['Name'];

  if ( is_plugin_active( $plugin ) ) {
    $status['errorMessage'] = __( 'You cannot delete a plugin while it is active on the main site.' );
    wp_send_json_error( $status );
  }

  // Check filesystem credentials. `delete_plugins()` will bail otherwise.
  $url = wp_nonce_url( 'plugins.php?action=delete-selected&verify-delete=1&checked[]=' . $plugin, 'bulk-plugins' );

  ob_start();
  $credentials = request_filesystem_credentials( $url );
  ob_end_clean();

  if ( false === $credentials || ! WP_Filesystem( $credentials ) ) {
    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->has_errors() ) {
      $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
    }

    wp_send_json_error( $status );
  }

  $result = delete_plugins( array( $plugin ) );

  if ( is_wp_error( $result ) ) {
    $status['errorMessage'] = $result->get_error_message();
    wp_send_json_error( $status );
  } elseif ( false === $result ) {
    $status['errorMessage'] = __( 'Plugin could not be deleted.' );
    wp_send_json_error( $status );
  }

  wp_send_json_success( $status );
}
 

 View on GitHub View on Trac