Ticket #5336: invite-pagination.patch
File invite-pagination.patch, 15.0 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 de81785..4ba61dd 100644
class BP_Groups_Group { 347 347 } 348 348 349 349 /** 350 * Get IDs of users with outstanding invites to a given group from a specified user. 350 * Get IDs of users with outstanding invites to a given group. May be restricted to only show invites 351 * from a specific user. 351 352 * 352 353 * @param int $user_id ID of the inviting user. 353 354 * @param int $group_id ID of the group. 354 * @return array IDs of users who have been invited to the group by the 355 * user but have not yet accepted. 355 * @return array { 356 * @type array $invites The requested page of located invites. 357 * @type int $total Total number of invites outstanding for the 358 * group. 359 * } 356 360 */ 357 public static function get_invites( $user_id, $group_id ) { 358 global $wpdb, $bp; 359 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 ) ); 361 362 public static function get_invites( $group_id, $user_id = null, $per_page = null, $page = null ) { 363 global $wpdb; 364 $bp = buddypress(); 365 366 //If no $user_id is specified, return all open invitations to group. 367 $user_scope = !empty( $user_id ) ? $wpdb->prepare( " = %d", $user_id ) : ' != 0'; 368 369 $pag_sql = ( !empty( $per_page ) && !empty( $page ) ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $per_page), intval( $per_page ) ) : ''; 370 371 372 $paged_invites = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0 AND inviter_id{$user_scope}{$pag_sql}", $group_id ) ); 373 //$total invites find all matches, not paged 374 $total_invites = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 0 AND inviter_id{$user_scope}", $group_id ) ); 375 376 return array( 'invites' => $paged_invites, 'total' => $total_invites ); 360 377 } 361 378 362 379 /** -
bp-groups/bp-groups-functions.php
diff --git bp-groups/bp-groups-functions.php bp-groups/bp-groups-functions.php index 072bdd8..4a813c1 100644
function groups_delete_invite( $user_id, $group_id ) { 732 732 } 733 733 734 734 function groups_send_invites( $user_id, $group_id ) { 735 735 //This isn't necessary, since we're using the inviter_id now 736 736 if ( empty( $user_id ) ) 737 737 $user_id = bp_loggedin_user_id(); 738 738 739 // Send friendinvites.740 $invited_users = groups_get_ invites_for_group( $user_id,$group_id );739 // Send group invites. 740 $invited_users = groups_get_all_invites_for_group( $group_id ); 741 741 $group = groups_get_group( array( 'group_id' => $group_id ) ); 742 742 743 for ( $i = 0, $count = count( $invited_users ); $i < $count; ++$i ) { 744 $member = new BP_Groups_Member( $invited_users[$i], $group_id ); 743 foreach ( $invited_users['invites'] as $invite ) { 744 745 $member = new BP_Groups_Member( $invite->user_id, $group_id ); 745 746 746 747 // Send the actual invite 747 groups_notification_group_invites( $group, $member, $ user_id );748 groups_notification_group_invites( $group, $member, $invite->inviter_id ); 748 749 749 750 $member->invite_sent = 1; 750 751 $member->save(); … … function groups_send_invites( $user_id, $group_id ) { 754 755 } 755 756 756 757 function groups_get_invites_for_group( $user_id, $group_id ) { 757 return BP_Groups_Group::get_invites( $user_id, $group_id ); 758 return BP_Groups_Group::get_invites( $group_id, $user_id ); 759 } 760 761 function groups_get_all_invites_for_group( $group_id, $user_id, $per_page, $page_number ) { 762 return BP_Groups_Group::get_invites( $group_id, $user_id, $per_page, $page_number ); 758 763 } 759 764 760 765 /** -
bp-groups/bp-groups-template.php
diff --git bp-groups/bp-groups-template.php bp-groups/bp-groups-template.php index 58cf4b1..609deb1 100644
class BP_Groups_Invite_Template { 2876 2876 2877 2877 var $in_the_loop; 2878 2878 2879 var $pag _page;2880 var $p ag_num;2879 var $page_number; 2880 var $per_page; 2881 2881 var $pag_links; 2882 2882 var $total_invite_count; 2883 2883 2884 function __construct( $user_id, $group_id ) { 2885 $this->invites = groups_get_invites_for_group( $user_id, $group_id ); 2884 function __construct( $args = '' ) { 2885 2886 $defaults = array( 2887 'group_id' => false, 2888 'user_id' => false, //Don't assume we want to limit by the logged-in user. 2889 'page' => 1, 2890 'per_page' => 10 2891 ); 2892 2893 $r = wp_parse_args( $args, $defaults ); 2894 2895 extract( $r, EXTR_SKIP ); 2896 2897 $this->page_number = isset( $_REQUEST['invitepage'] ) ? intval( $_REQUEST['invitepage'] ) : $page; 2898 $this->per_page = $per_page; 2899 $this->invites = groups_get_all_invites_for_group( $group_id, $user_id, $this->per_page, $this->page_number ); 2900 $this->total_invite_count = (int) $this->invites['total']; 2901 $this->invites = $this->invites['invites']; 2886 2902 $this->invite_count = count( $this->invites ); 2903 2904 $this->pag_links = paginate_links( array( 2905 'base' => add_query_arg( 'invitepage', '%#%' ), 2906 'format' => '', 2907 'total' => ceil( $this->total_invite_count / $this->per_page ), 2908 'current' => $this->page_number, 2909 'prev_text' => '←', 2910 'next_text' => '→', 2911 'mid_size' => 1 2912 ) ); 2887 2913 } 2888 2914 2889 2915 function has_invites() { … … class BP_Groups_Invite_Template { 2923 2949 global $group_id; 2924 2950 2925 2951 $this->in_the_loop = true; 2926 $user_id = $this->next_invite(); 2952 $current_invite = $this->next_invite(); 2953 $user_id = $current_invite->user_id; 2927 2954 $this->invite = new stdClass; 2928 2955 $this->invite->user = new BP_Core_User( $user_id ); 2929 2956 $this->invite->group_id = $group_id; // Globaled in bp_group_has_invites() 2957 $this->invite->inviter_id = $current_invite->inviter_id; 2930 2958 2931 2959 if ( 0 == $this->current_invite ) // loop has just started 2932 2960 do_action('loop_start'); … … class BP_Groups_Invite_Template { 2934 2962 } 2935 2963 2936 2964 function bp_group_has_invites( $args = '' ) { 2937 global $bp, $invites_template, $group_id; 2965 global $invites_template, $group_id; 2966 $bp = buddypress(); 2938 2967 2939 $defaults = array( 2940 'group_id' => false, 2941 'user_id' => bp_loggedin_user_id() 2942 ); 2943 2944 $r = wp_parse_args( $args, $defaults ); 2945 extract( $r, EXTR_SKIP ); 2946 2947 if ( !$group_id ) { 2968 if ( !$group_id ) { 2948 2969 // Backwards compatibility 2949 2970 if ( !empty( $bp->groups->current_group ) ) 2950 2971 $group_id = $bp->groups->current_group->id; … … function bp_group_has_invites( $args = '' ) { 2956 2977 if ( !$group_id ) 2957 2978 return false; 2958 2979 2959 $invites_template = new BP_Groups_Invite_Template( $user_id, $group_id ); 2980 $defaults = array( 2981 'group_id' => $group_id, 2982 'user_id' => false, //Don't assume we want to limit by the logged-in user. 2983 'page' => 1, 2984 'per_page' => 10 2985 ); 2986 2987 $r = wp_parse_args( $args, $defaults ); 2988 // extract( $r, EXTR_SKIP ); 2989 2990 $args = array( 2991 'group_id' => $r['group_id'], 2992 'user_id' => $r['user_id'], 2993 'page' => $r['page'], 2994 'per_page' => $r['per_page'], 2995 ); 2996 2997 $invites_template = new BP_Groups_Invite_Template( $args ); 2998 2960 2999 return apply_filters( 'bp_group_has_invites', $invites_template->has_invites(), $invites_template ); 2961 3000 } 2962 3001 … … function bp_group_invite_user_last_active() { 3008 3047 return apply_filters( 'bp_get_group_invite_user_last_active', $invites_template->invite->user->last_active ); 3009 3048 } 3010 3049 3050 function bp_group_invite_inviter_id() { 3051 echo bp_get_group_invite_inviter_id(); 3052 } 3053 function bp_get_group_invite_inviter_id() { 3054 global $invites_template; 3055 3056 return $invites_template->invite->inviter_id; 3057 } 3058 3059 function bp_group_invite_user_can_remove_invite() { 3060 $current_user_id = bp_loggedin_user_id(); 3061 $user_can_remove = ( bp_current_user_can( 'bp_moderate' ) || bp_group_is_admin( $current_user_id, bp_get_current_group_id() ) || ( bp_get_group_invite_inviter_id() == $current_user_id ) ) ? true : false; 3062 3063 return apply_filters( 'bp_group_invite_user_can_remove_invite', $user_can_remove, $current_user_id ); 3064 } 3065 3066 3011 3067 function bp_group_invite_user_remove_invite_url() { 3012 3068 echo bp_get_group_invite_user_remove_invite_url(); 3013 3069 } … … function bp_group_invite_user_remove_invite_url() { 3017 3073 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' ); 3018 3074 } 3019 3075 3076 function bp_group_invite_pagination_links() { 3077 echo bp_get_group_invite_pagination_links(); 3078 } 3079 function bp_get_group_invite_pagination_links() { 3080 global $invites_template; 3081 // var_dump($invites_template); 3082 3083 return apply_filters( 'bp_get_group_invite_pagination_links', $invites_template->pag_links ); 3084 } 3085 3086 function bp_group_invite_pagination_count() { 3087 echo bp_get_group_invite_pagination_count(); 3088 } 3089 function bp_get_group_invite_pagination_count() { 3090 global $invites_template; 3091 3092 $start_num = intval( ( $invites_template->page_number - 1 ) * $invites_template->per_page ) + 1; 3093 $from_num = bp_core_number_format( $start_num ); 3094 $to_num = bp_core_number_format( ( $start_num + ( $invites_template->per_page - 1 ) > $invites_template->total_invite_count ) ? $invites_template->total_invite_count : $start_num + ( $invites_template->per_page - 1 ) ); 3095 $total = bp_core_number_format( $invites_template->total_invite_count ); 3096 3097 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 ); 3098 } 3099 3020 3100 /*** 3021 3101 * Groups RSS Feed Template Tags 3022 3102 */ -
bp-templates/bp-legacy/buddypress-functions.php
diff --git bp-templates/bp-legacy/buddypress-functions.php bp-templates/bp-legacy/buddypress-functions.php index 0cb3153..7c98ea1 100644
class BP_Legacy extends BP_Theme_Compat { 137 137 'groups_filter' => 'bp_legacy_theme_object_template_loader', 138 138 'members_filter' => 'bp_legacy_theme_object_template_loader', 139 139 'messages_filter' => 'bp_legacy_theme_messages_template_loader', 140 'invite_filter' => 'bp_legacy_theme_invite_template_loader', 140 141 141 142 // Friends 142 143 'accept_friendship' => 'bp_legacy_theme_ajax_accept_friendship', … … function bp_legacy_theme_messages_template_loader() { 558 559 } 559 560 560 561 /** 562 * Load group invitations loop to handle pagination requests sent via AJAX 563 * 564 * @return string Prints template loop for the Messages component 565 * @since BuddyPress (1.6) 566 */ 567 function bp_legacy_theme_invite_template_loader() { 568 bp_get_template_part( 'groups/single/invites-loop' ); 569 exit(); 570 } 571 572 /** 561 573 * Load the activity loop template when activity is requested via AJAX, 562 574 * 563 575 * @return string JSON object containing 'contents' (output of the template loop -
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..6d4d942
- + 1 <div id="message" class="info"> 2 <p><?php _e('Select people to invite from your friends list.', 'buddypress' ); ?></p> 3 </div> 4 5 <?php do_action( 'bp_before_group_send_invites_list' ); ?> 6 7 <?php 8 9 if ( bp_group_has_invites( bp_ajax_querystring( 'invite' ) ) ) : ?> 10 11 <div id="pag-top" class="pagination"> 12 13 <div class="pag-count" id="group-invite-count-top"> 14 15 <?php bp_group_invite_pagination_count(); ?> 16 17 </div> 18 19 <div class="pagination-links" id="group-invite-pag-top"> 20 21 <?php bp_group_invite_pagination_links(); ?> 22 23 </div> 24 25 </div> 26 27 <?php /* The ID 'friend-list' is important for AJAX support. */ ?> 28 <ul id="friend-list" class="item-list"> 29 30 31 <?php while ( bp_group_invites() ) : bp_group_the_invite(); 32 // Caching these to only make the checks once 33 $current_group_id = bp_get_current_group_id(); 34 $current_user_id = bp_loggedin_user_id(); 35 36 ?> 37 38 39 <li id="<?php bp_group_invite_item_id(); ?>"> 40 <?php bp_group_invite_user_avatar(); ?> 41 42 <h4><?php bp_group_invite_user_link(); ?></h4> 43 <span class="activity"><?php bp_group_invite_user_last_active(); ?></span> 44 45 <?php do_action( 'bp_group_send_invites_item' ); ?> 46 47 <div class="action"> 48 49 <?php if ( bp_group_invite_user_can_remove_invite() ) : ?> 50 <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> 51 <?php endif; ?> 52 53 <?php do_action( 'bp_group_send_invites_item_action' ); ?> 54 </div> 55 </li> 56 57 <?php endwhile; ?> 58 59 <?php endif; ?> 60 </ul><!-- #friend-list --> 61 62 <div id="pag-bottom" class="pagination"> 63 64 <div class="pag-count" id="group-invite-count-bottom"> 65 66 <?php bp_group_invite_pagination_count(); ?> 67 68 </div> 69 70 <div class="pagination-links" id="group-invite-pag-bottom"> 71 72 <?php bp_group_invite_pagination_links(); ?> 73 74 </div> 75 76 </div> 77 78 <?php do_action( 'bp_after_group_send_invites_list' ); ?> 79 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 4d30849..84aa7ac 100644
16 16 17 17 </div><!-- .left-menu --> 18 18 19 <div class="main-column ">19 <div class="main-column invite"> 20 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' ); ?> 21 <?php bp_get_template_part( 'groups/single/invites-loop' ); ?> 54 22 55 23 </div><!-- .main-column --> 56 24 -
bp-templates/bp-legacy/css/buddypress.css
diff --git bp-templates/bp-legacy/css/buddypress.css bp-templates/bp-legacy/css/buddypress.css index 81dd03f..916ec1f 100644
a.bp-title-button { 759 759 760 760 #buddypress form.standard-form .main-column ul#friend-list { 761 761 clear:none; 762 float: left; 762 763 } 763 764 764 765 #buddypress form.standard-form .main-column ul#friend-list h4 {