Skip to:
Content

bbPress.org

Changeset 6231


Ignore:
Timestamp:
01/12/2017 11:24:12 PM (8 years ago)
Author:
netweb
Message:

Tests: Rely on WP Core's version of go_to().

Our version of go_to(), inherited from BuddyPress was very messy, and since it was copied a few years ago, it has been refactored in WordPress. We can remove this duplication which makes for a cleaner method, and rely on the upstream version.

This also helps avoid false positives in tools that check for use of deprecated WordPress functions.

There was a conditional block in the old go_to() that was for compatibility with WordPress <3.9.

See also: buddypress:changeset:11254

Fixes #3015.
Props DJPaul, netweb.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/includes/testcase.php

    r6076 r6231  
    6262
    6363    function go_to( $url ) {
    64         global $wpdb;
    65         global $current_site, $current_blog, $blog_id, $switched, $_wp_switched_stack, $public, $table_prefix, $current_user, $wp_roles;
    6664
    67         // note: the WP and WP_Query classes like to silently fetch parameters
    68         // from all over the place (globals, GET, etc), which makes it tricky
    69         // to run them more than once without very carefully clearing everything
    70         $_GET    = $_POST    = array();
    71         foreach ( array( 'query_string', 'id', 'postdata', 'authordata', 'day', 'currentmonth', 'page', 'pages', 'multipage', 'more', 'numpages', 'pagenow' ) as $v ) {
    72             if ( isset( $GLOBALS[ $v ] ) ) {
    73                 unset( $GLOBALS[ $v ] );
    74             }
    75         }
     65        parent::go_to( $url );
    7666
    77         $parts = parse_url( $url );
    78         if ( isset( $parts['scheme'] ) ) {
    79             // set the HTTP_HOST
    80             $GLOBALS['_SERVER']['HTTP_HOST'] = $parts['host'];
    81 
    82             $req = $parts['path'];
    83             if ( isset( $parts['query'] ) ) {
    84                 $req .= '?' . $parts['query'];
    85                 // parse the url query vars into $_GET
    86                 parse_str( $parts['query'], $_GET );
    87             }
    88         } else {
    89             $req = $url;
    90         }
    91 
    92         if ( ! isset( $parts['query'] ) ) {
    93             $parts['query'] = '';
    94         }
    95 
    96         // Scheme
    97         if ( 0 === strpos( $req, '/wp-admin' ) && force_ssl_admin() ) {
    98             $_SERVER['HTTPS'] = 'on';
    99         } else {
    100             unset( $_SERVER['HTTPS'] );
    101         }
    102 
    103         // Set this for bp_core_set_uri_globals()
    104         $GLOBALS['_SERVER']['REQUEST_URI'] = $req;
    105         unset( $_SERVER['PATH_INFO'] );
    106 
    107         // setup $current_site and $current_blog globals for multisite based on
    108         // REQUEST_URI; mostly copied from /wp-includes/ms-settings.php
    109         if ( is_multisite() ) {
    110             $current_blog    = $current_site     = $blog_id      = null;
    111 
    112             $domain = addslashes( $_SERVER['HTTP_HOST'] );
    113             if ( false !== strpos( $domain, ':' ) ) {
    114                 if ( substr( $domain, -3 ) == ':80' ) {
    115                     $domain = substr( $domain, 0, -3 );
    116                     $_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -3 );
    117                 } elseif ( substr( $domain, -4 ) == ':443' ) {
    118                     $domain = substr( $domain, 0, -4 );
    119                     $_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -4 );
    120                 }
    121             }
    122             $path = stripslashes( $_SERVER['REQUEST_URI'] );
    123 
    124             // Get a cleaned-up version of the wp_version string
    125             // (strip -src, -alpha, etc which may trip up version_compare())
    126             $wp_version = (float) $GLOBALS['wp_version'];
    127             if ( version_compare( $wp_version, '4.4', '>=' ) ) {
    128                 if ( ! $current_site = wp_cache_get( 'current_network', 'site-options' ) ) {
    129                     // Are there even two networks installed?
    130                     $one_network = $wpdb->get_row( "SELECT * FROM $wpdb->site LIMIT 2" ); // [sic]
    131                     if ( 1 === $wpdb->num_rows ) {
    132                         $current_site = new WP_Network( $one_network );
    133                         wp_cache_add( 'current_network', $current_site, 'site-options' );
    134                     } elseif ( 0 === $wpdb->num_rows ) {
    135                         ms_not_installed( $domain, $path );
    136                     }
    137                 }
    138                 if ( empty( $current_site ) ) {
    139                     $current_site = WP_Network::get_by_path( $domain, $path, 1 );
    140                 }
    141 
    142                 // The network declared by the site trumps any constants.
    143                 if ( $current_blog && $current_blog->site_id != $current_site->id ) {
    144                     $current_site = WP_Network::get_instance( $current_blog->site_id );
    145                 }
    146 
    147                 if ( empty( $current_site ) ) {
    148                     do_action( 'ms_network_not_found', $domain, $path );
    149 
    150                     ms_not_installed( $domain, $path );
    151                 } elseif ( $path === $current_site->path ) {
    152                     $current_blog = get_site_by_path( $domain, $path );
    153                 } else {
    154                     // Search the network path + one more path segment (on top of the network path).
    155                     $current_blog = get_site_by_path( $domain, $path, substr_count( $current_site->path, '/' ) );
    156                 }
    157 
    158                 // Figure out the current network's main site.
    159                 if ( empty( $current_site->blog_id ) ) {
    160                     if ( $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) {
    161                         $current_site->blog_id = $current_blog->blog_id;
    162                     } elseif ( ! $current_site->blog_id = wp_cache_get( 'network:' . $current_site->id . ':main_site', 'site-options' ) ) {
    163                         $current_site->blog_id = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s",
    164                             $current_site->domain, $current_site->path ) );
    165                         wp_cache_add( 'network:' . $current_site->id . ':main_site', $current_site->blog_id, 'site-options' );
    166                     }
    167                 }
    168 
    169                 $blog_id = $current_blog->blog_id;
    170                 $public  = $current_blog->public;
    171 
    172                 if ( empty( $current_blog->site_id ) ) {
    173                     // This dates to [MU134] and shouldn't be relevant anymore,
    174                     // but it could be possible for arguments passed to insert_blog() etc.
    175                     $current_blog->site_id = 1;
    176                 }
    177 
    178                 $site_id = $current_blog->site_id;
    179                 wp_load_core_site_options( $site_id );
    180 
    181             } elseif ( version_compare( $wp_version, '3.9', '>=' ) ) {
    182 
    183                 if ( is_admin() ) {
    184                     $path = preg_replace( '#(.*)/wp-admin/.*#', '$1/', $path );
    185                 }
    186 
    187                 list( $path ) = explode( '?', $path );
    188 
    189                 // Are there even two networks installed?
    190                 $one_network = $wpdb->get_row( "SELECT * FROM $wpdb->site LIMIT 2" ); // [sic]
    191                 if ( 1 === $wpdb->num_rows ) {
    192                     $current_site = wp_get_network( $one_network );
    193                 } elseif ( 0 === $wpdb->num_rows ) {
    194                     ms_not_installed();
    195                 }
    196 
    197                 if ( empty( $current_site ) ) {
    198                     $current_site = get_network_by_path( $domain, $path, 1 );
    199                 }
    200 
    201                 if ( empty( $current_site ) ) {
    202                     ms_not_installed();
    203                 } elseif ( $path === $current_site->path ) {
    204                     $current_blog = get_site_by_path( $domain, $path );
    205 
    206                 // Search the network path + one more path segment (on top of the network path).
    207                 } else {
    208                     $current_blog = get_site_by_path( $domain, $path, substr_count( $current_site->path, '/' ) );
    209                 }
    210 
    211                 // The network declared by the site trumps any constants.
    212                 if ( $current_blog && $current_blog->site_id != $current_site->id ) {
    213                     $current_site = wp_get_network( $current_blog->site_id );
    214                 }
    215 
    216                 // If we don't have a network by now, we have a problem.
    217                 if ( empty( $current_site ) ) {
    218                     ms_not_installed();
    219                 }
    220 
    221                 // @todo What if the domain of the network doesn't match the current site?
    222                 $current_site->cookie_domain = $current_site->domain;
    223                 if ( 'www.' === substr( $current_site->cookie_domain, 0, 4 ) ) {
    224                     $current_site->cookie_domain = substr( $current_site->cookie_domain, 4 );
    225                 }
    226 
    227                 // Figure out the current network's main site.
    228                 if ( ! isset( $current_site->blog_id ) ) {
    229                     if ( $current_blog && $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) {
    230                         $current_site->blog_id = $current_blog->blog_id;
    231 
    232                     // @todo we should be able to cache the blog ID of a network's main site easily.
    233                     } else {
    234                         $current_site->blog_id = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s", $current_site->domain, $current_site->path ) );
    235                     }
    236                 }
    237 
    238                 $blog_id = $current_blog->blog_id;
    239                 $public  = $current_blog->public;
    240 
    241                 // This dates to [MU134] and shouldn't be relevant anymore,
    242                 // but it could be possible for arguments passed to insert_blog() etc.
    243                 if ( empty( $current_blog->site_id ) ) {
    244                     $current_blog->site_id = 1;
    245                 }
    246 
    247                 $site_id = $current_blog->site_id;
    248                 wp_load_core_site_options( $site_id );
    249 
    250             // Pre WP 3.9
    251             } else {
    252 
    253                 $domain        = rtrim( $domain, '.' );
    254                 $cookie_domain = $domain;
    255                 if ( 'www.' == substr( $cookie_domain, 0, 4 ) ) {
    256                     $cookie_domain   = substr( $cookie_domain, 4 );
    257                 }
    258 
    259                 $path = preg_replace( '|([a-z0-9-]+.php.*)|', '', $GLOBALS['_SERVER']['REQUEST_URI'] );
    260                 $path = str_replace( '/wp-admin/', '/', $path );
    261                 $path = preg_replace( '|(/[a-z0-9-]+?/).*|', '$1', $path );
    262 
    263                 $GLOBALS['current_site'] = wpmu_current_site();
    264                 if ( ! isset( $GLOBALS['current_site']->blog_id ) && ! empty( $GLOBALS['current_site'] ) ) {
    265                     $GLOBALS['current_site']->blog_id    = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s", $GLOBALS['current_site']->domain, $GLOBALS['current_site']->path ) );
    266                 }
    267 
    268                 $blogname = htmlspecialchars( substr( $GLOBALS['_SERVER']['REQUEST_URI'], strlen( $path ) ) );
    269                 if ( false !== strpos( $blogname, '/' ) ) {
    270                     $blogname            = substr( $blogname, 0, strpos( $blogname, '/' ) );
    271                 }
    272 
    273                 if ( false !== strpos( $blogname, '?' ) ) {
    274                     $blogname = substr( $blogname, 0, strpos( $blogname, '?' ) );
    275                 }
    276 
    277                 $reserved_blognames  = array( 'page', 'comments', 'blog', 'wp-admin', 'wp-includes', 'wp-content', 'files', 'feed' );
    278                 if ( $blogname != '' && ! in_array( $blogname, $reserved_blognames ) && ! is_file( $blogname ) ) {
    279                     $path .= $blogname . '/';
    280                 }
    281 
    282                 $GLOBALS['current_blog'] = get_blog_details( array( 'domain' => $domain, 'path' => $path ), false );
    283 
    284                 unset( $reserved_blognames );
    285 
    286                 if ( $GLOBALS['current_site'] && ! $GLOBALS['current_blog'] ) {
    287                     $GLOBALS['current_blog'] = get_blog_details( array( 'domain' => $GLOBALS['current_site']->domain, 'path' => $GLOBALS['current_site']->path ), false );
    288                 }
    289 
    290                 $GLOBALS['blog_id'] = $GLOBALS['current_blog']->blog_id;
    291             }
    292 
    293             // Emulate a switch_to_blog()
    294             $table_prefix = $wpdb->get_blog_prefix( $current_blog->blog_id );
    295             $wpdb->set_blog_id( $current_blog->blog_id, $current_blog->site_id );
    296             $_wp_switched_stack = array();
    297             $switched = false;
    298 
    299             if ( ! isset( $current_site->site_name ) ) {
    300                 $current_site->site_name = get_site_option( 'site_name' );
    301                 if ( ! $current_site->site_name ) {
    302                     $current_site->site_name = ucfirst( $current_site->domain );
    303                 }
    304             }
    305         }
    306 
    307         $this->flush_cache();
    308         unset( $GLOBALS['wp_query'], $GLOBALS['wp_the_query'] );
    309         $GLOBALS['wp_the_query'] = new WP_Query();
    310         $GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
    311         $GLOBALS['wp'] = new WP();
    312 
    313         // clean out globals to stop them polluting wp and wp_query
    314         foreach ( $GLOBALS['wp']->public_query_vars as $v ) {
    315             unset( $GLOBALS[ $v ] );
    316         }
    317 
    318         foreach ( $GLOBALS['wp']->private_query_vars as $v ) {
    319             unset( $GLOBALS[ $v ] );
    320         }
    321 
    322         $GLOBALS['wp']->main( $parts['query'] );
    323 
    324         $wp_roles->reinit();
    325         $current_user = wp_get_current_user();
    326         $current_user->for_blog( $blog_id );
    327 
    328         $this->clean_up_global_scope();
    32967        do_action( 'bbp_init' );
    33068    }
Note: See TracChangeset for help on using the changeset viewer.