- last login date filter;

This commit is contained in:
Mykyta Synelnikov
2023-12-01 02:17:37 +02:00
parent ebec7d5f5f
commit f494c8972d
2 changed files with 60 additions and 72 deletions
@@ -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' ) {
+53 -63
View File
@@ -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 ) );