Skip to:
Content

BuddyPress.org

Ticket #5440: 5440.01.patch

File 5440.01.patch, 16.5 KB (added by dcavins, 7 years ago)
  • bp-groups/bp-groups-classes.php

    diff --git bp-groups/bp-groups-classes.php bp-groups/bp-groups-classes.php
    index 0315704..8810fad 100644
    class BP_Groups_Group { 
    14541454 *   inviter_id != 0 and invite_sent = 1
    14551455 * - *Pending and unsent invitations* are entries with is_confirmed = 0 and
    14561456 *   inviter_id != 0 and invite_sent = 0
     1457 * - *Membership requests* are entries with is_confirmed = 0 and
     1458 *   inviter_id = 0 (and invite_sent = 0)
    14571459 *
    14581460 * @since BuddyPress (1.8.0)
    14591461 */
    class BP_Group_Member_Query extends BP_User_Query { 
    17091711                global $wpdb;
    17101712
    17111713                $bp     = buddypress();
    1712                 $extras = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, date_modified, is_banned FROM {$bp->groups->table_name_members} WHERE user_id IN ({$user_ids_sql}) AND group_id = %d", $this->query_vars['group_id'] ) );
     1714                $extras = $wpdb->get_results( $wpdb->prepare( "SELECT id, user_id, date_modified, is_banned FROM {$bp->groups->table_name_members} WHERE user_id IN ({$user_ids_sql}) AND group_id = %d", $this->query_vars['group_id'] ) );
    17131715
    17141716                foreach ( (array) $extras as $extra ) {
    17151717                        if ( isset( $this->results[ $extra->user_id ] ) ) {
    class BP_Group_Member_Query extends BP_User_Query { 
    17171719                                $this->results[ $extra->user_id ]->user_id       = (int) $extra->user_id;
    17181720                                $this->results[ $extra->user_id ]->is_banned     = (int) $extra->is_banned;
    17191721                                $this->results[ $extra->user_id ]->date_modified = $extra->date_modified;
     1722                                $this->results[ $extra->user_id ]->groups_members_table_id       = (int) $extra->id;
    17201723                        }
    17211724                }
    17221725
  • bp-groups/bp-groups-template.php

    diff --git bp-groups/bp-groups-template.php bp-groups/bp-groups-template.php
    index 70f4350..16b2dc5 100644
    class BP_Groups_Membership_Requests_Template { 
    29192919        var $pag_links;
    29202920        var $total_request_count;
    29212921
    2922         function __construct( $group_id, $per_page, $max ) {
    2923 
    2924                 $this->pag_page = isset( $_REQUEST['mrpage'] ) ? intval( $_REQUEST['mrpage'] ) : 1;
    2925                 $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
    2926                 $this->requests = BP_Groups_Group::get_membership_requests( $group_id, $this->pag_num, $this->pag_page );
     2922        function __construct( $args = array() ) {
    29272923
    2928                 if ( !$max || $max >= (int) $this->requests['total'] )
    2929                         $this->total_request_count = (int) $this->requests['total'];
    2930                 else
    2931                         $this->total_request_count = (int) $max;
     2924                // Backward compatibility with old method of passing arguments
     2925                if ( ! is_array( $args ) || func_num_args() > 1 ) {
     2926                        _deprecated_argument( __METHOD__, '2.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
    29322927
    2933                 $this->requests = $this->requests['requests'];
     2928                        $old_args_keys = array(
     2929                                0  => 'group_id',
     2930                                1  => 'per_page',
     2931                                2  => 'max'
     2932                        );
    29342933
    2935                 if ( $max ) {
    2936                         if ( $max >= count($this->requests) )
    2937                                 $this->request_count = count($this->requests);
    2938                         else
    2939                                 $this->request_count = (int) $max;
    2940                 } else {
    2941                         $this->request_count = count($this->requests);
     2934                        $func_args = func_get_args();
     2935                        $args      = bp_core_parse_args_array( $old_args_keys, $func_args );
    29422936                }
    29432937
     2938                $r = wp_parse_args( $args, array(
     2939                        'group_id' => bp_get_current_group_id(),
     2940                        'per_page' => 10,
     2941                        'page'     => 1,
     2942                ) );
     2943
     2944                $this->pag_num  = isset( $_REQUEST['mrnum'] ) ? intval( $_REQUEST['mrnum'] ) : $r['per_page'];
     2945                $this->pag_page = isset( $_REQUEST['mrpage'] ) ? intval( $_REQUEST['mrpage'] ) : $r['page'];
     2946
     2947                // $this->requests = BP_Groups_Group::get_membership_requests( $group_id, $this->pag_num, $this->pag_page );
     2948                $mrquery = new BP_Group_Member_Query( array(
     2949                        'group_id' => $r['group_id'],
     2950                        'type'     => 'first_joined',
     2951                        'per_page' => $this->pag_num,
     2952                        'page'     => $this->pag_page,
     2953
     2954                        // These filters ensure we get only pending invites
     2955                        'is_confirmed' => false,
     2956                        'inviter_id'   => 0,
     2957                ) );
     2958
     2959                $this->total_request_count = $mrquery->total_users;
     2960                $this->requests           = array_values( $mrquery->results );
     2961                $this->request_count       = count( $this->requests );
     2962
     2963                //Can we accommodate 'max' arguments using BP_Group_Member_Query? Is it necessary? I'm not sure it's really doing anything.
     2964                // if ( !$max || $max >= (int) $this->requests['total'] )
     2965                //      $this->total_request_count = (int) $this->requests['total'];
     2966                // else
     2967                //      $this->total_request_count = (int) $max;
     2968
     2969                // $this->requests = $this->requests['requests'];
     2970
     2971                // if ( $max ) {
     2972                //      if ( $max >= count($this->requests) )
     2973                //              $this->request_count = count($this->requests);
     2974                //      else
     2975                //              $this->request_count = (int) $max;
     2976                // } else {
     2977                //      $this->request_count = count($this->requests);
     2978                // }
     2979
    29442980                $this->pag_links = paginate_links( array(
    29452981                        'base' => add_query_arg( 'mrpage', '%#%' ),
    29462982                        'format' => '',
    class BP_Groups_Membership_Requests_Template { 
    29873023        }
    29883024
    29893025        function the_request() {
     3026                global $group_id;
     3027
    29903028                $this->in_the_loop = true;
    29913029                $this->request     = $this->next_request();
    29923030
    class BP_Groups_Membership_Requests_Template { 
    29963034}
    29973035
    29983036function bp_group_has_membership_requests( $args = '' ) {
    2999         global $requests_template, $groups_template;
     3037        global $requests_template, $group_id;
     3038        $bp = buddypress();
    30003039
    30013040        $defaults = array(
    3002                 'group_id' => $groups_template->group->id,
     3041                'group_id' => false,
     3042                'page'     => 1,
    30033043                'per_page' => 10,
    30043044                'max'      => false
    30053045        );
    30063046
    30073047        $r = wp_parse_args( $args, $defaults );
    3008         extract( $r, EXTR_SKIP );
    30093048
    3010         $requests_template = new BP_Groups_Membership_Requests_Template( $group_id, $per_page, $max );
     3049        if ( !$r['group_id'] ) {
     3050                // Backwards compatibility
     3051                if ( !empty( $bp->groups->current_group ) )
     3052                        $r['group_id'] = $bp->groups->current_group->id;
     3053
     3054                if ( !empty( $bp->groups->new_group_id ) )
     3055                        $r['group_id'] = $bp->groups->new_group_id;
     3056        }
     3057
     3058        if ( !$r['group_id'] )
     3059                return false;
     3060
     3061        $group_id = $r['group_id']; // globaled for later use
     3062
     3063        $requests_template = new BP_Groups_Membership_Requests_Template( $r );
    30113064        return apply_filters( 'bp_group_has_membership_requests', $requests_template->has_requests(), $requests_template );
    30123065}
    30133066
    function bp_group_request_reject_link() { 
    30333086        echo bp_get_group_request_reject_link();
    30343087}
    30353088        function bp_get_group_request_reject_link() {
    3036                 global $requests_template, $groups_template;
     3089                global $requests_template, $group_id;
    30373090
    3038                 return apply_filters( 'bp_get_group_request_reject_link', wp_nonce_url( bp_get_group_permalink( $groups_template->group ) . 'admin/membership-requests/reject/' . $requests_template->request->id, 'groups_reject_membership_request' ) );
     3091                $group_object = groups_get_group( array( 'group_id' => $group_id ) );
     3092
     3093                return apply_filters( 'bp_get_group_request_reject_link', wp_nonce_url( bp_get_group_permalink( $group_object ) . 'admin/membership-requests/reject/' . $requests_template->request->groups_members_table_id, 'groups_reject_membership_request' ) );
    30393094        }
    30403095
    30413096function bp_group_request_accept_link() {
    30423097        echo bp_get_group_request_accept_link();
    30433098}
    30443099        function bp_get_group_request_accept_link() {
    3045                 global $requests_template, $groups_template;
     3100                global $requests_template, $group_id;
     3101
     3102                $group_object = groups_get_group( array( 'group_id' => $group_id ) );
    30463103
    3047                 return apply_filters( 'bp_get_group_request_accept_link', wp_nonce_url( bp_get_group_permalink( $groups_template->group ) . 'admin/membership-requests/accept/' . $requests_template->request->id, 'groups_accept_membership_request' ) );
     3104                return apply_filters( 'bp_get_group_request_accept_link', wp_nonce_url( bp_get_group_permalink( $group_object ) . 'admin/membership-requests/accept/' . $requests_template->request->groups_members_table_id, 'groups_accept_membership_request' ) );
    30483105        }
    30493106
    30503107function bp_group_request_user_link() {
    function bp_group_request_comment() { 
    30683125        echo apply_filters( 'bp_group_request_comment', strip_tags( stripslashes( $requests_template->request->comments ) ) );
    30693126}
    30703127
     3128/**
     3129 * Output pagination links for group membership requests.
     3130 *
     3131 * @since BuddyPress (2.0.0)
     3132 */
     3133function bp_group_mem_requests_pagination_links() {
     3134        echo bp_get_group_mem_requests_pagination_links();
     3135}
     3136        /**
     3137         * Get pagination links for group membership requests.
     3138         *
     3139         * @since BuddyPress (2.0.0)
     3140         */
     3141        function bp_get_group_mem_requests_pagination_links() {
     3142                global $requests_template;
     3143                return apply_filters( 'bp_get_group_mem_requests_pagination_links', $requests_template->pag_links );
     3144        }
     3145
     3146/**
     3147 * Output pagination count text for group membership requests.
     3148 *
     3149 * @since BuddyPress (2.0.0)
     3150 */
     3151function bp_group_mem_requests_pagination_count() {
     3152        echo bp_get_group_mem_requests_pagination_count();
     3153}
     3154        /**
     3155         * Get pagination count text for group membership requests.
     3156         *
     3157         * @since BuddyPress (2.0.0)
     3158         */
     3159        function bp_get_group_mem_requests_pagination_count() {
     3160                global $requests_template;
     3161
     3162                $start_num = intval( ( $requests_template->pag_page - 1 ) * $requests_template->pag_num ) + 1;
     3163                $from_num  = bp_core_number_format( $start_num );
     3164                $to_num    = bp_core_number_format( ( $start_num + ( $requests_template->pag_num - 1 ) > $requests_template->total_request_count ) ? $requests_template->total_request_count : $start_num + ( $requests_template->pag_num - 1 ) );
     3165                $total     = bp_core_number_format( $requests_template->total_request_count );
     3166
     3167                return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing requests %1$s to %2$s (of %3$s request)', 'Viewing request %1$s to %2$s (of %3$s requests)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
     3168        }
     3169
    30713170/************************************************************************************
    30723171 * Invite Friends Template Tags
    30733172 **/
  • bp-templates/bp-legacy/buddypress-functions.php

    diff --git bp-templates/bp-legacy/buddypress-functions.php bp-templates/bp-legacy/buddypress-functions.php
    index 93efcef..fb4baf5 100644
    class BP_Legacy extends BP_Theme_Compat { 
    134134                $actions = array(
    135135
    136136                        // Directory filters
    137                         'blogs_filter'    => 'bp_legacy_theme_object_template_loader',
    138                         'forums_filter'   => 'bp_legacy_theme_object_template_loader',
    139                         'groups_filter'   => 'bp_legacy_theme_object_template_loader',
    140                         'members_filter'  => 'bp_legacy_theme_object_template_loader',
    141                         'messages_filter' => 'bp_legacy_theme_messages_template_loader',
    142                         'invite_filter'   => 'bp_legacy_theme_invite_template_loader',
     137                        'blogs_filter'                                  => 'bp_legacy_theme_object_template_loader',
     138                        'forums_filter'                                 => 'bp_legacy_theme_object_template_loader',
     139                        'groups_filter'                                 => 'bp_legacy_theme_object_template_loader',
     140                        'members_filter'                                => 'bp_legacy_theme_object_template_loader',
     141                        'messages_filter'                               => 'bp_legacy_theme_messages_template_loader',
     142                        'invite_filter'                                 => 'bp_legacy_theme_invite_template_loader',
     143                        'membership_requests_filter'    => 'bp_legacy_theme_membership_requests_template_loader',
    143144
    144145                        // Friends
    145146                        'accept_friendship' => 'bp_legacy_theme_ajax_accept_friendship',
    function bp_legacy_theme_invite_template_loader() { 
    612613}
    613614
    614615/**
     616 * Load group membership requests loop to handle pagination requests sent via AJAX.
     617 *
     618 * @since BuddyPress (2.0.0)
     619 */
     620function bp_legacy_theme_membership_requests_template_loader() {
     621        bp_get_template_part( 'groups/single/admin-requests-loop' );
     622        exit();
     623}
     624
     625/**
    615626 * Load the activity loop template when activity is requested via AJAX,
    616627 *
    617628 * @return string JSON object containing 'contents' (output of the template loop
  • new file p-templates/bp-legacy/buddypress/groups/single/admin-requests-loop.php

    diff --git bp-templates/bp-legacy/buddypress/groups/single/admin-requests-loop.php bp-templates/bp-legacy/buddypress/groups/single/admin-requests-loop.php
    new file mode 100644
    index 0000000..81fe660
    - +  
     1<?php if ( bp_group_has_membership_requests( bp_ajax_querystring( 'membership_requests' ) ) ) : ?>
     2
     3        <div id="pag-top" class="pagination">
     4
     5                <div class="pag-count" id="group-mem-requests-count-top">
     6
     7                        <?php bp_group_mem_requests_pagination_count(); ?>
     8
     9                </div>
     10
     11                <div class="pagination-links" id="group-mem-requests-pag-top">
     12
     13                        <?php bp_group_mem_requests_pagination_links(); ?>
     14
     15                </div>
     16
     17        </div>
     18
     19        <ul id="request-list" class="item-list">
     20                <?php while ( bp_group_membership_requests() ) : bp_group_the_membership_request(); ?>
     21
     22                        <li>
     23                                <?php bp_group_request_user_avatar_thumb(); ?>
     24                                <h4><?php bp_group_request_user_link(); ?> <span class="comments"><?php bp_group_request_comment(); ?></span></h4>
     25                                <span class="activity"><?php bp_group_request_time_since_requested(); ?></span>
     26
     27                                <?php do_action( 'bp_group_membership_requests_admin_item' ); ?>
     28
     29                                <div class="action">
     30
     31                                        <?php bp_button( array( 'id' => 'group_membership_accept', 'component' => 'groups', 'wrapper_class' => 'accept', 'link_href' => bp_get_group_request_accept_link(), 'link_title' => __( 'Accept', 'buddypress' ), 'link_text' => __( 'Accept', 'buddypress' ) ) ); ?>
     32
     33                                        <?php bp_button( array( 'id' => 'group_membership_reject', 'component' => 'groups', 'wrapper_class' => 'reject', 'link_href' => bp_get_group_request_reject_link(), 'link_title' => __( 'Reject', 'buddypress' ), 'link_text' => __( 'Reject', 'buddypress' ) ) ); ?>
     34
     35                                        <?php do_action( 'bp_group_membership_requests_admin_item_action' ); ?>
     36
     37                                </div>
     38                        </li>
     39
     40                <?php endwhile; ?>
     41        </ul>
     42
     43        <div id="pag-bottom" class="pagination">
     44
     45                <div class="pag-count" id="group-mem-requests-count-bottom">
     46
     47                        <?php bp_group_mem_requests_pagination_count(); ?>
     48
     49                </div>
     50
     51                <div class="pagination-links" id="group-mem-requests-pag-bottom">
     52
     53                        <?php bp_group_mem_requests_pagination_links(); ?>
     54
     55                </div>
     56
     57        </div>
     58
     59        <?php else: ?>
     60
     61                <div id="message" class="info">
     62                        <p><?php _e( 'There are no pending membership requests.', 'buddypress' ); ?></p>
     63                </div>
     64
     65        <?php endif; ?>
     66 No newline at end of file
  • bp-templates/bp-legacy/buddypress/groups/single/admin.php

    diff --git bp-templates/bp-legacy/buddypress/groups/single/admin.php bp-templates/bp-legacy/buddypress/groups/single/admin.php
    index 6a7d3c8..0162317 100644
     
    303303
    304304        <?php do_action( 'bp_before_group_membership_requests_admin' ); ?>
    305305
    306         <?php if ( bp_group_has_membership_requests() ) : ?>
     306                <div class="membership_requests">
    307307
    308                 <ul id="request-list" class="item-list">
    309                         <?php while ( bp_group_membership_requests() ) : bp_group_the_membership_request(); ?>
     308                        <?php bp_get_template_part( 'groups/single/admin-requests-loop' ); ?>
    310309
    311                                 <li>
    312                                         <?php bp_group_request_user_avatar_thumb(); ?>
    313                                         <h4><?php bp_group_request_user_link(); ?> <span class="comments"><?php bp_group_request_comment(); ?></span></h4>
    314                                         <span class="activity"><?php bp_group_request_time_since_requested(); ?></span>
    315 
    316                                         <?php do_action( 'bp_group_membership_requests_admin_item' ); ?>
    317 
    318                                         <div class="action">
    319 
    320                                                 <?php bp_button( array( 'id' => 'group_membership_accept', 'component' => 'groups', 'wrapper_class' => 'accept', 'link_href' => bp_get_group_request_accept_link(), 'link_title' => __( 'Accept', 'buddypress' ), 'link_text' => __( 'Accept', 'buddypress' ) ) ); ?>
    321 
    322                                                 <?php bp_button( array( 'id' => 'group_membership_reject', 'component' => 'groups', 'wrapper_class' => 'reject', 'link_href' => bp_get_group_request_reject_link(), 'link_title' => __( 'Reject', 'buddypress' ), 'link_text' => __( 'Reject', 'buddypress' ) ) ); ?>
    323 
    324                                                 <?php do_action( 'bp_group_membership_requests_admin_item_action' ); ?>
    325 
    326                                         </div>
    327                                 </li>
    328 
    329                         <?php endwhile; ?>
    330                 </ul>
    331 
    332         <?php else: ?>
    333 
    334                 <div id="message" class="info">
    335                         <p><?php _e( 'There are no pending membership requests.', 'buddypress' ); ?></p>
    336310                </div>
    337311
    338         <?php endif; ?>
    339 
    340312        <?php do_action( 'bp_after_group_membership_requests_admin' ); ?>
    341313
    342314<?php endif; ?>
  • bp-templates/bp-legacy/js/buddypress.js

    diff --git bp-templates/bp-legacy/js/buddypress.js bp-templates/bp-legacy/js/buddypress.js
    index c81ae20..760c067 100644
    jq(document).ready( function() { 
    853853                                template = 'groups/single/members';
    854854                        }
    855855
     856                        // On the Admin > Requests page, we need to reset the object, since "admin" isn't helpful
     857                        if ( 'admin' == object && jq('body').hasClass('membership-requests') ) {
     858                                object = 'membership_requests';
     859                        }
     860
    856861                        if ( pagination_id.indexOf( 'pag-bottom' ) !== -1 ) {
    857862                                var caller = 'pag-bottom';
    858863                        } else {