setup_globals(); $this->includes(); $this->setup_actions(); } /** * 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() { /** General Actions ***************************************************/ // Add menu item to settings menu add_action( 'bbp_admin_menu', array( $this, 'admin_menus' ) ); // Add some general styling to the admin area add_action( 'bbp_admin_head', array( $this, 'admin_head' ) ); // Add notice if not using a bbPress theme add_action( 'bbp_admin_notices', array( $this, 'activation_notice' ) ); // Add green admin style add_action( 'bbp_register_admin_style', array( $this, 'register_admin_style' ) ); // Add settings add_action( 'bbp_register_admin_settings', array( $this, 'register_admin_settings' ) ); // Add menu item to settings menu add_action( 'bbp_activation', array( $this, 'new_install' ) ); // Forums 'Right now' Dashboard widget add_action( 'wp_dashboard_setup', array( $this, 'dashboard_widget_right_now' ) ); /** Filters ***********************************************************/ // Add link to settings page add_filter( 'plugin_action_links', array( $this, 'add_settings_link' ), 10, 2 ); /** 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 ) ); } /** * Include required files * * @since bbPress (r2646) * @access private */ private function includes() { require( $this->admin_dir . 'bbp-tools.php' ); require( $this->admin_dir . 'bbp-converter.php' ); require( $this->admin_dir . 'bbp-settings.php' ); require( $this->admin_dir . 'bbp-functions.php' ); require( $this->admin_dir . 'bbp-metaboxes.php' ); require( $this->admin_dir . 'bbp-forums.php' ); require( $this->admin_dir . 'bbp-topics.php' ); require( $this->admin_dir . 'bbp-replies.php' ); } /** * Admin globals * * @since bbPress (r2646) * @access private */ private function setup_globals() { $bbp = bbpress(); $this->admin_dir = trailingslashit( $bbp->plugin_dir . 'bbp-admin' ); // Admin url $this->admin_url = trailingslashit( $bbp->plugin_url . 'bbp-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 } /** * 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 ( bbp_current_user_can_see( 'bbp_tools_page' ) ) { if ( bbp_current_user_can_see( 'bbp_tools_repair_page' ) ) { $hooks[] = add_management_page( __( 'Repair Forums', 'bbpress' ), __( 'Forum Repair', 'bbpress' ), $this->minimum_capability, 'bbp-repair', 'bbp_admin_repair' ); } if ( bbp_current_user_can_see( 'bbp_tools_import_page' ) ) { $hooks[] = add_management_page( __( 'Import Forums', 'bbpress' ), __( 'Forum Import', 'bbpress' ), $this->minimum_capability, 'bbp-converter', 'bbp_converter_settings' ); } if ( bbp_current_user_can_see( '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_current_user_can_see( 'bbp_settings_page' ) ) { add_options_page( __( 'Forums', 'bbpress' ), __( 'Forums', 'bbpress' ), $this->minimum_capability, 'bbpress', 'bbp_admin_settings' ); } } /** * 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() { 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 */ public static function register_admin_settings() { /** Main Section ******************************************************/ $section = 'bbp_settings_main'; if ( bbp_current_user_can_see( $section ) ) { // Add the main section add_settings_section( $section, __( 'Main Settings', 'bbpress' ), 'bbp_admin_setting_callback_main_section', 'bbpress' ); // Edit lock setting add_settings_field( '_bbp_edit_lock', __( 'Lock post editing after', 'bbpress' ), 'bbp_admin_setting_callback_editlock', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_edit_lock', 'intval' ); // Throttle setting add_settings_field( '_bbp_throttle_time', __( 'Throttle time', 'bbpress' ), 'bbp_admin_setting_callback_throttle', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_throttle_time', 'intval' ); // Allow topic and reply revisions add_settings_field( '_bbp_allow_revisions', __( 'Allow Revisions', 'bbpress' ), 'bbp_admin_setting_callback_revisions', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_allow_revisions', 'intval' ); // Allow favorites setting add_settings_field( '_bbp_enable_favorites', __( 'Allow Favorites', 'bbpress' ), 'bbp_admin_setting_callback_favorites', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_enable_favorites', 'intval' ); // Allow subscriptions setting add_settings_field( '_bbp_enable_subscriptions', __( 'Allow Subscriptions', 'bbpress' ), 'bbp_admin_setting_callback_subscriptions', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_enable_subscriptions', 'intval' ); // Allow anonymous posting setting add_settings_field( '_bbp_allow_anonymous', __( 'Allow Anonymous Posting', 'bbpress' ), 'bbp_admin_setting_callback_anonymous', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_allow_anonymous', 'intval' ); // Allow global access setting if ( is_multisite() ) { add_settings_field( '_bbp_allow_global_access', __( 'Allow Global Access', 'bbpress' ), 'bbp_admin_setting_callback_global_access', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_allow_global_access', 'intval' ); } // Allow fancy editor setting add_settings_field( '_bbp_use_wp_editor', __( 'Fancy Editor', 'bbpress' ), 'bbp_admin_setting_callback_use_wp_editor', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_use_wp_editor', 'intval' ); // Allow auto embedding setting add_settings_field( '_bbp_use_autoembed', __( 'Auto-embed Links', 'bbpress' ), 'bbp_admin_setting_callback_use_autoembed', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_use_autoembed', 'intval' ); } /** Theme Packages ****************************************************/ $section = 'bbp_settings_theme_compat'; if ( bbp_current_user_can_see( $section ) ) { // Add the per page section add_settings_section( $section, __( 'Theme Packages', 'bbpress' ), 'bbp_admin_setting_callback_subtheme_section', 'bbpress' ); // Replies per page setting add_settings_field( '_bbp_theme_package_id', __( 'Current Package', 'bbpress' ), 'bbp_admin_setting_callback_subtheme_id', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_theme_package_id', '' ); } /** Per Page Section **************************************************/ $section = 'bbp_settings_per_page'; if ( bbp_current_user_can_see( $section ) ) { // Add the per page section add_settings_section( $section, __( 'Per Page', 'bbpress' ), 'bbp_admin_setting_callback_per_page_section', 'bbpress' ); // Topics per page setting add_settings_field( '_bbp_topics_per_page', __( 'Topics', 'bbpress' ), 'bbp_admin_setting_callback_topics_per_page', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_topics_per_page', 'intval' ); // Replies per page setting add_settings_field( '_bbp_replies_per_page', __( 'Replies', 'bbpress' ), 'bbp_admin_setting_callback_replies_per_page', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_replies_per_page', 'intval' ); } /** Per RSS Page Section **********************************************/ $section = 'bbp_settings_per_page_rss'; if ( bbp_current_user_can_see( $section ) ) { // Add the per page section add_settings_section( $section, __( 'Per RSS Page', 'bbpress' ), 'bbp_admin_setting_callback_per_rss_page_section', 'bbpress' ); // Topics per page setting add_settings_field( '_bbp_topics_per_page', __( 'Topics', 'bbpress' ), 'bbp_admin_setting_callback_topics_per_rss_page', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_topics_per_rss_page', 'intval' ); // Replies per page setting add_settings_field( '_bbp_replies_per_page', __( 'Replies', 'bbpress' ), 'bbp_admin_setting_callback_replies_per_rss_page', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_replies_per_rss_page', 'intval' ); } /** Front Slugs *******************************************************/ $section = 'bbp_settings_root_slugs'; if ( bbp_current_user_can_see( $section ) ) { // Add the per page section add_settings_section( $section, __( 'Archive Slugs', 'bbpress' ), 'bbp_admin_setting_callback_root_slug_section', 'bbpress' ); /** * Here we sanitize with 'esc_sql', rather than 'sanitize_title' to * allow for slashes or any other URI friendly format. */ // Root slug setting add_settings_field ( '_bbp_root_slug', __( 'Forums base', 'bbpress' ), 'bbp_admin_setting_callback_root_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_root_slug', 'esc_sql' ); // Topic archive setting add_settings_field ( '_bbp_topic_archive_slug', __( 'Topics base', 'bbpress' ), 'bbp_admin_setting_callback_topic_archive_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_topic_archive_slug', 'esc_sql' ); } /** Single slugs ******************************************************/ $section = 'bbp_settings_single_slugs'; if ( bbp_current_user_can_see( $section ) ) { // Add the per page section add_settings_section( $section, __( 'Single Slugs', 'bbpress' ), 'bbp_admin_setting_callback_single_slug_section', 'bbpress' ); // Include root setting add_settings_field( '_bbp_include_root', __( 'Forum Prefix', 'bbpress' ), 'bbp_admin_setting_callback_include_root', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_include_root', 'intval' ); // Forum slug setting add_settings_field( '_bbp_forum_slug', __( 'Forum slug', 'bbpress' ), 'bbp_admin_setting_callback_forum_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_forum_slug', 'sanitize_title' ); // Topic slug setting add_settings_field( '_bbp_topic_slug', __( 'Topic slug', 'bbpress' ), 'bbp_admin_setting_callback_topic_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_topic_slug', 'sanitize_title' ); // Topic tag slug setting add_settings_field( '_bbp_topic_tag_slug', __( 'Topic tag slug', 'bbpress' ), 'bbp_admin_setting_callback_topic_tag_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_topic_tag_slug', 'sanitize_title' ); // Reply slug setting add_settings_field( '_bbp_reply_slug', __( 'Reply slug', 'bbpress' ), 'bbp_admin_setting_callback_reply_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_reply_slug', 'sanitize_title' ); /** Other slugs ***************************************************/ // User slug setting add_settings_field( '_bbp_user_slug', __( 'User base', 'bbpress' ), 'bbp_admin_setting_callback_user_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_user_slug', 'sanitize_title' ); // View slug setting add_settings_field( '_bbp_view_slug', __( 'View base', 'bbpress' ), 'bbp_admin_setting_callback_view_slug', 'bbpress', $section ); register_setting ( 'bbpress', '_bbp_view_slug', 'sanitize_title' ); } /** BuddyPress ********************************************************/ $section = 'bbp_settings_buddypress'; if ( bbp_current_user_can_see( $section ) ) { // Add the per page section add_settings_section( 'bbp_buddypress', __( 'BuddyPress', 'bbpress' ), 'bbp_admin_setting_callback_buddypress_section', 'bbpress' ); // Topics per page setting add_settings_field( '_bbp_enable_group_forums', __( 'Enable Group Forums', 'bbpress' ), 'bbp_admin_setting_callback_group_forums', 'bbpress', 'bbp_buddypress' ); register_setting ( 'bbpress', '_bbp_enable_group_forums', 'intval' ); // Topics per page setting add_settings_field( '_bbp_group_forums_root_id', __( 'Group Forums Parent', 'bbpress' ), 'bbp_admin_setting_callback_group_forums_root_id', 'bbpress', 'bbp_buddypress' ); register_setting ( 'bbpress', '_bbp_group_forums_root_id', 'intval' ); } /** Akismet ***********************************************************/ $section = 'bbp_settings_akismet'; if ( bbp_current_user_can_see( $section ) ) { // Add the per page section add_settings_section( 'bbp_akismet', __( 'Akismet', 'bbpress' ), 'bbp_admin_setting_callback_akismet_section', 'bbpress' ); // Replies per page setting add_settings_field( '_bbp_enable_akismet', __( 'Use Akismet', 'bbpress' ), 'bbp_admin_setting_callback_akismet', 'bbpress', 'bbp_akismet' ); register_setting ( 'bbpress', '_bbp_enable_akismet', 'intval' ); } } /** * 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 add_settings_link( $links, $file ) { if ( plugin_basename( bbpress()->file ) == $file ) { $settings_link = '' . __( 'Settings', 'bbpress' ) . ''; array_unshift( $links, $settings_link ); } return $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 some general styling to the admin area * * @since bbPress (r2464) * * @uses bbp_get_forum_post_type() To get the forum post type * @uses bbp_get_topic_post_type() To get the topic post type * @uses bbp_get_reply_post_type() To get the reply post type * @uses sanitize_html_class() To sanitize the classes */ public function admin_head() { // Remove the individual recount and converter menus. // They are grouped together by h2 tabs remove_submenu_page( 'tools.php', 'bbp-repair' ); remove_submenu_page( 'tools.php', 'bbp-converter' ); remove_submenu_page( 'tools.php', 'bbp-reset' ); // Icons for top level admin menus $menu_icon_url = $this->images_url . 'menu.png'; $icon32_url = $this->images_url . 'icons32.png'; // Top level menu classes $forum_class = sanitize_html_class( bbp_get_forum_post_type() ); $topic_class = sanitize_html_class( bbp_get_topic_post_type() ); $reply_class = sanitize_html_class( bbp_get_reply_post_type() ); ?> content_depth ) $css_file = $this->styles_url . 'admin.css'; // Custom wp-content dir is 1 level away elseif ( 1 === $this->content_depth ) $css_file = $this->styles_url . 'admin-1.css'; // Custom wp-content dir is 1 level away elseif ( 2 === $this->content_depth ) $css_file = $this->styles_url . 'admin-2.css'; // Load the admin CSS styling wp_admin_css_color( 'bbpress', __( 'Green', 'bbpress' ), $css_file, array( '#222222', '#006600', '#deece1', '#6eb469' ) ); } /** * Update all bbPress forums across all sites * * @since bbPress (r3689) * * @global WPDB $wpdb * @uses get_blog_option() * @uses wp_remote_get() */ public static function update_screen() { // Get action $action = isset( $_GET['action'] ) ? $_GET['action'] : ''; ?>