Skip to:
Content

BuddyPress.org

Ticket #5336: invite-pagination.patch

File invite-pagination.patch, 15.0 KB (added by dcavins, 10 years ago)

First pass at adding pagination to group invites

  • 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 { 
    347347        }
    348348
    349349        /**
    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.
    351352         *
    352353         * @param int $user_id ID of the inviting user.
    353354         * @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         * }
    356360         */
    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 );
    360377        }
    361378
    362379        /**
  • 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 ) { 
    732732}
    733733
    734734function groups_send_invites( $user_id, $group_id ) {
    735 
     735        //This isn't necessary, since we're using the inviter_id now
    736736        if ( empty( $user_id ) )
    737737                $user_id = bp_loggedin_user_id();
    738738
    739         // Send friend invites.
    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 );
    741741        $group = groups_get_group( array( 'group_id' => $group_id ) );
    742742
    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 );
    745746
    746747                // Send the actual invite
    747                 groups_notification_group_invites( $group, $member, $user_id );
     748                groups_notification_group_invites( $group, $member, $invite->inviter_id );
    748749
    749750                $member->invite_sent = 1;
    750751                $member->save();
    function groups_send_invites( $user_id, $group_id ) { 
    754755}
    755756
    756757function 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
     761function 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 );
    758763}
    759764
    760765/**
  • 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 { 
    28762876
    28772877        var $in_the_loop;
    28782878
    2879         var $pag_page;
    2880         var $pag_num;
     2879        var $page_number;
     2880        var $per_page;
    28812881        var $pag_links;
    28822882        var $total_invite_count;
    28832883
    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'];
    28862902                $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' => '&larr;',
     2910                        'next_text' => '&rarr;',
     2911                        'mid_size' => 1
     2912                ) );
    28872913        }
    28882914
    28892915        function has_invites() {
    class BP_Groups_Invite_Template { 
    29232949                global $group_id;
    29242950
    29252951                $this->in_the_loop      = true;
    2926                 $user_id                = $this->next_invite();
     2952                $current_invite                 = $this->next_invite();
     2953                $user_id                = $current_invite->user_id;
    29272954                $this->invite           = new stdClass;
    29282955                $this->invite->user     = new BP_Core_User( $user_id );
    29292956                $this->invite->group_id = $group_id; // Globaled in bp_group_has_invites()
     2957                $this->invite->inviter_id = $current_invite->inviter_id;
    29302958
    29312959                if ( 0 == $this->current_invite ) // loop has just started
    29322960                        do_action('loop_start');
    class BP_Groups_Invite_Template { 
    29342962}
    29352963
    29362964function bp_group_has_invites( $args = '' ) {
    2937         global $bp, $invites_template, $group_id;
     2965        global $invites_template, $group_id;
     2966        $bp = buddypress();
    29382967
    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 ) {
    29482969                // Backwards compatibility
    29492970                if ( !empty( $bp->groups->current_group ) )
    29502971                        $group_id = $bp->groups->current_group->id;
    function bp_group_has_invites( $args = '' ) { 
    29562977        if ( !$group_id )
    29572978                return false;
    29582979
    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
    29602999        return apply_filters( 'bp_group_has_invites', $invites_template->has_invites(), $invites_template );
    29613000}
    29623001
    function bp_group_invite_user_last_active() { 
    30083047                return apply_filters( 'bp_get_group_invite_user_last_active', $invites_template->invite->user->last_active );
    30093048        }
    30103049
     3050function 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
     3059function 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
    30113067function bp_group_invite_user_remove_invite_url() {
    30123068        echo bp_get_group_invite_user_remove_invite_url();
    30133069}
    function bp_group_invite_user_remove_invite_url() { 
    30173073                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' );
    30183074        }
    30193075
     3076function 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
     3086function 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
    30203100/***
    30213101 * Groups RSS Feed Template Tags
    30223102 */
  • 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 { 
    137137                        'groups_filter'   => 'bp_legacy_theme_object_template_loader',
    138138                        'members_filter'  => 'bp_legacy_theme_object_template_loader',
    139139                        'messages_filter' => 'bp_legacy_theme_messages_template_loader',
     140                        'invite_filter'   => 'bp_legacy_theme_invite_template_loader',
    140141
    141142                        // Friends
    142143                        'accept_friendship' => 'bp_legacy_theme_ajax_accept_friendship',
    function bp_legacy_theme_messages_template_loader() { 
    558559}
    559560
    560561/**
     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 */
     567function bp_legacy_theme_invite_template_loader() {
     568        bp_get_template_part( 'groups/single/invites-loop' );
     569        exit();
     570}
     571
     572/**
    561573 * Load the activity loop template when activity is requested via AJAX,
    562574 *
    563575 * @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
     9if ( 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
     
    1616
    1717                </div><!-- .left-menu -->
    1818
    19                 <div class="main-column">
     19                <div class="main-column invite">
    2020
    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'  ); ?>
    5422
    5523                </div><!-- .main-column -->
    5624
  • 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 { 
    759759
    760760#buddypress form.standard-form .main-column ul#friend-list {
    761761        clear:none;
     762        float: left;
    762763}
    763764
    764765#buddypress form.standard-form .main-column ul#friend-list h4 {