Skip to content

Instantly share code, notes, and snippets.

@spythemes
Forked from bappi-d-great/code.php
Last active November 24, 2016 21:58
Show Gist options
  • Save spythemes/a7b95add15cecce571929a0f147bc143 to your computer and use it in GitHub Desktop.
Save spythemes/a7b95add15cecce571929a0f147bc143 to your computer and use it in GitHub Desktop.
WPMU M2 add more sortable bp xprofile column in all members table
<?php
/**
* Set BP xProfile fields in line 16: $this->_bp_fields = array( 'Gender', 'Gwint', 'True Color' );
*/
if( ! class_exists( 'Make_M2_Member_Column_Sortable_BP' ) )
{
class Make_M2_Member_Column_Sortable_BP
{
private $_bp_fields = array();
private function __construct()
{
// Here to set BP xprofile fields
$this->_bp_fields = array('Gender', 'Gwint', 'True Color' );
add_filter( 'ms_helper_listtable_member_get_columns', array( $this, 'ms_helper_listtable_member_get_columns' ) );
add_filter( 'ms_helper_listtable_member_default_value', array( $this, 'ms_helper_listtable_member_default_value' ), 10, 3 );
add_filter( 'ms_helper_listtable_member_get_sortable_columns', array( $this, 'ms_helper_listtable_member_get_sortable_columns' ) );
add_filter( 'ms_model_member_get_members', array( $this, 'ms_model_member_get_members' ), 10, 3 );
}
static public function get_instance()
{
static $Inst = null;
if( null == $Inst )
{
$Inst = new self();
}
}
public function set_sorting_val( $members, $var )
{
if( ! function_exists( 'bp_get_profile_field_data' ) ) return $members;
foreach( $members as $key => $member )
{
$members[$key]->_saved_data[$var] = bp_get_profile_field_data( array( 'field' => $var, 'user_id' => $member->id ) );
}
return $members;
}
public function ms_helper_listtable_member_get_columns( $columns )
{
foreach( $this->_bp_fields as $field )
{
$columns[ strtolower( $field ) ] = $field;
}
$columns = array('avatar'=>'Avatar') + $columns;
return $columns;
}
public function ms_helper_listtable_member_default_value( $html, $member, $column_name )
{
$user_id = $member->id; //get member user ID;
$args = array(
'field' => $column_name,
'user_id' => $member->id
);
if ($column_name == 'avatar')
return get_avatar($member->id, 64);
else
return function_exists( 'bp_get_profile_field_data' ) ? bp_get_profile_field_data( $args ) : $html;
}
public function ms_helper_listtable_member_get_sortable_columns( $columns )
{
/* Making the membership column sortable */
$columns['membership'] = array('membership', false);
$columns['username'] = array('username', false);
$columns['e-mail'] = array('e-mail', false);
foreach( $this->_bp_fields as $field )
{
$columns[ strtolower( $field ) ] = array( strtolower( $field ), false );
}
return $columns;
}
public function ms_model_member_get_members( $members, $ids, $args )
{
$bp_fields = array_map( 'strtolower', $this->_bp_fields );
if( in_array( $args['orderby'], $bp_fields ) )
{
$members = $this->set_sorting_val( $members, $args['orderby'] );
$key = $args['orderby'];
$order = $args['order'];
usort( $members, function( $a, $b ) use( $key, $order ) {
return $order == 'asc' ? strcmp( $a->_saved_data[$key], $b->_saved_data[$key] ) : strcmp( $b->_saved_data[$key], $a->_saved_data[$key] );
} );
}
return $members;
}
}
Make_M2_Member_Column_Sortable_BP::get_instance();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment