From 0e57bd3a37fdaca2a2f9e30e475ae07e250361f8 Mon Sep 17 00:00:00 2001 From: markjaquith Date: Thu, 12 May 2011 06:09:42 +0000 Subject: [PATCH] Centralize pagination bound exceeding redirects for list tables. props garyc40. props johnjamesjacoby. fixes #16208 git-svn-id: http://svn.automattic.com/wordpress/trunk@17900 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/edit-comments.php | 6 ------ wp-admin/edit.php | 6 ------ wp-admin/includes/class-wp-list-table.php | 6 ++++++ wp-admin/network/sites.php | 6 ------ wp-admin/network/themes.php | 6 ------ wp-admin/plugin-install.php | 5 ----- wp-admin/plugins.php | 6 ------ wp-admin/theme-install.php | 5 ----- wp-admin/upload.php | 6 ------ 9 files changed, 6 insertions(+), 46 deletions(-) diff --git a/wp-admin/edit-comments.php b/wp-admin/edit-comments.php index ba19971ce..7388078ec 100644 --- a/wp-admin/edit-comments.php +++ b/wp-admin/edit-comments.php @@ -101,12 +101,6 @@ if ( $doaction ) { $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} - wp_enqueue_script('admin-comments'); enqueue_comment_hotkeys_js(); diff --git a/wp-admin/edit.php b/wp-admin/edit.php index 8ba7d4533..81cf4ec98 100644 --- a/wp-admin/edit.php +++ b/wp-admin/edit.php @@ -142,12 +142,6 @@ if ( $doaction ) { $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} - wp_enqueue_script('inline-edit-post'); $title = $post_type_object->labels->name; diff --git a/wp-admin/includes/class-wp-list-table.php b/wp-admin/includes/class-wp-list-table.php index 0a35ae65c..42023a1dd 100644 --- a/wp-admin/includes/class-wp-list-table.php +++ b/wp-admin/includes/class-wp-list-table.php @@ -139,6 +139,12 @@ class WP_List_Table { if ( !$args['total_pages'] && $args['per_page'] > 0 ) $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] ); + // redirect if page number is invalid and headers are not already sent + if ( ! headers_sent() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) { + wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) ); + exit; + } + $this->_pagination_args = $args; } diff --git a/wp-admin/network/sites.php b/wp-admin/network/sites.php index 922fdc6ff..893a18bea 100644 --- a/wp-admin/network/sites.php +++ b/wp-admin/network/sites.php @@ -88,12 +88,6 @@ if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} - require_once( '../admin-header.php' ); ?> diff --git a/wp-admin/network/themes.php b/wp-admin/network/themes.php index c53d576f3..470cfd106 100644 --- a/wp-admin/network/themes.php +++ b/wp-admin/network/themes.php @@ -171,12 +171,6 @@ if ( $action ) { $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} - add_thickbox(); add_screen_option( 'per_page', array('label' => _x( 'Themes', 'themes per page (screen options)' )) ); diff --git a/wp-admin/plugin-install.php b/wp-admin/plugin-install.php index bd83c3fc3..91e711ae5 100644 --- a/wp-admin/plugin-install.php +++ b/wp-admin/plugin-install.php @@ -23,11 +23,6 @@ if ( is_multisite() && ! is_network_admin() ) { $wp_list_table = _get_list_table('WP_Plugin_Install_List_Table'); $pagenum = $wp_list_table->get_pagenum(); $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} $title = __('Install Plugins'); $parent_file = 'plugins.php'; diff --git a/wp-admin/plugins.php b/wp-admin/plugins.php index 6a18bc4c2..44792740b 100644 --- a/wp-admin/plugins.php +++ b/wp-admin/plugins.php @@ -313,12 +313,6 @@ if ( $action ) { $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} - wp_enqueue_script('plugin-install'); add_thickbox(); diff --git a/wp-admin/theme-install.php b/wp-admin/theme-install.php index 263d9a9c0..18893af55 100644 --- a/wp-admin/theme-install.php +++ b/wp-admin/theme-install.php @@ -23,11 +23,6 @@ if ( is_multisite() && ! is_network_admin() ) { $wp_list_table = _get_list_table('WP_Theme_Install_List_Table'); $pagenum = $wp_list_table->get_pagenum(); $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} $title = __('Install Themes'); $parent_file = 'themes.php'; diff --git a/wp-admin/upload.php b/wp-admin/upload.php index 1261e63c3..e12120701 100644 --- a/wp-admin/upload.php +++ b/wp-admin/upload.php @@ -130,12 +130,6 @@ if ( $doaction ) { $wp_list_table->prepare_items(); -$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); -if ( $pagenum > $total_pages && $total_pages > 0 ) { - wp_redirect( add_query_arg( 'paged', $total_pages ) ); - exit; -} - $title = __('Media Library'); $parent_file = 'upload.php';