Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
03/18/2023 09:42:31 AM (2 years ago)
Author:
imath
Message:

BP Rewrites: start the migration process for the Groups component

  • Add rewrite tags & rules for the Groups directory type and the create URLs.
  • Introduce bp_get_group_url()/bp_group_url() & to retrieve/output a Groups single item URL using BP Rewrites.
  • Introduce bp_get_group_restricted_screens(), bp_get_group_extension_screens() & bp_get_group_screens() to get information about the Groups screens (in particular each screen rewrite ID). These functions will ease slug customizations from the BuddyPress URL settings tab.
  • Improve the Group creation process making sure it's using BP Rewrites to build URLs.
  • Perform easiest replacements for bp_get_group_permalink()/bp_group_permalink() & bp_get_groups_directory_permalink()/bp_groups_directory_permalink() in favor of bp_get_group_url()/bp_group_url() & bp_get_groups_directory_url()/bp_groups_directory_url()`.
  • Improve code formatting & properly escape single group URLs into templates.
  • Update impacted Unit Tests.

Props r-a-y, johnjamesjacoby, boonebgorges

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-groups/bp-groups-functions.php

    r13395 r13437  
    33343334            array(
    33353335                'name'  => __( 'Group URL', 'buddypress' ),
    3336                 'value' => bp_get_group_permalink( $group ),
     3336                'value' => bp_get_group_url( $group ),
    33373337            ),
    33383338        );
     
    34233423            array(
    34243424                'name'  => __( 'Group URL', 'buddypress' ),
    3425                 'value' => bp_get_group_permalink( $group ),
     3425                'value' => bp_get_group_url( $group ),
    34263426            ),
    34273427            array(
     
    34893489            array(
    34903490                'name'  => __( 'Group URL', 'buddypress' ),
    3491                 'value' => bp_get_group_permalink( $group ),
     3491                'value' => bp_get_group_url( $group ),
    34923492            ),
    34933493            array(
     
    35593559            array(
    35603560                'name'  => __( 'Group URL', 'buddypress' ),
    3561                 'value' => bp_get_group_permalink( $group ),
     3561                'value' => bp_get_group_url( $group ),
    35623562            ),
    35633563            array(
     
    37253725    }
    37263726}
     3727
     3728/**
     3729 * Returns the Group restricted screens.
     3730 *
     3731 * @since 12.0.0
     3732 *
     3733 * @return array The list of the Group restricted screens.
     3734 */
     3735function bp_get_group_restricted_screens() {
     3736    return array(
     3737        'bp_group_create'      => array(
     3738            'rewrite_id' => 'bp_group_create',
     3739            'slug'       => 'create',
     3740            'name'       => _x( 'Create Group root slug', 'Group create restricted rewrite id', 'buddypress' ),
     3741            'context'    => 'create',
     3742        ),
     3743        'bp_group_create_step' => array(
     3744            'rewrite_id' => 'bp_group_create_step',
     3745            'slug'       => 'step',
     3746            'name'       => _x( 'Create step slug', 'Group create restricted rewrite id', 'buddypress' ),
     3747            'context'    => 'create',
     3748        ),
     3749    );
     3750}
     3751
     3752/**
     3753 * Returns all registered Group Extension front-end screens.
     3754 *
     3755 * @since 12.0.0
     3756 *
     3757 * @param string $context The display context. Required. Defaults to `read`.
     3758 * @return array          The list of registered Group Extension screens.
     3759 */
     3760function bp_get_group_extension_screens( $context = 'read' ) {
     3761    $bp = buddypress();
     3762
     3763    $group_extension_screens = array(
     3764        'create' => array(),
     3765        'manage' => array(),
     3766        'read'   => array(),
     3767    );
     3768
     3769    if ( $bp->groups->group_extensions ) {
     3770        foreach ( $bp->groups->group_extensions as $extension_screens ) {
     3771            if ( ! is_array( $extension_screens ) ) {
     3772                continue;
     3773            }
     3774
     3775            foreach ( $extension_screens as $ctext => $extension_screen ) {
     3776                $group_extension_screens[ $ctext ] = array_merge( $group_extension_screens[ $ctext ], $extension_screen );
     3777            }
     3778        }
     3779    }
     3780
     3781    if ( ! array_filter( $group_extension_screens ) || ! isset( $group_extension_screens[ $context ] ) ) {
     3782        return array();
     3783    }
     3784
     3785    return $group_extension_screens[ $context ];
     3786}
     3787
     3788/**
     3789 * Returns all potential Group screens.
     3790 *
     3791 * @since 12.0.0
     3792 *
     3793 * @param string $context The display context. Required. Defaults to `read`.
     3794 * @return array          The list of potential Group screens.
     3795 */
     3796function bp_get_group_screens( $context = 'read' ) {
     3797    $screens = array(
     3798        'create' => array(
     3799            'group-details'     => array(
     3800                'rewrite_id' => 'bp_group_create_group_details',
     3801                'slug'       => 'group-details',
     3802                'name'       => _x( 'Details', 'Group create screen', 'buddypress' ),
     3803                'position'   => 0,
     3804            ),
     3805            'group-settings'    => array(
     3806                'rewrite_id' => 'bp_group_create_group_settings',
     3807                'slug'       => 'group-settings',
     3808                'name'       => _x( 'Settings', 'Group create screen', 'buddypress' ),
     3809                'position'   => 10,
     3810            ),
     3811            'group-avatar'      => array(
     3812                'rewrite_id' => 'bp_group_create_group_avatar',
     3813                'slug'       => 'group-avatar',
     3814                'name'       => _x( 'Photo', 'Group create screen', 'buddypress' ),
     3815                'position'   => 20,
     3816            ),
     3817            'group-cover-image' => array(
     3818                'rewrite_id' => 'bp_group_create_group_cover_image',
     3819                'slug'       => 'group-cover-image',
     3820                'name'       => _x( 'Cover Image', 'Group create screen', 'buddypress' ),
     3821                'position'   => 25,
     3822            ),
     3823            'group-invites'     => array(
     3824                'rewrite_id' => 'bp_group_create_group_invites',
     3825                'slug'       => 'group-invites',
     3826                'name'       => _x( 'Invites', 'Group create screen', 'buddypress' ),
     3827                'position'   => 30,
     3828            ),
     3829        ),
     3830        'read'   => array(
     3831            'home'               => array(
     3832                'rewrite_id'      => 'bp_group_read_home',
     3833                'slug'            => 'home',
     3834                'name'            => _x( 'Home', 'Group read screen', 'buddypress' ),
     3835                'screen_function' => 'groups_screen_group_home',
     3836                'position'        => 10,
     3837                'item_css_id'     => 'home',
     3838            ),
     3839            'request-membership' => array(
     3840                'rewrite_id'      => 'bp_group_read_request_membership',
     3841                'slug'            => 'request-membership',
     3842                'name'            => _x( 'Request Membership', 'Group read screen', 'buddypress' ),
     3843                'screen_function' => 'groups_screen_group_request_membership',
     3844                'position'        => 30,
     3845            ),
     3846            'members'            => array(
     3847                'rewrite_id'      => 'bp_group_read_members',
     3848                'slug'            => 'members',
     3849                /* translators: %s: total member count */
     3850                'name'            => _x( 'Members %s', 'Group read screen', 'buddypress' ),
     3851                'screen_function' => 'groups_screen_group_members',
     3852                'position'        => 60,
     3853                'user_has_access' => false,
     3854                'no_access_url'   => '',
     3855                'item_css_id'     => 'members',
     3856            ),
     3857            'send-invites'       => array(
     3858                'rewrite_id'      => 'bp_group_read_send_invites',
     3859                'slug'            => 'send-invites',
     3860                'name'            => _x( 'Send Invites', 'Group read screen', 'buddypress' ),
     3861                'screen_function' => 'groups_screen_group_invite',
     3862                'position'        => 70,
     3863                'user_has_access' => false,
     3864                'no_access_url'   => '',
     3865                'item_css_id'     => 'invite',
     3866            ),
     3867            'admin'              => array(
     3868                'rewrite_id'      => 'bp_group_read_admin',
     3869                'slug'            => 'admin',
     3870                'name'            => _x( 'Manage', 'Group read screen', 'buddypress' ),
     3871                'screen_function' => 'groups_screen_group_admin',
     3872                'position'        => 1000,
     3873                'user_has_access' => false,
     3874                'no_access_url'   => '',
     3875                'item_css_id'     => 'admin',
     3876            ),
     3877        ),
     3878        'manage' => array(
     3879            'edit-details'        => array(
     3880                'rewrite_id'        => 'bp_group_manage_edit_details',
     3881                'slug'              => 'edit-details',
     3882                'name'              => _x( 'Details', 'Group manage screen', 'buddypress' ),
     3883                'screen_function'   => 'groups_screen_group_admin',
     3884                'position'          => 0,
     3885                'user_has_access'   => false,
     3886                'show_in_admin_bar' => true,
     3887            ),
     3888            'group-settings'      => array(
     3889                'rewrite_id'        => 'bp_group_manage_group_settings',
     3890                'slug'              => 'group-settings',
     3891                'name'              => _x( 'Settings', 'Group manage screen', 'buddypress' ),
     3892                'screen_function'   => 'groups_screen_group_admin',
     3893                'position'          => 10,
     3894                'user_has_access'   => false,
     3895                'show_in_admin_bar' => true,
     3896            ),
     3897            'group-avatar'        => array(
     3898                'rewrite_id'        => 'bp_group_manage_group_avatar',
     3899                'slug'              => 'group-avatar',
     3900                'name'              => _x( 'Photo', 'Group manage screen', 'buddypress' ),
     3901                'screen_function'   => 'groups_screen_group_admin',
     3902                'position'          => 20,
     3903                'user_has_access'   => false,
     3904                'show_in_admin_bar' => true,
     3905            ),
     3906            'group-cover-image'   => array(
     3907                'rewrite_id'        => 'bp_group_manage_group_cover_image',
     3908                'slug'              => 'group-cover-image',
     3909                'name'              => _x( 'Cover Image', 'Group manage screen', 'buddypress' ),
     3910                'screen_function'   => 'groups_screen_group_admin',
     3911                'position'          => 25,
     3912                'user_has_access'   => false,
     3913                'show_in_admin_bar' => true,
     3914            ),
     3915            'manage-members'      => array(
     3916                'rewrite_id'        => 'bp_group_manage_manage_members',
     3917                'slug'              => 'manage-members',
     3918                'name'              => _x( 'Members', 'Group manage screen', 'buddypress' ),
     3919                'screen_function'   => 'groups_screen_group_admin',
     3920                'position'          => 30,
     3921                'user_has_access'   => false,
     3922                'show_in_admin_bar' => true,
     3923            ),
     3924            'membership-requests' => array(
     3925                'rewrite_id'        => 'bp_group_manage_membership_requests',
     3926                'slug'              => 'membership-requests',
     3927                'name'              => _x( 'Requests', 'Group manage screen', 'buddypress' ),
     3928                'screen_function'   => 'groups_screen_group_admin',
     3929                'position'          => 40,
     3930                'user_has_access'   => false,
     3931                'show_in_admin_bar' => true,
     3932            ),
     3933            'delete-group'        => array(
     3934                'rewrite_id'        => 'bp_group_manage_delete_group',
     3935                'slug'              => 'delete-group',
     3936                'name'              => _x( 'Delete', 'Group manage screen', 'buddypress' ),
     3937                'screen_function'   => 'groups_screen_group_admin',
     3938                'position'          => 1000,
     3939                'user_has_access'   => false,
     3940                'show_in_admin_bar' => true,
     3941            ),
     3942        ),
     3943    );
     3944
     3945    if ( ! isset( $screens[ $context ] ) ) {
     3946        return array();
     3947    }
     3948
     3949    $context_screens         = array();
     3950    $custom_screens          = apply_filters( 'bp_get_group_custom_' . $context . '_screens', $context_screens );
     3951    $group_extension_screens = bp_get_group_extension_screens( $context );
     3952
     3953    if ( $group_extension_screens ) {
     3954        $custom_screens = array_merge( $custom_screens, $group_extension_screens );
     3955    }
     3956
     3957    if ( $custom_screens && ! wp_is_numeric_array( $custom_screens ) ) {
     3958        // The screen key (used as default slug) and `rewrite_id` prop need to be unique.
     3959        $valid_custom_screens   = array_diff_key( $custom_screens, $screens[ $context ] );
     3960        $existing_rewrite_ids = array_column( $screens[ $context ], 'rewrite_id' );
     3961        $existing_rewrite_ids = array_merge(
     3962            $existing_rewrite_ids,
     3963            // BP Group Reserved rewrite IDs.
     3964            array_keys( bp_get_group_restricted_screens() )
     3965        );
     3966
     3967        foreach ( $valid_custom_screens as $key_screen => $screen ) {
     3968            if ( ! isset( $screen['rewrite_id'] ) || ! in_array( $screen['rewrite_id'], $existing_rewrite_ids, true ) ) {
     3969                continue;
     3970            }
     3971
     3972            unset( $valid_custom_screens[ $key_screen ] );
     3973        }
     3974
     3975        $context_screens = array_merge( $screens[ $context ], $valid_custom_screens );
     3976    } else {
     3977        $context_screens = $screens[ $context ];
     3978    }
     3979
     3980    return $context_screens;
     3981}
Note: See TracChangeset for help on using the changeset viewer.