/**
  * Includes.
  */
 public function includes($includes = array())
 {
     /**  Backwards-compatibility ******************************************/
     // template stack for BP < 1.7
     if (!class_exists('BP_Theme_Compat')) {
         require $this->path . '/backpat/template-stack.php';
     }
     // activity scope for BP < 2.2
     if (!class_exists('BP_Activity_Query')) {
         require $this->path . '/backpat/activity-scope.php';
     }
     /** Core **************************************************************/
     require $this->path . '/bp-follow-classes.php';
     require $this->path . '/bp-follow-functions.php';
     // users module
     if (true === (bool) apply_filters('bp_follow_enable_users', true)) {
         require $this->path . '/users/screens.php';
         require $this->path . '/users/actions.php';
         require $this->path . '/users/hooks.php';
         require $this->path . '/users/template.php';
         require $this->path . '/users/notifications.php';
         require $this->path . '/users/widgets.php';
     }
     // blogs module - on multisite and BP 2.0+ only
     if (function_exists('bp_add_option') && bp_is_active('blogs') && is_multisite() && bp_is_network_activated() && apply_filters('bp_follow_enable_blogs', true)) {
         require $this->path . '/modules/blogs.php';
     }
     // updater
     if (defined('WP_NETWORK_ADMIN')) {
         require $this->path . '/bp-follow-updater.php';
     }
 }
 /**
  * Create the All Users / Profile > Edit Profile and All Users Signups submenus.
  *
  * @since 2.0.0
  *
  */
 public function admin_menus()
 {
     // Setup the hooks array.
     $hooks = array();
     // Manage user's profile.
     $hooks['user'] = $this->user_page = add_submenu_page($this->user_profile . '.php', __('Edit Profile', 'buddypress'), __('Edit Profile', 'buddypress'), 'read', 'bp-profile-edit', array($this, 'user_admin'));
     // Only show sign-ups where they belong.
     if (!bp_is_network_activated() && !is_network_admin() || is_network_admin() && bp_is_network_activated()) {
         // Manage signups.
         $hooks['signups'] = $this->signups_page = add_users_page(__('Manage Signups', 'buddypress'), __('Manage Signups', 'buddypress'), $this->capability, 'bp-signups', array($this, 'signups_admin'));
     }
     $edit_page = 'user-edit';
     $profile_page = 'profile';
     $this->users_page = 'users';
     // Self profile check is needed for this pages.
     $page_head = array($edit_page . '.php', $profile_page . '.php', $this->user_page, $this->users_page . '.php');
     // Append '-network' to each array item if in network admin.
     if (is_network_admin()) {
         $edit_page .= '-network';
         $profile_page .= '-network';
         $this->user_page .= '-network';
         $this->users_page .= '-network';
         $this->signups_page .= '-network';
     }
     // Setup the screen ID's.
     $this->screen_id = array($edit_page, $this->user_page, $profile_page);
     // Loop through new hooks and add method actions.
     foreach ($hooks as $key => $hook) {
         add_action("load-{$hook}", array($this, $key . '_admin_load'));
     }
     // Add the profile_admin_head method to proper admin_head actions.
     foreach ($page_head as $head) {
         add_action("admin_head-{$head}", array($this, 'profile_admin_head'));
     }
 }
/**
 * Are we running multiblog mode?
 *
 * Note that BP_ENABLE_MULTIBLOG is different from (but dependent on) WordPress
 * Multisite. "Multiblog" is BuddyPress setup that allows BuddyPress components
 * to be viewed on every blog on the network, each with their own settings.
 *
 * Thus, instead of having all 'boonebgorges' links go to
 *   http://example.com/members/boonebgorges
 * on the root blog, each blog will have its own version of the same content, eg
 *   http://site2.example.com/members/boonebgorges (for subdomains)
 *   http://example.com/site2/members/boonebgorges (for subdirectories)
 *
 * Multiblog mode is disabled by default, meaning that all BuddyPress content
 * must be viewed on the root blog. It's also recommended not to use the
 * BP_ENABLE_MULTIBLOG constant beyond 1.7, as BuddyPress can now be activated
 * on individual sites.
 *
 * Why would you want to use this? Originally it was intended to allow
 * BuddyPress to live in mu-plugins and be visible on mapped domains. This is
 * a very small use-case with large architectural shortcomings, so do not go
 * down this road unless you specifically need to.
 *
 * @since BuddyPress (1.5.0)
 *
 * @uses apply_filters() Filter 'bp_is_multiblog_mode' to alter.
 *
 * @return bool False when multiblog mode is disabled; true when enabled.
 *         Default: false.
 */
