O crap,
scratch that I didn’t read the function properly, that was wrapped in a check for populate_extras
if (empty($group->args['populate_extras'])) {
So it never even executed and just used the $group from the global $groups_template->group which already had the admins/mods on it.
So I guess my question is how can you control the order or sort the $group->admins and $group->mods
Thanks
BP_Group_Member_Query is a class extension of BP_User_Query
Take a look at the code examples here:
BP_User_Query
Thanks @shanebp,
I finally figured that the BP_Group_Member_Query as alphabetical was functioning properly what I’m wondering about now is if I can by default order the admins and mods listings on the $groups_template->group object in alphabetical order?
Thanks
It’d be a lot easier to answer your questions if you were explicit about the functions you’re using, for example: bp_group_list_admins()
Since it’s called in a template, overload the template and make a call to your own version of that function that sets ‘type’ to whatever you want.
Hi @shanebp,
Sorry for the confusion, I’ve created a bp_group_list_managers that’s a merge of bp_group_list_admins and bp_group_list_mods to provide a single consolidated listing.
function bp_group_list_managers($group=false) {
global $groups_template;
if(empty($group)) {
$group =& $groups_template->group;
}
// fetch group admins if 'populate_extras' flag is false
if (empty($group->args['populate_extras']) || true) {
$query = new BP_Group_Member_Query(array(
'group_id' => $group->id,
'group_role' => 'admin',
'type' => 'alphabetical',
));
if (!empty($query->results)) {
$group->admins = $query->results;
}
}
// fetch group mods if 'populate_extras' flag is false
if (empty($group->args['populate_extras']) || true) {
$query = new BP_Group_Member_Query(array(
'group_id' => $group->id,
'group_role' => 'mod',
'type' => 'alphabetical',
));
if (!empty($query->results)) {
$group->mods = $query->results;
}
}
$admins = (array)$group->admins;
$mods = (array)$group->mods;
usort($admins, 'bp_group_member_sort');
usort($mods, 'bp_group_member_sort');
$group->managers = array_merge($admins, $mods);
if (!empty($group->managers)) { ?>
<ul id="group-managers">
<?php foreach((array)$group->managers as $manager) { ?>
<li>
<a href="<?php echo bp_core_get_user_domain($manager->user_id, $manager->user_nicename, $manager->user_login); ?>"><?php echo bp_core_fetch_avatar(array('item_id' => $manager->user_id, 'email' => $manager->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname($manager->user_id)))) ?></a>
</li>
<?php } ?>
</ul>
<?php } else { ?>
<span class="activity"><?php _e( 'No Managers', 'buddypress' ) ?></span>
<?php }
}
As you can see I set the type here to alphabetical and was first confused why it did nothing then I realized the BP_Group_Member_Query’s were never even called as I guess populate_extras was set so not empty. This meant that the $group->admins and $group->mods came from the global $group_template->group which wasn’t ordered. I’m curious how to make that global $group_template->group admin/mod lists could be alphabetically ordered by default.
For now I just amended my method to simply force the BP_Group_Member_Query’s to be used instead which has allowed for the alphabetical ordering.
Hope that clears things up.
Thanks