Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
02/05/2016 05:37:16 AM (5 years ago)
Author:
boonebgorges
Message:

Move bp-xprofile classes to their own files.

See #6870.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-xprofile/bp-xprofile-loader.php

    r10434 r10525  
    1414defined( 'ABSPATH' ) || exit;
    1515
    16 /**
    17  * Creates our XProfile component.
    18  */
    19 class BP_XProfile_Component extends BP_Component {
    20 
    21     /**
    22      * Profile field types.
    23      *
    24      * @since 1.5.0
    25      * @var array
    26      */
    27     public $field_types;
    28 
    29     /**
    30      * The acceptable visibility levels for xprofile fields.
    31      *
    32      * @see bp_xprofile_get_visibility_levels()
    33      * @since 1.6.0
    34      * @var array
    35      */
    36     public $visibility_levels = array();
    37 
    38     /**
    39      * Start the xprofile component creation process.
    40      *
    41      * @since 1.5.0
    42      */
    43     public function __construct() {
    44         parent::start(
    45             'xprofile',
    46             _x( 'Extended Profiles', 'Component page <title>', 'buddypress' ),
    47             buddypress()->plugin_dir,
    48             array(
    49                 'adminbar_myaccount_order' => 20
    50             )
    51         );
    52 
    53         $this->setup_hooks();
    54     }
    55 
    56     /**
    57      * Include files.
    58      *
    59      * @param array $includes Array of files to include.
    60      */
    61     public function includes( $includes = array() ) {
    62         $includes = array(
    63             'cssjs',
    64             'cache',
    65             'actions',
    66             'activity',
    67             'screens',
    68             'caps',
    69             'classes',
    70             'filters',
    71             'settings',
    72             'template',
    73             'functions',
    74             'notifications',
    75         );
    76 
    77         if ( is_admin() ) {
    78             $includes[] = 'admin';
    79         }
    80 
    81         parent::includes( $includes );
    82     }
    83 
    84     /**
    85      * Setup globals.
    86      *
    87      * The BP_XPROFILE_SLUG constant is deprecated, and only used here for
    88      * backwards compatibility.
    89      *
    90      * @since 1.5.0
    91      *
    92      * @param array $args Array of globals to set up.
    93      */
    94     public function setup_globals( $args = array() ) {
    95         $bp = buddypress();
    96 
    97         // Define a slug, if necessary.
    98         if ( !defined( 'BP_XPROFILE_SLUG' ) ) {
    99             define( 'BP_XPROFILE_SLUG', 'profile' );
    100         }
    101 
    102         // Assign the base group and fullname field names to constants
    103         // to use in SQL statements.
    104         // Defined conditionally to accommodate unit tests.
    105         if ( ! defined( 'BP_XPROFILE_BASE_GROUP_NAME' ) ) {
    106             define( 'BP_XPROFILE_BASE_GROUP_NAME', stripslashes( bp_core_get_root_option( 'avatar_default' ) ) );
    107         }
    108 
    109         if ( ! defined( 'BP_XPROFILE_FULLNAME_FIELD_NAME' ) ) {
    110             define( 'BP_XPROFILE_FULLNAME_FIELD_NAME', stripslashes( bp_core_get_root_option( 'bp-xprofile-fullname-field-name' ) ) );
    111         }
    112 
    113         /**
    114          * Filters the supported field type IDs.
    115          *
    116          * @since 1.1.0
    117          *
    118          * @param array $value Array of IDs for the supported field types.
    119          */
    120         $this->field_types = apply_filters( 'xprofile_field_types', array_keys( bp_xprofile_get_field_types() ) );
    121 
    122         // 'option' is a special case. It is not a top-level field, so
    123         // does not have an associated BP_XProfile_Field_Type class,
    124         // but it must be whitelisted.
    125         $this->field_types[] = 'option';
    126 
    127         // Register the visibility levels. See bp_xprofile_get_visibility_levels() to filter.
    128         $this->visibility_levels = array(
    129             'public' => array(
    130                 'id'      => 'public',
    131                 'label' => _x( 'Everyone', 'Visibility level setting', 'buddypress' )
    132             ),
    133             'adminsonly' => array(
    134                 'id'      => 'adminsonly',
    135                 'label' => _x( 'Only Me', 'Visibility level setting', 'buddypress' )
    136             ),
    137             'loggedin' => array(
    138                 'id'      => 'loggedin',
    139                 'label' => _x( 'All Members', 'Visibility level setting', 'buddypress' )
    140             )
    141         );
    142 
    143         if ( bp_is_active( 'friends' ) ) {
    144             $this->visibility_levels['friends'] = array(
    145                 'id'    => 'friends',
    146                 'label' => _x( 'My Friends', 'Visibility level setting', 'buddypress' )
    147             );
    148         }
    149 
    150         // Tables.
    151         $global_tables = array(
    152             'table_name_data'   => $bp->table_prefix . 'bp_xprofile_data',
    153             'table_name_groups' => $bp->table_prefix . 'bp_xprofile_groups',
    154             'table_name_fields' => $bp->table_prefix . 'bp_xprofile_fields',
    155             'table_name_meta'   => $bp->table_prefix . 'bp_xprofile_meta',
    156         );
    157 
    158         $meta_tables = array(
    159             'xprofile_group' => $bp->table_prefix . 'bp_xprofile_meta',
    160             'xprofile_field' => $bp->table_prefix . 'bp_xprofile_meta',
    161             'xprofile_data'  => $bp->table_prefix . 'bp_xprofile_meta',
    162         );
    163 
    164         $globals = array(
    165             'slug'                  => BP_XPROFILE_SLUG,
    166             'has_directory'         => false,
    167             'notification_callback' => 'xprofile_format_notifications',
    168             'global_tables'         => $global_tables,
    169             'meta_tables'           => $meta_tables,
    170         );
    171 
    172         parent::setup_globals( $globals );
    173     }
    174 
    175     /**
    176      * Set up navigation.
    177      *
    178      * @global BuddyPress $bp The one true BuddyPress instance
    179      *
    180      * @param array $main_nav Array of main nav items to set up.
    181      * @param array $sub_nav  Array of sub nav items to set up.
    182      */
    183     public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    184 
    185         // Determine user to use.
    186         if ( bp_displayed_user_domain() ) {
    187             $user_domain = bp_displayed_user_domain();
    188         } elseif ( bp_loggedin_user_domain() ) {
    189             $user_domain = bp_loggedin_user_domain();
    190         } else {
    191             return;
    192         }
    193 
    194         $access       = bp_core_can_edit_settings();
    195         $slug         = bp_get_profile_slug();
    196         $profile_link = trailingslashit( $user_domain . $slug );
    197 
    198         // Add 'Profile' to the main navigation.
    199         $main_nav = array(
    200             'name'                => _x( 'Profile', 'Profile header menu', 'buddypress' ),
    201             'slug'                => $slug,
    202             'position'            => 20,
    203             'screen_function'     => 'xprofile_screen_display_profile',
    204             'default_subnav_slug' => 'public',
    205             'item_css_id'         => $this->id
    206         );
    207 
    208         // Add the subnav items to the profile.
    209         $sub_nav[] = array(
    210             'name'            => _x( 'View', 'Profile header sub menu', 'buddypress' ),
    211             'slug'            => 'public',
    212             'parent_url'      => $profile_link,
    213             'parent_slug'     => $slug,
    214             'screen_function' => 'xprofile_screen_display_profile',
    215             'position'        => 10
    216         );
    217 
    218         // Edit Profile.
    219         $sub_nav[] = array(
    220             'name'            => _x( 'Edit','Profile header sub menu', 'buddypress' ),
    221             'slug'            => 'edit',
    222             'parent_url'      => $profile_link,
    223             'parent_slug'     => $slug,
    224             'screen_function' => 'xprofile_screen_edit_profile',
    225             'position'        => 20,
    226             'user_has_access' => $access
    227         );
    228 
    229         // Change Avatar.
    230         if ( buddypress()->avatar->show_avatars ) {
    231             $sub_nav[] = array(
    232                 'name'            => _x( 'Change Profile Photo', 'Profile header sub menu', 'buddypress' ),
    233                 'slug'            => 'change-avatar',
    234                 'parent_url'      => $profile_link,
    235                 'parent_slug'     => $slug,
    236                 'screen_function' => 'xprofile_screen_change_avatar',
    237                 'position'        => 30,
    238                 'user_has_access' => $access
    239             );
    240         }
    241 
    242         // Change Cover image.
    243         if ( bp_displayed_user_use_cover_image_header() ) {
    244             $sub_nav[] = array(
    245                 'name'            => _x( 'Change Cover Image', 'Profile header sub menu', 'buddypress' ),
    246                 'slug'            => 'change-cover-image',
    247                 'parent_url'      => $profile_link,
    248                 'parent_slug'     => $slug,
    249                 'screen_function' => 'xprofile_screen_change_cover_image',
    250                 'position'        => 40,
    251                 'user_has_access' => $access
    252             );
    253         }
    254 
    255         // The Settings > Profile nav item can only be set up after
    256         // the Settings component has run its own nav routine.
    257         add_action( 'bp_settings_setup_nav', array( $this, 'setup_settings_nav' ) );
    258 
    259         parent::setup_nav( $main_nav, $sub_nav );
    260     }
    261 
    262     /**
    263      * Set up the Settings > Profile nav item.
    264      *
    265      * Loaded in a separate method because the Settings component may not
    266      * be loaded in time for BP_XProfile_Component::setup_nav().
    267      *
    268      * @since 2.1.0
    269      */
    270     public function setup_settings_nav() {
    271         if ( ! bp_is_active( 'settings' ) ) {
    272             return;
    273         }
    274 
    275         // Determine user to use.
    276         if ( bp_displayed_user_domain() ) {
    277             $user_domain = bp_displayed_user_domain();
    278         } elseif ( bp_loggedin_user_domain() ) {
    279             $user_domain = bp_loggedin_user_domain();
    280         } else {
    281             return;
    282         }
    283 
    284         // Get the settings slug.
    285         $settings_slug = bp_get_settings_slug();
    286 
    287         bp_core_new_subnav_item( array(
    288             'name'            => _x( 'Profile Visibility', 'Profile settings sub nav', 'buddypress' ),
    289             'slug'            => 'profile',
    290             'parent_url'      => trailingslashit( $user_domain . $settings_slug ),
    291             'parent_slug'     => $settings_slug,
    292             'screen_function' => 'bp_xprofile_screen_settings',
    293             'position'        => 30,
    294             'user_has_access' => bp_core_can_edit_settings()
    295         ) );
    296     }
    297 
    298     /**
    299      * Set up the Admin Bar.
    300      *
    301      * @param array $wp_admin_nav Admin Bar items.
    302      */
    303     public function setup_admin_bar( $wp_admin_nav = array() ) {
    304 
    305         // Menus for logged in user.
    306         if ( is_user_logged_in() ) {
    307 
    308             // Profile link.
    309             $profile_link = trailingslashit( bp_loggedin_user_domain() . bp_get_profile_slug() );
    310 
    311             // Add the "Profile" sub menu.
    312             $wp_admin_nav[] = array(
    313                 'parent' => buddypress()->my_account_menu_id,
    314                 'id'     => 'my-account-' . $this->id,
    315                 'title'  => _x( 'Profile', 'My Account Profile', 'buddypress' ),
    316                 'href'   => $profile_link
    317             );
    318 
    319             // View Profile.
    320             $wp_admin_nav[] = array(
    321                 'parent' => 'my-account-' . $this->id,
    322                 'id'     => 'my-account-' . $this->id . '-public',
    323                 'title'  => _x( 'View', 'My Account Profile sub nav', 'buddypress' ),
    324                 'href'   => $profile_link
    325             );
    326 
    327             // Edit Profile.
    328             $wp_admin_nav[] = array(
    329                 'parent' => 'my-account-' . $this->id,
    330                 'id'     => 'my-account-' . $this->id . '-edit',
    331                 'title'  => _x( 'Edit', 'My Account Profile sub nav', 'buddypress' ),
    332                 'href'   => trailingslashit( $profile_link . 'edit' )
    333             );
    334 
    335             // Edit Avatar.
    336             if ( buddypress()->avatar->show_avatars ) {
    337                 $wp_admin_nav[] = array(
    338                     'parent' => 'my-account-' . $this->id,
    339                     'id'     => 'my-account-' . $this->id . '-change-avatar',
    340                     'title'  => _x( 'Change Profile Photo', 'My Account Profile sub nav', 'buddypress' ),
    341                     'href'   => trailingslashit( $profile_link . 'change-avatar' )
    342                 );
    343             }
    344 
    345             if ( bp_displayed_user_use_cover_image_header() ) {
    346                 $wp_admin_nav[] = array(
    347                     'parent' => 'my-account-' . $this->id,
    348                     'id'     => 'my-account-' . $this->id . '-change-cover-image',
    349                     'title'  => _x( 'Change Cover Image', 'My Account Profile sub nav', 'buddypress' ),
    350                     'href'   => trailingslashit( $profile_link . 'change-cover-image' )
    351                 );
    352             }
    353         }
    354 
    355         parent::setup_admin_bar( $wp_admin_nav );
    356     }
    357 
    358     /**
    359      * Add custom hooks.
    360      *
    361      * @since 2.0.0
    362      */
    363     public function setup_hooks() {
    364         add_filter( 'bp_settings_admin_nav', array( $this, 'setup_settings_admin_nav' ), 2 );
    365     }
    366 
    367     /**
    368      * Sets up the title for pages and <title>.
    369      */
    370     public function setup_title() {
    371 
    372         if ( bp_is_profile_component() ) {
    373             $bp = buddypress();
    374 
    375             if ( bp_is_my_profile() ) {
    376                 $bp->bp_options_title = _x( 'My Profile', 'Page title', 'buddypress' );
    377             } else {
    378                 $bp->bp_options_avatar = bp_core_fetch_avatar( array(
    379                     'item_id' => bp_displayed_user_id(),
    380                     'type'    => 'thumb',
    381                     'alt'     => sprintf( _x( 'Profile picture of %s', 'Avatar alt', 'buddypress' ), bp_get_displayed_user_fullname() )
    382                 ) );
    383                 $bp->bp_options_title = bp_get_displayed_user_fullname();
    384             }
    385         }
    386 
    387         parent::setup_title();
    388     }
    389 
    390     /**
    391      * Setup cache groups.
    392      *
    393      * @since 2.2.0
    394      */
    395     public function setup_cache_groups() {
    396 
    397         // Global groups.
    398         wp_cache_add_global_groups( array(
    399             'bp_xprofile',
    400             'bp_xprofile_data',
    401             'bp_xprofile_fields',
    402             'bp_xprofile_groups',
    403             'xprofile_meta'
    404         ) );
    405 
    406         parent::setup_cache_groups();
    407     }
    408 
    409     /**
    410      * Adds "Settings > Profile" subnav item under the "Settings" adminbar menu.
    411      *
    412      * @since 2.0.0
    413      *
    414      * @param array $wp_admin_nav The settings adminbar nav array.
    415      * @return array
    416      */
    417     public function setup_settings_admin_nav( $wp_admin_nav ) {
    418 
    419         // Setup the logged in user variables.
    420         $settings_link = trailingslashit( bp_loggedin_user_domain() . bp_get_settings_slug() );
    421 
    422         // Add the "Profile" subnav item.
    423         $wp_admin_nav[] = array(
    424             'parent' => 'my-account-' . buddypress()->settings->id,
    425             'id'     => 'my-account-' . buddypress()->settings->id . '-profile',
    426             'title'  => _x( 'Profile', 'My Account Settings sub nav', 'buddypress' ),
    427             'href'   => trailingslashit( $settings_link . 'profile' )
    428         );
    429 
    430         return $wp_admin_nav;
    431     }
    432 }
     16require dirname( __FILE__ ) . '/classes/class-bp-xprofile-component.php';
    43317
    43418/**
Note: See TracChangeset for help on using the changeset viewer.