function bp_is_multiblog_mode()
{
    // Setup some default values
    $retval = false;
    $is_multisite = is_multisite();
    $network_active = bp_is_network_activated();
    $is_multiblog = defined('BP_ENABLE_MULTIBLOG') && BP_ENABLE_MULTIBLOG;
    // Multisite, Network Activated, and Specifically Multiblog
    if ($is_multisite && $network_active && $is_multiblog) {
        $retval = true;
        // Multisite, but not network activated
    } elseif ($is_multisite && !$network_active) {
        $retval = true;
    }
    return apply_filters('bp_is_multiblog_mode', $retval);
}
/**
 * Add a separator to the WordPress admin menus.
 *
 * @since 1.7.0
 *
 * @uses bp_current_user_can() To check users capability on root blog.
 */
function bp_admin_separator()
{
    // Bail if BuddyPress is not network activated and viewing network admin.
    if (is_network_admin() && !bp_is_network_activated()) {
        return;
    }
    // Bail if BuddyPress is network activated and viewing site admin.
    if (!is_network_admin() && bp_is_network_activated()) {
        return;
    }
    // Prevent duplicate separators when no core menu items exist.
    if (!bp_current_user_can('bp_moderate')) {
        return;
    }
    // Bail if there are no components with admin UI's. Hardcoded for now, until
    // there's a real API for determining this later.
    if (!bp_is_active('activity') && !bp_is_active('groups')) {
        return;
    }
    global $menu;
    $menu[] = array('', 'read', 'separator-buddypress', '', 'wp-menu-separator buddypress');
}
Example #5
0
/**
 * Temporary implementation of 'bp_moderate' cap.
 *
 * In BuddyPress 1.6, the 'bp_moderate' cap was introduced. In order to
 * enforce that bp_current_user_can( 'bp_moderate' ) always returns true for
 * Administrators, we must manually add the 'bp_moderate' cap to the list of
 * user caps for Admins.
 *
 * Note that this level of enforcement is only necessary in the case of
 * non-Multisite. This is because WordPress automatically assigns every
 * capability - and thus 'bp_moderate' - to Super Admins on a Multisite
 * installation. See {@link WP_User::has_cap()}.
 *
 * This implementation of 'bp_moderate' is temporary, until BuddyPress properly
 * matches caps to roles and stores them in the database. Plugin authors: Do
 * not use this function.
 *
 * @access private
 * @since BuddyPress (1.6.0)
 *
 * @see WP_User::has_cap()
 *
 * @param array $allcaps The caps that WP associates with the given role.
 * @param array $caps The caps being tested for in WP_User::has_cap().
 * @param array $args Miscellaneous arguments passed to the user_has_cap filter.
 * @return array $allcaps The user's cap list, with 'bp_moderate' appended, if relevant.
 */
function _bp_enforce_bp_moderate_cap_for_admins($caps = array(), $cap = '', $user_id = 0, $args = array())
{
    // Bail if not checking the 'bp_moderate' cap
    if ('bp_moderate' !== $cap) {
        return $caps;
    }
    // Bail if BuddyPress is not network activated
    if (bp_is_network_activated()) {
        return $caps;
    }
    // Never trust inactive users
    if (bp_is_user_inactive($user_id)) {
        return $caps;
    }
    // Only users that can 'manage_options' on this site can 'bp_moderate'
    return array('manage_options');
}
 /**
  * Add Emails menu item to custom menus array.
  *
  * Several BuddyPress components have top-level menu items in the Dashboard,
  * which all appear together in the middle of the Dashboard menu. This function
  * adds the Emails screen to the array of these menu items.
  *
  * @since 2.4.0
  *
  * @param array $custom_menus The list of top-level BP menu items.
  * @return array $custom_menus List of top-level BP menu items, with Emails added.
  */
 public function emails_admin_menu_order($custom_menus = array())
 {
     array_push($custom_menus, 'edit.php?post_type=' . bp_get_email_post_type());
     if (is_network_admin() && bp_is_network_activated()) {
         array_push($custom_menus, get_admin_url(bp_get_root_blog_id(), 'edit.php?post_type=' . bp_get_email_post_type()));
     }
     return $custom_menus;
 }
