Skip to:
Content

BuddyPress.org

Ticket #7658: 7658.02.diff

File 7658.02.diff, 8.5 KB (added by dcavins, 9 months ago)

Introduce new class BP_LoggedIn_User.

  • 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 { 
    238238                // Logged in user is the 'current_user'.
    239239                $current_user = wp_get_current_user();
    240240
    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();
    244243
    245244                /** Avatars **********************************************************
    246245                 */
  • 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.
     11defined( '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 */
     30class 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 { 
    233233                // Init the User's ID to use to build the Nav for.
    234234                $user_id = bp_loggedin_user_id();
    235235
    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 
    251236                /**
    252237                 * Set the Displayed user for the classic BuddyPress. This should only be the case when the
    253238                 * 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() { 
    748748                return;
    749749        }
    750750
    751         if ( bp_loggedin_user_id() ) {
    752                 buddypress()->loggedin_user->fullname = bp_core_get_user_displayname( bp_loggedin_user_id() );
    753         }
    754 
    755751        if ( bp_displayed_user_id() ) {
    756752                buddypress()->displayed_user->fullname = bp_core_get_user_displayname( bp_displayed_user_id() );
    757753        }
  • src/class-buddypress.php

    diff --git src/class-buddypress.php src/class-buddypress.php
    index 1db02b577..b8ac8b557 100644
    class BuddyPress { 
    726726                        'BP_Recursive_Query'                         => 'core',
    727727                        'BP_Suggestions'                             => 'core',
    728728                        'BP_Theme_Compat'                            => 'core',
     729                        'BP_LoggedIn_User'                           => 'core',
    729730                        'BP_User_Query'                              => 'core',
    730731                        'BP_Walker_Category_Checklist'               => 'core',
    731732                        '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 { 
    132132                buddypress()->is_single_item        = false;
    133133                buddypress()->current_user          = new stdClass();
    134134                buddypress()->displayed_user        = new stdClass();
    135                 buddypress()->loggedin_user         = new stdClass();
     135                buddypress()->loggedin_user         = new BP_LoggedIn_User;
    136136                buddypress()->pages                 = array();
    137137                buddypress()->groups->types         = array();
    138138
    class BP_UnitTestCase extends WP_UnitTestCase { 
    218218         * have to do a bit more work to change it
    219219         */
    220220        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 
    229221                wp_set_current_user( $user_id );
    230222        }
    231223