Skip to:
Content

BuddyPress.org

Ticket #921: 921.04.diff

File 921.04.diff, 16.3 KB (added by imath, 10 years ago)
  • bp-groups/bp-groups-classes.php

    diff --git bp-groups/bp-groups-classes.php bp-groups/bp-groups-classes.php
    index 2ed7441..bed0eb7 100644
    class BP_Group_Member_Query extends BP_User_Query { 
    14601460                        'group_id'     => 0,
    14611461                        'group_role'   => array( 'member' ),
    14621462                        'is_confirmed' => true,
     1463                        'type'         => 'last_modified',
    14631464                ) );
    14641465
    14651466                $group_member_ids = $this->get_group_member_ids();
    class BP_Group_Member_Query extends BP_User_Query { 
    15621563
    15631564                /** ORDER BY clause ***************************************************/
    15641565
    1565                 // @todo For now, mimicking legacy behavior of
    1566                 // bp_group_has_members(), which has us order by date_modified
    1567                 // only. Should abstract it in the future
     1566                /**
     1567                 * The order for alphabetical type will be set in
     1568                 * BP_Group_Member_Query->set_orderby() In the group members
     1569                 * table, date_modified is the 'sortable' field available.
     1570                 * The two remaining types, last_modified and first_modified,
     1571                 * are managed here.
     1572                 */
     1573
     1574                if ( isset( $this->query_vars['type'] ) ) {
     1575                        $type = $this->query_vars['type'];
     1576                } else {
     1577                        $type = 'last_modified';
     1578                }
     1579
    15681580                $sql['orderby'] = "ORDER BY date_modified";
    15691581                $sql['order']   = "DESC";
    15701582
     1583                if ( 'first_modified' == $type ) {
     1584                        $sql['order'] = "ASC";
     1585                }
     1586
    15711587                /** LIMIT clause ******************************************************/
    15721588                $this->group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']} {$sql['limit']}" );
    15731589
    1574                 return $this->group_member_ids;
     1590                /**
     1591                 * You can filter the group member ids from here to build your custom query
     1592                 * if you defined a custom type using the action 'bp_groups_members_order_options'
     1593                 * for instance
     1594                 */
     1595                return apply_filters( 'bp_group_member_query_group_member_ids', $this->group_member_ids, $type, $this->query_vars['group_id'] );
    15751596        }
    15761597
    15771598        /**
    class BP_Group_Member_Query extends BP_User_Query { 
    15831604         * @param BP_User_Query $query BP_User_Query object.
    15841605         */
    15851606        public function set_orderby( $query ) {
    1586                 $gm_ids = $this->get_group_member_ids();
     1607
     1608                $gm_ids = $this->get_group_member_ids( $query->query_vars['type'] );
     1609
    15871610                if ( empty( $gm_ids ) ) {
    15881611                        $gm_ids = array( 0 );
    15891612                }
    15901613
    1591                 // The first param in the FIELD() clause is the sort column id
    1592                 $gm_ids = array_merge( array( 'u.id' ), wp_parse_id_list( $gm_ids ) );
    1593                 $gm_ids_sql = implode( ',', $gm_ids );
     1614                // No need to change the order of BP_User_Query in case type is alphabetical
     1615                if ( 'alphabetical' != $query->query_vars['type'] ) {
     1616                        // The first param in the FIELD() clause is the sort column id
     1617                        $gm_ids = array_merge( array( 'u.id' ), wp_parse_id_list( $gm_ids ) );
     1618                        $gm_ids_sql = implode( ',', $gm_ids );
    15941619
    1595                 $query->uid_clauses['orderby'] = "ORDER BY FIELD(" . $gm_ids_sql . ")";
     1620                        $query->uid_clauses['orderby'] = "ORDER BY FIELD(" . $gm_ids_sql . ")";
     1621                }
    15961622
    15971623                // Prevent this filter from running on future BP_User_Query
    15981624                // instances on the same page
  • bp-groups/bp-groups-functions.php

    diff --git bp-groups/bp-groups-functions.php bp-groups/bp-groups-functions.php
    index a27a499..9642849 100644
    function groups_get_group_members( $args = array() ) { 
    422422                'exclude'             => false,
    423423                'group_role'          => array(),
    424424                'search_terms'        => false,
     425                'type'                => 'last_modified'
    425426        ) );
    426427
    427428        // For legacy users. Use of BP_Groups_Member::get_all_for_group()
    function groups_get_group_members( $args = array() ) { 
    455456                        'group_role'     => $r['group_role'],
    456457                        'exclude'        => $r['exclude'],
    457458                        'search_terms'   => $r['search_terms'],
    458                         'type'           => 'last_modified',
     459                        'type'           => $r['type'],
    459460                ) );
    460461
    461462                // Structure the return value as expected by the template functions
  • bp-groups/bp-groups-template.php

    diff --git bp-groups/bp-groups-template.php bp-groups/bp-groups-template.php
    index 675409e..44fe89b 100644
    class BP_Groups_Group_Members_Template { 
    19821982                        'exclude_banned'      => 1,
    19831983                        'group_role'          => false,
    19841984                        'search_terms'        => false,
     1985                        'type'                => 'last_modified',
    19851986                ) );
    19861987
    19871988                // @todo No
    class BP_Groups_Group_Members_Template { 
    19901991                $this->pag_page = isset( $_REQUEST['mlpage'] ) ? intval( $_REQUEST['mlpage'] ) : $r['page'];
    19911992                $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
    19921993
     1994                /**
     1995                 * In themes, If 'groups/single/home' template has been updated
     1996                 * but not 'groups/single/members', it prevents the pagination
     1997                 * url to be messed up with admin-ajax.
     1998                 */
     1999                $base_url = trailingslashit( bp_get_group_permalink( groups_get_current_group() ) . bp_current_action() );
     2000
     2001                if ( bp_action_variable() ) {
     2002                        $base_url = trailingslashit( $base_url . bp_action_variable() );
     2003                }
     2004
    19932005                $members_args = $r;
    19942006
    19952007                $members_args['page']     = $this->pag_page;
    class BP_Groups_Group_Members_Template { 
    20142026                }
    20152027
    20162028                $this->pag_links = paginate_links( array(
    2017                         'base' => add_query_arg( 'mlpage', '%#%' ),
     2029                        'base' => add_query_arg( array( 'mlpage' => '%#%' ), $base_url ),
    20182030                        'format' => '',
    20192031                        'total' => !empty( $this->pag_num ) ? ceil( $this->total_member_count / $this->pag_num ) : $this->total_member_count,
    20202032                        'current' => $this->pag_page,
    class BP_Groups_Group_Members_Template { 
    20912103function bp_group_has_members( $args = '' ) {
    20922104        global $members_template;
    20932105
     2106        $exclude_admins_mods = 1;
     2107
     2108        if ( bp_is_group_members() ) {
     2109                $exclude_admins_mods = 0;
     2110        }
     2111
    20942112        $r = wp_parse_args( $args, array(
    20952113                'group_id'            => bp_get_current_group_id(),
    20962114                'page'                => 1,
    20972115                'per_page'            => 20,
    20982116                'max'                 => false,
    20992117                'exclude'             => false,
    2100                 'exclude_admins_mods' => 1,
     2118                'exclude_admins_mods' => $exclude_admins_mods,
    21012119                'exclude_banned'      => 1,
    21022120                'group_role'          => false,
    21032121                'search_terms'        => false,
     2122                'type'                => 'last_modified',
    21042123        ) );
    21052124
    21062125        if ( empty( $r['search_terms'] ) && ! empty( $_REQUEST['s'] ) )
    function bp_group_member_admin_pagination() { 
    22822301                return $members_template->pag_links;
    22832302        }
    22842303
     2304/**
     2305 * Output the Group members template
     2306 *
     2307 * @since BuddyPress (?)
     2308 *
     2309 * @return string html output
     2310 */
     2311function bp_groups_members_template_part() {
     2312        ?>
     2313        <div class="item-list-tabs" id="subnav" role="navigation">
     2314                <ul>
     2315                        <li class="groups-members-search" role="search">
     2316                                <?php bp_directory_members_search_form(); ?>
     2317                        </li>
     2318
     2319                        <?php bp_groups_members_filter(); ?>
     2320                        <?php do_action( 'bp_members_directory_member_sub_types' ); ?>
     2321
     2322                </ul>
     2323        </div>
     2324
     2325        <div id="members-group-list" class="group_members dir-list">
     2326
     2327                <?php bp_get_template_part( 'groups/single/members' ); ?>
     2328
     2329        </div>
     2330        <?php
     2331}
     2332
     2333/**
     2334 * Output the Group members filters
     2335 *
     2336 * @since BuddyPress (?)
     2337 *
     2338 * @return string html output
     2339 */
     2340function bp_groups_members_filter() {
     2341        ?>
     2342        <li id="group_members-order-select" class="last filter">
     2343                <label for="group_members-order-by"><?php _e( 'Order By:', 'buddypress' ); ?></label>
     2344                <select id="group_members-order-by">
     2345                        <option value="last_modified"><?php _e( 'Newest', 'buddypress' ); ?></option>
     2346                        <option value="first_modified"><?php _e( 'Oldest', 'buddypress' ); ?></option>
     2347                        <option value="alphabetical"><?php _e( 'Alphabetical', 'buddypress' ); ?></option>
     2348
     2349                        <?php do_action( 'bp_groups_members_order_options' ); ?>
     2350
     2351                </select>
     2352        </li>
     2353        <?php
     2354}
    22852355
    22862356/***************************************************************************
    22872357 * Group Creation Process Template Tags
  • bp-templates/bp-legacy/buddypress-functions.php

    diff --git bp-templates/bp-legacy/buddypress-functions.php bp-templates/bp-legacy/buddypress-functions.php
    index 0cb3153..658ab62 100644
    function bp_legacy_theme_object_template_loader() { 
    541541        if ( ! bp_current_action() )
    542542                bp_update_is_directory( true, bp_current_component() );
    543543
     544        $template_part = $object . '/' . $object . '-loop';
     545       
     546        if ( ! empty( $_POST['template'] ) )
     547                $template_part = sanitize_option( 'upload_path', $_POST['template'] );
     548
    544549        // Locate the object template
    545         bp_get_template_part( "$object/$object-loop" );
     550        bp_get_template_part( $template_part );
    546551        exit();
    547552}
    548553
  • bp-templates/bp-legacy/buddypress/groups/single/home.php

    diff --git bp-templates/bp-legacy/buddypress/groups/single/home.php bp-templates/bp-legacy/buddypress/groups/single/home.php
    index 55dd5b0..8499866 100644
     
    4747                                elseif ( bp_is_active( 'activity' ) ) : bp_get_template_part( 'groups/single/activity' );
    4848
    4949                                // Otherwise show members
    50                                 elseif ( bp_is_active( 'members'  ) ) : bp_get_template_part( 'groups/single/members'  );
     50                                elseif ( bp_is_active( 'members'  ) ) : bp_groups_members_template_part();
    5151
    5252                                endif;
    5353                               
     
    6161                                elseif ( bp_is_group_activity()   ) : bp_get_template_part( 'groups/single/activity'     );
    6262
    6363                                // Group Members
    64                                 elseif ( bp_is_group_members()    ) : bp_get_template_part( 'groups/single/members'      );
     64                                elseif ( bp_is_group_members()    ) : bp_groups_members_template_part();
    6565
    6666                                // Group Invitations
    6767                                elseif ( bp_is_group_invites()    ) : bp_get_template_part( 'groups/single/send-invites' );
  • bp-templates/bp-legacy/buddypress/groups/single/members.php

    diff --git bp-templates/bp-legacy/buddypress/groups/single/members.php bp-templates/bp-legacy/buddypress/groups/single/members.php
    index fb7b4e2..f1714a5 100644
     
    1 <?php if ( bp_group_has_members( 'exclude_admins_mods=0' ) ) : ?>
     1<?php if ( bp_group_has_members( bp_ajax_querystring( 'group_members' ) ) ) : ?>
    22
    33        <?php do_action( 'bp_before_group_members_content' ); ?>
    44
    5         <div class="item-list-tabs" id="subnav" role="navigation">
    6                 <ul>
    7 
    8                         <?php do_action( 'bp_members_directory_member_sub_types' ); ?>
    9 
    10                 </ul>
    11         </div>
    12 
    13         <div id="pag-top" class="pagination no-ajax">
     5        <div id="pag-top" class="pagination">
    146
    157                <div class="pag-count" id="member-count-top">
    168
     
    6355
    6456        <?php do_action( 'bp_after_group_members_list' ); ?>
    6557
    66         <div id="pag-bottom" class="pagination no-ajax">
     58        <div id="pag-bottom" class="pagination">
    6759
    6860                <div class="pag-count" id="member-count-bottom">
    6961
  • bp-templates/bp-legacy/css/buddypress.css

    diff --git bp-templates/bp-legacy/css/buddypress.css bp-templates/bp-legacy/css/buddypress.css
    index 81dd03f..995d650 100644
    body.activity-permalink #buddypress div.activity-comments div.acomment-content { 
    486486        float: right;
    487487        margin: -39px 0 0 0;
    488488}
    489 #buddypress div.dir-search input[type=text] {
     489#buddypress div.dir-search input[type=text],
     490#buddypress li.groups-members-search input[type=text] {
    490491        font-size: 90%;
    491492        padding: 1px 3px;
    492493}
    body.activity-permalink #buddypress div.activity-comments div.acomment-content { 
    581582#buddypress .standard-form select,
    582583#buddypress .standard-form input[type=password],
    583584#buddypress .dir-search input[type=search],
    584 #buddypress .dir-search input[type=text] {
     585#buddypress .dir-search input[type=text],
     586#buddypress .groups-members-search input[type=search],
     587#buddypress .groups-members-search input[type=text] {
    585588        border: 1px solid #ccc;
    586589        background: #fafafa;
    587590        border-radius: 0;
  • bp-templates/bp-legacy/js/buddypress.js

    diff --git bp-templates/bp-legacy/js/buddypress.js bp-templates/bp-legacy/js/buddypress.js
    index 350193e..562c734 100644
    jq(document).ready( function() { 
    1717        bp_init_activity();
    1818
    1919        /* Object filter and scope set. */
    20         var objects = [ 'members', 'groups', 'blogs', 'forums' ];
     20        var objects = [ 'members', 'groups', 'blogs', 'forums', 'group_members' ];
    2121        bp_init_objects( objects );
    2222
    2323        /* @mention Compose Scrolling */
    jq(document).ready( function() { 
    663663        /**** Directory Search ****************************************************/
    664664
    665665        /* The search form on all directory pages */
    666         jq('.dir-search').on( 'click', function(event) {
     666        jq('.dir-search, .groups-members-search').on( 'click', function(event) {
    667667                if ( jq(this).hasClass('no-ajax') )
    668668                        return;
    669669
    jq(document).ready( function() { 
    673673                        var css_id = jq('.item-list-tabs li.selected').attr('id').split( '-' );
    674674                        var object = css_id[0];
    675675
    676                         bp_filter_request( object, jq.cookie('bp-' + object + '-filter'), jq.cookie('bp-' + object + '-scope') , 'div.' + object, target.parent().children('label').children('input').val(), 1, jq.cookie('bp-' + object + '-extras') );
     676                        if ( 'members' == object && 'groups' == css_id[1] ) {
     677                                object = 'group_members';
     678                                var template = 'groups/single/members';
     679                        } else {
     680                                var template = null;
     681                        }
     682
     683                        bp_filter_request( object, jq.cookie('bp-' + object + '-filter'), jq.cookie('bp-' + object + '-scope') , 'div.' + object, target.parent().children('label').children('input').val(), 1, jq.cookie('bp-' + object + '-extras'), null, template );
    677684
    678685                        return false;
    679686                }
    jq(document).ready( function() { 
    721728                if ( jq('.dir-search input').length )
    722729                        search_terms = jq('.dir-search input').val();
    723730
     731                if ( jq( '.groups-members-search input' ).length )
     732                        search_terms = jq( '.groups-members-search input' ).val();
     733
     734                if ( 'members' == object && 'groups' == scope ) {
     735                        object = 'group_members';
     736                        var template = 'groups/single/members';
     737                } else {
     738                        var template = null;
     739                }
     740
    724741                if ( 'friends' == object )
    725742                        object = 'members';
    726743
    727                 bp_filter_request( object, filter, scope, 'div.' + object, search_terms, 1, jq.cookie('bp-' + object + '-extras') );
     744                bp_filter_request( object, filter, scope, 'div.' + object, search_terms, 1, jq.cookie('bp-' + object + '-extras'), null, template );
    728745
    729746                return false;
    730747        });
    jq(document).ready( function() { 
    754771                        if ( jq('div.dir-search input').length )
    755772                                search_terms = jq('.dir-search input').val();
    756773
     774                        if ( jq( '.groups-members-search input' ).length )
     775                                search_terms = jq( '.groups-members-search input' ).val();
     776
     777                        if ( 'members' == object && 'groups' == css_id[1] ) {
     778                                var object = 'group_members';
     779                                var template = 'groups/single/members';
     780                        } else {
     781                                var template = null;
     782                        }
     783
    757784                        if ( jq(target).hasClass('next') )
    758785                                var page_number = Number( jq('.pagination span.current').html() ) + 1;
    759786                        else if ( jq(target).hasClass('prev') )
    jq(document).ready( function() { 
    767794                                var caller = null;
    768795                        }
    769796
    770                         bp_filter_request( object, jq.cookie('bp-' + object + '-filter'), jq.cookie('bp-' + object + '-scope'), 'div.' + object, search_terms, page_number, jq.cookie('bp-' + object + '-extras'), caller );
     797                        bp_filter_request( object, jq.cookie('bp-' + object + '-filter'), jq.cookie('bp-' + object + '-scope'), 'div.' + object, search_terms, page_number, jq.cookie('bp-' + object + '-extras'), caller, template );
    771798
    772799                        return false;
    773800                }
    jq(document).ready( function() { 
    966993        });
    967994
    968995        /* Add / Remove friendship buttons */
    969         jq('#members-dir-list').on('click', '.friendship-button a', function() {
     996        jq( '#members-dir-list, #members-group-list' ).on('click', '.friendship-button a', function() {
    970997                jq(this).parent().addClass('loading');
    971998                var fid = jq(this).attr('id');
    972999                fid = fid.split('-');
    function bp_init_objects(objects) { 
    13831410}
    13841411
    13851412/* Filter the current content list (groups/members/blogs/topics) */
    1386 function bp_filter_request( object, filter, scope, target, search_terms, page, extras, caller ) {
     1413function bp_filter_request( object, filter, scope, target, search_terms, page, extras, caller, template ) {
    13871414        if ( 'activity' == object )
    13881415                return false;
    13891416
    function bp_filter_request( object, filter, scope, target, search_terms, page, e 
    14121439        jq('.item-list-tabs li.selected').addClass('loading');
    14131440        jq('.item-list-tabs select option[value="' + filter + '"]').prop( 'selected', true );
    14141441
    1415         if ( 'friends' == object )
     1442        if ( 'friends' == object || 'group_members' == object ) {
    14161443                object = 'members';
     1444        }
    14171445
    14181446        if ( bp_ajax_request )
    14191447                bp_ajax_request.abort();
    function bp_filter_request( object, filter, scope, target, search_terms, page, e 
    14261454                'search_terms': search_terms,
    14271455                'scope': scope,
    14281456                'page': page,
    1429                 'extras': extras
     1457                'extras': extras,
     1458                'template':template
    14301459        },
    14311460        function(response)
    14321461        {