Skip to:
Content

Ticket #5008: 5008.patch

File 5008.patch, 18.9 KB (added by williamsba1, 5 years ago)
  • bp-friends/bp-friends-loader.php

     
    3939                        'template',
    4040                        'functions',
    4141                        'notifications',
     42                        'widgets'
    4243                );
    4344
    4445                parent::includes( $includes );
  • bp-friends/bp-friends-widgets.php

     
     1<?php
     2/**
     3 * BuddyPress Widgets
     4 *
     5 * @package BuddyPress
     6 * @subpackage Friends
     7 * @since 1.9.0
     8 */
     9
     10// Exit if accessed directly
     11if ( ! defined( 'ABSPATH' ) ) exit;
     12
     13/* Register widgets for the core component */
     14function bp_friends_register_widgets() {
     15       
     16        if( bp_is_active( 'friends' ) )
     17                add_action( 'widgets_init', create_function( '', 'return register_widget("BP_Core_Friends_Widget");' ) );
     18}
     19
     20add_action( 'bp_register_widgets', 'bp_friends_register_widgets' );
     21
     22/*** MEMBER FRIENDS WIDGET *****************/
     23
     24class BP_Core_Friends_Widget extends WP_Widget {
     25
     26        function __construct() {
     27                $widget_ops = array(
     28                        'description' => __( 'A dynamic list of recently active, popular, and newest Friends of the displayed member.  Widget is only shown when viewing a member profile.', 'buddypress' ),
     29                        'classname' => 'widget_bp_core_friends_widget buddypress widget',
     30                );
     31                parent::__construct( false, $name = _x( '(BuddyPress) Friends', 'widget name', 'buddypress' ), $widget_ops );
     32
     33        }
     34
     35        function widget( $args, $instance ) {
     36
     37               
     38                global $bp;
     39                extract( $args );
     40
     41                if ( bp_displayed_user_domain() ) {
     42                       
     43                        $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
     44                        wp_enqueue_script( 'bp_core_widget_friends-js', BP_PLUGIN_URL . "bp-friends/js/widget-friends{$min}.js", array( 'jquery' ), bp_get_version() );
     45
     46                        $user_id = bp_displayed_user_id();
     47                        $link = bp_displayed_user_domain() .bp_get_friends_slug();
     48                        $instance['title'] = sprintf( __( '%s friends', 'buddypress' ), bp_get_displayed_user_fullname() );
     49                       
     50                } else {
     51                        return;
     52                }
     53
     54                if ( ! $instance['friend_default'] )
     55                        $instance['friend_default'] = 'active';
     56
     57                $title = apply_filters( 'widget_title', $instance['title'] );
     58
     59                echo $before_widget;
     60
     61                $title = $instance['link_title'] ? '<a href="' . esc_url( $link ) . '">' . esc_html( $title ) . '</a>' : esc_html( $title );
     62
     63                echo $before_title . $title .$after_title;
     64                ?>
     65
     66                <?php if ( bp_has_members( 'user_id=' . absint( $user_id ) . '&type=' . sanitize_text_field( $instance['friend_default'] ) . '&max=' . absint( $instance['max_friends'] ) . '&populate_extras=1' ) ) : ?>
     67                        <div class="item-options" id="friends-list-options">
     68                                <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>
     69                                | <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>
     70                                | <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>
     71                        </div>
     72
     73                        <ul id="friends-list" class="item-list">
     74                                <?php while ( bp_members() ) : bp_the_member(); ?>
     75                                        <li class="vcard">
     76                                                <div class="item-avatar">
     77                                                        <a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_avatar() ?></a>
     78                                                </div>
     79
     80                                                <div class="item">
     81                                                        <div class="item-title fn"><a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_name() ?></a></div>
     82                                                        <div class="item-meta">
     83                                                                <span class="activity">
     84                                                                <?php
     85                                                                        if ( 'newest' == $instance['friend_default'] )
     86                                                                                bp_member_registered();
     87                                                                        if ( 'active' == $instance['friend_default'] )
     88                                                                                bp_member_last_active();
     89                                                                        if ( 'popular' == $instance['friend_default'] )
     90                                                                                bp_member_total_friend_count();
     91                                                                ?>
     92                                                                </span>
     93                                                        </div>
     94                                                </div>
     95                                        </li>
     96
     97                                <?php endwhile; ?>
     98                        </ul>
     99                        <?php wp_nonce_field( 'bp_core_widget_friends', '_wpnonce-friends' ); ?>
     100                        <input type="hidden" name="friends_widget_max" id="friends_widget_max" value="<?php echo absint( $instance['max_friends'] ); ?>" />
     101
     102                <?php else: ?>
     103
     104                        <div class="widget-error">
     105                                <?php _e( 'Sorry, no members were found.', 'buddypress' ); ?>
     106                        </div>
     107
     108                <?php endif; ?>
     109
     110                <?php echo $after_widget; ?>
     111        <?php
     112        }
     113
     114        function update( $new_instance, $old_instance ) {
     115                $instance = $old_instance;
     116
     117                $instance['max_friends']    = absint( $new_instance['max_friends'] );
     118                $instance['friend_default'] = sanitize_text_field( $new_instance['friend_default'] );
     119                $instance['link_title']     = (bool)$new_instance['link_title'];
     120
     121                return $instance;
     122        }
     123
     124        function form( $instance ) {
     125                $defaults = array(
     126                        'max_friends'    => 5,
     127                        'friend_default' => 'active',
     128                        'link_title'     => false
     129                );
     130                $instance = wp_parse_args( (array) $instance, $defaults );
     131
     132                $max_friends    = $instance['max_friends'];
     133                $friend_default = $instance['friend_default'];
     134                $link_title     = (bool)$instance['link_title'];
     135                ?>
     136
     137                <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>
     138
     139                <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 absint( $max_friends ); ?>" style="width: 30%" /></label></p>
     140
     141                <p>
     142                        <label for="bp-core-widget-friends-default"><?php _e( 'Default friends to show:', 'buddypress' ); ?>
     143                        <select name="<?php echo $this->get_field_name( 'friend_default' ) ?>">
     144                                <option value="newest" <?php selected( $friend_default, 'newest' ); ?>><?php _e( 'Newest', 'buddypress' ) ?></option>
     145                                <option value="active" <?php selected( $friend_default, 'active' );?>><?php _e( 'Active', 'buddypress' ) ?></option>
     146                                <option value="popular"  <?php selected( $friend_default, 'popular' ); ?>><?php _e( 'Popular', 'buddypress' ) ?></option>
     147                        </select>
     148                        </label>
     149                </p>
     150
     151        <?php
     152        }
     153}
     154
     155/** Widget AJAX ******************/
     156
     157function bp_core_ajax_widget_friends() {
     158
     159        global $bp;
     160        check_ajax_referer( 'bp_core_widget_friends' );
     161
     162        switch ( $_POST['filter'] ) {
     163                case 'newest-friends':
     164                        $type = 'newest';
     165                        break;
     166
     167                case 'recently-active-friends':
     168                        $type = 'active';
     169                        break;
     170
     171                case 'popular-friends':
     172                        $type = 'popular';
     173                        break;
     174        }
     175
     176
     177        $user_id = bp_displayed_user_id();
     178
     179        if ( bp_has_members( 'user_id=' . absint( $user_id ) . '&type=' . $type . '&per_page=' . absint( $_POST['max-friends'] ) . '&max=' . absint( $_POST['max-friends'] ) . '&populate_extras=1' ) ) : ?>
     180                <?php echo '0[[SPLIT]]'; // return valid result. TODO: remove this. ?>
     181                <?php while ( bp_members() ) : bp_the_member(); ?>
     182                        <li class="vcard">
     183                                <div class="item-avatar">
     184                                        <a href="<?php bp_member_permalink() ?>"><?php bp_member_avatar() ?></a>
     185                                </div>
     186
     187                                <div class="item">
     188                                        <div class="item-title fn"><a href="<?php bp_member_permalink() ?>" title="<?php bp_member_name() ?>"><?php bp_member_name() ?></a></div>
     189                                        <?php if ( 'active' == $type ) : ?>
     190                                                <div class="item-meta"><span class="activity"><?php bp_member_last_active() ?></span></div>
     191                                        <?php elseif ( 'newest' == $type ) : ?>
     192                                                <div class="item-meta"><span class="activity"><?php bp_member_registered() ?></span></div>
     193                                        <?php elseif ( bp_is_active( 'friends' ) ) : ?>
     194                                                <div class="item-meta"><span class="activity"><?php bp_member_total_friend_count() ?></span></div>
     195                                        <?php endif; ?>
     196                                </div>
     197                        </li>
     198                <?php endwhile; ?>
     199
     200        <?php else: ?>
     201                <?php echo "-1[[SPLIT]]<li>"; ?>
     202                <?php _e( 'There were no members found, please try another filter.', 'buddypress' ) ?>
     203                <?php echo "</li>"; ?>
     204        <?php endif;
     205}
     206
     207add_action( 'wp_ajax_widget_friends', 'bp_core_ajax_widget_friends' );
     208add_action( 'wp_ajax_nopriv_widget_friends', 'bp_core_ajax_widget_friends' );
     209
  • bp-friends/js/widget-friends.js

     
     1jQuery(document).ready( function() {
     2        jQuery(".widget div#friends-list-options a").on('click',
     3                function() {
     4                        var link = this;
     5                        jQuery(link).addClass('loading');
     6
     7                        jQuery(".widget div#friends-list-options a").removeClass("selected");
     8                        jQuery(this).addClass('selected');
     9
     10                        jQuery.post( ajaxurl, {
     11                                action: 'widget_friends',
     12                                'cookie': encodeURIComponent(document.cookie),
     13                                '_wpnonce': jQuery("input#_wpnonce-friends").val(),
     14                                'max-friends': jQuery("input#friends_widget_max").val(),
     15                                'filter': jQuery(this).attr('id')
     16                        },
     17                        function(response)
     18                        {
     19                                jQuery(link).removeClass('loading');
     20                                friend_wiget_response(response);
     21                        });
     22
     23                        return false;
     24                }
     25        );
     26});
     27
     28function friend_wiget_response(response) {
     29        response = response.substr(0, response.length-1);
     30        response = response.split('[[SPLIT]]');
     31
     32        if ( response[0] != "-1" ) {
     33                jQuery(".widget ul#friends-list").fadeOut(200,
     34                        function() {
     35                                jQuery(".widget ul#friends-list").html(response[1]);
     36                                jQuery(".widget ul#friends-list").fadeIn(200);
     37                        }
     38                );
     39
     40        } else {
     41                jQuery(".widget ul#friends-list").fadeOut(200,
     42                        function() {
     43                                var message = '<p>' + response[1] + '</p>';
     44                                jQuery(".widget ul#friends-list").html(message);
     45                                jQuery(".widget ul#friends-list").fadeIn(200);
     46                        }
     47                );
     48        }
     49}
     50 No newline at end of file
  • bp-groups/bp-groups-widgets.php

     
    1313/* Register widgets for groups component */
    1414function groups_register_widgets() {
    1515        add_action('widgets_init', create_function('', 'return register_widget("BP_Groups_Widget");') );
     16        add_action('widgets_init', create_function('', 'return register_widget("BP_Member_Groups_Widget");') );
    1617}
    1718add_action( 'bp_register_widgets', 'groups_register_widgets' );
    1819
     
    208209}
    209210add_action( 'wp_ajax_widget_groups_list',        'groups_ajax_widget_groups_list' );
    210211add_action( 'wp_ajax_nopriv_widget_groups_list', 'groups_ajax_widget_groups_list' );
     212
     213class BP_Member_Groups_Widget extends WP_Widget {
     214
     215        function __construct() {
     216                $widget_ops = array(
     217                        'description' => __( 'A dynamic list of recently active, popular, and newest groups of a loggedin/displayed member', 'buddypress' ),
     218                        'classname' => 'widget_bp_member_groups_widget buddypress widget',
     219                );
     220                parent::__construct( false, _x( '(BuddyPress) My Groups', 'widget name', 'buddypress' ), $widget_ops );
     221
     222                if ( is_active_widget( false, false, $this->id_base ) && !is_admin() && !is_network_admin() ) {
     223                        $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
     224                        wp_enqueue_script( 'groups_widget_member_groups_list-js', BP_PLUGIN_URL . "bp-groups/js/widget-member-groups{$min}.js", array( 'jquery' ), bp_get_version() );
     225                }
     226        }
     227
     228        function widget( $args, $instance ) {
     229
     230                global $bp;
     231                extract( $args );
     232
     233                if ( bp_displayed_user_domain() ) {
     234                        $user_id = $bp->displayed_user->id;
     235                        $link = str_replace( bp_displayed_user_domain(), bp_displayed_user_domain(), bp_get_groups_slug() );
     236                        $instance['title'] = sprintf( __( '%s Groups', 'buddypress' ), bp_get_displayed_user_fullname() );
     237
     238                } elseif ( bp_loggedin_user_domain() ) {
     239                        $user_id = $bp->loggedin_user->id;
     240                        $link = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() );
     241                        $instance['title'] = __( 'My Groups', 'buddypress' );
     242
     243                } else {
     244                        return;
     245                }
     246
     247                if ( empty( $instance['member_group_default'] ) )
     248                        $instance['member_group_default'] = 'popular';
     249
     250                $title = apply_filters( 'widget_title', $instance['title'] );
     251
     252                echo $before_widget;
     253
     254                $title = !empty( $instance['link_title'] ) ? '<a href="' . $link . '">' . $title . '</a>' : $title;
     255
     256                echo $before_title . $title . $after_title; ?>
     257
     258                <?php if ( bp_has_groups( 'user_id=' . $user_id . '&type=' . $instance['member_group_default'] . '&max=' . $instance['max_member_groups'] ) ) : ?>
     259                        <div class="item-options" id="member-groups-list-options">
     260                                <a href="<?php bp_groups_directory_permalink(); ?>" id="newest-groups"<?php if ( $instance['member_group_default'] == 'newest' ) : ?> class="selected"<?php endif; ?>><?php _e("Newest", 'buddypress') ?></a> |
     261                                <a href="<?php bp_groups_directory_permalink(); ?>" id="recently-active-groups"<?php if ( $instance['member_group_default'] == 'active' ) : ?> class="selected"<?php endif; ?>><?php _e("Active", 'buddypress') ?></a> |
     262                                <a href="<?php bp_groups_directory_permalink(); ?>" id="popular-groups" <?php if ( $instance['member_group_default'] == 'popular' ) : ?> class="selected"<?php endif; ?>><?php _e("Popular", 'buddypress') ?></a>
     263                        </div>
     264
     265                        <ul id="member-groups-list" class="item-list">
     266                                <?php while ( bp_groups() ) : bp_the_group(); ?>
     267                                        <li>
     268                                                <div class="item-avatar">
     269                                                        <a href="<?php bp_group_permalink() ?>" title="<?php bp_group_name() ?>"><?php bp_group_avatar_thumb() ?></a>
     270                                                </div>
     271
     272                                                <div class="item">
     273                                                        <div class="item-title"><a href="<?php bp_group_permalink() ?>" title="<?php bp_group_name() ?>"><?php bp_group_name() ?></a></div>
     274                                                        <div class="item-meta">
     275                                                                <span class="activity">
     276                                                                <?php
     277                                                                        if ( 'newest' == $instance['member_group_default'] )
     278                                                                                printf( __( 'created %s', 'buddypress' ), bp_get_group_date_created() );
     279                                                                        if ( 'active' == $instance['member_group_default'] )
     280                                                                                printf( __( 'active %s', 'buddypress' ), bp_get_group_last_active() );
     281                                                                        else if ( 'popular' == $instance['member_group_default'] )
     282                                                                                bp_group_member_count();
     283                                                                ?>
     284                                                                </span>
     285                                                        </div>
     286                                                </div>
     287                                        </li>
     288
     289                                <?php endwhile; ?>
     290                        </ul>
     291                        <?php wp_nonce_field( 'groups_widget_member_groups_list', '_wpnonce-member-groups' ); ?>
     292                        <input type="hidden" name="member_groups_widget_max" id="member_groups_widget_max" value="<?php echo esc_attr( $instance['max_member_groups'] ); ?>" />
     293
     294                <?php else: ?>
     295
     296                        <div class="widget-error">
     297                                <?php _e('There are no groups to display.', 'buddypress') ?>
     298                        </div>
     299
     300                <?php endif; ?>
     301
     302                <?php echo $after_widget; ?>
     303        <?php
     304        }
     305
     306        function update( $new_instance, $old_instance ) {
     307                $instance = $old_instance;
     308
     309                $instance['max_member_groups']    = strip_tags( $new_instance['max_member_groups'] );
     310                $instance['member_group_default'] = strip_tags( $new_instance['member_group_default'] );
     311                $instance['link_title']    = (bool)$new_instance['link_title'];
     312
     313                return $instance;
     314        }
     315
     316        function form( $instance ) {
     317                $defaults = array(
     318                        'max_member_groups'    => 5,
     319                        'member_group_default' => 'active',
     320                        'link_title'    => false
     321                );
     322                $instance = wp_parse_args( (array) $instance, $defaults );
     323       
     324                $max_member_groups    = strip_tags( $instance['max_member_groups'] );
     325                $member_group_default = strip_tags( $instance['member_group_default'] );
     326                $link_title    = (bool)$instance['link_title'];
     327                ?>
     328
     329                <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 Groups directory', 'buddypress' ) ?></label></p>
     330
     331                <p><label for="bp-groups-widget-member-groups-max"><?php _e('Max groups to show:', 'buddypress'); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'max_member_groups' ); ?>" name="<?php echo $this->get_field_name( 'max_member_groups' ); ?>" type="text" value="<?php echo esc_attr( $max_member_groups ); ?>" style="width: 30%" /></label></p>
     332
     333                <p>
     334                        <label for="bp-groups-widget-member-groups-default"><?php _e('Default groups to show:', 'buddypress'); ?>
     335                        <select name="<?php echo $this->get_field_name( 'member_group_default' ); ?>">
     336                                <option value="newest" <?php if ( $member_group_default == 'newest' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Newest', 'buddypress' ) ?></option>
     337                                <option value="active" <?php if ( $member_group_default == 'active' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Active', 'buddypress' ) ?></option>
     338                                <option value="popular"  <?php if ( $member_group_default == 'popular' ) : ?>selected="selected"<?php endif; ?>><?php _e( 'Popular', 'buddypress' ) ?></option>
     339                        </select>
     340                        </label>
     341                </p>
     342        <?php
     343        }
     344}
     345
     346function groups_ajax_widget_member_groups_list() {
     347
     348        check_ajax_referer('groups_widget_member_groups_list');
     349
     350        switch ( $_POST['filter'] ) {
     351                case 'newest-groups':
     352                        $type = 'newest';
     353                break;
     354                case 'recently-active-groups':
     355                        $type = 'active';
     356                break;
     357                case 'popular-groups':
     358                        $type = 'popular';
     359                break;
     360        }
     361
     362        if ( bp_has_groups( 'type=' . $type . '&per_page=' . $_POST['max_member_groups'] . '&max=' . $_POST['max_member_groups'] ) ) : ?>
     363                <?php echo "0[[SPLIT]]"; ?>
     364                <?php while ( bp_groups() ) : bp_the_group(); ?>
     365                        <li>
     366                                <div class="item-avatar">
     367                                        <a href="<?php bp_group_permalink() ?>"><?php bp_group_avatar_thumb() ?></a>
     368                                </div>
     369
     370                                <div class="item">
     371                                        <div class="item-title"><a href="<?php bp_group_permalink() ?>" title="<?php bp_group_name() ?>"><?php bp_group_name() ?></a></div>
     372                                        <div class="item-meta">
     373                                                <span class="activity">
     374                                                        <?php
     375                                                        if ( 'newest-groups' == $_POST['filter'] ) {
     376                                                                printf( __( 'created %s', 'buddypress' ), bp_get_group_date_created() );
     377                                                        } else if ( 'recently-active-groups' == $_POST['filter'] ) {
     378                                                                printf( __( 'active %s', 'buddypress' ), bp_get_group_last_active() );
     379                                                        } else if ( 'popular-groups' == $_POST['filter'] ) {
     380                                                                bp_group_member_count();
     381                                                        }
     382                                                        ?>
     383                                                </span>
     384                                        </div>
     385                                </div>
     386                        </li>
     387                <?php endwhile; ?>
     388
     389                <?php wp_nonce_field( 'groups_widget_member_groups_list', '_wpnonce-member-groups' ); ?>
     390                <input type="hidden" name="member_groups_widget_max" id="member_groups_widget_max" value="<?php echo esc_attr( $_POST['max_member_groups'] ); ?>" />
     391
     392        <?php else: ?>
     393
     394                <?php echo "-1[[SPLIT]]<li>" . __("No groups matched the current filter.", 'buddypress'); ?>
     395
     396        <?php endif;
     397
     398}
     399add_action( 'wp_ajax_widget_member_groups_list',        'groups_ajax_widget_member_groups_list' );
     400add_action( 'wp_ajax_nopriv_widget_member_groups_list', 'groups_ajax_widget_member_groups_list' );
     401 No newline at end of file