Skip to:
Content

BuddyPress.org

Ticket #5629: 5629.02.patch

File 5629.02.patch, 10.0 KB (added by boonebgorges, 5 years ago)
  • src/bp-activity/bp-activity-admin.php

    diff --git src/bp-activity/bp-activity-admin.php src/bp-activity/bp-activity-admin.php
    index 0150595..d4ec34f 100644
    class BP_Activity_List_Table extends WP_List_Table { 
    10571057                        'display_comments' => 'stream',
    10581058                        'show_hidden'      => true,
    10591059                        'spam'             => 'spam_only',
     1060                        'count_total'      => 'count_query',
    10601061                ) );
    10611062                $this->spam_count = $spams['total'];
    10621063                unset( $spams );
    class BP_Activity_List_Table extends WP_List_Table { 
    10721073                        'show_hidden'      => true,
    10731074                        //'sort'             => $sort,
    10741075                        'spam'             => $spam,
     1076                        'count_total'      => 'count_query',
    10751077                ) );
    10761078
    10771079                // If we're viewing a specific activity, flatten all activites into a single array.
  • src/bp-activity/bp-activity-classes.php

    diff --git src/bp-activity/bp-activity-classes.php src/bp-activity/bp-activity-classes.php
    index f1e6054..8881748 100644
    class BP_Activity_Activity { 
    311311                        'show_hidden'       => false,      // Show items marked hide_sitewide
    312312                        'spam'              => 'ham_only', // Spam status
    313313                        'update_meta_cache' => true,
     314                        'count_total'       => false,
    314315                );
    315316                $r = wp_parse_args( $args, $defaults );
    316317                extract( $r );
    class BP_Activity_Activity { 
    411412                $page     = absint( $page     );
    412413                $per_page = absint( $per_page );
    413414
     415                $retval = array(
     416                        'activities'     => null,
     417                        'total'          => null,
     418                        'has_more_items' => null,
     419                );
     420
    414421                // Filter and return true to use the legacy query structure (not recommended)
    415422                if ( apply_filters( 'bp_use_legacy_activity_query', false, __METHOD__, $r ) ) {
    416423
    class BP_Activity_Activity { 
    431438                        $activity_ids_sql = "{$select_sql} {$from_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort}";
    432439
    433440                        if ( ! empty( $per_page ) && ! empty( $page ) ) {
    434                                 $activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page );
     441                                $activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page + 1 );
    435442                        }
    436443
    437444                        $activity_ids_sql = apply_filters( 'bp_activity_paged_activities_sql', $activity_ids_sql, $r );
    438445
    439446                        $activity_ids = $wpdb->get_col( $activity_ids_sql );
    440                         $activities   = self::get_activity_data( $activity_ids );
    441                 }
    442447
    443                 $total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', "SELECT count(DISTINCT a.id) FROM {$bp->activity->table_name} a {$join_sql} {$where_sql}", $where_sql, $sort );
    444                 $total_activities     = $wpdb->get_var( $total_activities_sql );
     448                        $retval['has_more_items'] = ! empty( $per_page ) && count( $activity_ids ) > $per_page;
     449
     450                        // We don't need the last activity id anymore, so we
     451                        // trim it
     452                        array_pop( $activity_ids );
     453
     454                        $activities = self::get_activity_data( $activity_ids );
     455                }
    445456
    446457                // Get the fullnames of users so we don't have to query in the loop
    447458                $activities = self::append_user_fullnames( $activities );
    class BP_Activity_Activity { 
    465476                // Generate action strings
    466477                $activities = BP_Activity_Activity::generate_action_strings( $activities );
    467478
     479                $retval['activities'] = $activities;
     480
    468481                // If $max is set, only return up to the max results
    469                 if ( !empty( $max ) ) {
    470                         if ( (int) $total_activities > (int) $max )
    471                                 $total_activities = $max;
     482                if ( false !== $r['count_total'] ) {
     483
     484                        $total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', "SELECT count(DISTINCT a.id) FROM {$bp->activity->table_name} a {$join_sql} {$where_sql}", $where_sql, $sort );
     485                        $total_activities     = $wpdb->get_var( $total_activities_sql );
     486
     487                        if ( !empty( $max ) ) {
     488                                if ( (int) $total_activities > (int) $max )
     489                                        $total_activities = $max;
     490                        }
     491
     492                        $retval['total'] = $total_activities;
    472493                }
    473494
    474                 return array( 'activities' => $activities, 'total' => (int) $total_activities );
     495                return $retval;
    475496        }
    476497
    477498        /**
  • src/bp-activity/bp-activity-functions.php

    diff --git src/bp-activity/bp-activity-functions.php src/bp-activity/bp-activity-functions.php
    index 507387e..3454cf0 100644
    function bp_activity_get( $args = '' ) { 
    963963                'in'                => false,        // Comma-separated list or array of activity IDs to which you want to limit the query
    964964                'spam'              => 'ham_only',   // 'ham_only' (default), 'spam_only' or 'all'.
    965965                'update_meta_cache' => true,
     966                'count_total'       => false,
    966967
    967968                /**
    968969                 * Pass filters as an array -- all filter items can be multiple values comma separated:
    function bp_activity_get( $args = '' ) { 
    994995                                'show_hidden'       => $show_hidden,
    995996                                'spam'              => $spam,
    996997                                'update_meta_cache' => $update_meta_cache,
     998                                'count_total'       => $count_total,
    997999                        );
    9981000                        $activity = BP_Activity_Activity::get( $args );
    9991001                        wp_cache_set( 'bp_activity_sitewide_front', $activity, 'bp' );
    function bp_activity_get( $args = '' ) { 
    10121014                        'show_hidden'      => $show_hidden,
    10131015                        'exclude'          => $exclude,
    10141016                        'in'               => $in,
    1015                         'spam'             => $spam
     1017                        'spam'             => $spam,
     1018                        'count_total'      => $count_total,
    10161019                );
    10171020                $activity = BP_Activity_Activity::get( $args );
    10181021        }
  • src/bp-activity/bp-activity-template.php

    diff --git src/bp-activity/bp-activity-template.php src/bp-activity/bp-activity-template.php
    index cad209f..d846944 100644
    class BP_Activity_Template { 
    9898
    9999        var $in_the_loop;
    100100
     101        /**
     102         * URL parameter key for activity pagination. Default: 'acpage'.
     103         *
     104         * @since BuddyPress (2.1.0)
     105         * @var string
     106         */
     107        var $pag_arg;
     108
    101109        var $pag_page;
    102110        var $pag_num;
    103111        var $pag_links;
    class BP_Activity_Template { 
    131139         *     @type string|bool $display_comments Default: 'threaded'.
    132140         * }
    133141         */
    134         function __construct( $args ) {
    135                 global $bp;
     142        function __construct( $args ) { global $bp;
    136143
    137144                // Backward compatibility with old method of passing arguments
    138145                if ( !is_array( $args ) || func_num_args() > 1 ) {
    class BP_Activity_Template { 
    178185                $r = wp_parse_args( $args, $defaults );
    179186                extract( $r );
    180187
    181                 $this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $page;
     188                $this->pag_arg  = $r['page_arg'];
     189                $this->pag_page = isset( $_REQUEST[ $this->pag_arg ] ) ? intval( $_REQUEST[ $this->pag_arg ] ) : $page;
    182190                $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
    183191
    184192                // Check if blog/forum replies are disabled
    class BP_Activity_Template { 
    220228                        ) );
    221229                }
    222230
    223                 if ( !$max || $max >= (int) $this->activities['total'] )
    224                         $this->total_activity_count = (int) $this->activities['total'];
    225                 else
    226                         $this->total_activity_count = (int) $max;
     231                if ( ! is_null( $this->activities['total'] ) ) {
     232                        if ( !$max || $max >= (int) $this->activities['total'] )
     233                                $this->total_activity_count = (int) $this->activities['total'];
     234                        else
     235                                $this->total_activity_count = (int) $max;
     236                }
     237
     238                $this->has_more_items = $this->activities['has_more_items'];
    227239
    228240                $this->activities = $this->activities['activities'];
    229241
    class BP_Activity_Template { 
    268280                                'mid_size'  => 1
    269281                        ) );
    270282                }
    271         }
     283 }
    272284
    273285        /**
    274286         * Whether there are activity items available in the loop.
    function bp_the_activity() { 
    706718}
    707719
    708720/**
     721 * Output the URL for the Load More link.
     722 *
     723 * @since BuddyPress (2.1.0)
     724 */
     725function bp_activity_load_more_link() {
     726        echo bp_get_activity_load_more_link();
     727}
     728        function bp_get_activity_load_more_link() {
     729                global $activities_template;
     730
     731                $link = trailingslashit( bp_get_root_domain() . '/' . bp_get_activity_root_slug() );
     732                $link = add_query_arg( $activities_template->pag_arg, $activities_template->pag_page + 1, $link );
     733
     734                return apply_filters( 'bp_get_activity_load_more_link', $link );
     735        }
     736
     737/**
    709738 * Output the activity pagination count.
    710739 *
    711740 * @since BuddyPress (1.0)
    function bp_activity_pagination_links() { 
    778807function bp_activity_has_more_items() {
    779808        global $activities_template;
    780809
    781         $remaining_pages = 0;
     810        if ( ! empty( $activities_template->has_more_items )  ) {
     811                $has_more_items = true;
     812        } else {
     813                $remaining_pages = 0;
     814
     815                if ( ! empty( $activities_template->pag_page ) ) {
     816                        $remaining_pages = floor( ( $activities_template->total_activity_count - 1 ) / ( $activities_template->pag_num * $activities_template->pag_page ) );
     817                }
    782818
    783         if ( ! empty( $activities_template->pag_page ) ) {
    784                 $remaining_pages = floor( ( $activities_template->total_activity_count - 1 ) / ( $activities_template->pag_num * $activities_template->pag_page ) );
     819                $has_more_items  = (int) $remaining_pages ? true : false;
    785820        }
    786821
    787         $has_more_items  = (int) $remaining_pages ? true : false;
    788 
    789822        return apply_filters( 'bp_activity_has_more_items', $has_more_items );
    790823}
    791824
  • src/bp-templates/bp-legacy/buddypress/activity/activity-loop.php

    diff --git src/bp-templates/bp-legacy/buddypress/activity/activity-loop.php src/bp-templates/bp-legacy/buddypress/activity/activity-loop.php
    index 6134ff6..bc675ae 100644
     
    22
    33<?php if ( bp_has_activities( bp_ajax_querystring( 'activity' ) ) ) : ?>
    44
    5         <?php /* Show pagination if JS is not enabled, since the "Load More" link will do nothing */ ?>
    6         <noscript>
    7                 <div class="pagination">
    8                         <div class="pag-count"><?php bp_activity_pagination_count(); ?></div>
    9                         <div class="pagination-links"><?php bp_activity_pagination_links(); ?></div>
    10                 </div>
    11         </noscript>
    12 
    135        <?php if ( empty( $_POST['page'] ) ) : ?>
    146
    157                <ul id="activity-stream" class="activity-list item-list">
     
    2517        <?php if ( bp_activity_has_more_items() ) : ?>
    2618
    2719                <li class="load-more">
    28                         <a href="#more"><?php _e( 'Load More', 'buddypress' ); ?></a>
     20                        <a href="<?php bp_activity_load_more_link() ?>"><?php _e( 'Load More', 'buddypress' ); ?></a>
    2921                </li>
    3022
    3123        <?php endif; ?>
     
    5446
    5547        </form>
    5648
    57 <?php endif; ?>
    58  No newline at end of file
     49<?php endif; ?>