Skip to:
Content

BuddyPress.org

Changeset 13007


Ignore:
Timestamp:
07/14/2021 10:06:43 PM (5 years ago)
Author:
imath
Message:

Merge the BP Blocks plugin's last 2 Members Block

'bp/online-members' and 'bp/active-members' are very similar Widget Blocks. The specific bp_members_render_members_avatars_block() function has been introduced to put in common most of the rendering logic of these two blocks.

  • Adapt Grunt sass tasks.
  • Add the Block JavaScript source files into src/js/bp-blogs/js/blocks.
  • Add the Block Scss source file into src/bp-blogs/sass.
  • Generate the development files to ease testing.

Fixes #8527

Location:
trunk
Files:
14 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Gruntfile.js

    r13006 r13007  
    5151                        '!bp-groups/css/blocks/dynamic-groups.css',
    5252                        '!bp-messages/css/blocks/sitewide-notices.css',
    53                         '!bp-blogs/css/blocks/recent-posts.css'
     53                        '!bp-blogs/css/blocks/recent-posts.css',
     54                        '!bp-members/css/blocks/active-members.css',
     55                        '!bp-members/css/blocks/online-members.css'
    5456                ],
    5557
  • trunk/src/bp-members/bp-members-blocks.php

    r13004 r13007  
    556556        return $widget_content;
    557557}
     558
     559/**
     560 * Common function to render the Recently Active & Online Members Blocks.
     561 *
     562 * @since 9.0.0
     563 *
     564 * @param array $block_args {
     565 *    Optional. An array of Block arguments.
     566 *
     567 *    @type string $title      The title of the Block.
     568 *    @type int    $maxMembers The maximum number of members to show. Defaults to `0`.
     569 *    @type string $noMembers  The string to output when there are no members to show.
     570 *    @type string $classname  The name of the CSS class to use.
     571 *    @type string $type       The type of filter to perform. Possible values are `online`, `active`,
     572 *                             `newest`, `alphabetical`, `random` or `popular`.
     573 * }
     574 * @return string HTML output.
     575 */
     576function bp_members_render_members_avatars_block( $block_args = array() ) {
     577        $args = bp_parse_args(
     578                $block_args,
     579                array(
     580                        'title'      => '',
     581                        'maxMembers' => 0,
     582                        'noMembers'  => '',
     583                        'classname'  => '',
     584                        'type'       => 'active',
     585                ),
     586                ''
     587        );
     588
     589        $title              = $args['title'];
     590        $max_members        = (int) $args['maxMembers'];
     591        $no_members         = $args['noMembers'];
     592        $classname          = sanitize_key( $args['classname'] );
     593        $wrapper_attributes = get_block_wrapper_attributes(
     594                array(
     595                        'class' => sprintf( '%s buddypress widget', $classname ),
     596                )
     597        );
     598        $type               = sanitize_key( $args['type'] );
     599
     600        if ( $title ) {
     601                $widget_content = sprintf( '<h2 class="widget-title">%s</h2>', esc_html( $title ) );
     602        } else {
     603                $widget_content = '';
     604        }
     605
     606        // Query Users.
     607        $query = bp_core_get_users(
     608                array(
     609                        'user_id'         => 0,
     610                        'type'            => $type,
     611                        'per_page'        => $max_members,
     612                        'max'             => $max_members,
     613                        'populate_extras' => true,
     614                        'search_terms'    => false,
     615                )
     616        );
     617
     618        // Build the output for online members.
     619        if ( isset( $query['total'] ) && 1 <= (int) $query['total'] ) {
     620                $members        = $query['users'];
     621                $member_avatars = array();
     622
     623                foreach ( $members as $member ) {
     624                        $member_avatars[] = sprintf(
     625                                '<div class="item-avatar">
     626                                        <a href="%1$s" class="bp-tooltip" data-bp-tooltip="%2$s">
     627                                                <img loading="lazy" src="%3$s" class="avatar user-%4$s-avatar avatar-50 photo" width="50" height="50" alt="%5$s">
     628                                        </a>
     629                                </div>',
     630                                esc_url( bp_core_get_user_domain( $member->ID, $member->user_nicename, $member->user_login ) ),
     631                                esc_html( $member->display_name ),
     632                                bp_core_fetch_avatar(
     633                                        array(
     634                                                'item_id' => $member->ID,
     635                                                'html'    => false,
     636                                        )
     637                                ),
     638                                esc_attr( $member->ID ),
     639                                esc_html(
     640                                        sprintf(
     641                                                /* translators: %s: member name */
     642                                                __( 'Profile picture of %s', 'buddypress' ),
     643                                                $member->display_name
     644                                        )
     645                                )
     646                        );
     647                }
     648
     649                $widget_content .= sprintf(
     650                        '<div class="avatar-block">
     651                                %s
     652                        </div>',
     653                        implode( "\n", $member_avatars )
     654                );
     655        } else {
     656                $widget_content .= sprintf(
     657                        '<div class="widget-error">
     658                                %s
     659                        </div>',
     660                        esc_html( $no_members )
     661                );
     662        }
     663
     664        // Only add a block wrapper if not loaded into a Widgets sidebar.
     665        if ( ! did_action( 'dynamic_sidebar_before' ) ) {
     666                return sprintf(
     667                        '<div %1$s>%2$s</div>',
     668                        $wrapper_attributes,
     669                        $widget_content
     670                );
     671        }
     672
     673        return $widget_content;
     674}
     675
     676/**
     677 * Callback function to render the Online Members Block.
     678 *
     679 * @since 9.0.0
     680 *
     681 * @param array $attributes The block attributes.
     682 * @return string           HTML output.
     683 */
     684function bp_members_render_online_members_block( $attributes = array() ) {
     685        $block_args = bp_parse_args(
     686                $attributes,
     687                array(
     688                        'title'      => __( 'Who\'s Online', 'buddypress' ),
     689                        'maxMembers' => 15,
     690                        'noMembers'  => __( 'There are no users currently online', 'buddypress' ),
     691                        'classname'  => 'widget_bp_core_whos_online_widget',
     692                ),
     693                'members_widget_settings'
     694        );
     695
     696        $block_args['type'] = 'online';
     697
     698        return bp_members_render_members_avatars_block( $block_args );
     699}
     700
     701/**
     702 * Callback function to render the Recently Active Members Block.
     703 *
     704 * @since 9.0.0
     705 *
     706 * @param array $attributes The block attributes.
     707 * @return string           HTML output.
     708 */
     709function bp_members_render_active_members_block( $attributes = array() ) {
     710        $block_args = bp_parse_args(
     711                $attributes,
     712                array(
     713                        'title'      => __( 'Recently Active Members', 'buddypress' ),
     714                        'maxMembers' => 15,
     715                        'noMembers'  => __( 'There are no recently active members', 'buddypress' ),
     716                        'classname'  => 'widget_bp_core_recently_active_widget',
     717                ),
     718                'recently_active_members_widget_settings'
     719        );
     720
     721        $block_args['type'] = 'active';
     722
     723        return bp_members_render_members_avatars_block( $block_args );
     724}
  • trunk/src/bp-members/classes/class-bp-members-component.php

    r13003 r13007  
    201201                                'bp/dynamic-members' => array(
    202202                                        'widget_classnames' => array( 'widget_bp_core_members_widget', 'buddypress' ),
    203                                 )
     203                                ),
     204                                'bp/online-members' => array(
     205                                        'widget_classnames' => array( 'widget_bp_core_whos_online_widget', 'buddypress' ),
     206                                ),
     207                                'bp/active-members' => array(
     208                                        'widget_classnames' => array( 'widget_bp_core_recently_active_widget', 'buddypress' ),
     209                                ),
    204210                        ),
    205211                );
     
    863869                                        'render_callback'    => 'bp_members_render_dynamic_members_block',
    864870                                ),
     871                                'bp/online-members'  => array(
     872                                        'name'               => 'bp/online-members',
     873                                        'editor_script'      => 'bp-online-members-block',
     874                                        'editor_script_url'  => plugins_url( 'js/blocks/online-members.js', dirname( __FILE__ ) ),
     875                                        'editor_script_deps' => array(
     876                                                'wp-blocks',
     877                                                'wp-element',
     878                                                'wp-components',
     879                                                'wp-i18n',
     880                                                'wp-block-editor',
     881                                                'bp-block-components',
     882                                        ),
     883                                        'editor_style'       => 'bp-online-members-block',
     884                                        'editor_style_url'   => plugins_url( 'css/blocks/online-members.css', dirname( __FILE__ ) ),
     885                                        'attributes'         => array(
     886                                                'title'      => array(
     887                                                        'type'    => 'string',
     888                                                        'default' => __( 'Who\'s Online', 'buddypress' ),
     889                                                ),
     890                                                'maxMembers' => array(
     891                                                        'type'    => 'number',
     892                                                        'default' => 15,
     893                                                ),
     894                                        ),
     895                                        'render_callback'    => 'bp_members_render_online_members_block',
     896                                ),
     897                                'bp/active-members'  => array(
     898                                        'name'               => 'bp/active-members',
     899                                        'editor_script'      => 'bp-active-members-block',
     900                                        'editor_script_url'  => plugins_url( 'js/blocks/active-members.js', dirname( __FILE__ ) ),
     901                                        'editor_script_deps' => array(
     902                                                'wp-blocks',
     903                                                'wp-element',
     904                                                'wp-components',
     905                                                'wp-i18n',
     906                                                'wp-block-editor',
     907                                                'bp-block-components',
     908                                        ),
     909                                        'editor_style'       => 'bp-active-members-block',
     910                                        'editor_style_url'   => plugins_url( 'css/blocks/active-members.css', dirname( __FILE__ ) ),
     911                                        'attributes'         => array(
     912                                                'title'      => array(
     913                                                        'type'    => 'string',
     914                                                        'default' => __( 'Recently Active Members', 'buddypress' ),
     915                                                ),
     916                                                'maxMembers' => array(
     917                                                        'type'    => 'number',
     918                                                        'default' => 15,
     919                                                ),
     920                                        ),
     921                                        'render_callback'    => 'bp_members_render_active_members_block',
     922                                ),
    865923                        )
    866924                );
Note: See TracChangeset for help on using the changeset viewer.