Skip to:
Content

BuddyPress.org

Ticket #921: 921.02.diff

File 921.02.diff, 18.4 KB (added by imath, 11 years ago)
  • bp-groups/bp-groups-classes.php

    diff --git bp-groups/bp-groups-classes.php bp-groups/bp-groups-classes.php
    index de81785..a64d52d 100644
    class BP_Group_Member_Query extends BP_User_Query { 
    14461446                        'group_id'     => 0,
    14471447                        'group_role'   => array( 'member' ),
    14481448                        'is_confirmed' => true,
     1449                        'type'         => 'last_modified'
    14491450                ) );
    14501451
    1451                 $group_member_ids = $this->get_group_member_ids();
     1452                $group_member_ids = $this->get_group_member_ids( $this->query_vars['type'] );
    14521453
    14531454                // If the group member query returned no users, bail with an
    14541455                // array that will guarantee no matches for BP_User_Query
    class BP_Group_Member_Query extends BP_User_Query { 
    14701471         *
    14711472         * @return array $ids User IDs of relevant group member ids.
    14721473         */
    1473         protected function get_group_member_ids() {
     1474        protected function get_group_member_ids( $type = '' ) {
    14741475                global $wpdb;
    14751476
     1477                if ( empty( $type ) )
     1478                        $type = 'last_modified';
     1479
    14761480                if ( is_array( $this->group_member_ids ) ) {
    14771481                        return $this->group_member_ids;
    14781482                }
    class BP_Group_Member_Query extends BP_User_Query { 
    15471551                $sql['where'] = ! empty( $sql['where'] ) ? 'WHERE ' . implode( ' AND ', $sql['where'] ) : '';
    15481552
    15491553                /** ORDER BY clause ***************************************************/
    1550 
    1551                 // @todo For now, mimicking legacy behavior of
    1552                 // bp_group_has_members(), which has us order by date_modified
    1553                 // only. Should abstract it in the future
     1554                /**
     1555                 * The order for alphabetical type will be set in BP_Group_Member_Query->set_order_by()
     1556                 * In group members tables, date_modified is the 'sortable' field available
     1557                 * The 2 types left: last_modified and first_modified are managed here
     1558                 */
    15541559                $sql['orderby'] = "ORDER BY date_modified";
    15551560                $sql['order']   = "DESC";
    15561561
     1562                if ( 'first_modified' == $type ) {
     1563                        $sql['order']   = "ASC";
     1564                }
     1565
    15571566                /** LIMIT clause ******************************************************/
    15581567                $this->group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']} {$sql['limit']}" );
    15591568
    1560                 return $this->group_member_ids;
     1569                /**
     1570                 * You can filter the group member ids from here to build your custom query
     1571                 * if you defined a custom type using the action 'bp_groups_members_order_options'
     1572                 * for instance
     1573                 */
     1574                return apply_filters( 'bp_group_member_query_group_member_ids', $this->group_member_ids, $type, $this->query_vars['group_id'] );
    15611575        }
    15621576
    15631577        /**
    class BP_Group_Member_Query extends BP_User_Query { 
    15691583         * @param BP_User_Query $query BP_User_Query object.
    15701584         */
    15711585        public function set_orderby( $query ) {
    1572                 $gm_ids = $this->get_group_member_ids();
     1586
     1587                $gm_ids = $this->get_group_member_ids( $query->query_vars['type'] );
     1588
    15731589                if ( empty( $gm_ids ) ) {
    15741590                        $gm_ids = array( 0 );
    15751591                }
    15761592
    1577                 // The first param in the FIELD() clause is the sort column id
    1578                 $gm_ids = array_merge( array( 'u.id' ), wp_parse_id_list( $gm_ids ) );
    1579                 $gm_ids_sql = implode( ',', $gm_ids );
     1593                // No need to change the order of BP_User_Query in case type is alphabetical
     1594                if ( 'alphabetical' != $query->query_vars['type'] ) {
     1595                        // The first param in the FIELD() clause is the sort column id
     1596                        $gm_ids = array_merge( array( 'u.id' ), wp_parse_id_list( $gm_ids ) );
     1597                        $gm_ids_sql = implode( ',', $gm_ids );
    15801598
    1581                 $query->uid_clauses['orderby'] = "ORDER BY FIELD(" . $gm_ids_sql . ")";
     1599                        $query->uid_clauses['orderby'] = "ORDER BY FIELD(" . $gm_ids_sql . ")";
     1600                }
    15821601
    15831602                // Prevent this filter from running on future BP_User_Query
    15841603                // 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 a356e1d..0f78bd2 100644
    function groups_get_group_mods( $group_id ) { 
    373373 * @param array|string $exclude Array or comma-sep list of users to exclude
    374374 * @return array Multi-d array of 'members' list and 'count'
    375375 */
    376 function groups_get_group_members( $group_id, $limit = false, $page = false, $exclude_admins_mods = true, $exclude_banned = true, $exclude = false, $group_role = false ) {
     376function groups_get_group_members( $group_id, $limit = false, $page = false, $exclude_admins_mods = true, $exclude_banned = true, $exclude = false, $group_role = false, $type = false, $search_terms = false ) {
    377377
    378378        // For legacy users. Use of BP_Groups_Member::get_all_for_group()
    379379        // is deprecated. func_get_args() can't be passed to a function in PHP
    function groups_get_group_members( $group_id, $limit = false, $page = false, $ex 
    398398                        }
    399399                }
    400400
     401                if ( empty( $type ) )
     402                        $type = 'last_modified';
     403
    401404                // Perform the group member query (extends BP_User_Query)
    402405                $members = new BP_Group_Member_Query( array(
    403406                        'group_id'       => $group_id,
    function groups_get_group_members( $group_id, $limit = false, $page = false, $ex 
    405408                        'page'           => $page,
    406409                        'group_role'     => $group_role,
    407410                        'exclude'        => $exclude,
    408                         'type'           => 'last_modified',
     411                        'type'           => $type,
     412                        'search_terms'   => $search_terms,
    409413                ) );
    410414
    411415                // 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 512724f..1dfa0dd 100644
    class BP_Groups_Group_Members_Template { 
    19141914        var $pag_links;
    19151915        var $total_group_count;
    19161916
    1917         function __construct( $group_id, $per_page, $max, $exclude_admins_mods, $exclude_banned, $exclude, $group_role = false ) {
     1917        function __construct( $group_id, $page_number, $per_page, $max, $exclude_admins_mods, $exclude_banned, $exclude, $group_role = false, $type, $search_terms ) {
    19181918
    1919                 $this->pag_page = isset( $_REQUEST['mlpage'] ) ? intval( $_REQUEST['mlpage'] ) : 1;
     1919                $this->pag_page = isset( $_REQUEST['mlpage'] ) ? intval( $_REQUEST['mlpage'] ) : (int) $page_number;
    19201920                $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
    1921                 $this->members  = groups_get_group_members( $group_id, $this->pag_num, $this->pag_page, $exclude_admins_mods, $exclude_banned, $exclude, $group_role );
     1921                $this->members  = groups_get_group_members( $group_id, $this->pag_num, $this->pag_page, $exclude_admins_mods, $exclude_banned, $exclude, $group_role, $type, $search_terms );
    19221922
    19231923                if ( !$max || $max >= (int) $this->members['count'] )
    19241924                        $this->total_member_count = (int) $this->members['count'];
    function bp_group_has_members( $args = '' ) { 
    19951995        global $members_template;
    19961996
    19971997        $r = wp_parse_args( $args, array(
    1998                 'group_id' => bp_get_current_group_id(),
    1999                 'per_page' => 20,
    2000                 'max' => false,
    2001                 'exclude' => false,
     1998                'group_id'            => bp_get_current_group_id(),
     1999                'page'                => 1,
     2000                'per_page'            => 20,
     2001                'max'                 => false,
     2002                'exclude'             => false,
    20022003                'exclude_admins_mods' => 1,
    2003                 'exclude_banned' => 1,
    2004                 'group_role' => false,
     2004                'exclude_banned'      => 1,
     2005                'group_role'          => false,
     2006                'type'                => 'last_modified',
     2007                'search_terms'        => false
    20052008        ) );
    20062009
    2007         $members_template = new BP_Groups_Group_Members_Template( $r['group_id'], $r['per_page'], $r['max'], (int) $r['exclude_admins_mods'], (int) $r['exclude_banned'], $r['exclude'], $r['group_role'] );
     2010        if ( empty( $r['search_terms'] ) && ! empty( $_REQUEST['s'] ) )
     2011                $r['search_terms'] = $_REQUEST['s'];
     2012
     2013        $members_template = new BP_Groups_Group_Members_Template( $r['group_id'], $r['page'], $r['per_page'], $r['max'], (int) $r['exclude_admins_mods'], (int) $r['exclude_banned'], $r['exclude'], $r['group_role'], $r['type'], $r['search_terms'] );
    20082014        return apply_filters( 'bp_group_has_members', $members_template->has_members(), $members_template );
    20092015}
    20102016
    function bp_group_member_admin_pagination() { 
    21802186                return $members_template->pag_links;
    21812187        }
    21822188
     2189/**
     2190 * Output the Group members template
     2191 *
     2192 * @since BuddyPress (?)
     2193 *
     2194 * @return string html output
     2195 */
     2196function bp_groups_members_template_part() {
     2197        ?>
     2198        <div class="item-list-tabs" id="subnav" role="navigation">
     2199                <ul>
     2200                        <li class="groups-members-search" role="search">
     2201                                <?php bp_directory_members_search_form(); ?>
     2202                        </li>
     2203
     2204                        <?php bp_groups_members_filter(); ?>
     2205                        <?php do_action( 'bp_members_directory_member_sub_types' ); ?>
     2206
     2207                </ul>
     2208        </div>
     2209
     2210        <div id="members-group-list" class="group_members dir-list">
     2211
     2212                <?php bp_get_template_part( 'groups/single/members' ); ?>
     2213
     2214        </div>
     2215        <?php
     2216}
     2217
     2218/**
     2219 * Output the Group members filters
     2220 *
     2221 * @since BuddyPress (?)
     2222 *
     2223 * @return string html output
     2224 */
     2225function bp_groups_members_filter() {
     2226        ?>
     2227        <li id="group_members-order-select" class="last filter">
     2228                <label for="group_members-order-by"><?php _e( 'Order By:', 'buddypress' ); ?></label>
     2229                <select id="group_members-order-by">
     2230                        <option value="last_modified"><?php _e( 'Newest', 'buddypress' ); ?></option>
     2231                        <option value="first_modified"><?php _e( 'Oldest', 'buddypress' ); ?></option>
     2232                        <option value="alphabetical"><?php _e( 'Alphabetical', 'buddypress' ); ?></option>
     2233                       
     2234                        <?php do_action( 'bp_groups_members_order_options' ); ?>
     2235
     2236                </select>
     2237        </li>
     2238        <?php
     2239}
    21832240
    21842241/***************************************************************************
    21852242 * 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..eeddc24 100644
    function bp_legacy_theme_ajax_querystring( $query_string, $object ) { 
    448448
    449449        $qs = array();
    450450
     451        /* Single Group Members specific case */
     452        if ( bp_is_group_members() ) {
     453                $object = 'group_members';
     454                $qs[]   = 'exclude_admins_mods=0';
     455        }
     456
    451457        /**
    452458         * Check if any cookie values are set. If there are then override the
    453459         * default params passed to the template loop.
    function bp_legacy_theme_object_template_loader() { 
    541547        if ( ! bp_current_action() )
    542548                bp_update_is_directory( true, bp_current_component() );
    543549
     550        $template_part = $object . '/' . $object . '-loop';
     551       
     552        if ( ! empty( $_POST['template'] ) )
     553                $template_part = sanitize_option( 'upload_path', $_POST['template'] );
     554
    544555        // Locate the object template
    545         bp_get_template_part( "$object/$object-loop" );
     556        bp_get_template_part( $template_part );
    546557        exit();
    547558}
    548559
  • 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        {