Ticket #7658: 7658.02.diff
File 7658.02.diff, 8.5 KB (added by , 9 months ago) |
---|
-
src/bp-core/classes/class-bp-core.php
diff --git src/bp-core/classes/class-bp-core.php src/bp-core/classes/class-bp-core.php index a5e028c1f..3a1f0c420 100644
class BP_Core extends BP_Component { 238 238 // Logged in user is the 'current_user'. 239 239 $current_user = wp_get_current_user(); 240 240 241 // The user ID of the user who is currently logged in. 242 $bp->loggedin_user = new stdClass(); 243 $bp->loggedin_user->id = isset( $current_user->ID ) ? $current_user->ID : 0; 241 // The user who is currently logged in. 242 $bp->loggedin_user = new BP_LoggedIn_User(); 244 243 245 244 /** Avatars ********************************************************** 246 245 */ -
new file src/bp-core/classes/class-bp-loggedin-user.php
diff --git src/bp-core/classes/class-bp-loggedin-user.php src/bp-core/classes/class-bp-loggedin-user.php new file mode 100644 index 000000000..5d14570e7
- + 1 <?php 2 /** 3 * Core component classes. 4 * 5 * @package BuddyPress 6 * @subpackage Core 7 * @since 14.0.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Fetch an object which represents the logged-in user. 15 * 16 * The values are dynamic--they refer to the WordPress current user, 17 * which may change as actions and hooks are run. 18 * For example: The user may look logged in at the beginning of a poorly 19 * authenticated WP REST API request, but will be de-authenticated 20 * at `rest_cookie_check_errors()` and then would no longer be considered to 21 * be logged in. 22 * 23 * @property-read int $id The logged-in user's ID. 24 * @property-read array $userdata The logged-in user's userdata. 25 * @property-read bool $is_super_admin Is the logged-in user a super admin? 26 * @property-read bool $is_site_admin Is the logged-in user a site admin? 27 * @property-read string $fullname The logged-in user's display name. 28 * @property-read string $domain The logged-in user's profile url. 29 */ 30 class BP_LoggedIn_User { 31 32 /** 33 * The ID of the logged-in user. 34 * 35 * @since 14.0.0 36 * @var int 37 */ 38 protected int $id; 39 40 /** 41 * The logged-in user's data from the matching wp_users row. 42 * 43 * @since 14.0.0 44 * @var array 45 */ 46 protected $userdata = array(); 47 48 /** 49 * Whether the logged-in user is a network admin or not. 50 * 51 * @since 14.0.0 52 * @var bool 53 */ 54 protected $is_super_admin = false; 55 56 /** 57 * Whether the logged-in user is a site admin or not. 58 * 59 * @since 14.0.0 60 * @var bool 61 */ 62 protected $is_site_admin = false; 63 64 /** 65 * The logged-in user's display name. 66 * 67 * @since 14.0.0 68 * @var string 69 */ 70 protected $fullname = ''; 71 72 /** 73 * The logged-in user's profile URL. 74 * 75 * @since 14.0.0 76 * @var string 77 */ 78 protected $domain = ''; 79 80 /** 81 * Constructor. 82 * 83 * Retrieves data for the currently logged-in user. 84 * 85 * @since 14.0.0 86 */ 87 public function __construct() { 88 $this->id = get_current_user_id(); 89 } 90 91 /** 92 * Magic getter. 93 * Provides custom logic for getting protected properties. 94 * 95 * @since 14.0.0 96 * 97 * @param string $key Property name. 98 * @return mixed 99 */ 100 public function __get( $key ) { 101 switch ( $key ) { 102 case 'id': 103 return get_current_user_id(); 104 105 case 'userdata': 106 return WP_User::get_data_by( 'id', get_current_user_id() ); 107 108 case 'fullname': 109 /** 110 * When profile sync is disabled, display_name may diverge from the xprofile 111 * fullname field value, and the xprofile field should take precedence. 112 */ 113 $retval = ''; 114 if ( bp_disable_profile_sync() ) { 115 $retval = xprofile_get_field_data( bp_xprofile_fullname_field_name(), get_current_user_id() ); 116 } 117 118 /** 119 * Common case: If BP profile and WP profiles are synced, 120 * then we use the WP value. 121 * This is also used if the xprofile field data is preferred, but empty. 122 */ 123 if ( ! bp_disable_profile_sync() || ! $retval ) { 124 $retval = bp_core_get_user_displayname( get_current_user_id() ); 125 } 126 127 return $retval; 128 129 case 'is_super_admin': 130 case 'is_site_admin': 131 return is_super_admin( get_current_user_id() ); 132 133 case 'domain': 134 return bp_members_get_user_url( get_current_user_id() ); 135 136 default : 137 return isset( $this->{$key} ) ? $this->{$key} : null; 138 } 139 } 140 141 /** 142 * Magic issetter. 143 * 144 * Used to maintain backward compatibility for properties that are now 145 * accessible only via magic method. 146 * 147 * @since 14.0.0 148 * 149 * @param string $key Property name. 150 * @return bool 151 */ 152 public function __isset( $key ) { 153 switch ( $key ) { 154 case 'id' : 155 case 'userdata' : 156 case 'fullname' : 157 case 'is_super_admin' : 158 case 'is_site_admin' : 159 case 'domain': 160 return true; 161 162 default : 163 return isset( $this->{$key} ); 164 } 165 } 166 } 167 No newline at end of file -
src/bp-members/classes/class-bp-members-component.php
diff --git src/bp-members/classes/class-bp-members-component.php src/bp-members/classes/class-bp-members-component.php index 9da16b1a6..b2cb3b79c 100644
class BP_Members_Component extends BP_Component { 233 233 // Init the User's ID to use to build the Nav for. 234 234 $user_id = bp_loggedin_user_id(); 235 235 236 /** Logged in user ***************************************************237 */238 239 // The core userdata of the user who is currently logged in.240 $bp->loggedin_user->userdata = bp_core_get_core_userdata( $user_id );241 242 // Fetch the full name for the logged in user.243 $bp->loggedin_user->fullname = isset( $bp->loggedin_user->userdata->display_name ) ? $bp->loggedin_user->userdata->display_name : '';244 245 // Hits the DB on single WP installs so get this separately.246 $bp->loggedin_user->is_super_admin = $bp->loggedin_user->is_site_admin = is_super_admin( $user_id );247 248 // The domain for the user currently logged in. eg: http://example.com/members/andy.249 $bp->loggedin_user->domain = bp_members_get_user_url( $user_id );250 251 236 /** 252 237 * Set the Displayed user for the classic BuddyPress. This should only be the case when the 253 238 * legacy parser is on. When BP Rewrites are on, the displayed user is set in -
src/bp-xprofile/bp-xprofile-functions.php
diff --git src/bp-xprofile/bp-xprofile-functions.php src/bp-xprofile/bp-xprofile-functions.php index 7a7a293f0..90401de84 100644
function xprofile_override_user_fullnames() { 748 748 return; 749 749 } 750 750 751 if ( bp_loggedin_user_id() ) {752 buddypress()->loggedin_user->fullname = bp_core_get_user_displayname( bp_loggedin_user_id() );753 }754 755 751 if ( bp_displayed_user_id() ) { 756 752 buddypress()->displayed_user->fullname = bp_core_get_user_displayname( bp_displayed_user_id() ); 757 753 } -
src/class-buddypress.php
diff --git src/class-buddypress.php src/class-buddypress.php index 1db02b577..b8ac8b557 100644
class BuddyPress { 726 726 'BP_Recursive_Query' => 'core', 727 727 'BP_Suggestions' => 'core', 728 728 'BP_Theme_Compat' => 'core', 729 'BP_LoggedIn_User' => 'core', 729 730 'BP_User_Query' => 'core', 730 731 'BP_Walker_Category_Checklist' => 'core', 731 732 'BP_Walker_Nav_Menu' => 'core', -
tests/phpunit/includes/testcase.php
diff --git tests/phpunit/includes/testcase.php tests/phpunit/includes/testcase.php index 676e64246..5d58a48d2 100644
class BP_UnitTestCase extends WP_UnitTestCase { 132 132 buddypress()->is_single_item = false; 133 133 buddypress()->current_user = new stdClass(); 134 134 buddypress()->displayed_user = new stdClass(); 135 buddypress()->loggedin_user = new stdClass();135 buddypress()->loggedin_user = new BP_LoggedIn_User; 136 136 buddypress()->pages = array(); 137 137 buddypress()->groups->types = array(); 138 138 … … class BP_UnitTestCase extends WP_UnitTestCase { 218 218 * have to do a bit more work to change it 219 219 */ 220 220 public static function set_current_user( $user_id ) { 221 $bp = buddypress();222 223 $bp->loggedin_user->id = $user_id;224 $bp->loggedin_user->fullname = bp_core_get_user_displayname( $user_id );225 $bp->loggedin_user->is_super_admin = $bp->loggedin_user->is_site_admin = is_super_admin( $user_id );226 $bp->loggedin_user->domain = bp_members_get_user_url( $user_id );227 $bp->loggedin_user->userdata = bp_core_get_core_userdata( $user_id );228 229 221 wp_set_current_user( $user_id ); 230 222 } 231 223