Skip to:
Content

BuddyPress.org

Changeset 5425


Ignore:
Timestamp:
11/30/2011 09:43:32 PM (15 years ago)
Author:
boonebgorges
Message:

Moves bp_redirect_canonical to bp-core-catchuri.php with other URI-related functions. Readds error/success messages before redirect so that they're not lost in a cookie black hole. Fixes #3786

Location:
trunk/bp-core
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/bp-core-catchuri.php

    r5412 r5425  
    509509add_action( 'login_form_bpnoaccess', 'bp_core_no_access_wp_login_error' );
    510510
     511/**
     512 * Canonicalizes BuddyPress URLs
     513 *
     514 * This function ensures that requests for BuddyPress content are always redirected to their
     515 * most specific, trailingslashed versions.
     516 *
     517 * @since 1.6
     518 * @see BP_Members_Component::setup_globals() where $bp->redirect_stack['base_url'] and
     519 *   ['component'] may be set
     520 * @see bp_core_new_nav_item() where $bp->redirect_stack['action'] may be set
     521 */
     522function bp_redirect_canonical() {
     523        global $bp;
     524       
     525        if ( !bp_is_blog_page() && apply_filters( 'bp_do_redirect_canonical', true ) ) {
     526                // build the URL in the address bar
     527                $requested_url  = is_ssl() ? 'https://' : 'http://';
     528                $requested_url .= $_SERVER['HTTP_HOST'];
     529                $requested_url .= $_SERVER['REQUEST_URI'];
     530               
     531                // Stash query args
     532                $url_stack      = explode( '?', $requested_url );
     533                $req_url_clean  = $url_stack[0];
     534               
     535                // Process the redirect stack
     536                if ( isset( $bp->redirect_stack['base_url'] ) ) {
     537                        $url_stack[0] = $bp->redirect_stack['base_url'];
     538                }
     539                               
     540                if ( isset( $bp->redirect_stack['component'] ) ) {
     541                        $url_stack[0] = trailingslashit( $url_stack[0] . $bp->redirect_stack['component'] );
     542                }
     543                               
     544                if ( isset( $bp->redirect_stack['action'] ) ) {
     545                        $url_stack[0] = trailingslashit( $url_stack[0] . $bp->redirect_stack['action'] );
     546                }
     547                                       
     548                if ( !empty( $bp->redirect_stack['action_variables'] ) ) {
     549                        foreach( (array)$bp->redirect_stack['action_variables'] as $av ) {
     550                                $url_stack[0] = trailingslashit( $url_stack[0] . $av );
     551                        }
     552                }
     553               
     554                // Add trailing slash
     555                $url_stack[0] = trailingslashit( $url_stack[0] );
     556               
     557                // Only redirect if we've assembled a URL different from the request
     558                if ( $url_stack[0] !== $req_url_clean ) {
     559                       
     560                        // Template messages have been deleted from the cookie by this point, so
     561                        // they must be readded before redirecting
     562                        if ( isset( $bp->template_message ) ) {
     563                                $message      = stripslashes( $bp->template_message );
     564                                $message_type = isset( $bp->template_message_type ) ? $bp->template_message_type : 'success';
     565                               
     566                                bp_core_add_message( $message, $message_type );
     567                        }
     568                       
     569                        bp_core_redirect( implode( '?', $url_stack ) );
     570                }
     571        }
     572}
     573add_action( 'bp_core_pre_load_template', 'bp_redirect_canonical' );
     574
    511575?>
  • trunk/bp-core/bp-core-functions.php

    r5412 r5425  
    16021602}
    16031603
    1604 /**
    1605  * Canonicalizes BuddyPress URLs
    1606  *
    1607  * This function ensures that requests for BuddyPress content are always redirected to their
    1608  * most specific, trailingslashed versions.
    1609  *
    1610  * @since 1.6
    1611  * @see BP_Members_Component::setup_globals() where $bp->redirect_stack['base_url'] and
    1612  *   ['component'] may be set
    1613  * @see bp_core_new_nav_item() where $bp->redirect_stack['action'] may be set
    1614  */
    1615 function bp_redirect_canonical() {
    1616         global $bp;
    1617        
    1618         if ( !bp_is_blog_page() && apply_filters( 'bp_do_redirect_canonical', true ) ) {
    1619                 // build the URL in the address bar
    1620                 $requested_url  = is_ssl() ? 'https://' : 'http://';
    1621                 $requested_url .= $_SERVER['HTTP_HOST'];
    1622                 $requested_url .= $_SERVER['REQUEST_URI'];
    1623                
    1624                 // Stash query args
    1625                 $url_stack      = explode( '?', $requested_url );
    1626                 $req_url_clean  = $url_stack[0];
    1627                
    1628                 // Process the redirect stack
    1629                 if ( isset( $bp->redirect_stack['base_url'] ) ) {
    1630                         $url_stack[0] = $bp->redirect_stack['base_url'];
    1631                 }
    1632                                
    1633                 if ( isset( $bp->redirect_stack['component'] ) ) {
    1634                         $url_stack[0] = trailingslashit( $url_stack[0] . $bp->redirect_stack['component'] );
    1635                 }
    1636                                
    1637                 if ( isset( $bp->redirect_stack['action'] ) ) {
    1638                         $url_stack[0] = trailingslashit( $url_stack[0] . $bp->redirect_stack['action'] );
    1639                 }
    1640                                        
    1641                 if ( !empty( $bp->redirect_stack['action_variables'] ) ) {
    1642                         foreach( (array)$bp->redirect_stack['action_variables'] as $av ) {
    1643                                 $url_stack[0] = trailingslashit( $url_stack[0] . $av );
    1644                         }
    1645                 }
    1646                
    1647                 // Add trailing slash
    1648                 $url_stack[0] = trailingslashit( $url_stack[0] );
    1649                
    1650                 // Only redirect if we've assembled a URL different from the request
    1651                 if ( $url_stack[0] !== $req_url_clean ) {
    1652                         bp_core_redirect( implode( '?', $url_stack ) );
    1653                 }
    1654         }
    1655 }
    1656 add_action( 'bp_core_pre_load_template', 'bp_redirect_canonical' );
    16571604?>
Note: See TracChangeset for help on using the changeset viewer.