Skip to:
Content

BuddyPress.org

Changeset 6695


Ignore:
Timestamp:
12/30/2012 04:27:02 PM (8 years ago)
Author:
djpaul
Message:

Bring back bp_core_activation_notice() from the bench; it provides a notice for admins if pretty permalinks aren't enabled and/or the BP component/page mapping is incomplete. See #4671.

These notices are helpful for debugging people's sites on the support forums, and for telling people they need to set permalinks. Most (all?) of this will be taken back out in a future version of BuddyPress when we switch to using rewrite rules.

This commit also accidentally fixes a regression in trunk where, if the Blogs component is active on multisite, we weren't recording existing blogs' information for use in the Sites Directory.

Location:
trunk/bp-core
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/admin/bp-core-actions.php

    r6676 r6695  
    5050
    5151// Hook on to admin_init
    52 add_action( 'bp_admin_init', 'bp_setup_updater',          999 );
    53 add_action( 'bp_admin_init', 'bp_register_importers'          );
    54 add_action( 'bp_admin_init', 'bp_register_admin_style'        );
    55 add_action( 'bp_admin_init', 'bp_register_admin_settings'     );
    56 add_action( 'bp_admin_init', 'bp_do_activation_redirect', 1   );
     52add_action( 'bp_admin_init', 'bp_setup_updater',          1000 );
     53add_action( 'bp_admin_init', 'bp_core_activation_notice', 1010 );
     54add_action( 'bp_admin_init', 'bp_register_importers'           );
     55add_action( 'bp_admin_init', 'bp_register_admin_style'         );
     56add_action( 'bp_admin_init', 'bp_register_admin_settings'      );
     57add_action( 'bp_admin_init', 'bp_do_activation_redirect', 1    );
    5758
    5859// Add a new separator
  • trunk/bp-core/admin/bp-core-functions.php

    r6689 r6695  
    160160
    161161    $bp->admin->notices[] = $notice;
     162}
     163
     164/**
     165 * Verify that some BP prerequisites are set up properly, and notify the admin if not
     166 *
     167 * On every Dashboard page, this function checks the following:
     168 *   - that pretty permalinks are enabled
     169 *   - that every BP component that needs a WP page for a directory has one
     170 *   - that no WP page has multiple BP components associated with it
     171 * The administrator will be shown a notice for each check that fails.
     172 *
     173 * @global WPDB $wpdb WordPress DB object
     174 * @global WP_Rewrite $wp_rewrite
     175 * @since BuddyPress (1.2)
     176 */
     177function bp_core_activation_notice() {
     178    global $wpdb, $wp_rewrite;
     179
     180    $bp = buddypress();
     181
     182    // Only the super admin gets warnings
     183    if ( !bp_current_user_can( 'bp_moderate' ) )
     184        return;
     185
     186    // On multisite installs, don't load on a non-root blog, unless do_network_admin is overridden
     187    if ( is_multisite() && bp_core_do_network_admin() && !bp_is_root_blog() )
     188        return;
     189
     190    /**
     191     * Check to make sure that the blog setup routine has run. This can't happen during the
     192     * wizard because of the order which the components are loaded. We check for multisite here
     193     * on the off chance that someone has activated the blogs component and then disabled MS
     194     */
     195    if ( bp_is_active( 'blogs' ) ) {
     196        $count = $wpdb->get_var( "SELECT COUNT(*) FROM {$bp->blogs->table_name}" );
     197
     198        if ( empty( $count ) ) {
     199            bp_blogs_record_existing_blogs();
     200        }
     201    }
     202
     203    /**
     204     * Are pretty permalinks enabled?
     205     */
     206    if ( isset( $_POST['permalink_structure'] ) )
     207        return;
     208
     209    if ( empty( $wp_rewrite->permalink_structure ) ) {
     210        bp_core_add_admin_notice( sprintf( __( '<strong>BuddyPress is almost ready</strong>. You must <a href="%s">update your permalink structure</a> to something other than the default for it to work.', 'buddypress' ), admin_url( 'options-permalink.php' ) ) );
     211    }
     212
     213    /**
     214     * Check for orphaned BP components (BP component is enabled, no WP page exists)
     215     */
     216    $orphaned_components = array();
     217    $wp_page_components  = array();
     218
     219    // Only components with 'has_directory' require a WP page to function
     220    foreach( array_keys( $bp->loaded_components ) as $component_id ) {
     221        if ( !empty( $bp->{$component_id}->has_directory ) ) {
     222            $wp_page_components[] = array(
     223                'id'   => $component_id,
     224                'name' => isset( $bp->{$component_id}->name ) ? $bp->{$component_id}->name : ucwords( $bp->{$component_id}->id )
     225            );
     226        }
     227    }
     228
     229    // Activate and Register are special cases. They are not components but they need WP pages.
     230    // If user registration is disabled, we can skip this step.
     231    if ( bp_get_signup_allowed() ) {
     232        $wp_page_components[] = array(
     233            'id'   => 'activate',
     234            'name' => __( 'Activate', 'buddypress' )
     235        );
     236
     237        $wp_page_components[] = array(
     238            'id'   => 'register',
     239            'name' => __( 'Register', 'buddypress' )
     240        );
     241    }
     242
     243    // On the first admin screen after a new installation, this isn't set, so grab it to supress a misleading error message.
     244    if ( empty( $bp->pages->members ) )
     245        $bp->pages = bp_core_get_directory_pages();
     246
     247    foreach( $wp_page_components as $component ) {
     248        if ( !isset( $bp->pages->{$component['id']} ) ) {
     249            $orphaned_components[] = $component['name'];
     250        }
     251    }
     252
     253    // Special case: If the Forums component is orphaned, but the bbPress 1.x installation is
     254    // not correctly set up, don't show a nag. (In these cases, it's probably the case that the
     255    // user is using bbPress 2.x; see https://buddypress.trac.wordpress.org/ticket/4292
     256    if ( isset( $bp->forums->name ) && in_array( $bp->forums->name, $orphaned_components ) && !bp_forums_is_installed_correctly() ) {
     257        $forum_key = array_search( $bp->forums->name, $orphaned_components );
     258        unset( $orphaned_components[$forum_key] );
     259        $orphaned_components = array_values( $orphaned_components );
     260    }
     261
     262    if ( !empty( $orphaned_components ) ) {
     263        $admin_url = bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings' ), 'admin.php' ) );
     264        $notice    = sprintf( __( 'The following active BuddyPress Components do not have associated WordPress Pages: %2$s. <a href="%1$s" class="button-secondary">Repair</a>', 'buddypress' ), $admin_url, '<strong>' . implode( '</strong>, <strong>', $orphaned_components ) . '</strong>' );
     265
     266        bp_core_add_admin_notice( $notice );
     267    }
     268
     269    // BP components cannot share a single WP page. Check for duplicate assignments, and post a message if found.
     270    $dupe_names = array();
     271    $page_ids   = (array)bp_core_get_directory_page_ids();
     272    $dupes      = array_diff_assoc( $page_ids, array_unique( $page_ids ) );
     273
     274    if ( !empty( $dupes ) ) {
     275        foreach( array_keys( $dupes ) as $dupe_component ) {
     276            $dupe_names[] = $bp->pages->{$dupe_component}->title;
     277        }
     278
     279        // Make sure that there are no duplicate duplicates :)
     280        $dupe_names = array_unique( $dupe_names );
     281    }
     282
     283    // If there are duplicates, post a message about them
     284    if ( !empty( $dupe_names ) ) {
     285        $admin_url = bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings' ), 'admin.php' ) );
     286        $notice    = sprintf( __( 'Each BuddyPress Component needs its own WordPress page. The following WordPress Pages have more than one component associated with them: %2$s. <a href="%1$s" class="button-secondary">Repair</a>', 'buddypress' ), $admin_url, '<strong>' . implode( '</strong>, <strong>', $dupe_names ) . '</strong>' );
     287
     288        bp_core_add_admin_notice( $notice );
     289    }
    162290}
    163291
  • trunk/bp-core/deprecated/1.7.php

    r6612 r6695  
    117117
    118118/**
    119  * Verify that some BP prerequisites are set up properly, and notify the admin if not
    120  *
    121  * On every Dashboard page, this function checks the following:
    122  *   - that pretty permalinks are enabled
    123  *   - that a BP-compatible theme is activated
    124  *   - that every BP component that needs a WP page for a directory has one
    125  *   - that no WP page has multiple BP components associated with it
    126  * The administrator will be shown a notice for each check that fails.
    127  *
    128  * @deprecated BuddyPress (1.7)
    129  * @package BuddyPress Core
    130  */
    131 function bp_core_activation_notice() {
    132     global $wp_rewrite, $wpdb;
    133 
    134     $bp = buddypress();
    135 
    136     // Only the super admin gets warnings
    137     if ( !bp_current_user_can( 'bp_moderate' ) )
    138         return;
    139 
    140     // On multisite installs, don't load on a non-root blog, unless do_network_admin is
    141     // overridden
    142     if ( is_multisite() && bp_core_do_network_admin() && !bp_is_root_blog() )
    143         return;
    144 
    145     // Don't show these messages during setup or upgrade
    146     if ( !empty( $bp->maintenance_mode ) )
    147         return;
    148 
    149     /**
    150      * Check to make sure that the blog setup routine has run. This can't happen during the
    151      * wizard because of the order which the components are loaded. We check for multisite here
    152      * on the off chance that someone has activated the blogs component and then disabled MS
    153      */
    154     if ( bp_is_active( 'blogs' ) ) {
    155         $count = $wpdb->get_var( "SELECT COUNT(*) FROM {$bp->blogs->table_name}" );
    156 
    157         if ( empty( $count ) ) {
    158             bp_blogs_record_existing_blogs();
    159         }
    160     }
    161 
    162     /**
    163      * Are pretty permalinks enabled?
    164      */
    165     if ( isset( $_POST['permalink_structure'] ) )
    166         return false;
    167 
    168     if ( empty( $wp_rewrite->permalink_structure ) ) {
    169         bp_core_add_admin_notice( sprintf( __( '<strong>BuddyPress is almost ready</strong>. You must <a href="%s">update your permalink structure</a> to something other than the default for it to work.', 'buddypress' ), admin_url( 'options-permalink.php' ) ) );
    170     }
    171 
    172     /**
    173      * Check for orphaned BP components (BP component is enabled, no WP page exists)
    174      */
    175     $orphaned_components = array();
    176     $wp_page_components  = array();
    177 
    178     // Only components with 'has_directory' require a WP page to function
    179     foreach( array_keys( $bp->loaded_components ) as $component_id ) {
    180         if ( !empty( $bp->{$component_id}->has_directory ) ) {
    181             $wp_page_components[] = array(
    182                 'id'   => $component_id,
    183                 'name' => isset( $bp->{$component_id}->name ) ? $bp->{$component_id}->name : ucwords( $bp->{$component_id}->id )
    184             );
    185         }
    186     }
    187 
    188     // Activate and Register are special cases. They are not components but they need WP pages.
    189     // If user registration is disabled, we can skip this step.
    190     if ( bp_get_signup_allowed() ) {
    191         $wp_page_components[] = array(
    192             'id'   => 'activate',
    193             'name' => __( 'Activate', 'buddypress' )
    194         );
    195 
    196         $wp_page_components[] = array(
    197             'id'   => 'register',
    198             'name' => __( 'Register', 'buddypress' )
    199         );
    200     }
    201 
    202     foreach( $wp_page_components as $component ) {
    203         if ( !isset( $bp->pages->{$component['id']} ) ) {
    204             $orphaned_components[] = $component['name'];
    205         }
    206     }
    207 
    208     // Special case: If the Forums component is orphaned, but the bbPress 1.x installation is
    209     // not correctly set up, don't show a nag. (In these cases, it's probably the case that the
    210     // user is using bbPress 2.x; see https://buddypress.trac.wordpress.org/ticket/4292
    211     if ( isset( $bp->forums->name ) && in_array( $bp->forums->name, $orphaned_components ) && !bp_forums_is_installed_correctly() ) {
    212         $forum_key = array_search( $bp->forums->name, $orphaned_components );
    213         unset( $orphaned_components[$forum_key] );
    214         $orphaned_components = array_values( $orphaned_components );
    215     }
    216 
    217     if ( !empty( $orphaned_components ) ) {
    218         $admin_url = bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings' ), 'admin.php' ) );
    219         $notice    = sprintf( __( 'The following active BuddyPress Components do not have associated WordPress Pages: %2$s. <a href="%1$s" class="button-secondary">Repair</a>', 'buddypress' ), $admin_url, '<strong>' . implode( '</strong>, <strong>', $orphaned_components ) . '</strong>' );
    220 
    221         bp_core_add_admin_notice( $notice );
    222     }
    223 
    224     /**
    225      * BP components cannot share a single WP page. Check for duplicate assignments, and post
    226      * a message if found.
    227      */
    228     $dupe_names = array();
    229     $page_ids   = (array)bp_core_get_directory_page_ids();
    230     $dupes      = array_diff_assoc( $page_ids, array_unique( $page_ids ) );
    231 
    232     if ( !empty( $dupes ) ) {
    233         foreach( array_keys( $dupes ) as $dupe_component ) {
    234             $dupe_names[] = $bp->pages->{$dupe_component}->title;
    235         }
    236 
    237         // Make sure that there are no duplicate duplicates :)
    238         $dupe_names = array_unique( $dupe_names );
    239     }
    240 
    241     // If there are duplicates, post a message about them
    242     if ( !empty( $dupe_names ) ) {
    243         $admin_url = bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings' ), 'admin.php' ) );
    244         $notice    = sprintf( __( 'Each BuddyPress Component needs its own WordPress page. The following WordPress Pages have more than one component associated with them: %2$s. <a href="%1$s" class="button-secondary">Repair</a>', 'buddypress' ), $admin_url, '<strong>' . implode( '</strong>, <strong>', $dupe_names ) . '</strong>' );
    245 
    246         bp_core_add_admin_notice( $notice );
    247     }
    248 }
    249 
    250 /**
    251119 * This function was originally used to update pre-1.1 schemas, but that was
    252120 * before we had a legitimate update process.
Note: See TracChangeset for help on using the changeset viewer.