Ticket #5423: invite-pagination.patch
File invite-pagination.patch, 16.3 KB (added by , 11 years ago) |
---|
-
bp-groups/bp-groups-classes.php
diff --git bp-groups/bp-groups-classes.php bp-groups/bp-groups-classes.php index 6106e46..6bfe32e 100644
class BP_Groups_Group { 397 397 * @return array IDs of users who have been invited to the group by the 398 398 * user but have not yet accepted. 399 399 */ 400 public static function get_invites( $user_id, $group_id ) { 401 global $wpdb, $bp; 402 return $wpdb->get_col( $wpdb->prepare( "SELECT user_id FROM {$bp->groups->table_name_members} WHERE group_id = %d and is_confirmed = 0 AND inviter_id = %d", $group_id, $user_id ) ); 400 public static function get_invites( $user_id, $group_id, $per_page = null, $page = null ) { 401 global $wpdb; 402 $bp = buddypress(); 403 404 // Add pagination piece, if necessary 405 $pag_sql = ( !empty( $per_page ) && !empty( $page ) ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $per_page), intval( $per_page ) ) : ''; 406 407 return $wpdb->get_col( $wpdb->prepare( "SELECT user_id FROM {$bp->groups->table_name_members} WHERE group_id = %d and is_confirmed = 0 AND inviter_id = %d{$pag_sql}", $group_id, $user_id ) ); 408 } 409 410 /** 411 * Get total number of outstanding invites to a given group from a specified user. 412 * 413 * @param int $user_id ID of the inviting user. 414 * @param int $group_id ID of the group. 415 * @return int number of users who have been invited to the group by the 416 * user but have not yet accepted. 417 */ 418 public static function get_invite_total( $user_id, $group_id ) { 419 global $wpdb; 420 $bp = buddypress(); 421 return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(user_id) FROM {$bp->groups->table_name_members} WHERE group_id = %d and is_confirmed = 0 AND inviter_id = %d", $group_id, $user_id ) ); 403 422 } 404 423 405 424 /** -
bp-groups/bp-groups-functions.php
diff --git bp-groups/bp-groups-functions.php bp-groups/bp-groups-functions.php index 251ae96..8740c89 100644
function groups_send_invites( $user_id, $group_id ) { 796 796 do_action( 'groups_send_invites', $group_id, $invited_users ); 797 797 } 798 798 799 function groups_get_invites_for_group( $user_id, $group_id ) { 800 return BP_Groups_Group::get_invites( $user_id, $group_id ); 799 /* Get outstanding invites to a given group from a specified user. 800 * @param int $user_id Member who sent the invitation 801 * @param int $group_id Potential group 802 * @param (optional) int $per_page Number of invitations to show per page 803 * @param (optional) int $page_number Which page to show 804 * @return array of user IDs with outstanding invitations 805 */ 806 function groups_get_invites_for_group( $user_id, $group_id, $per_page, $page_number ) { 807 return BP_Groups_Group::get_invites( $user_id, $group_id, $per_page, $page_number ); 808 } 809 810 /* Get total number of outstanding invites to a given group from a specified user. 811 * @param int $user_id Member who sent the invitation 812 * @param int $group_id Potential group 813 * @return int number of invitations (used for pagination) 814 */ 815 function groups_get_invite_total_for_group( $user_id, $group_id ) { 816 return BP_Groups_Group::get_invite_total( $user_id, $group_id ); 801 817 } 802 818 803 819 /** -
bp-groups/bp-groups-template.php
diff --git bp-groups/bp-groups-template.php bp-groups/bp-groups-template.php index fe6c837..a3ef190 100644
class BP_Groups_Invite_Template { 3080 3080 3081 3081 var $in_the_loop; 3082 3082 3083 var $pag_page; 3084 var $pag_num; 3085 var $pag_links; 3083 var $pag_page; // Which page of invitations is being shown 3084 var $pag_num; // Number of invites to show per page 3085 var $pag_links; // The html to create the pagination links 3086 3086 var $total_invite_count; 3087 3087 3088 function __construct( $user_id, $group_id ) { 3089 $this->invites = groups_get_invites_for_group( $user_id, $group_id ); 3090 $this->invite_count = count( $this->invites ); 3088 function __construct( $args = '' ) { 3089 3090 $defaults = array( 3091 'group_id' => false, 3092 'user_id' => bp_loggedin_user_id(), 3093 'per_page' => 10, 3094 'page' => 1 3095 ); 3096 3097 $r = wp_parse_args( $args, $defaults ); 3098 3099 extract( $r, EXTR_SKIP ); 3100 3101 $this->pag_page = isset( $_REQUEST['invitepage'] ) ? intval( $_REQUEST['invitepage'] ) : $page; 3102 $this->pag_num = $per_page; 3103 $this->invites = groups_get_invites_for_group( $user_id, $group_id, $this->pag_num, $this->pag_page ); 3104 $this->invite_count = count( $this->invites ); 3105 $this->total_invite_count = groups_get_invite_total_for_group( $user_id, $group_id ); 3106 3107 $this->pag_links = paginate_links( array( 3108 'base' => add_query_arg( 'invitepage', '%#%' ), 3109 'format' => '', 3110 'total' => ceil( $this->total_invite_count / $this->pag_num ), 3111 'current' => $this->pag_page, 3112 'prev_text' => '←', 3113 'next_text' => '→', 3114 'mid_size' => 1 3115 ) ); 3091 3116 } 3092 3117 3093 3118 function has_invites() { … … class BP_Groups_Invite_Template { 3138 3163 } 3139 3164 3140 3165 function bp_group_has_invites( $args = '' ) { 3141 global $bp, $invites_template, $group_id; 3166 global $invites_template, $group_id; 3167 $bp = buddypress(); 3142 3168 3143 3169 $defaults = array( 3144 'group_id' => false, 3145 'user_id' => bp_loggedin_user_id() 3170 'group_id' => false, 3171 'user_id' => bp_loggedin_user_id(), 3172 'per_page' => 10, 3173 'page' => 1 3146 3174 ); 3147 3175 3148 3176 $r = wp_parse_args( $args, $defaults ); … … function bp_group_has_invites( $args = '' ) { 3160 3188 if ( !$group_id ) 3161 3189 return false; 3162 3190 3163 $invites_template = new BP_Groups_Invite_Template( $user_id, $group_id ); 3191 $args = array( 3192 'group_id' => $group_id, 3193 'user_id' => $user_id, 3194 'per_page' => $per_page, 3195 'page' => $page 3196 ); 3197 3198 $invites_template = new BP_Groups_Invite_Template( $args ); 3199 3164 3200 return apply_filters( 'bp_group_has_invites', $invites_template->has_invites(), $invites_template ); 3165 3201 } 3166 3202 … … function bp_group_invite_user_remove_invite_url() { 3220 3256 3221 3257 return wp_nonce_url( site_url( bp_get_groups_slug() . '/' . $invites_template->invite->group_id . '/invites/remove/' . $invites_template->invite->user->id ), 'groups_invite_uninvite_user' ); 3222 3258 } 3259 function bp_group_invite_pagination_links() { 3260 echo bp_get_group_invite_pagination_links(); 3261 } 3262 function bp_get_group_invite_pagination_links() { 3263 global $invites_template; 3264 3265 return apply_filters( 'bp_get_group_invite_pagination_links', $invites_template->pag_links ); 3266 } 3267 3268 function bp_group_invite_pagination_count() { 3269 echo bp_get_group_invite_pagination_count(); 3270 } 3271 function bp_get_group_invite_pagination_count() { 3272 global $invites_template; 3273 3274 $start_num = intval( ( $invites_template->pag_page - 1 ) * $invites_template->pag_num ) + 1; 3275 $from_num = bp_core_number_format( $start_num ); 3276 $to_num = bp_core_number_format( ( $start_num + ( $invites_template->pag_num - 1 ) > $invites_template->total_invite_count ) ? $invites_template->total_invite_count : $start_num + ( $invites_template->pag_num - 1 ) ); 3277 $total = bp_core_number_format( $invites_template->total_invite_count ); 3278 3279 return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing invitation %1$s to %2$s (of %3$s invitation)', 'Viewing invitation %1$s to %2$s (of %3$s invitations)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total ); 3280 } 3223 3281 3224 3282 /*** 3225 3283 * Groups RSS Feed Template Tags -
bp-templates/bp-legacy/buddypress-functions.php
diff --git bp-templates/bp-legacy/buddypress-functions.php bp-templates/bp-legacy/buddypress-functions.php index d8963f5..509a6e2 100644
class BP_Legacy extends BP_Theme_Compat { 139 139 'groups_filter' => 'bp_legacy_theme_object_template_loader', 140 140 'members_filter' => 'bp_legacy_theme_object_template_loader', 141 141 'messages_filter' => 'bp_legacy_theme_messages_template_loader', 142 'invite_filter' => 'bp_legacy_theme_invite_template_loader', 142 143 143 144 // Friends 144 145 'accept_friendship' => 'bp_legacy_theme_ajax_accept_friendship', … … function bp_legacy_theme_messages_template_loader() { 600 601 exit(); 601 602 } 602 603 604 /** 605 * Load group invitations loop to handle pagination requests sent via AJAX 606 * 607 * @return string Prints template loop for a group's Invitations screen 608 * @since BuddyPress (2.0) 609 */ 610 function bp_legacy_theme_invite_template_loader() { 611 bp_get_template_part( 'groups/single/invites-loop' ); 612 exit(); 613 } 614 603 615 /** 604 616 * Load the activity loop template when activity is requested via AJAX, 605 617 * -
new file p-templates/bp-legacy/buddypress/groups/single/invites-loop.php
diff --git bp-templates/bp-legacy/buddypress/groups/single/invites-loop.php bp-templates/bp-legacy/buddypress/groups/single/invites-loop.php new file mode 100644 index 0000000..fd4259f
- + 1 <div class="left-menu"> 2 3 <div id="invite-list"> 4 <ul> 5 <?php bp_new_group_invite_friend_list(); ?> 6 </ul> 7 8 <?php wp_nonce_field( 'groups_invite_uninvite_user', '_wpnonce_invite_uninvite_user' ); ?> 9 </div> 10 11 </div><!-- .left-menu --> 12 13 <div class="main-column"> 14 15 <div id="message" class="info"> 16 <p><?php _e('Select people to invite from your friends list.', 'buddypress' ); ?></p> 17 </div> 18 19 <?php do_action( 'bp_before_group_send_invites_list' ); ?> 20 21 <?php if ( bp_group_has_invites( bp_ajax_querystring( 'invite' ) ) ) : ?> 22 23 <div id="pag-top" class="pagination"> 24 25 <div class="pag-count" id="group-invite-count-top"> 26 27 <?php bp_group_invite_pagination_count(); ?> 28 29 </div> 30 31 <div class="pagination-links" id="group-invite-pag-top"> 32 33 <?php bp_group_invite_pagination_links(); ?> 34 35 </div> 36 37 </div> 38 39 <?php /* The ID 'friend-list' is important for AJAX support. */ ?> 40 <ul id="friend-list" class="item-list"> 41 42 <?php while ( bp_group_invites() ) : bp_group_the_invite(); ?> 43 44 <li id="<?php bp_group_invite_item_id(); ?>"> 45 <?php bp_group_invite_user_avatar(); ?> 46 47 <h4><?php bp_group_invite_user_link(); ?></h4> 48 <span class="activity"><?php bp_group_invite_user_last_active(); ?></span> 49 50 <?php do_action( 'bp_group_send_invites_item' ); ?> 51 52 <div class="action"> 53 <a class="button remove" href="<?php bp_group_invite_user_remove_invite_url(); ?>" id="<?php bp_group_invite_item_id(); ?>"><?php _e( 'Remove Invite', 'buddypress' ); ?></a> 54 55 <?php do_action( 'bp_group_send_invites_item_action' ); ?> 56 </div> 57 </li> 58 59 <?php endwhile; ?> 60 61 </ul><!-- #friend-list --> 62 63 <div id="pag-bottom" class="pagination"> 64 65 <div class="pag-count" id="group-invite-count-bottom"> 66 67 <?php bp_group_invite_pagination_count(); ?> 68 69 </div> 70 71 <div class="pagination-links" id="group-invite-pag-bottom"> 72 73 <?php bp_group_invite_pagination_links(); ?> 74 75 </div> 76 77 </div> 78 79 <?php endif; ?> 80 81 <?php do_action( 'bp_after_group_send_invites_list' ); ?> 82 83 </div><!-- .main-column --> 84 85 <div class="clear"></div> 86 87 <div class="submit"> 88 <input type="submit" name="submit" id="submit" value="<?php esc_attr_e( 'Send Invites', 'buddypress' ); ?>" /> 89 </div> 90 91 <?php wp_nonce_field( 'groups_send_invites', '_wpnonce_send_invites' ); ?> 92 93 <?php /* This is important, don't forget it */ ?> 94 <input type="hidden" name="group_id" id="group_id" value="<?php bp_group_id(); ?>" /> 95 No newline at end of file -
bp-templates/bp-legacy/buddypress/groups/single/send-invites.php
diff --git bp-templates/bp-legacy/buddypress/groups/single/send-invites.php bp-templates/bp-legacy/buddypress/groups/single/send-invites.php index c2f0500..8d93ef5 100644
2 2 3 3 <?php if ( bp_get_total_friend_count( bp_loggedin_user_id() ) ) : ?> 4 4 5 <?php /* The ID 'send-invite-form' is important for AJAX support. */ ?> 5 6 <form action="<?php bp_group_send_invite_form_action(); ?>" method="post" id="send-invite-form" class="standard-form" role="main"> 6 7 7 <div class=" left-menu">8 <div class="invite"> <!-- Used for AJAX pagination --> 8 9 9 <div id="invite-list"> 10 <ul> 11 <?php bp_new_group_invite_friend_list(); ?> 12 </ul> 10 <?php bp_get_template_part( 'groups/single/invites-loop' ); ?> 13 11 14 <?php wp_nonce_field( 'groups_invite_uninvite_user', '_wpnonce_invite_uninvite_user' ); ?> 15 </div> 16 17 </div><!-- .left-menu --> 18 19 <div class="main-column"> 20 21 <div id="message" class="info"> 22 <p><?php _e('Select people to invite from your friends list.', 'buddypress' ); ?></p> 23 </div> 24 25 <?php do_action( 'bp_before_group_send_invites_list' ); ?> 26 27 <?php /* The ID 'friend-list' is important for AJAX support. */ ?> 28 <ul id="friend-list" class="item-list"> 29 <?php if ( bp_group_has_invites() ) : ?> 30 31 <?php while ( bp_group_invites() ) : bp_group_the_invite(); ?> 32 33 <li id="<?php bp_group_invite_item_id(); ?>"> 34 <?php bp_group_invite_user_avatar(); ?> 35 36 <h4><?php bp_group_invite_user_link(); ?></h4> 37 <span class="activity"><?php bp_group_invite_user_last_active(); ?></span> 38 39 <?php do_action( 'bp_group_send_invites_item' ); ?> 40 41 <div class="action"> 42 <a class="button remove" href="<?php bp_group_invite_user_remove_invite_url(); ?>" id="<?php bp_group_invite_item_id(); ?>"><?php _e( 'Remove Invite', 'buddypress' ); ?></a> 43 44 <?php do_action( 'bp_group_send_invites_item_action' ); ?> 45 </div> 46 </li> 47 48 <?php endwhile; ?> 49 50 <?php endif; ?> 51 </ul><!-- #friend-list --> 52 53 <?php do_action( 'bp_after_group_send_invites_list' ); ?> 54 55 </div><!-- .main-column --> 56 57 <div class="clear"></div> 58 59 <div class="submit"> 60 <input type="submit" name="submit" id="submit" value="<?php esc_attr_e( 'Send Invites', 'buddypress' ); ?>" /> 61 </div> 62 63 <?php wp_nonce_field( 'groups_send_invites', '_wpnonce_send_invites' ); ?> 64 65 <?php /* This is important, don't forget it */ ?> 66 <input type="hidden" name="group_id" id="group_id" value="<?php bp_group_id(); ?>" /> 12 </div> <!-- .invite --> 67 13 68 14 </form><!-- #send-invite-form --> 69 15 … … 75 21 76 22 <?php endif; ?> 77 23 78 <?php do_action( 'bp_after_group_send_invites_content' ); ?> 24 <?php do_action( 'bp_after_group_send_invites_content' ); ?> 25 No newline at end of file -
bp-templates/bp-legacy/css/buddypress.css
diff --git bp-templates/bp-legacy/css/buddypress.css bp-templates/bp-legacy/css/buddypress.css index 6c13c70..befd22c 100644
a.bp-title-button { 764 764 765 765 #buddypress form.standard-form .main-column ul#friend-list { 766 766 clear:none; 767 float: left; 767 768 } 768 769 769 770 #buddypress form.standard-form .main-column ul#friend-list h4 { -
bp-templates/bp-legacy/js/buddypress.js
diff --git bp-templates/bp-legacy/js/buddypress.js bp-templates/bp-legacy/js/buddypress.js index 3afc762..5ebbba9 100644
jq(document).ready( function() { 901 901 /** Invite Friends Interface ****************************************/ 902 902 903 903 /* Select a user from the list of friends and add them to the invite list */ 904 jq("# invite-list input").on( 'click', function() {904 jq("#send-invite-form").on( 'click', "#invite-list input", function() { 905 905 jq('.ajax-loader').toggle(); 906 // Dim the form until the response arrives 907 jq(this).parents('ul').find('input').prop('disabled', true); 906 908 907 909 var friend_id = jq(this).val(); 908 910 … … jq(document).ready( function() { 928 930 929 931 jq('.ajax-loader').toggle(); 930 932 931 if ( friend_action == 'invite' ) {932 jq('#friend-list').append(response);933 } else if ( friend_action == 'uninvite' ) {934 jq('#friend-list li#uid-' + friend_id).remove();935 }936 937 933 jq('.item-list-tabs li.selected').removeClass('loading'); 934 }) 935 .done(function() { 936 // Refresh entire list (keeps pagination and totals up to date) 937 bp_filter_request( 'invite', 'bp-invite-filter', 'bp-invite-scope', 'div.invite', false, 1, '', '', ''); 938 938 }); 939 939 }); 940 940 941 941 /* Remove a user from the list of users to invite to a group */ 942 jq("# friend-list").on('click', 'lia.remove', function() {942 jq("#send-invite-form").on('click', '#friend-list a.remove', function() { 943 943 jq('.ajax-loader').toggle(); 944 944 945 945 var friend_id = jq(this).attr('id'); … … jq(document).ready( function() { 957 957 function(response) 958 958 { 959 959 jq('.ajax-loader').toggle(); 960 jq('#friend-list #uid-' + friend_id).remove(); 961 jq('#invite-list #f-' + friend_id).prop('checked', false); 960 961 }) 962 .done(function() { 963 // Refresh entire list (keeps pagination and totals up to date and invite checkbox list synchronized) 964 bp_filter_request( 'invite', 'bp-invite-filter', 'bp-invite-scope', 'div.invite', false, 1, '', '', ''); 962 965 }); 963 966 964 967 return false;