BP_Core
Creates the Core component.
Description
Source
File: bp-core/classes/class-bp-core.php
class BP_Core extends BP_Component {
/**
* Start the members component creation process.
*
* @since BuddyPress 1.5.0
*
*/
public function __construct() {
parent::start(
'core',
__('BuddyBoss Core', 'buddyboss'),
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 BuddyPress 1.5.0
*/
private function bootstrap() {
/**
* Fires before the loading of individual components and after BuddyBoss Core.
*
* Allows plugins to run code ahead of the other components.
*
* @since BuddyPress 1.2.0
*/
do_action('bp_core_loaded');
$this->load_components();
$this->load_integrations();
}
/**
* Load components files
*
* @since BuddyBoss 1.0.0
*/
private function load_components() {
$bp = buddypress();
/**
* Filters the included and optional components.
*
* @since BuddyPress 1.5.0
*
* @param array $value Array of included and optional components.
*/
$bp->optional_components = apply_filters('bp_optional_components', array_keys(bp_core_get_components('optional')));
/**
* Filters the required components.
*
* @since BuddyPress 1.5.0
*
* @param array $value Array of required components.
*/
$bp->required_components = apply_filters('bp_required_components', array('members', 'xprofile'));
// 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 BuddyPress 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 BuddyPress 2.0.0
*/
do_action('bp_core_components_included');
}
/**
* Load integrations files
*
* @since BuddyBoss 1.0.0
*/
private function load_integrations() {
$bp = buddypress();
/**
* Filters the included and optional integrations.
*
* @since BuddyBoss 1.0.0
*
* @param array $value Array of included and optional integrations.
*/
$bp->available_integrations = apply_filters('bp_integrations', array(
'appboss', 'learndash',
));
$integration_dir = $bp->plugin_dir . '/bp-integrations/';
foreach ($bp->available_integrations as $integration) {
$file = "{$integration_dir}{$integration}/bp-{$integration}-loader.php";
if (file_exists($file)) {
include $file;
}
}
/**
* Fires after the loading of individual integrations.
*
* @since BuddyBoss 1.0.0
*/
do_action('bp_core_inetegrations_included');
}
/**
* Include bp-core files.
*
* @since BuddyPress 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 BuddyPress 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 BuddyPress 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 BuddyPress 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 BuddyPress 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 BuddyPress 1.1.0
*/
do_action('bp_core_setup_globals');
}
/**
* Setup cache groups
*
* @since BuddyPress 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 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' => __('BuddyBoss emails', 'buddyboss'),
'labels' => bp_get_email_post_type_labels(),
'menu_icon' => 'dashicons-email-alt',
'public' => false,
'publicly_queryable' => bp_current_user_can('bp_moderate'),
'query_var' => false,
'rewrite' => false,
'show_in_admin_bar' => false,
'show_in_menu' => false,
'show_ui' => bp_current_user_can('bp_moderate'),
'supports' => bp_get_email_post_type_supports(),
))
);
}
if (bp_is_active('groups') && true === bp_disable_group_type_creation()) {
// Register Group Types custom post type.
register_post_type(
bp_get_group_type_post_type(),
apply_filters('bp_register_group_type_post_type', array(
'description' => __('BuddyBoss group type', 'buddyboss'),
'labels' => bp_get_group_type_post_type_labels(),
'public' => true,
'publicly_queryable' => bp_current_user_can('bp_moderate'),
'query_var' => false,
'rewrite' => false,
'show_in_admin_bar' => false,
'show_in_menu' => '',
'map_meta_cap' => true,
'show_in_rest' => true,
'show_ui' => bp_current_user_can('bp_moderate'),
'supports' => bp_get_group_type_post_type_supports(),
))
);
}
parent::register_post_types();
}
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 1.5.0 | Introduced. |
Methods
- __construct — Start the members component creation process.
- bootstrap — Populate the global data needed before BuddyPress can continue.
- includes — Include bp-core files.
- load_components — Load components files
- load_integrations — Load integrations files
- register_post_types — Set up post types.
- setup_cache_groups — Setup cache groups
- setup_globals — Set up bp-core global settings.
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.