setup_globals(); $this->includes(); $this->setup_actions(); } /** * Admin globals * * @since bbPress (r2646) * @access private */ private function setup_globals() { $bbp = bbpress(); $this->admin_dir = trailingslashit( $bbp->includes_dir . 'admin' ); // Admin path $this->admin_url = trailingslashit( $bbp->includes_url . 'admin' ); // Admin url $this->images_url = trailingslashit( $this->admin_url . 'images' ); // Admin images URL $this->styles_url = trailingslashit( $this->admin_url . 'styles' ); // Admin styles URL $this->css_url = trailingslashit( $this->admin_url . 'css' ); // Admin css URL $this->js_url = trailingslashit( $this->admin_url . 'js' ); // Admin js URL } /** * Include required files * * @since bbPress (r2646) * @access private */ private function includes() { require( $this->admin_dir . 'tools.php' ); require( $this->admin_dir . 'converter.php' ); require( $this->admin_dir . 'settings.php' ); require( $this->admin_dir . 'functions.php' ); require( $this->admin_dir . 'metaboxes.php' ); require( $this->admin_dir . 'forums.php' ); require( $this->admin_dir . 'topics.php' ); require( $this->admin_dir . 'replies.php' ); require( $this->admin_dir . 'users.php' ); } /** * Setup the admin hooks, actions and filters * * @since bbPress (r2646) * @access private * * @uses add_action() To add various actions * @uses add_filter() To add various filters */ private function setup_actions() { // Bail to prevent interfering with the deactivation process if ( bbp_is_deactivation() ) return; /** General Actions ***************************************************/ add_action( 'bbp_admin_menu', array( $this, 'admin_menus' ) ); // Add menu item to settings menu add_action( 'bbp_admin_head', array( $this, 'admin_head' ) ); // Add some general styling to the admin area add_action( 'bbp_admin_notices', array( $this, 'activation_notice' ) ); // Add notice if not using a bbPress theme add_action( 'bbp_register_admin_style', array( $this, 'register_admin_style' ) ); // Add green admin style add_action( 'bbp_register_admin_settings', array( $this, 'register_admin_settings' ) ); // Add settings add_action( 'bbp_activation', array( $this, 'new_install' ) ); // Add menu item to settings menu add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Add enqueued CSS add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Add enqueued JS add_action( 'wp_dashboard_setup', array( $this, 'dashboard_widget_right_now' ) ); // Forums 'Right now' Dashboard widget add_action( 'admin_bar_menu', array( $this, 'admin_bar_about_link' ), 15 ); // Add a link to bbPress about page to the admin bar /** Ajax **************************************************************/ add_action( 'wp_ajax_bbp_suggest_topic', array( $this, 'suggest_topic' ) ); add_action( 'wp_ajax_nopriv_bbp_suggest_topic', array( $this, 'suggest_topic' ) ); add_action( 'wp_ajax_bbp_suggest_user', array( $this, 'suggest_user' ) ); add_action( 'wp_ajax_nopriv_bbp_suggest_user', array( $this, 'suggest_user' ) ); /** Filters ***********************************************************/ // Modify bbPress's admin links add_filter( 'plugin_action_links', array( $this, 'modify_plugin_action_links' ), 10, 2 ); // Map settings capabilities add_filter( 'bbp_map_meta_caps', array( $this, 'map_settings_meta_caps' ), 10, 4 ); // Hide the theme compat package selection add_filter( 'bbp_admin_get_settings_sections', array( $this, 'hide_theme_compat_packages' ) ); // Allow keymasters to save forums settings add_filter( 'option_page_capability_bbpress', array( $this, 'option_page_capability_bbpress' ) ); /** Network Admin *****************************************************/ // Add menu item to settings menu add_action( 'network_admin_menu', array( $this, 'network_admin_menus' ) ); /** Dependencies ******************************************************/ // Allow plugins to modify these actions do_action_ref_array( 'bbp_admin_loaded', array( &$this ) ); } /** * Add the admin menus * * @since bbPress (r2646) * * @uses add_management_page() To add the Recount page in Tools section * @uses add_options_page() To add the Forums settings page in Settings * section */ public function admin_menus() { $hooks = array(); // These are later removed in admin_head if ( current_user_can( 'bbp_tools_page' ) ) { if ( current_user_can( 'bbp_tools_repair_page' ) ) { $hooks[] = add_management_page( __( 'Repair Forums', 'bbpress' ), __( 'Forum Repair', 'bbpress' ), $this->minimum_capability, 'bbp-repair', 'bbp_admin_repair' ); } if ( current_user_can( 'bbp_tools_import_page' ) ) { $hooks[] = add_management_page( __( 'Import Forums', 'bbpress' ), __( 'Forum Import', 'bbpress' ), $this->minimum_capability, 'bbp-converter', 'bbp_converter_settings' ); } if ( current_user_can( 'bbp_tools_reset_page' ) ) { $hooks[] = add_management_page( __( 'Reset Forums', 'bbpress' ), __( 'Forum Reset', 'bbpress' ), $this->minimum_capability, 'bbp-reset', 'bbp_admin_reset' ); } // Fudge the highlighted subnav item when on a bbPress admin page foreach ( $hooks as $hook ) { add_action( "admin_head-$hook", 'bbp_tools_modify_menu_highlight' ); } // Forums Tools Root add_management_page( __( 'Forums', 'bbpress' ), __( 'Forums', 'bbpress' ), $this->minimum_capability, 'bbp-repair', 'bbp_admin_repair' ); } // Are settings enabled? if ( ! bbp_settings_integration() && current_user_can( 'bbp_settings_page' ) ) { add_options_page( __( 'Forums', 'bbpress' ), __( 'Forums', 'bbpress' ), $this->minimum_capability, 'bbpress', 'bbp_admin_settings' ); } // These are later removed in admin_head if ( current_user_can( 'bbp_about_page' ) ) { // About add_dashboard_page( __( 'Welcome to bbPress', 'bbpress' ), __( 'Welcome to bbPress', 'bbpress' ), $this->minimum_capability, 'bbp-about', array( $this, 'about_screen' ) ); // Credits add_dashboard_page( __( 'Welcome to bbPress', 'bbpress' ), __( 'Welcome to bbPress', 'bbpress' ), $this->minimum_capability, 'bbp-credits', array( $this, 'credits_screen' ) ); } // Bail if plugin is not network activated if ( ! is_plugin_active_for_network( bbpress()->basename ) ) return; add_submenu_page( 'index.php', __( 'Update Forums', 'bbpress' ), __( 'Update Forums', 'bbpress' ), 'manage_network', 'bbp-update', array( $this, 'update_screen' ) ); } /** * Add the network admin menus * * @since bbPress (r3689) * @uses add_submenu_page() To add the Update Forums page in Updates */ public function network_admin_menus() { // Bail if plugin is not network activated if ( ! is_plugin_active_for_network( bbpress()->basename ) ) return; add_submenu_page( 'upgrade.php', __( 'Update Forums', 'bbpress' ), __( 'Update Forums', 'bbpress' ), 'manage_network', 'bbpress-update', array( $this, 'network_update_screen' ) ); } /** * If this is a new installation, create some initial forum content. * * @since bbPress (r3767) * @return type */ public static function new_install() { if ( !bbp_is_install() ) return; bbp_create_initial_content(); } /** * Register the settings * * @since bbPress (r2737) * * @uses add_settings_section() To add our own settings section * @uses add_settings_field() To add various settings fields * @uses register_setting() To register various settings * @todo Put fields into multidimensional array */ public static function register_admin_settings() { // Bail if no sections available $sections = bbp_admin_get_settings_sections(); if ( empty( $sections ) ) return false; // Are we using settings integration? $settings_integration = bbp_settings_integration(); // Loop through sections foreach ( (array) $sections as $section_id => $section ) { // Only proceed if current user can see this section if ( ! current_user_can( $section_id ) ) continue; // Only add section and fields if section has fields $fields = bbp_admin_get_settings_fields_for_section( $section_id ); if ( empty( $fields ) ) continue; // Toggle the section if core integration is on if ( ( true === $settings_integration ) && !empty( $section['page'] ) ) { $page = $section['page']; } else { $page = 'bbpress'; } // Add the section add_settings_section( $section_id, $section['title'], $section['callback'], $page ); // Loop through fields for this section foreach ( (array) $fields as $field_id => $field ) { // Add the field if ( ! empty( $field['callback'] ) && !empty( $field['title'] ) ) { add_settings_field( $field_id, $field['title'], $field['callback'], $page, $section_id, $field['args'] ); } // Register the setting register_setting( $page, $field_id, $field['sanitize_callback'] ); } } } /** * Maps settings capabilities * * @since bbPress (r4242) * * @param array $caps Capabilities for meta capability * @param string $cap Capability name * @param int $user_id User id * @param mixed $args Arguments * @uses get_post() To get the post * @uses apply_filters() Calls 'bbp_map_meta_caps' with caps, cap, user id and * args * @return array Actual capabilities for meta capability */ public static function map_settings_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) { // What capability is being checked? switch ( $cap ) { // BuddyPress case 'bbp_settings_buddypress' : if ( ( is_plugin_active( 'buddypress/bp-loader.php' ) && defined( 'BP_VERSION' ) && bp_is_root_blog() ) && is_super_admin() ) { $caps = array( bbpress()->admin->minimum_capability ); } else { $caps = array( 'do_not_allow' ); } break; // Akismet case 'bbp_settings_akismet' : if ( ( is_plugin_active( 'akismet/akismet.php' ) && defined( 'AKISMET_VERSION' ) ) && is_super_admin() ) { $caps = array( bbpress()->admin->minimum_capability ); } else { $caps = array( 'do_not_allow' ); } break; // bbPress case 'bbp_about_page' : // About and Credits case 'bbp_tools_page' : // Tools Page case 'bbp_tools_repair_page' : // Tools - Repair Page case 'bbp_tools_import_page' : // Tools - Import Page case 'bbp_tools_reset_page' : // Tools - Reset Page case 'bbp_settings_page' : // Settings Page case 'bbp_settings_users' : // Settings - Users case 'bbp_settings_features' : // Settings - Features case 'bbp_settings_theme_compat' : // Settings - Theme compat case 'bbp_settings_root_slugs' : // Settings - Root slugs case 'bbp_settings_single_slugs' : // Settings - Single slugs case 'bbp_settings_user_slugs' : // Settings - User slugs case 'bbp_settings_per_page' : // Settings - Per page case 'bbp_settings_per_rss_page' : // Settings - Per RSS page $caps = array( bbpress()->admin->minimum_capability ); break; } return apply_filters( 'bbp_map_settings_meta_caps', $caps, $cap, $user_id, $args ); } /** * Register the importers * * @since bbPress (r2737) * * @uses apply_filters() Calls 'bbp_importer_path' filter to allow plugins * to customize the importer script locations. */ public function register_importers() { // Leave if we're not in the import section if ( !defined( 'WP_LOAD_IMPORTERS' ) ) return; // Load Importer API require_once( ABSPATH . 'wp-admin/includes/import.php' ); // Load our importers $importers = apply_filters( 'bbp_importers', array( 'bbpress' ) ); // Loop through included importers foreach ( $importers as $importer ) { // Allow custom importer directory $import_dir = apply_filters( 'bbp_importer_path', $this->admin_dir . 'importers', $importer ); // Compile the importer path $import_file = trailingslashit( $import_dir ) . $importer . '.php'; // If the file exists, include it if ( file_exists( $import_file ) ) { require( $import_file ); } } } /** * Admin area activation notice * * Shows a nag message in admin area about the theme not supporting bbPress * * @since bbPress (r2743) * * @uses current_user_can() To check notice should be displayed. */ public function activation_notice() { // @todo - something fun } /** * Add Settings link to plugins area * * @since bbPress (r2737) * * @param array $links Links array in which we would prepend our link * @param string $file Current plugin basename * @return array Processed links */ public static function modify_plugin_action_links( $links, $file ) { // Return normal links if not bbPress if ( plugin_basename( bbpress()->file ) !== $file ) { return $links; } // New links to merge into existing links $new_links = array(); // Settings page link if ( current_user_can( 'bbp_settings_page' ) ) { $new_links['settings'] = '' . esc_html__( 'Settings', 'bbpress' ) . ''; } // About page link if ( current_user_can( 'bbp_about_page' ) ) { $new_links['about'] = '' . esc_html__( 'About', 'bbpress' ) . ''; } // Add a few links to the existing links array return array_merge( $links, $new_links ); } /** * Add the 'Right now in Forums' dashboard widget * * @since bbPress (r2770) * * @uses wp_add_dashboard_widget() To add the dashboard widget */ public static function dashboard_widget_right_now() { wp_add_dashboard_widget( 'bbp-dashboard-right-now', __( 'Right Now in Forums', 'bbpress' ), 'bbp_dashboard_widget_right_now' ); } /** * Add a link to bbPress about page to the admin bar * * @since bbPress (r5136) * * @param WP_Admin_Bar $wp_admin_bar */ public function admin_bar_about_link( $wp_admin_bar ) { if ( is_user_logged_in() ) { $wp_admin_bar->add_menu( array( 'parent' => 'wp-logo', 'id' => 'bbp-about', 'title' => esc_html__( 'About bbPress', 'bbpress' ), 'href' => add_query_arg( array( 'page' => 'bbp-about' ), admin_url( 'index.php' ) ) ) ); } } /** * Enqueue any admin scripts we might need * * @since bbPress (r4260) */ public function enqueue_scripts() { wp_enqueue_script( 'suggest' ); // Get the version to use for JS $version = bbp_get_version(); // Post type checker (only topics and replies) if ( 'post' === get_current_screen()->base ) { switch( get_current_screen()->post_type ) { case bbp_get_reply_post_type() : case bbp_get_topic_post_type() : // Enqueue the common JS wp_enqueue_script( 'bbp-admin-common-js', $this->js_url . 'common.js', array( 'jquery' ), $version ); // Topics admin if ( bbp_get_topic_post_type() === get_current_screen()->post_type ) { wp_enqueue_script( 'bbp-admin-topics-js', $this->js_url . 'topics.js', array( 'jquery' ), $version ); // Replies admin } elseif ( bbp_get_reply_post_type() === get_current_screen()->post_type ) { wp_enqueue_script( 'bbp-admin-replies-js', $this->js_url . 'replies.js', array( 'jquery' ), $version ); } break; } } } /** * Enqueue any admin scripts we might need * * @since bbPress (r5224) */ public function enqueue_styles() { wp_enqueue_style( 'bbp-admin-css', $this->css_url . 'admin.css', array( 'dashicons' ), bbp_get_version() ); } /** * Remove the individual recount and converter menus. * They are grouped together by h2 tabs * * @since bbPress (r2464) * * @uses remove_submenu_page() To remove menu items with alternat navigation */ public function admin_head() { remove_submenu_page( 'tools.php', 'bbp-repair' ); remove_submenu_page( 'tools.php', 'bbp-converter' ); remove_submenu_page( 'tools.php', 'bbp-reset' ); remove_submenu_page( 'index.php', 'bbp-about' ); remove_submenu_page( 'index.php', 'bbp-credits' ); } /** * Registers the bbPress admin color scheme * * Because wp-content can exist outside of the WordPress root there is no * way to be certain what the relative path of the admin images is. * We are including the two most common configurations here, just in case. * * @since bbPress (r2521) * * @uses wp_admin_css_color() To register the color scheme */ public function register_admin_style () { // RTL and/or minified $suffix = is_rtl() ? '-rtl' : ''; //$suffix .= defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; // Mint wp_admin_css_color( 'bbp-mint', esc_html_x( 'Mint', 'admin color scheme', 'bbpress' ), $this->styles_url . 'mint' . $suffix . '.css', array( '#4f6d59', '#33834e', '#5FB37C', '#81c498' ), array( 'base' => '#f1f3f2', 'focus' => '#fff', 'current' => '#fff' ) ); // Evergreen wp_admin_css_color( 'bbp-evergreen', esc_html_x( 'Evergreen', 'admin color scheme', 'bbpress' ), $this->styles_url . 'evergreen' . $suffix . '.css', array( '#324d3a', '#446950', '#56b274', '#324d3a' ), array( 'base' => '#f1f3f2', 'focus' => '#fff', 'current' => '#fff' ) ); // Bail if already using the fresh color scheme if ( 'fresh' === get_user_option( 'admin_color' ) ) { return; } // Force 'colors-fresh' dependency global $wp_styles; $wp_styles->registered[ 'colors' ]->deps[] = 'colors-fresh'; } /** * Hide theme compat package selection if only 1 package is registered * * @since bbPress (r4315) * * @param array $sections Forums settings sections * @return array */ public function hide_theme_compat_packages( $sections = array() ) { if ( count( bbpress()->theme_compat->packages ) <= 1 ) unset( $sections['bbp_settings_theme_compat'] ); return $sections; } /** * Allow keymaster role to save Forums settings * * @since bbPress (r4678) * * @param string $capability * @return string Return 'keep_gate' capability */ public function option_page_capability_bbpress( $capability = 'manage_options' ) { $capability = 'keep_gate'; return $capability; } /** Ajax ******************************************************************/ /** * Ajax action for facilitating the forum auto-suggest * * @since bbPress (r4261) * * @uses get_posts() * @uses bbp_get_topic_post_type() * @uses bbp_get_topic_id() * @uses bbp_get_topic_title() */ public function suggest_topic() { global $wpdb; // Bail early if no request if ( empty( $_REQUEST['q'] ) ) { wp_die( '0' ); } // Bail if user cannot moderate - only moderators can change hierarchy if ( ! current_user_can( 'moderate' ) ) { wp_die( '0' ); } // Check the ajax nonce check_ajax_referer( 'bbp_suggest_topic_nonce' ); // Try to get some topics $topics = get_posts( array( 's' => $wpdb->esc_like( $_REQUEST['q'] ), 'post_type' => bbp_get_topic_post_type() ) ); // If we found some topics, loop through and display them if ( ! empty( $topics ) ) { foreach ( (array) $topics as $post ) { printf( esc_html__( '%s - %s', 'bbpress' ), bbp_get_topic_id( $post->ID ), bbp_get_topic_title( $post->ID ) . "\n" ); } } die(); } /** * Ajax action for facilitating the topic and reply author auto-suggest * * @since bbPress (r5014) */ public function suggest_user() { global $wpdb; // Bail early if no request if ( empty( $_REQUEST['q'] ) ) { wp_die( '0' ); } // Bail if user cannot moderate - only moderators can change authorship if ( ! current_user_can( 'moderate' ) ) { wp_die( '0' ); } // Check the ajax nonce check_ajax_referer( 'bbp_suggest_user_nonce' ); // Try to get some users $users_query = new WP_User_Query( array( 'search' => '*' . $wpdb->esc_like( $_REQUEST['q'] ) . '*', 'fields' => array( 'ID', 'user_nicename' ), 'search_columns' => array( 'ID', 'user_nicename', 'user_email' ), 'orderby' => 'ID' ) ); // If we found some users, loop through and display them if ( ! empty( $users_query->results ) ) { foreach ( (array) $users_query->results as $user ) { printf( esc_html__( '%s - %s', 'bbpress' ), bbp_get_user_id( $user->ID ), bbp_get_user_nicename( $user->ID, array( 'force' => $user->user_nicename ) ) . "\n" ); } } die(); } /** About *****************************************************************/ /** * Output the about screen * * @since bbPress (r4159) */ public function about_screen() { list( $display_version ) = explode( '-', bbp_get_version() ); ?>

alex-ye, alexvorn2, aliso, boonebgorges, daveshine, DJPaul, ethitter, fanquake, GargajCNS, GautamGupta, imath, jkudish, kobenland, lakrisgubben, loki_racer, mamaduka, Maty, mercime, mordauk, mrcl, MZAWeb, r-a-y, strangerstudios, thebrandonallen, tlovett1, wpdennis,



get_results( "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' ORDER BY registered DESC LIMIT {$n}, 5", ARRAY_A ); // No blogs so all done! if ( empty( $blogs ) ) : ?>

admin = new BBP_Admin(); bbpress()->admin->converter = new BBP_Converter(); }