Files

249 lines
5.8 KiB
PHP
Raw Permalink Normal View History

2014-12-15 22:38:07 +02:00
<?php
class UM_Members {
function __construct() {
2015-11-05 19:51:31 +08:00
add_filter('user_search_columns', array(&$this, 'user_search_columns'), 99 );
2015-12-12 14:32:20 -08:00
2015-01-03 15:31:15 +02:00
add_action('template_redirect', array(&$this, 'access_members'), 555);
2015-12-12 14:32:20 -08:00
2015-01-22 22:27:53 +02:00
$this->core_search_fields = array(
'user_login',
'username',
2015-02-17 00:51:40 +02:00
'display_name',
2015-11-05 19:51:31 +08:00
'user_email',
2015-01-22 22:27:53 +02:00
);
2015-12-12 14:32:20 -08:00
2015-01-03 15:31:15 +02:00
}
2015-12-12 14:32:20 -08:00
2015-02-17 00:51:40 +02:00
/***
2015-11-05 19:51:31 +08:00
*** @user_search_columns
2015-02-17 00:51:40 +02:00
***/
2015-11-05 19:51:31 +08:00
function user_search_columns( $search_columns ){
if ( is_admin() ) {
$search_columns[] = 'display_name';
} else {
2016-03-09 11:57:26 +08:00
$search_columns = array('display_name','user_email','user_login');
2015-11-05 19:51:31 +08:00
}
2015-02-17 00:51:40 +02:00
return $search_columns;
}
2015-12-12 14:32:20 -08:00
2015-01-03 15:31:15 +02:00
/***
*** @Members page allowed?
***/
function access_members() {
2015-12-12 14:32:20 -08:00
2015-01-03 15:31:15 +02:00
if ( um_get_option('members_page') == 0 && um_is_core_page('members') ) {
um_redirect_home();
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
/***
*** @tag conversion for member directory
***/
function convert_tags( $string, $array ) {
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
$search = array(
'{total_users}',
);
$replace = array(
$array['total_users'],
);
$string = str_replace($search, $replace, $string);
return $string;
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
/***
*** @show filter
***/
function show_filter( $filter ) {
global $ultimatemember;
$fields = $ultimatemember->builtin->all_user_fields;
2015-12-12 14:32:20 -08:00
2015-04-07 20:10:23 +02:00
if ( isset( $fields[$filter] ) ) {
$attrs = $fields[$filter];
} else {
$attrs = apply_filters("um_custom_search_field_{$filter}", array() );
}
2015-12-12 14:32:20 -08:00
// additional filter for search field attributes
$attrs = apply_filters("um_search_field_{$filter}", $attrs);
2015-04-07 20:10:23 +02:00
if ( $ultimatemember->builtin->is_dropdown_field( $filter, $attrs ) ) {
2014-12-15 22:38:07 +02:00
$type = 'select';
2016-01-20 15:24:28 +05:30
} else if ( 'user_tags' == $attrs['type'] ) {
$attrs['options'] = apply_filters('um_multiselect_options_user_tags', array(), $attrs);
$type = 'select';
2014-12-15 22:38:07 +02:00
} else {
$type = 'text';
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
switch( $type ) {
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
case 'select':
?>
2015-12-12 14:32:20 -08:00
2015-02-04 20:31:39 +02:00
<select name="<?php echo $filter; ?>" id="<?php echo $filter; ?>" class="um-s1" style="width: 100%" data-placeholder="<?php echo stripslashes( $attrs['label'] ); ?>">
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
<option></option>
2015-12-12 14:32:20 -08:00
2015-02-09 00:29:16 +02:00
<?php foreach( $attrs['options'] as $k => $v ) {
2015-12-12 14:32:20 -08:00
2015-02-09 00:29:16 +02:00
$v = stripslashes($v);
2015-12-12 14:32:20 -08:00
2015-02-09 00:29:16 +02:00
$opt = $v;
2015-12-12 14:32:20 -08:00
2015-02-09 00:29:16 +02:00
if ( strstr($filter, 'role_') )
$opt = $k;
2015-12-12 14:32:20 -08:00
2015-04-07 20:10:23 +02:00
if ( isset( $attrs['custom'] ) )
$opt = $k;
2015-02-09 00:29:16 +02:00
?>
2015-12-12 14:32:20 -08:00
2015-02-09 00:29:16 +02:00
<option value="<?php echo $opt; ?>" <?php um_select_if_in_query_params( $filter, $opt ); ?>><?php echo $v; ?></option>
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
<?php } ?>
</select>
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
<?php
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
break;
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
case 'text':
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
?>
2015-12-12 14:32:20 -08:00
2016-01-06 15:16:00 +08:00
<input type="text" name="<?php echo $filter; ?>" id="<?php echo $filter; ?>" placeholder="<?php echo isset( $attrs['label'] ) ? $attrs['label'] : ''; ?>" value="<?php um_queried_search_value( $filter ); ?>" />
2014-12-15 22:38:07 +02:00
<?php
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
break;
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
}
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
/***
*** @Generate a loop of results
***/
function get_members($args){
2015-12-12 14:32:20 -08:00
2015-01-29 15:52:13 +02:00
global $ultimatemember;
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
extract($args);
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
$query_args = array();
$query_args = apply_filters( 'um_prepare_user_query_args', $query_args, $args );
$users = new WP_User_Query( $query_args );
2016-03-09 11:57:26 +08:00
2015-01-29 15:52:13 +02:00
// number of profiles for mobile
if ( $ultimatemember->mobile->isMobile() && isset( $profiles_per_page_mobile ) )
$profiles_per_page = $profiles_per_page_mobile;
2015-12-12 14:32:20 -08:00
2015-11-25 14:22:43 +08:00
$array['users'] = array_unique( $users->results );
2015-12-12 14:32:20 -08:00
2015-01-10 00:59:09 +02:00
$array['total_users'] = (isset( $max_users ) && $max_users && $max_users <= $users->total_users ) ? $max_users : $users->total_users;
2015-02-18 00:45:09 +02:00
$array['page'] = isset($_REQUEST['members_page']) ? $_REQUEST['members_page'] : 1;
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
$array['total_pages'] = ceil( $array['total_users'] / $profiles_per_page );
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
$array['header'] = $this->convert_tags( $header, $array );
2015-01-29 15:52:13 +02:00
$array['header_single'] = $this->convert_tags( $header_single, $array );
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
$array['users_per_page'] = array_slice($array['users'], ( ( $profiles_per_page * $array['page'] ) - $profiles_per_page ), $profiles_per_page );
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
for( $i = $array['page']; $i <= $array['page'] + 2; $i++ ) {
if ( $i <= $array['total_pages'] ) {
$pages_to_show[] = $i;
}
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
if ( isset( $pages_to_show ) && count( $pages_to_show ) < 5 ) {
$pages_needed = 5 - count( $pages_to_show );
for ( $c = $array['page']; $c >= $array['page'] - 2; $c-- ) {
if ( !in_array( $c, $pages_to_show ) && $c > 0 ) {
$pages_to_add[] = $c;
}
}
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
if ( isset( $pages_to_add ) ) {
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
asort( $pages_to_add );
$pages_to_show = array_merge( (array)$pages_to_add, $pages_to_show );
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
if ( count( $pages_to_show ) < 5 ) {
if ( max($pages_to_show) - $array['page'] >= 2 ) {
$pages_to_show[] = max($pages_to_show) + 1;
if ( count( $pages_to_show ) < 5 ) {
$pages_to_show[] = max($pages_to_show) + 1;
}
} else if ( $array['page'] - min($pages_to_show) >= 2 ) {
$pages_to_show[] = min($pages_to_show) - 1;
if ( count( $pages_to_show ) < 5 ) {
$pages_to_show[] = min($pages_to_show) - 1;
}
}
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
asort( $pages_to_show );
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
$array['pages_to_show'] = $pages_to_show;
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
} else {
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
if ( isset( $pages_to_show ) && count( $pages_to_show ) < 5 ) {
if ( max($pages_to_show) - $array['page'] >= 2 ) {
$pages_to_show[] = max($pages_to_show) + 1;
if ( count( $pages_to_show ) < 5 ) {
$pages_to_show[] = max($pages_to_show) + 1;
}
} else if ( $array['page'] - min($pages_to_show) >= 2 ) {
$pages_to_show[] = min($pages_to_show) - 1;
if ( count( $pages_to_show ) < 5 ) {
$pages_to_show[] = min($pages_to_show) - 1;
}
}
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
if ( isset( $pages_to_show ) && is_array( $pages_to_show ) ) {
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
asort( $pages_to_show );
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
$array['pages_to_show'] = $pages_to_show;
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
if ( isset( $array['pages_to_show'] ) ) {
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
if ( $array['total_pages'] < count( $array['pages_to_show'] ) ) {
foreach( $array['pages_to_show'] as $k => $v ) {
if ( $v > $array['total_pages'] ) unset( $array['pages_to_show'][$k] );
}
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
foreach( $array['pages_to_show'] as $k => $v ) {
if ( (int)$v <= 0 ) {
unset( $array['pages_to_show'][$k] );
}
}
2015-12-12 14:32:20 -08:00
2014-12-15 22:38:07 +02:00
}
return apply_filters('um_prepare_user_results_array', $array );
}
2015-12-12 14:32:20 -08:00
}