From 58b8cc530b84cf57f82e23db4515028295a78adf Mon Sep 17 00:00:00 2001 From: nikitasinelnikov Date: Fri, 30 Aug 2019 12:54:50 +0300 Subject: [PATCH] - member directory; --- assets/js/um-members.js | 865 ++++++++++++----------- includes/core/class-member-directory.php | 4 + templates/members.php | 26 +- 3 files changed, 457 insertions(+), 438 deletions(-) diff --git a/assets/js/um-members.js b/assets/js/um-members.js index 440884e3..109cdb2f 100644 --- a/assets/js/um-members.js +++ b/assets/js/um-members.js @@ -24,7 +24,7 @@ function um_get_data_for_directory( directory, search_key ) { var url_data = um_parse_current_url(); jQuery.each( url_data, function( key ) { - if ( key.indexOf( '_' + hash ) !== -1 ) { + if ( key.indexOf( '_' + hash ) !== -1 && url_data[ key ] !== '' ) { data[ key.replace( '_' + hash, '' ) ] = url_data[ key ]; } }); @@ -177,21 +177,30 @@ function um_ajax_get_members( directory, args ) { if ( filter.find( '.um-slider' ).length ) { var filter_name = filter.find( '.um-slider' ).data('field_name'); - var value = um_get_data_for_directory( directory, 'filter_' + filter_name ); + var value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); if ( typeof value != 'undefined' ) { - request[ filter_name ] = value; + request[ filter_name ] = [ value_from, value_to ]; } } else if ( filter.find( '.um-datepicker-filter' ).length ) { var filter_name = filter.find( '.um-datepicker-filter' ).data('filter_name'); - var value = um_get_data_for_directory( directory, 'filter_' + filter_name ); + var value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); if ( typeof value != 'undefined' ) { - request[ filter_name ] = value; + request[ filter_name ] = [ value_from, value_to ]; + } + } else if ( filter.find( '.um-timepicker-filter' ).length ) { + var filter_name = filter.find( '.um-timepicker-filter' ).data('filter_name'); + var value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + if ( typeof value != 'undefined' ) { + request[ filter_name ] = [ value_from, value_to ]; } } else { var filter_name = filter.find('select').attr('name'); var value = um_get_data_for_directory( directory, 'filter_' + filter_name ); if ( typeof value != 'undefined' ) { - request[ filter_name ] = value; + request[ filter_name ] = value.split( '||' ); } } }); @@ -261,7 +270,6 @@ function UM_Member_Grid( container ) { function um_change_tag( directory ) { - var unique_id = um_members_get_unique_id( directory ); var filters_data = []; var filter_array = []; @@ -275,83 +283,156 @@ function um_change_tag( directory ) { filter_range, filter_value_title; - if( filter.find('input.um-datepicker-filter').length ) { - hoper = 'datepicker'; + var filter_type; + if ( filter.find('input.um-datepicker-filter').length ) { + filter_type = 'datepicker'; - filter.find('input.um-datepicker-filter').each(function() { - var _this = jQuery(this); - var obj = {}; - - if( _this.length ) { - query_value = um_get_directory_storage( directory, 'filter_' + _this.data('filter_name') ); - filter_name = _this.data('filter_name'); - filter_range = _this.data('range'); - - if ( query_value !== null ) { - if( query_value[filter_range] ) { - obj.name = filter_name; - obj.label = _this.attr('placeholder'); - obj.range = filter_range; - obj.value_title = _this.val(); - filter_array.push(obj); - } - } + filter.find('input.um-datepicker-filter').each( function() { + var range = jQuery(this).data('range'); + if ( range === 'to' ) { + return; } + + var filter_name = jQuery(this).data('filter_name'); + + var filter_value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var filter_value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + if ( typeof filter_value_from === 'undefined' && typeof filter_value_to === 'undefined' ) { + return; + } + + var from_val = jQuery(this).val(); + var to_val = directory.find('input.um-datepicker-filter[data-range="to"][data-filter_name="' + filter_name + '"]').val(); + + var value; + if ( from_val !== '' && to_val !== '' ) { + value = from_val + ' - ' + to_val; + } else if ( from_val === '' ) { + value = 'before ' + to_val; + } else if ( to_val === '' ) { + value = 'since ' + from_val; + } + + filters_data.push( {'name':filter_name, 'label':jQuery(this).data('filter-label'), 'value_label': value, 'value':[filter_value_from, filter_value_to], 'type':filter_type} ); }); + } else if( filter.find('input.um-timepicker-filter').length ) { + filter_type = 'timepicker'; + + filter.find('input.um-timepicker-filter').each( function() { + var range = jQuery(this).data('range'); + if ( range === 'to' ) { + return; + } + + var filter_name = jQuery(this).data('filter_name'); + + var filter_value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var filter_value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + if ( typeof filter_value_from === 'undefined' && typeof filter_value_to === 'undefined' ) { + return; + } + + var from_val = jQuery(this).val(); + var to_val = directory.find('input.um-timepicker-filter[data-range="to"][data-filter_name="' + filter_name + '"]').val(); + + var value; + if ( from_val !== '' && to_val !== '' ) { + value = from_val + ' - ' + to_val; + } else if ( from_val === '' ) { + value = 'before ' + to_val; + } else if ( to_val === '' ) { + value = 'since ' + from_val; + } + + filters_data.push( {'name':filter_name, 'label':jQuery(this).data('filter-label'), 'value_label': value, 'value':[filter_value_from, filter_value_to], 'type':filter_type} ); + }); } else if( filter.find('select').length ) { - hoper = 'select'; + filter_type = 'select'; filter_name = filter.find('select').attr('name'); - query_value = um_get_directory_storage( directory, 'filter_' + filter_name ); - filter_title = filter.find('select').data('placeholder'); - filter_value_title; + + var filter_value = um_get_data_for_directory( directory, 'filter_' + filter_name ); + if ( typeof filter_value == 'undefined' ) { + filter_value = []; + } else { + filter_value = filter_value.split( '||' ); + } + + jQuery.each( filter_value, function(i) { + var filter_value_title = filter.find('select option[value="' + filter_value[ i ] + '"]').data('value_label'); + filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':filter_value[ i ], 'type':filter_type} ); + }); } else if( filter.find('div.ui-slider').length ) { - hoper = 'slider'; + filter_type = 'slider'; - filter_name = filter.find('div.ui-slider').data('field_name'); - query_value = um_get_directory_storage( directory, 'filter_' + filter_name ); + filter_name = filter.find('div.ui-slider').data( 'field_name' ); + var filter_value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var filter_value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + + if ( typeof filter_value_from === 'undefined' && typeof filter_value_to === 'undefined' ) { + return; + } filter_title = filter.find('div.um-slider-range').data('label'); - filter_value_title; + var filter_value_title = filter.find('div.um-slider-range').data( 'placeholder' ).replace( '\{min_range\}', filter_value_from ) + .replace( '\{max_range\}', filter_value_to ) + .replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') ); + + filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':[filter_value_from, filter_value_to], 'type':filter_type} ); } - if ( typeof( query_value ) != 'undefined' && query_value != null) { - if ( typeof( query_value ) == 'string' ) { - filter_value_title = filter.find('select option[value="' + query_value + '"]').data('value_label'); - filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':query_value, 'unique_id':unique_id} ); - } else if( hoper == 'datepicker' ) { // после сформированных данных - jQuery.each( filter_array, function(e) { - var find = filters_data.find(function (item) { - return item.name == filter_array[e].name && item.range == filter_array[e].range; - }); - if( typeof( find ) == 'undefined' ) { - filters_data.push( - { - 'name':filter_array[e].name, - 'range':filter_array[e].range, - 'label':filter_array[e].label, - 'value_label':filter_array[e].value_title, - 'value':query_value[filter_array[e].range], - 'unique_id':unique_id - } - ); - } - }) - - } else if( hoper == 'slider' ) { - filter_value_title = query_value[0] + " - " + query_value[1]; - filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label': filter_value_title, 'value': query_value, 'unique_id':unique_id} ); - } else { - jQuery.each( query_value, function(e) { - filter_value_title = filter.find('select option[value="' + query_value[e] + '"]').data('value_label'); - filters_data.push( {'name': filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':query_value[e], 'unique_id':unique_id} ); - }); - } - } + // if ( filter.find('input.um-datepicker-filter').length ) { + // hoper = 'datepicker'; + // + // filter.find('input.um-datepicker-filter').each(function() { + // var _this = jQuery(this); + // var obj = {}; + // + // if( _this.length ) { + // query_value = um_get_directory_storage( directory, 'filter_' + _this.data('filter_name') ); + // filter_name = _this.data('filter_name'); + // filter_range = _this.data('range'); + // + // if ( query_value !== null ) { + // if( query_value[filter_range] ) { + // obj.name = filter_name; + // obj.label = _this.attr('placeholder'); + // obj.range = filter_range; + // obj.value_title = _this.val(); + // filter_array.push(obj); + // } + // } + // } + // }); + // + // } + // + // if ( typeof( query_value ) != 'undefined' && query_value != null) { + // if( hoper == 'datepicker' ) { + // jQuery.each( filter_array, function(e) { + // var find = filters_data.find(function (item) { + // return item.name == filter_array[e].name && item.range == filter_array[e].range; + // }); + // if( typeof( find ) == 'undefined' ) { + // filters_data.push( + // { + // 'name':filter_array[e].name, + // 'range':filter_array[e].range, + // 'label':filter_array[e].label, + // 'value_label':filter_array[e].value_title, + // 'value':query_value[filter_array[e].range], + // 'unique_id':unique_id + // } + // ); + // } + // }) + // + // } + // } }); directory.find('.um-members-filter-tag').remove(); @@ -656,168 +737,77 @@ jQuery(document).ready( function() { */ - /** - * First Page Loading - */ + //filters controls + jQuery('.um-member-directory-filters a').click( function() { + var search_bar = jQuery(this).parents('.um-directory').find('.um-search'); - - //Init Directories - jQuery( '.um-directory' ).each( function() { - var directory = jQuery(this); - var hash = um_members_get_hash( directory ); - um_member_directories.push( hash ); - - var show_after_search = false; - var search = um_get_search( directory ); - if ( search && typeof search !== 'undefined' ) { - show_after_search = true; - } - - if ( ! ( directory.data( 'only_search' ) > 0 && show_after_search ) ) { - //show preloader at first - um_members_show_preloader( directory ); + if ( search_bar.is( ':visible' ) ) { + search_bar.slideUp(650); } else { + search_bar.slideDown(650); + } + }); + + + //filtration process + jQuery( document.body ).on( 'change', '.um-search-filter select', function() { + if ( jQuery(this).val() === '' ) { return; } + var directory = jQuery(this).parents('.um-directory'); + + if ( um_is_directory_busy( directory ) ) { + return; + } + + var filter_name = jQuery(this).prop('name'); + + var current_value = um_get_data_for_directory( directory, 'filter_' + filter_name ); + if ( typeof current_value == 'undefined' ) { + current_value = []; + } else { + current_value = current_value.split( '||' ); + } + + if ( -1 === jQuery.inArray( jQuery(this).val(), current_value ) ) { + current_value.push( jQuery(this).val() ); + current_value = current_value.join( '||' ); + + um_set_url_from_data( directory, 'filter_' + filter_name, current_value ); + + //set 1st page after filtration + directory.data( 'page', 1 ); + um_set_url_from_data( directory, 'page', 1 ); + } + + jQuery(this).val('').trigger( 'change' ); + um_ajax_get_members( directory ); - // if ( jQuery('#tmpl-um-members-filtered-line').length ) { - // var unique_id = um_members_get_unique_id( directory ); - // var filters_data = []; - // - // var filter_array = []; - // - // directory.find('.um-search-filter').each( function() { - // - // var filter = jQuery(this); - // var hoper, - // filter_name, - // query_value, - // filter_title, - // filter_range, - // filter_value_title; - // - // if( filter.find('input.um-datepicker-filter').length ) { - // hoper = 'datepicker'; - // - // filter.find('input.um-datepicker-filter').each(function() { - // var _this = jQuery(this); - // var obj = {}; - // - // if( _this.length ) { - // query_value = um_get_directory_storage( directory, 'filter_' + _this.data('filter_name') ); - // filter_name = _this.data('filter_name'); - // filter_range = _this.data('range'); - // - // if ( query_value !== null ) { - // if( query_value[filter_range] ) { - // obj.name = filter_name; - // obj.label = _this.attr('placeholder'); - // obj.range = filter_range; - // obj.value_title = _this.val(); - // filter_array.push(obj); - // } - // } - // } - // }); - // - // } else if( filter.find('select').length ) { - // hoper = 'select'; - // - // filter_name = filter.find('select').attr('name'); - // query_value = um_get_directory_storage( directory, 'filter_' + filter_name ); - // - // filter_title = filter.find('select').data('placeholder'); - // filter_value_title; - // - // } else if( filter.find('div.ui-slider').length ) { - // hoper = 'slider'; - // - // filter_name = filter.find('div.ui-slider').data('field_name'); - // query_value = um_get_directory_storage( directory, 'filter_' + filter_name ); - // - // filter_title = filter.find('div.um-slider-range').data('label'); - // filter_value_title; - // - // } - // - // if ( typeof( query_value ) != 'undefined' && query_value != null) { - // if ( typeof( query_value ) == 'string' ) { - // filter_value_title = filter.find('select option[value="' + query_value + '"]').data('value_label'); - // filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':query_value, 'unique_id':unique_id} ); - // } else if( hoper == 'datepicker' ) { // после сформированных данных - // jQuery.each( filter_array, function(e) { - // var find = filters_data.find(function (item) { - // return item.name == filter_array[e].name && item.range == filter_array[e].range; - // }); - // if( typeof( find ) == 'undefined' ) { - // filters_data.push( - // { - // 'name':filter_array[e].name, - // 'range':filter_array[e].range, - // 'label':filter_array[e].label, - // 'value_label':filter_array[e].value_title, - // 'value':query_value[filter_array[e].range], - // 'unique_id':unique_id - // } - // ); - // } - // }) - // - // } else if( hoper == 'slider' ) { - // filter_value_title = query_value[0] + " - " + query_value[1]; - // filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label': filter_value_title, 'value': query_value, 'unique_id':unique_id} ); - // } else { - // jQuery.each( query_value, function(e) { - // filter_value_title = filter.find('select option[value="' + query_value[e] + '"]').data('value_label'); - // filters_data.push( {'name': filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':query_value[e], 'unique_id':unique_id} ); - // }); - // } - // } - // }); - // - // - // directory.find('.um-members-filter-tag').remove(); - // - // var filters_template = wp.template( 'um-members-filtered-line' ); - // directory.find('.um-filtered-line').prepend( filters_template( {'filters': filters_data} ) ); - // - // if ( filters_data.length > 0 ) { - // directory.find('.um-filtered-line').show(); - // show_after_search = false; - // } else { - // directory.find('.um-filtered-line').hide(); - // show_after_search = true; - // } - // } - - // if ( jQuery('#tmpl-um-members-filtered-line').length ) { - // um_change_tag( directory ); - // } - - // if ( directory.data( 'only_search' ) > 0 && show_after_search ) { - // um_members_hide_preloader( directory ); - // return; - // } - - //um_ajax_get_members( directory, {page: page, sorting: sort} ); + um_change_tag( directory ); }); //slider filter jQuery( '.um-slider' ).each( function() { - var slider = jQuery( this ); - var directory = jQuery(this).parents('.um-directory'); + var slider = jQuery( this ); + var directory = slider.parents('.um-directory'); - var default_value = um_get_data_for_directory( directory, slider.data('field_name') ); + var filter_name = slider.data('field_name'); - - //var default_value = um_get_directory_storage( directory, 'filter_' + slider.data('field_name') ); - if ( default_value == null ) { - default_value = [ parseInt( slider.data('min') ), parseInt( slider.data('max') ) ]; + var min_default_value = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var max_default_value = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + if ( typeof min_default_value == 'undefined' ) { + min_default_value = parseInt( slider.data('min') ); } + if ( typeof max_default_value == 'undefined' ) { + 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') ), @@ -832,10 +822,15 @@ jQuery(document).ready( function() { }, stop: function( event, ui ) { if ( ! um_is_directory_busy( directory ) ) { - um_set_directory_storage( directory, 'filter_' + jQuery(this).data('field_name'), ui.values, true ); - um_set_directory_storage( directory, 'page', 1, true ); - um_change_tag( directory ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_from', ui.values[0] ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', ui.values[1] ); + + //set 1st page after filtration + directory.data( 'page', 1 ); + um_set_url_from_data( directory, 'page', 1 ); um_ajax_get_members( directory ); + + um_change_tag( directory ); } } }); @@ -873,40 +868,37 @@ jQuery(document).ready( function() { var filter_name = elem.data( 'filter_name' ); var range = elem.data( 'range' ); - var current_value = um_get_data_for_directory( directory, 'um-' + filter_name ); - if ( typeof current_value === "undefined" ) { - current_value = {}; + var current_value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var current_value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + if ( typeof current_value_from === "undefined" ) { + current_value_from = min / 1000; + } + if ( typeof current_value_to === "undefined" ) { + current_value_to = max / 1000; } var select_val = context.select / 1000; var change_val = elem.val(); if ( range === 'from' ) { - if( select_val !== null && ! isNaN( select_val ) ) { - current_value.from = select_val; - } else { - if ( change_val == '' ) { - delete current_value.from; - //console.warn('Elem val from: ' + change_val); - } - } + current_value_from = select_val; } else if ( range === 'to' ) { - if( select_val !== null && ! isNaN( select_val ) ) { - current_value.to = select_val; - } else { - if ( change_val == '' ) { - delete current_value.to; - //console.warn('Elem val to: ' + change_val); - } - } + current_value_to = select_val; } + um_set_url_from_data( directory, 'filter_' + filter_name + '_from', current_value_from ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', current_value_to ); + //set 1st page after filtration - //um_set_directory_storage( directory, 'page', 1, true ); + directory.data( 'page', 1 ); + um_set_url_from_data( directory, 'page', 1 ); um_ajax_get_members( directory ); - //um_change_tag( directory ); + um_change_tag( directory ); + + //elem.val(''); + //elem.data('value',''); } }); @@ -915,24 +907,27 @@ jQuery(document).ready( function() { var $frange = elem.data('range'); var $directory = elem.parents('.um-directory'); - var query_value = um_get_data_for_directory( $directory, 'um-' + $fname ); + var query_value = um_get_data_for_directory( $directory, 'filter_' + $fname + '_' + $frange ); if ( typeof query_value !== 'undefined' ) { - if ( typeof( query_value[$frange] ) !== 'undefined' ) { - $picker.set( 'select', query_value[$frange]*1000 ); - } + $picker.set( 'select', query_value*1000 ); + //elem.attr('data-value',elem.val()); + //elem.val(elem.val()); + //elem.val('data-value', query_value*100); } }); - //timepicker filter jQuery('.um-timepicker-filter').each( function() { var elem = jQuery(this); //using arrays formatted as [HOUR,MINUTE] - elem.pickatime({ + var min = elem.data('min'); + var max = elem.data('max'); + + var $input = elem.pickatime({ format: elem.data('format'), interval: parseInt( elem.data('intervals') ), min: elem.data('min'), @@ -951,46 +946,177 @@ jQuery(document).ready( function() { var filter_name = elem.data( 'filter_name' ); var range = elem.data( 'range' ); - var current_value = um_get_data_for_directory( directory, 'um-' + filter_name ); - if ( typeof current_value === "undefined" ) { - current_value = {}; + var current_value_from = um_get_data_for_directory( directory, 'filter_' + filter_name + '_from' ); + var current_value_to = um_get_data_for_directory( directory, 'filter_' + filter_name + '_to' ); + if ( typeof current_value_from === "undefined" ) { + current_value_from = min; + } + if ( typeof current_value_to === "undefined" ) { + current_value_to = max; } - var select_val = context.select / 1000; - var change_val = elem.val(); + if ( typeof context.select !== 'undefined' ) { + var select_val = context.select / 60; + var change_val = elem.val(); - if ( range === 'from' ) { - if( select_val !== null && ! isNaN( select_val ) ) { - current_value.from = select_val; - } else { - if ( change_val == '' ) { - delete current_value.from; - //console.warn('Elem val from: ' + change_val); - } + if ( range === 'from' ) { + current_value_from = select_val + ':00'; + } else if ( range === 'to' ) { + current_value_to = select_val + ':00'; } - } else if ( range === 'to' ) { - if( select_val !== null && ! isNaN( select_val ) ) { - current_value.to = select_val; - } else { - if ( change_val == '' ) { - delete current_value.to; - //console.warn('Elem val to: ' + change_val); - } + } else { + if ( range === 'from' ) { + current_value_from = min; + } else if ( range === 'to' ) { + current_value_to = max; } } + $input.clear(); + + um_set_url_from_data( directory, 'filter_' + filter_name + '_from', current_value_from ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', current_value_to ); + //set 1st page after filtration - //um_set_directory_storage( directory, 'page', 1, true ); + directory.data( 'page', 1 ); + um_set_url_from_data( directory, 'page', 1 ); um_ajax_get_members( directory ); - //um_change_tag( directory ); + um_change_tag( directory ); } }); + + + var $picker = $input.pickatime('picker'); + var $fname = elem.data('filter_name'); + var $frange = elem.data('range'); + var $directory = elem.parents('.um-directory'); + + var query_value = um_get_data_for_directory( $directory, 'filter_' + $fname + '_' + $frange ); + if ( typeof query_value !== 'undefined' ) { + $picker.set( 'select', query_value ); + } }); + jQuery( document.body ).on( 'click', '.um-members-filter-remove', function() { + var directory = jQuery(this).parents('.um-directory'); + + if ( um_is_directory_busy( directory ) ) { + return; + } + + var removeItem = jQuery(this).data('value'); + var filter_name = jQuery(this).data('name'); + + var type = jQuery(this).data('type'); + if ( type === 'select' ) { + + var current_value = um_get_data_for_directory( directory, 'filter_' + filter_name ); + if ( typeof current_value == 'undefined' ) { + current_value = []; + } else { + current_value = current_value.split( '||' ); + } + + if ( -1 !== jQuery.inArray( removeItem.toString(), current_value ) ) { + current_value = jQuery.grep( current_value, function( value ) { + return value !== removeItem.toString(); + }); + } + + if ( ! current_value.length ) { + current_value = ''; + } + + um_set_url_from_data( directory, 'filter_' + filter_name, current_value ); + + } else if ( type === 'slider' ) { + um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' ); + } else if ( type === 'datepicker' ) { + um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' ); + } else if ( type === 'timepicker' ) { + um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' ); + } + + + //set 1st page after filtration + directory.data( 'page', 1 ); + um_set_url_from_data( directory, 'page', 1 ); + jQuery(this).parents('.um-members-filter-tag').remove(); + + um_ajax_get_members( directory ); + + if ( directory.find( '.um-members-filter-remove' ).length === 0 ) { + directory.find('.um-clear-filters-a').hide(); + } else { + directory.find('.um-clear-filters-a').show(); + } + }); + + + jQuery( document.body ).on( 'click', '.um-clear-filters-a', function() { + var directory = jQuery(this).parents('.um-directory'); + if ( um_is_directory_busy( directory ) ) { + return; + } + + directory.find( '.um-members-filter-remove' ).each( function() { + var removeItem = jQuery(this).data('value'); + var filter_name = jQuery(this).data('name'); + + var type = jQuery(this).data('type'); + if ( type === 'select' ) { + + var current_value = um_get_data_for_directory( directory, 'filter_' + filter_name ); + if ( typeof current_value == 'undefined' ) { + current_value = []; + } else { + current_value = current_value.split( '||' ); + } + + if ( -1 !== jQuery.inArray( removeItem.toString(), current_value ) ) { + current_value = jQuery.grep( current_value, function( value ) { + return value !== removeItem.toString(); + }); + } + + if ( ! current_value.length ) { + current_value = ''; + } + + um_set_url_from_data( directory, 'filter_' + filter_name, current_value ); + + } else if ( type === 'slider' ) { + um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' ); + } else if ( type === 'datepicker' ) { + um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' ); + } else if ( type === 'timepicker' ) { + um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' ); + um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' ); + } + }); + + //set 1st page after filtration + directory.data( 'page', 1 ); + um_set_url_from_data( directory, 'page', 1 ); + directory.find('.um-members-filter-tag').remove(); + + um_ajax_get_members( directory ); + + jQuery(this).hide(); + }); + + + + // jQuery('.um-directory .um-member-connect').each(function(){ // if ( jQuery(this).find('a').length == 0 ) { @@ -1032,181 +1158,56 @@ jQuery(document).ready( function() { - //filters controls - jQuery('.um-member-directory-filters').click( function() { - var search_bar = jQuery(this).parents('.um-directory').find('.um-search'); - if ( search_bar.is(':visible') ) { - search_bar.slideUp(650); + + + // jQuery('.um-close-filter').click( function() { + // var search_bar = jQuery(this).parents('.um-directory').find('.um-search'); + // search_bar.slideUp(650); + // }); + + + /** + * First Page Loading + */ + + + //Init Directories + jQuery( '.um-directory' ).each( function() { + var directory = jQuery(this); + var hash = um_members_get_hash( directory ); + um_member_directories.push( hash ); + + var show_after_search = false; + var search = um_get_search( directory ); + if ( search && typeof search !== 'undefined' ) { + show_after_search = true; + } + + if ( ! ( directory.data( 'only_search' ) > 0 && show_after_search ) ) { + //show preloader at first + um_members_show_preloader( directory ); } else { - search_bar.slideDown(650); - } - }); - - - jQuery('.um-close-filter').click( function() { - var search_bar = jQuery(this).parents('.um-directory').find('.um-search'); - search_bar.slideUp(650); - }); - - //filtration process - jQuery( document.body ).on( 'change', '.um-search-filter select', function() { - if ( jQuery(this).val() === '' ) { return; } - var directory = jQuery(this).parents('.um-directory'); - - if ( um_is_directory_busy( directory ) ) { - return; - } - - var filter_name = jQuery(this).prop('name'); - - var current_value = um_get_data_for_directory( directory, 'filter_' + filter_name ); - if ( typeof current_value == 'undefined' ) { - current_value = []; - } else { - current_value = current_value.split( '||' ); - } - - if ( -1 === jQuery.inArray( jQuery(this).val(), current_value ) ) { - current_value.push( jQuery(this).val() ); - current_value = current_value.join( '||' ); - - um_set_url_from_data( directory, 'filter_' + filter_name, current_value ); - - //set 1st page after filtration - directory.data( 'page', 1 ); - um_set_url_from_data( directory, 'page', 1 ); - } - - jQuery(this).val('').trigger('change'); - - um_ajax_get_members( directory ); - - //um_change_tag( directory ); - - }); - - - jQuery( document.body ).on( 'click', '.um-members-filter-remove', function() { - var directory = jQuery(this).parents('.um-directory'); - - if ( um_is_directory_busy( directory ) ) { - return; - } - - var range = jQuery(this).data('range'); - - var removeItem = jQuery(this).data('value'); - var filter_name = jQuery(this).data('name'); - - var current_value = um_get_directory_storage( directory, 'filter_' + filter_name ); - - if ( current_value !== null && -1 != jQuery.inArray( removeItem.toString(), current_value ) ) { - current_value = jQuery.grep( current_value, function( value ) { - return value != removeItem; - }); - - if ( current_value.length > 0 ) { - um_set_directory_storage( directory, 'filter_' + filter_name, current_value, true ); - } else { - um_delete_directory_storage( directory, 'filter_' + filter_name ); - } - - //set 1st page after filtration - um_set_directory_storage( directory, 'page', 1, true ); - - jQuery(this).parents('.um-members-filter-tag').remove(); - } else if( current_value !== null && current_value[range] !== undefined ) { - directory.find('input.um-datepicker-filter[data-filter_name="' + filter_name + '"][data-range="' + range + '"]').val('').change(); - - delete current_value[range]; - if ( jQuery.isEmptyObject( current_value ) === false ) { - um_set_directory_storage( directory, 'filter_' + filter_name, current_value, true ); - } else { - um_delete_directory_storage( directory, 'filter_' + filter_name ); - } - jQuery(this).parents('.um-members-filter-tag').remove(); - } else { - if( current_value.length > 1 && current_value.includes(removeItem)) { - current_value.splice( current_value.indexOf(removeItem), 1 ); - um_set_directory_storage( directory, 'filter_' + filter_name, current_value, true ); - } else { - um_delete_directory_storage( directory, 'filter_' + filter_name ); - } - jQuery(this).parents('.um-members-filter-tag').remove(); - var slider = jQuery(directory).find('div.um-slider'); - slider.slider( "values", [ parseInt( slider.data('min') ), parseInt( slider.data('max') ) ] ); - //um_set_range_label( slider ); - } - um_ajax_get_members( directory ); - if ( directory.find( '.um-members-filter-remove' ).length === 0 ) { - directory.find('.um-clear-filters-a').hide(); - } else { - directory.find('.um-clear-filters-a').show(); - } + um_change_tag( directory ); + + // if ( jQuery('#tmpl-um-members-filtered-line').length ) { + // um_change_tag( directory ); + // } + + // if ( directory.data( 'only_search' ) > 0 && show_after_search ) { + // um_members_hide_preloader( directory ); + // return; + // } + + //um_ajax_get_members( directory, {page: page, sorting: sort} ); }); - jQuery( document.body ).on( 'click', '.um-clear-filters-a', function() { - var directory = jQuery(this).parents('.um-directory'); - if ( um_is_directory_busy( directory ) ) { - return; - } - directory.find( '.um-members-filter-remove' ).each( function() { - var removeItem = jQuery(this).data('value'); - var filter_name = jQuery(this).data('name'); - var range = jQuery(this).data('range'); - - //um_delete_directory_storage( directory, 'filter_' + filter_name ); - - var current_value = um_get_directory_storage( directory, 'filter_' + filter_name ); - if ( current_value !== null && -1 != jQuery.inArray( removeItem.toString(), current_value ) ) { - current_value = jQuery.grep( current_value, function( value ) { - return value != removeItem; - }); - - if ( current_value.length > 0 ) { - um_set_directory_storage( directory, 'filter_' + filter_name, current_value, true ); - } else { - um_delete_directory_storage( directory, 'filter_' + filter_name ); - } - - //set 1st page after filtration - um_set_directory_storage( directory, 'page', 1, true ); - - jQuery(this).parents('.um-members-filter-tag').remove(); - } else if( current_value !== null && current_value[range] !== undefined ) { - directory.find('input.um-datepicker-filter[data-filter_name="' + filter_name + '"][data-range="' + range + '"]').val('').change(); - - delete current_value[range]; - if ( jQuery.isEmptyObject( current_value ) === false ) { - um_set_directory_storage( directory, 'filter_' + filter_name, current_value, true ); - } else { - um_delete_directory_storage( directory, 'filter_' + filter_name ); - } - jQuery(this).parents('.um-members-filter-tag').remove(); - } else { - um_delete_directory_storage( directory, 'filter_' + filter_name ); - jQuery(this).parents('.um-members-filter-tag').remove(); - var slider = jQuery(directory).find('div.um-slider'); - slider.slider( "values", [ parseInt( slider.data('min') ), parseInt( slider.data('max') ) ] ); - um_set_range_label( slider ); - } - }); - - //set 1st page after filtration - um_set_directory_storage( directory, 'page', 1, true ); - directory.find('.um-members-filter-tag').remove(); - - um_ajax_get_members( directory ); - - jQuery(this).hide(); - }); }); \ No newline at end of file diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index 509eb468..51998464 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -407,10 +407,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { @@ -440,11 +442,13 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { diff --git a/templates/members.php b/templates/members.php index 24de6ff0..532ee96f 100644 --- a/templates/members.php +++ b/templates/members.php @@ -22,6 +22,13 @@ if ( is_user_logged_in() ) { // Views $single_view = false; $current_view = 'grid'; + +if ( ! empty( $args['view_types'] ) && is_array( $args['view_types'] ) ) { + $args['view_types'] = array_filter( $args['view_types'], function( $item ) { + return in_array( $item, array_keys( UM()->member_directory()->view_types ) ); + }); +} + if ( empty( $args['view_types'] ) || ! is_array( $args['view_types'] ) ) { $args['view_types'] = array( 'grid', @@ -74,6 +81,12 @@ if ( isset( $args['search_fields'] ) ) { $search_filters = apply_filters( 'um_frontend_member_search_filters', array_unique( array_filter( $args['search_fields'] ) ) ); } +if ( ! empty( $search_filters ) ) { + $search_filters = array_filter( $search_filters, function( $item ) { + return in_array( $item, array_keys( UM()->member_directory()->filter_fields ) ); + }); +} + // Classes $classes = ''; if ( $search && $show_search ) { @@ -170,14 +183,15 @@ UM()->get_template( 'members-pagination.php', '', $args, true ); ?> + if ( is_array( $search_filters ) ) { ?>