Ticket #6286: 6286.2.patch
File 6286.2.patch, 17.7 KB (added by , 8 years ago) |
---|
-
src/bp-core/bp-core-actions.php
diff --git a/src/bp-core/bp-core-actions.php b/src/bp-core/bp-core-actions.php index 1a26da0..3d5cf14 100644
a b add_action( 'bp_loaded', 'bp_setup_components', 2 ); 55 55 add_action( 'bp_loaded', 'bp_include', 4 ); 56 56 add_action( 'bp_loaded', 'bp_setup_cache_groups', 5 ); 57 57 add_action( 'bp_loaded', 'bp_setup_widgets', 6 ); 58 add_action( 'bp_loaded', 'bp_register_member_types', 8 ); 58 59 add_action( 'bp_loaded', 'bp_register_theme_packages', 12 ); 59 60 add_action( 'bp_loaded', 'bp_register_theme_directory', 14 ); 60 61 -
src/bp-core/bp-core-catchuri.php
diff --git a/src/bp-core/bp-core-catchuri.php b/src/bp-core/bp-core-catchuri.php index 437aee6..7221ad2 100644
a b function bp_core_set_uri_globals() { 258 258 // If members component, do more work to find the actual component 259 259 if ( 'members' == $match->key ) { 260 260 261 // Viewing a specific user 262 if ( !empty( $bp_uri[$uri_offset + 1] ) ) { 261 $after_member_slug = false; 262 if ( ! empty( $bp_uri[ $uri_offset + 1 ] ) ) { 263 $after_member_slug = $bp_uri[ $uri_offset + 1 ]; 264 } 263 265 266 // Are we viewing a specific user? 267 if ( $after_member_slug ) { 264 268 // Switch the displayed_user based on compatibility mode 265 269 if ( bp_is_username_compatibility_mode() ) { 266 $bp->displayed_user->id = (int) bp_core_get_userid( urldecode( $ bp_uri[$uri_offset + 1]) );270 $bp->displayed_user->id = (int) bp_core_get_userid( urldecode( $after_member_slug ) ); 267 271 } else { 268 $bp->displayed_user->id = (int) bp_core_get_userid_from_nicename( urldecode( $bp_uri[$uri_offset + 1] ));272 $bp->displayed_user->id = (int) bp_core_get_userid_from_nicename( $after_member_slug ); 269 273 } 274 } 270 275 271 if ( !bp_displayed_user_id() ) { 276 // Is this a member type directory? 277 if ( ! bp_displayed_user_id() && $after_member_slug === apply_filters( 'bp_members_member_type_base', _x( 'type', 'member type URL base', 'buddypress' ) ) && ! empty( $bp_uri[ $uri_offset + 2 ] ) ) { 278 $matched_types = bp_get_member_types( array( 279 'has_directory' => true, 280 'directory_slug' => $bp_uri[ $uri_offset + 2 ], 281 ) ); 272 282 273 // Prevent components from loading their templates 274 $bp->current_component = ''; 283 if ( ! empty( $matched_types ) ) { 284 $bp->current_member_type = reset( $matched_types ); 285 unset( $bp_uri[ $uri_offset + 1 ] ); 286 } 287 } 288 289 // If the slug matches neither a member type nor a specific member, 404. 290 if ( ! bp_displayed_user_id() && ! bp_get_current_member_type() && $after_member_slug ) { 291 292 // Prevent components from loading their templates 293 $bp->current_component = ''; 294 295 bp_do_404(); 296 return; 297 } 275 298 299 // If the displayed user is marked as a spammer, 404 (unless logged- 300 // in user is a super admin) 301 if ( bp_displayed_user_id() && bp_is_user_spammer( bp_displayed_user_id() ) ) { 302 if ( bp_current_user_can( 'bp_moderate' ) ) { 303 bp_core_add_message( __( 'This user has been marked as a spammer. Only site admins can view this profile.', 'buddypress' ), 'warning' ); 304 } else { 276 305 bp_do_404(); 277 306 return; 278 307 } 308 } 279 309 280 // If the displayed user is marked as a spammer, 404 (unless logged- 281 // in user is a super admin) 282 if ( bp_displayed_user_id() && bp_is_user_spammer( bp_displayed_user_id() ) ) { 283 if ( bp_current_user_can( 'bp_moderate' ) ) { 284 bp_core_add_message( __( 'This user has been marked as a spammer. Only site admins can view this profile.', 'buddypress' ), 'warning' ); 285 } else { 286 bp_do_404(); 287 return; 288 } 289 } 290 291 // Bump the offset 310 // Bump the offset 311 if ( $after_member_slug && ! bp_get_current_member_type() ) { 292 312 if ( isset( $bp_uri[$uri_offset + 2] ) ) { 293 313 $bp_uri = array_merge( array(), array_slice( $bp_uri, $uri_offset + 2 ) ); 294 314 $bp->current_component = $bp_uri[0]; … … function bp_core_set_uri_globals() { 298 318 $bp_uri = array_merge( array(), array_slice( $bp_uri, $uri_offset + 2 ) ); 299 319 $bp->current_component = ''; 300 320 } 301 302 // Reset the offset303 $uri_offset = 0;304 321 } 322 323 // Reset the offset 324 $uri_offset = 0; 305 325 } 306 326 } 307 327 -
src/bp-core/bp-core-dependency.php
diff --git a/src/bp-core/bp-core-dependency.php b/src/bp-core/bp-core-dependency.php index 25f483a..a67fb6f 100644
a b function bp_setup_widgets() { 141 141 } 142 142 143 143 /** 144 * Fire the 'bp_register_widgets' action, where plugins should register widgets. 145 * 146 * @since BuddyPress (2.3.0) 147 */ 148 function bp_register_member_types() { 149 do_action( 'bp_register_member_types' ); 150 } 151 152 /** 144 153 * Fire the 'bp_setup_cache_groups' action, where cache groups are registered. 145 154 * 146 155 * @since BuddyPress (2.2.0) -
src/bp-loader.php
diff --git a/src/bp-loader.php b/src/bp-loader.php index ef4a8e1..73b0f58 100644
a b class BuddyPress { 81 81 public $action_variables = array(); 82 82 83 83 /** 84 * @var string Current member directory type. 85 */ 86 public $current_member_type = ''; 87 88 /** 84 89 * @var array Required components (core, members). 85 90 */ 86 91 public $required_components = array(); -
src/bp-members/bp-members-functions.php
diff --git a/src/bp-members/bp-members-functions.php b/src/bp-members/bp-members-functions.php index 01e9772..8659033 100644
a b function bp_register_member_type( $member_type, $args = array() ) { 2469 2469 2470 2470 $r = bp_parse_args( $args, array( 2471 2471 'labels' => array(), 2472 'has_directory' => true, 2472 2473 ), 'register_member_type' ); 2473 2474 2474 2475 $member_type = sanitize_key( $member_type ); … … function bp_register_member_type( $member_type, $args = array() ) { 2483 2484 'singular_name' => $default_name, 2484 2485 ), $r['labels'] ); 2485 2486 2487 // Directory slug. 2488 if ( $r['has_directory'] ) { 2489 // A string value is intepreted as the directory slug. Otherwise fall back on member type. 2490 if ( is_string( $r['has_directory'] ) ) { 2491 $directory_slug = $r['has_directory']; 2492 } else { 2493 $directory_slug = $member_type; 2494 } 2495 2496 // Sanitize for use in URLs. 2497 $r['directory_slug'] = sanitize_title( $directory_slug ); 2498 $r['has_directory'] = true; 2499 } else { 2500 $r['directory_slug'] = ''; 2501 $r['has_directory'] = false; 2502 } 2503 2486 2504 $bp->members->types[ $member_type ] = $type = (object) $r; 2487 2505 2488 2506 /** … … function bp_remove_member_type_on_user_delete( $user_id ) { 2714 2732 } 2715 2733 add_action( 'wpmu_delete_user', 'bp_remove_member_type_on_user_delete' ); 2716 2734 add_action( 'delete_user', 'bp_remove_member_type_on_user_delete' ); 2735 2736 /** 2737 * Get the "current" member type, if one is provided, in member directories. 2738 * 2739 * @since BuddyPress (2.3.0) 2740 * 2741 * @return string 2742 */ 2743 function bp_get_current_member_type() { 2744 return apply_filters( 'bp_get_current_member_type', buddypress()->current_member_type ); 2745 } -
src/bp-members/bp-members-template.php
diff --git a/src/bp-members/bp-members-template.php b/src/bp-members/bp-members-template.php index 2c6e258..574d1c8 100644
a b function bp_has_members( $args = '' ) { 515 515 $user_id = bp_displayed_user_id(); 516 516 } 517 517 518 $member_type = buddypress()->current_member_type; 519 if ( ! $member_type && ! empty( $_GET['member_type'] ) ) { 520 if ( is_array( $_GET['member_type'] ) ) { 521 $member_type = $_GET['member_type']; 522 } else { 523 // Can be a comma-separated list. 524 $member_type = explode( ',', $_GET['member_type'] ); 525 } 526 } 527 518 528 // type: active ( default ) | random | newest | popular | online | alphabetical 519 529 $r = bp_parse_args( $args, array( 520 530 'type' => 'active', … … function bp_has_members( $args = '' ) { 528 538 'exclude' => false, // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users 529 539 530 540 'user_id' => $user_id, // Pass a user_id to only show friends of this user 531 'member_type' => '',541 'member_type' => $member_type, 532 542 'search_terms' => null, // Pass search_terms to filter users by their profile data 533 543 534 544 'meta_key' => false, // Only return users with this usermeta … … function bp_loggedin_user_username() { 1796 1806 */ 1797 1807 return apply_filters( 'bp_get_loggedin_user_username', $username ); 1798 1808 } 1809 /** 1810 * Echo the current member type message. 1811 * 1812 * @since BuddyPress (2.3.0) 1813 */ 1814 function bp_current_member_type_message() { 1815 echo bp_get_current_member_type_message(); 1816 } 1817 /** 1818 * Generate the current member type message. 1819 * 1820 * @since BuddyPress (2.3.0) 1821 * 1822 * @return string 1823 */ 1824 function bp_get_current_member_type_message() { 1825 $type_object = bp_get_member_type_object( bp_get_current_member_type() ); 1826 1827 $message = sprintf( __( 'Viewing members of the type: %s', 'buddypress' ), '<strong>' . $type_object->labels['singular_name'] . '</strong>' ); 1828 1829 return apply_filters( 'bp_get_current_member_type_message', $message ); 1830 } 1799 1831 1800 1832 /** Signup Form ***************************************************************/ 1801 1833 -
src/bp-templates/bp-legacy/buddypress/members/members-loop.php
diff --git a/src/bp-templates/bp-legacy/buddypress/members/members-loop.php b/src/bp-templates/bp-legacy/buddypress/members/members-loop.php index deeb941..adad113 100644
a b 13 13 14 14 <?php do_action( 'bp_before_members_loop' ); ?> 15 15 16 <?php if ( bp_get_current_member_type() ) : ?> 17 <p class="current-member-type"><?php bp_current_member_type_message() ?></p> 18 <?php endif; ?> 19 16 20 <?php if ( bp_has_members( bp_ajax_querystring( 'members' ) ) ) : ?> 17 21 18 22 <div id="pag-top" class="pagination"> -
src/bp-templates/bp-legacy/css/buddypress.css
diff --git a/src/bp-templates/bp-legacy/css/buddypress.css b/src/bp-templates/bp-legacy/css/buddypress.css index 6c4bd55..9a64410 100644
a b body.activity-permalink #buddypress div.activity-comments div.acomment-content { 496 496 font-size: 90%; 497 497 padding: 1px 3px; 498 498 } 499 499 #buddypress .current-member-type { 500 font-style: italic; 501 } 500 502 #buddypress .dir-form { 501 503 clear: both; 502 504 } -
tests/phpunit/includes/testcase.php
diff --git a/tests/phpunit/includes/testcase.php b/tests/phpunit/includes/testcase.php index 2789e46..d14fe76 100644
a b class BP_UnitTestCase extends WP_UnitTestCase { 44 44 45 45 function clean_up_global_scope() { 46 46 buddypress()->bp_nav = buddypress()->bp_options_nav = buddypress()->action_variables = buddypress()->canonical_stack = buddypress()->unfiltered_uri = $GLOBALS['bp_unfiltered_uri'] = array(); 47 buddypress()->current_component = buddypress()->current_item = buddypress()->current_action = '';47 buddypress()->current_component = buddypress()->current_item = buddypress()->current_action = buddypress()->current_member_type = ''; 48 48 buddypress()->unfiltered_uri_offset = 0; 49 49 buddypress()->is_single_item = false; 50 50 buddypress()->current_user = new stdClass(); -
tests/phpunit/testcases/members/template.php
diff --git a/tests/phpunit/testcases/members/template.php b/tests/phpunit/testcases/members/template.php index d91d780..a1bcb40 100644
a b class BP_Tests_Members_Template extends BP_UnitTestCase { 132 132 } 133 133 134 134 /** 135 * @group bp_has_members 136 * @ticket BP6286 137 */ 138 public function test_bp_has_members_should_infer_member_type_from_get_param() { 139 bp_register_member_type( 'foo' ); 140 bp_register_member_type( 'bar' ); 141 $users = $this->factory->user->create_many( 3 ); 142 bp_set_member_type( $users[0], 'foo' ); 143 bp_set_member_type( $users[1], 'bar' ); 144 145 global $members_template; 146 $old_members_template = $members_template; 147 148 $old_get = $_GET; 149 $_GET['member_type'] = 'bar'; 150 151 bp_has_members(); 152 153 $members = is_array( $members_template->members ) ? array_values( $members_template->members ) : array(); 154 $member_ids = wp_list_pluck( $members, 'ID' ); 155 $this->assertEquals( array( $users[1] ), $member_ids ); 156 157 $GLOBALS['members_template'] = $old_members_template; 158 } 159 160 /** 161 * @group bp_has_members 162 * @ticket BP6286 163 */ 164 public function test_bp_has_members_should_infer_member_type_from_get_param_comma_sep() { 165 bp_register_member_type( 'foo' ); 166 bp_register_member_type( 'bar' ); 167 bp_register_member_type( 'baz' ); 168 $users = $this->factory->user->create_many( 4 ); 169 bp_set_member_type( $users[0], 'foo' ); 170 bp_set_member_type( $users[1], 'bar' ); 171 bp_set_member_type( $users[2], 'baz' ); 172 173 global $members_template; 174 $old_members_template = $members_template; 175 176 $old_get = $_GET; 177 $_GET['member_type'] = 'foo,bar'; 178 179 bp_has_members(); 180 181 $members = is_array( $members_template->members ) ? array_values( $members_template->members ) : array(); 182 $member_ids = wp_list_pluck( $members, 'ID' ); 183 $this->assertEqualSets( array( $users[0], $users[1] ), $member_ids ); 184 185 $GLOBALS['members_template'] = $old_members_template; 186 } 187 188 /** 135 189 * @group bp_get_member_last_active 136 190 */ 137 191 public function test_bp_get_member_last_active_default_params() { -
tests/phpunit/testcases/members/types.php
diff --git a/tests/phpunit/testcases/members/types.php b/tests/phpunit/testcases/members/types.php index bdec116..249049b 100644
a b class BP_Tests_Members_Types extends BP_UnitTestCase { 73 73 $this->assertSame( 'Bar', $object->labels['singular_name'] ); 74 74 } 75 75 76 /** 77 * @ticket BP6286 78 */ 79 public function test_bp_register_member_type_has_directory_should_default_to_true() { 80 $object = bp_register_member_type( 'foo', array( 81 'has_directory' => true, 82 ) ); 83 84 $this->assertTrue( $object->has_directory ); 85 $this->assertSame( 'foo', $object->directory_slug ); 86 } 87 88 /** 89 * @ticket BP6286 90 */ 91 public function test_bp_register_member_type_has_directory_true() { 92 $object = bp_register_member_type( 'foo', array( 93 'has_directory' => true, 94 ) ); 95 96 $this->assertTrue( $object->has_directory ); 97 $this->assertSame( 'foo', $object->directory_slug ); 98 } 99 100 /** 101 * @ticket BP6286 102 */ 103 public function test_bp_register_member_type_should_store_has_directory_false() { 104 $object = bp_register_member_type( 'foo', array( 105 'has_directory' => false, 106 ) ); 107 108 $this->assertFalse( $object->has_directory ); 109 $this->assertSame( '', $object->directory_slug ); 110 } 111 112 /** 113 * @ticket BP6286 114 */ 115 public function test_bp_register_member_type_should_store_has_directory_string() { 116 $object = bp_register_member_type( 'foo', array( 117 'has_directory' => 'foos', 118 ) ); 119 120 $this->assertTrue( $object->has_directory ); 121 $this->assertSame( 'foos', $object->directory_slug ); 122 } 123 76 124 public function test_bp_get_member_type_object_should_return_null_for_non_existent_member_type() { 77 125 $this->assertSame( null, bp_get_member_type_object( 'foo' ) ); 78 126 } -
tests/phpunit/testcases/routing/members.php
diff --git a/tests/phpunit/testcases/routing/members.php b/tests/phpunit/testcases/routing/members.php index a4c5d46..64617c2 100644
a b class BP_Tests_Routing_Members extends BP_UnitTestCase { 9 9 public function setUp() { 10 10 parent::setUp(); 11 11 12 buddypress()->members->types = array(); 12 13 $this->old_current_user = get_current_user_id(); 13 14 $this->set_current_user( $this->factory->user->create( array( 'user_login' => 'paulgibbs', 'role' => 'subscriber' ) ) ); 14 15 } 15 16 16 17 public function tearDown() { 17 parent::tearDown();18 18 $this->set_current_user( $this->old_current_user ); 19 parent::tearDown(); 19 20 } 20 21 21 22 function test_members_directory() { … … class BP_Tests_Routing_Members extends BP_UnitTestCase { 27 28 $this->go_to( bp_core_get_user_domain( bp_loggedin_user_id() ) ); 28 29 $this->assertTrue( bp_is_my_profile() ); 29 30 } 31 32 /** 33 * @ticket BP6286 34 * @group member_types 35 */ 36 public function test_member_directory_with_member_type() { 37 bp_register_member_type( 'foo' ); 38 $this->go_to( bp_get_members_directory_permalink() . 'type/foo/' ); 39 $this->assertTrue( bp_is_members_component() ); 40 } 41 42 /** 43 * @ticket BP6286 44 * @group member_types 45 */ 46 public function test_member_directory_with_member_type_should_obey_filtered_type_slug() { 47 bp_register_member_type( 'foo' ); 48 49 add_filter( 'bp_members_member_type_base', array( $this, 'filter_member_type_base' ) ); 50 $this->go_to( bp_get_members_directory_permalink() . 'buddypress-member-type/foo/' ); 51 remove_filter( 'bp_members_member_type_base', array( $this, 'filter_member_type_base' ) ); 52 $this->assertTrue( bp_is_members_component() ); 53 } 54 55 public function filter_member_type_base( $base ) { 56 return 'buddypress-member-type'; 57 } 58 59 /** 60 * @ticket BP6286 61 * @group member_types 62 */ 63 public function test_member_directory_with_member_type_that_has_custom_directory_slug() { 64 bp_register_member_type( 'foo', array( 'has_directory' => 'foos' ) ); 65 $this->go_to( bp_get_members_directory_permalink() . 'type/foos/' ); 66 $this->assertTrue( bp_is_members_component() ); 67 } 68 69 /** 70 * @ticket BP6286 71 * @group member_types 72 */ 73 public function test_member_directory_with_member_type_should_be_overridden_by_member_with_same_nicename() { 74 $u = $this->factory->user->create( array( 'user_nicename' => 'foo' ) ); 75 bp_register_member_type( 'foo' ); 76 $this->go_to( bp_get_members_directory_permalink() . 'type/foo/' ); 77 } 78 79 /** 80 * @ticket BP6286 81 * @group member_types 82 */ 83 public function test_member_directory_should_404_for_member_types_that_have_no_directory() { 84 bp_register_member_type( 'foo', array( 'has_directory' => false ) ); 85 $this->go_to( bp_get_members_directory_permalink() . 'type/foo/' ); 86 $this->assertTrue( is_404() ); 87 } 30 88 }