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-recently-active-widget.php

    r11564 r12324  
    6464        echo $args['before_title'] . $title . $args['after_title'];
    6565
     66        $max_limit   = bp_get_widget_max_count_limit( __CLASS__ );
     67        $max_members = $settings['max_members'] > $max_limit ? $max_limit : (int) $settings['max_members'];
     68
    6669        // Setup args for querying members.
    6770        $members_args = array(
    6871            'user_id'         => 0,
    6972            'type'            => 'active',
    70             'per_page'        => $settings['max_members'],
    71             'max'             => $settings['max_members'],
     73            'per_page'        => $max_members,
     74            'max'             => $max_members,
    7275            'populate_extras' => true,
    7376            'search_terms'    => false,
     
    117120     */
    118121    public function update( $new_instance, $old_instance ) {
    119         $instance                = $old_instance;
     122        $instance = $old_instance;
     123
     124        $max_limit = bp_get_widget_max_count_limit( __CLASS__ );
     125
    120126        $instance['title']       = strip_tags( $new_instance['title'] );
    121         $instance['max_members'] = strip_tags( $new_instance['max_members'] );
     127        $instance['max_members'] = $new_instance['max_members'] > $max_limit ? $max_limit : intval( $new_instance['max_members'] );
    122128
    123129        return $instance;
     
    133139     */
    134140    public function form( $instance ) {
     141        $max_limit = bp_get_widget_max_count_limit( __CLASS__ );
    135142
    136143        // Get widget settings.
    137144        $settings    = $this->parse_settings( $instance );
    138145        $title       = strip_tags( $settings['title'] );
    139         $max_members = strip_tags( $settings['max_members'] ); ?>
     146        $max_members = $settings['max_members'] > $max_limit ? $max_limit : intval( $settings['max_members'] );
     147        ?>
    140148
    141149        <p>
     
    149157            <label for="<?php echo $this->get_field_id( 'max_members' ); ?>">
    150158                <?php esc_html_e( 'Max members to show:', 'buddypress' ); ?>
    151                 <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%" />
     159                <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%" />
    152160            </label>
    153161        </p>
Note: See TracChangeset for help on using the changeset viewer.