mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-11 18:56:10 +09:00
- member directory default filters;
This commit is contained in:
@@ -35,19 +35,22 @@ textarea.um-forms-field.um-small-field {
|
||||
|
||||
|
||||
.um-multi-text-list,
|
||||
.um-multi-selects-list {
|
||||
.um-multi-selects-list,
|
||||
.um-md-default-filters-list {
|
||||
float: left;
|
||||
width:100%;
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
|
||||
.um-hidden-multi-text,
|
||||
.um-hidden-multi-selects {
|
||||
.um-hidden-multi-selects,
|
||||
.um-hidden-md-default-filters {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.um-multi-text-option-line,
|
||||
.um-multi-selects-option-line {
|
||||
.um-multi-selects-option-line,
|
||||
.um-md-default-filters-option-line {
|
||||
float:left;
|
||||
width:100%;
|
||||
margin: 0;
|
||||
@@ -55,6 +58,12 @@ textarea.um-forms-field.um-small-field {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line {
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 0 0 5px 0;
|
||||
margin: 5px 0 0 0;
|
||||
}
|
||||
|
||||
.um-multi-text-option-line .um-field-wrapper,
|
||||
.um-multi-selects-option-line .um-field-wrapper {
|
||||
float:left;
|
||||
@@ -63,6 +72,47 @@ textarea.um-forms-field.um-small-field {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line .um-field-wrapper {
|
||||
float:left;
|
||||
width: calc( 100% - 60px );
|
||||
line-height: 30px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line .um-field-wrapper2 {
|
||||
float:left;
|
||||
width: calc( 100% - 60px );
|
||||
line-height: 30px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line .um-field-wrapper2 .ui-slider-range.ui-widget-header {
|
||||
background: #44b0ec;
|
||||
border: 1px solid #44b0ec !important;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line .um-field-wrapper2 select {
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line .um-field-wrapper2 input {
|
||||
width: calc( 50% - 7px ) !important;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line .um-field-wrapper2 .um-slider {
|
||||
margin: 5px 9px 0 9px;
|
||||
width: calc( 100% - 18px );
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.um-md-default-filters-option-line .um-field-wrapper2 input:first-child {
|
||||
margin-right: 11px;
|
||||
}
|
||||
|
||||
.um-multi-text-option-line .um-field-wrapper input,
|
||||
.um-multi-selects-option-line .um-field-wrapper select {
|
||||
float:left;
|
||||
@@ -72,7 +122,8 @@ textarea.um-forms-field.um-small-field {
|
||||
|
||||
|
||||
.um-multi-text-option-line .um-field-control,
|
||||
.um-multi-selects-option-line .um-field-control {
|
||||
.um-multi-selects-option-line .um-field-control,
|
||||
.um-md-default-filters-option-line .um-field-control {
|
||||
float:left;
|
||||
width: 60px;
|
||||
line-height: 30px;
|
||||
|
||||
@@ -2,10 +2,16 @@ jQuery(document).ready( function() {
|
||||
/**
|
||||
* Multi-selects field
|
||||
*/
|
||||
jQuery( document.body ).on( 'click', '.um-select-delete', function() {
|
||||
jQuery( document.body ).on( 'click', '.um-multi-selects-option-line .um-select-delete', function() {
|
||||
jQuery( this ).parents( 'li.um-multi-selects-option-line' ).remove();
|
||||
});
|
||||
|
||||
/**
|
||||
* Multi-selects field
|
||||
*/
|
||||
jQuery( document.body ).on( 'click', '.um-md-default-filters-option-line .um-select-delete', function() {
|
||||
jQuery( this ).parents( 'li.um-md-default-filters-option-line' ).remove();
|
||||
});
|
||||
|
||||
jQuery( '.um-multi-selects-add-option' ).click( function() {
|
||||
var list = jQuery(this).siblings('ul.um-multi-selects-list');
|
||||
@@ -29,6 +35,264 @@ jQuery(document).ready( function() {
|
||||
|
||||
});
|
||||
|
||||
var um_local_date = new Date();
|
||||
var um_gmt_hours = -um_local_date.getTimezoneOffset() / 60;
|
||||
jQuery('input[name="um-gmt-offset"]').val( um_gmt_hours );
|
||||
|
||||
//slider filter
|
||||
jQuery('.um-admin-metabox').find('.um-slider').each( function() {
|
||||
var slider = jQuery( this );
|
||||
|
||||
var min_default_value = parseInt( slider.data('min') );
|
||||
var max_default_value = parseInt( slider.data('max') );
|
||||
|
||||
if ( typeof jQuery( '#' + slider.data('field_name') + '_min' ).val() != 'undefined' ) {
|
||||
min_default_value = jQuery( '#' + slider.data('field_name') + '_min' ).val();
|
||||
}
|
||||
if ( typeof jQuery( '#' + slider.data('field_name') + '_max' ).val() != 'undefined' ) {
|
||||
max_default_value = jQuery( '#' + slider.data('field_name') + '_max' ).val();
|
||||
}
|
||||
|
||||
var default_value = [ min_default_value, max_default_value ];
|
||||
|
||||
slider.slider({
|
||||
range: true,
|
||||
min: parseInt( slider.data('min') ),
|
||||
max: parseInt( slider.data('max') ),
|
||||
values: default_value,
|
||||
create: function( event, ui ) {
|
||||
//console.log( ui );
|
||||
},
|
||||
step: 1,
|
||||
slide: function( event, ui ) {
|
||||
um_set_range_label( jQuery( this ), ui );
|
||||
},
|
||||
stop: function( event, ui ) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
um_set_range_label( slider );
|
||||
});
|
||||
|
||||
|
||||
//datepicker filter
|
||||
jQuery('.um-admin-metabox').find('.um-datepicker-filter').each( function() {
|
||||
var elem = jQuery(this);
|
||||
|
||||
var min = new Date( elem.data('date_min')*1000 );
|
||||
var max = new Date( elem.data('date_max')*1000 );
|
||||
|
||||
var $input = elem.pickadate({
|
||||
selectYears: true,
|
||||
min: min,
|
||||
max: max,
|
||||
formatSubmit: 'yyyy/mm/dd',
|
||||
hiddenName: true,
|
||||
onOpen: function() {
|
||||
elem.blur();
|
||||
},
|
||||
onClose: function() {
|
||||
elem.blur();
|
||||
},
|
||||
onSet: function( context ) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
var $picker = $input.pickadate('picker');
|
||||
$picker.set( 'select', elem.data('value')*1000 );
|
||||
});
|
||||
|
||||
|
||||
//timepicker filter
|
||||
jQuery('.um-admin-metabox').find('.um-timepicker-filter').each( function() {
|
||||
var elem = jQuery(this);
|
||||
|
||||
//using arrays formatted as [HOUR,MINUTE]
|
||||
|
||||
var min = elem.data('min');
|
||||
var max = elem.data('max');
|
||||
var picker_min = min.split(':');
|
||||
var picker_max = max.split(':');
|
||||
|
||||
var $input = elem.pickatime({
|
||||
format: elem.data('format'),
|
||||
interval: parseInt( elem.data('intervals') ),
|
||||
min: [picker_min[0],picker_min[1]],
|
||||
max: [picker_max[0],picker_max[1]],
|
||||
formatSubmit: 'HH:i',
|
||||
hiddenName: true,
|
||||
onOpen: function() { elem.blur(); },
|
||||
onClose: function() { elem.blur(); },
|
||||
onSet: function( context ) {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var um_member_dir_filters_busy = false;
|
||||
|
||||
jQuery( document.body ).on( 'change', '.um-md-default-filters-option-line .um-field-wrapper select', function() {
|
||||
if ( um_member_dir_filters_busy ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var obj = jQuery(this);
|
||||
var filter_key = obj.val();
|
||||
var directory_id = obj.data('member_directory');
|
||||
|
||||
um_member_dir_filters_busy = true;
|
||||
wp.ajax.send( 'um_member_directory_default_filter_settings', {
|
||||
data: {
|
||||
key: filter_key,
|
||||
directory_id: directory_id,
|
||||
nonce: um_admin_scripts.nonce
|
||||
},
|
||||
success: function( data ) {
|
||||
var field_wrapper = obj.parents( '.um-md-default-filters-option-line' ).find('.um-field-wrapper2');
|
||||
field_wrapper.html( data.field_html );
|
||||
|
||||
um_member_dir_filters_busy = false;
|
||||
|
||||
//slider filter
|
||||
field_wrapper.find('.um-slider').each( function() {
|
||||
var slider = jQuery( this );
|
||||
var min_default_value = parseInt( slider.data('min') );
|
||||
var max_default_value = parseInt( slider.data('max') );
|
||||
|
||||
var default_value = [ min_default_value, max_default_value ];
|
||||
|
||||
slider.slider({
|
||||
range: true,
|
||||
min: parseInt( slider.data('min') ),
|
||||
max: parseInt( slider.data('max') ),
|
||||
values: default_value,
|
||||
create: function( event, ui ) {
|
||||
//console.log( ui );
|
||||
},
|
||||
step: 1,
|
||||
slide: function( event, ui ) {
|
||||
um_set_range_label( jQuery( this ), ui );
|
||||
},
|
||||
stop: function( event, ui ) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
um_set_range_label( slider );
|
||||
});
|
||||
|
||||
|
||||
//datepicker filter
|
||||
field_wrapper.find('.um-datepicker-filter').each( function() {
|
||||
var elem = jQuery(this);
|
||||
|
||||
var min = new Date( elem.data('date_min')*1000 );
|
||||
var max = new Date( elem.data('date_max')*1000 );
|
||||
|
||||
var $input = elem.pickadate({
|
||||
selectYears: true,
|
||||
min: min,
|
||||
max: max,
|
||||
formatSubmit: 'yyyy/mm/dd',
|
||||
hiddenName: true,
|
||||
onOpen: function() {
|
||||
elem.blur();
|
||||
},
|
||||
onClose: function() {
|
||||
elem.blur();
|
||||
},
|
||||
onSet: function( context ) {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
//timepicker filter
|
||||
field_wrapper.find('.um-timepicker-filter').each( function() {
|
||||
var elem = jQuery(this);
|
||||
|
||||
//using arrays formatted as [HOUR,MINUTE]
|
||||
|
||||
var min = elem.data('min');
|
||||
var max = elem.data('max');
|
||||
var picker_min = min.split(':');
|
||||
var picker_max = max.split(':');
|
||||
|
||||
var $input = elem.pickatime({
|
||||
format: elem.data('format'),
|
||||
interval: parseInt( elem.data('intervals') ),
|
||||
min: [picker_min[0],picker_min[1]],
|
||||
max: [picker_max[0],picker_max[1]],
|
||||
formatSubmit: 'HH:i',
|
||||
hiddenName: true,
|
||||
onOpen: function() { elem.blur(); },
|
||||
onClose: function() { elem.blur(); },
|
||||
onSet: function( context ) {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
},
|
||||
error: function( data ) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function um_set_range_label( slider, ui ) {
|
||||
var placeholder = slider.siblings( '.um-slider-range' ).data( 'placeholder' );
|
||||
|
||||
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') );
|
||||
} 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') );
|
||||
}
|
||||
slider.siblings( '.um-slider-range' ).html( placeholder );
|
||||
|
||||
slider.siblings( ".um_range_min" ).val( slider.slider( "values", 0 ) );
|
||||
slider.siblings( ".um_range_max" ).val( slider.slider( "values", 1 ) );
|
||||
}
|
||||
|
||||
|
||||
jQuery( '.um-md-default-filters-add-option' ).click( function() {
|
||||
if ( um_member_dir_filters_busy ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var list = jQuery(this).siblings('ul.um-md-default-filters-list');
|
||||
|
||||
var field_id = list.data('field_id');
|
||||
var k = 0;
|
||||
if ( list.find( 'li:last select.um-forms-field' ).length > 0 ) {
|
||||
k = list.find( 'li:last select.um-forms-field' ).attr('id').split("-");
|
||||
k = k[1]*1 + 1;
|
||||
}
|
||||
|
||||
var selector_html = jQuery( '<div>' ).append( list.siblings('.um-hidden-md-default-filters').clone() ).html();
|
||||
|
||||
list.append(
|
||||
'<li class="um-md-default-filters-option-line"><span class="um-field-wrapper">' + selector_html +
|
||||
'</span></span><span class="um-field-control"><a href="javascript:void(0);" class="um-select-delete">' + php_data.texts.remove + '</a></span><span class="um-field-wrapper2 um"></li>'
|
||||
);
|
||||
|
||||
list.find('li:last .um-hidden-md-default-filters').attr('name', jQuery(this).data('name') ).
|
||||
addClass('um-forms-field um-long-field').removeClass('um-hidden-md-default-filters').attr('id', list.data('id_attr') + '-' + k);
|
||||
|
||||
list.find('li:last .um-field-wrapper select').trigger('change');
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Multi-text field
|
||||
|
||||
@@ -27,6 +27,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Ajax_Hooks' ) ) {
|
||||
add_action( 'wp_ajax_um_dynamic_modal_content', array( UM()->builder(), 'dynamic_modal_content' ) );
|
||||
add_action( 'wp_ajax_um_populate_dropdown_options', array( UM()->builder(), 'populate_dropdown_options' ) );
|
||||
add_action( 'wp_ajax_um_rated', array( UM()->admin_menu(), 'ultimatemember_rated' ) );
|
||||
add_action( 'wp_ajax_um_member_directory_default_filter_settings', array( UM()->member_directory(), 'default_filter_settings' ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -219,7 +219,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) {
|
||||
* Load Forms
|
||||
*/
|
||||
function load_forms() {
|
||||
wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker' ), ultimatemember_version );
|
||||
wp_register_style( 'um_ui', $this->front_css_baseurl . 'jquery-ui.css', array(), ultimatemember_version );
|
||||
wp_register_style( 'um_admin_forms', $this->css_url . 'um-admin-forms.css', array( 'wp-color-picker', 'um_ui' ), ultimatemember_version );
|
||||
wp_enqueue_style( 'um_admin_forms' );
|
||||
|
||||
wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery' ), ultimatemember_version, true );
|
||||
|
||||
@@ -1218,6 +1218,86 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
|
||||
}
|
||||
|
||||
|
||||
function render_md_default_filters( $field_data ) {
|
||||
if ( empty( $field_data['id'] ) ) {
|
||||
return false;
|
||||
}
|
||||
global $post;
|
||||
|
||||
$id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id'];
|
||||
|
||||
$class = ! empty( $field_data['class'] ) ? $field_data['class'] : '';
|
||||
$class .= ! empty( $field_data['size'] ) ? $field_data['size'] : 'um-long-field';
|
||||
$class_attr = ' class="um-forms-field ' . $class . '" ';
|
||||
|
||||
$data = array(
|
||||
'field_id' => $field_data['id'],
|
||||
'id_attr' => $id,
|
||||
'member_directory' => $post->ID
|
||||
);
|
||||
|
||||
$data_attr = '';
|
||||
foreach ( $data as $key => $value ) {
|
||||
$data_attr .= ' data-' . $key . '="' . esc_attr( $value ) . '" ';
|
||||
}
|
||||
|
||||
$name = $field_data['id'];
|
||||
$name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name;
|
||||
$name = "{$name}[]";
|
||||
$name_attr = ' name="' . $name . '" ';
|
||||
|
||||
$values = $this->get_field_value( $field_data );
|
||||
$filters = array_keys( $values );
|
||||
|
||||
$options = '';
|
||||
foreach ( $field_data['options'] as $key => $option ) {
|
||||
$options .= '<option value="' . $key . '">' . $option . '</option>';
|
||||
}
|
||||
|
||||
$html = "<input type=\"hidden\" name=\"um-gmt-offset\" /><select class=\"um-hidden-md-default-filters\" $data_attr>$options</select>";
|
||||
$html .= "<ul class=\"um-md-default-filters-list\" $data_attr>";
|
||||
|
||||
if ( ! empty( $filters ) && is_array( $filters ) ) {
|
||||
foreach ( $filters as $k => $value ) {
|
||||
|
||||
if ( ! in_array( $value, array_keys( $field_data['options'] ) ) ) {
|
||||
continue ;
|
||||
}
|
||||
|
||||
$id_attr = ' id="' . esc_attr( $id . '-' . $k ) . '" ';
|
||||
|
||||
$options = '';
|
||||
foreach ( $field_data['options'] as $key => $option ) {
|
||||
$options .= '<option value="' . $key . '" ' . selected( $key == $value, true, false ) . '>' . $option . '</option>';
|
||||
}
|
||||
|
||||
$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>";
|
||||
}
|
||||
} elseif ( ! empty( $field_data['show_default_number'] ) && is_numeric( $field_data['show_default_number'] ) && $field_data['show_default_number'] > 0 ) {
|
||||
$i = 0;
|
||||
while ( $i < $field_data['show_default_number'] ) {
|
||||
$id_attr = ' id="' . $id . '-' . $i . '" ';
|
||||
|
||||
$options = '';
|
||||
foreach ( $field_data['options'] as $key => $option ) {
|
||||
$options .= '<option value="' . $key . '">' . $option . '</option>';
|
||||
}
|
||||
|
||||
$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></li>";
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
$html .= "</ul><a href=\"javascript:void(0);\" class=\"button button-primary um-md-default-filters-add-option\" data-name=\"$name\">{$field_data['add_text']}</a>";
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get field value
|
||||
*
|
||||
|
||||
@@ -1052,6 +1052,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
|
||||
delete_post_meta( $post_id, '_um_roles_can_filter' );
|
||||
delete_post_meta( $post_id, '_um_show_these_users' );
|
||||
|
||||
delete_post_meta( $post_id, '_um_search_filters' );
|
||||
delete_post_meta( $post_id, '_um_search_filters_gmt' );
|
||||
|
||||
//save metadata
|
||||
foreach ( $_POST['um_metadata'] as $k => $v ) {
|
||||
|
||||
@@ -1088,6 +1091,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
update_post_meta( $post_id, '_um_search_filters_gmt', intval( $_POST['um-gmt-offset'] ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ if ( ! empty( $postmeta ) ) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// update member directories settings
|
||||
$forms_query = new WP_Query;
|
||||
$member_directories = $forms_query->query( array(
|
||||
'post_type' => 'um_directory',
|
||||
@@ -93,6 +93,46 @@ if ( ! empty( $member_directories ) && ! is_wp_error( $member_directories ) ) {
|
||||
}
|
||||
}
|
||||
|
||||
$default_filters = get_post_meta( $id, '_um_search_filters', true );
|
||||
$default_filters_new = array();
|
||||
if ( ! empty( $default_filters ) ) {
|
||||
$default_filters_queries = explode( '&', $default_filters );
|
||||
foreach ( $default_filters_queries as $filter_query_part ) {
|
||||
$filter_query_parts = explode( '=', $filter_query_part );
|
||||
|
||||
$filter_key = $filter_query_parts[0];
|
||||
$filter_value = $filter_query_parts[1];
|
||||
|
||||
$default_filters_new[ $filter_key ] = $filter_value;
|
||||
}
|
||||
}
|
||||
|
||||
update_post_meta( $id, '_um_search_filters', $default_filters_new );
|
||||
update_post_meta( $id, '_um_search_filters_old', $default_filters );
|
||||
|
||||
update_post_meta( $id, '_um_search_old', $search_enabled );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// for user tags settings
|
||||
if ( UM()->options()->get( 'members_page' ) ) {
|
||||
$member_directory_id = false;
|
||||
|
||||
$page_id = UM()->config()->permalinks['members'];
|
||||
if ( ! empty( $page_id ) ) {
|
||||
$members_page = get_post( $page_id );
|
||||
if ( ! empty( $members_page ) && ! is_wp_error( $members_page ) ) {
|
||||
if ( ! empty( $members_page->post_content ) ) {
|
||||
preg_match( '/\[ultimatemember[^\]]*?form_id\=[\'"]*?(\d+)[\'"]*?/i', $members_page->post_content, $matches );
|
||||
if ( ! empty( $matches[1] ) && is_numeric( $matches[1] ) ) {
|
||||
$member_directory_id = $matches[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $member_directory_id ) {
|
||||
UM()->options()->update( 'user_tags_base_directory' , $member_directory_id );
|
||||
}
|
||||
}
|
||||
@@ -43,6 +43,7 @@ global $post_id; ?>
|
||||
|
||||
//$post_id = get_the_ID();
|
||||
$_um_search_fields = get_post_meta( $post_id, '_um_search_fields', true );
|
||||
$_um_search_filters = get_post_meta( $post_id, '_um_search_filters', true );
|
||||
|
||||
UM()->admin_forms( array(
|
||||
'class' => 'um-member-directory-search um-half-column',
|
||||
@@ -92,13 +93,23 @@ global $post_id; ?>
|
||||
'add_text' => __( 'Add New Custom Field', 'ultimate-member' ),
|
||||
'show_default_number' => 1,
|
||||
),
|
||||
// array(
|
||||
// 'id' => '_um_search_filters',
|
||||
// 'type' => 'text',
|
||||
// 'label' => __( 'Default filters', 'ultimate-member' ),
|
||||
// 'tooltip' => __( 'You can set default filters like URL parameters', 'ultimate-member' ),
|
||||
// 'value' => UM()->query()->get_meta_value('_um_search_filters', null, 'na' ),
|
||||
// 'placeholder' => 'field1=val1&field2=val2'
|
||||
// ),
|
||||
array(
|
||||
'id' => '_um_search_filters',
|
||||
'type' => 'text',
|
||||
'label' => __( 'Default filters', 'ultimate-member' ),
|
||||
'tooltip' => __( 'You can set default filters like URL parameters', 'ultimate-member' ),
|
||||
'value' => UM()->query()->get_meta_value('_um_search_filters', null, 'na' ),
|
||||
'placeholder' => 'field1=val1&field2=val2'
|
||||
'id' => '_um_search_filters',
|
||||
'type' => 'md_default_filters',
|
||||
'label' => __( 'Default filters', 'ultimate-member' ),
|
||||
'tooltip' => __( 'You can set default filters', 'ultimate-member' ),
|
||||
'value' => $_um_search_filters,
|
||||
'options' => UM()->member_directory()->filter_fields,
|
||||
'add_text' => __( 'Add New Filter', 'ultimate-member' ),
|
||||
'show_default_number' => 0,
|
||||
),
|
||||
)
|
||||
) )->render_form(); ?>
|
||||
|
||||
@@ -41,6 +41,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
var $filter_fields = array();
|
||||
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
var $custom_filters_in_query = array();
|
||||
|
||||
|
||||
|
||||
var $filter_supported_fields = array();
|
||||
|
||||
@@ -175,6 +181,32 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
if ( ! empty( $value ) && in_array( $key, array( '_um_view_types', '_um_roles', '_um_roles_can_search', '_um_roles_can_filter' ) ) ) {
|
||||
$value = array_keys( $value );
|
||||
} elseif ( $key == '_um_search_filters' ) {
|
||||
|
||||
$temp_value = array();
|
||||
|
||||
if ( ! empty( $value ) ) {
|
||||
foreach ( $value as $k ) {
|
||||
$filter_type = $this->filter_types[ $k ];
|
||||
if ( ! empty( $filter_type ) ) {
|
||||
if ( $filter_type == 'select' ) {
|
||||
if ( ! empty( $_POST[ $k ] ) ) {
|
||||
$temp_value[ $k ] = trim( $_POST[ $k ] );
|
||||
}
|
||||
} elseif ( $filter_type == 'slider' ) {
|
||||
if ( ! empty( $_POST[ $k ] ) ) {
|
||||
$temp_value[ $k ] = $_POST[ $k ];
|
||||
}
|
||||
} elseif ( $filter_type == 'timepicker' || $filter_type == 'datepicker' ) {
|
||||
if ( ! empty( $_POST[ $k . '_from' ] ) && ! empty( $_POST[ $k . '_to' ] ) ) {
|
||||
$temp_value[ $k ] = array( $_POST[ $k . '_from' ], $_POST[ $k . '_to' ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$value = $temp_value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,10 +378,11 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
*
|
||||
* @param string $filter
|
||||
* @param array $directory_data
|
||||
* @param mixed $default_value
|
||||
*
|
||||
* @return string $filter
|
||||
*/
|
||||
function show_filter( $filter, $directory_data ) {
|
||||
function show_filter( $filter, $directory_data, $default_value = false ) {
|
||||
|
||||
if ( empty( $this->filter_types[ $filter ] ) ) {
|
||||
return '';
|
||||
@@ -485,7 +518,8 @@ 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 disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) ) ?>
|
||||
<?php selected( $opt == $default_value ) ?>>
|
||||
<?php _e( $v, 'ultimate-member' ); ?>
|
||||
</option>
|
||||
|
||||
@@ -503,8 +537,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$placeholder = $this->slider_range_placeholder( $filter, $attrs );
|
||||
|
||||
if ( $range ) { ?>
|
||||
<input type="hidden" id="<?php echo $filter; ?>_min" name="<?php echo $filter; ?>[]" class="um_range_min" />
|
||||
<input type="hidden" id="<?php echo $filter; ?>_max" name="<?php echo $filter; ?>[]" class="um_range_max" />
|
||||
<input type="hidden" id="<?php echo $filter; ?>_min" name="<?php echo $filter; ?>[]" class="um_range_min" value="<?php echo ! empty( $default_value ) ? esc_attr( min( $default_value ) ) : '' ?>" />
|
||||
<input type="hidden" id="<?php echo $filter; ?>_max" name="<?php echo $filter; ?>[]" class="um_range_max" value="<?php echo ! empty( $default_value ) ? esc_attr( max( $default_value ) ) : '' ?>" />
|
||||
<div class="um-slider" data-field_name="<?php echo $filter; ?>" data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"></div>
|
||||
<div class="um-slider-range" data-placeholder="<?php echo esc_attr( $placeholder ); ?>" data-label="<?php echo ( ! empty( $attrs['label'] ) ) ? esc_attr__( stripslashes( $attrs['label'] ), 'ultimate-member' ) : ''; ?>"></div>
|
||||
<?php }
|
||||
@@ -523,12 +557,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
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-filter_name="<?php echo $filter; ?>" data-range="from" />
|
||||
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-filter_name="<?php echo $filter; ?>" data-range="to" />
|
||||
data-filter_name="<?php echo $filter; ?>" data-range="to" data-value="<?php echo ! empty( $default_value ) ? esc_attr( strtotime( max( $default_value ) ) ) : '' ?>" />
|
||||
|
||||
<?php }
|
||||
|
||||
@@ -1334,9 +1368,13 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
}
|
||||
}
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = $value;
|
||||
|
||||
break;
|
||||
case 'slider':
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = $value;
|
||||
|
||||
$field_query = array(
|
||||
'key' => $field,
|
||||
'value' => $value,
|
||||
@@ -1361,6 +1399,260 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
'inclusive' => true,
|
||||
);
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = array( $from_date, $to_date );
|
||||
|
||||
break;
|
||||
case 'timepicker':
|
||||
|
||||
if ( $value[0] == $value[1] ) {
|
||||
$field_query = array(
|
||||
'key' => $field,
|
||||
'value' => $value[0],
|
||||
);
|
||||
} else {
|
||||
$field_query = array(
|
||||
'key' => $field,
|
||||
'value' => $value,
|
||||
'compare' => 'BETWEEN',
|
||||
'type' => 'TIME',
|
||||
'inclusive' => true,
|
||||
);
|
||||
}
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = $value;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( ! empty( $field_query ) && $field_query !== true ) {
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $field_query ) );
|
||||
}
|
||||
|
||||
break;
|
||||
case 'role':
|
||||
$value = explode( '||', $value );
|
||||
$value = array_map( 'strtolower', $value );
|
||||
|
||||
if ( ! empty( $this->query_args['role__in'] ) ) {
|
||||
$this->query_args['role__in'] = is_array( $this->query_args['role__in'] ) ? $this->query_args['role__in'] : array( $this->query_args['role__in'] );
|
||||
$default_role = array_intersect( $this->query_args['role__in'], $value );
|
||||
$um_role = array_diff( $value, $default_role );
|
||||
|
||||
foreach ( $um_role as $key => &$val ) {
|
||||
$val = 'um_' . str_replace( ' ', '-', $val );
|
||||
}
|
||||
$this->query_args['role__in'] = array_merge( $default_role, $um_role );
|
||||
} else {
|
||||
$this->query_args['role__in'] = $value;
|
||||
};
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = $this->query_args['role__in'];
|
||||
|
||||
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 ) ) );
|
||||
|
||||
$meta_query = array(
|
||||
array(
|
||||
'key' => 'birth_date',
|
||||
'value' => array( $to_date, $from_date ),
|
||||
'compare' => 'BETWEEN',
|
||||
'type' => 'DATE',
|
||||
'inclusive' => true,
|
||||
)
|
||||
);
|
||||
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = array( $to_date, $from_date );
|
||||
|
||||
break;
|
||||
case 'user_registered':
|
||||
|
||||
$offset = 0;
|
||||
if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
|
||||
$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" ) );
|
||||
|
||||
$date_query = array(
|
||||
array(
|
||||
'column' => 'user_registered',
|
||||
'before' => $to_date,
|
||||
'after' => $from_date,
|
||||
'inclusive' => true,
|
||||
),
|
||||
);
|
||||
|
||||
if ( empty( $this->query_args['date_query'] ) ) {
|
||||
$this->query_args['date_query'] = $date_query;
|
||||
} else {
|
||||
$this->query_args['date_query'] = array_merge( $this->query_args['date_query'], array( $date_query ) );
|
||||
}
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = $value;
|
||||
|
||||
break;
|
||||
case 'last_login':
|
||||
|
||||
$offset = 0;
|
||||
if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
|
||||
$offset = (int) $_POST['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
|
||||
$meta_query = array(
|
||||
array(
|
||||
'key' => '_um_last_login',
|
||||
'value' => array( $from_date, $to_date ),
|
||||
'compare' => 'BETWEEN',
|
||||
'inclusive' => true,
|
||||
)
|
||||
);
|
||||
|
||||
$this->custom_filters_in_query[ $field ] = $value;
|
||||
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set default filters
|
||||
*
|
||||
* @param $directory_data
|
||||
*/
|
||||
function default_filters( $directory_data ) {
|
||||
$default_filters = array();
|
||||
if ( ! empty( $directory_data['search_filters'] ) ) {
|
||||
$default_filters = maybe_unserialize( $directory_data['search_filters'] );
|
||||
}
|
||||
|
||||
$gmt_offset = get_post_meta( $directory_data['form_id'], '_um_search_filters_gmt', true );
|
||||
|
||||
if ( empty( $default_filters ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ( $default_filters as $field => $value ) {
|
||||
|
||||
//unable default filter in case if we select other value in frontend filters
|
||||
if ( in_array( $field, array_keys( $this->custom_filters_in_query ) ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch ( $field ) {
|
||||
default:
|
||||
|
||||
$filter_type = $this->filter_types[ $field ];
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
* @type filter
|
||||
* @title um_query_args_{$field}__filter
|
||||
* @description Change field's query for search at Members Directory
|
||||
* @input_vars
|
||||
* [{"var":"$field_query","type":"array","desc":"Field query"}]
|
||||
* @change_log
|
||||
* ["Since: 2.0"]
|
||||
* @usage
|
||||
* <?php add_filter( 'um_query_args_{$field}__filter', 'function_name', 10, 1 ); ?>
|
||||
* @example
|
||||
* <?php
|
||||
* add_filter( 'um_query_args_{$field}__filter', 'my_query_args_filter', 10, 1 );
|
||||
* function my_query_args_filter( $field_query ) {
|
||||
* // your code here
|
||||
* return $field_query;
|
||||
* }
|
||||
* ?>
|
||||
*/
|
||||
$field_query = apply_filters( "um_query_args_{$field}__filter", false, $field, $value, $filter_type );
|
||||
|
||||
if ( ! $field_query ) {
|
||||
|
||||
switch ( $filter_type ) {
|
||||
default:
|
||||
|
||||
$field_query = apply_filters( "um_query_args_{$field}_{$filter_type}__filter", false, $field, $value, $filter_type );
|
||||
|
||||
break;
|
||||
case 'select':
|
||||
if ( ! is_array( $value ) ) {
|
||||
$value = array( $value );
|
||||
}
|
||||
|
||||
$field_query = array( 'relation' => 'OR' );
|
||||
|
||||
foreach ( $value as $single_val ) {
|
||||
$arr_meta_query = array(
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => trim( $single_val ),
|
||||
'compare' => '=',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => serialize( strval( trim( $single_val ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
),
|
||||
array(
|
||||
'key' => $field,
|
||||
'value' => '"' . trim( $single_val ) . '"',
|
||||
'compare' => 'LIKE',
|
||||
)
|
||||
);
|
||||
|
||||
if ( is_numeric( $single_val ) ) {
|
||||
|
||||
$arr_meta_query[] = array(
|
||||
'key' => $field,
|
||||
'value' => serialize( intval( trim( $single_val ) ) ),
|
||||
'compare' => 'LIKE',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
$field_query = array_merge( $field_query, $arr_meta_query );
|
||||
}
|
||||
|
||||
break;
|
||||
case 'slider':
|
||||
|
||||
$field_query = array(
|
||||
'key' => $field,
|
||||
'value' => $value,
|
||||
'compare' => 'BETWEEN',
|
||||
'inclusive' => true,
|
||||
);
|
||||
|
||||
break;
|
||||
case 'datepicker':
|
||||
|
||||
$offset = 0;
|
||||
if ( is_numeric( $gmt_offset ) ) {
|
||||
$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
|
||||
$field_query = array(
|
||||
'key' => $field,
|
||||
'value' => array( $from_date, $to_date ),
|
||||
'compare' => 'BETWEEN',
|
||||
'inclusive' => true,
|
||||
);
|
||||
|
||||
break;
|
||||
case 'timepicker':
|
||||
|
||||
@@ -1426,8 +1718,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
break;
|
||||
case 'user_registered':
|
||||
$offset = 0;
|
||||
if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
|
||||
$offset = (int) $_POST['gmt_offset'];
|
||||
if ( is_numeric( $gmt_offset ) ) {
|
||||
$offset = $gmt_offset;
|
||||
}
|
||||
|
||||
$from_date = date( 'Y-m-d H:s:i', strtotime( date( 'Y-m-d H:s:i', min( $value ) ) . "+$offset hours" ) );
|
||||
@@ -1451,8 +1743,8 @@ 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'];
|
||||
if ( is_numeric( $gmt_offset ) ) {
|
||||
$offset = $gmt_offset;
|
||||
}
|
||||
|
||||
$from_date = (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ); // client time zone offset
|
||||
@@ -1469,12 +1761,10 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get data array for pagination
|
||||
*
|
||||
@@ -1769,6 +2059,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
// handle filters
|
||||
$this->filters( $directory_data );
|
||||
|
||||
$this->default_filters( $directory_data );
|
||||
|
||||
/**
|
||||
* UM hook
|
||||
*
|
||||
@@ -1935,5 +2227,18 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
|
||||
function default_filter_settings() {
|
||||
UM()->admin()->check_ajax_nonce();
|
||||
|
||||
$filter_key = sanitize_key( $_REQUEST['key'] );
|
||||
$directory_id = absint( $_REQUEST['directory_id'] );
|
||||
|
||||
$html = $this->show_filter( $filter_key, array( 'form_id' => $directory_id ) );
|
||||
|
||||
wp_send_json_success( array( 'field_html' => $html ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user