Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-admin/includes
File: ajax-actions.php
}
[4000] Fix | Delete
[4001] Fix | Delete
/**
[4002] Fix | Delete
* Handles cropping an image via AJAX.
[4003] Fix | Delete
*
[4004] Fix | Delete
* @since 4.3.0
[4005] Fix | Delete
*/
[4006] Fix | Delete
function wp_ajax_crop_image() {
[4007] Fix | Delete
$attachment_id = absint( $_POST['id'] );
[4008] Fix | Delete
[4009] Fix | Delete
check_ajax_referer( 'image_editor-' . $attachment_id, 'nonce' );
[4010] Fix | Delete
[4011] Fix | Delete
if ( empty( $attachment_id ) || ! current_user_can( 'edit_post', $attachment_id ) ) {
[4012] Fix | Delete
wp_send_json_error();
[4013] Fix | Delete
}
[4014] Fix | Delete
[4015] Fix | Delete
$context = str_replace( '_', '-', $_POST['context'] );
[4016] Fix | Delete
$data = array_map( 'absint', $_POST['cropDetails'] );
[4017] Fix | Delete
$cropped = wp_crop_image( $attachment_id, $data['x1'], $data['y1'], $data['width'], $data['height'], $data['dst_width'], $data['dst_height'] );
[4018] Fix | Delete
[4019] Fix | Delete
if ( ! $cropped || is_wp_error( $cropped ) ) {
[4020] Fix | Delete
wp_send_json_error( array( 'message' => __( 'Image could not be processed.' ) ) );
[4021] Fix | Delete
}
[4022] Fix | Delete
[4023] Fix | Delete
switch ( $context ) {
[4024] Fix | Delete
case 'site-icon':
[4025] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/class-wp-site-icon.php';
[4026] Fix | Delete
$wp_site_icon = new WP_Site_Icon();
[4027] Fix | Delete
[4028] Fix | Delete
// Skip creating a new attachment if the attachment is a Site Icon.
[4029] Fix | Delete
if ( get_post_meta( $attachment_id, '_wp_attachment_context', true ) === $context ) {
[4030] Fix | Delete
[4031] Fix | Delete
// Delete the temporary cropped file, we don't need it.
[4032] Fix | Delete
wp_delete_file( $cropped );
[4033] Fix | Delete
[4034] Fix | Delete
// Additional sizes in wp_prepare_attachment_for_js().
[4035] Fix | Delete
add_filter( 'image_size_names_choose', array( $wp_site_icon, 'additional_sizes' ) );
[4036] Fix | Delete
break;
[4037] Fix | Delete
}
[4038] Fix | Delete
[4039] Fix | Delete
/** This filter is documented in wp-admin/includes/class-custom-image-header.php */
[4040] Fix | Delete
$cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
[4041] Fix | Delete
[4042] Fix | Delete
// Copy attachment properties.
[4043] Fix | Delete
$attachment = wp_copy_parent_attachment_properties( $cropped, $attachment_id, $context );
[4044] Fix | Delete
[4045] Fix | Delete
// Update the attachment.
[4046] Fix | Delete
add_filter( 'intermediate_image_sizes_advanced', array( $wp_site_icon, 'additional_sizes' ) );
[4047] Fix | Delete
$attachment_id = $wp_site_icon->insert_attachment( $attachment, $cropped );
[4048] Fix | Delete
remove_filter( 'intermediate_image_sizes_advanced', array( $wp_site_icon, 'additional_sizes' ) );
[4049] Fix | Delete
[4050] Fix | Delete
// Additional sizes in wp_prepare_attachment_for_js().
[4051] Fix | Delete
add_filter( 'image_size_names_choose', array( $wp_site_icon, 'additional_sizes' ) );
[4052] Fix | Delete
break;
[4053] Fix | Delete
[4054] Fix | Delete
default:
[4055] Fix | Delete
/**
[4056] Fix | Delete
* Fires before a cropped image is saved.
[4057] Fix | Delete
*
[4058] Fix | Delete
* Allows to add filters to modify the way a cropped image is saved.
[4059] Fix | Delete
*
[4060] Fix | Delete
* @since 4.3.0
[4061] Fix | Delete
*
[4062] Fix | Delete
* @param string $context The Customizer control requesting the cropped image.
[4063] Fix | Delete
* @param int $attachment_id The attachment ID of the original image.
[4064] Fix | Delete
* @param string $cropped Path to the cropped image file.
[4065] Fix | Delete
*/
[4066] Fix | Delete
do_action( 'wp_ajax_crop_image_pre_save', $context, $attachment_id, $cropped );
[4067] Fix | Delete
[4068] Fix | Delete
/** This filter is documented in wp-admin/includes/class-custom-image-header.php */
[4069] Fix | Delete
$cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
[4070] Fix | Delete
[4071] Fix | Delete
// Copy attachment properties.
[4072] Fix | Delete
$attachment = wp_copy_parent_attachment_properties( $cropped, $attachment_id, $context );
[4073] Fix | Delete
[4074] Fix | Delete
$attachment_id = wp_insert_attachment( $attachment, $cropped );
[4075] Fix | Delete
$metadata = wp_generate_attachment_metadata( $attachment_id, $cropped );
[4076] Fix | Delete
[4077] Fix | Delete
/**
[4078] Fix | Delete
* Filters the cropped image attachment metadata.
[4079] Fix | Delete
*
[4080] Fix | Delete
* @since 4.3.0
[4081] Fix | Delete
*
[4082] Fix | Delete
* @see wp_generate_attachment_metadata()
[4083] Fix | Delete
*
[4084] Fix | Delete
* @param array $metadata Attachment metadata.
[4085] Fix | Delete
*/
[4086] Fix | Delete
$metadata = apply_filters( 'wp_ajax_cropped_attachment_metadata', $metadata );
[4087] Fix | Delete
wp_update_attachment_metadata( $attachment_id, $metadata );
[4088] Fix | Delete
[4089] Fix | Delete
/**
[4090] Fix | Delete
* Filters the attachment ID for a cropped image.
[4091] Fix | Delete
*
[4092] Fix | Delete
* @since 4.3.0
[4093] Fix | Delete
*
[4094] Fix | Delete
* @param int $attachment_id The attachment ID of the cropped image.
[4095] Fix | Delete
* @param string $context The Customizer control requesting the cropped image.
[4096] Fix | Delete
*/
[4097] Fix | Delete
$attachment_id = apply_filters( 'wp_ajax_cropped_attachment_id', $attachment_id, $context );
[4098] Fix | Delete
}
[4099] Fix | Delete
[4100] Fix | Delete
wp_send_json_success( wp_prepare_attachment_for_js( $attachment_id ) );
[4101] Fix | Delete
}
[4102] Fix | Delete
[4103] Fix | Delete
/**
[4104] Fix | Delete
* Handles generating a password via AJAX.
[4105] Fix | Delete
*
[4106] Fix | Delete
* @since 4.4.0
[4107] Fix | Delete
*/
[4108] Fix | Delete
function wp_ajax_generate_password() {
[4109] Fix | Delete
wp_send_json_success( wp_generate_password( 24 ) );
[4110] Fix | Delete
}
[4111] Fix | Delete
[4112] Fix | Delete
/**
[4113] Fix | Delete
* Handles generating a password in the no-privilege context via AJAX.
[4114] Fix | Delete
*
[4115] Fix | Delete
* @since 5.7.0
[4116] Fix | Delete
*/
[4117] Fix | Delete
function wp_ajax_nopriv_generate_password() {
[4118] Fix | Delete
wp_send_json_success( wp_generate_password( 24 ) );
[4119] Fix | Delete
}
[4120] Fix | Delete
[4121] Fix | Delete
/**
[4122] Fix | Delete
* Handles saving the user's WordPress.org username via AJAX.
[4123] Fix | Delete
*
[4124] Fix | Delete
* @since 4.4.0
[4125] Fix | Delete
*/
[4126] Fix | Delete
function wp_ajax_save_wporg_username() {
[4127] Fix | Delete
if ( ! current_user_can( 'install_themes' ) && ! current_user_can( 'install_plugins' ) ) {
[4128] Fix | Delete
wp_send_json_error();
[4129] Fix | Delete
}
[4130] Fix | Delete
[4131] Fix | Delete
check_ajax_referer( 'save_wporg_username_' . get_current_user_id() );
[4132] Fix | Delete
[4133] Fix | Delete
$username = isset( $_REQUEST['username'] ) ? wp_unslash( $_REQUEST['username'] ) : false;
[4134] Fix | Delete
[4135] Fix | Delete
if ( ! $username ) {
[4136] Fix | Delete
wp_send_json_error();
[4137] Fix | Delete
}
[4138] Fix | Delete
[4139] Fix | Delete
wp_send_json_success( update_user_meta( get_current_user_id(), 'wporg_favorites', $username ) );
[4140] Fix | Delete
}
[4141] Fix | Delete
[4142] Fix | Delete
/**
[4143] Fix | Delete
* Handles installing a theme via AJAX.
[4144] Fix | Delete
*
[4145] Fix | Delete
* @since 4.6.0
[4146] Fix | Delete
*
[4147] Fix | Delete
* @see Theme_Upgrader
[4148] Fix | Delete
*
[4149] Fix | Delete
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
[4150] Fix | Delete
*/
[4151] Fix | Delete
function wp_ajax_install_theme() {
[4152] Fix | Delete
check_ajax_referer( 'updates' );
[4153] Fix | Delete
[4154] Fix | Delete
if ( empty( $_POST['slug'] ) ) {
[4155] Fix | Delete
wp_send_json_error(
[4156] Fix | Delete
array(
[4157] Fix | Delete
'slug' => '',
[4158] Fix | Delete
'errorCode' => 'no_theme_specified',
[4159] Fix | Delete
'errorMessage' => __( 'No theme specified.' ),
[4160] Fix | Delete
)
[4161] Fix | Delete
);
[4162] Fix | Delete
}
[4163] Fix | Delete
[4164] Fix | Delete
$slug = sanitize_key( wp_unslash( $_POST['slug'] ) );
[4165] Fix | Delete
[4166] Fix | Delete
$status = array(
[4167] Fix | Delete
'install' => 'theme',
[4168] Fix | Delete
'slug' => $slug,
[4169] Fix | Delete
);
[4170] Fix | Delete
[4171] Fix | Delete
if ( ! current_user_can( 'install_themes' ) ) {
[4172] Fix | Delete
$status['errorMessage'] = __( 'Sorry, you are not allowed to install themes on this site.' );
[4173] Fix | Delete
wp_send_json_error( $status );
[4174] Fix | Delete
}
[4175] Fix | Delete
[4176] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
[4177] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/theme.php';
[4178] Fix | Delete
[4179] Fix | Delete
$api = themes_api(
[4180] Fix | Delete
'theme_information',
[4181] Fix | Delete
array(
[4182] Fix | Delete
'slug' => $slug,
[4183] Fix | Delete
'fields' => array( 'sections' => false ),
[4184] Fix | Delete
)
[4185] Fix | Delete
);
[4186] Fix | Delete
[4187] Fix | Delete
if ( is_wp_error( $api ) ) {
[4188] Fix | Delete
$status['errorMessage'] = $api->get_error_message();
[4189] Fix | Delete
wp_send_json_error( $status );
[4190] Fix | Delete
}
[4191] Fix | Delete
[4192] Fix | Delete
$skin = new WP_Ajax_Upgrader_Skin();
[4193] Fix | Delete
$upgrader = new Theme_Upgrader( $skin );
[4194] Fix | Delete
$result = $upgrader->install( $api->download_link );
[4195] Fix | Delete
[4196] Fix | Delete
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
[4197] Fix | Delete
$status['debug'] = $skin->get_upgrade_messages();
[4198] Fix | Delete
}
[4199] Fix | Delete
[4200] Fix | Delete
if ( is_wp_error( $result ) ) {
[4201] Fix | Delete
$status['errorCode'] = $result->get_error_code();
[4202] Fix | Delete
$status['errorMessage'] = $result->get_error_message();
[4203] Fix | Delete
wp_send_json_error( $status );
[4204] Fix | Delete
} elseif ( is_wp_error( $skin->result ) ) {
[4205] Fix | Delete
$status['errorCode'] = $skin->result->get_error_code();
[4206] Fix | Delete
$status['errorMessage'] = $skin->result->get_error_message();
[4207] Fix | Delete
wp_send_json_error( $status );
[4208] Fix | Delete
} elseif ( $skin->get_errors()->has_errors() ) {
[4209] Fix | Delete
$status['errorMessage'] = $skin->get_error_messages();
[4210] Fix | Delete
wp_send_json_error( $status );
[4211] Fix | Delete
} elseif ( is_null( $result ) ) {
[4212] Fix | Delete
global $wp_filesystem;
[4213] Fix | Delete
[4214] Fix | Delete
$status['errorCode'] = 'unable_to_connect_to_filesystem';
[4215] Fix | Delete
$status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' );
[4216] Fix | Delete
[4217] Fix | Delete
// Pass through the error from WP_Filesystem if one was raised.
[4218] Fix | Delete
if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) {
[4219] Fix | Delete
$status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
[4220] Fix | Delete
}
[4221] Fix | Delete
[4222] Fix | Delete
wp_send_json_error( $status );
[4223] Fix | Delete
}
[4224] Fix | Delete
[4225] Fix | Delete
$status['themeName'] = wp_get_theme( $slug )->get( 'Name' );
[4226] Fix | Delete
[4227] Fix | Delete
if ( current_user_can( 'switch_themes' ) ) {
[4228] Fix | Delete
if ( is_multisite() ) {
[4229] Fix | Delete
$status['activateUrl'] = add_query_arg(
[4230] Fix | Delete
array(
[4231] Fix | Delete
'action' => 'enable',
[4232] Fix | Delete
'_wpnonce' => wp_create_nonce( 'enable-theme_' . $slug ),
[4233] Fix | Delete
'theme' => $slug,
[4234] Fix | Delete
),
[4235] Fix | Delete
network_admin_url( 'themes.php' )
[4236] Fix | Delete
);
[4237] Fix | Delete
} else {
[4238] Fix | Delete
$status['activateUrl'] = add_query_arg(
[4239] Fix | Delete
array(
[4240] Fix | Delete
'action' => 'activate',
[4241] Fix | Delete
'_wpnonce' => wp_create_nonce( 'switch-theme_' . $slug ),
[4242] Fix | Delete
'stylesheet' => $slug,
[4243] Fix | Delete
),
[4244] Fix | Delete
admin_url( 'themes.php' )
[4245] Fix | Delete
);
[4246] Fix | Delete
}
[4247] Fix | Delete
}
[4248] Fix | Delete
[4249] Fix | Delete
$theme = wp_get_theme( $slug );
[4250] Fix | Delete
$status['blockTheme'] = $theme->is_block_theme();
[4251] Fix | Delete
[4252] Fix | Delete
if ( ! is_multisite() && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) {
[4253] Fix | Delete
$status['customizeUrl'] = add_query_arg(
[4254] Fix | Delete
array(
[4255] Fix | Delete
'return' => urlencode( network_admin_url( 'theme-install.php', 'relative' ) ),
[4256] Fix | Delete
),
[4257] Fix | Delete
wp_customize_url( $slug )
[4258] Fix | Delete
);
[4259] Fix | Delete
}
[4260] Fix | Delete
[4261] Fix | Delete
/*
[4262] Fix | Delete
* See WP_Theme_Install_List_Table::_get_theme_status() if we wanted to check
[4263] Fix | Delete
* on post-installation status.
[4264] Fix | Delete
*/
[4265] Fix | Delete
wp_send_json_success( $status );
[4266] Fix | Delete
}
[4267] Fix | Delete
[4268] Fix | Delete
/**
[4269] Fix | Delete
* Handles updating a theme via AJAX.
[4270] Fix | Delete
*
[4271] Fix | Delete
* @since 4.6.0
[4272] Fix | Delete
*
[4273] Fix | Delete
* @see Theme_Upgrader
[4274] Fix | Delete
*
[4275] Fix | Delete
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
[4276] Fix | Delete
*/
[4277] Fix | Delete
function wp_ajax_update_theme() {
[4278] Fix | Delete
check_ajax_referer( 'updates' );
[4279] Fix | Delete
[4280] Fix | Delete
if ( empty( $_POST['slug'] ) ) {
[4281] Fix | Delete
wp_send_json_error(
[4282] Fix | Delete
array(
[4283] Fix | Delete
'slug' => '',
[4284] Fix | Delete
'errorCode' => 'no_theme_specified',
[4285] Fix | Delete
'errorMessage' => __( 'No theme specified.' ),
[4286] Fix | Delete
)
[4287] Fix | Delete
);
[4288] Fix | Delete
}
[4289] Fix | Delete
[4290] Fix | Delete
$stylesheet = preg_replace( '/[^A-z0-9_\-]/', '', wp_unslash( $_POST['slug'] ) );
[4291] Fix | Delete
$status = array(
[4292] Fix | Delete
'update' => 'theme',
[4293] Fix | Delete
'slug' => $stylesheet,
[4294] Fix | Delete
'oldVersion' => '',
[4295] Fix | Delete
'newVersion' => '',
[4296] Fix | Delete
);
[4297] Fix | Delete
[4298] Fix | Delete
if ( ! current_user_can( 'update_themes' ) ) {
[4299] Fix | Delete
$status['errorMessage'] = __( 'Sorry, you are not allowed to update themes for this site.' );
[4300] Fix | Delete
wp_send_json_error( $status );
[4301] Fix | Delete
}
[4302] Fix | Delete
[4303] Fix | Delete
$theme = wp_get_theme( $stylesheet );
[4304] Fix | Delete
if ( $theme->exists() ) {
[4305] Fix | Delete
$status['oldVersion'] = $theme->get( 'Version' );
[4306] Fix | Delete
}
[4307] Fix | Delete
[4308] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
[4309] Fix | Delete
[4310] Fix | Delete
$current = get_site_transient( 'update_themes' );
[4311] Fix | Delete
if ( empty( $current ) ) {
[4312] Fix | Delete
wp_update_themes();
[4313] Fix | Delete
}
[4314] Fix | Delete
[4315] Fix | Delete
$skin = new WP_Ajax_Upgrader_Skin();
[4316] Fix | Delete
$upgrader = new Theme_Upgrader( $skin );
[4317] Fix | Delete
$result = $upgrader->bulk_upgrade( array( $stylesheet ) );
[4318] Fix | Delete
[4319] Fix | Delete
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
[4320] Fix | Delete
$status['debug'] = $skin->get_upgrade_messages();
[4321] Fix | Delete
}
[4322] Fix | Delete
[4323] Fix | Delete
if ( is_wp_error( $skin->result ) ) {
[4324] Fix | Delete
$status['errorCode'] = $skin->result->get_error_code();
[4325] Fix | Delete
$status['errorMessage'] = $skin->result->get_error_message();
[4326] Fix | Delete
wp_send_json_error( $status );
[4327] Fix | Delete
} elseif ( $skin->get_errors()->has_errors() ) {
[4328] Fix | Delete
$status['errorMessage'] = $skin->get_error_messages();
[4329] Fix | Delete
wp_send_json_error( $status );
[4330] Fix | Delete
} elseif ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
[4331] Fix | Delete
[4332] Fix | Delete
// Theme is already at the latest version.
[4333] Fix | Delete
if ( true === $result[ $stylesheet ] ) {
[4334] Fix | Delete
$status['errorMessage'] = $upgrader->strings['up_to_date'];
[4335] Fix | Delete
wp_send_json_error( $status );
[4336] Fix | Delete
}
[4337] Fix | Delete
[4338] Fix | Delete
$theme = wp_get_theme( $stylesheet );
[4339] Fix | Delete
if ( $theme->exists() ) {
[4340] Fix | Delete
$status['newVersion'] = $theme->get( 'Version' );
[4341] Fix | Delete
}
[4342] Fix | Delete
[4343] Fix | Delete
wp_send_json_success( $status );
[4344] Fix | Delete
} elseif ( false === $result ) {
[4345] Fix | Delete
global $wp_filesystem;
[4346] Fix | Delete
[4347] Fix | Delete
$status['errorCode'] = 'unable_to_connect_to_filesystem';
[4348] Fix | Delete
$status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' );
[4349] Fix | Delete
[4350] Fix | Delete
// Pass through the error from WP_Filesystem if one was raised.
[4351] Fix | Delete
if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) {
[4352] Fix | Delete
$status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
[4353] Fix | Delete
}
[4354] Fix | Delete
[4355] Fix | Delete
wp_send_json_error( $status );
[4356] Fix | Delete
}
[4357] Fix | Delete
[4358] Fix | Delete
// An unhandled error occurred.
[4359] Fix | Delete
$status['errorMessage'] = __( 'Theme update failed.' );
[4360] Fix | Delete
wp_send_json_error( $status );
[4361] Fix | Delete
}
[4362] Fix | Delete
[4363] Fix | Delete
/**
[4364] Fix | Delete
* Handles deleting a theme via AJAX.
[4365] Fix | Delete
*
[4366] Fix | Delete
* @since 4.6.0
[4367] Fix | Delete
*
[4368] Fix | Delete
* @see delete_theme()
[4369] Fix | Delete
*
[4370] Fix | Delete
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
[4371] Fix | Delete
*/
[4372] Fix | Delete
function wp_ajax_delete_theme() {
[4373] Fix | Delete
check_ajax_referer( 'updates' );
[4374] Fix | Delete
[4375] Fix | Delete
if ( empty( $_POST['slug'] ) ) {
[4376] Fix | Delete
wp_send_json_error(
[4377] Fix | Delete
array(
[4378] Fix | Delete
'slug' => '',
[4379] Fix | Delete
'errorCode' => 'no_theme_specified',
[4380] Fix | Delete
'errorMessage' => __( 'No theme specified.' ),
[4381] Fix | Delete
)
[4382] Fix | Delete
);
[4383] Fix | Delete
}
[4384] Fix | Delete
[4385] Fix | Delete
$stylesheet = preg_replace( '/[^A-z0-9_\-]/', '', wp_unslash( $_POST['slug'] ) );
[4386] Fix | Delete
$status = array(
[4387] Fix | Delete
'delete' => 'theme',
[4388] Fix | Delete
'slug' => $stylesheet,
[4389] Fix | Delete
);
[4390] Fix | Delete
[4391] Fix | Delete
if ( ! current_user_can( 'delete_themes' ) ) {
[4392] Fix | Delete
$status['errorMessage'] = __( 'Sorry, you are not allowed to delete themes on this site.' );
[4393] Fix | Delete
wp_send_json_error( $status );
[4394] Fix | Delete
}
[4395] Fix | Delete
[4396] Fix | Delete
if ( ! wp_get_theme( $stylesheet )->exists() ) {
[4397] Fix | Delete
$status['errorMessage'] = __( 'The requested theme does not exist.' );
[4398] Fix | Delete
wp_send_json_error( $status );
[4399] Fix | Delete
}
[4400] Fix | Delete
[4401] Fix | Delete
// Check filesystem credentials. `delete_theme()` will bail otherwise.
[4402] Fix | Delete
$url = wp_nonce_url( 'themes.php?action=delete&stylesheet=' . urlencode( $stylesheet ), 'delete-theme_' . $stylesheet );
[4403] Fix | Delete
[4404] Fix | Delete
ob_start();
[4405] Fix | Delete
$credentials = request_filesystem_credentials( $url );
[4406] Fix | Delete
ob_end_clean();
[4407] Fix | Delete
[4408] Fix | Delete
if ( false === $credentials || ! WP_Filesystem( $credentials ) ) {
[4409] Fix | Delete
global $wp_filesystem;
[4410] Fix | Delete
[4411] Fix | Delete
$status['errorCode'] = 'unable_to_connect_to_filesystem';
[4412] Fix | Delete
$status['errorMessage'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' );
[4413] Fix | Delete
[4414] Fix | Delete
// Pass through the error from WP_Filesystem if one was raised.
[4415] Fix | Delete
if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) {
[4416] Fix | Delete
$status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
[4417] Fix | Delete
}
[4418] Fix | Delete
[4419] Fix | Delete
wp_send_json_error( $status );
[4420] Fix | Delete
}
[4421] Fix | Delete
[4422] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/theme.php';
[4423] Fix | Delete
[4424] Fix | Delete
$result = delete_theme( $stylesheet );
[4425] Fix | Delete
[4426] Fix | Delete
if ( is_wp_error( $result ) ) {
[4427] Fix | Delete
$status['errorMessage'] = $result->get_error_message();
[4428] Fix | Delete
wp_send_json_error( $status );
[4429] Fix | Delete
} elseif ( false === $result ) {
[4430] Fix | Delete
$status['errorMessage'] = __( 'Theme could not be deleted.' );
[4431] Fix | Delete
wp_send_json_error( $status );
[4432] Fix | Delete
}
[4433] Fix | Delete
[4434] Fix | Delete
wp_send_json_success( $status );
[4435] Fix | Delete
}
[4436] Fix | Delete
[4437] Fix | Delete
/**
[4438] Fix | Delete
* Handles installing a plugin via AJAX.
[4439] Fix | Delete
*
[4440] Fix | Delete
* @since 4.6.0
[4441] Fix | Delete
*
[4442] Fix | Delete
* @see Plugin_Upgrader
[4443] Fix | Delete
*
[4444] Fix | Delete
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
[4445] Fix | Delete
*/
[4446] Fix | Delete
function wp_ajax_install_plugin() {
[4447] Fix | Delete
check_ajax_referer( 'updates' );
[4448] Fix | Delete
[4449] Fix | Delete
if ( empty( $_POST['slug'] ) ) {
[4450] Fix | Delete
wp_send_json_error(
[4451] Fix | Delete
array(
[4452] Fix | Delete
'slug' => '',
[4453] Fix | Delete
'errorCode' => 'no_plugin_specified',
[4454] Fix | Delete
'errorMessage' => __( 'No plugin specified.' ),
[4455] Fix | Delete
)
[4456] Fix | Delete
);
[4457] Fix | Delete
}
[4458] Fix | Delete
[4459] Fix | Delete
$status = array(
[4460] Fix | Delete
'install' => 'plugin',
[4461] Fix | Delete
'slug' => sanitize_key( wp_unslash( $_POST['slug'] ) ),
[4462] Fix | Delete
);
[4463] Fix | Delete
[4464] Fix | Delete
if ( ! current_user_can( 'install_plugins' ) ) {
[4465] Fix | Delete
$status['errorMessage'] = __( 'Sorry, you are not allowed to install plugins on this site.' );
[4466] Fix | Delete
wp_send_json_error( $status );
[4467] Fix | Delete
}
[4468] Fix | Delete
[4469] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
[4470] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
[4471] Fix | Delete
[4472] Fix | Delete
$api = plugins_api(
[4473] Fix | Delete
'plugin_information',
[4474] Fix | Delete
array(
[4475] Fix | Delete
'slug' => sanitize_key( wp_unslash( $_POST['slug'] ) ),
[4476] Fix | Delete
'fields' => array(
[4477] Fix | Delete
'sections' => false,
[4478] Fix | Delete
),
[4479] Fix | Delete
)
[4480] Fix | Delete
);
[4481] Fix | Delete
[4482] Fix | Delete
if ( is_wp_error( $api ) ) {
[4483] Fix | Delete
$status['errorMessage'] = $api->get_error_message();
[4484] Fix | Delete
wp_send_json_error( $status );
[4485] Fix | Delete
}
[4486] Fix | Delete
[4487] Fix | Delete
$status['pluginName'] = $api->name;
[4488] Fix | Delete
[4489] Fix | Delete
$skin = new WP_Ajax_Upgrader_Skin();
[4490] Fix | Delete
$upgrader = new Plugin_Upgrader( $skin );
[4491] Fix | Delete
$result = $upgrader->install( $api->download_link );
[4492] Fix | Delete
[4493] Fix | Delete
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
[4494] Fix | Delete
$status['debug'] = $skin->get_upgrade_messages();
[4495] Fix | Delete
}
[4496] Fix | Delete
[4497] Fix | Delete
if ( is_wp_error( $result ) ) {
[4498] Fix | Delete
$status['errorCode'] = $result->get_error_code();
[4499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function