- member directory default filters;

This commit is contained in:
nikitasinelnikov
2019-10-01 11:53:34 +03:00
parent 4f559f4c3a
commit 1df55d0ecf
9 changed files with 783 additions and 25 deletions
+55 -4
View File
@@ -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;
+265 -1
View File
@@ -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' ) );
}
}
+2 -1
View File
@@ -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 );
+80
View File
@@ -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 );
}
}
+17 -6
View File
@@ -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(); ?>