/**
 * Are we running multiblog mode?
 *
 * Note that BP_ENABLE_MULTIBLOG is different from (but dependent on) WordPress
 * Multisite. "Multiblog" is BuddyPress setup that allows BuddyPress components
 * to be viewed on every blog on the network, each with their own settings.
 *
 * Thus, instead of having all 'boonebgorges' links go to
 *   http://example.com/members/boonebgorges
 * on the root blog, each blog will have its own version of the same content, eg
 *   http://site2.example.com/members/boonebgorges (for subdomains)
 *   http://example.com/site2/members/boonebgorges (for subdirectories)
 *
 * Multiblog mode is disabled by default, meaning that all BuddyPress content
 * must be viewed on the root blog. It's also recommended not to use the
 * BP_ENABLE_MULTIBLOG constant beyond 1.7, as BuddyPress can now be activated
 * on individual sites.
 *
 * Why would you want to use this? Originally it was intended to allow
 * BuddyPress to live in mu-plugins and be visible on mapped domains. This is
 * a very small use-case with large architectural shortcomings, so do not go
 * down this road unless you specifically need to.
 *
 * @since BuddyPress (1.5.0)
 *
 * @uses apply_filters() Filter 'bp_is_multiblog_mode' to alter.
 *
 * @return bool False when multiblog mode is disabled; true when enabled.
 *         Default: false.
 */
function bp_is_multiblog_mode()
{
    // Setup some default values
    $retval = false;
    $is_multisite = is_multisite();
    $network_active = bp_is_network_activated();
    $is_multiblog = defined('BP_ENABLE_MULTIBLOG') && BP_ENABLE_MULTIBLOG;
    // Multisite, Network Activated, and Specifically Multiblog
    if ($is_multisite && $network_active && $is_multiblog) {
        $retval = true;
        // Multisite, but not network activated
    } elseif ($is_multisite && !$network_active) {
        $retval = true;
    }
    /**
     * Filters whether or not we're running in multiblog mode.
     *
     * @since BuddyPress (1.5.0)
     *
     * @param bool $retval Whether or not we're running multiblog mode.
     */
    return apply_filters('bp_is_multiblog_mode', $retval);
}
/**
 * Disable signups managment by WP Idea Stream if BuddyPress should manage them
 *
 * There can be a situation when WP Idea Stream is not activated on
 * the network while BuddyPress is.
 *
 * @since 2.2.0
 *
 * @param  bool $signup_allowed
 * @return bool True if BuddyPress is not active on the current blog or the network, false otherwise
 */
