Skip to:
Content

BuddyPress.org

Changeset 9724


Ignore:
Timestamp:
04/09/2015 07:04:18 PM (10 years ago)
Author:
johnjamesjacoby
Message:

Members: Improvements to BP_Core_Members_Widget

  • Escape gettext output
  • Yoda conditions
  • Do not check nonce referrer to prevent collisions with other referrer nonces
  • Add missing semicolons after PHP execution
  • Introduce parse_settings() method for setting smart default values
  • Remove extract() usages
  • Code formatting improvements

Fixes #6361.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-members/bp-members-widgets.php

    r9709 r9724  
    1717 */
    1818function bp_members_register_widgets() {
    19     add_action('widgets_init', create_function('', 'return register_widget("BP_Core_Members_Widget");') );
    20     add_action('widgets_init', create_function('', 'return register_widget("BP_Core_Whos_Online_Widget");') );
    21     add_action('widgets_init', create_function('', 'return register_widget("BP_Core_Recently_Active_Widget");') );
     19    add_action( 'widgets_init', create_function( '', 'return register_widget("BP_Core_Members_Widget");'         ) );
     20    add_action( 'widgets_init', create_function( '', 'return register_widget("BP_Core_Whos_Online_Widget");'     ) );
     21    add_action( 'widgets_init', create_function( '', 'return register_widget("BP_Core_Recently_Active_Widget");' ) );
    2222}
    2323add_action( 'bp_register_widgets', 'bp_members_register_widgets' );
     
    3131
    3232    /**
    33      * Constructor method.
    34      */
    35     function __construct() {
    36         $widget_ops = array(
    37             'description' => __( 'A dynamic list of recently active, popular, and newest members', 'buddypress' ),
    38             'classname' => 'widget_bp_core_members_widget buddypress widget',
    39         );
    40         parent::__construct( false, $name = _x( '(BuddyPress) Members', 'widget name', 'buddypress' ), $widget_ops );
    41 
    42         if ( is_active_widget( false, false, $this->id_base ) && !is_admin() && !is_network_admin() ) {
     33     * Constructor method
     34     */
     35    public function __construct() {
     36
     37        // Setup widget name & description
     38        $name        = _x( '(BuddyPress) Members', 'widget name', 'buddypress' );
     39        $description = __( 'A dynamic list of recently active, popular, and newest members', 'buddypress' );
     40
     41        // Call WP_Widget constructor
     42        parent::__construct( false, $name, array(
     43            'description' => $description,
     44            'classname'   => 'widget_bp_core_members_widget buddypress widget',
     45        ) );
     46
     47        // Maybe enqueue JS for widget
     48        if ( is_active_widget( false, false, $this->id_base ) && ! is_admin() && ! is_network_admin() ) {
    4349            wp_enqueue_script( 'bp-widget-members' );
    4450        }
     
    5359     * @param array $instance Widget settings, as saved by the user.
    5460     */
    55     function widget( $args, $instance ) {
    56 
    57         extract( $args );
    58 
    59         if ( !$instance['member_default'] )
    60             $instance['member_default'] = 'active';
     61    public function widget( $args, $instance ) {
     62
     63        // Get widget settings
     64        $settings = $this->parse_settings( $instance );
     65
     66        // Output any content before the widget
     67        echo $args['before_widget'];
    6168
    6269        /**
     
    6774         *
    6875         * @param string $title    The widget title.
    69          * @param array  $instance The settings for the particular instance of the widget.
     76         * @param array  $settings The settings for the particular instance of the widget.
    7077         * @param string $id_base  Root ID for all widgets of this type.
    7178         */
    72         $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
    73 
    74         echo $before_widget;
    75 
    76         $title = $instance['link_title'] ? '<a href="' . bp_get_members_directory_permalink() . '">' . $title . '</a>' : $title;
    77 
    78         echo $before_title
     79        $title = apply_filters( 'widget_title', $settings['title'], $settings, $this->id_base );
     80        $title = $settings['link_title'] ? '<a href="' . bp_get_members_directory_permalink() . '">' . $title . '</a>' : $title;
     81
     82        // Output title (and maybe content before & after it)
     83        echo $args['before_title']
    7984           . $title
    80            . $after_title;
    81 
     85           . $args['after_title'];
     86
     87        // Setup args for querying members
    8288        $members_args = array(
    8389            'user_id'         => 0,
    84             'type'            => $instance['member_default'],
    85             'per_page'        => $instance['max_members'],
    86             'max'             => $instance['max_members'],
     90            'type'            => $settings['member_default'],
     91            'per_page'        => $settings['max_members'],
     92            'max'             => $settings['max_members'],
    8793            'populate_extras' => true,
    8894            'search_terms'    => false,
    89         );
    90 
    91         ?>
     95        ); ?>
    9296
    9397        <?php if ( bp_has_members( $members_args ) ) : ?>
     98
    9499            <div class="item-options" id="members-list-options">
    95                 <a href="<?php bp_members_directory_permalink(); ?>" id="newest-members" <?php if ( $instance['member_default'] == 'newest' ) : ?>class="selected"<?php endif; ?>><?php _e( 'Newest', 'buddypress' ) ?></a>
    96                 |  <a href="<?php bp_members_directory_permalink(); ?>" id="recently-active-members" <?php if ( $instance['member_default'] == 'active' ) : ?>class="selected"<?php endif; ?>><?php _e( 'Active', 'buddypress' ) ?></a>
     100                <a href="<?php bp_members_directory_permalink(); ?>" id="newest-members" <?php if ( 'newest' === $settings['member_default'] ) : ?>class="selected"<?php endif; ?>><?php esc_html_e( 'Newest', 'buddypress' ); ?></a>
     101                |  <a href="<?php bp_members_directory_permalink(); ?>" id="recently-active-members" <?php if ( 'active' === $settings['member_default'] ) : ?>class="selected"<?php endif; ?>><?php esc_html_e( 'Active', 'buddypress' ); ?></a>
    97102
    98103                <?php if ( bp_is_active( 'friends' ) ) : ?>
    99104
    100                     | <a href="<?php bp_members_directory_permalink(); ?>" id="popular-members" <?php if ( $instance['member_default'] == 'popular' ) : ?>class="selected"<?php endif; ?>><?php _e( 'Popular', 'buddypress' ) ?></a>
     105                    | <a href="<?php bp_members_directory_permalink(); ?>" id="popular-members" <?php if ( 'popular' === $settings['member_default'] ) : ?>class="selected"<?php endif; ?>><?php esc_html_e( 'Popular', 'buddypress' ); ?></a>
    101106
    102107                <?php endif; ?>
     108
    103109            </div>
    104110
    105111            <ul id="members-list" class="item-list">
     112
    106113                <?php while ( bp_members() ) : bp_the_member(); ?>
     114
    107115                    <li class="vcard">
    108116                        <div class="item-avatar">
    109                             <a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_avatar() ?></a>
     117                            <a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name(); ?>"><?php bp_member_avatar(); ?></a>
    110118                        </div>
    111119
    112120                        <div class="item">
    113                             <div class="item-title fn"><a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_name() ?></a></div>
     121                            <div class="item-title fn"><a href="<?php bp_member_permalink(); ?>" title="<?php bp_member_name(); ?>"><?php bp_member_name(); ?></a></div>
    114122                            <div class="item-meta">
    115                                 <span class="activity">
    116                                 <?php
    117                                     if ( 'newest' == $instance['member_default'] )
     123                                <span class="activity"><?php
     124                                    if ( 'newest' === $settings['member_default'] ) :
    118125                                        bp_member_registered();
    119                                     if ( 'active' == $instance['member_default'] )
     126                                    elseif ( 'active' === $settings['member_default'] ) :
    120127                                        bp_member_last_active();
    121                                     if ( 'popular' == $instance['member_default'] )
     128                                    elseif ( 'popular' === $settings['member_default'] ) :
    122129                                        bp_member_total_friend_count();
    123                                 ?>
    124                                 </span>
     130                                    endif; ?></span>
    125131                            </div>
    126132                        </div>
     
    128134
    129135                <?php endwhile; ?>
     136
    130137            </ul>
    131             <?php wp_nonce_field( 'bp_core_widget_members', '_wpnonce-members' ); ?>
    132             <input type="hidden" name="members_widget_max" id="members_widget_max" value="<?php echo esc_attr( $instance['max_members'] ); ?>" />
     138
     139            <?php wp_nonce_field( 'bp_core_widget_members', '_wpnonce-members', false ); ?>
     140
     141            <input type="hidden" name="members_widget_max" id="members_widget_max" value="<?php echo esc_attr( $settings['max_members'] ); ?>" />
    133142
    134143        <?php else: ?>
    135144
    136145            <div class="widget-error">
    137                 <?php _e('No one has signed up yet!', 'buddypress') ?>
     146                <?php esc_html_e( 'No one has signed up yet!', 'buddypress' ); ?>
    138147            </div>
    139148
    140149        <?php endif; ?>
    141150
    142         <?php echo $after_widget; ?>
    143     <?php
     151        <?php echo $args['after_widget'];
    144152    }
    145153
     
    151159     * @return array $instance The parsed options to be saved.
    152160     */
    153     function update( $new_instance, $old_instance ) {
     161    public function update( $new_instance, $old_instance ) {
    154162        $instance = $old_instance;
    155163
    156         $instance['title']      = strip_tags( $new_instance['title'] );
     164        $instance['title']          = strip_tags( $new_instance['title'] );
    157165        $instance['max_members']    = strip_tags( $new_instance['max_members'] );
    158166        $instance['member_default'] = strip_tags( $new_instance['member_default'] );
    159         $instance['link_title']     = (bool)$new_instance['link_title'];
     167        $instance['link_title']     = (bool) $new_instance['link_title'];
    160168
    161169        return $instance;
     
    167175     * @param $instance Settings for this widget.
    168176     */
    169     function form( $instance ) {
    170         $defaults = array(
    171             'title'      => __( 'Members', 'buddypress' ),
     177    public function form( $instance ) {
     178
     179        // Get widget settings
     180        $settings       = $this->parse_settings( $instance );
     181        $title          = strip_tags( $settings['title'] );
     182        $max_members    = strip_tags( $settings['max_members'] );
     183        $member_default = strip_tags( $settings['member_default'] );
     184        $link_title     = (bool) $settings['link_title']; ?>
     185
     186        <p>
     187            <label for="bp-core-widget-title">
     188                <?php esc_html_e( 'Title:', 'buddypress' ); ?>
     189                <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" style="width: 100%" />
     190            </label>
     191        </p>
     192
     193        <p>
     194            <label for="<?php echo $this->get_field_name( 'link_title' ) ?>">
     195                <input type="checkbox" name="<?php echo $this->get_field_name( 'link_title' ) ?>" value="1" <?php checked( $link_title ) ?> />
     196                <?php esc_html_e( 'Link widget title to Members directory', 'buddypress' ); ?>
     197            </label>
     198        </p>
     199
     200        <p>
     201            <label for="bp-core-widget-members-max">
     202                <?php esc_html_e( 'Max members to show:', 'buddypress' ); ?>
     203                <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%" />
     204            </label>
     205        </p>
     206
     207        <p>
     208            <label for="bp-core-widget-groups-default"><?php esc_html_e( 'Default members to show:', 'buddypress' ); ?>
     209                <select name="<?php echo $this->get_field_name( 'member_default' ) ?>">
     210                    <option value="newest"  <?php if ( 'newest'  === $member_default ) : ?>selected="selected"<?php endif; ?>><?php esc_html_e( 'Newest',  'buddypress' ); ?></option>
     211                    <option value="active"  <?php if ( 'active'  === $member_default ) : ?>selected="selected"<?php endif; ?>><?php esc_html_e( 'Active',  'buddypress' ); ?></option>
     212                    <option value="popular" <?php if ( 'popular' === $member_default ) : ?>selected="selected"<?php endif; ?>><?php esc_html_e( 'Popular', 'buddypress' ); ?></option>
     213                </select>
     214            </label>
     215        </p>
     216
     217    <?php
     218    }
     219
     220    /**
     221     * Merge the widget settings into defaults array.
     222     *
     223     * @since BuddyPress (2.3.0)
     224     *
     225     * @param $instance Instance
     226     * @uses bp_parse_args() To merge widget settings into defaults
     227     */
     228    public function parse_settings( $instance = array() ) {
     229        return bp_parse_args( $instance, array(
     230            'title'          => __( 'Members', 'buddypress' ),
    172231            'max_members'    => 5,
    173232            'member_default' => 'active',
    174233            'link_title'     => false
    175         );
    176         $instance = wp_parse_args( (array) $instance, $defaults );
    177 
    178         $title      = strip_tags( $instance['title'] );
    179         $max_members    = strip_tags( $instance['max_members'] );
    180         $member_default = strip_tags( $instance['member_default'] );
    181         $link_title = (bool)$instance['link_title'];
    182         ?>
    183 
    184         <p><label for="bp-core-widget-title"><?php _e('Title:', 'buddypress'); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" style="width: 100%" /></label></p>
    185 
    186         <p><label for="<?php echo $this->get_field_name('link_title') ?>"><input type="checkbox" name="<?php echo $this->get_field_name('link_title') ?>" value="1" <?php checked( $link_title ) ?> /> <?php _e( 'Link widget title to Members directory', 'buddypress' ) ?></label></p>
    187 
    188         <p><label for="bp-core-widget-members-max"><?php _e('Max members to show:', 'buddypress'); ?> <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%" /></label></p>
    189 
    190         <p>
    191             <label for="bp-core-widget-groups-default"><?php _e('Default members to show:', 'buddypress'); ?>
    192             <select name="<?php echo $this->get_field_name( 'member_default' ) ?>">
    193                 <option value="newest" <?php if ( $member_default == 'newest' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Newest', 'buddypress' ) ?></option>
    194                 <option value="active" <?php if ( $member_default == 'active' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Active', 'buddypress' ) ?></option>
    195                 <option value="popular"  <?php if ( $member_default == 'popular' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Popular', 'buddypress' ) ?></option>
    196             </select>
    197             </label>
    198         </p>
    199 
    200     <?php
     234        ), 'members_widget_settings' );
    201235    }
    202236}
Note: See TracChangeset for help on using the changeset viewer.