X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/9e77185fafaf4e60e2b73821e0e4b9b1a11fb85f..7f1521bf193b382565eb753043c161f4cb3fcda7:/wp-admin/includes/media.php diff --git a/wp-admin/includes/media.php b/wp-admin/includes/media.php index 8a5e6cc5..75811962 100644 --- a/wp-admin/includes/media.php +++ b/wp-admin/includes/media.php @@ -158,6 +158,22 @@ function get_image_send_to_editor($id, $caption, $title, $align, $url='', $rel = */ function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $alt = '' ) { + /** + * Filter the caption text. + * + * Note: If the caption text is empty, the caption shortcode will not be appended + * to the image HTML when inserted into the editor. + * + * Passing an empty value also prevents the {@see 'image_add_caption_shortcode'} + * filter from being evaluated at the end of {@see image_add_caption()}. + * + * @since 4.1.0 + * + * @param string $caption The original caption text. + * @param int $id The attachment ID. + */ + $caption = apply_filters( 'image_add_caption_text', $caption, $id ); + /** * Filter whether to disable captions. * @@ -223,24 +239,23 @@ function _cleanup_image_add_caption( $matches ) { function media_send_to_editor($html) { ?> false )) { @@ -265,31 +280,31 @@ function media_handle_upload($file_id, $post_id, $post_data = array(), $override $file = $file['file']; $title = $name; $content = ''; + $excerpt = ''; if ( preg_match( '#^audio#', $type ) ) { $meta = wp_read_audio_metadata( $file ); - if ( ! empty( $meta['title'] ) ) + if ( ! empty( $meta['title'] ) ) { $title = $meta['title']; - - $content = ''; + } if ( ! empty( $title ) ) { if ( ! empty( $meta['album'] ) && ! empty( $meta['artist'] ) ) { /* translators: 1: audio track title, 2: album title, 3: artist name */ $content .= sprintf( __( '"%1$s" from %2$s by %3$s.' ), $title, $meta['album'], $meta['artist'] ); - } else if ( ! empty( $meta['album'] ) ) { + } elseif ( ! empty( $meta['album'] ) ) { /* translators: 1: audio track title, 2: album title */ $content .= sprintf( __( '"%1$s" from %2$s.' ), $title, $meta['album'] ); - } else if ( ! empty( $meta['artist'] ) ) { + } elseif ( ! empty( $meta['artist'] ) ) { /* translators: 1: audio track title, 2: artist name */ $content .= sprintf( __( '"%1$s" by %2$s.' ), $title, $meta['artist'] ); } else { $content .= sprintf( __( '"%s".' ), $title ); } - } else if ( ! empty( $meta['album'] ) ) { + } elseif ( ! empty( $meta['album'] ) ) { if ( ! empty( $meta['artist'] ) ) { /* translators: 1: audio album title, 2: artist name */ @@ -298,7 +313,7 @@ function media_handle_upload($file_id, $post_id, $post_data = array(), $override $content .= $meta['album'] . '.'; } - } else if ( ! empty( $meta['artist'] ) ) { + } elseif ( ! empty( $meta['artist'] ) ) { $content .= $meta['artist'] . '.'; @@ -319,11 +334,14 @@ function media_handle_upload($file_id, $post_id, $post_data = array(), $override $content .= ' ' . sprintf( __( 'Genre: %s.' ), $meta['genre'] ); // Use image exif/iptc data for title and caption defaults if possible. - } elseif ( $image_meta = @wp_read_image_metadata( $file ) ) { - if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) + } elseif ( 0 === strpos( $type, 'image/' ) && $image_meta = @wp_read_image_metadata( $file ) ) { + if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) { $title = $image_meta['title']; - if ( trim( $image_meta['caption'] ) ) - $content = $image_meta['caption']; + } + + if ( trim( $image_meta['caption'] ) ) { + $excerpt = $image_meta['caption']; + } } // Construct the attachment array @@ -333,6 +351,7 @@ function media_handle_upload($file_id, $post_id, $post_data = array(), $override 'post_parent' => $post_id, 'post_title' => $title, 'post_content' => $content, + 'post_excerpt' => $excerpt, ), $post_data ); // This should never be set as it would then overwrite an existing attachment. @@ -416,7 +435,7 @@ function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = * * @since 2.5.0 * - * @param array $content_func + * @param string|callable $content_func */ function wp_iframe($content_func /* ... */) { _wp_admin_html_begin(); @@ -432,11 +451,9 @@ if ( ( is_array( $content_func ) && ! empty( $content_func[1] ) && 0 === strpos( wp_enqueue_style( 'ie' ); ?> $attachment ) { @@ -658,10 +683,8 @@ function media_upload_form_handler() { if ( isset($_POST['insert-gallery']) || isset($_POST['update-gallery']) ) { ?> "; return $html; + } else { + return new WP_Error( 'image_sideload_failed' ); } } @@ -848,7 +878,7 @@ function media_sideload_image( $file, $post_id, $desc = null ) { * * @since 2.5.0 * - * @return unknown + * @return string|null */ function media_upload_gallery() { $errors = array(); @@ -871,7 +901,7 @@ function media_upload_gallery() { * * @since 2.5.0 * - * @return unknown + * @return string|null */ function media_upload_library() { $errors = array(); @@ -892,7 +922,7 @@ function media_upload_library() { * * @since 2.7.0 * - * @param object $post + * @param WP_Post $post * @param string $checked * @return string */ @@ -920,12 +950,11 @@ function image_align_input_fields( $post, $checked = '' ) { * * @since 2.7.0 * - * @param object $post + * @param WP_Post $post * @param bool|string $check * @return array */ function image_size_input_fields( $post, $check = '' ) { - /** * Filter the names and labels of the default image sizes. * @@ -941,50 +970,53 @@ function image_size_input_fields( $post, $check = '' ) { 'full' => __( 'Full Size' ) ) ); - if ( empty($check) ) - $check = get_user_setting('imgsize', 'medium'); - - foreach ( $size_names as $size => $label ) { - $downsize = image_downsize($post->ID, $size); - $checked = ''; - - // Is this size selectable? - $enabled = ( $downsize[3] || 'full' == $size ); - $css_id = "image-size-{$size}-{$post->ID}"; - - // If this size is the default but that's not available, don't select it. - if ( $size == $check ) { - if ( $enabled ) - $checked = " checked='checked'"; - else - $check = ''; - } elseif ( !$check && $enabled && 'thumbnail' != $size ) { - /* - * If $check is not enabled, default to the first available size - * that's bigger than a thumbnail. - */ - $check = $size; - $checked = " checked='checked'"; - } + if ( empty( $check ) ) { + $check = get_user_setting('imgsize', 'medium'); + } + $out = array(); - $html = "
"; + foreach ( $size_names as $size => $label ) { + $downsize = image_downsize( $post->ID, $size ); + $checked = ''; - $html .= ""; + // Is this size selectable? + $enabled = ( $downsize[3] || 'full' == $size ); + $css_id = "image-size-{$size}-{$post->ID}"; - // Only show the dimensions if that choice is available. - if ( $enabled ) - $html .= " "; + // If this size is the default but that's not available, don't select it. + if ( $size == $check ) { + if ( $enabled ) { + $checked = " checked='checked'"; + } else { + $check = ''; + } + } elseif ( ! $check && $enabled && 'thumbnail' != $size ) { + /* + * If $check is not enabled, default to the first available size + * that's bigger than a thumbnail. + */ + $check = $size; + $checked = " checked='checked'"; + } + + $html = "
"; - $html .= '
'; + $html .= ""; - $out[] = $html; + // Only show the dimensions if that choice is available. + if ( $enabled ) { + $html .= " "; } + $html .= '
'; - return array( - 'label' => __('Size'), - 'input' => 'html', - 'html' => join("\n", $out), - ); + $out[] = $html; + } + + return array( + 'label' => __( 'Size' ), + 'input' => 'html', + 'html' => join( "\n", $out ), + ); } /** @@ -992,7 +1024,7 @@ function image_size_input_fields( $post, $check = '' ) { * * @since 2.7.0 * - * @param object $post + * @param WP_Post $post * @param string $url_type * @return string */ @@ -1075,8 +1107,8 @@ function media_post_single_attachment_fields_to_edit( $form_fields, $post ) { * * @since 2.5.0 * - * @param WP_Post $post The WP_Post attachment object. - * @param array $attachment An array of attachment metadata. + * @param array $post The WP_Post attachment object converted to an array. + * @param array $attachment An array of attachment metadata. * @return array Filtered attachment post object. */ function image_attachment_fields_to_save( $post, $attachment ) { @@ -1101,7 +1133,7 @@ add_filter( 'attachment_fields_to_save', 'image_attachment_fields_to_save', 10, * @param string $html * @param integer $attachment_id * @param array $attachment - * @return array + * @return string */ function image_media_send_to_editor($html, $attachment_id, $attachment) { $post = get_post($attachment_id); @@ -1125,7 +1157,7 @@ add_filter('media_send_to_editor', 'image_media_send_to_editor', 10, 3); * * @since 2.5.0 * - * @param object $post + * @param WP_Post $post * @param array $errors * @return array */ @@ -1325,7 +1357,7 @@ function get_media_item( $attachment_id, $args = null ) { $post_mime_types = get_post_mime_types(); $keys = array_keys( wp_match_mime_types( array_keys( $post_mime_types ), $post->post_mime_type ) ); - $type = array_shift( $keys ); + $type = reset( $keys ); $type_html = ""; $form_fields = get_attachment_fields_to_edit( $post, $r['errors'] ); @@ -1696,13 +1728,13 @@ function media_upload_header() { * * @since 2.5.0 * - * @param unknown_type $errors + * @param array $errors */ function media_upload_form( $errors = null ) { global $type, $tab, $is_IE, $is_opera; if ( ! _device_can_upload() ) { - echo '

' . sprintf( __('The web browser on your device cannot be used to upload files. You may be able to use the native app for your device instead.'), 'http://apps.wordpress.org/' ) . '

'; + echo '

' . sprintf( __('The web browser on your device cannot be used to upload files. You may be able to use the native app for your device instead.'), 'https://apps.wordpress.org/' ) . '

'; return; } @@ -1780,6 +1812,14 @@ $plupload_init = array( 'multipart_params' => $post_params, ); +// Currently only iOS Safari supports multiple files uploading but iOS 7.x has a bug that prevents uploading of videos +// when enabled. See #29602. +if ( wp_is_mobile() && strpos( $_SERVER['HTTP_USER_AGENT'], 'OS 7_' ) !== false && + strpos( $_SERVER['HTTP_USER_AGENT'], 'like Mac OS X' ) !== false ) { + + $plupload_init['multi_selection'] = false; +} + /** * Filter the default Plupload settings. * @@ -1802,7 +1842,7 @@ if( !$large_size_w ) $large_size_w = 1024; ?> var resize_height = , resize_width = , -wpUploaderInit = ; +wpUploaderInit = ;
@@ -1912,7 +1952,6 @@ function media_upload_type_form($type = 'file', $errors = null, $id = null) {
@@ -2269,7 +2304,7 @@ function media_upload_library_form($errors) { ?> -
+ @@ -2317,7 +2352,7 @@ foreach ( $post_mime_types as $mime_type => $label ) { /** * Filter the media upload mime type list items. * - * Returned values should begin with an
  • tag. + * Returned values should begin with an `
  • ` tag. * * @since 3.1.0 * @@ -2629,13 +2664,13 @@ function edit_form_image_editor( $post ) {
  • post_mime_type, 'audio/' ) ): + elseif ( $attachment_id && wp_attachment_is( 'audio', $post ) ): wp_maybe_generate_attachment_metadata( $post ); echo wp_audio_shortcode( array( 'src' => $att_url ) ); - elseif ( $attachment_id && 0 === strpos( $post->post_mime_type, 'video/' ) ): + elseif ( $attachment_id && wp_attachment_is( 'video', $post ) ): wp_maybe_generate_attachment_metadata( $post ); @@ -2860,7 +2895,7 @@ function wp_add_id3_tag_data( &$metadata, $data ) { foreach ( array( 'id3v2', 'id3v1' ) as $version ) { if ( ! empty( $data[$version]['comments'] ) ) { foreach ( $data[$version]['comments'] as $key => $list ) { - if ( ! empty( $list ) ) { + if ( 'length' !== $key && ! empty( $list ) ) { $metadata[$key] = reset( $list ); // Fix bug in byte stream analysis. if ( 'terms_of_use' === $key && 0 === strpos( $metadata[$key], 'yright notice.' ) ) @@ -2898,7 +2933,7 @@ function wp_add_id3_tag_data( &$metadata, $data ) { * @since 3.6.0 * * @param string $file Path to file. - * @return array|boolean Returns array of metadata, if found. + * @return array|bool Returns array of metadata, if found. */ function wp_read_video_metadata( $file ) { if ( ! file_exists( $file ) ) @@ -2922,7 +2957,7 @@ function wp_read_video_metadata( $file ) { if ( ! empty( $data['mime_type'] ) ) $metadata['mime_type'] = $data['mime_type']; if ( ! empty( $data['playtime_seconds'] ) ) - $metadata['length'] = (int) ceil( $data['playtime_seconds'] ); + $metadata['length'] = (int) round( $data['playtime_seconds'] ); if ( ! empty( $data['playtime_string'] ) ) $metadata['length_formatted'] = $data['playtime_string']; if ( ! empty( $data['video']['resolution_x'] ) ) @@ -2978,7 +3013,7 @@ function wp_read_audio_metadata( $file ) { if ( ! empty( $data['mime_type'] ) ) $metadata['mime_type'] = $data['mime_type']; if ( ! empty( $data['playtime_seconds'] ) ) - $metadata['length'] = (int) ceil( $data['playtime_seconds'] ); + $metadata['length'] = (int) round( $data['playtime_seconds'] ); if ( ! empty( $data['playtime_string'] ) ) $metadata['length_formatted'] = $data['playtime_string']; @@ -2986,3 +3021,63 @@ function wp_read_audio_metadata( $file ) { return $metadata; } + +/** + * Encapsulate logic for Attach/Detach actions + * + * @since 4.2.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $parent_id Attachment parent ID. + * @param string $action Optional. Attach/detach action. Accepts 'attach' or 'detach'. + * Default 'attach'. + */ +function wp_media_attach_action( $parent_id, $action = 'attach' ) { + global $wpdb; + + if ( ! $parent_id ) { + return; + } + + if ( ! current_user_can( 'edit_post', $parent_id ) ) { + wp_die( __( 'You are not allowed to edit this post.' ) ); + } + $ids = array(); + foreach ( (array) $_REQUEST['media'] as $att_id ) { + $att_id = (int) $att_id; + + if ( ! current_user_can( 'edit_post', $att_id ) ) { + continue; + } + + $ids[] = $att_id; + } + + if ( ! empty( $ids ) ) { + $ids_string = implode( ',', $ids ); + if ( 'attach' === $action ) { + $result = $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $ids_string )", $parent_id ) ); + } else { + $result = $wpdb->query( "UPDATE $wpdb->posts SET post_parent = 0 WHERE post_type = 'attachment' AND ID IN ( $ids_string )" ); + } + + foreach ( $ids as $att_id ) { + clean_attachment_cache( $att_id ); + } + } + + if ( isset( $result ) ) { + $location = 'upload.php'; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'upload.php' ) ) { + $location = remove_query_arg( array( 'attached', 'detach' ), $referer ); + } + } + + $key = 'attach' === $action ? 'attached' : 'detach'; + $location = add_query_arg( array( $key => $result ), $location ); + wp_redirect( $location ); + exit; + } +}