mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-06-05 15:09:37 +09:00
- last login date filter;
This commit is contained in:
@@ -405,8 +405,8 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
|
||||
}
|
||||
}
|
||||
|
||||
$from_date = date( 'Y-m-d H:s:i', strtotime( min( $value ) ) + $offset * HOUR_IN_SECONDS ); // client time zone offset
|
||||
$to_date = date( 'Y-m-d H:s:i', strtotime( max( $value ) ) + $offset * HOUR_IN_SECONDS + DAY_IN_SECONDS - 1 ); // time 23:59
|
||||
$from_date = date( 'Y-m-d H:i:s', strtotime( min( $value ) ) + $offset * HOUR_IN_SECONDS ); // client time zone offset
|
||||
$to_date = date( 'Y-m-d H:i:s', strtotime( max( $value ) ) + $offset * HOUR_IN_SECONDS + DAY_IN_SECONDS - 1 ); // time 23:59
|
||||
|
||||
$this->where_clauses[] = $wpdb->prepare( "u.user_registered BETWEEN %s AND %s", $from_date, $to_date );
|
||||
|
||||
@@ -416,7 +416,6 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
|
||||
|
||||
break;
|
||||
case 'last_login':
|
||||
|
||||
$offset = 0;
|
||||
if ( ! $is_default ) {
|
||||
if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
|
||||
@@ -429,8 +428,8 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
|
||||
}
|
||||
}
|
||||
|
||||
$from_date = (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ); // client time zone offset
|
||||
$to_date = (int) max( $value ) + ( $offset * HOUR_IN_SECONDS ) + DAY_IN_SECONDS - 1; // time 23:59
|
||||
$from_date = gmdate( 'Y-m-d H:i:s', (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ) ); // client time zone offset
|
||||
$to_date = gmdate( 'Y-m-d H:i:s', (int) max( $value ) + ( $offset * HOUR_IN_SECONDS ) + DAY_IN_SECONDS - 1 ); // time 23:59
|
||||
|
||||
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
|
||||
|
||||
@@ -764,11 +763,10 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
|
||||
|
||||
$this->sql_order = " ORDER BY CAST( umm_sort.um_value AS CHAR ) {$order} ";
|
||||
|
||||
} elseif ( $sortby == 'last_login' ) {
|
||||
} elseif ( 'last_login' === $sortby ) {
|
||||
|
||||
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = '_um_last_login' )";
|
||||
|
||||
$this->sql_order = " ORDER BY CAST( umm_sort.um_value AS SIGNED ) DESC ";
|
||||
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = '_um_last_login' )";
|
||||
$this->sql_order = ' ORDER BY CAST( umm_sort.um_value AS DATETIME ) DESC ';
|
||||
|
||||
} elseif ( $sortby == 'last_first_name' ) {
|
||||
|
||||
|
||||
@@ -364,7 +364,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
if ( ! empty( UM()->builtin()->saved_fields ) ) {
|
||||
foreach ( UM()->builtin()->saved_fields as $key => $data ) {
|
||||
if ( $key == '_um_last_login' ) {
|
||||
if ( '_um_last_login' === $key ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -419,7 +419,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
if ( ! empty( UM()->builtin()->saved_fields ) ) {
|
||||
foreach ( UM()->builtin()->saved_fields as $key => $data ) {
|
||||
|
||||
if ( $key == '_um_last_login' ) {
|
||||
if ( '_um_last_login' === $key ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -527,10 +527,9 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
}
|
||||
|
||||
$field_key = $filter;
|
||||
if ( $filter == 'last_login' ) {
|
||||
if ( 'last_login' === $filter ) {
|
||||
$field_key = '_um_last_login';
|
||||
}
|
||||
if ( $filter == 'role' ) {
|
||||
} elseif ( 'role' === $filter ) {
|
||||
$field_key = 'role_select';
|
||||
}
|
||||
|
||||
@@ -812,29 +811,28 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
break;
|
||||
}
|
||||
case 'datepicker': {
|
||||
|
||||
case 'datepicker':
|
||||
$range = $this->datepicker_filters_range( $filter );
|
||||
|
||||
$label = ! empty( $attrs['label'] ) ? $attrs['label'] : $attrs['title'];
|
||||
|
||||
if ( $range ) { ?>
|
||||
|
||||
if ( $range ) {
|
||||
$min = strtotime( $range[0] );
|
||||
$max = strtotime( $range[1] );
|
||||
?>
|
||||
<input type="text" id="<?php echo $filter; ?>_from" name="<?php echo $filter; ?>_from" class="um-datepicker-filter"
|
||||
placeholder="<?php esc_attr_e( sprintf( '%s From', stripslashes( $label ) ), 'ultimate-member' ); ?>"
|
||||
data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
|
||||
data-date_min="<?php echo $range[0] ?>" data-date_max="<?php echo $range[1] ?>"
|
||||
data-date_min="<?php echo esc_attr( $min ); ?>" data-date_max="<?php echo esc_attr( $max ); ?>"
|
||||
data-filter_name="<?php echo $filter; ?>" data-range="from" data-value="<?php echo ! empty( $default_value ) ? esc_attr( strtotime( min( $default_value ) ) ) : '' ?>" />
|
||||
<input type="text" id="<?php echo $filter; ?>_to" name="<?php echo $filter; ?>_to" class="um-datepicker-filter"
|
||||
placeholder="<?php esc_attr_e( sprintf( '%s To', stripslashes( $label ) ), 'ultimate-member' ); ?>"
|
||||
data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
|
||||
data-date_min="<?php echo $range[0] ?>" data-date_max="<?php echo $range[1] ?>"
|
||||
data-date_min="<?php echo esc_attr( $min ); ?>" data-date_max="<?php echo esc_attr( $max ); ?>"
|
||||
data-filter_name="<?php echo $filter; ?>" data-range="to" data-value="<?php echo ! empty( $default_value ) ? esc_attr( strtotime( max( $default_value ) ) ) : '' ?>" />
|
||||
|
||||
<?php }
|
||||
|
||||
<?php
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'timepicker': {
|
||||
|
||||
$range = $this->timepicker_filters_range( $filter );
|
||||
@@ -996,19 +994,16 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
return $placeholders;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $filter
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
function datepicker_filters_range( $filter ) {
|
||||
public function datepicker_filters_range( $filter ) {
|
||||
global $wpdb;
|
||||
|
||||
switch ( $filter ) {
|
||||
|
||||
default: {
|
||||
|
||||
default:
|
||||
global $wpdb;
|
||||
$meta = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT meta_value
|
||||
FROM {$wpdb->usermeta}
|
||||
@@ -1024,22 +1019,22 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$range = apply_filters( "um_member_directory_filter_{$filter}_datepicker", $range );
|
||||
|
||||
break;
|
||||
}
|
||||
case 'last_login': {
|
||||
$meta = $wpdb->get_col( "SELECT DISTINCT meta_value
|
||||
case 'last_login':
|
||||
$meta = $wpdb->get_row(
|
||||
"SELECT DISTINCT COUNT(*) AS total,
|
||||
MIN(meta_value) AS min,
|
||||
MAX(meta_value) AS max
|
||||
FROM {$wpdb->usermeta}
|
||||
WHERE meta_key='_um_last_login'
|
||||
ORDER BY meta_value DESC" );
|
||||
|
||||
if ( empty( $meta ) || count( $meta ) === 1 ) {
|
||||
WHERE meta_key = '_um_last_login'",
|
||||
ARRAY_A
|
||||
);
|
||||
if ( empty( $meta['total'] ) || 1 === absint( $meta['total'] ) ) {
|
||||
$range = false;
|
||||
} elseif ( ! empty( $meta ) ) {
|
||||
$range = array( min( $meta ), max( $meta ) );
|
||||
} elseif ( array_key_exists( 'min', $meta ) && array_key_exists( 'max', $meta ) ) {
|
||||
$range = array( $meta['min'], $meta['max'] );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 'user_registered': {
|
||||
case 'user_registered':
|
||||
$meta = $wpdb->get_col(
|
||||
"SELECT DISTINCT user_registered
|
||||
FROM {$wpdb->users}
|
||||
@@ -1053,14 +1048,11 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $range;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $filter
|
||||
*
|
||||
@@ -1349,7 +1341,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
if ( ! empty( UM()->builtin()->saved_fields ) ) {
|
||||
foreach ( UM()->builtin()->saved_fields as $key => $data ) {
|
||||
if ( $key == '_um_last_login' ) {
|
||||
if ( '_um_last_login' === $key ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1402,22 +1394,22 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$this->query_args['orderby'] = array( $sortby . '_c' => 'ASC' );
|
||||
unset( $this->query_args['order'] );
|
||||
|
||||
} elseif ( $sortby == 'last_login' ) {
|
||||
|
||||
$this->query_args['orderby'] = array( 'um_last_login' => 'DESC' );
|
||||
} elseif ( 'last_login' === $sortby ) {
|
||||
$this->query_args['orderby'] = array( 'um_last_login' => 'DESC' );
|
||||
$this->query_args['meta_query'][] = array(
|
||||
'relation' => 'OR',
|
||||
'relation' => 'OR',
|
||||
array(
|
||||
'key' => '_um_last_login',
|
||||
'compare' => 'EXISTS',
|
||||
'key' => '_um_last_login',
|
||||
'compare' => 'EXISTS',
|
||||
'type' => 'DATETIME',
|
||||
),
|
||||
'um_last_login' => array(
|
||||
'key' => '_um_last_login',
|
||||
'compare' => 'NOT EXISTS',
|
||||
'key' => '_um_last_login',
|
||||
'compare' => 'NOT EXISTS',
|
||||
'type' => 'DATETIME',
|
||||
),
|
||||
);
|
||||
unset( $this->query_args['order'] );
|
||||
|
||||
} elseif ( $sortby == 'last_first_name' ) {
|
||||
|
||||
$this->query_args['meta_query'][] = array(
|
||||
@@ -1534,12 +1526,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
if ( strstr( $sortby, '_desc' ) ) {
|
||||
$sortby = str_replace( '_desc', '', $sortby );
|
||||
$order = 'DESC';
|
||||
$order = 'DESC';
|
||||
}
|
||||
|
||||
if ( strstr( $sortby, '_asc' ) ) {
|
||||
$sortby = str_replace( '_asc', '', $sortby );
|
||||
$order = 'ASC';
|
||||
$order = 'ASC';
|
||||
}
|
||||
|
||||
$this->query_args['orderby'] = $sortby;
|
||||
@@ -1550,7 +1542,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
add_filter( 'pre_user_query', array( &$this, 'sortby_randomly' ), 10, 1 );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
@@ -1984,9 +1975,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
break;
|
||||
case 'birth_date':
|
||||
|
||||
$from_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ), date( 'Y', time() - min( $value ) * YEAR_IN_SECONDS ) ) );
|
||||
$to_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ) + 1, date( 'Y', time() - ( max( $value ) + 1 ) * YEAR_IN_SECONDS ) ) );
|
||||
$to_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ) + 1, date( 'Y', time() - ( max( $value ) + 1 ) * YEAR_IN_SECONDS ) ) );
|
||||
|
||||
$meta_query = array(
|
||||
array(
|
||||
@@ -1995,7 +1985,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
'compare' => 'BETWEEN',
|
||||
'type' => 'DATE',
|
||||
'inclusive' => true,
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
@@ -2010,8 +2000,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$offset = (int) $_POST['gmt_offset'];
|
||||
}
|
||||
|
||||
$from_date = date( 'Y-m-d H:s:i', strtotime( date( 'Y-m-d H:s:i', min( $value ) ) . "+$offset hours" ) );
|
||||
$to_date = date( 'Y-m-d H:s:i', strtotime( date( 'Y-m-d H:s:i', max( $value ) ) . "+$offset hours" ) );
|
||||
$from_date = date( 'Y-m-d H:i:s', strtotime( date( 'Y-m-d H:i:s', min( $value ) ) . "+$offset hours" ) );
|
||||
$to_date = date( 'Y-m-d H:i:s', strtotime( date( 'Y-m-d H:i:s', max( $value ) ) . "+$offset hours" ) );
|
||||
|
||||
$date_query = array(
|
||||
array(
|
||||
@@ -2032,7 +2022,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
break;
|
||||
case 'last_login':
|
||||
|
||||
$offset = 0;
|
||||
if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
|
||||
$offset = (int) $_POST['gmt_offset'];
|
||||
@@ -2043,10 +2032,11 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$meta_query = array(
|
||||
array(
|
||||
'key' => '_um_last_login',
|
||||
'value' => array( $from_date, $to_date ),
|
||||
'value' => array( gmdate( 'Y-m-d H:i:s', $from_date ), gmdate( 'Y-m-d H:i:s', $to_date ) ),
|
||||
'compare' => 'BETWEEN',
|
||||
'inclusive' => true,
|
||||
)
|
||||
'type' => 'DATETIME',
|
||||
),
|
||||
);
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = $value;
|
||||
@@ -2054,7 +2044,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2262,8 +2251,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$offset = $gmt_offset;
|
||||
}
|
||||
|
||||
$from_date = date( 'Y-m-d H:s:i', strtotime( date( 'Y-m-d H:s:i', min( $value ) ) . "+$offset hours" ) );
|
||||
$to_date = date( 'Y-m-d H:s:i', strtotime( date( 'Y-m-d H:s:i', max( $value ) ) . "+$offset hours" ) );
|
||||
$from_date = date( 'Y-m-d H:i:s', strtotime( date( 'Y-m-d H:i:s', min( $value ) ) . "+$offset hours" ) );
|
||||
$to_date = date( 'Y-m-d H:i:s', strtotime( date( 'Y-m-d H:i:s', max( $value ) ) . "+$offset hours" ) );
|
||||
|
||||
$date_query = array(
|
||||
array(
|
||||
@@ -2287,15 +2276,16 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$offset = $gmt_offset;
|
||||
}
|
||||
|
||||
$from_date = (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ); // client time zone offset
|
||||
$to_date = (int) max( $value ) + ( $offset * HOUR_IN_SECONDS ) + DAY_IN_SECONDS - 1; // time 23:59
|
||||
$from_date = (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ); // client time zone offset
|
||||
$to_date = (int) max( $value ) + ( $offset * HOUR_IN_SECONDS ) + DAY_IN_SECONDS - 1; // time 23:59
|
||||
$meta_query = array(
|
||||
array(
|
||||
'key' => '_um_last_login',
|
||||
'value' => array( $from_date, $to_date ),
|
||||
'value' => array( $from_date, $to_date ),
|
||||
'compare' => 'BETWEEN',
|
||||
'inclusive' => true,
|
||||
)
|
||||
'type' => 'DATETIME',
|
||||
),
|
||||
);
|
||||
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
|
||||
Reference in New Issue
Block a user