Skip to:
Content

BuddyPress.org

Ticket #7658: 7658.01.diff

File 7658.01.diff, 7.1 KB (added by dcavins, 10 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 396d39459..71e9c16d7 100644
    class BP_Core extends BP_Component { 
    239239                $current_user            = wp_get_current_user();
    240240
    241241                // 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;
     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..65eb38ae1
    - +  
     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 */
     28class BP_LoggedIn_User {
     29
     30        /**
     31         * The ID of the logged-in user.
     32         *
     33         * @since 14.0.0
     34         * @var int
     35         */
     36        protected int $id;
     37
     38        /**
     39         * The logged-in user's data from the matching wp_users row.
     40         *
     41         * @since 14.0.0
     42         * @var array
     43         */
     44        protected $userdata = array();
     45
     46        /**
     47         * Whether the logged-in user is a network admin or not.
     48         *
     49         * @since 14.0.0
     50         * @var bool
     51         */
     52        protected $is_super_admin = false;
     53
     54        /**
     55         * Whether the logged-in user is a site admin or not.
     56         *
     57         * @since 14.0.0
     58         * @var bool
     59         */
     60        protected $is_site_admin = false;
     61
     62        /**
     63         * The logged-in user's display name.
     64         *
     65         * @since 14.0.0
     66         * @var string
     67         */
     68        public $fullname = '';
     69
     70        /**
     71         * The logged-in user's profile URL.
     72         *
     73         * @since 14.0.0
     74         * @var string
     75         */
     76        public $domain = '';
     77
     78        /**
     79         * Constructor.
     80         *
     81         * Retrieves data for the currently logged-in user.
     82         *
     83         * @since 14.0.0
     84         */
     85        public function __construct() {
     86                $this->id = get_current_user_id();
     87        }
     88
     89        /**
     90         * Magic getter.
     91         * Provides custom logic for getting protected properties.
     92         *
     93         * @since 14.0.0
     94         *
     95         * @param string $key Property name.
     96         * @return mixed
     97         */
     98        public function __get( $key ) {
     99                switch ( $key ) {
     100                        case 'id':
     101                                return get_current_user_id();
     102
     103                        case 'userdata':
     104                                return WP_User::get_data_by( 'id', get_current_user_id() );
     105
     106                        // case 'fullname':
     107                        //      // @TODO: This is a departure from the current logic, but maybe is a good idea.
     108                        //      return bp_core_get_user_displayname( get_current_user_id() );
     109
     110                        case 'is_super_admin':
     111                        case 'is_site_admin':
     112                                return is_super_admin( get_current_user_id() );
     113
     114                        default :
     115                                return isset( $this->{$key} ) ? $this->{$key} : null;
     116                 }
     117        }
     118
     119        /**
     120         * Magic issetter.
     121         *
     122         * Used to maintain backward compatibility for properties that are now
     123         * accessible only via magic method.
     124         *
     125         * @since 14.0.0
     126         *
     127         * @param string $key Property name.
     128         * @return bool
     129         */
     130        public function __isset( $key ) {
     131                switch ( $key ) {
     132                        case 'id' :
     133                        case 'userdata' :
     134                        // case 'fullname' :
     135                        case 'is_super_admin' :
     136                        case 'is_site_admin' :
     137                                return true;
     138
     139                        default :
     140                                return isset( $this->{$key} );
     141                 }
     142        }
     143}
     144 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..1b6c641fb 100644
    class BP_Members_Component extends BP_Component { 
    236236                /** Logged in user ***************************************************
    237237                 */
    238238
    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 
    242239                // Fetch the full name for the logged in user.
    243240                $bp->loggedin_user->fullname = isset( $bp->loggedin_user->userdata->display_name ) ? $bp->loggedin_user->userdata->display_name : '';
    244241
    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 
    248242                // The domain for the user currently logged in. eg: http://example.com/members/andy.
    249243                $bp->loggedin_user->domain = bp_members_get_user_url( $user_id );
    250244
  • src/class-buddypress.php

    diff --git src/class-buddypress.php src/class-buddypress.php
    index dfd3ea893..8b3bfa760 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                        /**
  • tests/phpunit/includes/testcase.php

    diff --git tests/phpunit/includes/testcase.php tests/phpunit/includes/testcase.php
    index 676e64246..478282255 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 { 
    220220        public static function set_current_user( $user_id ) {
    221221                $bp = buddypress();
    222222
    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 
    229223                wp_set_current_user( $user_id );
     224
     225                $bp->loggedin_user = new BP_LoggedIn_User();
     226                // Set the logged-in user parameters that aren't dynamic.
     227                $bp->loggedin_user->domain   = bp_members_get_user_url( $user_id );
     228                $bp->loggedin_user->fullname = bp_core_get_user_displayname( $user_id );;
    230229        }
    231230
    232231        public static function add_user_to_group( $user_id, $group_id, $args = array() ) {