Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
01/11/2019 02:37:16 AM (8 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.