Ticket #36675: 36675.5.diff
| File 36675.5.diff, 6.6 KB (added by , 9 years ago) |
|---|
-
src/wp-admin/includes/class-wp-ms-sites-list-table.php
67 67 public function prepare_items() { 68 68 global $s, $mode, $wpdb; 69 69 70 $current_site = get_current_site();71 72 70 if ( ! empty( $_REQUEST['mode'] ) ) { 73 71 $mode = $_REQUEST['mode'] === 'excerpt' ? 'excerpt' : 'list'; 74 72 set_user_setting( 'sites_list_mode', $mode ); … … 83 81 $s = isset( $_REQUEST['s'] ) ? wp_unslash( trim( $_REQUEST[ 's' ] ) ) : ''; 84 82 $wild = ''; 85 83 if ( false !== strpos($s, '*') ) { 86 $wild = ' %';84 $wild = '*'; 87 85 $s = trim($s, '*'); 88 86 } 89 87 … … 98 96 $_GET['order'] = $_REQUEST['order'] = 'DESC'; 99 97 } 100 98 101 $query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' "; 99 $args = array( 100 'number' => intval( $per_page ), 101 'offset' => intval( ( $pagenum - 1 ) * $per_page ), 102 'network_id' => get_current_network_id(), 103 ); 102 104 103 105 if ( empty($s) ) { 104 106 // Nothing to do. … … 107 109 preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) || 108 110 preg_match( '/^[0-9]{1,3}\.$/', $s ) ) { 109 111 // IPv4 address 110 $sql = $wpdb->prepare( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE %s", $wpdb->esc_like( $s ) . $wild);112 $sql = $wpdb->prepare( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE %s", $wpdb->esc_like( $s ) . ( ! empty( $wild ) ? '%' : '' ) ); 111 113 $reg_blog_ids = $wpdb->get_col( $sql ); 112 114 113 if ( !$reg_blog_ids ) 114 $reg_blog_ids = array( 0 ); 115 if ( $reg_blog_ids ) { 116 $args['site__in'] = $reg_blog_ids; 117 } 118 } elseif ( is_numeric( $s ) && empty( $wild ) ) { 119 $args['ID'] = $s; 120 } else { 121 $args['search'] = $s; 115 122 116 $query = "SELECT * 117 FROM {$wpdb->blogs} 118 WHERE site_id = '{$wpdb->siteid}' 119 AND {$wpdb->blogs}.blog_id IN (" . implode( ', ', $reg_blog_ids ) . ")"; 120 } else { 121 if ( is_numeric($s) && empty( $wild ) ) { 122 $query .= $wpdb->prepare( " AND ( {$wpdb->blogs}.blog_id = %s )", $s ); 123 } elseif ( is_subdomain_install() ) { 124 $blog_s = str_replace( '.' . $current_site->domain, '', $s ); 125 $blog_s = $wpdb->esc_like( $blog_s ) . $wild . $wpdb->esc_like( '.' . $current_site->domain ); 126 $query .= $wpdb->prepare( " AND ( {$wpdb->blogs}.domain LIKE %s ) ", $blog_s ); 127 } else { 128 if ( $s != trim('/', $current_site->path) ) { 129 $blog_s = $wpdb->esc_like( $current_site->path . $s ) . $wild . $wpdb->esc_like( '/' ); 130 } else { 131 $blog_s = $wpdb->esc_like( $s ); 132 } 133 $query .= $wpdb->prepare( " AND ( {$wpdb->blogs}.path LIKE %s )", $blog_s ); 123 if ( ! is_subdomain_install() ) { 124 $args['search_columns'] = array( 'path' ); 134 125 } 135 126 } 136 127 137 128 $order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : ''; 138 if ( $order_by === 'registered') {139 $query .= ' ORDER BY registered ';140 } elseif ( $order_by === 'lastupdated') {141 $ query .= ' ORDER BY last_updated';142 } elseif ( $order_by === 'blogname') {129 if ( 'registered' === $order_by ) { 130 // registered is a valid field name. 131 } elseif ( 'lastupdated' === $order_by ) { 132 $order_by = 'last_updated'; 133 } elseif ( 'blogname' === $order_by ) { 143 134 if ( is_subdomain_install() ) { 144 $ query .= ' ORDER BY domain';135 $order_by = 'domain'; 145 136 } else { 146 $ query .= ' ORDER BY path';137 $order_by = 'path'; 147 138 } 148 } elseif ( $order_by === 'blog_id') {149 $ query .= ' ORDER BY blog_id';150 } else {151 $order_by = null;139 } elseif ( 'blog_id' === $order_by ) { 140 $order_by = 'id'; 141 } elseif ( ! $order_by ) { 142 $order_by = false; 152 143 } 153 144 154 if ( isset( $order_by ) ) { 155 $order = ( isset( $_REQUEST['order'] ) && 'DESC' === strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC"; 156 $query .= $order; 145 $args['orderby'] = $order_by; 146 147 if ( $order_by ) { 148 $args['order'] = ( isset( $_REQUEST['order'] ) && 'DESC' === strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC"; 157 149 } 158 150 159 // Don't do an unbounded count on large networks 160 if ( ! wp_is_large_network() ) 161 $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT( blog_id )', $query ) ); 151 if ( wp_is_large_network() ) { 152 $args['no_found_rows'] = true; 153 } else { 154 $args['no_found_rows'] = false; 155 } 162 156 163 $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page ); 164 $this->items = $wpdb->get_results( $query, ARRAY_A ); 157 $_sites = get_sites( $args ); 158 if ( is_array( $_sites ) ) { 159 update_site_cache( $_sites ); 165 160 166 if ( wp_is_large_network() )167 $total = count($this->items);161 $this->items = array_slice( $_sites, 0, $per_page ); 162 } 168 163 164 $total_sites = get_sites( array_merge( $args, array( 165 'count' => true, 166 'offset' => 0, 167 'number' => 0, 168 ) ) ); 169 169 170 $this->set_pagination_args( array( 170 'total_items' => $total ,171 'total_items' => $total_sites, 171 172 'per_page' => $per_page, 172 173 ) ); 173 174 } … … 445 446 */ 446 447 public function display_rows() { 447 448 foreach ( $this->items as $blog ) { 449 $blog = $blog->to_array(); 448 450 $class = ''; 449 451 reset( $this->status_list ); 450 452 -
tests/phpunit/tests/multisite/wpMSSitesListTable.php
73 73 74 74 $expected = array( 75 75 self::$site_ids['wordpress.org/foo/'], 76 self::$site_ids['wordpress.org/foo/bar/'], 77 self::$site_ids['wordpress.org/afoo/'], 76 78 self::$site_ids['make.wordpress.org/foo/'], 77 79 self::$site_ids['www.w.org/foo/'], 80 self::$site_ids['www.w.org/foo/bar/'], 78 81 ); 79 82 80 83 $this->assertEqualSets( $expected, $items ); … … 131 134 132 135 $expected = array( 133 136 self::$site_ids['test.example.org/'], 137 self::$site_ids['test2.example.org/'], 138 self::$site_ids['test3.example.org/zig/'], 139 self::$site_ids['atest.example.org/'], 134 140 ); 135 141 136 142 $this->assertEqualSets( $expected, $items ); … … 154 160 self::$site_ids['test.example.org/'], 155 161 self::$site_ids['test2.example.org/'], 156 162 self::$site_ids['test3.example.org/zig/'], 163 self::$site_ids['atest.example.org/'], 157 164 ); 158 165 159 166 $this->assertEqualSets( $expected, $items ); … … 176 183 $expected = array( 177 184 self::$site_ids['wordpress.org/foo/'], 178 185 self::$site_ids['wordpress.org/foo/bar/'], 186 self::$site_ids['wordpress.org/afoo/'], 179 187 self::$site_ids['make.wordpress.org/foo/'], 180 188 self::$site_ids['www.w.org/foo/'], 181 189 self::$site_ids['www.w.org/foo/bar/'],