BP_Core
Creates the Core component.
Description Description
Source Source
File: bp-core/classes/class-bp-core.php
class BP_Core extends BP_Component {
/**
* Start the members component creation process.
*
* @since 1.5.0
*
*/
public function __construct() {
parent::start(
'core',
__( 'BuddyPress Core', 'buddypress' ),
buddypress()->plugin_dir
);
$this->bootstrap();
}
/**
* Populate the global data needed before BuddyPress can continue.
*
* This involves figuring out the currently required, activated, deactivated,
* and optional components.
*
* @since 1.5.0
*/
private function bootstrap() {
$bp = buddypress();
/**
* Fires before the loading of individual components and after BuddyPress Core.
*
* Allows plugins to run code ahead of the other components.
*
* @since 1.2.0
*/
do_action( 'bp_core_loaded' );
/** Components *******************************************************
*/
/**
* Filters the included and optional components.
*
* @since 1.5.0
*
* @param array $value Array of included and optional components.
*/
$bp->optional_components = apply_filters( 'bp_optional_components', array( 'activity', 'blogs', 'friends', 'groups', 'messages', 'notifications', 'settings', 'xprofile' ) );
/**
* Filters the required components.
*
* @since 1.5.0
*
* @param array $value Array of required components.
*/
$bp->required_components = apply_filters( 'bp_required_components', array( 'members' ) );
// Get a list of activated components.
if ( $active_components = bp_get_option( 'bp-active-components' ) ) {
/** This filter is documented in bp-core/admin/bp-core-admin-components.php */
$bp->active_components = apply_filters( 'bp_active_components', $active_components );
/**
* Filters the deactivated components.
*
* @since 1.0.0
*
* @param array $value Array of deactivated components.
*/
$bp->deactivated_components = apply_filters( 'bp_deactivated_components', array_values( array_diff( array_values( array_merge( $bp->optional_components, $bp->required_components ) ), array_keys( $bp->active_components ) ) ) );
// Pre 1.5 Backwards compatibility.
} elseif ( $deactivated_components = bp_get_option( 'bp-deactivated-components' ) ) {
// Trim off namespace and filename.
foreach ( array_keys( (array) $deactivated_components ) as $component ) {
$trimmed[] = str_replace( '.php', '', str_replace( 'bp-', '', $component ) );
}
/** This filter is documented in bp-core/bp-core-loader.php */
$bp->deactivated_components = apply_filters( 'bp_deactivated_components', $trimmed );
// Setup the active components.
$active_components = array_fill_keys( array_diff( array_values( array_merge( $bp->optional_components, $bp->required_components ) ), array_values( $bp->deactivated_components ) ), '1' );
/** This filter is documented in bp-core/admin/bp-core-admin-components.php */
$bp->active_components = apply_filters( 'bp_active_components', $bp->active_components );
// Default to all components active.
} else {
// Set globals.
$bp->deactivated_components = array();
// Setup the active components.
$active_components = array_fill_keys( array_values( array_merge( $bp->optional_components, $bp->required_components ) ), '1' );
/** This filter is documented in bp-core/admin/bp-core-admin-components.php */
$bp->active_components = apply_filters( 'bp_active_components', $bp->active_components );
}
// Loop through optional components.
foreach( $bp->optional_components as $component ) {
if ( bp_is_active( $component ) && file_exists( $bp->plugin_dir . '/bp-' . $component . '/bp-' . $component . '-loader.php' ) ) {
include( $bp->plugin_dir . '/bp-' . $component . '/bp-' . $component . '-loader.php' );
}
}
// Loop through required components.
foreach( $bp->required_components as $component ) {
if ( file_exists( $bp->plugin_dir . '/bp-' . $component . '/bp-' . $component . '-loader.php' ) ) {
include( $bp->plugin_dir . '/bp-' . $component . '/bp-' . $component . '-loader.php' );
}
}
// Add Core to required components.
$bp->required_components[] = 'core';
/**
* Fires after the loading of individual components.
*
* @since 2.0.0
*/
do_action( 'bp_core_components_included' );
}
/**
* Include bp-core files.
*
* @since 1.6.0
*
* @see BP_Component::includes() for description of parameters.
*
* @param array $includes See {@link BP_Component::includes()}.
*/
public function includes( $includes = array() ) {
if ( ! is_admin() ) {
return;
}
$includes = array(
'admin'
);
parent::includes( $includes );
}
/**
* Set up bp-core global settings.
*
* Sets up a majority of the BuddyPress globals that require a minimal
* amount of processing, meaning they cannot be set in the BuddyPress class.
*
* @since 1.5.0
*
* @see BP_Component::setup_globals() for description of parameters.
*
* @param array $args See {@link BP_Component::setup_globals()}.
*/
public function setup_globals( $args = array() ) {
$bp = buddypress();
/** Database *********************************************************
*/
// Get the base database prefix.
if ( empty( $bp->table_prefix ) ) {
$bp->table_prefix = bp_core_get_table_prefix();
}
// The domain for the root of the site where the main blog resides.
if ( empty( $bp->root_domain ) ) {
$bp->root_domain = bp_core_get_root_domain();
}
// Fetches all of the core BuddyPress settings in one fell swoop.
if ( empty( $bp->site_options ) ) {
$bp->site_options = bp_core_get_root_options();
}
// The names of the core WordPress pages used to display BuddyPress content.
if ( empty( $bp->pages ) ) {
$bp->pages = bp_core_get_directory_pages();
}
/** Basic current user data ******************************************
*/
// Logged in user is the 'current_user'.
$current_user = wp_get_current_user();
// The user ID of the user who is currently logged in.
$bp->loggedin_user = new stdClass;
$bp->loggedin_user->id = isset( $current_user->ID ) ? $current_user->ID : 0;
/** Avatars **********************************************************
*/
// Fetches the default Gravatar image to use if the user/group/blog has no avatar or gravatar.
$bp->grav_default = new stdClass;
/**
* Filters the default user Gravatar.
*
* @since 1.1.0
*
* @param string $value Default user Gravatar.
*/
$bp->grav_default->user = apply_filters( 'bp_user_gravatar_default', $bp->site_options['avatar_default'] );
/**
* Filters the default group Gravatar.
*
* @since 1.1.0
*
* @param string $value Default group Gravatar.
*/
$bp->grav_default->group = apply_filters( 'bp_group_gravatar_default', $bp->grav_default->user );
/**
* Filters the default blog Gravatar.
*
* @since 1.1.0
*
* @param string $value Default blog Gravatar.
*/
$bp->grav_default->blog = apply_filters( 'bp_blog_gravatar_default', $bp->grav_default->user );
// Notifications table. Included here for legacy purposes. Use
// bp-notifications instead.
$bp->core->table_name_notifications = $bp->table_prefix . 'bp_notifications';
// Backward compatibility for plugins modifying the legacy bp_nav and bp_options_nav global properties.
$bp->bp_nav = new BP_Core_BP_Nav_BackCompat();
$bp->bp_options_nav = new BP_Core_BP_Options_Nav_BackCompat();
/**
* Used to determine if user has admin rights on current content. If the
* logged in user is viewing their own profile and wants to delete
* something, is_item_admin is used. This is a generic variable so it
* can be used by other components. It can also be modified, so when
* viewing a group 'is_item_admin' would be 'true' if they are a group
* admin, and 'false' if they are not.
*/
bp_update_is_item_admin( bp_user_has_access(), 'core' );
// Is the logged in user is a mod for the current item?
bp_update_is_item_mod( false, 'core' );
/**
* Fires at the end of the setup of bp-core globals setting.
*
* @since 1.1.0
*/
do_action( 'bp_core_setup_globals' );
}
/**
* Setup cache groups
*
* @since 2.2.0
*/
public function setup_cache_groups() {
// Global groups.
wp_cache_add_global_groups( array(
'bp'
) );
parent::setup_cache_groups();
}
/**
* Set up post types.
*
* @since BuddyPress (2.4.0)
*/
public function register_post_types() {
// Emails
if ( bp_is_root_blog() && ! is_network_admin() ) {
register_post_type(
bp_get_email_post_type(),
apply_filters( 'bp_register_email_post_type', array(
'description' => _x( 'BuddyPress emails', 'email post type description', 'buddypress' ),
'capabilities' => array(
'edit_posts' => 'bp_moderate',
'edit_others_posts' => 'bp_moderate',
'publish_posts' => 'bp_moderate',
'read_private_posts' => 'bp_moderate',
'delete_posts' => 'bp_moderate',
'delete_others_posts' => 'bp_moderate',
),
'map_meta_cap' => true,
'labels' => bp_get_email_post_type_labels(),
'menu_icon' => 'dashicons-email',
'public' => false,
'publicly_queryable' => bp_current_user_can( 'bp_moderate' ),
'query_var' => false,
'rewrite' => false,
'show_in_admin_bar' => false,
'show_ui' => bp_current_user_can( 'bp_moderate' ),
'supports' => bp_get_email_post_type_supports(),
) )
);
}
parent::register_post_types();
}
}
Changelog Changelog
| Version | Description |
|---|---|
| 1.5.0 | Introduced. |
Methods Methods
- __construct — Start the members component creation process.
- __get — Magic getter.
- bootstrap — Populate the global data needed before BuddyPress can continue.
- includes — Include bp-core files.
- register_post_types — Set up post types.
- setup_cache_groups — Setup cache groups
- setup_globals — Set up bp-core global settings.