X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/41578db67d72562346e4dbb2a14889b23d522813..refs/tags/wordpress-4.6.1:/wp-admin/includes/media.php diff --git a/wp-admin/includes/media.php b/wp-admin/includes/media.php index 06cd1c12..c6b2dcd1 100644 --- a/wp-admin/includes/media.php +++ b/wp-admin/includes/media.php @@ -22,7 +22,7 @@ function media_upload_tabs() { ); /** - * Filter the available tabs in the legacy (pre-3.5.0) media popup. + * Filters the available tabs in the legacy (pre-3.5.0) media popup. * * @since 2.5.0 * @@ -36,6 +36,8 @@ function media_upload_tabs() { * * @since 2.5.0 * + * @global wpdb $wpdb WordPress database abstraction object. + * * @param array $tabs * @return array $tabs with gallery if post has image attachment */ @@ -61,12 +63,13 @@ function update_gallery_tab($tabs) { return $tabs; } -add_filter('media_upload_tabs', 'update_gallery_tab'); /** - * {@internal Missing Short Description}} + * Outputs the legacy media upload tabs UI. * * @since 2.5.0 + * + * @global string $redir_tab */ function the_media_upload_tabs() { global $redir_tab; @@ -99,42 +102,52 @@ function the_media_upload_tabs() { } /** - * {@internal Missing Short Description}} + * Retrieves the image HTML to send to the editor. * * @since 2.5.0 * - * @param integer $id image attachment id - * @param string $caption image caption - * @param string $alt image alt attribute - * @param string $title image title attribute - * @param string $align image css alignment property - * @param string $url image src url - * @param string|bool $rel image rel attribute - * @param string $size image size (thumbnail, medium, large, full or added with add_image_size() ) - * @return string the html to insert into editor + * @param int $id Image attachment id. + * @param string $caption Image caption. + * @param string $title Image title attribute. + * @param string $align Image CSS alignment property. + * @param string $url Optional. Image src URL. Default empty. + * @param bool|string $rel Optional. Value for rel attribute or whether to add a default value. Default false. + * @param string|array $size Optional. Image size. Accepts any valid image size, or an array of width + * and height values in pixels (in that order). Default 'medium'. + * @param string $alt Optional. Image alt attribute. Default empty. + * @return string The HTML output to insert into the editor. */ -function get_image_send_to_editor($id, $caption, $title, $align, $url='', $rel = false, $size='medium', $alt = '') { +function get_image_send_to_editor( $id, $caption, $title, $align, $url = '', $rel = false, $size = 'medium', $alt = '' ) { - $html = get_image_tag($id, $alt, '', $align, $size); + $html = get_image_tag( $id, $alt, '', $align, $size ); - $rel = $rel ? ' rel="attachment wp-att-' . esc_attr($id).'"' : ''; + if ( $rel ) { + if ( is_string( $rel ) ) { + $rel = ' rel="' . esc_attr( $rel ) . '"'; + } else { + $rel = ' rel="attachment wp-att-' . intval( $id ) . '"'; + } + } else { + $rel = ''; + } if ( $url ) - $html = '$html"; + $html = '' . $html . ''; /** - * Filter the image HTML markup to send to the editor. + * Filters the image HTML markup to send to the editor. * * @since 2.5.0 * - * @param string $html The image HTML markup to send. - * @param int $id The attachment id. - * @param string $caption The image caption. - * @param string $title The image title. - * @param string $align The image alignment. - * @param string $url The image source URL. - * @param string $size The image size. - * @param string $alt The image alternative, or alt, text. + * @param string $html The image HTML markup to send. + * @param int $id The attachment id. + * @param string $caption The image caption. + * @param string $title The image title. + * @param string $align The image alignment. + * @param string $url The image source URL. + * @param string|array $size Size of image. Image size or array of width and height values + * (in that order). Default 'medium'. + * @param string $alt The image alternative, or alt, text. */ $html = apply_filters( 'image_send_to_editor', $html, $id, $caption, $title, $align, $url, $size, $alt ); @@ -149,17 +162,33 @@ function get_image_send_to_editor($id, $caption, $title, $align, $url='', $rel = * @param string $html * @param integer $id * @param string $caption image caption - * @param string $alt image alt attribute * @param string $title image title attribute * @param string $align image css alignment property * @param string $url image src url * @param string $size image size (thumbnail, medium, large, full or added with add_image_size() ) + * @param string $alt image alt attribute * @return string */ function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $alt = '' ) { /** - * Filter whether to disable captions. + * Filters 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'} + * Filters from being evaluated at the end of 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 ); + + /** + * Filters whether to disable captions. * * Prevents image captions from being appended to image HTML when inserted into the editor. * @@ -180,7 +209,8 @@ function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $ $caption = str_replace( array("\r\n", "\r"), "\n", $caption); $caption = preg_replace_callback( '/<[a-zA-Z0-9]+(?: [^<>]+>)*/', '_cleanup_image_add_caption', $caption ); - // convert any remaining line breaks to
+ + // Convert any remaining line breaks to
. $caption = preg_replace( '/[ \n\t]*\n[ \t]*/', '
', $caption ); $html = preg_replace( '/(class=["\'][^\'"]*)align(none|left|right|center)\s?/', '$1', $html ); @@ -190,7 +220,7 @@ function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $ $shcode = '[caption id="' . $id . '" align="align' . $align . '" width="' . $width . '"]' . $html . ' ' . $caption . '[/caption]'; /** - * Filter the image HTML markup including the caption shortcode. + * Filters the image HTML markup including the caption shortcode. * * @since 2.6.0 * @@ -199,7 +229,6 @@ function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $ */ return apply_filters( 'image_add_caption_shortcode', $shcode, $html ); } -add_filter( 'image_send_to_editor', 'image_add_caption', 20, 8 ); /** * Private preg_replace callback used in image_add_caption() @@ -208,7 +237,7 @@ add_filter( 'image_send_to_editor', 'image_add_caption', 20, 8 ); * @since 3.4.0 */ function _cleanup_image_add_caption( $matches ) { - // remove any line breaks from inside the tags + // Remove any line breaks from inside the tags. return preg_replace( '/[\r\n\t]+/', ' ', $matches[0] ); } @@ -222,24 +251,23 @@ function _cleanup_image_add_caption( $matches ) { function media_send_to_editor($html) { ?> false )) { @@ -262,33 +290,33 @@ function media_handle_upload($file_id, $post_id, $post_data = array(), $override $url = $file['url']; $type = $file['type']; $file = $file['file']; - $title = $name; + $title = sanitize_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 */ @@ -297,7 +325,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'] . '.'; @@ -317,12 +345,15 @@ function media_handle_upload($file_id, $post_id, $post_data = array(), $override if ( ! empty( $meta['genre'] ) ) $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'] ) ) ) + // Use image exif/iptc data for title and caption defaults if possible. + } 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 @@ -332,11 +363,11 @@ 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. - if ( isset( $attachment['ID'] ) ) - unset( $attachment['ID'] ); + unset( $attachment['ID'] ); // Save the data $id = wp_insert_attachment($attachment, $file, $post_id); @@ -349,17 +380,17 @@ function media_handle_upload($file_id, $post_id, $post_data = array(), $override } /** - * This handles a sideloaded file in the same way as an uploaded file is handled by {@link media_handle_upload()} + * Handles a side-loaded file in the same way as an uploaded file is handled by media_handle_upload(). * * @since 2.6.0 * - * @param array $file_array Array similar to a {@link $_FILES} upload array - * @param int $post_id The post ID the media is associated with - * @param string $desc Description of the sideloaded file - * @param array $post_data allows you to overwrite some of the attachment - * @return int|object The ID of the attachment or a WP_Error on failure + * @param array $file_array Array similar to a `$_FILES` upload array. + * @param int $post_id The post ID the media is associated with. + * @param string $desc Optional. Description of the side-loaded file. Default null. + * @param array $post_data Optional. Post data to override. Default empty array. + * @return int|object The ID of the attachment or a WP_Error on failure. */ -function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = array()) { +function media_handle_sideload( $file_array, $post_id, $desc = null, $post_data = array() ) { $overrides = array('test_form'=>false); $time = current_time( 'mysql' ); @@ -378,7 +409,7 @@ function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = $title = preg_replace('/\.[^.]+$/', '', basename($file)); $content = ''; - // use image exif/iptc data for title and caption defaults if possible + // Use image exif/iptc data for title and caption defaults if possible. if ( $image_meta = @wp_read_image_metadata($file) ) { if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) $title = $image_meta['title']; @@ -389,7 +420,7 @@ function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = if ( isset( $desc ) ) $title = $desc; - // Construct the attachment array + // Construct the attachment array. $attachment = array_merge( array( 'post_mime_type' => $type, 'guid' => $url, @@ -399,8 +430,7 @@ function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = ), $post_data ); // This should never be set as it would then overwrite an existing attachment. - if ( isset( $attachment['ID'] ) ) - unset( $attachment['ID'] ); + unset( $attachment['ID'] ); // Save the attachment metadata $id = wp_insert_attachment($attachment, $file, $post_id); @@ -415,7 +445,9 @@ function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = * * @since 2.5.0 * - * @param array $content_func + * @global int $body_id + * + * @param string|callable $content_func */ function wp_iframe($content_func /* ... */) { _wp_admin_html_begin(); @@ -427,15 +459,13 @@ wp_enqueue_style( 'colors' ); // Check callback name for 'media' if ( ( is_array( $content_func ) && ! empty( $content_func[1] ) && 0 === strpos( (string) $content_func[1], 'media' ) ) || ( ! is_array( $content_func ) && 0 === strpos( $content_func, 'media' ) ) ) - wp_enqueue_style( 'media' ); + wp_enqueue_style( 'deprecated-media' ); wp_enqueue_style( 'ie' ); ?> '; - echo '' . $img . __( 'Add Media' ) . ''; - + $id_attribute = $instance === 1 ? ' id="insert-media-button"' : ''; + printf( '', + $id_attribute, + esc_attr( $editor_id ), + $img . __( 'Add Media' ) + ); /** - * Filter the legacy (pre-3.5.0) media buttons. + * Filters the legacy (pre-3.5.0) media buttons. + * + * Use {@see 'media_buttons'} action instead. * * @since 2.5.0 - * @deprecated 3.5.0 Use 'media_buttons' action instead. + * @deprecated 3.5.0 Use {@see 'media_buttons'} action instead. * * @param string $string Media buttons context. Default empty. */ @@ -543,8 +586,15 @@ function media_buttons($editor_id = 'content') { echo $legacy_filter; } } -add_action( 'media_buttons', 'media_buttons' ); +/** + * + * @global int $post_ID + * @param string $type + * @param int $post_id + * @param string $tab + * @return string + */ function get_upload_iframe_src( $type = null, $post_id = null, $tab = null ) { global $post_ID; @@ -560,9 +610,9 @@ function get_upload_iframe_src( $type = null, $post_id = null, $tab = null ) { $upload_iframe_src = add_query_arg('tab', $tab, $upload_iframe_src); /** - * Filter the upload iframe source URL for a specific media type. + * Filters the upload iframe source URL for a specific media type. * - * The dynamic portion of the hook name, $type, refers to the type + * The dynamic portion of the hook name, `$type`, refers to the type * of media uploaded. * * @since 3.0.0 @@ -575,7 +625,7 @@ function get_upload_iframe_src( $type = null, $post_id = null, $tab = null ) { } /** - * {@internal Missing Short Description}} + * Handles form submissions for the legacy media uploader. * * @since 2.5.0 * @@ -587,8 +637,8 @@ function media_upload_form_handler() { $errors = null; if ( isset($_POST['send']) ) { - $keys = array_keys($_POST['send']); - $send_id = (int) array_shift($keys); + $keys = array_keys( $_POST['send'] ); + $send_id = (int) reset( $keys ); } if ( !empty($_POST['attachments']) ) foreach ( $_POST['attachments'] as $attachment_id => $attachment ) { @@ -612,14 +662,14 @@ function media_upload_form_handler() { } /** - * Filter the attachment fields to be saved. + * Filters the attachment fields to be saved. * * @since 2.5.0 * * @see wp_get_attachment_metadata() * - * @param WP_Post $post The WP_Post object. - * @param array $attachment An array of attachment metadata. + * @param array $post An array of post data. + * @param array $attachment An array of attachment metadata. */ $post = apply_filters( 'attachment_fields_to_save', $post, $attachment ); @@ -627,7 +677,8 @@ function media_upload_form_handler() { $image_alt = wp_unslash( $attachment['image_alt'] ); if ( $image_alt != get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ) { $image_alt = wp_strip_all_tags( $image_alt, true ); - // update_meta expects slashed + + // Update_meta expects slashed. update_post_meta( $attachment_id, '_wp_attachment_image_alt', wp_slash( $image_alt ) ); } } @@ -648,10 +699,8 @@ function media_upload_form_handler() { if ( isset($_POST['insert-gallery']) || isset($_POST['update-gallery']) ) { ?> "; /** - * Filter the image URL sent to the editor. + * Filters the image URL sent to the editor. * * @since 2.8.0 * @@ -766,7 +815,12 @@ function wp_media_upload_handler() { return media_send_to_editor($html); } - if ( !empty($_POST) ) { + if ( isset( $_POST['save'] ) ) { + $errors['upload_notice'] = __('Saved.'); + wp_enqueue_script( 'admin-gallery' ); + return wp_iframe( 'media_upload_gallery_form', $errors ); + + } elseif ( ! empty( $_POST ) ) { $return = media_upload_form_handler(); if ( is_string($return) ) @@ -775,11 +829,6 @@ function wp_media_upload_handler() { $errors = $return; } - if ( isset($_POST['save']) ) { - $errors['upload_notice'] = __('Saved.'); - return media_upload_gallery(); - } - if ( isset($_GET['tab']) && $_GET['tab'] == 'type_url' ) { $type = 'image'; if ( isset( $_GET['type'] ) && in_array( $_GET['type'], array( 'video', 'audio', 'file' ) ) ) @@ -791,57 +840,69 @@ function wp_media_upload_handler() { } /** - * Download an image from the specified URL and attach it to a post. + * Downloads an image from the specified URL and attaches it to a post. * * @since 2.6.0 + * @since 4.2.0 Introduced the `$return` parameter. * - * @param string $file The URL of the image to download - * @param int $post_id The post ID the media is to be associated with - * @param string $desc Optional. Description of the image - * @return string|WP_Error Populated HTML img tag on success + * @param string $file The URL of the image to download. + * @param int $post_id The post ID the media is to be associated with. + * @param string $desc Optional. Description of the image. + * @param string $return Optional. Accepts 'html' (image tag html) or 'src' (URL). Default 'html'. + * @return string|WP_Error Populated HTML img tag on success, WP_Error object otherwise. */ -function media_sideload_image($file, $post_id, $desc = null) { - if ( ! empty($file) ) { - // Download file to temp location - $tmp = download_url( $file ); +function media_sideload_image( $file, $post_id, $desc = null, $return = 'html' ) { + if ( ! empty( $file ) ) { - // Set variables for storage - // fix file filename for query strings + // Set variables for storage, fix file filename for query strings. preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches ); - $file_array['name'] = basename($matches[0]); - $file_array['tmp_name'] = $tmp; + if ( ! $matches ) { + return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL' ) ); + } + + $file_array = array(); + $file_array['name'] = basename( $matches[0] ); + + // Download file to temp location. + $file_array['tmp_name'] = download_url( $file ); - // If error storing temporarily, unlink - if ( is_wp_error( $tmp ) ) { - @unlink($file_array['tmp_name']); - $file_array['tmp_name'] = ''; + // If error storing temporarily, return the error. + if ( is_wp_error( $file_array['tmp_name'] ) ) { + return $file_array['tmp_name']; } - // do the validation and storage stuff + // Do the validation and storage stuff. $id = media_handle_sideload( $file_array, $post_id, $desc ); - // If error storing permanently, unlink - if ( is_wp_error($id) ) { - @unlink($file_array['tmp_name']); + + // If error storing permanently, unlink. + if ( is_wp_error( $id ) ) { + @unlink( $file_array['tmp_name'] ); return $id; } $src = wp_get_attachment_url( $id ); } - // Finally check to make sure the file has been saved, then return the html - if ( ! empty($src) ) { - $alt = isset($desc) ? esc_attr($desc) : ''; + // Finally, check to make sure the file has been saved, then return the HTML. + if ( ! empty( $src ) ) { + if ( $return === 'src' ) { + return $src; + } + + $alt = isset( $desc ) ? esc_attr( $desc ) : ''; $html = "$alt"; return $html; + } else { + return new WP_Error( 'image_sideload_failed' ); } } /** - * {@internal Missing Short Description}} + * Retrieves the legacy media uploader form in an iframe. * * @since 2.5.0 * - * @return unknown + * @return string|null */ function media_upload_gallery() { $errors = array(); @@ -860,11 +921,11 @@ function media_upload_gallery() { } /** - * {@internal Missing Short Description}} + * Retrieves the legacy media library form in an iframe. * * @since 2.5.0 * - * @return unknown + * @return string|null */ function media_upload_library() { $errors = array(); @@ -885,7 +946,7 @@ function media_upload_library() { * * @since 2.7.0 * - * @param object $post + * @param WP_Post $post * @param string $checked * @return string */ @@ -913,14 +974,13 @@ 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. + * Filters the names and labels of the default image sizes. * * @since 3.3.0 * @@ -934,45 +994,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; + if ( empty( $check ) ) { + $check = get_user_setting('imgsize', 'medium'); + } + $out = array(); + + 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'"; + } - $html = "
"; - - $html .= ""; - // only show the dimensions if that choice is available - if ( $enabled ) - $html .= " "; + $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 ), + ); } /** @@ -980,7 +1048,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 */ @@ -1006,15 +1074,23 @@ function image_link_input_fields($post, $url_type = '') { "; } +/** + * Output a textarea element for inputting an attachment caption. + * + * @since 3.4.0 + * + * @param WP_Post $edit_post Attachment WP_Post object. + * @return string HTML markup for the textarea element. + */ function wp_caption_input_textarea($edit_post) { - // post data is already escaped + // Post data is already escaped. $name = "attachments[{$edit_post->ID}][post_excerpt]"; return ''; } /** - * {@internal Missing Short Description}} + * Retrieves the image attachment fields to edit form fields. * * @since 2.5.0 * @@ -1027,13 +1103,13 @@ function image_attachment_fields_to_edit($form_fields, $post) { } /** - * {@internal Missing Short Description}} + * Retrieves the single non-image attachment fields to edit form fields. * * @since 2.5.0 * - * @param array $form_fields - * @param object $post {@internal $post not used}} - * @return array + * @param array $form_fields An array of attachment form fields. + * @param WP_Post $post The WP_Post attachment object. + * @return array Filtered attachment form fields. */ function media_single_attachment_fields_to_edit( $form_fields, $post ) { unset($form_fields['url'], $form_fields['align'], $form_fields['image-size']); @@ -1041,13 +1117,13 @@ function media_single_attachment_fields_to_edit( $form_fields, $post ) { } /** - * {@internal Missing Short Description}} + * Retrieves the post non-image attachment fields to edito form fields. * * @since 2.8.0 * - * @param array $form_fields - * @param object $post {@internal $post not used}} - * @return array + * @param array $form_fields An array of attachment form fields. + * @param WP_Post $post The WP_Post attachment object. + * @return array Filtered attachment form fields. */ function media_post_single_attachment_fields_to_edit( $form_fields, $post ) { unset($form_fields['image_url']); @@ -1058,14 +1134,14 @@ function media_post_single_attachment_fields_to_edit( $form_fields, $post ) { * Filters input from media_upload_form_handler() and assigns a default * post_title from the file name if none supplied. * - * Illustrates the use of the attachment_fields_to_save filter + * Illustrates the use of the {@see 'attachment_fields_to_save'} filter * which can be used to add default values to any field before saving to DB. * * @since 2.5.0 * - * @param object $post - * @param array $attachment {@internal $attachment not used}} - * @return array + * @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 ) { if ( substr( $post['post_mime_type'], 0, 5 ) == 'image' ) { @@ -1079,17 +1155,15 @@ function image_attachment_fields_to_save( $post, $attachment ) { return $post; } -add_filter( 'attachment_fields_to_save', 'image_attachment_fields_to_save', 10, 2 ); - /** - * {@internal Missing Short Description}} + * Retrieves the media element HTML to send to the editor. * * @since 2.5.0 * * @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); @@ -1098,7 +1172,7 @@ function image_media_send_to_editor($html, $attachment_id, $attachment) { $align = !empty($attachment['align']) ? $attachment['align'] : 'none'; $size = !empty($attachment['image-size']) ? $attachment['image-size'] : 'medium'; $alt = !empty($attachment['image_alt']) ? $attachment['image_alt'] : ''; - $rel = ( $url == get_attachment_link($attachment_id) ); + $rel = ( strpos( $url, 'attachment_id') || $url === get_attachment_link( $attachment_id ) ); return get_image_send_to_editor($attachment_id, $attachment['post_excerpt'], $attachment['post_title'], $align, $url, $rel, $size, $alt); } @@ -1106,14 +1180,12 @@ function image_media_send_to_editor($html, $attachment_id, $attachment) { return $html; } -add_filter('media_send_to_editor', 'image_media_send_to_editor', 10, 3); - /** - * {@internal Missing Short Description}} + * Retrieves the attachment fields to edit form fields. * * @since 2.5.0 * - * @param object $post + * @param WP_Post $post * @param array $errors * @return array */ @@ -1185,7 +1257,7 @@ function get_attachment_fields_to_edit($post, $errors = null) { } // Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default - // The recursive merge is easily traversed with array casting: foreach( (array) $things as $thing ) + // The recursive merge is easily traversed with array casting: foreach ( (array) $things as $thing ) $form_fields = array_merge_recursive($form_fields, (array) $errors); // This was formerly in image_attachment_fields_to_edit(). @@ -1215,7 +1287,7 @@ function get_attachment_fields_to_edit($post, $errors = null) { } /** - * Filter the attachment fields to edit. + * Filters the attachment fields to edit. * * @since 2.5.0 * @@ -1236,6 +1308,8 @@ function get_attachment_fields_to_edit($post, $errors = null) { * * @since 2.5.0 * + * @global WP_Query $wp_the_query + * * @param int $post_id Optional. Post ID. * @param array $errors Errors for attachment, if any. * @return string @@ -1270,6 +1344,8 @@ function get_media_items( $post_id, $errors ) { * * @since 2.5.0 * + * @global string $redir_tab + * * @param int $attachment_id Attachment ID for modification. * @param string|array $args Optional. Override defaults. * @return string HTML form for attachment. @@ -1285,11 +1361,17 @@ function get_media_item( $attachment_id, $args = null ) { $post = get_post( $attachment_id ); $current_post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0; - $default_args = array( 'errors' => null, 'send' => $current_post_id ? post_type_supports( get_post_type( $current_post_id ), 'editor' ) : true, 'delete' => true, 'toggle' => true, 'show_title' => true ); + $default_args = array( + 'errors' => null, + 'send' => $current_post_id ? post_type_supports( get_post_type( $current_post_id ), 'editor' ) : true, + 'delete' => true, + 'toggle' => true, + 'show_title' => true + ); $args = wp_parse_args( $args, $default_args ); /** - * Filter the arguments used to retrieve an image for the edit image form. + * Filters the arguments used to retrieve an image for the edit image form. * * @since 3.1.0 * @@ -1297,30 +1379,24 @@ function get_media_item( $attachment_id, $args = null ) { * * @param array $args An array of arguments. */ - $args = apply_filters( 'get_media_item_args', $args ); - extract( $args, EXTR_SKIP ); + $r = apply_filters( 'get_media_item_args', $args ); $toggle_on = __( 'Show' ); $toggle_off = __( 'Hide' ); - $filename = esc_html( wp_basename( $post->guid ) ); + $file = get_attached_file( $post->ID ); + $filename = esc_html( wp_basename( $file ) ); $title = esc_attr( $post->post_title ); - if ( $_tags = get_the_tags( $attachment_id ) ) { - foreach ( $_tags as $tag ) - $tags[] = $tag->name; - $tags = esc_attr( join( ', ', $tags ) ); - } - $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, $errors ); + $form_fields = get_attachment_fields_to_edit( $post, $r['errors'] ); - if ( $toggle ) { - $class = empty( $errors ) ? 'startclosed' : 'startopen'; + if ( $r['toggle'] ) { + $class = empty( $r['errors'] ) ? 'startclosed' : 'startopen'; $toggle_links = " $toggle_on $toggle_off"; @@ -1330,7 +1406,7 @@ function get_media_item( $attachment_id, $args = null ) { } $display_title = ( !empty( $title ) ) ? $title : $filename; // $title shouldn't ever be empty, but just in case - $display_title = $show_title ? "
" . wp_html_excerpt( $display_title, 60, '…' ) . "
" : ''; + $display_title = $r['show_title'] ? "
" . wp_html_excerpt( $display_title, 60, '…' ) . "
" : ''; $gallery = ( ( isset( $_REQUEST['tab'] ) && 'gallery' == $_REQUEST['tab'] ) || ( isset( $redir_tab ) && 'gallery' == $redir_tab ) ); $order = ''; @@ -1353,7 +1429,7 @@ function get_media_item( $attachment_id, $args = null ) { $media_dims .= "{$meta['width']} × {$meta['height']} "; /** - * Filter the media metadata. + * Filters the media metadata. * * @since 2.5.0 * @@ -1385,7 +1461,7 @@ function get_media_item( $attachment_id, $args = null ) {

" . __('File name:') . " $filename

" . __('File type:') . " $post->post_mime_type

-

" . __('Upload date:') . " " . mysql2date( get_option('date_format'), $post->post_date ). '

'; +

" . __('Upload date:') . " " . mysql2date( __( 'F j, Y' ), $post->post_date ). '

'; if ( !empty( $media_dims ) ) $item .= "

" . __('Dimensions:') . " $media_dims

\n"; @@ -1394,8 +1470,9 @@ function get_media_item( $attachment_id, $args = null ) { $item .= " - - \n"; + \n + \n +

" . sprintf( __( 'Required fields are marked %s' ), '*' ) . "

\n"; $defaults = array( 'input' => 'text', @@ -1404,14 +1481,19 @@ function get_media_item( $attachment_id, $args = null ) { 'extra_rows' => array(), ); - if ( $send ) - $send = get_submit_button( __( 'Insert into Post' ), 'button', "send[$attachment_id]", false ); + if ( $r['send'] ) { + $r['send'] = get_submit_button( __( 'Insert into Post' ), 'button', "send[$attachment_id]", false ); + } + + $delete = empty( $r['delete'] ) ? '' : $r['delete']; if ( $delete && current_user_can( 'delete_post', $attachment_id ) ) { if ( !EMPTY_TRASH_DAYS ) { $delete = "" . __( 'Delete Permanently' ) . ''; } elseif ( !MEDIA_TRASH ) { $delete = "" . __( 'Delete' ) . " -