diff --git a/wp-admin/edit-attachment-rows.php b/wp-admin/edit-attachment-rows.php
new file mode 100644
index 0000000000..b8ae190bb7
--- /dev/null
+++ b/wp-admin/edit-attachment-rows.php
@@ -0,0 +1,118 @@
+
+
-
-\n";
-foreach ( $wp_upload_tabs as $t => $tab_array ) { // We've already done the current_user_can check
- $href = add_query_arg( array('tab' => $t, 'ID' => '', 'action' => '', 'paged' => '') );
- if ( isset($tab_array[4]) && is_array($tab_array[4]) )
- $href = add_query_arg( $tab_array[4], $href );
- $_href = clean_url( $href);
- $page_links = '';
- $class = 'upload-tab alignleft';
- if ( $tab == $t ) {
- $class .= ' current';
- if ( $tab_array[3] ) {
- if ( is_array($tab_array[3]) ) {
- $total = $tab_array[3][0];
- $per = $tab_array[3][1];
- } else {
- $total = $tab_array[3];
- $per = 10;
- }
- $page_links = paginate_links( array(
- 'base' => add_query_arg( 'paged', '%#%' ),
- 'format' => '',
- 'total' => ceil($total / $per),
- 'current' => $paged ? $paged : 1,
- 'prev_text' => '«',
- 'next_text' => '»'
- ));
- if ( $page_links )
- $page_links = "
: $page_links";
+require_once('admin-header.php');
+
+add_filter( 'post_limits', $limit_filter = create_function( '$a', '$b = split(" ",$a); if ( !isset($b[2]) ) return $a; $start = intval(trim($b[1])) / 20 * 15; if ( !is_int($start) ) return $a; return "LIMIT $start, 20";' ) );
+list($post_mime_types, $avail_post_mime_types) = wp_edit_attachments_query();
+$wp_query->max_num_pages = ceil( $wp_query->found_posts / 15 ); // We grab 20 but only show 15 ( 5 more for ajax extra )
+
+if ( !isset( $_GET['paged'] ) )
+ $_GET['paged'] = 1;
+
+?>
+
+
";
- include_once('admin-footer.php');
-else : ?>
-
+ $status_links[] = "
" .
+ sprintf($label[2], $num_posts[$mime_type]) . '';
+}
+$class = empty($_GET['post_mime_type']) ? ' class="current"' : '';
+$status_links[] = "".__('All Types')."";
+echo implode(' |', $status_links) . '';
+unset($status_links);
+?>
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ add_query_arg( 'paged', '%#%' ),
+ 'format' => '',
+ 'total' => ceil($wp_query->found_posts / 15),
+ 'current' => $_GET['paged']
+));
+
+if ( $page_links )
+ echo "
$page_links
";
+?>
+
+
+
+
+posts WHERE post_type = 'post' ORDER BY post_date DESC";
+
+$arc_result = $wpdb->get_results( $arc_query );
+
+$month_count = count($arc_result);
+
+if ( $month_count && !( 1 == $month_count && 0 == $arc_result[0]->mmonth ) ) { ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+$page_links
";
+?>
+
+
+
+get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $id AND comment_approved != 'spam' ORDER BY comment_date");
+ if ($comments) {
+ // Make sure comments, post, and post_author are cached
+ update_comment_cache($comments);
+ $post = get_post($id);
+ $authordata = get_userdata($post->post_author);
+ ?>
+
+';
+ } // end if comments
+?>
+
+
+
+
diff --git a/wp-includes/classes.php b/wp-includes/classes.php
index 90108a7bc8..80c51ae14a 100644
--- a/wp-includes/classes.php
+++ b/wp-includes/classes.php
@@ -3,7 +3,7 @@
class WP {
var $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'debug', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots');
- var $private_query_vars = array('offset', 'posts_per_page', 'posts_per_archive_page', 'what_to_show', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id');
+ var $private_query_vars = array('offset', 'posts_per_page', 'posts_per_archive_page', 'what_to_show', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id', 'post_mime_type');
var $extra_query_vars = array();
var $query_vars;
diff --git a/wp-includes/post.php b/wp-includes/post.php
index 93cc19f7bd..f302374d18 100644
--- a/wp-includes/post.php
+++ b/wp-includes/post.php
@@ -806,6 +806,117 @@ function wp_count_posts( $type = 'post' ) {
return (object) $stats;
}
+/**
+ * wp_count_attachments() - Count number of attachments
+ *
+ * {@internal Missing Long Description}}
+ *
+ * @package WordPress
+ * @subpackage Post
+ * @since 2.5
+ *
+ * @param string|array $post_mime_type Array or comma-separated list of MIME patterns
+ * @return array Number of posts for each post_mime_type
+ */
+
+function wp_count_attachments( $mime_type = '' ) {
+ global $wpdb;
+
+ $and = wp_post_mime_type_where( $mime_type );
+ $count = $wpdb->get_results( "SELECT post_mime_type, COUNT( * ) AS num_posts FROM $wpdb->posts WHERE post_type = 'attachment' $and GROUP BY post_mime_type", ARRAY_A );
+
+ $stats = array( );
+ foreach( (array) $count as $row ) {
+ $stats[$row['post_mime_type']] = $row['num_posts'];
+ }
+
+ return (object) $stats;
+}
+
+/**
+ * wp_match_mime_type() - Check a MIME-Type against a list
+ *
+ * {@internal Missing Long Description}}
+ *
+ * @package WordPress
+ * @subpackage Post
+ * @since 2.5
+ *
+ * @param string|array $wildcard_mime_types e.g. audio/mpeg or image (same as image/*) or flash (same as *flash*)
+ * @param string|array $real_mime_types post_mime_type values
+ * @return array array(wildcard=>array(real types))
+ */
+function wp_match_mime_types($wildcard_mime_types, $real_mime_types) {
+ $matches = array();
+ if ( is_string($wildcard_mime_types) )
+ $wildcard_mime_types = array_map('trim', explode(',', $wildcard_mime_types));
+ if ( is_string($real_mime_types) )
+ $real_mime_types = array_map('trim', explode(',', $real_mime_types));
+ $wild = '[-._a-z0-9]*';
+ foreach ( (array) $wildcard_mime_types as $type ) {
+ $type = str_replace('*', $wild, $type);
+ $patternses[1][$type] = $type;
+ if ( false === strpos($type, '/') ) {
+ $patternses[2][$type] = "^$type/$wild$";
+ $patternses[3][$type] = "$wild$type$wild";
+ }
+ }
+ asort($patternses);
+ foreach ( $patternses as $patterns )
+ foreach ( $patterns as $type => $pattern )
+ foreach ( (array) $real_mime_types as $real )
+ if ( preg_match("#$pattern#", $real) && ( empty($matches[$type]) || false === array_search($real, $matches[$type]) ) )
+ $matches[$type][] = $real;
+ return $matches;
+}
+
+/**
+ * wp_get_post_mime_type_where() - Convert MIME types into SQL
+ *
+ * @package WordPress
+ * @subpackage Post
+ * @since 2.5
+ *
+ * @param string|array $mime_types MIME types
+ * @return string SQL AND clause
+ */
+function wp_post_mime_type_where($post_mime_types) {
+ $where = '';
+ $wildcards = array('', '%', '%/%');
+ if ( is_string($post_mime_types) )
+ $post_mime_types = array_map('trim', explode(',', $post_mime_types));
+ foreach ( (array) $post_mime_types as $mime_type ) {
+ $mime_type = preg_replace('/\s/', '', $mime_type);
+ $slashpos = strpos($mime_type, '/');
+ if ( false !== $slashpos ) {
+ $mime_group = preg_replace('/[^-*.a-zA-Z0-9]/', '', substr($mime_type, 0, $slashpos));
+ $mime_subgroup = preg_replace('/[^-*.a-zA-Z0-9]/', '', substr($mime_type, $slashpos + 1));
+ if ( empty($mime_subgroup) )
+ $mime_subgroup = '*';
+ else
+ $mime_subgroup = str_replace('/', '', $mime_subgroup);
+ $mime_pattern = "$mime_group/$mime_subgroup";
+ } else {
+ $mime_pattern = preg_replace('/[^-*.a-zA-Z0-9]/', '', $mime_type);
+ if ( false === strpos($mime_pattern, '*') )
+ $mime_pattern .= '/*';
+ }
+
+ $mime_pattern = preg_replace('/\*+/', '%', $mime_pattern);
+
+ if ( in_array( $mime_type, $wildcards ) )
+ return '';
+
+ if ( false !== strpos($mime_pattern, '%') )
+ $wheres[] = "post_mime_type LIKE '$mime_pattern'";
+ else
+ $wheres[] = "post_mime_type = '$mime_pattern'";
+ }
+ if ( !empty($wheres) )
+ $where = ' AND (' . join(' OR ', $wheres) . ') ';
+ return $where;
+}
+
/**
* wp_delete_post() - Deletes a Post
*
diff --git a/wp-includes/query.php b/wp-includes/query.php
index bfa05e6dda..034d64eef4 100644
--- a/wp-includes/query.php
+++ b/wp-includes/query.php
@@ -786,6 +786,7 @@ class WP_Query {
$distinct = '';
$whichcat = '';
$whichauthor = '';
+ $whichmimetype = '';
$where = '';
$limits = '';
$join = '';
@@ -1151,7 +1152,12 @@ class WP_Query {
$whichauthor .= ' AND (post_author = '.intval($q['author']).')';
}
- $where .= $search.$whichcat.$whichauthor;
+ // MIME-Type stuff for attachment browsing
+
+ if ( '' != $q['post_mime_type'] )
+ $whichmimetype = wp_post_mime_type_where($q['post_mime_type']);
+
+ $where .= $search.$whichcat.$whichauthor.$whichmimetype;
if ( empty($q['order']) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC')) )
$q['order'] = 'DESC';