| 236 | /** |
| 237 | * Fetch BuddyPress extra data for a user. |
| 238 | * |
| 239 | * @since 7.0.0 |
| 240 | * |
| 241 | * @param int $user_id The BP Member ID. |
| 242 | * @param bool $populate_extras True to fetch BP extra data. False otherwise. |
| 243 | * Default `true`. |
| 244 | * @param string $context How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display', |
| 245 | * 'attribute' and 'js'. Default 'raw'. |
| 246 | * @return WP_User The user object extended with BuddyPress extra data. |
| 247 | */ |
| 248 | function bp_members_get_userdata( $user_id = 0, $populate_extras = true, $context = 'raw' ) { |
| 249 | if ( ! $user_id ) { |
| 250 | return false; |
| 251 | } |
| 252 | |
| 253 | if ( ! $populate_extras ) { |
| 254 | return bp_core_get_core_userdata( $user_id ); |
| 255 | } |
| 256 | |
| 257 | $userdata = get_user_by( 'ID', (int) $user_id ); |
| 258 | |
| 259 | if ( ! isset( $userdata->ID ) || ! $userdata->ID ) { |
| 260 | return false; |
| 261 | } |
| 262 | |
| 263 | // The BP_Core_User is using the deprecated `id` property of the WP_User object. |
| 264 | $bp_member = new stdClass(); |
| 265 | foreach ( get_object_vars( $userdata ) as $key => $data ) { |
| 266 | $bp_member->{$key} = $data; |
| 267 | } |
| 268 | |
| 269 | $bp_member->id = $bp_member->ID; |
| 270 | |
| 271 | $paged_users = array( $bp_member ); |
| 272 | $user_ids = array( $bp_member->ID ); |
| 273 | BP_Core_User::get_user_extras( $paged_users, $user_ids, $type = 'alphabetical' ); |
| 274 | |
| 275 | // We only need the first index of the array. |
| 276 | $bp_member = reset( $paged_users ); |
| 277 | |
| 278 | // Remove the password. |
| 279 | unset( $bp_member->data->user_pass ); |
| 280 | |
| 281 | // Set the BP User domain. |
| 282 | $bp_member->data->user_url = bp_core_get_user_domain( $bp_member->ID, $bp_member->data->user_nicename, $bp_member->data->user_login ); |
| 283 | |
| 284 | $user = new WP_User( $bp_member->data ); |
| 285 | $user->filter = $context; |
| 286 | |
| 287 | foreach ( array_keys( get_object_vars( $user->data ) ) as $wp_prop ) { |
| 288 | $bp_member->data->{$wp_prop} = $user->{$wp_prop}; |
| 289 | } |
| 290 | |
| 291 | // Remove unnecessary data. |
| 292 | $bp_data = array_diff_key( |
| 293 | get_object_vars( $bp_member ), |
| 294 | array( |
| 295 | 'ID' => false, |
| 296 | 'data' => false, |
| 297 | 'filter' => false, |
| 298 | 'roles' => false, |
| 299 | 'caps' => false, |
| 300 | 'cap_key' => false, |
| 301 | ) |
| 302 | ); |
| 303 | |
| 304 | // Include data specific to BuddyPress. |
| 305 | foreach ( array_keys( $bp_data ) as $bp_prop ) { |
| 306 | $bp_member->data->{$bp_prop} = $bp_member->{$bp_prop}; |
| 307 | } |
| 308 | |
| 309 | /** |
| 310 | * Filter here to add other extra data for the member. |
| 311 | * |
| 312 | * @since 7.0.0 |
| 313 | * |
| 314 | * @param object $data The user data including the data specific to BuddyPress. |
| 315 | * @param WP_User $user The WordPress user object. |
| 316 | */ |
| 317 | return apply_filters( 'bp_members_get_userdata', $bp_member->data, $user ); |
| 318 | } |
| 319 | |