- default admin filters using with frontend filters;

This commit is contained in:
nikitasinelnikov
2020-01-10 17:31:55 +02:00
parent d42ee593f3
commit 16e0981e33
7 changed files with 122 additions and 59 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+12 -1
View File
@@ -86,6 +86,10 @@ textarea.um-forms-field.um-small-field {
margin: 5px 0 0 0;
}
.um-md-default-filters-option-line .um.um-field-wrapper2 {
margin: 5px 0 0 0;
}
.um-multi-selects-option-line.um-admin-drag-fld {
background: none;
border: none;
@@ -147,6 +151,12 @@ textarea.um-forms-field.um-small-field {
}
.um-md-default-filters-option-line .um-field-wrapper2 input {
width: 100%;
float: left;
}
.um-md-default-filters-option-line .um-field-wrapper2 input.um-timepicker-filter,
.um-md-default-filters-option-line .um-field-wrapper2 input.um-datepicker-filter {
width: calc( 50% - 7px ) !important;
float: left;
}
@@ -158,7 +168,8 @@ textarea.um-forms-field.um-small-field {
display: block;
}
.um-md-default-filters-option-line .um-field-wrapper2 input:first-child {
.um-md-default-filters-option-line .um-field-wrapper2 input.um-timepicker-filter:first-child,
.um-md-default-filters-option-line .um-field-wrapper2 input.um-datepicker-filter:first-child {
margin-right: 11px;
}
+25 -10
View File
@@ -406,18 +406,33 @@ jQuery(document).ready( function() {
});
function um_set_range_label( slider, ui ) {
var placeholder = slider.siblings( '.um-slider-range' ).data( 'placeholder' );
console.log( slider );
var placeholder = '';
var placeholder_s = slider.siblings( '.um-slider-range' ).data( 'placeholder-s' );
var placeholder_p = slider.siblings( '.um-slider-range' ).data( 'placeholder-p' );
if( ui ) {
placeholder = placeholder.replace( '\{min_range\}', ui.values[ 0 ] )
.replace( '\{max_range\}', ui.values[ 1 ] )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
if ( ui ) {
if ( ui.values[ 0 ] === ui.values[ 1 ] ) {
placeholder = placeholder_s.replace( '\{value\}', ui.values[ 0 ] )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
} else {
placeholder = placeholder_p.replace( '\{min_range\}', ui.values[ 0 ] )
.replace( '\{max_range\}', ui.values[ 1 ] )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
}
} else {
placeholder = placeholder.replace( '\{min_range\}', slider.slider( "values", 0 ) )
.replace( '\{max_range\}', slider.slider( "values", 1 ) )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
if ( slider.slider( "values", 0 ) === slider.slider( "values", 1 ) ) {
placeholder = placeholder_s.replace( '\{value\}', slider.slider( "values", 0 ) )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
} else {
placeholder = placeholder_p.replace( '\{min_range\}', slider.slider( "values", 0 ) )
.replace( '\{max_range\}', slider.slider( "values", 1 ) )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
}
}
slider.siblings( '.um-slider-range' ).html( placeholder );
+1 -1
View File
@@ -1345,7 +1345,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
$html .= "<li class=\"um-md-default-filters-option-line\"><span class=\"um-field-wrapper\">
<select $id_attr $name_attr $class_attr $data_attr>$options</select></span>
<span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span><span class=\"um-field-wrapper2 um\">" . UM()->member_directory()->show_filter( $value, array( 'form_id' => $post->ID ), $values[ $value ] ) . "</span></li>";
<span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span><span class=\"um-field-wrapper2 um\">" . UM()->member_directory()->show_filter( $value, array( 'form_id' => $post->ID ), $values[ $value ], true ) . "</span></li>";
}
} elseif ( ! empty( $field_data['show_default_number'] ) && is_numeric( $field_data['show_default_number'] ) && $field_data['show_default_number'] > 0 ) {
$i = 0;
+5 -1
View File
@@ -19,6 +19,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
* @var bool
*/
private $form_nonce_added = false;
private $directory_nonce_added = false;
/**
@@ -687,7 +688,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
include_once $path . 'includes/admin/templates/directory/'. $box['id'] . '.php';
wp_nonce_field( basename( __FILE__ ), 'um_admin_save_metabox_directory_nonce' );
if ( ! $this->directory_nonce_added ) {
$this->directory_nonce_added = true;
wp_nonce_field( basename( __FILE__ ), 'um_admin_save_metabox_directory_nonce' );
}
}
+32 -30
View File
@@ -185,6 +185,8 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
function handle_filter_query( $directory_data, $field, $value, $i, $is_default = false ) {
global $wpdb;
$join_slug = $is_default ? 'ummd' : 'umm' ;
$blog_id = get_current_blog_id();
switch ( $field ) {
@@ -225,11 +227,11 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
case 'text':
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm{$i} ON umm{$i}.user_id = u.ID";
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
$value = trim( stripslashes( $value ) );
$this->where_clauses[] = $wpdb->prepare( "umm{$i}.um_key = %s AND umm{$i}.um_value = %s", $field, $value );
$this->where_clauses[] = $wpdb->prepare( "{$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value = %s", $field, $value );
if ( ! $is_default ) {
$this->custom_filters_in_query[ $field ] = $value;
@@ -242,24 +244,24 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
$value = array( $value );
}
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm{$i} ON umm{$i}.user_id = u.ID";
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
$values_array = array();
foreach ( $value as $single_val ) {
$single_val = stripslashes( $single_val );
$values_array[] = $wpdb->prepare( "umm{$i}.um_value LIKE %s", '%"' . trim( $single_val ) . '"%' );
$values_array[] = $wpdb->prepare( "umm{$i}.um_value LIKE %s", '%' . serialize( strval( trim( $single_val ) ) ) . '%' );
$values_array[] = $wpdb->prepare( "umm{$i}.um_value = %s", trim( $single_val ) );
$values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value LIKE %s", '%"' . trim( $single_val ) . '"%' );
$values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value LIKE %s", '%' . serialize( strval( trim( $single_val ) ) ) . '%' );
$values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value = %s", trim( $single_val ) );
if ( is_numeric( $single_val ) ) {
$values_array[] = $wpdb->prepare( "umm{$i}.um_value LIKE %s", '%' . serialize( intval( trim( $single_val ) ) ) . '%' );
$values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value LIKE %s", '%' . serialize( intval( trim( $single_val ) ) ) . '%' );
}
}
$values = implode( ' OR ', $values_array );
$this->where_clauses[] = $wpdb->prepare( "( umm{$i}.um_key = %s AND ( {$values} ) )", $field );
$this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND ( {$values} ) )", $field );
if ( ! $is_default ) {
$this->custom_filters_in_query[ $field ] = $value;
@@ -268,12 +270,12 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
break;
case 'slider':
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm{$i} ON umm{$i}.user_id = u.ID";
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
$min = min( $value );
$max = max( $value );
$this->where_clauses[] = $wpdb->prepare( "( umm{$i}.um_key = %s AND umm{$i}.um_value BETWEEN %d AND %d )", $field, $min, $max );
$this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value BETWEEN %d AND %d )", $field, $min, $max );
if ( ! $is_default ) {
$this->custom_filters_in_query[ $field ] = $value;
@@ -299,9 +301,9 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
$from_date = date( 'Y/m/d', $from_date );
$to_date = date( 'Y/m/d', $to_date );
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm{$i} ON umm{$i}.user_id = u.ID";
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
$this->where_clauses[] = $wpdb->prepare( "( umm{$i}.um_key = %s AND umm{$i}.um_value BETWEEN %s AND %s )", $field, $from_date, $to_date );
$this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value BETWEEN %s AND %s )", $field, $from_date, $to_date );
if ( ! $is_default ) {
$this->custom_filters_in_query[ $field ] = array( $from_date, $to_date );
@@ -310,11 +312,11 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
break;
case 'timepicker':
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm{$i} ON umm{$i}.user_id = u.ID";
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
if ( $value[0] == $value[1] ) {
$this->where_clauses[] = $wpdb->prepare( "( umm{$i}.um_key = %s AND umm{$i}.um_value = %s )", $field, $value[0] );
$this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value = %s )", $field, $value[0] );
} else {
$this->where_clauses[] = $wpdb->prepare( "( umm{$i}.um_key = %s AND CAST( umm{$i}.um_value AS TIME ) BETWEEN %s AND %s )", $field, $value[0], $value[1] );
$this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND CAST( {$join_slug}{$i}.um_value AS TIME ) BETWEEN %s AND %s )", $field, $value[0], $value[1] );
}
if ( ! $is_default ) {
@@ -352,9 +354,9 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
$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 ) ) );
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm{$i} ON umm{$i}.user_id = u.ID";
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
$this->where_clauses[] = $wpdb->prepare( "( umm{$i}.um_key = 'birth_date' AND umm{$i}.um_value BETWEEN %s AND %s )", $from_date, $to_date );
$this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = 'birth_date' AND {$join_slug}{$i}.um_value BETWEEN %s AND %s )", $from_date, $to_date );
if ( ! $is_default ) {
$this->custom_filters_in_query[ $field ] = array( $to_date, $from_date );
@@ -402,9 +404,9 @@ 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
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm{$i} ON umm{$i}.user_id = u.ID";
$this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
$this->where_clauses[] = $wpdb->prepare( "( umm{$i}.um_key = '_um_last_login' AND umm{$i}.um_value BETWEEN %s AND %s )", $from_date, $to_date );
$this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = '_um_last_login' AND {$join_slug}{$i}.um_value BETWEEN %s AND %s )", $from_date, $to_date );
if ( ! $is_default ) {
$this->custom_filters_in_query[ $field ] = $value;
@@ -571,22 +573,22 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
//unable default filter in case if we select other filters in frontend filters
if ( empty( $this->custom_filters_in_query ) ) {
$default_filters = array();
if ( ! empty( $directory_data['search_filters'] ) ) {
$default_filters = maybe_unserialize( $directory_data['search_filters'] );
}
//if ( empty( $this->custom_filters_in_query ) ) {
$default_filters = array();
if ( ! empty( $directory_data['search_filters'] ) ) {
$default_filters = maybe_unserialize( $directory_data['search_filters'] );
}
if ( ! empty( $default_filters ) ) {
$i = 1;
foreach ( $default_filters as $field => $value ) {
if ( ! empty( $default_filters ) ) {
$i = 1;
foreach ( $default_filters as $field => $value ) {
$this->handle_filter_query( $directory_data, $field, $value, $i, true );
$this->handle_filter_query( $directory_data, $field, $value, $i, true );
$i++;
}
$i++;
}
}
//}
$order = 'ASC';
+46 -15
View File
@@ -208,6 +208,14 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
if ( ! empty( $_POST[ $k . '_from' ] ) && ! empty( $_POST[ $k . '_to' ] ) ) {
$temp_value[ $k ] = array( $_POST[ $k . '_from' ], $_POST[ $k . '_to' ] );
}
} elseif ( $filter_type == 'select' ) {
if ( ! empty( $_POST[ $k ] ) ) {
if ( is_array( $_POST[ $k ] ) ) {
$temp_value[ $k ] = array_map( 'trim', $_POST[ $k ] );
} else {
$temp_value[ $k ] = array( trim( $_POST[ $k ] ) );
}
}
} else {
if ( ! empty( $_POST[ $k ] ) ) {
$temp_value[ $k ] = trim( $_POST[ $k ] );
@@ -373,15 +381,27 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
* @param string $filter
* @param array $directory_data
* @param mixed $default_value
* @param bool $admin
*
* @return string $filter
*/
function show_filter( $filter, $directory_data, $default_value = false ) {
function show_filter( $filter, $directory_data, $default_value = false, $admin = false ) {
if ( empty( $this->filter_types[ $filter ] ) ) {
return '';
}
if ( $default_value === false ) {
$default_filters = array();
if ( ! empty( $directory_data['search_filters'] ) ) {
$default_filters = maybe_unserialize( $directory_data['search_filters'] );
}
if ( ! empty( $default_filters[ $filter ] ) && $this->filter_types[ $filter ] != 'select' ) {
return '';
}
}
$field_key = $filter;
if ( $filter == 'last_login' ) {
$field_key = '_um_last_login';
@@ -459,13 +479,11 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
break;
}
case 'text': {
$filter_from_url = ! empty( $_GET[ 'filter_' . $filter . '_' . $unique_hash ] ) ? $_GET[ 'filter_' . $filter . '_' . $unique_hash ] : $default_value;
if( ! $directory_data['search_filters'][ $filter ] ) { ?>
<input type="text" autocomplete="off" id="<?php echo $filter; ?>" name="<?php echo $filter; ?>"
placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
value="<?php echo esc_attr( $filter_from_url ) ?>" class="um-form-field" />
<?php }
$filter_from_url = ! empty( $_GET[ 'filter_' . $filter . '_' . $unique_hash ] ) ? $_GET[ 'filter_' . $filter . '_' . $unique_hash ] : $default_value; ?>
<input type="text" autocomplete="off" id="<?php echo $filter; ?>" name="<?php echo $filter; ?>"
placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
value="<?php echo esc_attr( $filter_from_url ) ?>" class="um-form-field" />
<?php
break;
}
case 'select': {
@@ -576,12 +594,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
$attrs['label'] = strip_tags( $attrs['label'] );
}
if ( ! empty( $default_filters[ $filter ] ) ) {
$attrs['options'] = array_intersect( $attrs['options'], $default_filters[ $filter ] );
}
ksort( $attrs['options'] );
$attrs['options'] = apply_filters( 'um_member_directory_filter_select_options_sorted', $attrs['options'], $attrs ); ?>
<select class="um-s1" id="<?php echo esc_attr( $filter ); ?>" name="<?php echo esc_attr( $filter ); ?>"
<select class="um-s1" id="<?php echo esc_attr( $filter ); ?>" name="<?php echo esc_attr( $filter ); ?><?php if ( $admin && count( $attrs['options'] ) > 1 ) { ?>[]<?php } ?>"
data-placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
<?php if ( $admin && count( $attrs['options'] ) > 1 ) { ?>multiple<?php } ?>
<?php echo $custom_dropdown; ?>>
<option></option>
@@ -602,8 +625,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
} ?>
<option value="<?php echo esc_attr( $opt ); ?>" data-value_label="<?php esc_attr_e( $v, 'ultimate-member' ); ?>"
<?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) ) ?>
<?php selected( $opt === $default_value ) ?>>
<?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) );
if ( $admin ) {
if ( is_string( $default_value ) ) {
$default_value = array( $default_value );
}
selected( in_array( $opt, $default_value ) );
} else {
selected( $opt === $default_value );
} ?>>
<?php _e( $v, 'ultimate-member' ); ?>
</option>
@@ -1633,9 +1665,9 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
*/
function default_filters( $directory_data ) {
//unable default filter in case if we select other filters in frontend filters
if ( ! empty( $this->custom_filters_in_query ) ) {
/*if ( ! empty( $this->custom_filters_in_query ) ) {
return;
}
}*/
$default_filters = array();
if ( ! empty( $directory_data['search_filters'] ) ) {
@@ -1697,7 +1729,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
'key' => $field,
'value' => $value,
'compare' => '=',
'inclusive' => true,
);
break;
@@ -2411,7 +2442,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
$filter_key = sanitize_key( $_REQUEST['key'] );
$directory_id = absint( $_REQUEST['directory_id'] );
$html = $this->show_filter( $filter_key, array( 'form_id' => $directory_id ) );
$html = $this->show_filter( $filter_key, array( 'form_id' => $directory_id ), false, true );
wp_send_json_success( array( 'field_html' => $html ) );
}