| 149 | /*** MEMBER FRIENDS WIDGET *****************/ |
| 150 | |
| 151 | class BP_Core_Friends_Widget extends WP_Widget { |
| 152 | |
| 153 | function __construct() { |
| 154 | $widget_ops = array( |
| 155 | 'description' => __( 'A dynamic list of recently active, popular, and newest Friends of loggedin/displayed member', 'buddypress' ), |
| 156 | 'classname' => 'widget_bp_core_friends_widget buddypress widget', |
| 157 | ); |
| 158 | parent::__construct( false, $name = _x( '(BuddyPress) Friends', 'widget name', 'buddypress' ), $widget_ops ); |
| 159 | |
| 160 | if ( is_active_widget( false, false, $this->id_base ) && !is_admin() && !is_network_admin() ) { |
| 161 | $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; |
| 162 | wp_enqueue_script( 'bp_core_widget_friends-js', BP_PLUGIN_URL . "bp-core/js/widget-friends{$min}.js", array( 'jquery' ), bp_get_version() ); |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | function widget( $args, $instance ) { |
| 167 | |
| 168 | global $bp; |
| 169 | extract( $args ); |
| 170 | |
| 171 | if ( bp_displayed_user_domain() ) { |
| 172 | $user_id = $bp->displayed_user->id; |
| 173 | $link = str_replace( bp_displayed_user_domain(), bp_displayed_user_domain(), bp_get_friends_slug() ); |
| 174 | $instance['title'] = sprintf( __( '%s friends', 'buddypress' ), bp_get_displayed_user_fullname() ); |
| 175 | |
| 176 | } elseif ( bp_loggedin_user_domain() ) { |
| 177 | $user_id = $bp->loggedin_user->id; |
| 178 | $link = trailingslashit( bp_loggedin_user_domain() . bp_get_friends_slug() ); |
| 179 | $instance['title'] = __( 'My friends', 'buddypress' ); |
| 180 | |
| 181 | } else { |
| 182 | return; |
| 183 | } |
| 184 | |
| 185 | if ( !$instance['friend_default'] ) |
| 186 | $instance['friend_default'] = 'active'; |
| 187 | |
| 188 | $title = apply_filters( 'widget_title', $instance['title'] ); |
| 189 | |
| 190 | echo $before_widget; |
| 191 | |
| 192 | $title = $instance['link_title'] ? '<a href="' . $link . '">' . $title . '</a>' : $title; |
| 193 | |
| 194 | echo $before_title |
| 195 | . $title |
| 196 | . $after_title; ?> |
| 197 | |
| 198 | <?php if ( bp_has_members( 'user_id=' . $user_id . '&type=' . $instance['friend_default'] . '&max=' . $instance['max_friends'] . '&populate_extras=1' ) ) : ?> |
| 199 | <div class="item-options" id="friends-list-options"> |
| 200 | <a href="<?php bp_members_directory_permalink(); ?>" id="newest-friends" <?php if ( $instance['friend_default'] == 'newest' ) : ?>class="selected"<?php endif; ?>><?php _e( 'Newest', 'buddypress' ) ?></a> |
| 201 | | <a href="<?php bp_members_directory_permalink(); ?>" id="recently-active-friends" <?php if ( $instance['friend_default'] == 'active' ) : ?>class="selected"<?php endif; ?>><?php _e( 'Active', 'buddypress' ) ?></a> |
| 202 | | <a href="<?php bp_members_directory_permalink(); ?>" id="popular-friends" <?php if ( $instance['friend_default'] == 'popular' ) : ?>class="selected"<?php endif; ?>><?php _e( 'Popular', 'buddypress' ) ?></a> |
| 203 | </div> |
| 204 | |
| 205 | <ul id="friends-list" class="item-list"> |
| 206 | <?php while ( bp_members() ) : bp_the_member(); ?> |
| 207 | <li class="vcard"> |
| 208 | <div class="item-avatar"> |
| 209 | <a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_avatar() ?></a> |
| 210 | </div> |
| 211 | |
| 212 | <div class="item"> |
| 213 | <div class="item-title fn"><a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_name() ?></a></div> |
| 214 | <div class="item-meta"> |
| 215 | <span class="activity"> |
| 216 | <?php |
| 217 | if ( 'newest' == $instance['friend_default'] ) |
| 218 | bp_member_registered(); |
| 219 | if ( 'active' == $instance['friend_default'] ) |
| 220 | bp_member_last_active(); |
| 221 | if ( 'popular' == $instance['friend_default'] ) |
| 222 | bp_member_total_friend_count(); |
| 223 | ?> |
| 224 | </span> |
| 225 | </div> |
| 226 | </div> |
| 227 | </li> |
| 228 | |
| 229 | <?php endwhile; ?> |
| 230 | </ul> |
| 231 | <?php wp_nonce_field( 'bp_core_widget_friends', '_wpnonce-friends' ); ?> |
| 232 | <input type="hidden" name="friends_widget_max" id="friends_widget_max" value="<?php echo esc_attr( $instance['max_friends'] ); ?>" /> |
| 233 | |
| 234 | <?php else: ?> |
| 235 | |
| 236 | <div class="widget-error"> |
| 237 | <?php _e('Sorry, no members were found.', 'buddypress') ?> |
| 238 | </div> |
| 239 | |
| 240 | <?php endif; ?> |
| 241 | |
| 242 | <?php echo $after_widget; ?> |
| 243 | <?php |
| 244 | } |
| 245 | |
| 246 | function update( $new_instance, $old_instance ) { |
| 247 | $instance = $old_instance; |
| 248 | |
| 249 | $instance['max_friends'] = strip_tags( $new_instance['max_friends'] ); |
| 250 | $instance['friend_default'] = strip_tags( $new_instance['friend_default'] ); |
| 251 | $instance['link_title'] = (bool)$new_instance['link_title']; |
| 252 | |
| 253 | return $instance; |
| 254 | } |
| 255 | |
| 256 | function form( $instance ) { |
| 257 | $defaults = array( |
| 258 | 'max_friends' => 5, |
| 259 | 'friend_default' => 'active', |
| 260 | 'link_title' => false |
| 261 | ); |
| 262 | $instance = wp_parse_args( (array) $instance, $defaults ); |
| 263 | |
| 264 | $max_friends = strip_tags( $instance['max_friends'] ); |
| 265 | $friend_default = strip_tags( $instance['friend_default'] ); |
| 266 | $link_title = (bool)$instance['link_title']; |
| 267 | ?> |
| 268 | |
| 269 | <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> |
| 270 | |
| 271 | <p><label for="bp-core-widget-friends-max"><?php _e('Max friends to show:', 'buddypress'); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'max_friends' ); ?>" name="<?php echo $this->get_field_name( 'max_friends' ); ?>" type="text" value="<?php echo esc_attr( $max_friends ); ?>" style="width: 30%" /></label></p> |
| 272 | |
| 273 | <p> |
| 274 | <label for="bp-core-widget-friends-default"><?php _e('Default friends to show:', 'buddypress'); ?> |
| 275 | <select name="<?php echo $this->get_field_name( 'friend_default' ) ?>"> |
| 276 | <option value="newest" <?php if ( $friend_default == 'newest' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Newest', 'buddypress' ) ?></option> |
| 277 | <option value="active" <?php if ( $friend_default == 'active' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Active', 'buddypress' ) ?></option> |
| 278 | <option value="popular" <?php if ( $friend_default == 'popular' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Popular', 'buddypress' ) ?></option> |
| 279 | </select> |
| 280 | </label> |
| 281 | </p> |
| 282 | |
| 283 | <?php |
| 284 | } |
| 285 | } |
| 286 | |
| 478 | |
| 479 | function bp_core_ajax_widget_friends() { |
| 480 | |
| 481 | global $bp; |
| 482 | check_ajax_referer( 'bp_core_widget_friends' ); |
| 483 | |
| 484 | switch ( $_POST['filter'] ) { |
| 485 | case 'newest-friends': |
| 486 | $type = 'newest'; |
| 487 | break; |
| 488 | |
| 489 | case 'recently-active-friends': |
| 490 | $type = 'active'; |
| 491 | break; |
| 492 | |
| 493 | case 'popular-friends': |
| 494 | $type = 'popular'; |
| 495 | break; |
| 496 | } |
| 497 | |
| 498 | |
| 499 | $user_id = $bp->displayed_user->id; |
| 500 | if( !isset($user_id) || $user_id == 0 ) |
| 501 | $user_id = $bp->loggedin_user->id; |
| 502 | |
| 503 | if ( bp_has_members( 'user_id=' . $user_id . '&type=' . $type . '&per_page=' . $_POST['max-friends'] . '&max=' . $_POST['max-friends'] . '&populate_extras=1' ) ) : ?> |
| 504 | <?php echo '0[[SPLIT]]'; // return valid result. TODO: remove this. ?> |
| 505 | <?php while ( bp_members() ) : bp_the_member(); ?> |
| 506 | <li class="vcard"> |
| 507 | <div class="item-avatar"> |
| 508 | <a href="<?php bp_member_permalink() ?>"><?php bp_member_avatar() ?></a> |
| 509 | </div> |
| 510 | |
| 511 | <div class="item"> |
| 512 | <div class="item-title fn"><a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_name() ?></a></div> |
| 513 | <?php if ( 'active' == $type ) : ?> |
| 514 | <div class="item-meta"><span class="activity"><?php bp_member_last_active() ?></span></div> |
| 515 | <?php elseif ( 'newest' == $type ) : ?> |
| 516 | <div class="item-meta"><span class="activity"><?php bp_member_registered() ?></span></div> |
| 517 | <?php elseif ( bp_is_active( 'friends' ) ) : ?> |
| 518 | <div class="item-meta"><span class="activity"><?php bp_member_total_friend_count() ?></span></div> |
| 519 | <?php endif; ?> |
| 520 | </div> |
| 521 | </li> |
| 522 | <?php endwhile; ?> |
| 523 | |
| 524 | <?php else: ?> |
| 525 | <?php echo "-1[[SPLIT]]<li>"; ?> |
| 526 | <?php _e( 'There were no members found, please try another filter.', 'buddypress' ) ?> |
| 527 | <?php echo "</li>"; ?> |
| 528 | <?php endif; |
| 529 | } |
| 530 | add_action( 'wp_ajax_widget_friends', 'bp_core_ajax_widget_friends' ); |
| 531 | add_action( 'wp_ajax_nopriv_widget_friends', 'bp_core_ajax_widget_friends' ); |
| 532 | |