web/wp-admin/upload.php
changeset 194 32102edaa81b
parent 136 bde1974c263b
child 204 09a1c134465b
equal deleted inserted replaced
193:2f6f6f7551ca 194:32102edaa81b
     5  * @package WordPress
     5  * @package WordPress
     6  * @subpackage Administration
     6  * @subpackage Administration
     7  */
     7  */
     8 
     8 
     9 /** WordPress Administration Bootstrap */
     9 /** WordPress Administration Bootstrap */
    10 require_once('admin.php');
    10 require_once( './admin.php' );
       
    11 
       
    12 if ( !current_user_can('upload_files') )
       
    13 	wp_die( __( 'You do not have permission to upload files.' ) );
       
    14 
       
    15 $wp_list_table = _get_list_table('WP_Media_List_Table');
       
    16 $pagenum = $wp_list_table->get_pagenum();
       
    17 
       
    18 // Handle bulk actions
       
    19 $doaction = $wp_list_table->current_action();
       
    20 
       
    21 if ( $doaction ) {
       
    22 	check_admin_referer('bulk-media');
       
    23 
       
    24 	if ( 'delete_all' == $doaction ) {
       
    25 		$post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND post_status = 'trash'" );
       
    26 		$doaction = 'delete';
       
    27 	} elseif ( isset( $_REQUEST['media'] ) ) {
       
    28 		$post_ids = $_REQUEST['media'];
       
    29 	} elseif ( isset( $_REQUEST['ids'] ) ) {
       
    30 		$post_ids = explode( ',', $_REQUEST['ids'] );
       
    31 	}
       
    32 
       
    33 	$location = 'upload.php';
       
    34 	if ( $referer = wp_get_referer() ) {
       
    35 		if ( false !== strpos( $referer, 'upload.php' ) )
       
    36 			$location = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'message', 'ids', 'posted' ), $referer );
       
    37 	}
       
    38 
       
    39 	switch ( $doaction ) {
       
    40 		case 'find_detached':
       
    41 			if ( !current_user_can('edit_posts') )
       
    42 				wp_die( __('You are not allowed to scan for lost attachments.') );
       
    43 
       
    44 			$lost = $wpdb->get_col( "
       
    45 				SELECT ID FROM $wpdb->posts
       
    46 				WHERE post_type = 'attachment' AND post_parent > '0'
       
    47 				AND post_parent NOT IN (
       
    48 					SELECT ID FROM $wpdb->posts
       
    49 					WHERE post_type NOT IN ( 'attachment', '" . join( "', '", get_post_types( array( 'public' => false ) ) ) . "' )
       
    50 				)
       
    51 			" );
       
    52 
       
    53 			$_REQUEST['detached'] = 1;
       
    54 			break;
       
    55 		case 'attach':
       
    56 			$parent_id = (int) $_REQUEST['found_post_id'];
       
    57 			if ( !$parent_id )
       
    58 				return;
       
    59 
       
    60 			$parent = &get_post( $parent_id );
       
    61 			if ( !current_user_can( 'edit_post', $parent_id ) )
       
    62 				wp_die( __( 'You are not allowed to edit this post.' ) );
       
    63 
       
    64 			$attach = array();
       
    65 			foreach ( (array) $_REQUEST['media'] as $att_id ) {
       
    66 				$att_id = (int) $att_id;
       
    67 
       
    68 				if ( !current_user_can( 'edit_post', $att_id ) )
       
    69 					continue;
       
    70 
       
    71 				$attach[] = $att_id;
       
    72 				clean_attachment_cache( $att_id );
       
    73 			}
       
    74 
       
    75 			if ( ! empty( $attach ) ) {
       
    76 				$attach = implode( ',', $attach );
       
    77 				$attached = $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $attach )", $parent_id ) );
       
    78 			}
       
    79 
       
    80 			if ( isset( $attached ) ) {
       
    81 				$location = 'upload.php';
       
    82 				if ( $referer = wp_get_referer() ) {
       
    83 					if ( false !== strpos( $referer, 'upload.php' ) )
       
    84 						$location = $referer;
       
    85 				}
       
    86 
       
    87 				$location = add_query_arg( array( 'attached' => $attached ) , $location );
       
    88 				wp_redirect( $location );
       
    89 				exit;
       
    90 			}
       
    91 			break;
       
    92 		case 'trash':
       
    93 			if ( !isset( $post_ids ) )
       
    94 				break;
       
    95 			foreach ( (array) $post_ids as $post_id ) {
       
    96 				if ( !current_user_can( 'delete_post', $post_id ) )
       
    97 					wp_die( __( 'You are not allowed to move this post to the trash.' ) );
       
    98 
       
    99 				if ( !wp_trash_post( $post_id ) )
       
   100 					wp_die( __( 'Error in moving to trash...' ) );
       
   101 			}
       
   102 			$location = add_query_arg( array( 'trashed' => count( $post_ids ), 'ids' => join( ',', $post_ids ) ), $location );
       
   103 			break;
       
   104 		case 'untrash':
       
   105 			if ( !isset( $post_ids ) )
       
   106 				break;
       
   107 			foreach ( (array) $post_ids as $post_id ) {
       
   108 				if ( !current_user_can( 'delete_post', $post_id ) )
       
   109 					wp_die( __( 'You are not allowed to move this post out of the trash.' ) );
       
   110 
       
   111 				if ( !wp_untrash_post( $post_id ) )
       
   112 					wp_die( __( 'Error in restoring from trash...' ) );
       
   113 			}
       
   114 			$location = add_query_arg( 'untrashed', count( $post_ids ), $location );
       
   115 			break;
       
   116 		case 'delete':
       
   117 			if ( !isset( $post_ids ) )
       
   118 				break;
       
   119 			foreach ( (array) $post_ids as $post_id_del ) {
       
   120 				if ( !current_user_can( 'delete_post', $post_id_del ) )
       
   121 					wp_die( __( 'You are not allowed to delete this post.' ) );
       
   122 
       
   123 				if ( !wp_delete_attachment( $post_id_del ) )
       
   124 					wp_die( __( 'Error in deleting...' ) );
       
   125 			}
       
   126 			$location = add_query_arg( 'deleted', count( $post_ids ), $location );
       
   127 			break;
       
   128 	}
       
   129 
       
   130 	wp_redirect( $location );
       
   131 	exit;
       
   132 } elseif ( ! empty( $_GET['_wp_http_referer'] ) ) {
       
   133 	 wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), stripslashes( $_SERVER['REQUEST_URI'] ) ) );
       
   134 	 exit;
       
   135 }
       
   136 
       
   137 $wp_list_table->prepare_items();
       
   138 
       
   139 $title = __('Media Library');
       
   140 $parent_file = 'upload.php';
       
   141 
    11 wp_enqueue_script( 'wp-ajax-response' );
   142 wp_enqueue_script( 'wp-ajax-response' );
    12 wp_enqueue_script( 'jquery-ui-draggable' );
   143 wp_enqueue_script( 'jquery-ui-draggable' );
    13 
   144 wp_enqueue_script( 'media' );
    14 if ( !current_user_can('upload_files') )
   145 
    15 	wp_die(__('You do not have permission to upload files.'));
   146 add_screen_option( 'per_page', array('label' => _x( 'Media items', 'items per page (screen options)' )) );
    16 
   147 
    17 if ( isset($_GET['find_detached']) ) {
   148 get_current_screen()->add_help_tab( array(
    18 	check_admin_referer('bulk-media');
   149 'id'		=> 'overview',
    19 
   150 'title'		=> __('Overview'),
    20 	if ( !current_user_can('edit_posts') )
   151 'content'	=>
    21 		wp_die( __('You are not allowed to scan for lost attachments.') );
   152 	'<p>' . __( 'All the files you&#8217;ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the Screen Options tab to customize the display of this screen.' ) . '</p>' .
    22 
   153 	'<p>' . __( 'You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by date using the dropdown menu above the media table.' ) . '</p>'
    23 	$all_posts = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type = 'post' OR post_type = 'page'");
   154 ) );
    24 	$all_att = $wpdb->get_results("SELECT ID, post_parent FROM $wpdb->posts WHERE post_type = 'attachment'");
   155 get_current_screen()->add_help_tab( array(
    25 
   156 'id'		=> 'actions-links',
    26 	$lost = array();
   157 'title'		=> __('Available Actions'),
    27 	foreach ( (array) $all_att as $att ) {
   158 'content'	=>
    28 		if ( $att->post_parent > 0 && ! in_array($att->post_parent, $all_posts) )
   159 	'<p>' . __( 'Hovering over a row reveals action links: Edit, Delete Permanently, and View. Clicking Edit or on the media file&#8217;s name displays a simple screen to edit that individual file&#8217;s metadata. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). View will take you to the display page for that file.' ) . '</p>'
    29 			$lost[] = $att->ID;
   160 ) );
    30 	}
   161 get_current_screen()->add_help_tab( array(
    31 	$_GET['detached'] = 1;
   162 'id'		=> 'attaching-files',
    32 
   163 'title'		=> __('Attaching Files'),
    33 } elseif ( isset($_GET['found_post_id']) && isset($_GET['media']) ) {
   164 'content'	=>
    34 	check_admin_referer('bulk-media');
   165 	'<p>' . __( 'If a media file has not been attached to any post, you will see that in the Attached To column, and can click on Attach File to launch a small popup that will allow you to search for a post and attach the file.' ) . '</p>'
    35 
   166 ) );
    36 	if ( ! ( $parent_id = (int) $_GET['found_post_id'] ) )
   167 
    37 		return;
   168 get_current_screen()->set_help_sidebar(
    38 
   169 	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
    39 	$parent = &get_post($parent_id);
   170 	'<p>' . __( '<a href="http://codex.wordpress.org/Media_Library_Screen" target="_blank">Documentation on Media Library</a>' ) . '</p>' .
    40 	if ( !current_user_can('edit_post', $parent_id) )
   171 	'<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>'
    41 		wp_die( __('You are not allowed to edit this post.') );
   172 );
    42 
   173 
    43 	$attach = array();
   174 require_once('./admin-header.php');
    44 	foreach( (array) $_GET['media'] as $att_id ) {
       
    45 		$att_id = (int) $att_id;
       
    46 
       
    47 		if ( !current_user_can('edit_post', $att_id) )
       
    48 			continue;
       
    49 
       
    50 		$attach[] = $att_id;
       
    51 	}
       
    52 
       
    53 	if ( ! empty($attach) ) {
       
    54 		$attach = implode(',', $attach);
       
    55 		$attached = $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ($attach)", $parent_id) );
       
    56 	}
       
    57 
       
    58 	if ( isset($attached) ) {
       
    59 		$location = 'upload.php';
       
    60 		if ( $referer = wp_get_referer() ) {
       
    61 			if ( false !== strpos($referer, 'upload.php') )
       
    62 				$location = $referer;
       
    63 		}
       
    64 
       
    65 		$location = add_query_arg( array( 'attached' => $attached ) , $location );
       
    66 		wp_redirect($location);
       
    67 		exit;
       
    68 	}
       
    69 
       
    70 } elseif ( isset($_GET['doaction']) || isset($_GET['doaction2']) || isset($_GET['delete_all']) || isset($_GET['delete_all2']) ) {
       
    71 	check_admin_referer('bulk-media');
       
    72 
       
    73 	if ( isset($_GET['delete_all']) || isset($_GET['delete_all2']) ) {
       
    74 		$post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND post_status = 'trash'" );
       
    75 		$doaction = 'delete';
       
    76 	} elseif ( ( $_GET['action'] != -1 || $_GET['action2'] != -1 ) && ( isset($_GET['media']) || isset($_GET['ids']) ) ) {
       
    77 		$post_ids = isset($_GET['media']) ? $_GET['media'] : explode(',', $_GET['ids']);
       
    78 		$doaction = ($_GET['action'] != -1) ? $_GET['action'] : $_GET['action2'];
       
    79 	} else {
       
    80 		wp_redirect($_SERVER['HTTP_REFERER']);
       
    81 	}
       
    82 
       
    83 	$location = 'upload.php';
       
    84 	if ( $referer = wp_get_referer() ) {
       
    85 		if ( false !== strpos($referer, 'upload.php') )
       
    86 			$location = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'message', 'ids', 'posted'), $referer );
       
    87 	}
       
    88 
       
    89 	switch ( $doaction ) {
       
    90 		case 'trash':
       
    91 			foreach( (array) $post_ids as $post_id ) {
       
    92 				if ( !current_user_can('delete_post', $post_id) )
       
    93 					wp_die( __('You are not allowed to move this post to the trash.') );
       
    94 
       
    95 				if ( !wp_trash_post($post_id) )
       
    96 					wp_die( __('Error in moving to trash...') );
       
    97 			}
       
    98 			$location = add_query_arg( array( 'message' => 4, 'ids' => join(',', $post_ids) ), $location );
       
    99 			break;
       
   100 		case 'untrash':
       
   101 			foreach( (array) $post_ids as $post_id ) {
       
   102 				if ( !current_user_can('delete_post', $post_id) )
       
   103 					wp_die( __('You are not allowed to move this post out of the trash.') );
       
   104 
       
   105 				if ( !wp_untrash_post($post_id) )
       
   106 					wp_die( __('Error in restoring from trash...') );
       
   107 			}
       
   108 			$location = add_query_arg('message', 5, $location);
       
   109 			break;
       
   110 		case 'delete':
       
   111 			foreach( (array) $post_ids as $post_id_del ) {
       
   112 				if ( !current_user_can('delete_post', $post_id_del) )
       
   113 					wp_die( __('You are not allowed to delete this post.') );
       
   114 
       
   115 				if ( !wp_delete_attachment($post_id_del) )
       
   116 					wp_die( __('Error in deleting...') );
       
   117 			}
       
   118 			$location = add_query_arg('message', 2, $location);
       
   119 			break;
       
   120 	}
       
   121 
       
   122 	wp_redirect($location);
       
   123 	exit;
       
   124 } elseif ( isset($_GET['_wp_http_referer']) && ! empty($_GET['_wp_http_referer']) ) {
       
   125 	 wp_redirect( remove_query_arg( array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI']) ) );
       
   126 	 exit;
       
   127 }
       
   128 
       
   129 $title = __('Media Library');
       
   130 $parent_file = 'upload.php';
       
   131 
       
   132 if ( ! isset( $_GET['paged'] ) || $_GET['paged'] < 1 )
       
   133 	$_GET['paged'] = 1;
       
   134 
       
   135 if ( isset($_GET['detached']) ) {
       
   136 
       
   137 	$media_per_page = (int) get_user_option( 'upload_per_page', 0, false );
       
   138 	if ( empty($media_per_page) || $media_per_page < 1 )
       
   139 		$media_per_page = 20;
       
   140 	$media_per_page = apply_filters( 'upload_per_page', $media_per_page );
       
   141 
       
   142 	if ( !empty($lost) ) {
       
   143 		$start = ( (int) $_GET['paged'] - 1 ) * $media_per_page;
       
   144 		$page_links_total = ceil(count($lost) / $media_per_page);
       
   145 		$lost = implode(',', $lost);
       
   146 
       
   147 		$orphans = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_type = 'attachment' AND ID IN (%s) LIMIT %d, %d", $lost, $start, $media_per_page ) );
       
   148 	} else {
       
   149 		$start = ( (int) $_GET['paged'] - 1 ) * $media_per_page;
       
   150 		$orphans = $wpdb->get_results( $wpdb->prepare( "SELECT SQL_CALC_FOUND_ROWS * FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent < 1 LIMIT %d, %d", $start, $media_per_page ) );
       
   151 		$page_links_total = ceil($wpdb->get_var( "SELECT FOUND_ROWS()" ) / $media_per_page);
       
   152 	}
       
   153 
       
   154 	$post_mime_types = get_post_mime_types();
       
   155 	$avail_post_mime_types = get_available_post_mime_types('attachment');
       
   156 
       
   157 	if ( isset($_GET['post_mime_type']) && !array_intersect( (array) $_GET['post_mime_type'], array_keys($post_mime_types) ) )
       
   158 		unset($_GET['post_mime_type']);
       
   159 
       
   160 } else {
       
   161 	list($post_mime_types, $avail_post_mime_types) = wp_edit_attachments_query();
       
   162 }
       
   163 
       
   164 $is_trash = ( isset($_GET['status']) && $_GET['status'] == 'trash' );
       
   165 
       
   166 wp_enqueue_script('media');
       
   167 require_once('admin-header.php');
       
   168 
       
   169 do_action('restrict_manage_posts');
       
   170 ?>
   175 ?>
   171 
   176 
   172 <div class="wrap">
   177 <div class="wrap">
   173 <?php screen_icon(); ?>
   178 <?php screen_icon(); ?>
   174 <h2><?php echo esc_html( $title ); ?> <a href="media-new.php" class="button add-new-h2"><?php echo esc_html_x('Add New', 'file'); ?></a> <?php
   179 <h2>
   175 if ( isset($_GET['s']) && $_GET['s'] )
   180 <?php
   176 	printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( get_search_query() ) ); ?>
   181 echo esc_html( $title );
       
   182 if ( current_user_can( 'upload_files' ) ) { ?>
       
   183 	<a href="media-new.php" class="add-new-h2"><?php echo esc_html_x('Add New', 'file'); ?></a><?php
       
   184 }
       
   185 if ( ! empty( $_REQUEST['s'] ) )
       
   186 	printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', get_search_query() ); ?>
   177 </h2>
   187 </h2>
   178 
   188 
   179 <?php
   189 <?php
   180 $message = '';
   190 $message = '';
   181 if ( isset($_GET['posted']) && (int) $_GET['posted'] ) {
   191 if ( ! empty( $_GET['posted'] ) ) {
   182 	$_GET['message'] = '1';
   192 	$message = __('Media attachment updated.');
   183 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('posted'), $_SERVER['REQUEST_URI']);
   193 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('posted'), $_SERVER['REQUEST_URI']);
   184 }
   194 }
   185 
   195 
   186 if ( isset($_GET['attached']) && (int) $_GET['attached'] ) {
   196 if ( ! empty( $_GET['attached'] ) && $attached = absint( $_GET['attached'] ) ) {
   187 	$attached = (int) $_GET['attached'];
   197 	$message = sprintf( _n('Reattached %d attachment.', 'Reattached %d attachments.', $attached), $attached );
   188 	$message = sprintf( _n('Reattached %d attachment', 'Reattached %d attachments', $attached), $attached );
       
   189 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('attached'), $_SERVER['REQUEST_URI']);
   198 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('attached'), $_SERVER['REQUEST_URI']);
   190 }
   199 }
   191 
   200 
   192 if ( isset($_GET['deleted']) && (int) $_GET['deleted'] ) {
   201 if ( ! empty( $_GET['deleted'] ) && $deleted = absint( $_GET['deleted'] ) ) {
   193 	$_GET['message'] = '2';
   202 	$message = sprintf( _n( 'Media attachment permanently deleted.', '%d media attachments permanently deleted.', $deleted ), number_format_i18n( $_GET['deleted'] ) );
   194 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('deleted'), $_SERVER['REQUEST_URI']);
   203 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('deleted'), $_SERVER['REQUEST_URI']);
   195 }
   204 }
   196 
   205 
   197 if ( isset($_GET['trashed']) && (int) $_GET['trashed'] ) {
   206 if ( ! empty( $_GET['trashed'] ) && $trashed = absint( $_GET['trashed'] ) ) {
   198 	$_GET['message'] = '4';
   207 	$message = sprintf( _n( 'Media attachment moved to the trash.', '%d media attachments moved to the trash.', $trashed ), number_format_i18n( $_GET['trashed'] ) );
       
   208 	$message .= ' <a href="' . esc_url( wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids='.(isset($_GET['ids']) ? $_GET['ids'] : ''), "bulk-media" ) ) . '">' . __('Undo') . '</a>';
   199 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('trashed'), $_SERVER['REQUEST_URI']);
   209 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('trashed'), $_SERVER['REQUEST_URI']);
   200 }
   210 }
   201 
   211 
   202 if ( isset($_GET['untrashed']) && (int) $_GET['untrashed'] ) {
   212 if ( ! empty( $_GET['untrashed'] ) && $untrashed = absint( $_GET['untrashed'] ) ) {
   203 	$_GET['message'] = '5';
   213 	$message = sprintf( _n( 'Media attachment restored from the trash.', '%d media attachments restored from the trash.', $untrashed ), number_format_i18n( $_GET['untrashed'] ) );
   204 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('untrashed'), $_SERVER['REQUEST_URI']);
   214 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('untrashed'), $_SERVER['REQUEST_URI']);
   205 }
   215 }
   206 
   216 
   207 $messages[1] = __('Media attachment updated.');
   217 $messages[1] = __('Media attachment updated.');
   208 $messages[2] = __('Media permanently deleted.');
   218 $messages[2] = __('Media permanently deleted.');
   209 $messages[3] = __('Error saving media attachment.');
   219 $messages[3] = __('Error saving media attachment.');
   210 $messages[4] = __('Media moved to the trash.') . ' <a href="' . esc_url( wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids='.(isset($_GET['ids']) ? $_GET['ids'] : ''), "bulk-media" ) ) . '">' . __('Undo') . '</a>';
   220 $messages[4] = __('Media moved to the trash.') . ' <a href="' . esc_url( wp_nonce_url( 'upload.php?doaction=undo&action=untrash&ids='.(isset($_GET['ids']) ? $_GET['ids'] : ''), "bulk-media" ) ) . '">' . __('Undo') . '</a>';
   211 $messages[5] = __('Media restored from the trash.');
   221 $messages[5] = __('Media restored from the trash.');
   212 
   222 
   213 if ( isset($_GET['message']) && (int) $_GET['message'] ) {
   223 if ( ! empty( $_GET['message'] ) && isset( $messages[ $_GET['message'] ] ) ) {
   214 	$message = $messages[$_GET['message']];
   224 	$message = $messages[ $_GET['message'] ];
   215 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('message'), $_SERVER['REQUEST_URI']);
   225 	$_SERVER['REQUEST_URI'] = remove_query_arg(array('message'), $_SERVER['REQUEST_URI']);
   216 }
   226 }
   217 
   227 
   218 if ( !empty($message) ) { ?>
   228 if ( !empty($message) ) { ?>
   219 <div id="message" class="updated fade"><p><?php echo $message; ?></p></div>
   229 <div id="message" class="updated"><p><?php echo $message; ?></p></div>
   220 <?php } ?>
   230 <?php } ?>
   221 
   231 
   222 <ul class="subsubsub">
   232 <?php $wp_list_table->views(); ?>
   223 <?php
   233 
   224 $type_links = array();
   234 <form id="posts-filter" action="" method="get">
   225 $_num_posts = (array) wp_count_attachments();
   235 
   226 $_total_posts = array_sum($_num_posts) - $_num_posts['trash'];
   236 <?php $wp_list_table->search_box( __( 'Search Media' ), 'media' ); ?>
   227 $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts));
   237 
   228 foreach ( $matches as $type => $reals )
   238 <?php $wp_list_table->display(); ?>
   229 	foreach ( $reals as $real )
   239 
   230 		$num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real];
   240 <div id="ajax-response"></div>
   231 
   241 <?php find_posts_div(); ?>
   232 $class = ( empty($_GET['post_mime_type']) && !isset($_GET['detached']) && !isset($_GET['status']) ) ? ' class="current"' : '';
   242 <br class="clear" />
   233 $type_links[] = "<li><a href='upload.php'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $_total_posts, 'uploaded files' ), number_format_i18n( $_total_posts ) ) . '</a>';
   243 
   234 foreach ( $post_mime_types as $mime_type => $label ) {
       
   235 	$class = '';
       
   236 
       
   237 	if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) )
       
   238 		continue;
       
   239 
       
   240 	if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) )
       
   241 		$class = ' class="current"';
       
   242 
       
   243 	$type_links[] = "<li><a href='upload.php?post_mime_type=$mime_type'$class>" . sprintf( _n( $label[2][0], $label[2][1], $num_posts[$mime_type] ), number_format_i18n( $num_posts[$mime_type] )) . '</a>';
       
   244 }
       
   245 $type_links[] = '<li><a href="upload.php?detached=1"' . ( isset($_GET['detached']) ? ' class="current"' : '' ) . '>' . __('Unattached') . '</a>';
       
   246 if ( EMPTY_TRASH_DAYS && ( MEDIA_TRASH || !empty($_num_posts['trash']) ) )
       
   247 	$type_links[] = '<li><a href="upload.php?status=trash"' . ( (isset($_GET['status']) && $_GET['status'] == 'trash' ) ? ' class="current"' : '') . '>' . sprintf( _nx( 'Trash <span class="count">(%s)</span>', 'Trash <span class="count">(%s)</span>', $_num_posts['trash'], 'uploaded files' ), number_format_i18n( $_num_posts['trash'] ) ) . '</a>';
       
   248 
       
   249 echo implode( " |</li>\n", $type_links) . '</li>';
       
   250 unset($type_links);
       
   251 ?>
       
   252 </ul>
       
   253 
       
   254 <form class="search-form" action="" method="get">
       
   255 <p class="search-box">
       
   256 	<label class="screen-reader-text" for="media-search-input"><?php _e( 'Search Media' ); ?>:</label>
       
   257 	<input type="text" id="media-search-input" name="s" value="<?php the_search_query(); ?>" />
       
   258 	<input type="submit" value="<?php esc_attr_e( 'Search Media' ); ?>" class="button" />
       
   259 </p>
       
   260 </form>
   244 </form>
   261 
       
   262 <form id="posts-filter" action="" method="get">
       
   263 <div class="tablenav">
       
   264 <?php
       
   265 if ( ! isset($page_links_total) )
       
   266 	$page_links_total =  $wp_query->max_num_pages;
       
   267 
       
   268 $page_links = paginate_links( array(
       
   269 	'base' => add_query_arg( 'paged', '%#%' ),
       
   270 	'format' => '',
       
   271 	'prev_text' => __('&laquo;'),
       
   272 	'next_text' => __('&raquo;'),
       
   273 	'total' => $page_links_total,
       
   274 	'current' => $_GET['paged']
       
   275 ));
       
   276 
       
   277 if ( $page_links ) : ?>
       
   278 <div class="tablenav-pages"><?php $page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%s',
       
   279 	number_format_i18n( ( $_GET['paged'] - 1 ) * $wp_query->query_vars['posts_per_page'] + 1 ),
       
   280 	number_format_i18n( min( $_GET['paged'] * $wp_query->query_vars['posts_per_page'], $wp_query->found_posts ) ),
       
   281 	number_format_i18n( $wp_query->found_posts ),
       
   282 	$page_links
       
   283 ); echo $page_links_text; ?></div>
       
   284 <?php endif; ?>
       
   285 
       
   286 <div class="alignleft actions">
       
   287 <select name="action" class="select-action">
       
   288 <option value="-1" selected="selected"><?php _e('Bulk Actions'); ?></option>
       
   289 <?php if ( $is_trash ) { ?>
       
   290 <option value="untrash"><?php _e('Restore'); ?></option>
       
   291 <?php } if ( $is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH ) { ?>
       
   292 <option value="delete"><?php _e('Delete Permanently'); ?></option>
       
   293 <?php } else { ?>
       
   294 <option value="trash"><?php _e('Move to Trash'); ?></option>
       
   295 <?php } if ( isset($orphans) ) { ?>
       
   296 <option value="attach"><?php _e('Attach to a post'); ?></option>
       
   297 <?php } ?>
       
   298 </select>
       
   299 <input type="submit" value="<?php esc_attr_e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
       
   300 <?php wp_nonce_field('bulk-media'); ?>
       
   301 
       
   302 <?php
       
   303 if ( !is_singular() && !isset($_GET['detached']) && !$is_trash ) {
       
   304 	$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";
       
   305 
       
   306 	$arc_result = $wpdb->get_results( $arc_query );
       
   307 
       
   308 	$month_count = count($arc_result);
       
   309 
       
   310 	if ( $month_count && !( 1 == $month_count && 0 == $arc_result[0]->mmonth ) ) : ?>
       
   311 <select name='m'>
       
   312 <option value='0'><?php _e('Show all dates'); ?></option>
       
   313 <?php
       
   314 foreach ($arc_result as $arc_row) {
       
   315 	if ( $arc_row->yyear == 0 )
       
   316 		continue;
       
   317 	$arc_row->mmonth = zeroise( $arc_row->mmonth, 2 );
       
   318 
       
   319 	if ( isset($_GET['m']) && ( $arc_row->yyear . $arc_row->mmonth == $_GET['m'] ) )
       
   320 		$default = ' selected="selected"';
       
   321 	else
       
   322 		$default = '';
       
   323 
       
   324 	echo "<option$default value='" . esc_attr("$arc_row->yyear$arc_row->mmonth") . "'>";
       
   325 	echo $wp_locale->get_month($arc_row->mmonth) . " $arc_row->yyear";
       
   326 	echo "</option>\n";
       
   327 }
       
   328 ?>
       
   329 </select>
       
   330 <?php endif; // month_count ?>
       
   331 
       
   332 <input type="submit" id="post-query-submit" value="<?php esc_attr_e('Filter'); ?>" class="button-secondary" />
       
   333 
       
   334 <?php } // ! is_singular ?>
       
   335 
       
   336 <?php if ( isset($_GET['detached']) ) { ?>
       
   337 	<input type="submit" id="find_detached" name="find_detached" value="<?php esc_attr_e('Scan for lost attachments'); ?>" class="button-secondary" />
       
   338 <?php } elseif ( isset($_GET['status']) && $_GET['status'] == 'trash' && current_user_can('edit_others_posts') ) { ?>
       
   339 	<input type="submit" id="delete_all" name="delete_all" value="<?php esc_attr_e('Empty Trash'); ?>" class="button-secondary apply" />
       
   340 <?php } ?>
       
   341 
       
   342 </div>
   245 </div>
   343 
   246 
   344 <br class="clear" />
   247 <?php
   345 </div>
   248 include('./admin-footer.php');
   346 
       
   347 <div class="clear"></div>
       
   348 
       
   349 <?php if ( isset($orphans) ) { ?>
       
   350 <table class="widefat" cellspacing="0">
       
   351 <thead>
       
   352 <tr>
       
   353 	<th scope="col" class="check-column"><input type="checkbox" /></th>
       
   354 	<th scope="col"></th>
       
   355 	<th scope="col"><?php /* translators: column name in media */ echo _x('Media', 'media column name'); ?></th>
       
   356 	<th scope="col"><?php /* translators: column name in media */ echo _x('Author', 'media column name'); ?></th>
       
   357 	<th scope="col"><?php /* translators: column name in media */ echo _x('Date Added', 'media column name'); ?></th>
       
   358 </tr>
       
   359 </thead>
       
   360 
       
   361 <tfoot>
       
   362 <tr>
       
   363 	<th scope="col" class="check-column"><input type="checkbox" /></th>
       
   364 	<th scope="col"></th>
       
   365 	<th scope="col"><?php /* translators: column name in media */ echo _x('Media', 'media column name'); ?></th>
       
   366 	<th scope="col"><?php /* translators: column name in media */ echo _x('Author', 'media column name'); ?></th>
       
   367 	<th scope="col"><?php /* translators: column name in media */ echo _x('Date Added', 'media column name'); ?></th>
       
   368 </tr>
       
   369 </tfoot>
       
   370 
       
   371 <tbody id="the-list" class="list:post">
       
   372 <?php
       
   373 	if ( $orphans ) {
       
   374 		foreach ( $orphans as $post ) {
       
   375 			$class = 'alternate' == $class ? '' : 'alternate';
       
   376 			$att_title = esc_html( _draft_or_post_title($post->ID) );
       
   377 ?>
       
   378 	<tr id='post-<?php echo $post->ID; ?>' class='<?php echo $class; ?>' valign="top">
       
   379 		<th scope="row" class="check-column"><?php if ( current_user_can('edit_post', $post->ID) ) { ?><input type="checkbox" name="media[]" value="<?php echo esc_attr($post->ID); ?>" /><?php } ?></th>
       
   380 
       
   381 		<td class="media-icon"><?php
       
   382 		if ( $thumb = wp_get_attachment_image( $post->ID, array(80, 60), true ) ) { ?>
       
   383 			<a href="media.php?action=edit&amp;attachment_id=<?php echo $post->ID; ?>" title="<?php echo esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $att_title)); ?>"><?php echo $thumb; ?></a>
       
   384 <?php	} ?></td>
       
   385 
       
   386 		<td class="media column-media"><strong><a href="<?php echo get_edit_post_link( $post->ID ); ?>" title="<?php echo esc_attr(sprintf(__('Edit &#8220;%s&#8221;'), $att_title)); ?>"><?php echo $att_title; ?></a></strong><br />
       
   387 		<?php echo strtoupper(preg_replace('/^.*?\.(\w+)$/', '$1', get_attached_file($post->ID))); ?>
       
   388 
       
   389 		<div class="row-actions">
       
   390 		<?php
       
   391 		$actions = array();
       
   392 		if ( current_user_can('edit_post', $post->ID) )
       
   393 			$actions['edit'] = '<a href="' . get_edit_post_link($post->ID, true) . '">' . __('Edit') . '</a>';
       
   394 		if ( current_user_can('delete_post', $post->ID) )
       
   395 			if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
       
   396 				$actions['trash'] = "<a class='submitdelete' href='" . wp_nonce_url("post.php?action=trash&amp;post=$post->ID", 'trash-post_' . $post->ID) . "'>" . __('Trash') . "</a>";
       
   397 			} else {
       
   398 				$delete_ays = !MEDIA_TRASH ? " onclick='return showNotice.warn();'" : '';
       
   399 				$actions['delete'] = "<a class='submitdelete'$delete_ays href='" . wp_nonce_url("post.php?action=delete&amp;post=$post->ID", 'delete-post_' . $post->ID) . "'>" . __('Delete Permanently') . "</a>";
       
   400 			}
       
   401 		$actions['view'] = '<a href="' . get_permalink($post->ID) . '" title="' . esc_attr(sprintf(__('View &#8220;%s&#8221;'), $title)) . '" rel="permalink">' . __('View') . '</a>';
       
   402 		if ( current_user_can('edit_post', $post->ID) )
       
   403 			$actions['attach'] = '<a href="#the-list" onclick="findPosts.open(\'media[]\',\''.$post->ID.'\');return false;" class="hide-if-no-js">'.__('Attach').'</a>';
       
   404 		$actions = apply_filters( 'media_row_actions', $actions, $post );
       
   405 		$action_count = count($actions);
       
   406 		$i = 0;
       
   407 		foreach ( $actions as $action => $link ) {
       
   408 			++$i;
       
   409 			( $i == $action_count ) ? $sep = '' : $sep = ' | ';
       
   410 			echo "<span class='$action'>$link$sep</span>";
       
   411 		} ?>
       
   412 		</div></td>
       
   413 		<td class="author column-author"><?php $author = get_userdata($post->post_author); echo $author->display_name; ?></td>
       
   414 <?php	if ( '0000-00-00 00:00:00' == $post->post_date && 'date' == $column_name ) {
       
   415 			$t_time = $h_time = __('Unpublished');
       
   416 		} else {
       
   417 			$t_time = get_the_time(__('Y/m/d g:i:s A'));
       
   418 			$m_time = $post->post_date;
       
   419 			$time = get_post_time( 'G', true );
       
   420 			if ( ( abs($t_diff = time() - $time) ) < 86400 ) {
       
   421 				if ( $t_diff < 0 )
       
   422 					$h_time = sprintf( __('%s from now'), human_time_diff( $time ) );
       
   423 				else
       
   424 					$h_time = sprintf( __('%s ago'), human_time_diff( $time ) );
       
   425 			} else {
       
   426 				$h_time = mysql2date(__('Y/m/d'), $m_time);
       
   427 			}
       
   428 		} ?>
       
   429 		<td class="date column-date"><?php echo $h_time ?></td>
       
   430 	</tr>
       
   431 <?php	}
       
   432 
       
   433 	} else { ?>
       
   434 	<tr><td colspan="5"><?php _e('No media attachments found.') ?></td></tr>
       
   435 <?php } ?>
       
   436 </tbody>
       
   437 </table>
       
   438 
       
   439 <?php
       
   440 
       
   441 } else {
       
   442 	include( 'edit-attachment-rows.php' );
       
   443 } ?>
       
   444 
       
   445 <div id="ajax-response"></div>
       
   446 
       
   447 <div class="tablenav">
       
   448 
       
   449 <?php
       
   450 if ( $page_links )
       
   451 	echo "<div class='tablenav-pages'>$page_links_text</div>";
       
   452 ?>
       
   453 
       
   454 <div class="alignleft actions">
       
   455 <select name="action2" class="select-action">
       
   456 <option value="-1" selected="selected"><?php _e('Bulk Actions'); ?></option>
       
   457 <?php if ($is_trash) { ?>
       
   458 <option value="untrash"><?php _e('Restore'); ?></option>
       
   459 <?php } if ( $is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH ) { ?>
       
   460 <option value="delete"><?php _e('Delete Permanently'); ?></option>
       
   461 <?php } else { ?>
       
   462 <option value="trash"><?php _e('Move to Trash'); ?></option>
       
   463 <?php } if (isset($orphans)) { ?>
       
   464 <option value="attach"><?php _e('Attach to a post'); ?></option>
       
   465 <?php } ?>
       
   466 </select>
       
   467 <input type="submit" value="<?php esc_attr_e('Apply'); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
       
   468 
       
   469 <?php if ( isset($_GET['status']) && $_GET['status'] == 'trash' && current_user_can('edit_others_posts') ) { ?>
       
   470 	<input type="submit" id="delete_all2" name="delete_all2" value="<?php esc_attr_e('Empty Trash'); ?>" class="button-secondary apply" />
       
   471 <?php } ?>
       
   472 </div>
       
   473 
       
   474 <br class="clear" />
       
   475 </div>
       
   476 <?php find_posts_div(); ?>
       
   477 </form>
       
   478 <br class="clear" />
       
   479 
       
   480 </div>
       
   481 
       
   482 <?php
       
   483 include('admin-footer.php');