buddypress/bp-activity/bp-activity-loader.php
r-a-y 3af55c8400 Add a fourth parameter to the BP_Component::start() method.
This parameter is an array that allows extended classes to define some
properties that need to be set early one for BP_Component to be able
to work its magic.

Currently accepts 'adminbar_myaccount_order', which sets a custom
position for the component menu generated under the WP Toolbar's
"My Account" menu.  If this value isn't set, we set the value to 90,
which will generate the menu before the Settings menu is added.

Fixes #3769.

git-svn-id: https://buddypress.svn.wordpress.org/trunk@7454 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
2013-10-22 19:31:29 +00:00

363 lines
10 KiB
PHP

<?php
/**
* BuddyPress Activity Streams Loader.
*
* An activity stream component, for users, groups, and site tracking.
*
* @package BuddyPress
* @subpackage ActivityCore
*/
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) exit;
/**
* Main Activity Class.
*
* @since BuddyPress (1.5)
*/
class BP_Activity_Component extends BP_Component {
/**
* Start the activity component setup process.
*
* @since BuddyPress (1.5)
*/
function __construct() {
parent::start(
'activity',
__( 'Activity Streams', 'buddypress' ),
BP_PLUGIN_DIR,
array(
'adminbar_myaccount_order' => 10
)
);
}
/**
* Include component files.
*
* @since BuddyPress (1.5)
*
* @see BP_Component::includes() for a description of arguments.
*
* @param array $includes See BP_Component::includes() for a description.
*/
public function includes( $includes = array() ) {
// Files to include
$includes = array(
'actions',
'screens',
'filters',
'classes',
'template',
'functions',
'notifications',
'cache'
);
// Load Akismet support if Akismet is configured
$akismet_key = bp_get_option( 'wordpress_api_key' );
if ( defined( 'AKISMET_VERSION' ) && ( !empty( $akismet_key ) || defined( 'WPCOM_API_KEY' ) ) && apply_filters( 'bp_activity_use_akismet', bp_is_akismet_active() ) ) {
$includes[] = 'akismet';
}
if ( is_admin() ) {
$includes[] = 'admin';
}
parent::includes( $includes );
}
/**
* Set up component global variables.
*
* The BP_ACTIVITY_SLUG constant is deprecated, and only used here for
* backwards compatibility.
*
* @since BuddyPress (1.5)
*
* @see BP_Component::setup_globals() for a description of arguments.
*
* @param array $args See BP_Component::setup_globals() for a description.
*/
public function setup_globals( $args = array() ) {
$bp = buddypress();
// Define a slug, if necessary
if ( !defined( 'BP_ACTIVITY_SLUG' ) )
define( 'BP_ACTIVITY_SLUG', $this->id );
// Global tables for activity component
$global_tables = array(
'table_name' => $bp->table_prefix . 'bp_activity',
'table_name_meta' => $bp->table_prefix . 'bp_activity_meta',
);
// All globals for activity component.
// Note that global_tables is included in this array.
$args = array(
'slug' => BP_ACTIVITY_SLUG,
'root_slug' => isset( $bp->pages->activity->slug ) ? $bp->pages->activity->slug : BP_ACTIVITY_SLUG,
'has_directory' => true,
'search_string' => __( 'Search Activity...', 'buddypress' ),
'global_tables' => $global_tables,
'notification_callback' => 'bp_activity_format_notifications',
);
parent::setup_globals( $args );
}
/**
* Set up component navigation.
*
* @since BuddyPress (1.5)
*
* @see BP_Component::setup_nav() for a description of arguments.
* @uses bp_is_active()
* @uses is_user_logged_in()
* @uses bp_get_friends_slug()
* @uses bp_get_groups_slug()
*
* @param array $main_nav Optional. See BP_Component::setup_nav() for
* description.
* @param array $sub_nav Optional. See BP_Component::setup_nav() for
* description.
*/
public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
// Add 'Activity' to the main navigation
$main_nav = array(
'name' => __( 'Activity', 'buddypress' ),
'slug' => $this->slug,
'position' => 10,
'screen_function' => 'bp_activity_screen_my_activity',
'default_subnav_slug' => 'just-me',
'item_css_id' => $this->id
);
// Stop if there is no user displayed or logged in
if ( !is_user_logged_in() && !bp_displayed_user_id() )
return;
// Determine user to use
if ( bp_displayed_user_domain() ) {
$user_domain = bp_displayed_user_domain();
} elseif ( bp_loggedin_user_domain() ) {
$user_domain = bp_loggedin_user_domain();
} else {
return;
}
// User link
$activity_link = trailingslashit( $user_domain . $this->slug );
// Add the subnav items to the activity nav item if we are using a theme that supports this
$sub_nav[] = array(
'name' => __( 'Personal', 'buddypress' ),
'slug' => 'just-me',
'parent_url' => $activity_link,
'parent_slug' => $this->slug,
'screen_function' => 'bp_activity_screen_my_activity',
'position' => 10
);
// @ mentions
if ( bp_activity_do_mentions() ) {
$sub_nav[] = array(
'name' => __( 'Mentions', 'buddypress' ),
'slug' => 'mentions',
'parent_url' => $activity_link,
'parent_slug' => $this->slug,
'screen_function' => 'bp_activity_screen_mentions',
'position' => 20,
'item_css_id' => 'activity-mentions'
);
}
// Favorite activity items
$sub_nav[] = array(
'name' => __( 'Favorites', 'buddypress' ),
'slug' => 'favorites',
'parent_url' => $activity_link,
'parent_slug' => $this->slug,
'screen_function' => 'bp_activity_screen_favorites',
'position' => 30,
'item_css_id' => 'activity-favs'
);
// Additional menu if friends is active
if ( bp_is_active( 'friends' ) ) {
$sub_nav[] = array(
'name' => __( 'Friends', 'buddypress' ),
'slug' => bp_get_friends_slug(),
'parent_url' => $activity_link,
'parent_slug' => $this->slug,
'screen_function' => 'bp_activity_screen_friends',
'position' => 40,
'item_css_id' => 'activity-friends'
) ;
}
// Additional menu if groups is active
if ( bp_is_active( 'groups' ) ) {
$sub_nav[] = array(
'name' => __( 'Groups', 'buddypress' ),
'slug' => bp_get_groups_slug(),
'parent_url' => $activity_link,
'parent_slug' => $this->slug,
'screen_function' => 'bp_activity_screen_groups',
'position' => 50,
'item_css_id' => 'activity-groups'
);
}
parent::setup_nav( $main_nav, $sub_nav );
}
/**
* Set up the component entries in the WordPress Admin Bar.
*
* @since BuddyPress (1.5)
*
* @see BP_Component::setup_nav() for a description of the $wp_admin_nav
* parameter array.
* @uses is_user_logged_in()
* @uses trailingslashit()
* @uses bp_get_total_mention_count_for_user()
* @uses bp_loggedin_user_id()
* @uses bp_is_active()
* @uses bp_get_friends_slug()
* @uses bp_get_groups_slug()
*
* @param array $wp_admin_nav See BP_Component::setup_admin_bar() for a
* description.
*/
public function setup_admin_bar( $wp_admin_nav = array() ) {
$bp = buddypress();
// Menus for logged in user
if ( is_user_logged_in() ) {
// Setup the logged in user variables
$user_domain = bp_loggedin_user_domain();
$activity_link = trailingslashit( $user_domain . $this->slug );
// Unread message count
if ( bp_activity_do_mentions() ) {
$count = bp_get_total_mention_count_for_user( bp_loggedin_user_id() );
if ( !empty( $count ) ) {
$title = sprintf( __( 'Mentions <span class="count">%s</span>', 'buddypress' ), number_format_i18n( $count ) );
} else {
$title = __( 'Mentions', 'buddypress' );
}
}
// Add the "Activity" sub menu
$wp_admin_nav[] = array(
'parent' => $bp->my_account_menu_id,
'id' => 'my-account-' . $this->id,
'title' => __( 'Activity', 'buddypress' ),
'href' => trailingslashit( $activity_link )
);
// Mentions
if ( bp_activity_do_mentions() ) {
$wp_admin_nav[] = array(
'parent' => 'my-account-' . $this->id,
'id' => 'my-account-' . $this->id . '-mentions',
'title' => $title,
'href' => trailingslashit( $activity_link . 'mentions' )
);
}
// Personal
$wp_admin_nav[] = array(
'parent' => 'my-account-' . $this->id,
'id' => 'my-account-' . $this->id . '-personal',
'title' => __( 'Personal', 'buddypress' ),
'href' => trailingslashit( $activity_link )
);
// Favorites
$wp_admin_nav[] = array(
'parent' => 'my-account-' . $this->id,
'id' => 'my-account-' . $this->id . '-favorites',
'title' => __( 'Favorites', 'buddypress' ),
'href' => trailingslashit( $activity_link . 'favorites' )
);
// Friends?
if ( bp_is_active( 'friends' ) ) {
$wp_admin_nav[] = array(
'parent' => 'my-account-' . $this->id,
'id' => 'my-account-' . $this->id . '-friends',
'title' => __( 'Friends', 'buddypress' ),
'href' => trailingslashit( $activity_link . bp_get_friends_slug() )
);
}
// Groups?
if ( bp_is_active( 'groups' ) ) {
$wp_admin_nav[] = array(
'parent' => 'my-account-' . $this->id,
'id' => 'my-account-' . $this->id . '-groups',
'title' => __( 'Groups', 'buddypress' ),
'href' => trailingslashit( $activity_link . bp_get_groups_slug() )
);
}
}
parent::setup_admin_bar( $wp_admin_nav );
}
/**
* Set up the title for pages and <title>.
*
* @since BuddyPress (1.5)
*
* @uses bp_is_activity_component()
* @uses bp_is_my_profile()
* @uses bp_core_fetch_avatar()
*/
function setup_title() {
$bp = buddypress();
// Adjust title based on view
if ( bp_is_activity_component() ) {
if ( bp_is_my_profile() ) {
$bp->bp_options_title = __( 'My Activity', 'buddypress' );
} else {
$bp->bp_options_avatar = bp_core_fetch_avatar( array(
'item_id' => bp_displayed_user_id(),
'type' => 'thumb',
'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_get_displayed_user_fullname() )
) );
$bp->bp_options_title = bp_get_displayed_user_fullname();
}
}
parent::setup_title();
}
/**
* Set up actions necessary for the component.
*
* @since BuddyPress (1.6)
*/
function setup_actions() {
// Spam prevention
add_action( 'bp_include', 'bp_activity_setup_akismet' );
parent::setup_actions();
}
}
/**
* Bootstrap the Activity component.
*/
function bp_setup_activity() {
buddypress()->activity = new BP_Activity_Component();
}
add_action( 'bp_setup_components', 'bp_setup_activity', 6 );