Skip to:
Content

BuddyPress.org

Changeset 13273


Ignore:
Timestamp:
04/22/2022 05:42:45 AM (4 years ago)
Author:
imath
Message:

List the displayed user groups invites in member's front-end screen

As a site admin can view the displayed user groups invites, listed invites have to be the one of this user and not the ones of the site admin.

Adapt the Group Invites feature so that site admins can accept or reject on behalf of the displayed user the listed invites. These two actions made by an admin will generate a specific BP Email informing the user of it.

Props oztaser, dcavins, espellcaste

Closes https://github.com/buddypress/buddypress/pull/15
Fixes #8675

Location:
trunk/src
Files:
11 edited

Legend:

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

    r13201 r13273  
    39723972                        'post_excerpt' => __( "Your membership request for the group \"{{group.name}}\" has been rejected.\n\nTo request membership again, visit: {{{group.url}}}", 'buddypress' ),
    39733973                ),
     3974                'groups-membership-request-accepted-by-admin' => array(
     3975                        /* translators: do not remove {} brackets or translate its contents. */
     3976                        'post_title'   => __( '[{{{site.name}}}] Membership request for group "{{group.name}}" accepted', 'buddypress' ),
     3977                        /* translators: do not remove {} brackets or translate its contents. */
     3978                        'post_content' => __( "An administrator accepted an invitation to join &quot;<a href=\"{{{group.url}}}\">{{group.name}}</a>&quot; on your behalf.\n\nIf you disagree with this, you can leave the group at anytime visiting your <a href=\"{{{leave-group.url}}}\">groups memberships page</a>.", 'buddypress' ),
     3979                        /* translators: do not remove {} brackets or translate its contents. */
     3980                        'post_excerpt' => __( "An administrator accepted an invitation to join \"{{group.name}}\" on your behalf.\n\nIf you disagree with this, you can leave the group at anytime visiting your groups memberships page: {{{leave-group.url}}}", 'buddypress' ),
     3981                ),
     3982                'groups-membership-request-rejected-by-admin' => array(
     3983                        /* translators: do not remove {} brackets or translate its contents. */
     3984                        'post_title'   => __( '[{{{site.name}}}] Membership request for group "{{group.name}}" rejected', 'buddypress' ),
     3985                        /* translators: do not remove {} brackets or translate its contents. */
     3986                        'post_content' => __( "An administrator rejected an invitation to join &quot;<a href=\"{{{group.url}}}\">{{group.name}}</a>&quot; on your behalf.\n\nIf you disagree with this, please contact the site administrator.", 'buddypress' ),
     3987                        /* translators: do not remove {} brackets or translate its contents. */
     3988                        'post_excerpt' => __( "An administrator rejected an invitation to join \"{{group.name}}\" on your behalf.\n\nIf you disagree with this, please contact the site administrator.", 'buddypress' ),
     3989                ),
    39743990                'bp-members-invitation' => array(
    39753991                        /* translators: do not remove {} brackets or translate its contents. */
     
    41534169        );
    41544170
     4171        $groups_membership_request_accepted_by_admin = array(
     4172                'description'      => __( 'Recipient had requested to join a group, which was accepted by admin.', 'buddypress' ),
     4173                'named_salutation' => true,
     4174                'unsubscribe'      => false,
     4175        );
     4176
     4177        $groups_membership_request_rejected_by_admin = array(
     4178                'description'      => __( 'Recipient had requested to join a group, which was rejected by admin.', 'buddypress' ),
     4179                'named_salutation' => true,
     4180                'unsubscribe'      => false,
     4181        );
     4182
    41554183        $core_user_activation = array(
    41564184                'description'      => __( 'Recipient has successfully activated an account.', 'buddypress' ),
     
    41844212
    41854213        $types = array(
    4186                 'activity-comment'                    => $activity_comment,
    4187                 'activity-comment-author'             => $activity_comment_author,
    4188                 'activity-at-message'                 => $activity_at_message,
    4189                 'groups-at-message'                   => $groups_at_message,
    4190                 'core-user-registration'              => $core_user_registration,
    4191                 'core-user-registration-with-blog'    => $core_user_registration_with_blog,
    4192                 'friends-request'                     => $friends_request,
    4193                 'friends-request-accepted'            => $friends_request_accepted,
    4194                 'groups-details-updated'              => $groups_details_updated,
    4195                 'groups-invitation'                   => $groups_invitation,
    4196                 'groups-member-promoted'              => $groups_member_promoted,
    4197                 'groups-membership-request'           => $groups_membership_request,
    4198                 'messages-unread'                     => $messages_unread,
    4199                 'settings-verify-email-change'        => $settings_verify_email_change,
    4200                 'groups-membership-request-accepted'  => $groups_membership_request_accepted,
    4201                 'groups-membership-request-rejected'  => $groups_membership_request_rejected,
    4202                 'core-user-activation'                => $core_user_activation,
    4203                 'bp-members-invitation'               => $members_invitation,
    4204                 'members-membership-request'          => $members_membership_request,
    4205                 'members-membership-request-rejected' => $members_membership_request_rejected,
     4214                'activity-comment'                            => $activity_comment,
     4215                'activity-comment-author'                     => $activity_comment_author,
     4216                'activity-at-message'                         => $activity_at_message,
     4217                'groups-at-message'                           => $groups_at_message,
     4218                'core-user-registration'                      => $core_user_registration,
     4219                'core-user-registration-with-blog'            => $core_user_registration_with_blog,
     4220                'friends-request'                             => $friends_request,
     4221                'friends-request-accepted'                    => $friends_request_accepted,
     4222                'groups-details-updated'                      => $groups_details_updated,
     4223                'groups-invitation'                           => $groups_invitation,
     4224                'groups-member-promoted'                      => $groups_member_promoted,
     4225                'groups-membership-request'                   => $groups_membership_request,
     4226                'messages-unread'                             => $messages_unread,
     4227                'settings-verify-email-change'                => $settings_verify_email_change,
     4228                'groups-membership-request-accepted'          => $groups_membership_request_accepted,
     4229                'groups-membership-request-rejected'          => $groups_membership_request_rejected,
     4230                'core-user-activation'                        => $core_user_activation,
     4231                'bp-members-invitation'                       => $members_invitation,
     4232                'members-membership-request'                  => $members_membership_request,
     4233                'members-membership-request-rejected'         => $members_membership_request_rejected,
     4234                'groups-membership-request-accepted-by-admin' => $groups_membership_request_accepted_by_admin,
     4235                'groups-membership-request-rejected-by-admin' => $groups_membership_request_rejected_by_admin,
    42064236        );
    42074237
  • trunk/src/bp-core/bp-core-update.php

    r13168 r13273  
    283283                if ( $raw_db_version < 13165 ) {
    284284                        bp_update_to_10_0();
     285                }
     286
     287                // Version 11.0.0.
     288                if ( $raw_db_version < 13271 ){
     289                        bp_update_to_11_0();
    285290                }
    286291
     
    744749        if ( isset( $emails['members-membership-request-rejected'] ) ) {
    745750                $new_emails['members-membership-request-rejected'] = $emails['members-membership-request-rejected'];
     751        }
     752
     753        return $new_emails;
     754}
     755
     756/**
     757 * 11.0.0 update routine.
     758 *
     759 * - Install new BP Emails for group membership requests which is completed by admin.
     760 *
     761 * @since 11.0.0
     762 */
     763function bp_update_to_11_0() {
     764
     765        add_filter( 'bp_email_get_schema', 'bp_core_get_11_0_upgrade_email_schema' );
     766
     767        bp_core_install_emails();
     768
     769        remove_filter( 'bp_email_get_schema', 'bp_core_get_11_0_upgrade_email_schema' );
     770}
     771
     772/**
     773 * Select only the emails that need to be installed with version 11.0.
     774 *
     775 * @since 11.0.0
     776 *
     777 * @param array $emails The array of emails schema.
     778 */
     779function bp_core_get_11_0_upgrade_email_schema( $emails ) {
     780        $new_emails = array();
     781
     782        if ( isset( $emails['groups-membership-request-accepted-by-admin'] ) ) {
     783                $new_emails['groups-membership-request-accepted-by-admin'] = $emails['groups-membership-request-accepted-by-admin'];
     784        }
     785
     786        if ( isset( $emails['groups-membership-request-rejected-by-admin'] ) ) {
     787                $new_emails['groups-membership-request-rejected-by-admin'] = $emails['groups-membership-request-rejected-by-admin'];
    746788        }
    747789
  • trunk/src/bp-groups/bp-groups-notifications.php

    r13034 r13273  
    12231223}
    12241224add_action( 'bp_notification_settings', 'groups_screen_notification_settings' );
     1225
     1226/**
     1227 * Notify member about their group membership request accepted/rejected by admin.
     1228 *
     1229 * @since 11.0.0
     1230 *
     1231 * @param int $user_id  ID of the user requesting group membership.
     1232 * @param int $group_id ID of the group.
     1233 */
     1234function groups_email_notification_membership_request_completed_by_admin( $user_id, $group_id ) {
     1235        if ( (int) $user_id === bp_loggedin_user_id() ) {
     1236                return;
     1237        }
     1238
     1239        if ( false === bp_current_user_can( 'bp_moderate' ) ) {
     1240                return;
     1241        }
     1242
     1243        $group = groups_get_group( $group_id );
     1244        if ( true === empty( $group->id ) ) {
     1245                return;
     1246        }
     1247
     1248        $args = array(
     1249                'tokens' => array(
     1250                        'group'           => $group,
     1251                        'group.id'        => $group_id,
     1252                        'group.name'      => $group->name,
     1253                        'group.url'       => esc_url( bp_get_group_permalink( $group ) ),
     1254                        'leave-group.url' => esc_url( bp_core_get_user_domain( $user_id ) . bp_get_groups_slug() ),
     1255                ),
     1256        );
     1257
     1258        $email_type = 'groups-membership-request-accepted-by-admin';
     1259        if ( true === doing_action( 'groups_reject_invite' ) ) {
     1260                unset( $args['tokens']['leave-group.url'] );
     1261                $email_type = 'groups-membership-request-rejected-by-admin';
     1262        }
     1263
     1264        bp_send_email( $email_type, (int) $user_id, $args );
     1265}
     1266add_action( 'groups_accept_invite', 'groups_email_notification_membership_request_completed_by_admin', 10, 2 );
     1267add_action( 'groups_reject_invite', 'groups_email_notification_membership_request_completed_by_admin', 10, 2 );
  • trunk/src/bp-groups/bp-groups-template.php

    r13267 r13273  
    33613361                }
    33623362
    3363                 $bp = buddypress();
     3363                $user_domain = bp_loggedin_user_domain();
     3364                if ( bp_is_user() ) {
     3365                        $user_domain = bp_displayed_user_domain();
     3366                }
    33643367
    33653368                /**
     
    33723375                 * @param object $group Group object.
    33733376                 */
    3374                 return apply_filters( 'bp_get_group_accept_invite_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/invites/accept/' . $group->id ), 'groups_accept_invite' ), $group );
     3377                return apply_filters( 'bp_get_group_accept_invite_link', wp_nonce_url( trailingslashit( $user_domain . bp_get_groups_slug() . '/invites/accept/' . $group->id ), 'groups_accept_invite' ), $group );
    33753378        }
    33763379
     
    33993402                }
    34003403
    3401                 $bp = buddypress();
     3404                $user_domain = bp_loggedin_user_domain();
     3405                if ( bp_is_user() ) {
     3406                        $user_domain = bp_displayed_user_domain();
     3407                }
    34023408
    34033409                /**
     
    34103416                 * @param object $group Group object.
    34113417                 */
    3412                 return apply_filters( 'bp_get_group_reject_invite_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/invites/reject/' . $group->id ), 'groups_reject_invite' ), $group );
     3418                return apply_filters( 'bp_get_group_reject_invite_link', wp_nonce_url( trailingslashit( $user_domain . bp_get_groups_slug() . '/invites/reject/' . $group->id ), 'groups_reject_invite' ), $group );
    34133419        }
    34143420
  • trunk/src/bp-groups/screens/user/invites.php

    r12590 r13273  
    1414 */
    1515function groups_screen_group_invites() {
    16         $group_id = (int)bp_action_variable( 1 );
     16        $group_id = (int) bp_action_variable( 1 );
    1717
    1818        if ( bp_is_action_variable( 'accept' ) && is_numeric( $group_id ) ) {
     
    2222                }
    2323
    24                 if ( !groups_accept_invite( bp_loggedin_user_id(), $group_id ) ) {
     24                if ( ! groups_accept_invite( bp_displayed_user_id(), $group_id ) ) {
    2525                        bp_core_add_message( __('Group invite could not be accepted', 'buddypress'), 'error' );
    2626                } else {
     
    4242                        $redirect_to = urldecode( $_GET['redirect_to'] );
    4343                } else {
    44                         $redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() );
     44                        $redirect_to = trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() );
    4545                }
    4646
     
    5252                        return false;
    5353
    54                 if ( !groups_reject_invite( bp_loggedin_user_id(), $group_id ) ) {
     54                if ( ! groups_reject_invite( bp_displayed_user_id(), $group_id ) ) {
    5555                        bp_core_add_message( __( 'Group invite could not be rejected', 'buddypress' ), 'error' );
    5656                } else {
     
    6161                        $redirect_to = urldecode( $_GET['redirect_to'] );
    6262                } else {
    63                         $redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() );
     63                        $redirect_to = trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() );
    6464                }
    6565
  • trunk/src/bp-templates/bp-legacy/buddypress/members/single/groups.php

    r12082 r13273  
    55 * @package BuddyPress
    66 * @subpackage bp-legacy
    7  * @version 3.0.0
     7 * @version 11.0.0
    88 */
    9 
    109?>
    1110
    1211<div class="item-list-tabs no-ajax" id="subnav" aria-label="<?php esc_attr_e( 'Member secondary navigation', 'buddypress' ); ?>" role="navigation">
    1312        <ul>
    14                 <?php if ( bp_is_my_profile() ) bp_get_options_nav(); ?>
     13                <?php bp_get_options_nav(); ?>
    1514
    16                 <?php if ( !bp_is_current_action( 'invites' ) ) : ?>
     15                <?php if ( ! bp_is_current_action( 'invites' ) ) : ?>
    1716
    1817                        <li id="groups-order-select" class="last filter">
    1918
    20                                 <label for="groups-order-by"><?php _e( 'Order By:', 'buddypress' ); ?></label>
     19                                <label for="groups-order-by"><?php esc_html_e( 'Order By:', 'buddypress' ); ?></label>
    2120                                <select id="groups-order-by">
    22                                         <option value="active"><?php _e( 'Last Active', 'buddypress' ); ?></option>
    23                                         <option value="popular"><?php _e( 'Most Members', 'buddypress' ); ?></option>
    24                                         <option value="newest"><?php _e( 'Newly Created', 'buddypress' ); ?></option>
    25                                         <option value="alphabetical"><?php _e( 'Alphabetical', 'buddypress' ); ?></option>
     21                                        <option value="active"><?php esc_html_e( 'Last Active', 'buddypress' ); ?></option>
     22                                        <option value="popular"><?php esc_html_e( 'Most Members', 'buddypress' ); ?></option>
     23                                        <option value="newest"><?php esc_html_e( 'Newly Created', 'buddypress' ); ?></option>
     24                                        <option value="alphabetical"><?php esc_html_e( 'Alphabetical', 'buddypress' ); ?></option>
    2625
    2726                                        <?php
     
    5958                        <h2 class="bp-screen-reader-text"><?php
    6059                                /* translators: accessibility text */
    61                                 _e( 'My groups', 'buddypress' );
     60                                esc_html_e( 'My groups', 'buddypress' );
    6261                        ?></h2>
    6362                <?php else : ?>
    6463                        <h2 class="bp-screen-reader-text"><?php
    6564                                /* translators: accessibility text */
    66                                 _e( 'Member\'s groups', 'buddypress' );
     65                                esc_html_e( 'Member\'s groups', 'buddypress' );
    6766                        ?></h2>
    6867                <?php endif; ?>
  • trunk/src/bp-templates/bp-legacy/buddypress/members/single/groups/invites.php

    r12595 r13273  
    55 * @package BuddyPress
    66 * @subpackage bp-legacy
    7  * @version 3.0.0
     7 * @version 11.0.0
    88 */
    99
     
    1515do_action( 'bp_before_group_invites_content' ); ?>
    1616
    17 <?php if ( bp_has_groups( 'type=invites&user_id=' . bp_loggedin_user_id() ) ) : ?>
     17<?php if ( bp_has_groups( 'type=invites&user_id=' . bp_displayed_user_id() ) ) : ?>
    1818
    1919        <h2 class="bp-screen-reader-text"><?php
    2020                /* translators: accessibility text */
    21                 _e( 'Group invitations', 'buddypress' );
     21                esc_html_e( 'Group invitations', 'buddypress' );
    2222        ?></h2>
    2323
     
    7979
    8080        <div id="message" class="info">
    81                 <p><?php _e( 'You have no outstanding group invites.', 'buddypress' ); ?></p>
     81                <p><?php esc_html_e( 'You have no outstanding group invites.', 'buddypress' ); ?></p>
    8282        </div>
    8383
  • trunk/src/bp-templates/bp-nouveau/buddypress/members/single/groups.php

    r12082 r13273  
    44 *
    55 * @since 3.0.0
    6  * @version 3.0.0
     6 * @version 11.0.0
    77 */
    88?>
     
    1111        <ul class="subnav">
    1212
    13                 <?php if ( bp_is_my_profile() ) : ?>
    14 
    15                         <?php bp_get_template_part( 'members/single/parts/item-subnav' ); ?>
    16 
    17                 <?php endif; ?>
     13                <?php bp_get_template_part( 'members/single/parts/item-subnav' ); ?>
    1814
    1915        </ul>
     
    2117
    2218<?php if ( ! bp_is_current_action( 'invites' ) ) : ?>
    23 
    2419
    2520        <?php bp_get_template_part( 'common/search-and-filters-bar' ); ?>
  • trunk/src/bp-templates/bp-nouveau/buddypress/members/single/groups/invites.php

    r13185 r13273  
    44 *
    55 * @since 3.0.0
    6  * @version 3.1.0
     6 * @version 11.0.0
    77 */
    88?>
     
    1212<?php bp_nouveau_group_hook( 'before', 'invites_content' ); ?>
    1313
    14 <?php if ( bp_has_groups( 'type=invites&user_id=' . bp_loggedin_user_id() ) ) : ?>
     14<?php if ( bp_has_groups( 'type=invites&user_id=' . bp_displayed_user_id() ) ) : ?>
    1515
    1616        <ul id="group-list" class="invites item-list bp-list" data-bp-list="groups_invites">
  • trunk/src/bp-templates/bp-nouveau/includes/groups/ajax.php

    r13192 r13273  
    9898
    9999                case 'groups_accept_invite':
    100                         if ( ! groups_check_user_has_invite( bp_loggedin_user_id(), $group_id ) ) {
     100                        if ( ! groups_check_user_has_invite( bp_displayed_user_id(), $group_id ) ) {
    101101                                wp_send_json_error( $response );
    102102                        }
    103103
    104                         if ( ! groups_accept_invite( bp_loggedin_user_id(), $group_id ) ) {
     104                        if ( ! groups_accept_invite( bp_displayed_user_id(), $group_id ) ) {
    105105                                $response = array(
    106106                                        'feedback' => sprintf(
     
    138138
    139139                case 'groups_reject_invite':
    140                         if ( ! groups_reject_invite( bp_loggedin_user_id(), $group_id ) ) {
     140                        if ( ! groups_reject_invite( bp_displayed_user_id(), $group_id ) ) {
    141141                                $response = array(
    142142                                        'feedback' => sprintf(
  • trunk/src/class-buddypress.php

    r13238 r13273  
    351351
    352352                $this->version    = '11.0.0-alpha';
    353                 $this->db_version = 13165;
     353                $this->db_version = 13271;
    354354
    355355                /** Loading */
Note: See TracChangeset for help on using the changeset viewer.