Skip to:
Content

BuddyPress.org

Ticket #5629: 5629.03.patch

File 5629.03.patch, 9.4 KB (added by r-a-y, 5 years ago)
  • src/bp-activity/bp-activity-admin.php

     
    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 );
     
    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

     
    267267         *     @type string $spam Spam status. Default: 'ham_only'.
    268268         *     @type bool $update_meta_cache Whether to pre-fetch metadata for
    269269         *           queried activity items. Default: true.
     270         *     @type bool $count_total If true, an additional DB query is run to
     271         *           count the total activity items for the query. Default: false.
    270272         * }
    271273         * @return array The array returned has two keys:
    272274         *     - 'total' is the count of located activities
     
    311313                        'show_hidden'       => false,      // Show items marked hide_sitewide
    312314                        'spam'              => 'ham_only', // Spam status
    313315                        'update_meta_cache' => true,
     316                        'count_total'       => false,
    314317                );
    315318                $r = wp_parse_args( $args, $defaults );
    316319                extract( $r );
     
    411414                $page     = absint( $page     );
    412415                $per_page = absint( $per_page );
    413416
     417                $retval = array(
     418                        'activities'     => null,
     419                        'total'          => null,
     420                        'has_more_items' => null,
     421                );
     422
    414423                // Filter and return true to use the legacy query structure (not recommended)
    415424                if ( apply_filters( 'bp_use_legacy_activity_query', false, __METHOD__, $r ) ) {
    416425
     
    431440                        $activity_ids_sql = "{$select_sql} {$from_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort}";
    432441
    433442                        if ( ! empty( $per_page ) && ! empty( $page ) ) {
    434                                 $activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page );
     443                                $activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page + 1 );
    435444                        }
    436445
    437446                        $activity_ids_sql = apply_filters( 'bp_activity_paged_activities_sql', $activity_ids_sql, $r );
    438447
    439448                        $activity_ids = $wpdb->get_col( $activity_ids_sql );
    440                         $activities   = self::get_activity_data( $activity_ids );
    441                 }
    442449
    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 );
     450                        $retval['has_more_items'] = ! empty( $per_page ) && count( $activity_ids ) > $per_page;
     451
     452                        // We don't need the last activity id anymore, so we
     453                        // trim it
     454                        array_pop( $activity_ids );
     455
     456                        $activities = self::get_activity_data( $activity_ids );
     457                }
    445458
    446459                // Get the fullnames of users so we don't have to query in the loop
    447460                $activities = self::append_user_fullnames( $activities );
     
    465478                // Generate action strings
    466479                $activities = BP_Activity_Activity::generate_action_strings( $activities );
    467480
     481                $retval['activities'] = $activities;
     482
    468483                // 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;
     484                if ( false !== $r['count_total'] ) {
     485
     486                        $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 );
     487                        $total_activities     = $wpdb->get_var( $total_activities_sql );
     488
     489                        if ( !empty( $max ) ) {
     490                                if ( (int) $total_activities > (int) $max )
     491                                        $total_activities = $max;
     492                        }
     493
     494                        $retval['total'] = $total_activities;
    472495                }
    473496
    474                 return array( 'activities' => $activities, 'total' => (int) $total_activities );
     497                return $retval;
    475498        }
    476499
    477500        /**
  • src/bp-activity/bp-activity-functions.php

     
    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:
     
    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' );
     
    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

     
    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;
     
    178186                $r = wp_parse_args( $args, $defaults );
    179187                extract( $r );
    180188
    181                 $this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $page;
     189                $this->pag_arg  = $r['page_arg'];
     190                $this->pag_page = isset( $_REQUEST[ $this->pag_arg ] ) ? intval( $_REQUEST[ $this->pag_arg ] ) : $page;
    182191                $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
    183192
    184193                // Check if blog/forum replies are disabled
     
    220229                        ) );
    221230                }
    222231
    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;
     232                if ( ! is_null( $this->activities['total'] ) ) {
     233                        if ( !$max || $max >= (int) $this->activities['total'] )
     234                                $this->total_activity_count = (int) $this->activities['total'];
     235                        else
     236                                $this->total_activity_count = (int) $max;
     237                }
     238
     239                $this->has_more_items = $this->activities['has_more_items'];
    227240
    228241                $this->activities = $this->activities['activities'];
    229242
     
    268281                                'mid_size'  => 1
    269282                        ) );
    270283                }
    271         }
     284 }
    272285
    273286        /**
    274287         * Whether there are activity items available in the loop.
     
    706719}
    707720
    708721/**
     722 * Output the URL for the Load More link.
     723 *
     724 * @since BuddyPress (2.1.0)
     725 */
     726function bp_activity_load_more_link() {
     727        echo bp_get_activity_load_more_link();
     728}
     729        function bp_get_activity_load_more_link() {
     730                global $activities_template;
     731
     732                $link = bp_get_requested_url();
     733                $link = add_query_arg( $activities_template->pag_arg, $activities_template->pag_page + 1, $link );
     734
     735                return apply_filters( 'bp_get_activity_load_more_link', $link );
     736        }
     737
     738/**
    709739 * Output the activity pagination count.
    710740 *
    711741 * @since BuddyPress (1.0)
     
    778808function bp_activity_has_more_items() {
    779809        global $activities_template;
    780810
    781         $remaining_pages = 0;
     811        if ( ! empty( $activities_template->has_more_items )  ) {
     812                $has_more_items = true;
     813        } else {
     814                $remaining_pages = 0;
     815
     816                if ( ! empty( $activities_template->pag_page ) ) {
     817                        $remaining_pages = floor( ( $activities_template->total_activity_count - 1 ) / ( $activities_template->pag_num * $activities_template->pag_page ) );
     818                }
    782819
    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 ) );
     820                $has_more_items  = (int) $remaining_pages ? true : false;
    785821        }
    786822
    787         $has_more_items  = (int) $remaining_pages ? true : false;
    788 
    789823        return apply_filters( 'bp_activity_has_more_items', $has_more_items );
    790824}
    791825
  • src/bp-templates/bp-legacy/buddypress/activity/activity-loop.php

     
    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; ?>