Skip to:
Content

BuddyPress.org

Changeset 9724


Ignore:
Timestamp:
04/09/2015 07:04:18 PM (11 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.