constants(); $this->setup_globals(); $this->includes(); $this->setup_actions(); } /** * Legacy BuddyPress constants * * Try to avoid using these. Their values have been moved into variables * in the $bp global, and have matching functions to get/set their value. * * @since BuddyPress (1.6) * * @uses is_multisite() * @uses get_current_site() * @uses get_current_blog_id() * @uses plugin_dir_path() * @uses plugin_dir_url() */ private function constants() { // Define the BuddyPress version if ( !defined( 'BP_VERSION' ) ) define( 'BP_VERSION', $this->version ); // Define the database version if ( !defined( 'BP_DB_VERSION' ) ) define( 'BP_DB_VERSION', $this->db_version ); // Place your custom code (actions/filters) in a file called // '/plugins/bp-custom.php' and it will be loaded before anything else. if ( file_exists( WP_PLUGIN_DIR . '/bp-custom.php' ) ) require( WP_PLUGIN_DIR . '/bp-custom.php' ); // Define on which blog ID BuddyPress should run if ( !defined( 'BP_ROOT_BLOG' ) ) { // Default to 1 $root_blog_id = 1; // Root blog is the main site on this network if ( is_multisite() && !defined( 'BP_ENABLE_MULTIBLOG' ) ) { $current_site = get_current_site(); $root_blog_id = $current_site->blog_id; // Root blog is every site on this network } elseif ( is_multisite() && defined( 'BP_ENABLE_MULTIBLOG' ) ) { $root_blog_id = get_current_blog_id(); } define( 'BP_ROOT_BLOG', $root_blog_id ); } // Path and URL if ( !defined( 'BP_PLUGIN_DIR' ) ) define( 'BP_PLUGIN_DIR', trailingslashit( WP_PLUGIN_DIR . '/buddypress' ) ); if ( !defined( 'BP_PLUGIN_URL' ) ) { $plugin_url = plugin_dir_url( __FILE__ ); // If we're using https, update the protocol. Workaround for WP13941, WP15928, WP19037. if ( is_ssl() ) $plugin_url = str_replace( 'http://', 'https://', $plugin_url ); define( 'BP_PLUGIN_URL', $plugin_url ); } // The search slug has to be defined nice and early because of the way // search requests are loaded // // @todo Make this better if ( !defined( 'BP_SEARCH_SLUG' ) ) define( 'BP_SEARCH_SLUG', 'search' ); } /** * Component global variables * * @since BuddyPress (1.6) * @access private * * @uses plugin_dir_path() To generate BuddyPress plugin path * @uses plugin_dir_url() To generate BuddyPress plugin url * @uses apply_filters() Calls various filters */ private function setup_globals() { /** Root **************************************************************/ // BuddyPress Root blog ID $this->root_blog_id = (int) apply_filters( 'bp_get_root_blog_id', BP_ROOT_BLOG ); /** Paths *************************************************************/ // BuddyPress root directory $this->file = __FILE__; $this->basename = plugin_basename( $this->file ); $this->plugin_dir = BP_PLUGIN_DIR; $this->plugin_url = BP_PLUGIN_URL; // Themes $this->themes_dir = $this->plugin_dir . 'bp-themes'; $this->themes_url = $this->plugin_url . 'bp-themes'; // Languages $this->lang_dir = $this->plugin_dir . 'bp-languages'; /** Users *************************************************************/ $this->current_user = new stdClass(); $this->displayed_user = new stdClass(); } /** * Include required files * * @since BuddyPress (1.6) * @access private * * @uses is_admin() If in WordPress admin, load additional file */ private function includes() { // Load the WP abstraction file so BuddyPress can run on all WordPress setups. require( BP_PLUGIN_DIR . '/bp-core/bp-core-wpabstraction.php' ); // Get the possible DB versions (boy is this gross) $versions = array(); $versions['1.6-single'] = get_blog_option( $this->root_blog_id, '_bp_db_version' ); // 1.6-single exists, so trust it if ( !empty( $versions['1.6-single'] ) ) { $this->db_version_raw = (int) $versions['1.6-single']; // If no 1.6-single exists, use the max of the others } else { $versions['1.2'] = get_site_option( 'bp-core-db-version' ); $versions['1.5-multi'] = get_site_option( 'bp-db-version' ); $versions['1.6-multi'] = get_site_option( '_bp_db_version' ); $versions['1.5-single'] = get_blog_option( $this->root_blog_id, 'bp-db-version' ); // Remove empty array items $versions = array_filter( $versions ); $this->db_version_raw = (int) ( !empty( $versions ) ) ? (int) max( $versions ) : 0; } /** Update/Install ****************************************************/ // This is a new installation if ( is_admin() ) { // New installation if ( empty( $this->db_version_raw ) ) { $this->maintenance_mode = 'install'; // Update } elseif ( (int) $this->db_version_raw < (int) $this->db_version ) { $this->maintenance_mode = 'update'; } // The installation process requires a few BuddyPress core libraries if ( !empty( $this->maintenance_mode ) ) { require( $this->plugin_dir . 'bp-core/bp-core-admin.php' ); require( $this->plugin_dir . 'bp-core/bp-core-functions.php' ); require( $this->plugin_dir . 'bp-core/bp-core-template.php' ); require( $this->plugin_dir . 'bp-core/bp-core-update.php' ); require( $this->plugin_dir . 'bp-core/bp-core-caps.php' ); require( $this->plugin_dir . 'bp-core/bp-core-options.php' ); /** * Textdomain is usually loaded via the bp_core_loaded action, but * that action isn't available when BP is in maintenance mode. */ add_action( 'plugins_loaded', 'bp_core_load_buddypress_textdomain', 9 ); // Load up BuddyPress's admin add_action( 'plugins_loaded', 'bp_admin' ); } } // Not in maintenance mode if ( empty( $this->maintenance_mode ) ) { // Require all of the BuddyPress core libraries require( $this->plugin_dir . 'bp-core/bp-core-actions.php' ); require( $this->plugin_dir . 'bp-core/bp-core-caps.php' ); require( $this->plugin_dir . 'bp-core/bp-core-cache.php' ); require( $this->plugin_dir . 'bp-core/bp-core-cssjs.php' ); require( $this->plugin_dir . 'bp-core/bp-core-update.php' ); require( $this->plugin_dir . 'bp-core/bp-core-options.php' ); require( $this->plugin_dir . 'bp-core/bp-core-classes.php' ); require( $this->plugin_dir . 'bp-core/bp-core-filters.php' ); require( $this->plugin_dir . 'bp-core/bp-core-avatars.php' ); require( $this->plugin_dir . 'bp-core/bp-core-widgets.php' ); require( $this->plugin_dir . 'bp-core/bp-core-template.php' ); require( $this->plugin_dir . 'bp-core/bp-core-adminbar.php' ); require( $this->plugin_dir . 'bp-core/bp-core-buddybar.php' ); require( $this->plugin_dir . 'bp-core/bp-core-catchuri.php' ); require( $this->plugin_dir . 'bp-core/bp-core-component.php' ); require( $this->plugin_dir . 'bp-core/bp-core-functions.php' ); require( $this->plugin_dir . 'bp-core/bp-core-moderation.php' ); require( $this->plugin_dir . 'bp-core/bp-core-loader.php' ); // Skip or load deprecated content if ( false !== $this->load_deprecated ) { require( $this->plugin_dir . 'bp-core/deprecated/1.5.php' ); require( $this->plugin_dir . 'bp-core/deprecated/1.6.php' ); } } } /** * Setup the default hooks and actions * * @since BuddyPress (1.6) * @access private * * @uses register_activation_hook() To register the activation hook * @uses register_deactivation_hook() To register the deactivation hook * @uses add_action() To add various actions */ private function setup_actions() { // Add actions to plugin activation and deactivation hooks add_action( 'activate_' . $this->basename, 'bp_activation' ); add_action( 'deactivate_' . $this->basename, 'bp_deactivation' ); // If BuddyPress is being deactivated, do not add any actions if ( bp_is_deactivation( $this->basename ) ) return; // Array of BuddyPress core actions $actions = array( 'setup_current_user', // Setup currently logged in user 'register_post_types', // Register post types 'register_post_statuses', // Register post statuses 'register_taxonomies', // Register taxonomies 'register_views', // Register the views 'register_theme_directory', // Register the theme directory 'load_textdomain', // Load textdomain 'add_rewrite_tags', // Add rewrite tags 'generate_rewrite_rules' // Generate rewrite rules ); // Add the actions foreach( $actions as $class_action ) add_action( 'bp_' . $class_action, array( $this, $class_action ), 5 ); // Setup the BuddyPress theme directory register_theme_directory( $this->themes_dir ); } } // "And now for something completely different" $GLOBALS['bp'] = new BuddyPress; endif; ?>