Skip to:
Content

BuddyPress.org

Ticket #6932: 6932.2.diff

File 6932.2.diff, 26.4 KB (added by tharsheblows, 4 years ago)

include unsubscribe details in bp_email_get_type_schema

  • src/bp-activity/bp-activity-notifications.php

     
    4040 * @param int $receiver_user_id The ID of the user who is receiving the update.
    4141 */
    4242function bp_activity_at_message_notification( $activity_id, $receiver_user_id ) {
     43
    4344        $notifications = BP_Core_Notification::get_all_for_user( $receiver_user_id, 'all' );
    4445
    4546        // Don't leave multiple notifications for the same activity item.
     
    7374                        $group_name = bp_get_current_group_name();
    7475                }
    7576
     77                $unsubscribe_args = array(
     78                                                'uid' => (int)$receiver_user_id,
     79                                                'nt' => $email_type
     80                                        );
     81                $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     82
    7683                $args = array(
    7784                        'tokens' => array(
    7885                                'activity'         => $activity,
     
    8188                                'mentioned.url'    => $message_link,
    8289                                'poster.name'      => $poster_name,
    8390                                'receiver-user.id' => $receiver_user_id,
     91                                'unsubscribe'      => $unsubscribe_link
    8492                        ),
    8593                );
    8694
     
    152160
    153161                // Send an email if the user hasn't opted-out.
    154162                if ( 'no' != bp_get_user_meta( $original_activity->user_id, 'notification_activity_new_reply', true ) ) {
     163
     164                        $unsubscribe_args = array(
     165                                'uid' => (int)$original_activity->user_id,
     166                                'nt' => 'activity-comment'
     167                        );
     168                        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     169
    155170                        $args = array(
    156171                                'tokens' => array(
    157172                                        'comment.id'                => $comment_id,
     
    160175                                        'original_activity.user_id' => $original_activity->user_id,
    161176                                        'poster.name'               => $poster_name,
    162177                                        'thread.url'                => esc_url( $thread_link ),
     178                                        'unsubscribe'               => $unsubscribe_link
    163179                                ),
    164180                        );
    165181
     
    194210
    195211                // Send an email if the user hasn't opted-out.
    196212                if ( 'no' != bp_get_user_meta( $parent_comment->user_id, 'notification_activity_new_reply', true ) ) {
     213
     214                        $unsubscribe_args = array(
     215                                'uid' => (int)$parent_comment->user_id,
     216                                'nt' => 'activity-comment-author'
     217                        );
     218                        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     219
    197220                        $args = array(
    198221                                'tokens' => array(
    199222                                        'comment.id'             => $comment_id,
     
    202225                                        'parent-comment-user.id' => $parent_comment->user_id,
    203226                                        'poster.name'            => $poster_name,
    204227                                        'thread.url'             => esc_url( $thread_link ),
     228                                        'unsubscribe'            => $unsubscribe_link
    205229                                ),
    206230                        );
    207231
  • src/bp-core/admin/bp-core-admin-schema.php

     
    552552                foreach ( $tt_ids as $tt_id ) {
    553553                        $term = get_term_by( 'term_taxonomy_id', (int) $tt_id, bp_get_email_tax_type() );
    554554                        wp_update_term( (int) $term->term_id, bp_get_email_tax_type(), array(
    555                                 'description' => $descriptions[ $id ],
     555                                'description' => $descriptions[ $id ]['description'],
    556556                        ) );
    557557                }
    558558        }
  • src/bp-core/bp-core-actions.php

     
    109109
    110110// Activation redirect.
    111111add_action( 'bp_activation', 'bp_add_activation_redirect' );
     112
     113// Email unsubscribe.
     114add_action( 'bp_get_request_unsubscribe', 'bp_emails_unsubscribe' );
     115
  • src/bp-core/bp-core-filters.php

     
    10241024        $tokens['recipient.email']     = '';
    10251025        $tokens['recipient.name']      = '';
    10261026        $tokens['recipient.username']  = '';
    1027         $tokens['unsubscribe']         = site_url( 'wp-login.php' );
    10281027
    10291028
    10301029        // Who is the email going to?
     
    10411040                }
    10421041
    10431042                if ( $user_obj ) {
    1044                         // Unsubscribe link.
    1045                         $tokens['unsubscribe'] = esc_url( sprintf(
    1046                                 '%s%s/notifications/',
    1047                                 bp_core_get_user_domain( $user_obj->ID ),
    1048                                 function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings'
    1049                         ) );
    10501043                        $tokens['recipient.username'] = $user_obj->user_login;
    10511044                }
    10521045        }
  • src/bp-core/bp-core-functions.php

     
    28982898 *                       on the email delivery class you are using.
    28992899 */
    29002900function bp_send_email( $email_type, $to, $args = array() ) {
     2901
    29012902        static $is_default_wpmail = null;
    29022903        static $wp_html_emails    = null;
    29032904
     
    29542955
    29552956        if ( $must_use_wpmail ) {
    29562957                $to = $email->get( 'to' );
    2957 
    29582958                return wp_mail(
    29592959                        array_shift( $to )->get_address(),
    29602960                        $email->get( 'subject', 'replace-tokens' ),
     
    29892989        }
    29902990
    29912991        $delivery = new $delivery_class();
     2992
    29922993        $status   = $delivery->bp_email( $email );
    29932994
    29942995        if ( is_wp_error( $status ) ) {
     
    32733274 * @return array
    32743275 */
    32753276function bp_email_get_type_schema() {
    3276         return array(
    3277                 'activity-comment'                   => __( 'A member has replied to an activity update that the recipient posted.', 'buddypress' ),
    3278                 'activity-comment-author'            => __( 'A member has replied to a comment on an activity update that the recipient posted.', 'buddypress' ),
    3279                 'activity-at-message'                => __( 'Recipient was mentioned in an activity update.', 'buddypress' ),
    3280                 'groups-at-message'                  => __( 'Recipient was mentioned in a group activity update.', 'buddypress' ),
    3281                 'core-user-registration'             => __( 'Recipient has registered for an account.', 'buddypress' ),
    3282                 'core-user-registration-with-blog'   => __( 'Recipient has registered for an account and site.', 'buddypress' ),
    3283                 'friends-request'                    => __( 'A member has sent a friend request to the recipient.', 'buddypress' ),
    3284                 'friends-request-accepted'           => __( 'Recipient has had a friend request accepted by a member.', 'buddypress' ),
    3285                 'groups-details-updated'             => __( "A group's details were updated.", 'buddypress' ),
    3286                 'groups-invitation'                  => __( 'A member has sent a group invitation to the recipient.', 'buddypress' ),
    3287                 'groups-member-promoted'             => __( "Recipient's status within a group has changed.", 'buddypress' ),
    3288                 'groups-membership-request'          => __( 'A member has requested permission to join a group.', 'buddypress' ),
    3289                 'messages-unread'                    => __( 'Recipient has received a private message.', 'buddypress' ),
    3290                 'settings-verify-email-change'       => __( 'Recipient has changed their email address.', 'buddypress' ),
    3291                 'groups-membership-request-accepted' => __( 'Recipient had requested to join a group, which was accepted.', 'buddypress' ),
    3292                 'groups-membership-request-rejected' => __( 'Recipient had requested to join a group, which was rejected.', 'buddypress' ),
     3277
     3278        $activity_comment = array(
     3279                'description'   => __( 'A member has replied to an activity update that the recipient posted.', 'buddypress' ),
     3280                'unsubscribe'   => array(
     3281                                'meta_key'      => 'notification_activity_new_reply',
     3282                                'message'       => __( 'You will no longer receive emails when someone replies to an update or comment you posted.', 'buddypress' ),
     3283                        )
    32933284        );
     3285
     3286        $activity_comment_author = array(
     3287                'description'   => __( 'A member has replied to a comment on an activity update that the recipient posted.', 'buddypress' ),
     3288                'unsubscribe'   => array(
     3289                                'meta_key'      => 'notification_activity_new_reply',
     3290                                'message'       => __( 'You will no longer receive emails when someone replies to an update or comment you posted.', 'buddypress' ),
     3291                        )
     3292        );
     3293
     3294        $activity_at_message = array(
     3295                'description'   => __( 'Recipient was mentioned in an activity update.', 'buddypress' ),
     3296                'unsubscribe'   => array(
     3297                                'meta_key'      => 'notification_activity_new_mention',
     3298                                'message'       =>  __( 'You will no longer receive emails when someone mentions you in an update.', 'buddypress' ),
     3299                )
     3300        );
     3301
     3302        $groups_at_message = array(
     3303                'description'   => __( 'Recipient was mentioned in a group activity update.', 'buddypress' ),
     3304                'unsubscribe'   => array(
     3305                                'meta_key'      => 'notification_activity_new_mention',
     3306                                'message'       => __( 'You will no longer receive emails when someone mentions you in an update.', 'buddypress' ),
     3307                )
     3308        );
     3309
     3310        $core_user_registration = array(
     3311                'description'   => __( 'Recipient has registered for an account.', 'buddypress' ),
     3312                'unsubscribe'   => false
     3313        );
     3314
     3315        $core_user_registration_with_blog =  array(
     3316                'description'   => __( 'Recipient has registered for an account and site.', 'buddypress' ),
     3317                'unsubscribe'   => false
     3318        );
     3319
     3320        $friends_request = array(
     3321                'description'   => __( 'A member has sent a friend request to the recipient.', 'buddypress' ),
     3322                'unsubscribe'   => array(
     3323                                'meta_key'      => 'notification_friends_friendship_request',
     3324                                'message'       => __( 'You will no longer receive emails when someone sends you a friend request.', 'buddypress' ),
     3325                )
     3326        );
     3327
     3328        $friends_request_accepted = array(
     3329                'description'   => __( 'Recipient has had a friend request accepted by a member.', 'buddypress' ),
     3330                'unsubscribe'   => array(
     3331                                'meta_key'      => 'notification_friends_friendship_accepted',
     3332                                'message'       => __( 'You will no longer receive emails when someone accepts your friendship request.', 'buddypress' ),
     3333                )
     3334        );
     3335
     3336        $groups_details_updated = array(
     3337                'description'   => __( "A group's details were updated.", 'buddypress' ),
     3338                'unsubscribe'   => array(
     3339                                'meta_key'      => 'notification_groups_group_updated',
     3340                                'message'       => __( 'You will no longer receive emails when one of your groups is updated.', 'buddypress' ),
     3341                )
     3342        );
     3343
     3344        $groups_details_updated = array(
     3345                'description'   => __( "A group's details were updated.", 'buddypress' ),
     3346                'unsubscribe'   => array(
     3347                                'meta_key'      => 'notification_groups_group_updated',
     3348                                'message'       => __( 'You will no longer receive emails when one of your groups is updated.', 'buddypress' ),
     3349                )
     3350        );
     3351
     3352        $groups_invitation = array(
     3353                'description'   => __( 'A member has sent a group invitation to the recipient.', 'buddypress' ),
     3354                'unsubscribe'   => array(
     3355                                'meta_key'      => 'notification_groups_invite',
     3356                                'message'       => __( 'You will no longer receive emails when you are invited to join a group.', 'buddypress' ),
     3357                )
     3358        );
     3359
     3360        $groups_member_promoted = array(
     3361                'description'   => __( "Recipient's status within a group has changed.", 'buddypress' ),
     3362                'unsubscribe'   => array(
     3363                                'meta_key'      => 'notification_groups_admin_promotion',
     3364                                'message'       => __( 'You will no longer receive emails when you have been promoted in a group.', 'buddypress' ),
     3365                )
     3366        );
     3367
     3368        $groups_member_promoted = array(
     3369                'description'   => __( "Recipient's status within a group has changed.", 'buddypress' ),
     3370                'unsubscribe'   => array(
     3371                                'meta_key'      => 'notification_groups_admin_promotion',
     3372                                'message'       => __( 'You will no longer receive emails when you have been promoted in a group.', 'buddypress' ),
     3373                )
     3374        );
     3375
     3376        $groups_membership_request = array(
     3377                'description'   => __( 'A member has requested permission to join a group.', 'buddypress' ),
     3378                'unsubscribe'   => array(
     3379                                'meta_key'      => 'notification_groups_membership_request',
     3380                                'message'       =>  __( 'You will no longer receive emails when someone requests to be a member of your group.', 'buddypress' ),
     3381                )
     3382        );
     3383
     3384        $messages_unread = array(
     3385                'description'   => __( 'Recipient has received a private message.', 'buddypress' ),
     3386                'unsubscribe'   => array(
     3387                                'meta_key'      => 'notification_messages_new_message',
     3388                                'message'       => __( 'You will no longer receive emails when someone sends you a message.', 'buddypress' ),
     3389                )
     3390        );
     3391
     3392        $settings_verify_email_change = array(
     3393                'description'   =>         __( 'Recipient has changed their email address.', 'buddypress' ),
     3394                'unsubscribe'   => false
     3395        );
     3396
     3397        $groups_membership_request_accepted = array(
     3398                'description'   =>  __( 'Recipient had requested to join a group, which was accepted.', 'buddypress' ),
     3399                'unsubscribe'   => array(
     3400                                'meta_key'      => 'notification_membership_request_completed',
     3401                                'message'       =>  __( 'You will no longer receive emails when your request to join a group has been accepted or denied.', 'buddypress' ),
     3402                )
     3403        );
     3404
     3405        $groups_membership_request_rejected = array(
     3406                'description'   =>  __( 'Recipient had requested to join a group, which was rejected.', 'buddypress' ),
     3407                'unsubscribe'   => array(
     3408                                'meta_key'      => 'notification_membership_request_completed',
     3409                                'message'       =>  __( 'You will no longer receive emails when your request to join a group has been accepted or denied.', 'buddypress' ),
     3410                )
     3411        );
     3412
     3413        $email_type_schema_array = array(
     3414                'activity-comment'                   => $activity_comment,
     3415                'activity-comment-author'            => $activity_comment_author,
     3416                'activity-at-message'                => $activity_at_message,
     3417                'groups-at-message'                  => $groups_at_message,
     3418                'core-user-registration'             => $core_user_registration,
     3419                'core-user-registration-with-blog'   => $core_user_registration_with_blog,
     3420                'friends-request'                    => $friends_request,
     3421                'friends-request-accepted'           => $friends_request_accepted,
     3422                'groups-details-updated'             => $groups_details_updated,
     3423                'groups-invitation'                  => $groups_invitation,
     3424                'groups-member-promoted'             => $groups_member_promoted,
     3425                'groups-membership-request'          => $groups_membership_request,
     3426                'messages-unread'                    => $messages_unread,
     3427                'settings-verify-email-change'       => $settings_verify_email_change,
     3428                'groups-membership-request-accepted' => $groups_membership_request_accepted,
     3429                'groups-membership-request-rejected' => $groups_membership_request_rejected,
     3430        );
     3431
     3432        return apply_filters( 'bp_email_get_type_schema', $email_type_schema_array );
    32943433}
     3434
     3435/**
     3436 * Handles unsubscribe action to unsubscribe user from notification emails.
     3437 *
     3438 * @since
     3439 *
     3440 */
     3441function bp_emails_unsubscribe(){
     3442
     3443        $request = $_GET;
     3444        $admin_email   = get_bloginfo( 'admin_email' );
     3445        $bp_email_schema = bp_email_get_type_schema();
     3446
     3447        $user_id = ( isset( $request['uid'] ) && !empty( $request['uid'] ) ) ? $request['uid'] : '';
     3448        $notification_type = ( isset( $request['nt'] ) && !empty( $request['nt'] ) ) ? $request['nt'] : '';
     3449        $to_check = ( isset( $request['nn'] ) && !empty( $request['nn'] ) ) ? $request['nn'] : '';
     3450
     3451        $check_args = array(
     3452                'uid' => $user_id,
     3453                'nt'  => $notification_type
     3454        );
     3455
     3456        $check = bp_check( $check_args );
     3457
     3458        $current_user = is_user_logged_in() ? wp_get_current_user() : false;
     3459
     3460        if( empty( $user_id ) || empty( $notification_type ) || empty( $to_check ) || ! array_key_exists( $notification_type, $bp_email_schema ) ){
     3461
     3462                $settings_link = site_url( 'wp-login.php' );
     3463                $result_message = __( 'Sorry, something has gone wrong.', 'buddypress' );
     3464                $how_to_unsubscribe_message = __( 'Please log in and go to your settings to unsubscribe from notifications.', 'buddypress' );
     3465        }
     3466        elseif(  ! hash_equals( $check, $to_check ) ){
     3467
     3468                $settings_link = site_url( 'wp-login.php' );
     3469                $result_message = __( 'Sorry the security check failed.', 'buddypress' );
     3470                $how_to_unsubscribe_message = __( 'Please log in and go to your settings to unsubscribe from notifications.', 'buddypress' );
     3471
     3472        }
     3473        elseif( is_user_logged_in() && (int)$current_user->ID !== (int)$user_id ){
     3474               
     3475                $settings_link = esc_url( sprintf(
     3476                        '%s%s/notifications/',
     3477                        bp_core_get_user_domain( (int)$current_user->ID ),
     3478                        function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings'
     3479                ) );
     3480
     3481                $result_message = __( 'Something has gone wrong.', 'buddypress' );
     3482                $how_to_unsubscribe_message = __( 'Please go to your settings to unsubscribe from notifications.', 'buddypress' );
     3483        }
     3484        else{
     3485               
     3486                $settings_link = esc_url( sprintf(
     3487                        '%s%s/notifications/',
     3488                        bp_core_get_user_domain( $user_id ),
     3489                        function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings'
     3490                ) );
     3491
     3492                // unsubscribe them by setting the usermeta to 'no'
     3493                $notification_meta_key = $bp_email_schema[ $notification_type ][ 'unsubscribe' ][ 'meta_key' ];
     3494                $is_unsubscribed = bp_update_user_meta( $user_id, $notification_meta_key, 'no' );
     3495
     3496                $result_message = ( empty( $is_unsubscribed ) && bp_get_user_meta( $user_id, $notification_meta_key, true ) !== 'no' ) ? __( 'Sorry, something has gone wrong with unsubscribing you from these emails.', 'buddypress' ) : $bp_email_schema[ $notification_type ][ 'unsubscribe' ][ 'message' ];
     3497               
     3498                $how_to_unsubscribe_message = __( 'You can change this or any other email notification preferences in your email settings.', 'buddypress' );
     3499        }
     3500
     3501        $message = sprintf(
     3502                '%1$s <a href="%2$s">%3$s</a>',
     3503                $result_message,
     3504                $settings_link,
     3505                $how_to_unsubscribe_message
     3506        );
     3507
     3508        bp_core_add_message( $message );
     3509        bp_core_redirect( esc_url( remove_query_arg( array_keys( $request ) ) ) );
     3510}
     3511
     3512/**
     3513 * Creates unsubscribe link for notification emails.
     3514 *
     3515 * @since
     3516 *
     3517 * @param string        $link   URL to which the unsubscribe query string is appended.
     3518 * @param array         $args   Used to build unsubscribe query string.
     3519 *
     3520 * @return string The unsubscribe link.
     3521 */
     3522function bp_email_get_unsubscribe_link( $args = null ){
     3523
     3524        $bp_emails_type_schema = bp_email_get_type_schema();
     3525
     3526        if( ! is_array( $args ) || !isset( $args['nt'] ) || ! array_key_exists( $args['nt'], $bp_emails_type_schema ) ){
     3527                return site_url( 'wp-login.php' );     
     3528        }
     3529        $notification_type = $args['nt'];
     3530
     3531        // if the activity type is not unsubscribable (ununsubscribable), return false
     3532        if( empty( $bp_emails_type_schema[ $notification_type ]['unsubscribe'] ) ){
     3533                return false;
     3534        }
     3535
     3536        $link = ( isset( $bp_emails_type_schema[ $notification_type ]['unsubscribe']['link'] ) ) ? $bp_emails_type_schema[ $notification_type ]['unsubscribe']['link'] : bp_get_root_domain() . '/' . bp_get_activity_root_slug() . '/';
     3537
     3538        $check = bp_check( $args );
     3539
     3540        $args['nn'] = $check;
     3541        $args['action'] = 'unsubscribe';
     3542
     3543        $unsubscribe_link = esc_url( add_query_arg( $args, $link ) );
     3544
     3545        /**
     3546         * Filters the unsubscribe link.
     3547         *
     3548         * @since
     3549         *
     3550         * @param string        $link   URL to which the unsubscribe query string is appended.
     3551         * @param array         $args   Used to build unsubscribe query string.
     3552         */
     3553        return apply_filters( 'bp_email_get_unsubscribe_link', $unsubscribe_link, $link, $args );
     3554}
     3555
  • src/bp-core/bp-core-options.php

     
    893893         */
    894894        return apply_filters( 'bp_get_theme_package_id', bp_get_option( '_bp_theme_package_id', $default ) );
    895895}
     896
     897/**
     898 * Get a persistent salt not dependent on salts in wp-config.php.
     899 *
     900 * @return string
     901 *
     902 */
     903function bp_get_salt(){
     904
     905        $salt = bp_get_option( 'bp_persistent_salt' );
     906        if( ! $salt ){
     907                $salt = base64_encode( mcrypt_create_iv(12, MCRYPT_DEV_URANDOM) );
     908                bp_add_option( 'bp_persistent_salt', $salt );
     909        }
     910
     911        return $salt;
     912}
     913
     914/**
     915 * Get a function that makes a check for the given args.
     916 *
     917 * @param  array        $args   Any array.
     918 *
     919 * @return string
     920 *
     921 */
     922function bp_check( $args ){
     923
     924        $salt = bp_get_salt();
     925        $string = ( is_array( $args) ) ? implode( ':', $args ) : (string)$args;
     926
     927        // should this return a substring like the nonce does? It's quite long.
     928        $check = hash_hmac( 'md5', $string, $salt );
     929
     930        return $check;
     931}
  • src/bp-friends/bp-friends-notifications.php

     
    3232                return;
    3333        }
    3434
     35        $unsubscribe_args = array(
     36                                        'uid' => (int)$friend_id,
     37                                        'nt' => 'friends-request'
     38                                );
     39        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     40
    3541        $args = array(
    3642                'tokens' => array(
    3743                        'friend-requests.url' => esc_url( bp_core_get_user_domain( $friend_id ) . bp_get_friends_slug() . '/requests/' ),
     
    4046                        'initiator.id'        => $initiator_id,
    4147                        'initiator.url'       => esc_url( bp_core_get_user_domain( $initiator_id ) ),
    4248                        'initiator.name'      => bp_core_get_user_displayname( $initiator_id ),
     49                        'unsubscribe'             => $unsubscribe_link
    4350                ),
    4451        );
    4552        bp_send_email( 'friends-request', $friend_id, $args );
     
    6370                return;
    6471        }
    6572
     73        $unsubscribe_args = array(
     74                                        'uid' => (int)$initiator_id,
     75                                        'nt' => 'friends-request-accepted'
     76                                );
     77        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     78
    6679        $args = array(
    6780                'tokens' => array(
    6881                        'friend.id'      => $friend_id,
     
    7083                        'friend.name'    => bp_core_get_user_displayname( $friend_id ),
    7184                        'friendship.id'  => $friendship_id,
    7285                        'initiator.id'   => $initiator_id,
     86                        'unsubscribe'    => $unsubscribe_link
    7387                ),
    7488        );
    7589        bp_send_email( 'friends-request-accepted', $initiator_id, $args );
  • src/bp-groups/bp-groups-notifications.php

     
    6868                        continue;
    6969                }
    7070
     71                $unsubscribe_args = array(
     72                                                'uid' => (int)$user_id,
     73                                                'nt' => 'groups-details-updated'
     74                                        );
     75                $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     76
    7177                $args = array(
    7278                        'tokens' => array(
    7379                                'changed_text' => $changed_text,
     
    7581                                'group.id'     => $group_id,
    7682                                'group.url'    => esc_url( bp_get_group_permalink( $group ) ),
    7783                                'group.name'   => $group->name,
     84                                'unsubscribe'  => $unsubscribe_link
    7885                        ),
    7986                );
    8087                bp_send_email( 'groups-details-updated', (int) $user_id, $args );
     
    124131                return;
    125132        }
    126133
     134        $unsubscribe_args = array(
     135                                        'uid' => (int)$admin_id,
     136                                        'nt' => 'groups-membership-request'
     137                                );
     138        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     139
    127140        $group = groups_get_group( array( 'group_id' => $group_id ) );
    128141        $args  = array(
    129142                'tokens' => array(
     
    136149                        'profile.url'          => esc_url( bp_core_get_user_domain( $requesting_user_id ) ),
    137150                        'requesting-user.id'   => $requesting_user_id,
    138151                        'requesting-user.name' => bp_core_get_user_displayname( $requesting_user_id ),
     152                        'unsubscribe'              => $unsubscribe_link
    139153                ),
    140154        );
    141155        bp_send_email( 'groups-membership-request', (int) $admin_id, $args );
     
    172186                return;
    173187        }
    174188
     189        $unsubscribe_args = array(
     190                                        'uid' => (int)$requesting_user_id,
     191                                        'nt' => 'notification_membership_request_completed'
     192                                );
     193        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $user_groups_link, $unsubscribe_args ) );
     194
    175195        $group = groups_get_group( array( 'group_id' => $group_id ) );
    176196        $args  = array(
    177197                'tokens' => array(
     
    184204        );
    185205
    186206        if ( ! empty( $accepted ) ) {
     207
     208                $unsubscribe_args = array(
     209                        'uid' => (int)$requesting_user_id,
     210                        'nt' => 'groups-membership-request-accepted'
     211                );
     212                $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     213               
     214                $args['tokens']['unsubscribe'] = $unsubscribe_link;
     215
    187216                bp_send_email( 'groups-membership-request-accepted', (int) $requesting_user_id, $args );
     217
    188218        } else {
     219
     220                $unsubscribe_args = array(
     221                        'uid' => (int)$requesting_user_id,
     222                        'nt' => 'groups-membership-request-rejected'
     223                );
     224                $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     225               
     226                $args['tokens']['unsubscribe'] = $unsubscribe_link;
     227
    189228                bp_send_email( 'groups-membership-request-rejected', (int) $requesting_user_id, $args );
    190229        }
    191230}
     
    226265                return;
    227266        }
    228267
     268        $unsubscribe_args = array(
     269                                        'uid' => (int)$user_id,
     270                                        'nt' => 'groups-member-promoted'
     271                                );
     272        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     273
    229274        $group = groups_get_group( array( 'group_id' => $group_id ) );
    230275        $args  = array(
    231276                'tokens' => array(
     
    235280                        'group.name'  => $group->name,
    236281                        'promoted_to' => $promoted_to,
    237282                        'user.id'     => $user_id,
     283                        'unsubscribe' => $unsubscribe_link
    238284                ),
    239285        );
    240286        bp_send_email( 'groups-member-promoted', (int) $user_id, $args );
     
    276322                return;
    277323        }
    278324
    279         $invited_link = bp_core_get_user_domain( $invited_user_id ) . bp_get_groups_slug();
     325        $unsubscribe_args = array(
     326                                        'uid' => (int)$invited_user_id,
     327                                        'nt' => 'groups-invitation'
     328                                );
     329        $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     330
    280331        $args         = array(
    281332                'tokens' => array(
    282333                        'group'        => $group,
     
    286337                        'inviter.url'  => bp_core_get_user_domain( $inviter_user_id ),
    287338                        'inviter.id'   => $inviter_user_id,
    288339                        'invites.url'  => esc_url( $invited_link . '/invites/' ),
     340                        'unsubscribe'  => $unsubscribe_link
    289341                ),
    290342        );
    291343        bp_send_email( 'groups-invitation', (int) $invited_user_id, $args );
  • src/bp-messages/bp-messages-notifications.php

     
    5858                        continue;
    5959                }
    6060
     61                $unsubscribe_args = array(
     62                                                'uid' => (int)$recipient->user_id,
     63                                                'nt' => 'messages-unread'
     64                                        );
     65                $unsubscribe_link = esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) );
     66
    6167                $args = array(
    6268                        'tokens' => array(
    6369                                'usermessage' => wp_strip_all_tags( stripslashes( $message ) ),
     
    6470                                'message.url' => esc_url( bp_core_get_user_domain( $recipient->user_id ) . bp_get_messages_slug() . '/view/' . $thread_id . '/' ),
    6571                                'sender.name' => $sender_name,
    6672                                'usersubject' => sanitize_text_field( stripslashes( $subject ) ),
     73                                'unsubscribe' => $unsubscribe_link
    6774                        ),
    6875                );
    6976                bp_send_email( 'messages-unread', $ud, $args );
  • tests/phpunit/testcases/admin/functions.php

     
    254254
    255255                $correct_descriptions = bp_email_get_type_schema();
    256256                foreach ( $d_terms as $d_term ) {
    257                         $correct_description = $correct_descriptions[ $d_term->slug ];
     257                        $correct_description = $correct_descriptions[ $d_term->slug ]['description'];
    258258                        $this->assertSame( $correct_description, $d_term->description );
    259259                }
    260260        }