Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
04/14/2023 04:11:52 AM (3 years ago)
Author:
imath
Message:

Administration: add Group slugs management into the URLs settings tab

  • Add a new $built_in argument to bp_get_group_screens() to only get BP built in single Groups item screens.
  • Edit the BP_Groups_Component::setup_nav() method so that it uses bp_get_group_screens() to generate the single group's navigation items.
  • bp_get_group_screens() is making it easier to manage all single group's nav item slugs from the BP Urls settings tab.

Props r-a-y, johnjamesjacoby, boonebgorges

Closes https://github.com/buddypress/buddypress/pull/85
See #4954

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-groups/classes/class-bp-groups-component.php

    r13450 r13451  
    375375
    376376                // Set default Group creation steps.
    377                 $group_creation_steps = bp_get_group_screens( 'create' );
     377                $group_creation_steps = bp_get_group_screens( 'create', true );
    378378
    379379                // If avatar uploads are disabled, remove avatar view.
     
    632632                }
    633633
     634                // Generate the displayed User navigation for the Groupe compnent.
     635                parent::setup_nav( $main_nav, $sub_nav );
     636
     637                // Generate the displayed Group navigation.
    634638                if ( bp_is_groups_component() && bp_is_single_item() ) {
    635639                        /*
     
    637641                         * It does not appear in the interface.
    638642                         */
    639                         bp_core_new_nav_item( array(
    640                                 'name'                => __( 'Memberships', 'buddypress' ),
    641                                 'slug'                => $this->current_group->slug,
    642                                 'position'            => -1, // Do not show into the navigation.
    643                                 'screen_function'     => 'groups_screen_group_home',
    644                                 'default_subnav_slug' => $this->default_extension,
    645                                 'item_css_id'         => $this->id
    646                         ), 'groups' );
    647 
     643                        bp_core_new_nav_item(
     644                                array(
     645                                        'name'                => __( 'Memberships', 'buddypress' ),
     646                                        'slug'                => $this->current_group->slug,
     647                                        'position'            => -1, // Do not show into the navigation.
     648                                        'screen_function'     => 'groups_screen_group_home',
     649                                        'default_subnav_slug' => $this->default_extension,
     650                                        'item_css_id'         => $this->id
     651                                ),
     652                                'groups'
     653                        );
     654
     655                        // Get the "read" screens.
     656                        $screens    = bp_get_group_screens( 'read', true );
    648657                        $group_link = bp_get_group_url( $this->current_group );
    649 
    650                         // Add the "Home" subnav item, as this will always be present.
    651                         $sub_nav[] = array(
    652                                 'name'            =>  _x( 'Home', 'Group screen navigation title', 'buddypress' ),
    653                                 'slug'            => 'home',
    654                                 'parent_slug'     => $this->current_group->slug,
    655                                 'screen_function' => 'groups_screen_group_home',
    656                                 'position'        => 10,
    657                                 'item_css_id'     => 'home'
    658                         );
     658                        $sub_nav    = array();
    659659
    660660                        /*
    661661                         * If this is a private group, and the user is not a member and does not
    662                          * have an outstanding invitation, how a "Request Membership" nav item.
     662                         * have an outstanding invitation, only generate the request membership
     663                         * nav item if the user can request this membership.
    663664                         */
    664                         if ( bp_current_user_can( 'groups_request_membership', array( 'group_id' => $this->current_group->id ) ) ) {
    665                                 $sub_nav[] = array(
    666                                         'name'            => _x( 'Request Membership','Group screen nav', 'buddypress' ),
    667                                         'slug'            => 'request-membership',
    668                                         'parent_slug'     => $this->current_group->slug,
    669                                         'screen_function' => 'groups_screen_group_request_membership',
    670                                         'position'        => 30
    671                                 );
    672                         }
    673 
    674                         if ( $this->current_group->front_template || bp_is_active( 'activity' ) ) {
    675                                 // If the theme is using a custom front, create activity subnav.
    676                                 if ( $this->current_group->front_template && bp_is_active( 'activity' ) ) {
    677                                         $sub_nav[] = array(
    678                                                 'name'            => _x( 'Activity', 'My Group screen nav', 'buddypress' ),
    679                                                 'slug'            => 'activity',
    680                                                 'parent_slug'     => $this->current_group->slug,
    681                                                 'screen_function' => 'groups_screen_group_activity',
    682                                                 'position'        => 11,
    683                                                 'user_has_access' => $this->current_group->user_has_access,
    684                                                 'item_css_id'     => 'activity',
    685                                                 'no_access_url'   => $group_link,
     665                        if ( ! bp_current_user_can( 'groups_request_membership', array( 'group_id' => $this->current_group->id ) ) ) {
     666                                unset( $screens['request-membership'] );
     667                        }
     668
     669                        // If the invitations feature is not active remove the corresponding nav item.
     670                        if ( ! bp_is_active( 'groups', 'invitations' ) ) {
     671                                unset( $screens['send-invites'] );
     672                        }
     673
     674                        /*
     675                         * By default activity is group's home, only keep an activity sub nab if there's
     676                         * a custom group's front page and the activity component is active.
     677                         */
     678                        if ( ! $this->current_group->front_template || ! bp_is_active( 'activity' ) ) {
     679                                unset( $screens['activity'] );
     680                        }
     681
     682                        /*
     683                         * If there's a custom group's front page and the activity component is not active,
     684                         * The members screen is use as the group's home page. If it's not the case, remove
     685                         * the corresponding nav item.
     686                         */
     687                        if ( ! $this->current_group->front_template && ! bp_is_active( 'activity' ) ) {
     688                                unset( $screens['members'] );
     689                        }
     690
     691                        foreach ( $screens as $screen_id => $sub_nav_item ) {
     692                                $sub_nav_item['parent_slug'] = $this->current_group->slug;
     693
     694                                if ( 'members' === $screen_id ) {
     695                                        $sub_nav_item['name'] = sprintf(
     696                                                $sub_nav_item['name'],
     697                                                '<span>' . number_format( $this->current_group->total_member_count ) . '</span>'
    686698                                        );
    687699                                }
    688700
    689                                 // Only add the members subnav if it's not the home's nav.
    690                                 $sub_nav[] = array(
    691                                         'name'            => sprintf(
    692                                                 /* translators: %s: total member count */
    693                                                 _x( 'Members %s', 'My Group screen nav', 'buddypress' ),
    694                                                 '<span>' . number_format( $this->current_group->total_member_count ) . '</span>'
    695                                         ),
    696                                         'slug'            => 'members',
    697                                         'parent_slug'     => $this->current_group->slug,
    698                                         'screen_function' => 'groups_screen_group_members',
    699                                         'position'        => 60,
    700                                         'user_has_access' => $this->current_group->user_has_access,
    701                                         'item_css_id'     => 'members',
    702                                         'no_access_url'   => $group_link,
    703                                 );
    704                         }
    705 
    706                         if ( bp_is_active( 'groups', 'invitations' ) ) {
    707                                 $sub_nav[] = array(
    708                                         'name'            => _x( 'Send Invites', 'My Group screen nav', 'buddypress' ),
    709                                         'slug'            => 'send-invites',
    710                                         'parent_slug'     => $this->current_group->slug,
    711                                         'screen_function' => 'groups_screen_group_invite',
    712                                         'item_css_id'     => 'invite',
    713                                         'position'        => 70,
    714                                         'user_has_access' => bp_groups_user_can_send_invites(),
    715                                         'no_access_url'   => $group_link,
    716                                 );
     701                                if ( isset( $sub_nav_item['no_access_url'] ) ) {
     702                                        $sub_nav_item['no_access_url'] = $group_link;
     703                                }
     704
     705                                if ( isset( $sub_nav_item['user_has_access_callback'] ) && is_callable( $sub_nav_item['user_has_access_callback'] ) ) {
     706                                        $sub_nav_item['user_has_access'] = call_user_func( $sub_nav_item['user_has_access_callback'] );
     707                                        unset( $sub_nav_item['user_has_access_callback'] );
     708                                }
     709
     710                                // Add the sub nav item.
     711                                $sub_nav[] = $sub_nav_item;
    717712                        }
    718713
    719714                        // If the user is a group admin, then show the group admin nav item.
    720715                        if ( bp_is_item_admin() ) {
    721                                 $sub_nav[] = array(
    722                                         'name'            => _x( 'Manage', 'My Group screen nav', 'buddypress' ),
    723                                         'slug'            => 'admin',
    724                                         'parent_slug'     => $this->current_group->slug,
    725                                         'screen_function' => 'groups_screen_group_admin',
    726                                         'position'        => 1000,
    727                                         'user_has_access' => true,
    728                                         'item_css_id'     => 'admin',
    729                                         'no_access_url'   => $group_link,
    730                                 );
    731 
    732                                 $admin_link = bp_get_group_url(
     716                                // Get the "manage" screens.
     717                                $manage_screens    = bp_get_group_screens( 'manage', true );
     718                                $admin_link        = bp_get_group_url(
    733719                                        $this->current_group,
    734720                                        array(
     
    745731                                );
    746732
    747                                 $sub_nav[] = array_merge( array(
    748                                         'name'     => __( 'Details', 'buddypress' ),
    749                                         'slug'     => 'edit-details',
    750                                         'position' => 0,
    751                                 ), $default_params );
    752 
    753                                 $sub_nav[] = array_merge( array(
    754                                         'name'     => __( 'Settings', 'buddypress' ),
    755                                         'slug'     => 'group-settings',
    756                                         'position' => 10,
    757                                 ), $default_params );
    758 
    759                                 if ( ! bp_disable_group_avatar_uploads() && buddypress()->avatar->show_avatars ) {
    760                                         $sub_nav[] = array_merge( array(
    761                                                 'name'     => __( 'Photo', 'buddypress' ),
    762                                                 'slug'     => 'group-avatar',
    763                                                 'position' => 20,
    764                                         ), $default_params );
    765                                 }
    766 
    767                                 if ( bp_group_use_cover_image_header() ) {
    768                                         $sub_nav[] = array_merge( array(
    769                                                 'name'     => __( 'Cover Image', 'buddypress' ),
    770                                                 'slug'     => 'group-cover-image',
    771                                                 'position' => 25,
    772                                         ), $default_params );
    773                                 }
    774 
    775                                 $sub_nav[] = array_merge( array(
    776                                         'name'     => __( 'Members', 'buddypress' ),
    777                                         'slug'     => 'manage-members',
    778                                         'position' => 30,
    779                                 ), $default_params );
    780 
    781                                 if ( 'private' == $this->current_group->status ) {
    782                                         $sub_nav[] = array_merge( array(
    783                                                 'name'     => __( 'Requests', 'buddypress' ),
    784                                                 'slug'     => 'membership-requests',
    785                                                 'position' => 40,
    786                                         ), $default_params );
    787                                 }
    788 
    789                                 $sub_nav[] = array_merge( array(
    790                                         'name'     => __( 'Delete', 'buddypress' ),
    791                                         'slug'     => 'delete-group',
    792                                         'position' => 1000,
    793                                 ), $default_params );
    794                         }
    795 
     733                                // Only keep the Group's profile photo screen if avatars are enabled.
     734                                if ( bp_disable_group_avatar_uploads() || ! buddypress()->avatar->show_avatars ) {
     735                                        unset( $manage_screens['group-avatar'] );
     736                                }
     737
     738                                // Only keep the Group's cover image screen if cover images are enabled.
     739                                if ( ! bp_group_use_cover_image_header() ) {
     740                                        unset( $manage_screens['group-cover-image'] );
     741                                }
     742
     743                                // Only keep the membership requests screen for private groups.
     744                                if ( 'private' !== $this->current_group->status ) {
     745                                        unset( $manage_screens['membership-requests'] );
     746                                }
     747
     748                                foreach ( $manage_screens as $manage_screen_id => $manage_sub_nav_item ) {
     749                                        $sub_nav[] = array_merge( $manage_sub_nav_item, $default_params );
     750                                }
     751                        }
     752
     753                        // Finally generate read/manage nav items.
    796754                        foreach ( $sub_nav as $nav ) {
    797755                                bp_core_new_subnav_item( $nav, 'groups' );
     
    814772                        }
    815773                }
    816 
    817                 parent::setup_nav( $main_nav, $sub_nav );
    818774        }
    819775
Note: See TracChangeset for help on using the changeset viewer.