summaryrefslogtreecommitdiffstats
path: root/wp-admin/includes/ajax-actions.php
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:57:26 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:57:26 +0000
commit30883c26bdceb9eaf32c8d4a1b0c1bce223b5226 (patch)
tree39a02e2aeb21ab5b7923c6f5757d66d55b708912 /wp-admin/includes/ajax-actions.php
parentAdding upstream version 6.4.3+dfsg1. (diff)
downloadwordpress-30883c26bdceb9eaf32c8d4a1b0c1bce223b5226.tar.xz
wordpress-30883c26bdceb9eaf32c8d4a1b0c1bce223b5226.zip
Adding upstream version 6.5+dfsg1.upstream/6.5+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-admin/includes/ajax-actions.php')
-rw-r--r--wp-admin/includes/ajax-actions.php116
1 files changed, 67 insertions, 49 deletions
diff --git a/wp-admin/includes/ajax-actions.php b/wp-admin/includes/ajax-actions.php
index 69f5fd4..30aab70 100644
--- a/wp-admin/includes/ajax-actions.php
+++ b/wp-admin/includes/ajax-actions.php
@@ -561,8 +561,8 @@ function _wp_ajax_delete_comment_response( $comment_id, $delta = -1 ) {
'postId' => $comment ? $comment->comment_post_ID : '',
/* translators: %s: Number of comments. */
'total_items_i18n' => sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ),
- 'total_pages' => ceil( $total / $per_page ),
- 'total_pages_i18n' => number_format_i18n( ceil( $total / $per_page ) ),
+ 'total_pages' => (int) ceil( $total / $per_page ),
+ 'total_pages_i18n' => number_format_i18n( (int) ceil( $total / $per_page ) ),
'total' => $total,
'time' => $time,
'in_moderation' => $counts->moderated,
@@ -1628,8 +1628,13 @@ function wp_ajax_add_meta() {
$post_data['post_type'] = $post->post_type;
$post_data['post_status'] = 'draft';
$now = time();
- /* translators: 1: Post creation date, 2: Post creation time. */
- $post_data['post_title'] = sprintf( __( 'Draft created on %1$s at %2$s' ), gmdate( __( 'F j, Y' ), $now ), gmdate( __( 'g:i a' ), $now ) );
+
+ $post_data['post_title'] = sprintf(
+ /* translators: 1: Post creation date, 2: Post creation time. */
+ __( 'Draft created on %1$s at %2$s' ),
+ gmdate( __( 'F j, Y' ), $now ),
+ gmdate( __( 'g:i a' ), $now )
+ );
$pid = edit_post( $post_data );
@@ -3084,10 +3089,10 @@ function wp_ajax_query_attachments() {
$posts_per_page = (int) $attachments_query->get( 'posts_per_page' );
- $max_pages = $posts_per_page ? ceil( $total_posts / $posts_per_page ) : 0;
+ $max_pages = $posts_per_page ? (int) ceil( $total_posts / $posts_per_page ) : 0;
header( 'X-WP-Total: ' . (int) $total_posts );
- header( 'X-WP-TotalPages: ' . (int) $max_pages );
+ header( 'X-WP-TotalPages: ' . $max_pages );
wp_send_json_success( $posts );
}
@@ -4030,9 +4035,10 @@ function wp_ajax_crop_image() {
}
/** This filter is documented in wp-admin/includes/class-custom-image-header.php */
- $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
- $attachment = $wp_site_icon->create_attachment_object( $cropped, $attachment_id );
- unset( $attachment['ID'] );
+ $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
+
+ // Copy attachment properties.
+ $attachment = wp_copy_parent_attachment_properties( $cropped, $attachment_id, $context );
// Update the attachment.
add_filter( 'intermediate_image_sizes_advanced', array( $wp_site_icon, 'additional_sizes' ) );
@@ -4060,46 +4066,8 @@ function wp_ajax_crop_image() {
/** This filter is documented in wp-admin/includes/class-custom-image-header.php */
$cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication.
- $parent_url = wp_get_attachment_url( $attachment_id );
- $parent_basename = wp_basename( $parent_url );
- $url = str_replace( $parent_basename, wp_basename( $cropped ), $parent_url );
-
- $size = wp_getimagesize( $cropped );
- $image_type = ( $size ) ? $size['mime'] : 'image/jpeg';
-
- // Get the original image's post to pre-populate the cropped image.
- $original_attachment = get_post( $attachment_id );
- $sanitized_post_title = sanitize_file_name( $original_attachment->post_title );
- $use_original_title = (
- ( '' !== trim( $original_attachment->post_title ) ) &&
- /*
- * Check if the original image has a title other than the "filename" default,
- * meaning the image had a title when originally uploaded or its title was edited.
- */
- ( $parent_basename !== $sanitized_post_title ) &&
- ( pathinfo( $parent_basename, PATHINFO_FILENAME ) !== $sanitized_post_title )
- );
- $use_original_description = ( '' !== trim( $original_attachment->post_content ) );
-
- $attachment = array(
- 'post_title' => $use_original_title ? $original_attachment->post_title : wp_basename( $cropped ),
- 'post_content' => $use_original_description ? $original_attachment->post_content : $url,
- 'post_mime_type' => $image_type,
- 'guid' => $url,
- 'context' => $context,
- );
-
- // Copy the image caption attribute (post_excerpt field) from the original image.
- if ( '' !== trim( $original_attachment->post_excerpt ) ) {
- $attachment['post_excerpt'] = $original_attachment->post_excerpt;
- }
-
- // Copy the image alt text attribute from the original image.
- if ( '' !== trim( $original_attachment->_wp_attachment_image_alt ) ) {
- $attachment['meta_input'] = array(
- '_wp_attachment_image_alt' => wp_slash( $original_attachment->_wp_attachment_image_alt ),
- );
- }
+ // Copy attachment properties.
+ $attachment = wp_copy_parent_attachment_properties( $cropped, $attachment_id, $context );
$attachment_id = wp_insert_attachment( $attachment, $cropped );
$metadata = wp_generate_attachment_metadata( $attachment_id, $cropped );
@@ -4574,6 +4542,56 @@ function wp_ajax_install_plugin() {
}
/**
+ * Handles activating a plugin via AJAX.
+ *
+ * @since 6.5.0
+ */
+function wp_ajax_activate_plugin() {
+ check_ajax_referer( 'updates' );
+
+ if ( empty( $_POST['name'] ) || empty( $_POST['slug'] ) || empty( $_POST['plugin'] ) ) {
+ wp_send_json_error(
+ array(
+ 'slug' => '',
+ 'pluginName' => '',
+ 'plugin' => '',
+ 'errorCode' => 'no_plugin_specified',
+ 'errorMessage' => __( 'No plugin specified.' ),
+ )
+ );
+ }
+
+ $status = array(
+ 'activate' => 'plugin',
+ 'slug' => wp_unslash( $_POST['slug'] ),
+ 'pluginName' => wp_unslash( $_POST['name'] ),
+ 'plugin' => wp_unslash( $_POST['plugin'] ),
+ );
+
+ if ( ! current_user_can( 'activate_plugin', $status['plugin'] ) ) {
+ $status['errorMessage'] = __( 'Sorry, you are not allowed to activate plugins on this site.' );
+ wp_send_json_error( $status );
+ }
+
+ if ( is_plugin_active( $status['plugin'] ) ) {
+ $status['errorMessage'] = sprintf(
+ /* translators: %s: Plugin name. */
+ __( '%s is already active.' ),
+ $status['pluginName']
+ );
+ }
+
+ $activated = activate_plugin( $status['plugin'] );
+
+ if ( is_wp_error( $activated ) ) {
+ $status['errorMessage'] = $activated->get_error_message();
+ wp_send_json_error( $status );
+ }
+
+ wp_send_json_success( $status );
+}
+
+/**
* Handles updating a plugin via AJAX.
*
* @since 4.2.0