Don't like ads? PRO users don't see any ads ;-)
Guest

media.php

By: a guest on Dec 9th, 2010  |  syntax: PHP  |  size: 75.73 KB  |  hits: 135  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2. /**
  3.  * WordPress Administration Media API.
  4.  *
  5.  * @package WordPress
  6.  * @subpackage Administration
  7.  */
  8.  
  9. /**
  10.  * {@internal Missing Short Description}}
  11.  *
  12.  * @since unknown
  13.  *
  14.  * @return unknown
  15.  */
  16. function media_upload_tabs() {
  17.         $_default_tabs = array(
  18.                 'type' => __('From Computer'), // handler action suffix => tab text
  19.                 'type_url' => __('From URL'),
  20.                 'gallery' => __('Gallery'),
  21.                 'library' => __('Media Library')
  22.         );
  23.  
  24.         return apply_filters('media_upload_tabs', $_default_tabs);
  25. }
  26.  
  27. /**
  28.  * {@internal Missing Short Description}}
  29.  *
  30.  * @since unknown
  31.  *
  32.  * @param unknown_type $tabs
  33.  * @return unknown
  34.  */
  35. function update_gallery_tab($tabs) {
  36.         global $wpdb;
  37.  
  38.         if ( !isset($_REQUEST['post_id']) ) {
  39.                 unset($tabs['gallery']);
  40.                 return $tabs;
  41.         }
  42.  
  43.         $post_id = intval($_REQUEST['post_id']);
  44.  
  45.         if ( $post_id )
  46.                 $attachments = intval( $wpdb->get_var( $wpdb->prepare( "SELECT count(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent = %d", $post_id ) ) );
  47.  
  48.         if ( empty($attachments) ) {
  49.                 unset($tabs['gallery']);
  50.                 return $tabs;
  51.         }
  52.  
  53.         $tabs['gallery'] = sprintf(__('Gallery (%s)'), "<span id='attachments-count'>$attachments</span>");
  54.  
  55.         return $tabs;
  56. }
  57. add_filter('media_upload_tabs', 'update_gallery_tab');
  58.  
  59. /**
  60.  * {@internal Missing Short Description}}
  61.  *
  62.  * @since unknown
  63.  */
  64. function the_media_upload_tabs() {
  65.         global $redir_tab;
  66.         $tabs = media_upload_tabs();
  67.  
  68.         if ( !empty($tabs) ) {
  69.                 echo "<ul id='sidemenu'>\n";
  70.                 if ( isset($redir_tab) && array_key_exists($redir_tab, $tabs) )
  71.                         $current = $redir_tab;
  72.                 elseif ( isset($_GET['tab']) && array_key_exists($_GET['tab'], $tabs) )
  73.                         $current = $_GET['tab'];
  74.                 else
  75.                         $current = apply_filters('media_upload_default_tab', 'type');
  76.  
  77.                 foreach ( $tabs as $callback => $text ) {
  78.                         $class = '';
  79.                         if ( $current == $callback )
  80.                                 $class = " class='current'";
  81.                         $href = add_query_arg(array('tab'=>$callback, 's'=>false, 'paged'=>false, 'post_mime_type'=>false, 'm'=>false));
  82.                         $link = "<a href='" . esc_url($href) . "'$class>$text</a>";
  83.                         echo "\t<li id='" . esc_attr("tab-$callback") . "'>$link</li>\n";
  84.                 }
  85.                 echo "</ul>\n";
  86.         }
  87. }
  88.  
  89. /**
  90.  * {@internal Missing Short Description}}
  91.  *
  92.  * @since unknown
  93.  *
  94.  * @param unknown_type $id
  95.  * @param unknown_type $alt
  96.  * @param unknown_type $title
  97.  * @param unknown_type $align
  98.  * @param unknown_type $url
  99.  * @param unknown_type $rel
  100.  * @param unknown_type $size
  101.  * @return unknown
  102.  */
  103. function get_image_send_to_editor($id, $caption, $title, $align, $url='', $rel = false, $size='medium', $alt = '') {
  104.  
  105.         $html = get_image_tag($id, $alt, $title, $align, $size);
  106.  
  107.         $rel = $rel ? ' rel="attachment wp-att-' . esc_attr($id).'"' : '';
  108.  
  109.         if ( $url )
  110.                 $html = '<a href="' . esc_attr($url) . "\"$rel>$html</a>";
  111.  
  112.         $html = apply_filters( 'image_send_to_editor', $html, $id, $caption, $title, $align, $url, $size, $alt );
  113.  
  114.         return $html;
  115. }
  116.  
  117. /**
  118.  * {@internal Missing Short Description}}
  119.  *
  120.  * @since unknown
  121.  *
  122.  * @param unknown_type $html
  123.  * @param unknown_type $id
  124.  * @param unknown_type $alt
  125.  * @param unknown_type $title
  126.  * @param unknown_type $align
  127.  * @param unknown_type $url
  128.  * @param unknown_type $size
  129.  * @return unknown
  130.  */
  131. function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $alt = '' ) {
  132.  
  133.         if ( empty($caption) || apply_filters( 'disable_captions', '' ) )
  134.                 return $html;
  135.  
  136.         $id = ( 0 < (int) $id ) ? 'attachment_' . $id : '';
  137.  
  138.         if ( ! preg_match( '/width="([0-9]+)/', $html, $matches ) )
  139.                 return $html;
  140.  
  141.         $width = $matches[1];
  142.  
  143.         $html = preg_replace( '/(class=["\'][^\'"]*)align(none|left|right|center)\s?/', '$1', $html );
  144.         if ( empty($align) )
  145.                 $align = 'none';
  146.  
  147.         $shcode = '[caption id="' . $id . '" align="align' . $align
  148.         . '" width="' . $width . '" caption="' . addslashes($caption) . '"]' . $html . '[/caption]';
  149.  
  150.         return apply_filters( 'image_add_caption_shortcode', $shcode, $html );
  151. }
  152. add_filter( 'image_send_to_editor', 'image_add_caption', 20, 8 );
  153.  
  154. /**
  155.  * {@internal Missing Short Description}}
  156.  *
  157.  * @since unknown
  158.  *
  159.  * @param unknown_type $html
  160.  */
  161. function media_send_to_editor($html) {
  162. ?>
  163. <script type="text/javascript">
  164. /* <![CDATA[ */
  165. var win = window.dialogArguments || opener || parent || top;
  166. win.send_to_editor('<?php echo addslashes($html); ?>');
  167. /* ]]> */
  168. </script>
  169. <?php
  170.         exit;
  171. }
  172.  
  173. /**
  174.  * {@internal Missing Short Description}}
  175.  *
  176.  * This handles the file upload POST itself, creating the attachment post.
  177.  *
  178.  * @since unknown
  179.  *
  180.  * @param string $file_id Index into the {@link $_FILES} array of the upload
  181.  * @param int $post_id The post ID the media is associated with
  182.  * @param array $post_data allows you to overwrite some of the attachment
  183.  * @param array $overrides allows you to override the {@link wp_handle_upload()} behavior
  184.  * @return int the ID of the attachment
  185.  */
  186. function media_handle_upload($file_id, $post_id, $post_data = array(), $overrides = array( 'test_form' => false )) {
  187.  
  188.         $time = current_time('mysql');
  189.         if ( $post = get_post($post_id) ) {
  190.                 if ( substr( $post->post_date, 0, 4 ) > 0 )
  191.                         $time = $post->post_date;
  192.         }
  193.  
  194.         $name = $_FILES[$file_id]['name'];
  195.         $file = wp_handle_upload($_FILES[$file_id], $overrides, $time);
  196.  
  197.         if ( isset($file['error']) )
  198.                 return new WP_Error( 'upload_error', $file['error'] );
  199.  
  200.         $name_parts = pathinfo($name);
  201.         $name = trim( substr( $name, 0, -(1 + strlen($name_parts['extension'])) ) );
  202.  
  203.         $url = $file['url'];
  204.         $type = $file['type'];
  205.         $file = $file['file'];
  206.         $title = $name;
  207.         $content = '';
  208.  
  209.         // use image exif/iptc data for title and caption defaults if possible
  210.         if ( $image_meta = @wp_read_image_metadata($file) ) {
  211.                 if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) )
  212.                         $title = $image_meta['title'];
  213.                 if ( trim( $image_meta['caption'] ) )
  214.                         $content = $image_meta['caption'];
  215.         }
  216.  
  217.         // Construct the attachment array
  218.         $attachment = array_merge( array(
  219.                 'post_mime_type' => $type,
  220.                 'guid' => $url,
  221.                 'post_parent' => $post_id,
  222.                 'post_title' => $title,
  223.                 'post_content' => $content,
  224.         ), $post_data );
  225.  
  226.         // Save the data
  227.         $id = wp_insert_attachment($attachment, $file, $post_id);
  228.         if ( !is_wp_error($id) ) {
  229.                 wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
  230.         }
  231.  
  232.         return $id;
  233.  
  234. }
  235.  
  236. /**
  237.  * {@internal Missing Short Description}}
  238.  *
  239.  * @since unknown
  240.  *
  241.  * @param unknown_type $file_array
  242.  * @param unknown_type $post_id
  243.  * @param unknown_type $desc
  244.  * @param unknown_type $post_data
  245.  * @return unknown
  246.  */
  247. function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = array()) {
  248.         $overrides = array('test_form'=>false);
  249.  
  250.         $file = wp_handle_sideload($file_array, $overrides);
  251.         if ( isset($file['error']) )
  252.                 return new WP_Error( 'upload_error', $file['error'] );
  253.  
  254.         $url = $file['url'];
  255.         $type = $file['type'];
  256.         $file = $file['file'];
  257.         $title = preg_replace('/\.[^.]+$/', '', basename($file));
  258.         $content = '';
  259.  
  260.         // use image exif/iptc data for title and caption defaults if possible
  261.         if ( $image_meta = @wp_read_image_metadata($file) ) {
  262.                 if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) )
  263.                         $title = $image_meta['title'];
  264.                 if ( trim( $image_meta['caption'] ) )
  265.                         $content = $image_meta['caption'];
  266.         }
  267.  
  268.         $title = @$desc;
  269.  
  270.         // Construct the attachment array
  271.         $attachment = array_merge( array(
  272.                 'post_mime_type' => $type,
  273.                 'guid' => $url,
  274.                 'post_parent' => $post_id,
  275.                 'post_title' => $title,
  276.                 'post_content' => $content,
  277.         ), $post_data );
  278.  
  279.         // Save the attachment metadata
  280.         $id = wp_insert_attachment($attachment, $file, $post_id);
  281.         if ( !is_wp_error($id) ) {
  282.                 wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
  283.                 return $url;
  284.         }
  285.         return $id;
  286. }
  287.  
  288. /**
  289.  * {@internal Missing Short Description}}
  290.  *
  291.  * Wrap iframe content (produced by $content_func) in a doctype, html head/body
  292.  * etc any additional function args will be passed to content_func.
  293.  *
  294.  * @since unknown
  295.  *
  296.  * @param unknown_type $content_func
  297.  */
  298. function wp_iframe($content_func /* ... */) {
  299. ?>
  300. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  301. <html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
  302. <head>
  303. <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
  304. <title><?php bloginfo('name') ?> &rsaquo; <?php _e('Uploads'); ?> &#8212; <?php _e('WordPress'); ?></title>
  305. <?php
  306. wp_enqueue_style( 'global' );
  307. wp_enqueue_style( 'wp-admin' );
  308. wp_enqueue_style( 'colors' );
  309. // Check callback name for 'media'
  310. if ( ( is_array( $content_func ) && ! empty( $content_func[1] ) && 0 === strpos( (string) $content_func[1], 'media' ) ) || 0 === strpos( $content_func, 'media' ) )
  311.         wp_enqueue_style( 'media' );
  312. wp_enqueue_style( 'ie' );
  313. ?>
  314. <script type="text/javascript">
  315. //<![CDATA[
  316. addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};
  317. var userSettings = {'url':'<?php echo SITECOOKIEPATH; ?>','uid':'<?php if ( ! isset($current_user) ) $current_user = wp_get_current_user(); echo $current_user->ID; ?>','time':'<?php echo time(); ?>'};
  318. var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>', pagenow = 'media-upload-popup', adminpage = 'media-upload-popup';
  319. //]]>
  320. </script>
  321. <?php
  322. do_action('admin_enqueue_scripts', 'media-upload-popup');
  323. do_action('admin_print_styles-media-upload-popup');
  324. do_action('admin_print_styles');
  325. do_action('admin_print_scripts-media-upload-popup');
  326. do_action('admin_print_scripts');
  327. do_action('admin_head-media-upload-popup');
  328. do_action('admin_head');
  329.  
  330. if ( is_string($content_func) )
  331.         do_action( "admin_head_{$content_func}" );
  332. ?>
  333. </head>
  334. <body<?php if ( isset($GLOBALS['body_id']) ) echo ' id="' . $GLOBALS['body_id'] . '"'; ?>>
  335. <?php
  336.         $args = func_get_args();
  337.         $args = array_slice($args, 1);
  338.         call_user_func_array($content_func, $args);
  339.  
  340.         do_action('admin_print_footer_scripts');
  341. ?>
  342. <script type="text/javascript">if(typeof wpOnload=='function')wpOnload();</script>
  343. </body>
  344. </html>
  345. <?php
  346. }
  347.  
  348. /**
  349.  * {@internal Missing Short Description}}
  350.  *
  351.  * @since unknown
  352.  */
  353. function media_buttons() {
  354.         $do_image = $do_audio = $do_video = true;
  355.         if ( is_multisite() ) {
  356.                 $media_buttons = get_site_option( 'mu_media_buttons' );
  357.                 if ( empty($media_buttons['image']) )
  358.                         $do_image = false;
  359.                 if ( empty($media_buttons['audio']) )
  360.                         $do_audio = false;
  361.                 if ( empty($media_buttons['video']) )
  362.                         $do_video = false;
  363.         }
  364.         $out = '';
  365.  
  366.         if ( $do_image )
  367.                 $out .= _media_button(__('Add an Image'), 'images/media-button-image.gif?ver=20100531', 'image');
  368.         if ( $do_video )
  369.                 $out .= _media_button(__('Add Video'), 'images/media-button-video.gif?ver=20100531', 'video');
  370.         if ( $do_audio )
  371.                 $out .= _media_button(__('Add Audio'), 'images/media-button-music.gif?ver=20100531', 'audio');
  372.  
  373.         $out .= _media_button(__('Add Media'), 'images/media-button-other.gif?ver=20100531', 'media');
  374.  
  375.         $context = apply_filters('media_buttons_context', __('Upload/Insert %s'));
  376.  
  377.         printf($context, $out);
  378. }
  379. add_action( 'media_buttons', 'media_buttons' );
  380.  
  381. function _media_button($title, $icon, $type) {
  382.         return "<a href='" . esc_url( get_upload_iframe_src($type) ) . "' id='add_$type' class='thickbox' title='$title'><img src='" . esc_url( admin_url( $icon ) ) . "' alt='$title' /></a>";
  383. }
  384.  
  385. function get_upload_iframe_src($type) {
  386.         global $post_ID, $temp_ID;
  387.         $uploading_iframe_ID = (int) (0 == $post_ID ? $temp_ID : $post_ID);
  388.         $upload_iframe_src = add_query_arg('post_id', $uploading_iframe_ID, 'media-upload.php');
  389.  
  390.         if ( 'media' != $type )
  391.                 $upload_iframe_src = add_query_arg('type', $type, $upload_iframe_src);
  392.         $upload_iframe_src = apply_filters($type . '_upload_iframe_src', $upload_iframe_src);
  393.  
  394.         return add_query_arg('TB_iframe', true, $upload_iframe_src);
  395. }
  396.  
  397. /**
  398.  * {@internal Missing Short Description}}
  399.  *
  400.  * @since unknown
  401.  *
  402.  * @return unknown
  403.  */
  404. function media_upload_form_handler() {
  405.         check_admin_referer('media-form');
  406.  
  407.         $errors = null;
  408.  
  409.         if ( isset($_POST['send']) ) {
  410.                 $keys = array_keys($_POST['send']);
  411.                 $send_id = (int) array_shift($keys);
  412.         }
  413.  
  414.         if ( !empty($_POST['attachments']) ) foreach ( $_POST['attachments'] as $attachment_id => $attachment ) {
  415.                 $post = $_post = get_post($attachment_id, ARRAY_A);
  416.                 if ( isset($attachment['post_content']) )
  417.                         $post['post_content'] = $attachment['post_content'];
  418.                 if ( isset($attachment['post_title']) )
  419.                         $post['post_title'] = $attachment['post_title'];
  420.                 if ( isset($attachment['post_excerpt']) )
  421.                         $post['post_excerpt'] = $attachment['post_excerpt'];
  422.                 if ( isset($attachment['menu_order']) )
  423.                         $post['menu_order'] = $attachment['menu_order'];
  424.  
  425.                 if ( isset($send_id) && $attachment_id == $send_id ) {
  426.                         if ( isset($attachment['post_parent']) )
  427.                                 $post['post_parent'] = $attachment['post_parent'];
  428.                 }
  429.  
  430.                 $post = apply_filters('attachment_fields_to_save', $post, $attachment);
  431.  
  432.                 if ( isset($attachment['image_alt']) ) {
  433.                         $image_alt = get_post_meta($attachment_id, '_wp_attachment_image_alt', true);
  434.                         if ( $image_alt != stripslashes($attachment['image_alt']) ) {
  435.                                 $image_alt = wp_strip_all_tags( stripslashes($attachment['image_alt']), true );
  436.                                 // update_meta expects slashed
  437.                                 update_post_meta( $attachment_id, '_wp_attachment_image_alt', addslashes($image_alt) );
  438.                         }
  439.                 }
  440.  
  441.                 if ( isset($post['errors']) ) {
  442.                         $errors[$attachment_id] = $post['errors'];
  443.                         unset($post['errors']);
  444.                 }
  445.  
  446.                 if ( $post != $_post )
  447.                         wp_update_post($post);
  448.  
  449.                 foreach ( get_attachment_taxonomies($post) as $t ) {
  450.                         if ( isset($attachment[$t]) )
  451.                                 wp_set_object_terms($attachment_id, array_map('trim', preg_split('/,+/', $attachment[$t])), $t, false);
  452.                 }
  453.         }
  454.  
  455.         if ( isset($_POST['insert-gallery']) || isset($_POST['update-gallery']) ) { ?>
  456.                 <script type="text/javascript">
  457.                 /* <![CDATA[ */
  458.                 var win = window.dialogArguments || opener || parent || top;
  459.                 win.tb_remove();
  460.                 /* ]]> */
  461.                 </script>
  462.                 <?php
  463.                 exit;
  464.         }
  465.  
  466.         if ( isset($send_id) ) {
  467.                 $attachment = stripslashes_deep( $_POST['attachments'][$send_id] );
  468.  
  469.                 $html = $attachment['post_title'];
  470.                 if ( !empty($attachment['url']) ) {
  471.                         $rel = '';
  472.                         if ( strpos($attachment['url'], 'attachment_id') || get_attachment_link($send_id) == $attachment['url'] )
  473.                                 $rel = " rel='attachment wp-att-" . esc_attr($send_id) . "'";
  474.                         $html = "<a href='{$attachment['url']}'$rel>$html</a>";
  475.                 }
  476.  
  477.                 $html = apply_filters('media_send_to_editor', $html, $send_id, $attachment);
  478.                 return media_send_to_editor($html);
  479.         }
  480.  
  481.         return $errors;
  482. }
  483.  
  484. /**
  485.  * {@internal Missing Short Description}}
  486.  *
  487.  * @since unknown
  488.  *
  489.  * @return unknown
  490.  */
  491. function media_upload_image() {
  492.         $errors = array();
  493.         $id = 0;
  494.  
  495.         if ( isset($_POST['html-upload']) && !empty($_FILES) ) {
  496.                 // Upload File button was clicked
  497.                 $id = media_handle_upload('async-upload', $_REQUEST['post_id']);
  498.                 unset($_FILES);
  499.                 if ( is_wp_error($id) ) {
  500.                         $errors['upload_error'] = $id;
  501.                         $id = false;
  502.                 }
  503.         }
  504.  
  505.         if ( !empty($_POST['insertonlybutton']) ) {
  506.                 $alt = $align = '';
  507.  
  508.                 $src = $_POST['insertonly']['src'];
  509.                 if ( !empty($src) && !strpos($src, '://') )
  510.                         $src = "http://$src";
  511.                 $alt = esc_attr($_POST['insertonly']['alt']);
  512.                 if ( isset($_POST['insertonly']['align']) ) {
  513.                         $align = esc_attr($_POST['insertonly']['align']);
  514.                         $class = " class='align$align'";
  515.                 }
  516.                 if ( !empty($src) )
  517.                         $html = "<img src='" . esc_url($src) . "' alt='$alt'$class />";
  518.  
  519.                 $html = apply_filters('image_send_to_editor_url', $html, esc_url_raw($src), $alt, $align);
  520.                 return media_send_to_editor($html);
  521.         }
  522.  
  523.         if ( !empty($_POST) ) {
  524.                 $return = media_upload_form_handler();
  525.  
  526.                 if ( is_string($return) )
  527.                         return $return;
  528.                 if ( is_array($return) )
  529.                         $errors = $return;
  530.         }
  531.  
  532.         if ( isset($_POST['save']) ) {
  533.                 $errors['upload_notice'] = __('Saved.');
  534.                 return media_upload_gallery();
  535.         }
  536.  
  537.         if ( isset($_GET['tab']) && $_GET['tab'] == 'type_url' )
  538.                 return wp_iframe( 'media_upload_type_url_form', 'image', $errors, $id );
  539.  
  540.         return wp_iframe( 'media_upload_type_form', 'image', $errors, $id );
  541. }
  542.  
  543. /**
  544.  * {@internal Missing Short Description}}
  545.  *
  546.  * @since unknown
  547.  *
  548.  * @param unknown_type $file
  549.  * @param unknown_type $post_id
  550.  * @param unknown_type $desc
  551.  * @return unknown
  552.  */
  553. function media_sideload_image($file, $post_id, $desc = null) {
  554.         if (!empty($file) ) {
  555.                 // Download file to temp location
  556.                 $tmp = download_url($file);
  557.  
  558.                 // Set variables for storage
  559.                 // fix file filename for query strings
  560.                 preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
  561.                 $file_array['name'] = basename($matches[0]);
  562.                 $file_array['tmp_name'] = $tmp;
  563.  
  564.                 // If error storing temporarily, unlink
  565.                 if ( is_wp_error($tmp) ) {
  566.                         @unlink($file_array['tmp_name']);
  567.                         $file_array['tmp_name'] = '';
  568.                 }
  569.  
  570.                 // do the validation and storage stuff
  571.                 $id = media_handle_sideload($file_array, $post_id, @$desc);
  572.                 $src = $id;
  573.  
  574.                 // If error storing permanently, unlink
  575.                 if ( is_wp_error($id) ) {
  576.                         @unlink($file_array['tmp_name']);
  577.                         return $id;
  578.                 }
  579.         }
  580.  
  581.         // Finally check to make sure the file has been saved, then return the html
  582.         if ( !empty($src) ) {
  583.                 $alt = @$desc;
  584.                 $html = "<img src='$src' alt='$alt' />";
  585.                 return $html;
  586.         }
  587. }
  588.  
  589. /**
  590.  * {@internal Missing Short Description}}
  591.  *
  592.  * @since unknown
  593.  *
  594.  * @return unknown
  595.  */
  596. function media_upload_audio() {
  597.         $errors = array();
  598.         $id = 0;
  599.  
  600.         if ( isset($_POST['html-upload']) && !empty($_FILES) ) {
  601.                 // Upload File button was clicked
  602.                 $id = media_handle_upload('async-upload', $_REQUEST['post_id']);
  603.                 unset($_FILES);
  604.                 if ( is_wp_error($id) ) {
  605.                         $errors['upload_error'] = $id;
  606.                         $id = false;
  607.                 }
  608.         }
  609.  
  610.         if ( !empty($_POST['insertonlybutton']) ) {
  611.                 $href = $_POST['insertonly']['href'];
  612.                 if ( !empty($href) && !strpos($href, '://') )
  613.                         $href = "http://$href";
  614.  
  615.                 $title = esc_attr($_POST['insertonly']['title']);
  616.                 if ( empty($title) )
  617.             $title = esc_attr( basename($href) );
  618.  
  619.                 if ( !empty($title) && !empty($href) )
  620.             $html = "<a href='" . esc_url($href) . "' >$title</a>";
  621.  
  622.                 $html = apply_filters('audio_send_to_editor_url', $html, $href, $title);
  623.  
  624.                 return media_send_to_editor($html);
  625.         }
  626.  
  627.         if ( !empty($_POST) ) {
  628.                 $return = media_upload_form_handler();
  629.  
  630.                 if ( is_string($return) )
  631.                         return $return;
  632.                 if ( is_array($return) )
  633.                         $errors = $return;
  634.         }
  635.  
  636.         if ( isset($_POST['save']) ) {
  637.                 $errors['upload_notice'] = __('Saved.');
  638.                 return media_upload_gallery();
  639.         }
  640.  
  641.         if ( isset($_GET['tab']) && $_GET['tab'] == 'type_url' )
  642.                 return wp_iframe( 'media_upload_type_url_form', 'audio', $errors, $id );
  643.  
  644.         return wp_iframe( 'media_upload_type_form', 'audio', $errors, $id );
  645. }
  646.  
  647. /**
  648.  * {@internal Missing Short Description}}
  649.  *
  650.  * @since unknown
  651.  *
  652.  * @return unknown
  653.  */
  654. function media_upload_video() {
  655.         $errors = array();
  656.         $id = 0;
  657.  
  658.         if ( isset($_POST['html-upload']) && !empty($_FILES) ) {
  659.                 // Upload File button was clicked
  660.                 $id = media_handle_upload('async-upload', $_REQUEST['post_id']);
  661.                 unset($_FILES);
  662.                 if ( is_wp_error($id) ) {
  663.                         $errors['upload_error'] = $id;
  664.                         $id = false;
  665.                 }
  666.         }
  667.  
  668.         if ( !empty($_POST['insertonlybutton']) ) {
  669.                 $href = $_POST['insertonly']['href'];
  670.                 if ( !empty($href) && !strpos($href, '://') )
  671.                         $href = "http://$href";
  672.  
  673.                 $title = esc_attr($_POST['insertonly']['title']);
  674.         if ( empty($title) )
  675.             $title = esc_attr( basename($href) );
  676.  
  677.                 if ( !empty($title) && !empty($href) )
  678.             $html = "<a href='" . esc_url($href) . "' >$title</a>";
  679.  
  680.                 $html = apply_filters('video_send_to_editor_url', $html, $href, $title);
  681.  
  682.                 return media_send_to_editor($html);
  683.         }
  684.  
  685.         if ( !empty($_POST) ) {
  686.                 $return = media_upload_form_handler();
  687.  
  688.                 if ( is_string($return) )
  689.                         return $return;
  690.                 if ( is_array($return) )
  691.                         $errors = $return;
  692.         }
  693.  
  694.         if ( isset($_POST['save']) ) {
  695.                 $errors['upload_notice'] = __('Saved.');
  696.                 return media_upload_gallery();
  697.         }
  698.  
  699.         if ( isset($_GET['tab']) && $_GET['tab'] == 'type_url' )
  700.                 return wp_iframe( 'media_upload_type_url_form', 'video', $errors, $id );
  701.  
  702.         return wp_iframe( 'media_upload_type_form', 'video', $errors, $id );
  703. }
  704.  
  705. /**
  706.  * {@internal Missing Short Description}}
  707.  *
  708.  * @since unknown
  709.  *
  710.  * @return unknown
  711.  */
  712. function media_upload_file() {
  713.         $errors = array();
  714.         $id = 0;
  715.  
  716.         if ( isset($_POST['html-upload']) && !empty($_FILES) ) {
  717.                 // Upload File button was clicked
  718.                 $id = media_handle_upload('async-upload', $_REQUEST['post_id']);
  719.                 unset($_FILES);
  720.                 if ( is_wp_error($id) ) {
  721.                         $errors['upload_error'] = $id;
  722.                         $id = false;
  723.                 }
  724.         }
  725.  
  726.         if ( !empty($_POST['insertonlybutton']) ) {
  727.                 $href = $_POST['insertonly']['href'];
  728.                 if ( !empty($href) && !strpos($href, '://') )
  729.                         $href = "http://$href";
  730.  
  731.                 $title = esc_attr($_POST['insertonly']['title']);
  732.                 if ( empty($title) )
  733.                         $title = basename($href);
  734.                 if ( !empty($title) && !empty($href) )
  735.                         $html = "<a href='" . esc_url($href) . "' >$title</a>";
  736.                 $html = apply_filters('file_send_to_editor_url', $html, esc_url_raw($href), $title);
  737.                 return media_send_to_editor($html);
  738.         }
  739.  
  740.         if ( !empty($_POST) ) {
  741.                 $return = media_upload_form_handler();
  742.  
  743.                 if ( is_string($return) )
  744.                         return $return;
  745.                 if ( is_array($return) )
  746.                         $errors = $return;
  747.         }
  748.  
  749.         if ( isset($_POST['save']) ) {
  750.                 $errors['upload_notice'] = __('Saved.');
  751.                 return media_upload_gallery();
  752.         }
  753.  
  754.         if ( isset($_GET['tab']) && $_GET['tab'] == 'type_url' )
  755.                 return wp_iframe( 'media_upload_type_url_form', 'file', $errors, $id );
  756.  
  757.         return wp_iframe( 'media_upload_type_form', 'file', $errors, $id );
  758. }
  759.  
  760. /**
  761.  * {@internal Missing Short Description}}
  762.  *
  763.  * @since unknown
  764.  *
  765.  * @return unknown
  766.  */
  767. function media_upload_gallery() {
  768.         $errors = array();
  769.  
  770.         if ( !empty($_POST) ) {
  771.                 $return = media_upload_form_handler();
  772.  
  773.                 if ( is_string($return) )
  774.                         return $return;
  775.                 if ( is_array($return) )
  776.                         $errors = $return;
  777.         }
  778.  
  779.         wp_enqueue_script('admin-gallery');
  780.         return wp_iframe( 'media_upload_gallery_form', $errors );
  781. }
  782.  
  783. /**
  784.  * {@internal Missing Short Description}}
  785.  *
  786.  * @since unknown
  787.  *
  788.  * @return unknown
  789.  */
  790. function media_upload_library() {
  791.         $errors = array();
  792.         if ( !empty($_POST) ) {
  793.                 $return = media_upload_form_handler();
  794.  
  795.                 if ( is_string($return) )
  796.                         return $return;
  797.                 if ( is_array($return) )
  798.                         $errors = $return;
  799.         }
  800.  
  801.         return wp_iframe( 'media_upload_library_form', $errors );
  802. }
  803.  
  804. /**
  805.  * Retrieve HTML for the image alignment radio buttons with the specified one checked.
  806.  *
  807.  * @since unknown
  808.  *
  809.  * @param unknown_type $post
  810.  * @param unknown_type $checked
  811.  * @return unknown
  812.  */
  813. function image_align_input_fields( $post, $checked = '' ) {
  814.  
  815.         if ( empty($checked) )
  816.                 $checked = get_user_setting('align', 'none');
  817.  
  818.         $alignments = array('none' => __('None'), 'left' => __('Left'), 'center' => __('Center'), 'right' => __('Right'));
  819.         if ( !array_key_exists( (string) $checked, $alignments ) )
  820.                 $checked = 'none';
  821.  
  822.         $out = array();
  823.         foreach ( $alignments as $name => $label ) {
  824.                 $name = esc_attr($name);
  825.                 $out[] = "<input type='radio' name='attachments[{$post->ID}][align]' id='image-align-{$name}-{$post->ID}' value='$name'".
  826.                         ( $checked == $name ? " checked='checked'" : "" ) .
  827.                         " /><label for='image-align-{$name}-{$post->ID}' class='align image-align-{$name}-label'>$label</label>";
  828.         }
  829.         return join("\n", $out);
  830. }
  831.  
  832. /**
  833.  * Retrieve HTML for the size radio buttons with the specified one checked.
  834.  *
  835.  * @since unknown
  836.  *
  837.  * @param unknown_type $post
  838.  * @param unknown_type $checked
  839.  * @return unknown
  840.  */
  841. function image_size_input_fields( $post, $check = '' ) {
  842.  
  843.                 // get a list of the actual pixel dimensions of each possible intermediate version of this image
  844.                 $size_names = array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size'));
  845.  
  846.                 if ( empty($check) )
  847.                         $check = get_user_setting('imgsize', 'medium');
  848.  
  849.                 foreach ( $size_names as $size => $label ) {
  850.                         $downsize = image_downsize($post->ID, $size);
  851.                         $checked = '';
  852.  
  853.                         // is this size selectable?
  854.                         $enabled = ( $downsize[3] || 'full' == $size );
  855.                         $css_id = "image-size-{$size}-{$post->ID}";
  856.                         // if this size is the default but that's not available, don't select it
  857.                         if ( $size == $check ) {
  858.                                 if ( $enabled )
  859.                                         $checked = " checked='checked'";
  860.                                 else
  861.                                         $check = '';
  862.                         } elseif ( !$check && $enabled && 'thumbnail' != $size ) {
  863.                                 // if $check is not enabled, default to the first available size that's bigger than a thumbnail
  864.                                 $check = $size;
  865.                                 $checked = " checked='checked'";
  866.                         }
  867.  
  868.                         $html = "<div class='image-size-item'><input type='radio' " . disabled( $enabled, false, false ) . "name='attachments[$post->ID][image-size]' id='{$css_id}' value='{$size}'$checked />";
  869.  
  870.                         $html .= "<label for='{$css_id}'>$label</label>";
  871.                         // only show the dimensions if that choice is available
  872.                         if ( $enabled )
  873.                                 $html .= " <label for='{$css_id}' class='help'>" . sprintf( "(%d&nbsp;&times;&nbsp;%d)", $downsize[1], $downsize[2] ). "</label>";
  874.  
  875.                         $html .= '</div>';
  876.  
  877.                         $out[] = $html;
  878.                 }
  879.  
  880.                 return array(
  881.                         'label' => __('Size'),
  882.                         'input' => 'html',
  883.                         'html'  => join("\n", $out),
  884.                 );
  885. }
  886.  
  887. /**
  888.  * Retrieve HTML for the Link URL buttons with the default link type as specified.
  889.  *
  890.  * @since unknown
  891.  *
  892.  * @param unknown_type $post
  893.  * @param unknown_type $url_type
  894.  * @return unknown
  895.  */
  896. function image_link_input_fields($post, $url_type = '') {
  897.  
  898.         $file = wp_get_attachment_url($post->ID);
  899.         $link = get_attachment_link($post->ID);
  900.  
  901.         if ( empty($url_type) )
  902.                 $url_type = get_user_setting('urlbutton', 'post');
  903.  
  904.         $url = '';
  905.         if ( $url_type == 'file' )
  906.                 $url = $file;
  907.         elseif ( $url_type == 'post' )
  908.                 $url = $link;
  909.  
  910.         return "
  911.         <input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='" . esc_attr($url) . "' /><br />
  912.         <button type='button' class='button urlnone' title=''>" . __('None') . "</button>
  913.         <button type='button' class='button urlfile' title='" . esc_attr($file) . "'>" . __('File URL') . "</button>
  914.         <button type='button' class='button urlpost' title='" . esc_attr($link) . "'>" . __('Post URL') . "</button>
  915. ";
  916. }
  917.  
  918. /**
  919.  * {@internal Missing Short Description}}
  920.  *
  921.  * @since unknown
  922.  *
  923.  * @param unknown_type $form_fields
  924.  * @param unknown_type $post
  925.  * @return unknown
  926.  */
  927. function image_attachment_fields_to_edit($form_fields, $post) {
  928.         if ( substr($post->post_mime_type, 0, 5) == 'image' ) {
  929.                 $alt = get_post_meta($post->ID, '_wp_attachment_image_alt', true);
  930.                 if ( empty($alt) )
  931.                         $alt = '';
  932.  
  933.                 $form_fields['post_title']['required'] = true;
  934.  
  935.                 $form_fields['image_alt'] = array(
  936.                         'value' => $alt,
  937.                         'label' => __('Alternate Text'),
  938.                         'helps' => __('Alt text for the image, e.g. &#8220;The Mona Lisa&#8221;')
  939.                 );
  940.  
  941.                 $form_fields['align'] = array(
  942.                         'label' => __('Alignment'),
  943.                         'input' => 'html',
  944.                         'html'  => image_align_input_fields($post, get_option('image_default_align')),
  945.                 );
  946.  
  947.                 $form_fields['image-size'] = image_size_input_fields( $post, get_option('image_default_size', 'medium') );
  948.  
  949.         } else {
  950.                 unset( $form_fields['image_alt'] );
  951.         }
  952.         return $form_fields;
  953. }
  954.  
  955. add_filter('attachment_fields_to_edit', 'image_attachment_fields_to_edit', 10, 2);
  956.  
  957. /**
  958.  * {@internal Missing Short Description}}
  959.  *
  960.  * @since unknown
  961.  *
  962.  * @param unknown_type $form_fields
  963.  * @param unknown_type $post
  964.  * @return unknown
  965.  */
  966. function media_single_attachment_fields_to_edit( $form_fields, $post ) {
  967.         unset($form_fields['url'], $form_fields['align'], $form_fields['image-size']);
  968.         return $form_fields;
  969. }
  970.  
  971. function media_post_single_attachment_fields_to_edit( $form_fields, $post ) {
  972.         unset($form_fields['image_url']);
  973.         return $form_fields;
  974. }
  975.  
  976. /**
  977.  * {@internal Missing Short Description}}
  978.  *
  979.  * @since unknown
  980.  *
  981.  * @param unknown_type $post
  982.  * @param unknown_type $attachment
  983.  * @return unknown
  984.  */
  985. function image_attachment_fields_to_save($post, $attachment) {
  986.         if ( substr($post['post_mime_type'], 0, 5) == 'image' ) {
  987.                 if ( strlen(trim($post['post_title'])) == 0 ) {
  988.                         $post['post_title'] = preg_replace('/\.\w+$/', '', basename($post['guid']));
  989.                         $post['errors']['post_title']['errors'][] = __('Empty Title filled from filename.');
  990.                 }
  991.         }
  992.  
  993.         return $post;
  994. }
  995.  
  996. add_filter('attachment_fields_to_save', 'image_attachment_fields_to_save', 10, 2);
  997.  
  998. /**
  999.  * {@internal Missing Short Description}}
  1000.  *
  1001.  * @since unknown
  1002.  *
  1003.  * @param unknown_type $html
  1004.  * @param unknown_type $attachment_id
  1005.  * @param unknown_type $attachment
  1006.  * @return unknown
  1007.  */
  1008. function image_media_send_to_editor($html, $attachment_id, $attachment) {
  1009.         $post =& get_post($attachment_id);
  1010.         if ( substr($post->post_mime_type, 0, 5) == 'image' ) {
  1011.                 $url = $attachment['url'];
  1012.                 $align = !empty($attachment['align']) ? $attachment['align'] : 'none';
  1013.                 $size = !empty($attachment['image-size']) ? $attachment['image-size'] : 'medium';
  1014.                 $alt = !empty($attachment['image_alt']) ? $attachment['image_alt'] : '';
  1015.                 $rel = ( $url == get_attachment_link($attachment_id) );
  1016.  
  1017.                 return get_image_send_to_editor($attachment_id, $attachment['post_excerpt'], $attachment['post_title'], $align, $url, $rel, $size, $alt);
  1018.         }
  1019.  
  1020.         return $html;
  1021. }
  1022.  
  1023. add_filter('media_send_to_editor', 'image_media_send_to_editor', 10, 3);
  1024.  
  1025. /**
  1026.  * {@internal Missing Short Description}}
  1027.  *
  1028.  * @since unknown
  1029.  *
  1030.  * @param unknown_type $post
  1031.  * @param unknown_type $errors
  1032.  * @return unknown
  1033.  */
  1034. function get_attachment_fields_to_edit($post, $errors = null) {
  1035.         if ( is_int($post) )
  1036.                 $post =& get_post($post);
  1037.         if ( is_array($post) )
  1038.                 $post = (object) $post;
  1039.  
  1040.         $image_url = wp_get_attachment_url($post->ID);
  1041.  
  1042.         $edit_post = sanitize_post($post, 'edit');
  1043.  
  1044.  
  1045.  
  1046.         $form_fields = array(
  1047.                 'post_title'   => array(
  1048.                         'label'      => __('Title'),
  1049.                         'value'      => $edit_post->post_title
  1050.                 ),
  1051.                 'image_alt'   => array(),
  1052.                 'post_excerpt' => array(
  1053.                         'label'      => __('Caption'),
  1054.                         'value'      => $edit_post->post_excerpt
  1055.                 ),
  1056.                 'post_content' => array(
  1057.                         'label'      => __('Description'),
  1058.                         'value'      => $edit_post->post_content,
  1059.                         'input'      => 'textarea'
  1060.                 ),
  1061.                 'url'          => array(
  1062.                         'label'      => __('Link URL'),
  1063.                         'input'      => 'html',
  1064.                         'html'       => image_link_input_fields($post, get_option('image_default_link_type')),
  1065.                         'helps'      => __('Enter a link URL or click above for presets.')
  1066.                 ),
  1067.                 'menu_order'   => array(
  1068.                         'label'      => __('Order'),
  1069.                         'value'      => $edit_post->menu_order
  1070.                 ),
  1071.                 'image_url'     => array(
  1072.                         'label'      => __('File URL'),
  1073.                         'input'      => 'html',
  1074.                         'html'       => "<input type='text' class='text urlfield' readonly='readonly' name='attachments[$post->ID][url]' value='" . esc_attr($image_url) . "' /><br />",
  1075.                         'value'      => wp_get_attachment_url($post->ID),
  1076.                         'helps'      => __('Location of the uploaded file.')
  1077.                 )
  1078.         );
  1079.  
  1080.         foreach ( get_attachment_taxonomies($post) as $taxonomy ) {
  1081.                 $t = (array) get_taxonomy($taxonomy);
  1082.                 if ( empty($t['label']) )
  1083.                         $t['label'] = $taxonomy;
  1084.                 if ( empty($t['args']) )
  1085.                         $t['args'] = array();
  1086.  
  1087.                 $terms = get_object_term_cache($post->ID, $taxonomy);
  1088.                 if ( empty($terms) )
  1089.                         $terms = wp_get_object_terms($post->ID, $taxonomy, $t['args']);
  1090.  
  1091.                 $values = array();
  1092.  
  1093.                 foreach ( $terms as $term )
  1094.                         $values[] = $term->name;
  1095.                 $t['value'] = join(', ', $values);
  1096.  
  1097.                 $form_fields[$taxonomy] = $t;
  1098.         }
  1099.  
  1100.         // Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default
  1101.         // The recursive merge is easily traversed with array casting: foreach( (array) $things as $thing )
  1102.         $form_fields = array_merge_recursive($form_fields, (array) $errors);
  1103.  
  1104.         $form_fields = apply_filters('attachment_fields_to_edit', $form_fields, $post);
  1105.  
  1106.         return $form_fields;
  1107. }
  1108.  
  1109. /**
  1110.  * Retrieve HTML for media items of post gallery.
  1111.  *
  1112.  * The HTML markup retrieved will be created for the progress of SWF Upload
  1113.  * component. Will also create link for showing and hiding the form to modify
  1114.  * the image attachment.
  1115.  *
  1116.  * @since unknown
  1117.  *
  1118.  * @param int $post_id Optional. Post ID.
  1119.  * @param array $errors Errors for attachment, if any.
  1120.  * @return string
  1121.  */
  1122. function get_media_items( $post_id, $errors ) {
  1123.         $attachments = array();
  1124.         if ( $post_id ) {
  1125.                 $post = get_post($post_id);
  1126.                 if ( $post && $post->post_type == 'attachment' )
  1127.                         $attachments = array($post->ID => $post);
  1128.                 else
  1129.                         $attachments = get_children( array( 'post_parent' => $post_id, 'post_type' => 'attachment', 'orderby' => 'menu_order ASC, ID', 'order' => 'DESC') );
  1130.         } else {
  1131.                 if ( is_array($GLOBALS['wp_the_query']->posts) )
  1132.                         foreach ( $GLOBALS['wp_the_query']->posts as $attachment )
  1133.                                 $attachments[$attachment->ID] = $attachment;
  1134.         }
  1135.  
  1136.         $output = '';
  1137.         foreach ( (array) $attachments as $id => $attachment ) {
  1138.                 if ( $attachment->post_status == 'trash' )
  1139.                         continue;
  1140.                 if ( $item = get_media_item( $id, array( 'errors' => isset($errors[$id]) ? $errors[$id] : null) ) )
  1141.                         $output .= "\n<div id='media-item-$id' class='media-item child-of-$attachment->post_parent preloaded'><div class='progress'><div class='bar'></div></div><div id='media-upload-error-$id'></div><div class='filename'></div>$item\n</div>";
  1142.         }
  1143.  
  1144.         return $output;
  1145. }
  1146.  
  1147. /**
  1148.  * Retrieve HTML form for modifying the image attachment.
  1149.  *
  1150.  * @since unknown
  1151.  *
  1152.  * @param int $attachment_id Attachment ID for modification.
  1153.  * @param string|array $args Optional. Override defaults.
  1154.  * @return string HTML form for attachment.
  1155.  */
  1156. function get_media_item( $attachment_id, $args = null ) {
  1157.         global $redir_tab;
  1158.  
  1159.         if ( ( $attachment_id = intval( $attachment_id ) ) && $thumb_url = wp_get_attachment_image_src( $attachment_id, 'thumbnail', true ) )
  1160.                 $thumb_url = $thumb_url[0];
  1161.         else
  1162.                 $thumb_url = false;
  1163.  
  1164.         $post = get_post( $attachment_id );
  1165.  
  1166.         $default_args = array( 'errors' => null, 'send' => post_type_supports(get_post_type($post->post_parent), 'editor'), 'delete' => true, 'toggle' => true, 'show_title' => true );
  1167.         $args = wp_parse_args( $args, $default_args );
  1168.         extract( $args, EXTR_SKIP );
  1169.  
  1170.         $toggle_on  = __( 'Show' );
  1171.         $toggle_off = __( 'Hide' );
  1172.  
  1173.         $filename = basename( $post->guid );
  1174.         $title = esc_attr( $post->post_title );
  1175.  
  1176.         if ( $_tags = get_the_tags( $attachment_id ) ) {
  1177.                 foreach ( $_tags as $tag )
  1178.                         $tags[] = $tag->name;
  1179.                 $tags = esc_attr( join( ', ', $tags ) );
  1180.         }
  1181.  
  1182.         $post_mime_types = get_post_mime_types();
  1183.         $keys = array_keys( wp_match_mime_types( array_keys( $post_mime_types ), $post->post_mime_type ) );
  1184.         $type = array_shift( $keys );
  1185.         $type_html = "<input type='hidden' id='type-of-$attachment_id' value='" . esc_attr( $type ) . "' />";
  1186.  
  1187.         $form_fields = get_attachment_fields_to_edit( $post, $errors );
  1188.  
  1189.         if ( $toggle ) {
  1190.                 $class = empty( $errors ) ? 'startclosed' : 'startopen';
  1191.                 $toggle_links = "
  1192.         <a class='toggle describe-toggle-on' href='#'>$toggle_on</a>
  1193.         <a class='toggle describe-toggle-off' href='#'>$toggle_off</a>";
  1194.         } else {
  1195.                 $class = 'form-table';
  1196.                 $toggle_links = '';
  1197.         }
  1198.  
  1199.         $display_title = ( !empty( $title ) ) ? $title : $filename; // $title shouldn't ever be empty, but just in case
  1200.         //$display_title = $show_title ? "<div class='filename new'><span class='title'>" . wp_html_excerpt( $display_title, 60 ) . "</span></div>" : '';
  1201.         $display_title = $show_title ? "<div class='filename new' title='".$attachment_id."'><span class='title'>" . wp_html_excerpt($display_title, 60) . "</span></div>" : '';
  1202.  
  1203.         $gallery = ( ( isset( $_REQUEST['tab'] ) && 'gallery' == $_REQUEST['tab'] ) || ( isset( $redir_tab ) && 'gallery' == $redir_tab ) );
  1204.         $order = '';
  1205.  
  1206.         foreach ( $form_fields as $key => $val ) {
  1207.                 if ( 'menu_order' == $key ) {
  1208.                         if ( $gallery )
  1209.                                 $order = "<div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[$attachment_id][menu_order]' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ). "' /></div>";
  1210.                         else
  1211.                                 $order = "<input type='hidden' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ) . "' />";
  1212.  
  1213.                         unset( $form_fields['menu_order'] );
  1214.                         break;
  1215.                 }
  1216.         }
  1217.  
  1218.         $media_dims = '';
  1219.         $meta = wp_get_attachment_metadata( $post->ID );
  1220.         if ( is_array( $meta ) && array_key_exists( 'width', $meta ) && array_key_exists( 'height', $meta ) )
  1221.                 $media_dims .= "<span id='media-dims-$post->ID'>{$meta['width']}&nbsp;&times;&nbsp;{$meta['height']}</span> ";
  1222.         $media_dims = apply_filters( 'media_meta', $media_dims, $post );
  1223.  
  1224.         $image_edit_button = '';
  1225.         if ( gd_edit_image_support( $post->post_mime_type ) ) {
  1226.                 $nonce = wp_create_nonce( "image_editor-$post->ID" );
  1227.                 $image_edit_button = "<input type='button' id='imgedit-open-btn-$post->ID' onclick='imageEdit.open( $post->ID, \"$nonce\" )' class='button' value='" . esc_attr__( 'Edit Image' ) . "' /> <img src='" . esc_url( admin_url( 'images/wpspin_light.gif' ) ) . "' class='imgedit-wait-spin' alt='' />";
  1228.         }
  1229.  
  1230.         $attachment_url = get_permalink( $attachment_id );
  1231.  
  1232.         $item = "
  1233.         $type_html
  1234.         $toggle_links
  1235.         $order
  1236.         $display_title
  1237.         <table class='slidetoggle describe $class'>
  1238.                 <thead class='media-item-info' id='media-head-$post->ID'>
  1239.                 <tr valign='top'>
  1240.                         <td class='A1B1' id='thumbnail-head-$post->ID'>
  1241.                         <p><a href='$attachment_url' target='_blank'><img class='thumbnail' src='$thumb_url' alt='' style='margin-top: 3px' /></a></p>
  1242.                         <p>$image_edit_button</p>
  1243.                         </td>
  1244.                         <td>
  1245.                         <p><strong>" . __('File name:') . "</strong> $filename</p>
  1246.                         <p><strong>" . __('File type:') . "</strong> $post->post_mime_type</p>
  1247.                         <p><strong>" . __('Upload date:') . "</strong> " . mysql2date( get_option('date_format'), $post->post_date ). '</p>';
  1248.                         if ( !empty( $media_dims ) )
  1249.                                 $item .= "<p><strong>" . __('Dimensions:') . "</strong> $media_dims</p>\n";
  1250.  
  1251.                         $item .= "</td></tr>\n";
  1252.  
  1253.  
  1254.  
  1255.         $item .= "
  1256.                 </thead>
  1257.                 <tbody>
  1258.                 <tr><td colspan='2' class='imgedit-response' id='imgedit-response-$post->ID'></td></tr>
  1259.                 <tr><td style='display:none' colspan='2' class='image-editor' id='image-editor-$post->ID'></td></tr>\n";
  1260.  
  1261.         $defaults = array(
  1262.                 'input'      => 'text',
  1263.                 'required'   => false,
  1264.                 'value'      => '',
  1265.                 'extra_rows' => array(),
  1266.         );
  1267.  
  1268.         if ( $send )
  1269.                 $send = "<input type='submit' class='button' name='send[$attachment_id]' value='" . esc_attr__( 'Insert into Post' ) . "' />";
  1270.         if ( $delete && current_user_can( 'delete_post', $attachment_id ) ) {
  1271.                 if ( !EMPTY_TRASH_DAYS ) {
  1272.                         $delete = "<a href='" . wp_nonce_url( "post.php?action=delete&amp;post=$attachment_id", 'delete-attachment_' . $attachment_id ) . "' id='del[$attachment_id]' class='delete'>" . __( 'Delete Permanently' ) . '</a>';
  1273.                 } elseif ( !MEDIA_TRASH ) {
  1274.                         $delete = "<a href='#' class='del-link' onclick=\"document.getElementById('del_attachment_$attachment_id').style.display='block';return false;\">" . __( 'Delete' ) . "</a>
  1275.                          <div id='del_attachment_$attachment_id' class='del-attachment' style='display:none;'>" . sprintf( __( 'You are about to delete <strong>%s</strong>.' ), $filename ) . "
  1276.                          <a href='" . wp_nonce_url( "post.php?action=delete&amp;post=$attachment_id", 'delete-attachment_' . $attachment_id ) . "' id='del[$attachment_id]' class='button'>" . __( 'Continue' ) . "</a>
  1277.                          <a href='#' class='button' onclick=\"this.parentNode.style.display='none';return false;\">" . __( 'Cancel' ) . "</a>
  1278.                          </div>";
  1279.                 } else {
  1280.                         $delete = "<a href='" . wp_nonce_url( "post.php?action=trash&amp;post=$attachment_id", 'trash-attachment_' . $attachment_id ) . "' id='del[$attachment_id]' class='delete'>" . __( 'Move to Trash' ) . "</a>
  1281.                         <a href='" . wp_nonce_url( "post.php?action=untrash&amp;post=$attachment_id", 'untrash-attachment_' . $attachment_id ) . "' id='undo[$attachment_id]' class='undo hidden'>" . __( 'Undo' ) . "</a>";
  1282.                 }
  1283.         } else {
  1284.                 $delete = '';
  1285.         }
  1286.  
  1287.         $thumbnail = '';
  1288.         $calling_post_id = 0;
  1289.         if ( isset( $_GET['post_id'] ) )
  1290.                 $calling_post_id = absint( $_GET['post_id'] );
  1291.         elseif ( isset( $_POST ) && count( $_POST ) ) // Like for async-upload where $_GET['post_id'] isn't set
  1292.                 $calling_post_id = $post->post_parent;
  1293.         if ( 'image' == $type && $calling_post_id && current_theme_supports( 'post-thumbnails', get_post_type( $calling_post_id ) ) && get_post_thumbnail_id( $calling_post_id ) != $attachment_id ) {
  1294.                 $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$calling_post_id" );
  1295.                 $thumbnail = "<a class='wp-post-thumbnail' id='wp-post-thumbnail-" . $attachment_id . "' href='#' onclick='WPSetAsThumbnail(\"$attachment_id\", \"$ajax_nonce\");return false;'>" . esc_html__( "Use as featured image" ) . "</a>";
  1296.         }
  1297.  
  1298.         if ( ( $send || $thumbnail || $delete ) && !isset( $form_fields['buttons'] ) )
  1299.                 $form_fields['buttons'] = array( 'tr' => "\t\t<tr class='submit'><td></td><td class='savesend'>$send $thumbnail $delete</td></tr>\n" );
  1300.  
  1301.         $hidden_fields = array();
  1302.  
  1303.         foreach ( $form_fields as $id => $field ) {
  1304.                 if ( $id{0} == '_' )
  1305.                         continue;
  1306.  
  1307.                 if ( !empty( $field['tr'] ) ) {
  1308.                         $item .= $field['tr'];
  1309.                         continue;
  1310.                 }
  1311.  
  1312.                 $field = array_merge( $defaults, $field );
  1313.                 $name = "attachments[$attachment_id][$id]";
  1314.  
  1315.                 if ( $field['input'] == 'hidden' ) {
  1316.                         $hidden_fields[$name] = $field['value'];
  1317.                         continue;
  1318.                 }
  1319.  
  1320.                 $required      = $field['required'] ? '<span class="alignright"><abbr title="required" class="required">*</abbr></span>' : '';
  1321.                 $aria_required = $field['required'] ? " aria-required='true' " : '';
  1322.                 $class  = $id;
  1323.                 $class .= $field['required'] ? ' form-required' : '';
  1324.  
  1325.                 $item .= "\t\t<tr class='$class'>\n\t\t\t<th valign='top' scope='row' class='label'><label for='$name'><span class='alignleft'>{$field['label']}</span>$required<br class='clear' /></label></th>\n\t\t\t<td class='field'>";
  1326.                 if ( !empty( $field[ $field['input'] ] ) )
  1327.                         $item .= $field[ $field['input'] ];
  1328.                 elseif ( $field['input'] == 'textarea' ) {
  1329.                         $item .= "<textarea type='text' id='$name' name='$name' $aria_required>" . esc_html( $field['value'] ) . '</textarea>';
  1330.                 } else {
  1331.                         $item .= "<input type='text' class='text' id='$name' name='$name' value='" . esc_attr( $field['value'] ) . "' $aria_required />";
  1332.                 }
  1333.                 if ( !empty( $field['helps'] ) )
  1334.                         $item .= "<p class='help'>" . join( "</p>\n<p class='help'>", array_unique( (array) $field['helps'] ) ) . '</p>';
  1335.                 $item .= "</td>\n\t\t</tr>\n";
  1336.  
  1337.                 $extra_rows = array();
  1338.  
  1339.                 if ( !empty( $field['errors'] ) )
  1340.                         foreach ( array_unique( (array) $field['errors'] ) as $error )
  1341.                                 $extra_rows['error'][] = $error;
  1342.  
  1343.                 if ( !empty( $field['extra_rows'] ) )
  1344.                         foreach ( $field['extra_rows'] as $class => $rows )
  1345.                                 foreach ( (array) $rows as $html )
  1346.                                         $extra_rows[$class][] = $html;
  1347.  
  1348.                 foreach ( $extra_rows as $class => $rows )
  1349.                         foreach ( $rows as $html )
  1350.                                 $item .= "\t\t<tr><td></td><td class='$class'>$html</td></tr>\n";
  1351.         }
  1352.  
  1353.         if ( !empty( $form_fields['_final'] ) )
  1354.                 $item .= "\t\t<tr class='final'><td colspan='2'>{$form_fields['_final']}</td></tr>\n";
  1355.         $item .= "\t</tbody>\n";
  1356.         $item .= "\t</table>\n";
  1357.  
  1358.         foreach ( $hidden_fields as $name => $value )
  1359.                 $item .= "\t<input type='hidden' name='$name' id='$name' value='" . esc_attr( $value ) . "' />\n";
  1360.  
  1361.         if ( $post->post_parent < 1 && isset( $_REQUEST['post_id'] ) ) {
  1362.                 $parent = (int) $_REQUEST['post_id'];
  1363.                 $parent_name = "attachments[$attachment_id][post_parent]";
  1364.                 $item .= "\t<input type='hidden' name='$parent_name' id='$parent_name' value='$parent' />\n";
  1365.         }
  1366.  
  1367.         return $item;
  1368. }
  1369.  
  1370. /**
  1371.  * {@internal Missing Short Description}}
  1372.  *
  1373.  * @since unknown
  1374.  */
  1375. function media_upload_header() {
  1376.         ?>
  1377.         <script type="text/javascript">post_id = <?php echo intval($_REQUEST['post_id']); ?>;</script>
  1378.         <div id="media-upload-header">
  1379.         <?php the_media_upload_tabs(); ?>
  1380.         </div>
  1381.         <?php
  1382. }
  1383.  
  1384. /**
  1385.  * {@internal Missing Short Description}}
  1386.  *
  1387.  * @since unknown
  1388.  *
  1389.  * @param unknown_type $errors
  1390.  */
  1391. function media_upload_form( $errors = null ) {
  1392.         global $type, $tab;
  1393.  
  1394.         $flash_action_url = admin_url('async-upload.php');
  1395.  
  1396.         // If Mac and mod_security, no Flash. :(
  1397.         $flash = true;
  1398.         if ( false !== stripos($_SERVER['HTTP_USER_AGENT'], 'mac') && apache_mod_loaded('mod_security') )
  1399.                 $flash = false;
  1400.  
  1401.         $flash = apply_filters('flash_uploader', $flash);
  1402.         $post_id = isset($_REQUEST['post_id']) ? intval($_REQUEST['post_id']) : 0;
  1403.  
  1404.         $upload_size_unit = $max_upload_size =  wp_max_upload_size();
  1405.         $sizes = array( 'KB', 'MB', 'GB' );
  1406.         for ( $u = -1; $upload_size_unit > 1024 && $u < count( $sizes ) - 1; $u++ )
  1407.                 $upload_size_unit /= 1024;
  1408.         if ( $u < 0 ) {
  1409.                 $upload_size_unit = 0;
  1410.                 $u = 0;
  1411.         } else {
  1412.                 $upload_size_unit = (int) $upload_size_unit;
  1413.         }
  1414. ?>
  1415. <script type="text/javascript">
  1416. //<![CDATA[
  1417. var uploaderMode = 0;
  1418. jQuery(document).ready(function($){
  1419.         uploaderMode = getUserSetting('uploader');
  1420.         $('.upload-html-bypass a').click(function(){deleteUserSetting('uploader');uploaderMode=0;swfuploadPreLoad();return false;});
  1421.         $('.upload-flash-bypass a').click(function(){setUserSetting('uploader', '1');uploaderMode=1;swfuploadPreLoad();return false;});
  1422. });
  1423. //]]>
  1424. </script>
  1425. <div id="media-upload-notice">
  1426. <?php if (isset($errors['upload_notice']) ) { ?>
  1427.         <?php echo $errors['upload_notice']; ?>
  1428. <?php } ?>
  1429. </div>
  1430. <div id="media-upload-error">
  1431. <?php if (isset($errors['upload_error']) && is_wp_error($errors['upload_error'])) { ?>
  1432.         <?php echo $errors['upload_error']->get_error_message(); ?>
  1433. <?php } ?>
  1434. </div>
  1435. <?php
  1436. // Check quota for this blog if multisite
  1437. if ( is_multisite() && !is_upload_space_available() ) {
  1438.         echo '<p>' . sprintf( __( 'Sorry, you have filled your storage quota (%s MB).' ), get_space_allowed() ) . '</p>';
  1439.         return;
  1440. }
  1441.  
  1442. do_action('pre-upload-ui');
  1443.  
  1444. if ( $flash ) : ?>
  1445. <script type="text/javascript">
  1446. //<![CDATA[
  1447. var swfu;
  1448. SWFUpload.onload = function() {
  1449.         var settings = {
  1450.                         button_text: '<span class="button"><?php _e('Select Files'); ?><\/span>',
  1451.                         button_text_style: '.button { text-align: center; font-weight: bold; font-family:"Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size: 11px; text-shadow: 0 1px 0 #FFFFFF; color:#464646; }',
  1452.                         button_height: "23",
  1453.                         button_width: "132",
  1454.                         button_text_top_padding: 3,
  1455.                         button_image_url: '<?php echo includes_url('images/upload.png?ver=20100531'); ?>',
  1456.                         button_placeholder_id: "flash-browse-button",
  1457.                         upload_url : "<?php echo esc_attr( $flash_action_url ); ?>",
  1458.                         flash_url : "<?php echo includes_url('js/swfupload/swfupload.swf'); ?>",
  1459.                         file_post_name: "async-upload",
  1460.                         file_types: "<?php echo apply_filters('upload_file_glob', '*.*'); ?>",
  1461.                         post_params : {
  1462.                                 "post_id" : "<?php echo $post_id; ?>",
  1463.                                 "auth_cookie" : "<?php echo (is_ssl() ? $_COOKIE[SECURE_AUTH_COOKIE] : $_COOKIE[AUTH_COOKIE]); ?>",
  1464.                                 "logged_in_cookie": "<?php echo $_COOKIE[LOGGED_IN_COOKIE]; ?>",
  1465.                                 "_wpnonce" : "<?php echo wp_create_nonce('media-form'); ?>",
  1466.                                 "type" : "<?php echo $type; ?>",
  1467.                                 "tab" : "<?php echo $tab; ?>",
  1468.                                 "short" : "1"
  1469.                         },
  1470.                         file_size_limit : "<?php echo $max_upload_size; ?>b",
  1471.                         file_dialog_start_handler : fileDialogStart,
  1472.                         file_queued_handler : fileQueued,
  1473.                         upload_start_handler : uploadStart,
  1474.                         upload_progress_handler : uploadProgress,
  1475.                         upload_error_handler : uploadError,
  1476.                         upload_success_handler : uploadSuccess,
  1477.                         upload_complete_handler : uploadComplete,
  1478.                         file_queue_error_handler : fileQueueError,
  1479.                         file_dialog_complete_handler : fileDialogComplete,
  1480.                         swfupload_pre_load_handler: swfuploadPreLoad,
  1481.                         swfupload_load_failed_handler: swfuploadLoadFailed,
  1482.                         custom_settings : {
  1483.                                 degraded_element_id : "html-upload-ui", // id of the element displayed when swfupload is unavailable
  1484.                                 swfupload_element_id : "flash-upload-ui" // id of the element displayed when swfupload is available
  1485.                         },
  1486.                         debug: false
  1487.                 };
  1488.                 swfu = new SWFUpload(settings);
  1489. };
  1490. //]]>
  1491. </script>
  1492.  
  1493. <div id="flash-upload-ui" class="hide-if-no-js">
  1494. <?php do_action('pre-flash-upload-ui'); ?>
  1495.  
  1496.         <div>
  1497.         <?php _e( 'Choose files to upload' ); ?>
  1498.         <div id="flash-browse-button"></div>
  1499.         <span><input id="cancel-upload" disabled="disabled" onclick="cancelUpload()" type="button" value="<?php esc_attr_e('Cancel Upload'); ?>" class="button" /></span>
  1500.         </div>
  1501.         <p class="media-upload-size"><?php printf( __( 'Maximum upload file size: %d%s' ), $upload_size_unit, $sizes[$u] ); ?></p>
  1502. <?php do_action('post-flash-upload-ui'); ?>
  1503.         <p class="howto"><?php _e('After a file has been uploaded, you can add titles and descriptions.'); ?></p>
  1504. </div>
  1505. <?php endif; // $flash ?>
  1506.  
  1507. <div id="html-upload-ui">
  1508. <?php do_action('pre-html-upload-ui'); ?>
  1509.         <p id="async-upload-wrap">
  1510.         <label class="screen-reader-text" for="async-upload"><?php _e('Upload'); ?></label>
  1511.         <input type="file" name="async-upload" id="async-upload" /> <input type="submit" class="button" name="html-upload" value="<?php esc_attr_e('Upload'); ?>" /> <a href="#" onclick="try{top.tb_remove();}catch(e){}; return false;"><?php _e('Cancel'); ?></a>
  1512.         </p>
  1513.         <div class="clear"></div>
  1514.         <p class="media-upload-size"><?php printf( __( 'Maximum upload file size: %d%s' ), $upload_size_unit, $sizes[$u] ); ?></p>
  1515.         <?php if ( is_lighttpd_before_150() ): ?>
  1516.         <p><?php _e('If you want to use all capabilities of the uploader, like uploading multiple files at once, please upgrade to lighttpd 1.5.'); ?></p>
  1517.         <?php endif;?>
  1518. <?php do_action('post-html-upload-ui', $flash); ?>
  1519. </div>
  1520. <?php do_action('post-upload-ui'); ?>
  1521. <?php
  1522. }
  1523.  
  1524. /**
  1525.  * {@internal Missing Short Description}}
  1526.  *
  1527.  * @since unknown
  1528.  *
  1529.  * @param unknown_type $type
  1530.  * @param unknown_type $errors
  1531.  * @param unknown_type $id
  1532.  */
  1533. function media_upload_type_form($type = 'file', $errors = null, $id = null) {
  1534.         media_upload_header();
  1535.  
  1536.         $post_id = isset( $_REQUEST['post_id'] )? intval( $_REQUEST['post_id'] ) : 0;
  1537.  
  1538.         $form_action_url = admin_url("media-upload.php?type=$type&tab=type&post_id=$post_id");
  1539.         $form_action_url = apply_filters('media_upload_form_url', $form_action_url, $type);
  1540. ?>
  1541.  
  1542. <form enctype="multipart/form-data" method="post" action="<?php echo esc_attr($form_action_url); ?>" class="media-upload-form type-form validate" id="<?php echo $type; ?>-form">
  1543. <input type="submit" class="hidden" name="save" value="" />
  1544. <input type="hidden" name="post_id" id="post_id" value="<?php echo (int) $post_id; ?>" />
  1545. <?php wp_nonce_field('media-form'); ?>
  1546.  
  1547. <h3 class="media-title"><?php _e('Add media files from your computer'); ?></h3>
  1548.  
  1549. <?php media_upload_form( $errors ); ?>
  1550.  
  1551. <script type="text/javascript">
  1552. //<![CDATA[
  1553. jQuery(function($){
  1554.         var preloaded = $(".media-item.preloaded");
  1555.         if ( preloaded.length > 0 ) {
  1556.                 preloaded.each(function(){prepareMediaItem({id:this.id.replace(/[^0-9]/g, '')},'');});
  1557.         }
  1558.         updateMediaForm();
  1559. });
  1560. //]]>
  1561. </script>
  1562. <div id="media-items">
  1563. <?php
  1564. if ( $id ) {
  1565.         if ( !is_wp_error($id) ) {
  1566.                 add_filter('attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2);
  1567.                 echo get_media_items( $id, $errors );
  1568.         } else {
  1569.                 echo '<div id="media-upload-error">'.esc_html($id->get_error_message()).'</div>';
  1570.                 exit;
  1571.         }
  1572. }
  1573. ?>
  1574. </div>
  1575. <p class="savebutton ml-submit">
  1576. <input type="submit" class="button" name="save" value="<?php esc_attr_e( 'Save all changes' ); ?>" />
  1577. </p>
  1578. </form>
  1579. <?php
  1580. }
  1581.  
  1582. /**
  1583.  * {@internal Missing Short Description}}
  1584.  *
  1585.  * @since unknown
  1586.  *
  1587.  * @param unknown_type $type
  1588.  * @param unknown_type $errors
  1589.  * @param unknown_type $id
  1590.  */
  1591. function media_upload_type_url_form($type = 'file', $errors = null, $id = null) {
  1592.         media_upload_header();
  1593.  
  1594.         $post_id = intval($_REQUEST['post_id']);
  1595.  
  1596.         $form_action_url = admin_url("media-upload.php?type=$type&tab=type&post_id=$post_id");
  1597.         $form_action_url = apply_filters('media_upload_form_url', $form_action_url, $type);
  1598.  
  1599.         $callback = "type_url_form_$type";
  1600. ?>
  1601.  
  1602. <form enctype="multipart/form-data" method="post" action="<?php echo esc_attr($form_action_url); ?>" class="media-upload-form type-form validate" id="<?php echo $type; ?>-form">
  1603. <input type="hidden" name="post_id" id="post_id" value="<?php echo (int) $post_id; ?>" />
  1604. <?php wp_nonce_field('media-form'); ?>
  1605.  
  1606. <?php if ( is_callable($callback) ) { ?>
  1607.  
  1608. <h3 class="media-title"><?php _e('Add media file from URL'); ?></h3>
  1609.  
  1610. <script type="text/javascript">
  1611. //<![CDATA[
  1612. var addExtImage = {
  1613.  
  1614.         width : '',
  1615.         height : '',
  1616.         align : 'alignnone',
  1617.  
  1618.         insert : function() {
  1619.                 var t = this, html, f = document.forms[0], cls, title = '', alt = '', caption = '';
  1620.  
  1621.                 if ( '' == f.src.value || '' == t.width )
  1622.                         return false;
  1623.  
  1624.                 if ( f.title.value ) {
  1625.                         title = f.title.value.replace(/'/g, '&#039;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
  1626.                         title = ' title="'+title+'"';
  1627.                 }
  1628.  
  1629.                 if ( f.alt.value )
  1630.                         alt = f.alt.value.replace(/'/g, '&#039;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
  1631.  
  1632. <?php if ( ! apply_filters( 'disable_captions', '' ) ) { ?>
  1633.                 if ( f.caption.value )
  1634.                         caption = f.caption.value.replace(/'/g, '&#039;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
  1635. <?php } ?>
  1636.  
  1637.                 cls = caption ? '' : ' class="'+t.align+'"';
  1638.  
  1639.                 html = '<img alt="'+alt+'" src="'+f.src.value+'"'+title+cls+' width="'+t.width+'" height="'+t.height+'" />';
  1640.  
  1641.                 if ( f.url.value )
  1642.                         html = '<a href="'+f.url.value+'">'+html+'</a>';
  1643.  
  1644.                 if ( caption )
  1645.                         html = '[caption id="" align="'+t.align+'" width="'+t.width+'" caption="'+caption+'"]'+html+'[/caption]';
  1646.  
  1647.                 var win = window.dialogArguments || opener || parent || top;
  1648.                 win.send_to_editor(html);
  1649.                 return false;
  1650.         },
  1651.  
  1652.         resetImageData : function() {
  1653.                 var t = addExtImage;
  1654.  
  1655.                 t.width = t.height = '';
  1656.                 document.getElementById('go_button').style.color = '#bbb';
  1657.                 if ( ! document.forms[0].src.value )
  1658.                         document.getElementById('status_img').innerHTML = '*';
  1659.                 else document.getElementById('status_img').innerHTML = '<img src="<?php echo esc_url( admin_url( 'images/no.png' ) ); ?>" alt="" />';
  1660.         },
  1661.  
  1662.         updateImageData : function() {
  1663.                 var t = addExtImage;
  1664.  
  1665.                 t.width = t.preloadImg.width;
  1666.                 t.height = t.preloadImg.height;
  1667.                 document.getElementById('go_button').style.color = '#333';
  1668.                 document.getElementById('status_img').innerHTML = '<img src="<?php echo esc_url( admin_url( 'images/yes.png' ) ); ?>" alt="" />';
  1669.         },
  1670.  
  1671.         getImageData : function() {
  1672.                 var t = addExtImage, src = document.forms[0].src.value;
  1673.  
  1674.                 if ( ! src ) {
  1675.                         t.resetImageData();
  1676.                         return false;
  1677.                 }
  1678.                 document.getElementById('status_img').innerHTML = '<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />';
  1679.                 t.preloadImg = new Image();
  1680.                 t.preloadImg.onload = t.updateImageData;
  1681.                 t.preloadImg.onerror = t.resetImageData;
  1682.                 t.preloadImg.src = src;
  1683.         }
  1684. }
  1685. //]]>
  1686. </script>
  1687.  
  1688. <div id="media-items">
  1689. <div class="media-item media-blank">
  1690. <?php echo apply_filters($callback, call_user_func($callback)); ?>
  1691. </div>
  1692. </div>
  1693. </form>
  1694. <?php
  1695.         } else {
  1696.                 wp_die( __('Unknown action.') );
  1697.         }
  1698. }
  1699.  
  1700. /**
  1701.  * {@internal Missing Short Description}}
  1702.  *
  1703.  * @since unknown
  1704.  *
  1705.  * @param unknown_type $errors
  1706.  */
  1707. function media_upload_gallery_form($errors) {
  1708.         global $redir_tab, $type;
  1709.  
  1710.         $redir_tab = 'gallery';
  1711.         media_upload_header();
  1712.  
  1713.         $post_id = intval($_REQUEST['post_id']);
  1714.         $form_action_url = admin_url("media-upload.php?type=$type&tab=gallery&post_id=$post_id");
  1715.         $form_action_url = apply_filters('media_upload_form_url', $form_action_url, $type);
  1716. ?>
  1717.  
  1718. <script type="text/javascript">
  1719. <!--
  1720. jQuery(function($){
  1721.         var preloaded = $(".media-item.preloaded");
  1722.         if ( preloaded.length > 0 ) {
  1723.                 preloaded.each(function(){prepareMediaItem({id:this.id.replace(/[^0-9]/g, '')},'');});
  1724.                 updateMediaForm();
  1725.         }
  1726. });
  1727. -->
  1728. </script>
  1729. <div id="sort-buttons" class="hide-if-no-js">
  1730. <span>
  1731. <?php _e('All Tabs:'); ?>
  1732. <a href="#" id="showall"><?php _e('Show'); ?></a>
  1733. <a href="#" id="hideall" style="display:none;"><?php _e('Hide'); ?></a>
  1734. </span>
  1735. <?php _e('Sort Order:'); ?>
  1736. <a href="#" id="asc"><?php _e('Ascending'); ?></a> |
  1737. <a href="#" id="desc"><?php _e('Descending'); ?></a> |
  1738. <a href="#" id="clear"><?php _ex('Clear', 'verb'); ?></a>
  1739. </div>
  1740. <form enctype="multipart/form-data" method="post" action="<?php echo esc_attr($form_action_url); ?>" class="media-upload-form validate" id="gallery-form">
  1741. <?php wp_nonce_field('media-form'); ?>
  1742. <?php //media_upload_form( $errors ); ?>
  1743. <table class="widefat" cellspacing="0">
  1744. <thead><tr>
  1745. <th><?php _e('Media'); ?></th>
  1746. <th class="order-head"><?php _e('Order'); ?></th>
  1747. <th class="actions-head"><?php _e('Actions'); ?></th>
  1748. </tr></thead>
  1749. </table>
  1750. <div id="media-items">
  1751. <?php add_filter('attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2); ?>
  1752. <?php echo get_media_items($post_id, $errors); ?>
  1753. </div>
  1754.  
  1755. <p class="ml-submit">
  1756. <input type="submit" class="button savebutton" style="display:none;" name="save" id="save-all" value="<?php esc_attr_e( 'Save all changes' ); ?>" />
  1757. <input type="hidden" name="post_id" id="post_id" value="<?php echo (int) $post_id; ?>" />
  1758. <input type="hidden" name="type" value="<?php echo esc_attr( $GLOBALS['type'] ); ?>" />
  1759. <input type="hidden" name="tab" value="<?php echo esc_attr( $GLOBALS['tab'] ); ?>" />
  1760. </p>
  1761.  
  1762. <div id="gallery-settings" style="display:none;">
  1763. <div class="title"><?php _e('Gallery Settings'); ?></div>
  1764. <table id="basic" class="describe"><tbody>
  1765.         <tr>
  1766.         <th scope="row" class="label">
  1767.                 <label>
  1768.                 <span class="alignleft"><?php _e('Link thumbnails to:'); ?></span>
  1769.                 </label>
  1770.         </th>
  1771.         <td class="field">
  1772.                 <input type="radio" name="linkto" id="linkto-file" value="file" />
  1773.                 <label for="linkto-file" class="radio"><?php _e('Image File'); ?></label>
  1774.  
  1775.                 <input type="radio" checked="checked" name="linkto" id="linkto-post" value="post" />
  1776.                 <label for="linkto-post" class="radio"><?php _e('Attachment Page'); ?></label>
  1777.         </td>
  1778.         </tr>
  1779.  
  1780.         <tr>
  1781.         <th scope="row" class="label" style="width:180px;height:10px">
  1782.                 <label>
  1783.                 <span class="alignleft"><?php _e('Order images by:'); ?></span>
  1784.                 </label>
  1785.         </th>
  1786.         <td class="field">
  1787.                 <select id="orderby" name="orderby">
  1788.                         <option value="menu_order" selected="selected"><?php _e('Menu order'); ?></option>
  1789.                         <option value="title"><?php _e('Title'); ?></option>
  1790.                         <option value="ID"><?php _e('Date/Time'); ?></option>
  1791.                         <option value="rand"><?php _e('Random'); ?></option>
  1792.                 </select>
  1793.         </td>
  1794.         </tr>
  1795.  
  1796.         <tr>
  1797.         <th scope="row" class="label">
  1798.                 <label>
  1799.                 <span class="alignleft"><?php _e('Order:'); ?></span>
  1800.                 </label>
  1801.         </th>
  1802.         <td class="field">
  1803.                 <input type="radio" checked="checked" name="order" id="order-asc" value="asc" />
  1804.                 <label for="order-asc" class="radio"><?php _e('Ascending'); ?></label>
  1805.  
  1806.                 <input type="radio" name="order" id="order-desc" value="desc" />
  1807.                 <label for="order-desc" class="radio"><?php _e('Descending'); ?></label>
  1808.         </td>
  1809.         </tr>
  1810.  
  1811.         <tr>
  1812.         <th scope="row" class="label" style="height:10px">
  1813.                 <label>
  1814.                 <span class="alignleft"><?php _e('Size'); ?></span>
  1815.                 </label>
  1816.         </th>
  1817.         <td class="field" style="height:10px">
  1818.                 <select id="size" name="size">
  1819.                         <option value="thumbnail" selected="selected"><?php _e('Thumbnail'); ?></option>
  1820.                         <option value="medium"><?php _e('Medium'); ?></option>
  1821.                         <option value="large"><?php _e('Large'); ?></option>
  1822.                         <option value="full"><?php _e('Full Size'); ?></option>
  1823.                 </select>
  1824.         </td>
  1825.         </tr>
  1826.  
  1827.         <tr>
  1828.         <th scope="row" class="label">
  1829.                 <label>
  1830.                 <span class="alignleft"><?php _e('Gallery columns:'); ?></span>
  1831.                 </label>
  1832.         </th>
  1833.         <td class="field">
  1834.                 <select id="columns" name="columns">
  1835.                         <option value="1">1</option>
  1836.                         <option value="2">2</option>
  1837.                         <option value="3" selected="selected">3</option>
  1838.                         <option value="4">4</option>
  1839.                         <option value="5">5</option>
  1840.                         <option value="6">6</option>
  1841.                         <option value="7">7</option>
  1842.                         <option value="8">8</option>
  1843.                         <option value="9">9</option>
  1844.                 </select> <span style="font-weight:bold"><?php _e('Exclude:'); ?></span> <input type="text" id="exclude" name="exclude" style="width:90px" value=""/>
  1845.                 <span style="font-weight:bold"><?php _e('Include:'); ?></span> <input type="text" id="include" name="include" style="width:90px" value=""/>
  1846.         </td>
  1847.         </tr>
  1848. </tbody></table>
  1849.  
  1850. <p class="ml-submit">
  1851. <input type="button" class="button" style="display:none;" onMouseDown="wpgallery.update();" name="insert-gallery" id="insert-gallery" value="<?php esc_attr_e( 'Insert gallery' ); ?>" />
  1852. <input type="button" class="button" style="display:none;" onMouseDown="wpgallery.update();" name="update-gallery" id="update-gallery" value="<?php esc_attr_e( 'Update gallery settings' ); ?>" />
  1853. </p>
  1854. </div>
  1855. </form>
  1856. <?php
  1857. }
  1858.  
  1859. /**
  1860.  * {@internal Missing Short Description}}
  1861.  *
  1862.  * @since unknown
  1863.  *
  1864.  * @param unknown_type $errors
  1865.  */
  1866. function media_upload_library_form($errors) {
  1867.         global $wpdb, $wp_query, $wp_locale, $type, $tab, $post_mime_types;
  1868.  
  1869.         media_upload_header();
  1870.  
  1871.         $post_id = intval($_REQUEST['post_id']);
  1872.  
  1873.         $form_action_url = admin_url("media-upload.php?type=$type&tab=library&post_id=$post_id");
  1874.         $form_action_url = apply_filters('media_upload_form_url', $form_action_url, $type);
  1875.  
  1876.         $_GET['paged'] = isset( $_GET['paged'] ) ? intval($_GET['paged']) : 0;
  1877.         if ( $_GET['paged'] < 1 )
  1878.                 $_GET['paged'] = 1;
  1879.         $start = ( $_GET['paged'] - 1 ) * 10;
  1880.         if ( $start < 1 )
  1881.                 $start = 0;
  1882.         add_filter( 'post_limits', create_function( '$a', "return 'LIMIT $start, 10';" ) );
  1883.  
  1884.         list($post_mime_types, $avail_post_mime_types) = wp_edit_attachments_query();
  1885.  
  1886. ?>
  1887.  
  1888. <form id="filter" action="" method="get">
  1889. <input type="hidden" name="type" value="<?php echo esc_attr( $type ); ?>" />
  1890. <input type="hidden" name="tab" value="<?php echo esc_attr( $tab ); ?>" />
  1891. <input type="hidden" name="post_id" value="<?php echo (int) $post_id; ?>" />
  1892. <input type="hidden" name="post_mime_type" value="<?php echo isset( $_GET['post_mime_type'] ) ? esc_attr( $_GET['post_mime_type'] ) : ''; ?>" />
  1893.  
  1894. <p id="media-search" class="search-box">
  1895.         <label class="screen-reader-text" for="media-search-input"><?php _e('Search Media');?>:</label>
  1896.         <input type="text" id="media-search-input" name="s" value="<?php the_search_query(); ?>" />
  1897.         <input type="submit" value="<?php esc_attr_e( 'Search Media' ); ?>" class="button" />
  1898. </p>
  1899.  
  1900. <ul class="subsubsub">
  1901. <?php
  1902. $type_links = array();
  1903. $_num_posts = (array) wp_count_attachments();
  1904. $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts));
  1905. foreach ( $matches as $_type => $reals )
  1906.         foreach ( $reals as $real )
  1907.                 if ( isset($num_posts[$_type]) )
  1908.                         $num_posts[$_type] += $_num_posts[$real];
  1909.                 else
  1910.                         $num_posts[$_type] = $_num_posts[$real];
  1911. // If available type specified by media button clicked, filter by that type
  1912. if ( empty($_GET['post_mime_type']) && !empty($num_posts[$type]) ) {
  1913.         $_GET['post_mime_type'] = $type;
  1914.         list($post_mime_types, $avail_post_mime_types) = wp_edit_attachments_query();
  1915. }
  1916. if ( empty($_GET['post_mime_type']) || $_GET['post_mime_type'] == 'all' )
  1917.         $class = ' class="current"';
  1918. else
  1919.         $class = '';
  1920. $type_links[] = "<li><a href='" . esc_url(add_query_arg(array('post_mime_type'=>'all', 'paged'=>false, 'm'=>false))) . "'$class>".__('All Types')."</a>";
  1921. foreach ( $post_mime_types as $mime_type => $label ) {
  1922.         $class = '';
  1923.  
  1924.         if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) )
  1925.                 continue;
  1926.  
  1927.         if ( isset($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) )
  1928.                 $class = ' class="current"';
  1929.  
  1930.         $type_links[] = "<li><a href='" . esc_url(add_query_arg(array('post_mime_type'=>$mime_type, 'paged'=>false))) . "'$class>" . sprintf(_n($label[2][0], $label[2][1], $num_posts[$mime_type]), "<span id='$mime_type-counter'>" . number_format_i18n( $num_posts[$mime_type] ) . '</span>') . '</a>';
  1931. }
  1932. echo implode(' | </li>', $type_links) . '</li>';
  1933. unset($type_links);
  1934. ?>
  1935. </ul>
  1936.  
  1937. <div class="tablenav">
  1938.  
  1939. <?php
  1940. $page_links = paginate_links( array(
  1941.         'base' => add_query_arg( 'paged', '%#%' ),
  1942.         'format' => '',
  1943.         'prev_text' => __('&laquo;'),
  1944.         'next_text' => __('&raquo;'),
  1945.         'total' => ceil($wp_query->found_posts / 10),
  1946.         'current' => $_GET['paged']
  1947. ));
  1948.  
  1949. if ( $page_links )
  1950.         echo "<div class='tablenav-pages'>$page_links</div>";
  1951. ?>
  1952.  
  1953. <div class="alignleft actions">
  1954. <?php
  1955.  
  1956. $arc_query = "SELECT DISTINCT YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM $wpdb->posts WHERE post_type = 'attachment' ORDER BY post_date DESC";
  1957.  
  1958. $arc_result = $wpdb->get_results( $arc_query );
  1959.  
  1960. $month_count = count($arc_result);
  1961.  
  1962. if ( $month_count && !( 1 == $month_count && 0 == $arc_result[0]->mmonth ) ) { ?>
  1963. <select name='m'>
  1964. <option<?php selected( @$_GET['m'], 0 ); ?> value='0'><?php _e('Show all dates'); ?></option>
  1965. <?php
  1966. foreach ($arc_result as $arc_row) {
  1967.         if ( $arc_row->yyear == 0 )
  1968.                 continue;
  1969.         $arc_row->mmonth = zeroise( $arc_row->mmonth, 2 );
  1970.  
  1971.         if ( isset($_GET['m']) && ( $arc_row->yyear . $arc_row->mmonth == $_GET['m'] ) )
  1972.                 $default = ' selected="selected"';
  1973.         else
  1974.                 $default = '';
  1975.  
  1976.         echo "<option$default value='" . esc_attr( $arc_row->yyear . $arc_row->mmonth ) . "'>";
  1977.         echo esc_html( $wp_locale->get_month($arc_row->mmonth) . " $arc_row->yyear" );
  1978.         echo "</option>\n";
  1979. }
  1980. ?>
  1981. </select>
  1982. <?php } ?>
  1983.  
  1984. <input type="submit" id="post-query-submit" value="<?php echo esc_attr( __( 'Filter &#187;' ) ); ?>" class="button-secondary" />
  1985.  
  1986. </div>
  1987.  
  1988. <br class="clear" />
  1989. </div>
  1990. </form>
  1991.  
  1992. <form enctype="multipart/form-data" method="post" action="<?php echo esc_attr($form_action_url); ?>" class="media-upload-form validate" id="library-form">
  1993.  
  1994. <?php wp_nonce_field('media-form'); ?>
  1995. <?php //media_upload_form( $errors ); ?>
  1996.  
  1997. <script type="text/javascript">
  1998. <!--
  1999. jQuery(function($){
  2000.         var preloaded = $(".media-item.preloaded");
  2001.         if ( preloaded.length > 0 ) {
  2002.                 preloaded.each(function(){prepareMediaItem({id:this.id.replace(/[^0-9]/g, '')},'');});
  2003.                 updateMediaForm();
  2004.         }
  2005. });
  2006. -->
  2007. </script>
  2008.  
  2009. <div id="media-items">
  2010. <?php add_filter('attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2); ?>
  2011. <?php echo get_media_items(null, $errors); ?>
  2012. </div>
  2013. <p class="ml-submit">
  2014. <input type="submit" class="button savebutton" name="save" value="<?php esc_attr_e( 'Save all changes' ); ?>" />
  2015. <input type="hidden" name="post_id" id="post_id" value="<?php echo (int) $post_id; ?>" />
  2016. </p>
  2017. </form>
  2018. <?php
  2019. }
  2020.  
  2021. /**
  2022.  * {@internal Missing Short Description}}
  2023.  *
  2024.  * @since unknown
  2025.  *
  2026.  * @return unknown
  2027.  */
  2028. function type_url_form_image() {
  2029.         if ( !apply_filters( 'disable_captions', '' ) ) {
  2030.                 $caption = '
  2031.                 <tr>
  2032.                         <th valign="top" scope="row" class="label">
  2033.                                 <span class="alignleft"><label for="caption">' . __('Image Caption') . '</label></span>
  2034.                         </th>
  2035.                         <td class="field"><input id="caption" name="caption" value="" type="text" /></td>
  2036.                 </tr>
  2037. ';
  2038.         } else {
  2039.                 $caption = '';
  2040.         }
  2041.  
  2042.         $default_align = get_option('image_default_align');
  2043.         if ( empty($default_align) )
  2044.                 $default_align = 'none';
  2045.  
  2046.         return '
  2047.         <h4 class="media-sub-title">' . __('Insert an image from another web site') . '</h4>
  2048.         <table class="describe"><tbody>
  2049.                 <tr>
  2050.                         <th valign="top" scope="row" class="label" style="width:130px;">
  2051.                                 <span class="alignleft"><label for="src">' . __('Image URL') . '</label></span>
  2052.                                 <span class="alignright"><abbr id="status_img" title="required" class="required">*</abbr></span>
  2053.                         </th>
  2054.                         <td class="field"><input id="src" name="src" value="" type="text" aria-required="true" onblur="addExtImage.getImageData()" /></td>
  2055.                 </tr>
  2056.  
  2057.                 <tr>
  2058.                         <th valign="top" scope="row" class="label">
  2059.                                 <span class="alignleft"><label for="title">' . __('Image Title') . '</label></span>
  2060.                                 <span class="alignright"><abbr title="required" class="required">*</abbr></span>
  2061.                         </th>
  2062.                         <td class="field"><input id="title" name="title" value="" type="text" aria-required="true" /></td>
  2063.                 </tr>
  2064.  
  2065.                 <tr>
  2066.                         <th valign="top" scope="row" class="label">
  2067.                                 <span class="alignleft"><label for="alt">' . __('Alternate Text') . '</label></span>
  2068.                         </th>
  2069.                         <td class="field"><input id="alt" name="alt" value="" type="text" aria-required="true" />
  2070.                         <p class="help">' . __('Alt text for the image, e.g. &#8220;The Mona Lisa&#8221;') . '</p></td>
  2071.                 </tr>
  2072.                 ' . $caption . '
  2073.                 <tr class="align">
  2074.                         <th valign="top" scope="row" class="label"><p><label for="align">' . __('Alignment') . '</label></p></th>
  2075.                         <td class="field">
  2076.                                 <input name="align" id="align-none" value="none" onclick="addExtImage.align=\'align\'+this.value" type="radio"' . ($default_align == 'none' ? ' checked="checked"' : '').' />
  2077.                                 <label for="align-none" class="align image-align-none-label">' . __('None') . '</label>
  2078.                                 <input name="align" id="align-left" value="left" onclick="addExtImage.align=\'align\'+this.value" type="radio"' . ($default_align == 'left' ? ' checked="checked"' : '').' />
  2079.                                 <label for="align-left" class="align image-align-left-label">' . __('Left') . '</label>
  2080.                                 <input name="align" id="align-center" value="center" onclick="addExtImage.align=\'align\'+this.value" type="radio"' . ($default_align == 'center' ? ' checked="checked"' : '').' />
  2081.                                 <label for="align-center" class="align image-align-center-label">' . __('Center') . '</label>
  2082.                                 <input name="align" id="align-right" value="right" onclick="addExtImage.align=\'align\'+this.value" type="radio"' . ($default_align == 'right' ? ' checked="checked"' : '').' />
  2083.                                 <label for="align-right" class="align image-align-right-label">' . __('Right') . '</label>
  2084.                         </td>
  2085.                 </tr>
  2086.  
  2087.                 <tr>
  2088.                         <th valign="top" scope="row" class="label">
  2089.                                 <span class="alignleft"><label for="url">' . __('Link Image To:') . '</label></span>
  2090.                         </th>
  2091.                         <td class="field"><input id="url" name="url" value="" type="text" /><br />
  2092.  
  2093.                         <button type="button" class="button" value="" onclick="document.forms[0].url.value=null">' . __('None') . '</button>
  2094.                         <button type="button" class="button" value="" onclick="document.forms[0].url.value=document.forms[0].src.value">' . __('Link to image') . '</button>
  2095.                         <p class="help">' . __('Enter a link URL or click above for presets.') . '</p></td>
  2096.                 </tr>
  2097.         ' . _insert_into_post_button('image') . '
  2098.         </tbody></table>
  2099. ';
  2100.  
  2101. }
  2102.  
  2103. /**
  2104.  * {@internal Missing Short Description}}
  2105.  *
  2106.  * @since unknown
  2107.  *
  2108.  * @return unknown
  2109.  */
  2110. function type_url_form_audio() {
  2111.         return '
  2112.         <table class="describe"><tbody>
  2113.                 <tr>
  2114.                         <th valign="top" scope="row" class="label">
  2115.                                 <span class="alignleft"><label for="insertonly[href]">' . __('Audio File URL') . '</label></span>
  2116.                                 <span class="alignright"><abbr title="required" class="required">*</abbr></span>
  2117.                         </th>
  2118.                         <td class="field"><input id="insertonly[href]" name="insertonly[href]" value="" type="text" aria-required="true"></td>
  2119.                 </tr>
  2120.                 <tr>
  2121.                         <th valign="top" scope="row" class="label">
  2122.                                 <span class="alignleft"><label for="insertonly[title]">' . __('Title') . '</label></span>
  2123.                                 <span class="alignright"><abbr title="required" class="required">*</abbr></span>
  2124.                         </th>
  2125.                         <td class="field"><input id="insertonly[title]" name="insertonly[title]" value="" type="text" aria-required="true"></td>
  2126.                 </tr>
  2127.                 <tr><td></td><td class="help">' . __('Link text, e.g. &#8220;Still Alive by Jonathan Coulton&#8221;') . '</td></tr>
  2128.         ' . _insert_into_post_button('audio') . '
  2129.         </tbody></table>
  2130. ';
  2131. }
  2132.  
  2133. /**
  2134.  * {@internal Missing Short Description}}
  2135.  *
  2136.  * @since unknown
  2137.  *
  2138.  * @return unknown
  2139.  */
  2140. function type_url_form_video() {
  2141.         return '
  2142.         <table class="describe"><tbody>
  2143.                 <tr>
  2144.                         <th valign="top" scope="row" class="label">
  2145.                                 <span class="alignleft"><label for="insertonly[href]">' . __('Video URL') . '</label></span>
  2146.                                 <span class="alignright"><abbr title="required" class="required">*</abbr></span>
  2147.                         </th>
  2148.                         <td class="field"><input id="insertonly[href]" name="insertonly[href]" value="" type="text" aria-required="true"></td>
  2149.                 </tr>
  2150.                 <tr>
  2151.                         <th valign="top" scope="row" class="label">
  2152.                                 <span class="alignleft"><label for="insertonly[title]">' . __('Title') . '</label></span>
  2153.                                 <span class="alignright"><abbr title="required" class="required">*</abbr></span>
  2154.                         </th>
  2155.                         <td class="field"><input id="insertonly[title]" name="insertonly[title]" value="" type="text" aria-required="true"></td>
  2156.                 </tr>
  2157.                 <tr><td></td><td class="help">' . __('Link text, e.g. &#8220;Lucy on YouTube&#8221;') . '</td></tr>
  2158.         ' . _insert_into_post_button('video') . '
  2159.         </tbody></table>
  2160. ';
  2161. }
  2162.  
  2163. /**
  2164.  * {@internal Missing Short Description}}
  2165.  *
  2166.  * @since unknown
  2167.  *
  2168.  * @return unknown
  2169.  */
  2170. function type_url_form_file() {
  2171.         return '
  2172.         <table class="describe"><tbody>
  2173.                 <tr>
  2174.                         <th valign="top" scope="row" class="label">
  2175.                                 <span class="alignleft"><label for="insertonly[href]">' . __('URL') . '</label></span>
  2176.                                 <span class="alignright"><abbr title="required" class="required">*</abbr></span>
  2177.                         </th>
  2178.                         <td class="field"><input id="insertonly[href]" name="insertonly[href]" value="" type="text" aria-required="true"></td>
  2179.                 </tr>
  2180.                 <tr>
  2181.                         <th valign="top" scope="row" class="label">
  2182.                                 <span class="alignleft"><label for="insertonly[title]">' . __('Title') . '</label></span>
  2183.                                 <span class="alignright"><abbr title="required" class="required">*</abbr></span>
  2184.                         </th>
  2185.                         <td class="field"><input id="insertonly[title]" name="insertonly[title]" value="" type="text" aria-required="true"></td>
  2186.                 </tr>
  2187.                 <tr><td></td><td class="help">' . __('Link text, e.g. &#8220;Ransom Demands (PDF)&#8221;') . '</td></tr>
  2188.         ' . _insert_into_post_button('file') . '
  2189.         </tbody></table>
  2190. ';
  2191. }
  2192.  
  2193.  
  2194. function _insert_into_post_button($type) {
  2195.         if ( !post_type_supports(get_post_type($_GET['post_id']), 'editor') )
  2196.                 return '';
  2197.  
  2198.         if ( 'image' == $type )
  2199.         return '
  2200.                 <tr>
  2201.                         <td></td>
  2202.                         <td>
  2203.                                 <input type="button" class="button" id="go_button" style="color:#bbb;" onclick="addExtImage.insert()" value="' . esc_attr__('Insert into Post') . '" />
  2204.                         </td>
  2205.                 </tr>
  2206.         ';
  2207.  
  2208.         return '
  2209.                 <tr>
  2210.                         <td></td>
  2211.                         <td>
  2212.                                 <input type="submit" class="button" name="insertonlybutton" value="' . esc_attr__('Insert into Post') . '" />
  2213.                         </td>
  2214.                 </tr>
  2215.         ';
  2216. }
  2217.  
  2218. /**
  2219.  * {@internal Missing Short Description}}
  2220.  *
  2221.  * Support a GET parameter for disabling the flash uploader.
  2222.  *
  2223.  * @since unknown
  2224.  *
  2225.  * @param unknown_type $flash
  2226.  * @return unknown
  2227.  */
  2228. function media_upload_use_flash($flash) {
  2229.         if ( array_key_exists('flash', $_REQUEST) )
  2230.                 $flash = !empty($_REQUEST['flash']);
  2231.         return $flash;
  2232. }
  2233.  
  2234. add_filter('flash_uploader', 'media_upload_use_flash');
  2235.  
  2236. /**
  2237.  * {@internal Missing Short Description}}
  2238.  *
  2239.  * @since unknown
  2240.  */
  2241. function media_upload_flash_bypass() {
  2242.         echo '<p class="upload-flash-bypass">';
  2243.         printf( __('You are using the Flash uploader.  Problems?  Try the <a href="%s">Browser uploader</a> instead.'), esc_url(add_query_arg('flash', 0)) );
  2244.         echo '</p>';
  2245. }
  2246.  
  2247. /**
  2248.  * {@internal Missing Short Description}}
  2249.  *
  2250.  * @since unknown
  2251.  */
  2252. function media_upload_html_bypass($flash = true) {
  2253.         echo '<p class="upload-html-bypass hide-if-no-js">';
  2254.         _e('You are using the Browser uploader.');
  2255.         if ( $flash ) {
  2256.                 // the user manually selected the browser uploader, so let them switch back to Flash
  2257.                 echo ' ';
  2258.                 printf( __('Try the <a href="%s">Flash uploader</a> instead.'), esc_url(add_query_arg('flash', 1)) );
  2259.         }
  2260.         echo "</p>\n";
  2261. }
  2262.  
  2263. add_action('post-flash-upload-ui', 'media_upload_flash_bypass');
  2264. add_action('post-html-upload-ui', 'media_upload_html_bypass');
  2265.  
  2266. /**
  2267.  * {@internal Missing Short Description}}
  2268.  *
  2269.  * Make sure the GET parameter sticks when we submit a form.
  2270.  *
  2271.  * @since unknown
  2272.  *
  2273.  * @param unknown_type $url
  2274.  * @return unknown
  2275.  */
  2276. function media_upload_bypass_url($url) {
  2277.         if ( array_key_exists('flash', $_REQUEST) )
  2278.                 $url = add_query_arg('flash', intval($_REQUEST['flash']));
  2279.         return $url;
  2280. }
  2281.  
  2282. add_filter('media_upload_form_url', 'media_upload_bypass_url');
  2283.  
  2284. add_filter('async_upload_image', 'get_media_item', 10, 2);
  2285. add_filter('async_upload_audio', 'get_media_item', 10, 2);
  2286. add_filter('async_upload_video', 'get_media_item', 10, 2);
  2287. add_filter('async_upload_file', 'get_media_item', 10, 2);
  2288.  
  2289. add_action('media_upload_image', 'media_upload_image');
  2290. add_action('media_upload_audio', 'media_upload_audio');
  2291. add_action('media_upload_video', 'media_upload_video');
  2292. add_action('media_upload_file', 'media_upload_file');
  2293.  
  2294. add_filter('media_upload_gallery', 'media_upload_gallery');
  2295.  
  2296. add_filter('media_upload_library', 'media_upload_library');