Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
01/11/2019 02:37:16 AM (6 years ago)
Author:
boonebgorges
Message:

Widgets: Place an upper bound on item counts in widget forms.

This prevents widgets from triggering performance problems when initialized
with unreasonably high max item counts.

Use the bp_get_widget_max_count_limit filter to increase the default
ceiling of 50.

Fixes #8036.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-members/classes/class-bp-core-members-widget.php

    r12323 r12324  
    9191        echo $args['before_widget'] . $args['before_title'] . $title . $args['after_title'];
    9292
     93        $max_limit   = bp_get_widget_max_count_limit( __CLASS__ );
     94        $max_members = $settings['max_members'] > $max_limit ? $max_limit : (int) $settings['max_members'];
     95
    9396        // Setup args for querying members.
    9497        $members_args = array(
    9598            'user_id'         => 0,
    9699            'type'            => $settings['member_default'],
    97             'per_page'        => $settings['max_members'],
    98             'max'             => $settings['max_members'],
     100            'per_page'        => $max_members,
     101            'max'             => $max_members,
    99102            'populate_extras' => true,
    100103            'search_terms'    => false,
     
    178181        $instance = $old_instance;
    179182
     183        $max_limit = bp_get_widget_max_count_limit( __CLASS__ );
     184
    180185        $instance['title']          = strip_tags( $new_instance['title'] );
    181         $instance['max_members']    = strip_tags( $new_instance['max_members'] );
     186        $instance['max_members']    = $new_instance['max_members'] > $max_limit ? $max_limit : intval( $new_instance['max_members'] );
    182187        $instance['member_default'] = strip_tags( $new_instance['member_default'] );
    183188        $instance['link_title']     = ! empty( $new_instance['link_title'] );
     
    195200     */
    196201    public function form( $instance ) {
     202        $max_limit = bp_get_widget_max_count_limit( __CLASS__ );
    197203
    198204        // Get widget settings.
    199205        $settings       = $this->parse_settings( $instance );
    200206        $title          = strip_tags( $settings['title'] );
    201         $max_members    = strip_tags( $settings['max_members'] );
     207        $max_members    = $settings['max_members'] > $max_limit ? $max_limit : intval( $settings['max_members'] );
    202208        $member_default = strip_tags( $settings['member_default'] );
    203209        $link_title     = (bool) $settings['link_title']; ?>
     
    220226            <label for="<?php echo $this->get_field_id( 'max_members' ); ?>">
    221227                <?php esc_html_e( 'Max members to show:', 'buddypress' ); ?>
    222                 <input class="widefat" id="<?php echo $this->get_field_id( 'max_members' ); ?>" name="<?php echo $this->get_field_name( 'max_members' ); ?>" type="text" value="<?php echo esc_attr( $max_members ); ?>" style="width: 30%" />
     228                <input class="widefat" id="<?php echo $this->get_field_id( 'max_members' ); ?>" name="<?php echo $this->get_field_name( 'max_members' ); ?>" type="number" min="1" max="<?php echo esc_attr( $max_limit ); ?>" value="<?php echo esc_attr( $max_members ); ?>" style="width: 30%" />
    223229            </label>
    224230        </p>
Note: See TracChangeset for help on using the changeset viewer.