function wp_idea_stream_buddypress_is_managing_signup($signup_allowed)
{
    if (true === $signup_allowed && function_exists('buddypress')) {
        $signup_allowed = !bp_is_root_blog() && !bp_is_network_activated();
    }
    return $signup_allowed;
}
Example #9
0
 /**
  * Set admin-related globals.
  *
  * @access private
  * @since BuddyPress (2.0.0)
  */
 private function setup_globals()
 {
     $bp = buddypress();
     // Paths and URLs
     $this->admin_dir = trailingslashit($bp->plugin_dir . 'bp-members/admin');
     // Admin path
     $this->admin_url = trailingslashit($bp->plugin_url . 'bp-members/admin');
     // Admin URL
     $this->css_url = trailingslashit($this->admin_url . 'css');
     // Admin CSS URL
     $this->js_url = trailingslashit($this->admin_url . 'js');
     // Admin CSS URL
     // Capability depends on config
     $this->capability = bp_core_do_network_admin() ? 'manage_network_users' : 'edit_users';
     // The Edit Profile Screen id
     $this->user_page = '';
     // The Show Profile Screen id
     $this->user_profile = is_network_admin() ? 'users' : 'profile';
     // The current user id
     $this->current_user_id = get_current_user_id();
     // The user id being edited
     $this->user_id = 0;
     // Is a member editing their own profile
     $this->is_self_profile = false;
     // The screen ids to load specific css for
     $this->screen_id = array();
     // The stats metabox default position
     $this->stats_metabox = new StdClass();
     // BuddyPress edit user's profile args
     $this->edit_profile_args = array('page' => 'bp-profile-edit');
     $this->edit_profile_url = '';
     $this->edit_url = '';
     // Data specific to signups
     $this->users_page = '';
     $this->signups_page = '';
     $this->users_url = bp_get_admin_url('users.php');
     $this->users_screen = bp_core_do_network_admin() ? 'users-network' : 'users';
     // Specific config: BuddyPress is not network activated
     $this->subsite_activated = (bool) is_multisite() && !bp_is_network_activated();
     // When BuddyPress is not network activated, only Super Admin can moderate signups
     if (!empty($this->subsite_activated)) {
         $this->capability = 'manage_network_users';
     }
 }
 /**
  * Set admin-related globals.
  *
  * @access private
  * @since BuddyPress (2.0.0)
  */
 private function setup_globals()
 {
     $bp = buddypress();
     // Paths and URLs
     $this->admin_dir = trailingslashit($bp->plugin_dir . 'bp-members/admin');
     // Admin path
     $this->admin_url = trailingslashit($bp->plugin_url . 'bp-members/admin');
     // Admin URL
     $this->css_url = trailingslashit($this->admin_url . 'css');
     // Admin CSS URL
     $this->js_url = trailingslashit($this->admin_url . 'js');
     // Admin CSS URL
     // Capability depends on config
     $this->capability = bp_core_do_network_admin() ? 'manage_network_options' : 'manage_options';
     // The Edit Profile Screen id
     $this->user_page = '';
     // The screen ids to load specific css for
     $this->screen_id = array();
     // The stats metabox default position
     $this->stats_metabox = new StdClass();
     // The WordPress edit user url
     $this->edit_url = bp_get_admin_url('user-edit.php');
     // BuddyPress edit user's profile url
     $this->edit_profile_url = add_query_arg('page', 'bp-profile-edit', bp_get_admin_url('users.php'));
     // Data specific to signups
     $this->users_page = '';
     $this->signups_page = '';
     $this->users_url = bp_get_admin_url('users.php');
     $this->users_screen = bp_core_do_network_admin() ? 'users-network' : 'users';
     // Specific config: BuddyPress is not network activated
     $this->subsite_activated = (bool) is_multisite() && !bp_is_network_activated();
     // When BuddyPress is not network activated, only Super Admin can moderate signups
     if (!empty($this->subsite_activated)) {
         $this->capability = 'manage_network_options';
     }
 }
/**
 * Handles Plugin activation
 *
 * @uses bp_core_get_directory_page_ids() to get the BuddyPress component page ids
 * @uses buddydrive_get_slug() to get BuddyDrive slug
 * @uses wp_insert_post() to eventually create a new page for BuddyDrive
 * @uses buddydrive_get_name() to get BuddyDrive plugin name
 * @uses bp_core_update_directory_page_ids() to update the BuddyPres component pages ids
 */
function buddydrive_activation()
{
    // For network, as plugin is not yet activated, bail method won't help..
    if (is_network_admin() && function_exists('buddypress')) {
        $check = !empty($_REQUEST) && 'activate' == $_REQUEST['action'] && $_REQUEST['plugin'] == buddydrive()->basename && bp_is_network_activated() && buddydrive::version_check();
    } else {
        $check = !buddydrive::bail();
    }
    if (empty($check)) {
        return;
    }
    // let's check for BuddyDrive page in directory pages first !
    $directory_pages = bp_core_get_directory_page_ids();
    $buddydrive_slug = buddydrive_get_slug();
    if (empty($directory_pages[$buddydrive_slug])) {
        // let's create a page and add it to BuddyPress directory pages
        $buddydrive_page_content = __('BuddyDrive uses this page to manage the downloads of your buddies files, please leave it as is. It will not show in your navigation bar.', 'buddydrive');
        $buddydrive_page_id = wp_insert_post(array('comment_status' => 'closed', 'ping_status' => 'closed', 'post_title' => buddydrive_get_name(), 'post_content' => $buddydrive_page_content, 'post_name' => $buddydrive_slug, 'post_status' => 'publish', 'post_type' => 'page'));
        $directory_pages[$buddydrive_slug] = $buddydrive_page_id;
        bp_core_update_directory_page_ids($directory_pages);
    }
    do_action('buddydrive_activation');
}