Skip to:
Content

BuddyPress.org

Changeset 9127


Ignore:
Timestamp:
11/07/2014 11:31:26 PM (5 years ago)
Author:
imath
Message:

Improve the way Group's Manage tabs are generated

In BP_Group_Extension->setup_edit_hooks() method, we are now using the bp_core_new_subnav_item() function to generate the Group's manage tab sub navigation.
The action 'groups_admin_tabs' is no more used. However for back compatibility reasons, we will keep on catching this hook inviting the user using a _doing_it_wrong message to now use the BuddyPress Group Extension API instead.

props boonebgorges

Fixes #5994

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-template.php

    r9091 r9127  
    2727 *       viewed user.
    2828 */
    29 function bp_get_options_nav() {
     29function bp_get_options_nav( $parent_slug = '' ) {
    3030    $bp = buddypress();
    3131
     
    3333    // component as an index. Otherwise we need to use the component's root_slug
    3434    $component_index = !empty( $bp->displayed_user ) ? bp_current_component() : bp_get_root_slug( bp_current_component() );
     35    $selected_item   = bp_current_action();
    3536
    3637    if ( ! bp_is_single_item() ) {
     
    4142        }
    4243    } else {
    43         if ( !isset( $bp->bp_options_nav[bp_current_item()] ) || count( $bp->bp_options_nav[bp_current_item()] ) < 1 ) {
     44        $current_item = bp_current_item();
     45
     46        if ( ! empty( $parent_slug ) ) {
     47            $current_item  = $parent_slug;
     48            $selected_item = bp_action_variable( 0 );
     49        }
     50
     51        if ( !isset( $bp->bp_options_nav[$current_item] ) || count( $bp->bp_options_nav[$current_item] ) < 1 ) {
    4452            return false;
    4553        } else {
    46             $the_index = bp_current_item();
     54            $the_index = $current_item;
    4755        }
    4856    }
     
    5563
    5664        // If the current action or an action variable matches the nav item id, then add a highlight CSS class.
    57         if ( $subnav_item['slug'] == bp_current_action() ) {
     65        if ( $subnav_item['slug'] == $selected_item ) {
    5866            $selected = ' class="current selected"';
    5967        } else {
     
    6573
    6674        // echo out the final list item
    67         echo apply_filters( 'bp_get_options_nav_' . $subnav_item['css_id'], '<li id="' . $subnav_item['css_id'] . '-' . $list_type . '-li" ' . $selected . '><a id="' . $subnav_item['css_id'] . '" href="' . $subnav_item['link'] . '">' . $subnav_item['name'] . '</a></li>', $subnav_item );
     75        echo apply_filters( 'bp_get_options_nav_' . $subnav_item['css_id'], '<li id="' . $subnav_item['css_id'] . '-' . $list_type . '-li" ' . $selected . '><a id="' . $subnav_item['css_id'] . '" href="' . $subnav_item['link'] . '">' . $subnav_item['name'] . '</a></li>', $subnav_item, $selected_item );
    6876    }
    6977}
     
    19181926        $retval = bp_is_groups_component() && groups_get_current_group();
    19191927    }
    1920    
     1928
    19211929    return (bool) $retval;
    19221930}
  • trunk/src/bp-groups/bp-groups-classes.php

    r9082 r9127  
    36383638     */
    36393639    protected function setup_edit_hooks() {
     3640        // Bail if not in a group
     3641        if ( ! bp_is_group() ) {
     3642            return;
     3643        }
    36403644
    36413645        // Bail if not an edit screen
     
    36473651
    36483652        $position = isset( $screen['position'] ) ? (int) $screen['position'] : 10;
    3649 
    3650         // Add the tab
    3651         // @todo BP should be using bp_core_new_subnav_item()
    3652         add_action( 'groups_admin_tabs', create_function( '$current, $group_slug',
    3653             '$selected = "";
    3654             if ( "' . esc_attr( $screen['slug'] ) . '" == $current )
    3655                 $selected = " class=\"current\"";
    3656             echo "<li{$selected}><a href=\"' . trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/{$group_slug}/admin/' . esc_attr( $screen['slug'] ) ) . '\">' . esc_attr( $screen['name'] ) . '</a></li>";'
    3657         ), $position, 2 );
     3653        $position += 40;
     3654
     3655        $current_group = groups_get_current_group();
     3656        $admin_link = trailingslashit( bp_get_group_permalink( $current_group ) . 'admin' );
     3657
     3658        // Add the tab to the manage navigation
     3659        bp_core_new_subnav_item( array(
     3660            'name'            => $screen['name'],
     3661            'slug'            => $screen['slug'],
     3662            'parent_slug'     => $current_group->slug . '_manage',
     3663            'parent_url'      => trailingslashit( bp_get_group_permalink( $current_group ) . 'admin' ),
     3664            'user_has_access' => bp_is_item_admin(),
     3665            'position'        => $position,
     3666            'screen_function' => 'groups_screen_group_admin',
     3667        ) );
    36583668
    36593669        // Catch the edit screen and forward it to the plugin template
  • trunk/src/bp-groups/bp-groups-loader.php

    r9027 r9127  
    510510            }
    511511
     512            // If viewing an admin page, create the group admin subnav items
     513            if ( bp_is_group_admin_page() ) {
     514                $admin_link = trailingslashit( $group_link . 'admin' );
     515
     516                // Common params to all nav items
     517                $default_params = array(
     518                    'parent_url'      => $admin_link,
     519                    'parent_slug'     => $this->current_group->slug . '_manage',
     520                    'screen_function' => 'groups_screen_group_admin',
     521                    'user_has_access' => bp_is_item_admin(),
     522                );
     523
     524                $sub_nav[] = array_merge( array(
     525                    'name'            => __( 'Details', 'buddypress' ),
     526                    'slug'            => 'edit-details',
     527                    'position'        => 0,
     528                ), $default_params );
     529
     530                $sub_nav[] = array_merge( array(
     531                    'name'            => __( 'Settings', 'buddypress' ),
     532                    'slug'            => 'group-settings',
     533                    'position'        => 10,
     534                ), $default_params );
     535
     536                if ( ! (int) bp_get_option( 'bp-disable-avatar-uploads' ) && buddypress()->avatar->show_avatars ) {
     537                    $sub_nav[] = array_merge( array(
     538                        'name'        => __( 'Photo', 'buddypress' ),
     539                        'slug'        => 'group-avatar',
     540                        'position'    => 20,
     541                    ), $default_params );
     542                }
     543
     544                $sub_nav[] = array_merge( array(
     545                    'name'            => __( 'Members', 'buddypress' ),
     546                    'slug'            => 'manage-members',
     547                    'position'        => 30,
     548                ), $default_params );
     549
     550                if ( 'private' == $this->current_group->status ) {
     551                    $sub_nav[] = array_merge( array(
     552                        'name'            => __( 'Requests', 'buddypress' ),
     553                        'slug'            => 'membership-requests',
     554                        'position'        => 40,
     555                    ), $default_params );
     556                }
     557
     558                $sub_nav[] = array_merge( array(
     559                    'name'            => __( 'Delete', 'buddypress' ),
     560                    'slug'            => 'delete-group',
     561                    'position'        => 1000,
     562                ), $default_params );
     563            }
     564
    512565            parent::setup_nav( $main_nav, $sub_nav );
    513566        }
  • trunk/src/bp-groups/bp-groups-template.php

    r9057 r9127  
    23002300    }
    23012301
    2302     $current_tab = bp_get_group_current_admin_tab();
    2303 
    2304     if ( bp_is_item_admin() ) : ?>
    2305 
    2306         <li<?php if ( 'edit-details' == $current_tab || empty( $current_tab ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/edit-details' ) ?>"><?php _e( 'Details', 'buddypress' ); ?></a></li>
    2307 
    2308     <?php endif; ?>
    2309 
    2310     <?php if ( ! bp_is_item_admin() )
    2311             return false; ?>
    2312 
    2313     <li<?php if ( 'group-settings' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/group-settings' ) ?>"><?php _e( 'Settings', 'buddypress' ); ?></a></li>
    2314 
    2315     <?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) && buddypress()->avatar->show_avatars ) : ?>
    2316 
    2317         <li<?php if ( 'group-avatar'   == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/group-avatar' ) ?>"><?php _e( 'Photo', 'buddypress' ); ?></a></li>
    2318 
    2319     <?php endif; ?>
    2320 
    2321     <li<?php if ( 'manage-members' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/manage-members' ) ?>"><?php _e( 'Members', 'buddypress' ); ?></a></li>
    2322 
    2323     <?php if ( $groups_template->group->status == 'private' ) : ?>
    2324 
    2325         <li<?php if ( 'membership-requests' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/membership-requests' ) ?>"><?php _e( 'Requests', 'buddypress' ); ?></a></li>
    2326 
    2327     <?php endif; ?>
    2328 
    2329     <?php do_action( 'groups_admin_tabs', $current_tab, $group->slug ) ?>
    2330 
    2331     <li<?php if ( 'delete-group' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/delete-group' ) ?>"><?php _e( 'Delete', 'buddypress' ); ?></a></li>
    2332 
    2333 <?php
     2302    $css_id = 'manage-members';
     2303
     2304    if ( 'private' == $group->status ) {
     2305        $css_id = 'membership-requests';
     2306    }
     2307
     2308    add_filter( "bp_get_options_nav_{$css_id}", 'bp_group_admin_tabs_backcompat', 10, 3 );
     2309
     2310    bp_get_options_nav( $group->slug . '_manage' );
     2311
     2312    remove_filter( "bp_get_options_nav_{$css_id}", 'bp_group_admin_tabs_backcompat', 10, 3 );
     2313}
     2314
     2315/**
     2316 * BackCompat for plugins/themes directly hooking groups_admin_tabs
     2317 * without using the Groups Extension API
     2318 *
     2319 * @param  string $subnav_output subnav item output
     2320 * @param  string $subnav_item   subnav item params
     2321 * @param  string $selected_item current selected tab
     2322 * @return string HTML output
     2323 */
     2324function bp_group_admin_tabs_backcompat( $subnav_output = '', $subnav_item = '', $selected_item = '' ) {
     2325    if ( ! has_action( 'groups_admin_tabs' ) ) {
     2326        return $subnav_output;
     2327    }
     2328
     2329    $group = groups_get_current_group();
     2330
     2331    ob_start();
     2332
     2333    do_action( 'groups_admin_tabs', $selected_item, $group->slug );
     2334
     2335    $admin_tabs_backcompat = trim( ob_get_contents() );
     2336    ob_end_clean();
     2337
     2338    if ( ! empty( $admin_tabs_backcompat ) ) {
     2339        _doing_it_wrong( "do_action( 'groups_admin_tabs' )", __( 'This action should not be used directly. Please use the BuddyPress Group Extension API to generate Manage tabs.', 'buddypress' ), '2.2.0' );
     2340        $subnav_output .= $admin_tabs_backcompat;
     2341    }
     2342
     2343    return $subnav_output;
    23342344}
    23352345
Note: See TracChangeset for help on using the changeset viewer.