<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[BuddyPress] [3219] branches/1.2/bp-core/bp-core-catchuri.php:
  Carefully clean up bp_core_set_uri_globals.</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd>3219</dd>
<dt>Author</dt> <dd>johnjamesjacoby</dd>
<dt>Date</dt> <dd>2010-08-26 23:14:46 +0000 (Thu, 26 Aug 2010)</dd>
</dl>

<h3>Log Message</h3>
<pre>Carefully clean up bp_core_set_uri_globals. Fixes #2604. Props boonebgorges.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branches12bpcorebpcorecatchuriphp">branches/1.2/bp-core/bp-core-catchuri.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branches12bpcorebpcorecatchuriphp"></a>
<div class="modfile"><h4>Modified: branches/1.2/bp-core/bp-core-catchuri.php (3218 => 3219)</h4>
<pre class="diff"><span>
<span class="info">--- branches/1.2/bp-core/bp-core-catchuri.php        2010-08-25 17:34:58 UTC (rev 3218)
+++ branches/1.2/bp-core/bp-core-catchuri.php        2010-08-26 23:14:46 UTC (rev 3219)
</span><span class="lines">@@ -32,12 +32,12 @@
</span><span class="cx">         global $bp_unfiltered_uri;
</span><span class="cx">         global $bp, $current_blog;
</span><span class="cx"> 
</span><del>-        if ( !defined( 'BP_ENABLE_MULTIBLOG' ) &amp;&amp; bp_core_is_multisite() ) {
-                /* Only catch URI's on the root blog if we are not running BP on multiple blogs */
</del><ins>+        // Only catch URI's on the root blog if we are not running BP on multiple blogs
+        if ( !defined( 'BP_ENABLE_MULTIBLOG' ) &amp;&amp; bp_core_is_multisite() )
</ins><span class="cx">                 if ( BP_ROOT_BLOG != (int) $current_blog-&gt;blog_id )
</span><span class="cx">                         return false;
</span><del>-        }
</del><span class="cx"> 
</span><ins>+        // Ajax or not?
</ins><span class="cx">         if ( strpos( $_SERVER['REQUEST_URI'], 'wp-load.php' ) )
</span><span class="cx">                 $path = bp_core_referrer();
</span><span class="cx">         else
</span><span class="lines">@@ -45,61 +45,72 @@
</span><span class="cx"> 
</span><span class="cx">         $path = apply_filters( 'bp_uri', $path );
</span><span class="cx"> 
</span><del>-        // Firstly, take GET variables off the URL to avoid problems,
-        // they are still registered in the global $_GET variable */
</del><ins>+        // Take GET variables off the URL to avoid problems,
+        // they are still registered in the global $_GET variable
</ins><span class="cx">         $noget = substr( $path, 0, strpos( $path, '?' ) );
</span><del>-        if ( $noget != '' ) $path = $noget;
</del><ins>+        if ( $noget != '' )
+                $path = $noget;
</ins><span class="cx"> 
</span><del>-        /* Fetch the current URI and explode each part separated by '/' into an array */
-        $bp_uri = explode( &quot;/&quot;, $path );
</del><ins>+        // Fetch the current URI and explode each part separated by '/' into an array
+        $bp_uri = explode( '/', $path );
</ins><span class="cx"> 
</span><del>-        /* Loop and remove empties */
</del><ins>+        // Loop and remove empties
</ins><span class="cx">         foreach ( (array)$bp_uri as $key =&gt; $uri_chunk )
</span><span class="cx">                 if ( empty( $bp_uri[$key] ) ) unset( $bp_uri[$key] );
</span><span class="cx"> 
</span><ins>+        // Running off blog other than root
</ins><span class="cx">         if ( defined( 'BP_ENABLE_MULTIBLOG' ) || 1 != BP_ROOT_BLOG ) {
</span><del>-                /* If we are running BuddyPress on any blog, not just a root blog, we need to first
-                   shift off the blog name if we are running a subdirectory install of WPMU. */
-                if ( $current_blog-&gt;path != '/' )
-                        array_shift( $bp_uri );
</del><ins>+
+                // Any subdirectory names must be removed from $bp_uri.
+                // This includes two cases: (1) when WP is installed in a subdirectory,
+                // and (2) when BP is running on secondary blog of a subdirectory
+                // multisite installation. Phew!
+                if ( $chunks = explode( '/', $current_blog-&gt;path ) ) {
+                        foreach( $chunks as $key =&gt; $chunk ) {
+                                $bkey = array_search( $chunk, $bp_uri );
+
+                                if ( $bkey !== false )
+                                        unset( $bp_uri[$bkey] );
+
+                                $bp_uri = array_values( $bp_uri );
+                        }
+                }
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        /* Set the indexes, these are incresed by one if we are not on a VHOST install */
</del><ins>+        // Set the indexes, these are incresed by one if we are not on a VHOST install
</ins><span class="cx">         $component_index = 0;
</span><del>-        $action_index = $component_index + 1;
</del><ins>+        $action_index    = $component_index + 1;
</ins><span class="cx"> 
</span><span class="cx">         // If this is a WordPress page, return from the function.
</span><span class="cx">         if ( is_page( $bp_uri[$component_index] ) )
</span><span class="cx">                 return false;
</span><span class="cx"> 
</span><del>-        /* Get site path items */
</del><ins>+        // Get site path items
</ins><span class="cx">         $paths = explode( '/', bp_core_get_site_path() );
</span><span class="cx"> 
</span><del>-        /* Take empties off the end of path */
</del><ins>+        // Take empties off the end of path
</ins><span class="cx">         if ( empty( $paths[count($paths) - 1] ) )
</span><span class="cx">                 array_pop( $paths );
</span><span class="cx"> 
</span><del>-        /* Take empties off the start of path */
</del><ins>+        // Take empties off the start of path
</ins><span class="cx">         if ( empty( $paths[0] ) )
</span><span class="cx">                 array_shift( $paths );
</span><span class="cx"> 
</span><del>-        foreach ( (array)$bp_uri as $key =&gt; $uri_chunk ) {
-                if ( in_array( $uri_chunk, $paths )) {
</del><ins>+        foreach ( (array)$bp_uri as $key =&gt; $uri_chunk )
+                if ( in_array( $uri_chunk, $paths ))
</ins><span class="cx">                         unset( $bp_uri[$key] );
</span><del>-                }
-        }
</del><span class="cx"> 
</span><del>-        /* Reset the keys by merging with an empty array */
-        $bp_uri = array_merge( array(), $bp_uri );
</del><ins>+        // Reset the keys by merging with an empty array
+        $bp_uri            = array_merge( array(), $bp_uri );
</ins><span class="cx">         $bp_unfiltered_uri = $bp_uri;
</span><span class="cx"> 
</span><del>-        /* If we are under anything with a members slug, set the correct globals */
</del><ins>+        // If we are under anything with a members slug, set the correct globals
</ins><span class="cx">         if ( $bp_uri[0] == BP_MEMBERS_SLUG ) {
</span><del>-                $is_member_page = true;
</del><ins>+                $is_member_page    = true;
</ins><span class="cx">                 $is_root_component = true;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        /* Catch a member page and set the current member ID */
</del><ins>+        // Catch a member page and set the current member ID
</ins><span class="cx">         if ( !defined( 'BP_ENABLE_ROOT_PROFILES' ) ) {
</span><span class="cx">                 if ( ( $bp_uri[0] == BP_MEMBERS_SLUG &amp;&amp; !empty( $bp_uri[1] ) ) || in_array( 'wp-load.php', $bp_uri ) ) {
</span><span class="cx">                         // We are within a member page, set up user id globals
</span><span class="lines">@@ -111,12 +122,12 @@
</span><span class="cx">                         unset($bp_uri[0]);
</span><span class="cx">                         unset($bp_uri[1]);
</span><span class="cx"> 
</span><del>-                        /* Reset the keys by merging with an empty array */
</del><ins>+                        // Reset the keys by merging with an empty array
</ins><span class="cx">                         $bp_uri = array_merge( array(), $bp_uri );
</span><span class="cx">                 }
</span><span class="cx">         } else {
</span><span class="cx">                 if ( get_userdatabylogin( $bp_uri[0] ) || in_array( 'wp-load.php', $bp_uri ) ) {
</span><del>-                        $is_member_page = true;
</del><ins>+                        $is_member_page    = true;
</ins><span class="cx">                         $is_root_component = true;
</span><span class="cx"> 
</span><span class="cx">                         // We are within a member page, set up user id globals
</span><span class="lines">@@ -127,12 +138,12 @@
</span><span class="cx"> 
</span><span class="cx">                         unset($bp_uri[0]);
</span><span class="cx"> 
</span><del>-                        /* Reset the keys by merging with an empty array */
</del><ins>+                        // Reset the keys by merging with an empty array
</ins><span class="cx">                         $bp_uri = array_merge( array(), $bp_uri );
</span><span class="cx">                 }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if ( !isset($is_root_component) )
</del><ins>+        if ( !isset( $is_root_component ) )
</ins><span class="cx">                 $is_root_component = in_array( $bp_uri[0], $bp-&gt;root_components );
</span><span class="cx"> 
</span><span class="cx">         if ( !is_subdomain_install() &amp;&amp; !$is_root_component ) {
</span><span class="lines">@@ -140,24 +151,24 @@
</span><span class="cx">                 $action_index++;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        /* Set the current component */
</del><ins>+        // Set the current component
</ins><span class="cx">         $current_component = $bp_uri[$component_index];
</span><span class="cx"> 
</span><del>-        /* Set the current action */
-        $current_action = $bp_uri[$action_index];
</del><ins>+        // Set the current action
+        $current_action    = $bp_uri[$action_index];
</ins><span class="cx"> 
</span><del>-        /* Set the entire URI as the action variables, we will unset the current_component and action in a second */
-        $action_variables = $bp_uri;
</del><ins>+        // Set the entire URI as the action variables, we will unset the current_component and action in a second
+        $action_variables  = $bp_uri;
</ins><span class="cx"> 
</span><del>-        /* Unset the current_component and action from action_variables */
-        unset($action_variables[$component_index]);
-        unset($action_variables[$action_index]);
</del><ins>+        // Unset the current_component and action from action_variables
+        unset( $action_variables[$component_index] );
+        unset( $action_variables[$action_index] );
</ins><span class="cx"> 
</span><del>-        /* Remove the username from action variables if this is not a VHOST install */
</del><ins>+        // Remove the username from action variables if this is not a VHOST install
</ins><span class="cx">         if ( !is_subdomain_install() &amp;&amp; !$is_root_component )
</span><del>-                array_shift($action_variables);
</del><ins>+                array_shift( $action_variables );
</ins><span class="cx"> 
</span><del>-        /* Reset the keys by merging with an empty array */
</del><ins>+        // Reset the keys by merging with an empty array
</ins><span class="cx">         $action_variables = array_merge( array(), $action_variables );
</span><span class="cx"> }
</span><span class="cx"> add_action( 'bp_loaded', 'bp_core_set_uri_globals', 4 );
</span></span></pre>
</div>
</div>

</body>
</html>