diff --git a/assets/js/um-members.js b/assets/js/um-members.js index fe5e4558..6ab20b40 100644 --- a/assets/js/um-members.js +++ b/assets/js/um-members.js @@ -132,18 +132,32 @@ function um_members_hide_preloader( directory ) { function um_set_range_label( slider, ui ) { - var placeholder = slider.siblings( '.um-slider-range' ).data( 'placeholder' ); + 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 ); @@ -500,11 +514,17 @@ function um_get_filters_data( directory ) { return; } - filter_title = filter.find('div.um-slider-range').data('label'); + var filter_value_title; + if ( filter_value_from === filter_value_to ) { + filter_value_title = filter.find('div.um-slider-range').data( 'placeholder-s' ).replace( '\{value\}', filter_value_from ) + .replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') ); + } else { + filter_value_title = filter.find('div.um-slider-range').data( 'placeholder-p' ).replace( '\{min_range\}', filter_value_from ) + .replace( '\{max_range\}', filter_value_to ) + .replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') ); + } - 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') ); + filter_title = 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} ); } diff --git a/assets/js/um-members.min.js b/assets/js/um-members.min.js index cbf0e82a..c3deb19c 100644 --- a/assets/js/um-members.min.js +++ b/assets/js/um-members.min.js @@ -1 +1 @@ -var um_members_directory_busy=[],um_member_directories=[],um_member_directory_last_data=[];function um_parse_current_url(){var t={},a=window.location.search.substring(1).split("&");return jQuery.each(a,function(e){var r=a[e].split("=");t[r[0]]=r[1]}),t}function um_get_data_for_directory(e,r){var t=um_members_get_hash(e),a={},i=um_parse_current_url();if(jQuery.each(i,function(e){-1!==e.indexOf("_"+t)&&""!==i[e]&&(a[e.replace("_"+t,"")]=i[e])}),r){if(void 0!==a[r])try{a[r]=decodeURIComponent(a[r])}catch(e){console.error(e)}return a[r]}return a}function um_set_url_from_data(e,r,t){var a=um_members_get_hash(e),i=um_get_data_for_directory(e),m={};jQuery.isArray(t)?(jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")):jQuery.isNumeric(t)||(t=t.split("||"),jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")),""!==t&&(m[r+"_"+a]=t),jQuery.each(i,function(e){r===e?""!==t&&(m[e+"_"+a]=t):m[e+"_"+a]=i[e]}),jQuery.each(um_member_directories,function(e){var r=um_member_directories[e];if(r!==a){var t=um_get_data_for_directory(jQuery('.um-directory[data-hash="'+r+'"]'));jQuery.each(t,function(e){m[e+"_"+r]=t[e]})}});var d=[];jQuery.each(m,function(e){d.push(e+"="+m[e])});var u="?"+(d=wp.hooks.applyFilters("um_member_directory_url_attrs",d)).join("&");"?"===u&&(u=""),window.history.pushState("string","UM Member Directory",window.location.origin+window.location.pathname+u)}function um_members_get_hash(e){return e.data("hash")}function um_is_directory_busy(e){var r=um_members_get_hash(e);return void 0!==um_members_directory_busy[r]&&um_members_directory_busy[r]}function um_members_show_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!0,e.find(".um-members-overlay").show()}function um_members_hide_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!1,e.find(".um-members-overlay").hide()}function um_set_range_label(e,r){var t=e.siblings(".um-slider-range").data("placeholder");t=r?t.replace("{min_range}",r.values[0]).replace("{max_range}",r.values[1]).replace("{field_label}",e.siblings(".um-slider-range").data("label")):t.replace("{min_range}",e.slider("values",0)).replace("{max_range}",e.slider("values",1)).replace("{field_label}",e.siblings(".um-slider-range").data("label")),e.siblings(".um-slider-range").html(t),e.siblings(".um_range_min").val(e.slider("values",0)),e.siblings(".um_range_max").val(e.slider("values",1))}function um_get_search(e){return e.find(".um-search-line").length?e.find(".um-search-line").val():""}function um_get_sort(e){return e.data("sorting")}function um_get_current_page(e){var r=e.data("page");return r&&void 0!==r||(r=1),r}function um_time_convert(e,r){var t=Math.floor(e/60),a=e%60;return 60<=a&&(a=0,24<=(t+=1)&&(t=0)),a<10&&(a="0"+a),t+":"+a}function um_ajax_get_members(s,t){var a=um_members_get_hash(s),e=um_get_current_page(s),r=um_get_search(s),i=um_get_sort(s),m=-(new Date).getTimezoneOffset()/60,_={directory_id:a,page:e,search:r,sorting:i,gmt_offset:m,post_refferer:s.data("base-post"),nonce:um_scripts.nonce};s.find(".um-search-filter").length&&s.find(".um-search-filter").each(function(){var e=jQuery(this);if(e.find(".um-slider").length){var r=e.find(".um-slider").data("field_name"),t=um_get_data_for_directory(s,"filter_"+r+"_from"),a=um_get_data_for_directory(s,"filter_"+r+"_to");void 0===t&&void 0===a||(_[r]=[t,a])}else if(e.find(".um-datepicker-filter").length){r=e.find(".um-datepicker-filter").data("filter_name"),t=um_get_data_for_directory(s,"filter_"+r+"_from"),a=um_get_data_for_directory(s,"filter_"+r+"_to");void 0===t&&void 0===a||(_[r]=[t,a])}else if(e.find(".um-timepicker-filter").length){r=e.find(".um-timepicker-filter").data("filter_name"),t=um_get_data_for_directory(s,"filter_"+r+"_from"),a=um_get_data_for_directory(s,"filter_"+r+"_to");if(void 0!==t)(i=1*(t=t.split(":"))[0])<10&&(i="0"+i),(d=1*t[1])<10&&(d="0"+d),t=i+":"+d+":00";if(void 0!==a){var i,m=a.split(":"),d=1*m[1];(i=1*m[0])<10&&(i="0"+i),d<10&&(d="0"+d),a=i+":"+d+":59"}void 0===t&&void 0===a||(_[r]=[t,a])}else if(e.find("select").length){r=e.find("select").attr("name");void 0!==(u=um_get_data_for_directory(s,"filter_"+r))&&(_[r]=u.split("||"))}else{var u;r=e.find('input[type="text"]').attr("name");void 0!==(u=um_get_data_for_directory(s,"filter_"+r))&&(_[r]=u)}}),_=wp.hooks.applyFilters("um_member_directory_filter_request",_),wp.ajax.send("um_get_members",{data:_,success:function(e){um_member_directory_last_data[a]=e,um_build_template(s,e);var r=wp.template("um-members-pagination");s.find(".um-members-pagination-box").html(r(e)),s.data("total_pages",e.pagination.total_pages),e.pagination.total_pages?(s.find(".um-member-directory-sorting-options").prop("disabled",!1),s.find(".um-member-directory-view-type").removeClass("um-disabled")):(s.find(".um-member-directory-sorting-options").prop("disabled",!0),s.find(".um-member-directory-view-type").addClass("um-disabled")),jQuery(document).trigger("um_members_rendered",t),um_init_new_dropdown(),um_members_hide_preloader(s)},error:function(e){console.log(e),um_members_hide_preloader(s)}})}function um_build_template(e,r){var t=e.data("view_type"),a=wp.template("um-member-"+t+"-"+um_members_get_hash(e));e.find(".um-members-grid, .um-members-list").remove(),e.find(".um-members-wrapper").prepend(a(r.users));var i=wp.template("um-members-header");e.find(".um-members-intro").remove(),void 0!==r.is_search&&r.is_search&&e.find(".um-members-wrapper").prepend(i(r)),e.addClass("um-loaded"),e.find(".um-members.um-members-grid").length&&UM_Member_Grid(e.find(".um-members.um-members-grid")),jQuery(document).trigger("um_build_template",[e,r]),jQuery(window).trigger("resize"),init_tipsy()}function UM_Member_Grid(e){e.find(".um-member").length&&e.imagesLoaded(function(){e.masonry({itemSelector:".um-member",columnWidth:".um-member",gutter:".um-gutter-sizer"}).on("layoutComplete",function(e,r){jQuery(document).trigger("um_grid_initialized",[e,r])})})}function um_get_filters_data(s){var _=[];return s.find(".um-search-filter").each(function(){var t,a,d,i=jQuery(this);if(i.find("input.um-datepicker-filter").length)d="datepicker",i.find("input.um-datepicker-filter").each(function(){if("to"!==jQuery(this).data("range")){var e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(s,"filter_"+e+"_from"),t=um_get_data_for_directory(s,"filter_"+e+"_to");if(void 0!==r||void 0!==t){var a,i=jQuery(this).val(),m=s.find('input.um-datepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val();i===m?a=m:""!==i&&""!==m?a=i+" - "+m:""===i?a="before "+m:""===m&&(a="since "+i),_.push({name:e,label:jQuery(this).data("filter-label"),value_label:a,value:[r,t],type:d})}}});else if(i.find("input.um-timepicker-filter").length)d="timepicker",i.find("input.um-timepicker-filter").each(function(){if("to"!==jQuery(this).data("range")){var e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(s,"filter_"+e+"_from"),t=um_get_data_for_directory(s,"filter_"+e+"_to");if(void 0!==r||void 0!==t){var a,i=jQuery(this).val(),m=s.find('input.um-timepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val();i===m?a=m:""!==i&&""!==m?a=i+" - "+m:""===i?a="before "+m:""===m&&(a="since "+i),_.push({name:e,label:jQuery(this).data("filter-label"),value_label:a,value:[r,t],type:d})}}});else if(i.find("select").length){d="select",t=i.find("select").attr("name"),a=i.find("select").data("placeholder"),m=void 0===(m=um_get_data_for_directory(s,"filter_"+t))?[]:m.split("||"),jQuery.each(m,function(e){var r=i.find('select option[value="'+m[e]+'"]').data("value_label");_.push({name:t,label:a,value_label:r,value:m[e],type:d})})}else if(i.find('input[type="text"]').length){var m;d="text",t=i.find('input[type="text"]').attr("name"),a=i.find('input[type="text"]').attr("placeholder"),void 0===(m=um_get_data_for_directory(s,"filter_"+t))&&(m=""),""!=m&&_.push({name:t,label:a,value_label:m,value:m,type:d})}else if(i.find("div.ui-slider").length){d="slider",t=i.find("div.ui-slider").data("field_name");var e=um_get_data_for_directory(s,"filter_"+t+"_from"),r=um_get_data_for_directory(s,"filter_"+t+"_to");if(void 0===e&&void 0===r)return;a=i.find("div.um-slider-range").data("label");var u=i.find("div.um-slider-range").data("placeholder").replace("{min_range}",e).replace("{max_range}",r).replace("{field_label}",i.find("div.um-slider-range").data("label"));_.push({name:t,label:a,value_label:u,value:[e,r],type:d})}}),_}function um_change_tag(e){var r=um_get_filters_data(e);e.find(".um-members-filter-tag").remove();var t=e.find(".um-filtered-line");if(t.length){var a=wp.template("um-members-filtered-line");t.prepend(a({filters:r})),0===e.find(".um-members-filter-remove").length?(e.find(".um-clear-filters").hide(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").addClass("um-header-row-invisible")):(e.find(".um-clear-filters").show(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").removeClass("um-header-row-invisible"))}}function um_run_search(e){if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=um_get_data_for_directory(e,"search");if((a=e.find(".um-search-line").val())===r||""===a&&void 0===r)um_members_hide_preloader(e);else{e.data("general_search",a),um_set_url_from_data(e,"search",a),e.data("page",1),um_set_url_from_data(e,"page","");var t=!1;if(!(t=wp.hooks.applyFilters("um_member_directory_ignore_after_search",t)))if(1===e.data("must-search")){var a=um_get_search(e);if(0===e.find(".um-members-filter-remove").length&&!a)return e.data("searched",0),e.find(".um-members-grid, .um-members-list").remove(),e.find(".um-member-directory-sorting-options").prop("disabled",!0),e.find(".um-member-directory-view-type").addClass("um-disabled"),void um_members_hide_preloader(e)}e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"),um_ajax_get_members(e)}}}jQuery(document.body).ready(function(){jQuery(".um-directory .um-search-filter select").each(function(){1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0),jQuery(this).select2("destroy").select2()}),jQuery(document.body).on("mouseover",".um-directory .um-member-directory-view-type",function(){if(!jQuery(this).hasClass("um-disabled")){var e=jQuery(this).find(".um-member-directory-view-type-a:visible");e.hide(),e.next().length?e.next().show().tipsy("show"):jQuery(this).find(".um-member-directory-view-type-a:first").show().tipsy("show")}}).on("mouseout",".um-directory .um-member-directory-view-type",function(){jQuery(this).hasClass("um-disabled")||(jQuery(this).find(".um-member-directory-view-type-a").hide().tipsy("hide"),jQuery(this).find('.um-member-directory-view-type-a[data-type="'+jQuery(this).parents(".um-directory").data("view_type")+'"]').show())}),jQuery(document.body).on("click",".um-directory .um-member-directory-view-type-a",function(){var e=jQuery(this).parents(".um-directory");if(um_is_directory_busy(e))return!1;var r=jQuery(this),t=r.parents(".um-member-directory-view-type");if(!t.hasClass("um-disabled")){um_members_show_preloader(e);var a=t.find(".um-member-directory-view-type-a:visible");a.hide(),a.next().length?a.next().show().tipsy("show"):t.find(".um-member-directory-view-type-a:first").show().tipsy("show");var i=um_member_directory_last_data[um_members_get_hash(e)];if(null!==i){var m=r.data("type");um_set_url_from_data(e,"view_type",m),e.data("view_type",m),um_build_template(e,i)}um_members_hide_preloader(e)}}),jQuery(document.body).on("click",".um-directory .um-do-search",function(){um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("keypress",".um-directory .um-search-line",function(e){13===e.which&&um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("click",".um-directory .um-member-directory-sorting-a .um-new-dropdown li a",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)&&1!==jQuery(this).data("selected")){um_members_show_preloader(e);var r=jQuery(this).data("value");e.data("sorting",r),um_set_url_from_data(e,"sort",r),um_ajax_get_members(e),jQuery(this).parents(".um-new-dropdown").find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),jQuery(this).data("selected",1).prop("data-selected",1).attr("data-selected",1),jQuery(this).parents(".um-member-directory-sorting-a").find("> a").html(jQuery(this).html())}}),jQuery(document.body).on("click",".um-directory .pagi:not(.current)",function(){if(!jQuery(this).hasClass("disabled")){var e,r=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(r))um_members_show_preloader(r),1===(e="first"===jQuery(this).data("page")?1:"prev"===jQuery(this).data("page")?1*r.data("page")-1:"next"===jQuery(this).data("page")?1*r.data("page")+1:"last"===jQuery(this).data("page")?parseInt(r.data("total_pages")):parseInt(jQuery(this).data("page")))?(r.find('.pagi[data-page="first"], .pagi[data-page="prev"]').addClass("disabled"),r.find('.pagi[data-page="prev"], .pagi[data-page="last"]').removeClass("disabled")):(e===parseInt(r.data("total_pages"))?r.find('.pagi[data-page="prev"], .pagi[data-page="last"]').addClass("disabled"):r.find('.pagi[data-page="prev"], .pagi[data-page="last"]').removeClass("disabled"),r.find('.pagi[data-page="first"], .pagi[data-page="prev"]').removeClass("disabled")),r.find(".pagi").removeClass("current"),r.find('.pagi[data-page="'+e+'"]').addClass("current"),r.data("page",e),um_set_url_from_data(r,"page",1===e?"":e),um_ajax_get_members(r)}}),jQuery(document.body).on("change",".um-directory .um-members-pagi-dropdown",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=jQuery(this).val();e.find(".pagi").removeClass("current"),e.find('.pagi[data-page="'+r+'"]').addClass("current"),e.data("page",r),um_set_url_from_data(e,"page",1===r?"":r),um_ajax_get_members(e)}}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-more a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member");return r.find(".um-member-more").hide(),r.find(".um-member-meta-main").slideDown(),r.find(".um-member-less").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-less a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member");return r.find(".um-member-less").hide(),r.find(".um-member-meta-main").slideUp(),r.find(".um-member-more").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-more a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member"),t=jQuery(this).parents(".um-members");return r.find(".um-member-more").hide(),r.find(".um-member-meta").slideDown(function(){UM_Member_Grid(t)}),r.find(".um-member-less").fadeIn(),setTimeout(function(){UM_Member_Grid(t)},100),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-less a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member"),t=jQuery(this).parents(".um-members");return r.find(".um-member-less").hide(),r.find(".um-member-meta").slideUp(function(){r.find(".um-member-more").fadeIn(),UM_Member_Grid(t)}),!1}),jQuery(".um-member-directory-filters-a").click(function(){var e=jQuery(this),r=e.parents(".um-directory").find(".um-search");r.is(":visible")?r.slideUp(250,function(){e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}):r.slideDown({duration:250,start:function(){jQuery(this).css({display:"grid"}),e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}})}),jQuery(document.body).on("change",".um-directory .um-search-filter select",function(){if(""!==jQuery(this).val()){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=jQuery(this).prop("name"),t=um_get_data_for_directory(e,"filter_"+r);t=void 0===t?[]:t.split("||"),-1===jQuery.inArray(jQuery(this).val(),t)&&(t.push(jQuery(this).val()),um_set_url_from_data(e,"filter_"+r,t=t.join("||")),e.data("page",1),um_set_url_from_data(e,"page","")),jQuery(this).find('option[value="'+jQuery(this).val()+'"]').prop("disabled",!0).hide(),1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0),jQuery(this).select2("destroy").select2(),jQuery(this).val("").trigger("change"),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled")}}}),jQuery(document.body).on("blur",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)){var r=jQuery(this).val(),t=jQuery(this).prop("name"),a=um_get_data_for_directory(e,"filter_"+t);void 0===a&&(a=""),r!==a&&(um_members_show_preloader(e),um_set_url_from_data(e,"filter_"+t,r),e.data("page",1),um_set_url_from_data(e,"page",""),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"))}}),jQuery(document.body).on("keypress",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(e){if(13===e.which){var r=jQuery(this).parents(".um-directory");if(um_is_directory_busy(r))return;var t=jQuery(this).val(),a=jQuery(this).prop("name"),i=um_get_data_for_directory(r,"filter_"+a);if(void 0===i&&(i=""),t===i)return;um_members_show_preloader(r),um_set_url_from_data(r,"filter_"+a,t),r.data("page",1),um_set_url_from_data(r,"page",""),um_ajax_get_members(r),um_change_tag(r),r.data("searched",1),r.find(".um-member-directory-sorting-options").prop("disabled",!1),r.find(".um-member-directory-view-type").removeClass("um-disabled")}}),jQuery(document.body).on("click",".um-directory .um-members-filter-remove",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)&&e){um_members_show_preloader(e);var r=jQuery(this).data("value"),t=jQuery(this).data("name"),a=jQuery(this).data("type");if("text"===a)um_set_url_from_data(e,"filter_"+t,""),jQuery('.um-search-filter input[name="'+t+'"]').val("");else if("select"===a){var i=um_get_data_for_directory(e,"filter_"+t);i=void 0===i?[]:i.split("||"),-1!==jQuery.inArray(r.toString(),i)&&(i=jQuery.grep(i,function(e){return e!==r.toString()})),i.length||(i=""),um_set_url_from_data(e,"filter_"+t,i);var m=jQuery('.um-search-filter select[name="'+t+'"]');m.find('option[value="'+r+'"]').prop("disabled",!1).show(),1d.data("total_pages")&&(r=d.data("total_pages")),d.data("page",r).attr("data-page",r),d.find(".um-member-directory-sorting").length){var t=um_get_data_for_directory(d,"sort");void 0===t&&(t=d.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]').find('a[data-default="1"]').data("value")),d.data("sorting",t);var a=d.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]');a.find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),a.find('a[data-value="'+t+'"]').data("selected",1).prop("data-selected",1).attr("data-selected",1),d.find(".um-member-directory-sorting-a").find("> a").html(a.find('a[data-value="'+t+'"]').html())}if(d.find(".um-member-directory-view-type").length){var i=um_get_data_for_directory(d,"view_type");void 0===i&&(i=d.find('.um-member-directory-view-type-a[data-default="1"]').data("type")),d.data("view_type",i),d.find(".um-member-directory-view-type .um-member-directory-view-type-a").hide(),d.find('.um-member-directory-view-type .um-member-directory-view-type-a[data-type="'+i+'"]').show()}d.find(".um-datepicker-filter").each(function(){var e=jQuery(this),r=e.pickadate("picker"),t=e.data("filter_name"),a=e.data("range"),i=um_get_data_for_directory(d,"filter_"+t+"_"+a);void 0!==i?r.set("select",1e3*i):r.clear()}),d.find(".um-slider").each(function(){var e=jQuery(this),r=e.data("field_name"),t=um_get_data_for_directory(d,"filter_"+r+"_from"),a=um_get_data_for_directory(d,"filter_"+r+"_to");void 0===t&&(t=e.data("min")),t=parseInt(t),void 0===a&&(a=e.data("max")),a=parseInt(a),e.slider("values",[t,a]),um_set_range_label(e)}),d.find(".um-timepicker-filter").each(function(){var e=jQuery(this),r=e.pickatime("picker"),t=e.data("filter_name"),a=e.data("range"),i=um_get_data_for_directory(d,"filter_"+t+"_"+a);if(void 0!==i){var m=i.split(":");r.set("select",60*m[0])}else r.clear()});var m=!1;if(!(m=wp.hooks.applyFilters("um_member_directory_ignore_after_search",m))&&1===d.data("must-search")){var u=um_get_search(d);if(!um_get_filters_data(d).length&&!u)return d.data("searched",0),void um_members_hide_preloader(d);d.data("searched",1)}um_ajax_get_members(d),um_change_tag(d)})})}); \ No newline at end of file +var um_members_directory_busy=[],um_member_directories=[],um_member_directory_last_data=[];function um_parse_current_url(){var t={},a=window.location.search.substring(1).split("&");return jQuery.each(a,function(e){var r=a[e].split("=");t[r[0]]=r[1]}),t}function um_get_data_for_directory(e,r){var t=um_members_get_hash(e),a={},i=um_parse_current_url();if(jQuery.each(i,function(e){-1!==e.indexOf("_"+t)&&""!==i[e]&&(a[e.replace("_"+t,"")]=i[e])}),r){if(void 0!==a[r])try{a[r]=decodeURIComponent(a[r])}catch(e){console.error(e)}return a[r]}return a}function um_set_url_from_data(e,r,t){var a=um_members_get_hash(e),i=um_get_data_for_directory(e),m={};jQuery.isArray(t)?(jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")):jQuery.isNumeric(t)||(t=t.split("||"),jQuery.each(t,function(e){t[e]=encodeURIComponent(t[e])}),t=t.join("||")),""!==t&&(m[r+"_"+a]=t),jQuery.each(i,function(e){r===e?""!==t&&(m[e+"_"+a]=t):m[e+"_"+a]=i[e]}),jQuery.each(um_member_directories,function(e){var r=um_member_directories[e];if(r!==a){var t=um_get_data_for_directory(jQuery('.um-directory[data-hash="'+r+'"]'));jQuery.each(t,function(e){m[e+"_"+r]=t[e]})}});var d=[];jQuery.each(m,function(e){d.push(e+"="+m[e])});var u="?"+(d=wp.hooks.applyFilters("um_member_directory_url_attrs",d)).join("&");"?"===u&&(u=""),window.history.pushState("string","UM Member Directory",window.location.origin+window.location.pathname+u)}function um_members_get_hash(e){return e.data("hash")}function um_is_directory_busy(e){var r=um_members_get_hash(e);return void 0!==um_members_directory_busy[r]&&um_members_directory_busy[r]}function um_members_show_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!0,e.find(".um-members-overlay").show()}function um_members_hide_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!1,e.find(".um-members-overlay").hide()}function um_set_range_label(e,r){var t="",a=e.siblings(".um-slider-range").data("placeholder-s"),i=e.siblings(".um-slider-range").data("placeholder-p");t=r?r.values[0]===r.values[1]?a.replace("{value}",r.values[0]).replace("{field_label}",e.siblings(".um-slider-range").data("label")):i.replace("{min_range}",r.values[0]).replace("{max_range}",r.values[1]).replace("{field_label}",e.siblings(".um-slider-range").data("label")):e.slider("values",0)===e.slider("values",1)?a.replace("{value}",e.slider("values",0)).replace("{field_label}",e.siblings(".um-slider-range").data("label")):i.replace("{min_range}",e.slider("values",0)).replace("{max_range}",e.slider("values",1)).replace("{field_label}",e.siblings(".um-slider-range").data("label")),e.siblings(".um-slider-range").html(t),e.siblings(".um_range_min").val(e.slider("values",0)),e.siblings(".um_range_max").val(e.slider("values",1))}function um_get_search(e){return e.find(".um-search-line").length?e.find(".um-search-line").val():""}function um_get_sort(e){return e.data("sorting")}function um_get_current_page(e){var r=e.data("page");return r&&void 0!==r||(r=1),r}function um_time_convert(e,r){var t=Math.floor(e/60),a=e%60;return 60<=a&&(a=0,24<=(t+=1)&&(t=0)),a<10&&(a="0"+a),t+":"+a}function um_ajax_get_members(s,t){var a=um_members_get_hash(s),e=um_get_current_page(s),r=um_get_search(s),i=um_get_sort(s),m=-(new Date).getTimezoneOffset()/60,_={directory_id:a,page:e,search:r,sorting:i,gmt_offset:m,post_refferer:s.data("base-post"),nonce:um_scripts.nonce};s.find(".um-search-filter").length&&s.find(".um-search-filter").each(function(){var e=jQuery(this);if(e.find(".um-slider").length){var r=e.find(".um-slider").data("field_name"),t=um_get_data_for_directory(s,"filter_"+r+"_from"),a=um_get_data_for_directory(s,"filter_"+r+"_to");void 0===t&&void 0===a||(_[r]=[t,a])}else if(e.find(".um-datepicker-filter").length){r=e.find(".um-datepicker-filter").data("filter_name"),t=um_get_data_for_directory(s,"filter_"+r+"_from"),a=um_get_data_for_directory(s,"filter_"+r+"_to");void 0===t&&void 0===a||(_[r]=[t,a])}else if(e.find(".um-timepicker-filter").length){r=e.find(".um-timepicker-filter").data("filter_name"),t=um_get_data_for_directory(s,"filter_"+r+"_from"),a=um_get_data_for_directory(s,"filter_"+r+"_to");if(void 0!==t)(i=1*(t=t.split(":"))[0])<10&&(i="0"+i),(d=1*t[1])<10&&(d="0"+d),t=i+":"+d+":00";if(void 0!==a){var i,m=a.split(":"),d=1*m[1];(i=1*m[0])<10&&(i="0"+i),d<10&&(d="0"+d),a=i+":"+d+":59"}void 0===t&&void 0===a||(_[r]=[t,a])}else if(e.find("select").length){r=e.find("select").attr("name");void 0!==(u=um_get_data_for_directory(s,"filter_"+r))&&(_[r]=u.split("||"))}else{var u;r=e.find('input[type="text"]').attr("name");void 0!==(u=um_get_data_for_directory(s,"filter_"+r))&&(_[r]=u)}}),_=wp.hooks.applyFilters("um_member_directory_filter_request",_),wp.ajax.send("um_get_members",{data:_,success:function(e){um_member_directory_last_data[a]=e,um_build_template(s,e);var r=wp.template("um-members-pagination");s.find(".um-members-pagination-box").html(r(e)),s.data("total_pages",e.pagination.total_pages),e.pagination.total_pages?(s.find(".um-member-directory-sorting-options").prop("disabled",!1),s.find(".um-member-directory-view-type").removeClass("um-disabled")):(s.find(".um-member-directory-sorting-options").prop("disabled",!0),s.find(".um-member-directory-view-type").addClass("um-disabled")),jQuery(document).trigger("um_members_rendered",t),um_init_new_dropdown(),um_members_hide_preloader(s)},error:function(e){console.log(e),um_members_hide_preloader(s)}})}function um_build_template(e,r){var t=e.data("view_type"),a=wp.template("um-member-"+t+"-"+um_members_get_hash(e));e.find(".um-members-grid, .um-members-list").remove(),e.find(".um-members-wrapper").prepend(a(r.users));var i=wp.template("um-members-header");e.find(".um-members-intro").remove(),void 0!==r.is_search&&r.is_search&&e.find(".um-members-wrapper").prepend(i(r)),e.addClass("um-loaded"),e.find(".um-members.um-members-grid").length&&UM_Member_Grid(e.find(".um-members.um-members-grid")),jQuery(document).trigger("um_build_template",[e,r]),jQuery(window).trigger("resize"),init_tipsy()}function UM_Member_Grid(e){e.find(".um-member").length&&e.imagesLoaded(function(){e.masonry({itemSelector:".um-member",columnWidth:".um-member",gutter:".um-gutter-sizer"}).on("layoutComplete",function(e,r){jQuery(document).trigger("um_grid_initialized",[e,r])})})}function um_get_filters_data(s){var _=[];return s.find(".um-search-filter").each(function(){var t,a,d,i=jQuery(this);if(i.find("input.um-datepicker-filter").length)d="datepicker",i.find("input.um-datepicker-filter").each(function(){if("to"!==jQuery(this).data("range")){var e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(s,"filter_"+e+"_from"),t=um_get_data_for_directory(s,"filter_"+e+"_to");if(void 0!==r||void 0!==t){var a,i=jQuery(this).val(),m=s.find('input.um-datepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val();i===m?a=m:""!==i&&""!==m?a=i+" - "+m:""===i?a="before "+m:""===m&&(a="since "+i),_.push({name:e,label:jQuery(this).data("filter-label"),value_label:a,value:[r,t],type:d})}}});else if(i.find("input.um-timepicker-filter").length)d="timepicker",i.find("input.um-timepicker-filter").each(function(){if("to"!==jQuery(this).data("range")){var e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(s,"filter_"+e+"_from"),t=um_get_data_for_directory(s,"filter_"+e+"_to");if(void 0!==r||void 0!==t){var a,i=jQuery(this).val(),m=s.find('input.um-timepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val();i===m?a=m:""!==i&&""!==m?a=i+" - "+m:""===i?a="before "+m:""===m&&(a="since "+i),_.push({name:e,label:jQuery(this).data("filter-label"),value_label:a,value:[r,t],type:d})}}});else if(i.find("select").length){d="select",t=i.find("select").attr("name"),a=i.find("select").data("placeholder"),m=void 0===(m=um_get_data_for_directory(s,"filter_"+t))?[]:m.split("||"),jQuery.each(m,function(e){var r=i.find('select option[value="'+m[e]+'"]').data("value_label");_.push({name:t,label:a,value_label:r,value:m[e],type:d})})}else if(i.find('input[type="text"]').length){var m;d="text",t=i.find('input[type="text"]').attr("name"),a=i.find('input[type="text"]').attr("placeholder"),void 0===(m=um_get_data_for_directory(s,"filter_"+t))&&(m=""),""!=m&&_.push({name:t,label:a,value_label:m,value:m,type:d})}else if(i.find("div.ui-slider").length){d="slider",t=i.find("div.ui-slider").data("field_name");var e,r=um_get_data_for_directory(s,"filter_"+t+"_from"),u=um_get_data_for_directory(s,"filter_"+t+"_to");if(void 0===r&&void 0===u)return;e=r===u?i.find("div.um-slider-range").data("placeholder-s").replace("{value}",r).replace("{field_label}",i.find("div.um-slider-range").data("label")):i.find("div.um-slider-range").data("placeholder-p").replace("{min_range}",r).replace("{max_range}",u).replace("{field_label}",i.find("div.um-slider-range").data("label")),a=i.find("div.um-slider-range").data("label"),_.push({name:t,label:a,value_label:e,value:[r,u],type:d})}}),_}function um_change_tag(e){var r=um_get_filters_data(e);e.find(".um-members-filter-tag").remove();var t=e.find(".um-filtered-line");if(t.length){var a=wp.template("um-members-filtered-line");t.prepend(a({filters:r})),0===e.find(".um-members-filter-remove").length?(e.find(".um-clear-filters").hide(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").addClass("um-header-row-invisible")):(e.find(".um-clear-filters").show(),e.find(".um-clear-filters").parents(".um-member-directory-header-row").removeClass("um-header-row-invisible"))}}function um_run_search(e){if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=um_get_data_for_directory(e,"search");if((a=e.find(".um-search-line").val())===r||""===a&&void 0===r)um_members_hide_preloader(e);else{e.data("general_search",a),um_set_url_from_data(e,"search",a),e.data("page",1),um_set_url_from_data(e,"page","");var t=!1;if(!(t=wp.hooks.applyFilters("um_member_directory_ignore_after_search",t)))if(1===e.data("must-search")){var a=um_get_search(e);if(0===e.find(".um-members-filter-remove").length&&!a)return e.data("searched",0),e.find(".um-members-grid, .um-members-list").remove(),e.find(".um-member-directory-sorting-options").prop("disabled",!0),e.find(".um-member-directory-view-type").addClass("um-disabled"),void um_members_hide_preloader(e)}e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"),um_ajax_get_members(e)}}}jQuery(document.body).ready(function(){jQuery(".um-directory .um-search-filter select").each(function(){1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0),jQuery(this).select2("destroy").select2()}),jQuery(document.body).on("mouseover",".um-directory .um-member-directory-view-type",function(){if(!jQuery(this).hasClass("um-disabled")){var e=jQuery(this).find(".um-member-directory-view-type-a:visible");e.hide(),e.next().length?e.next().show().tipsy("show"):jQuery(this).find(".um-member-directory-view-type-a:first").show().tipsy("show")}}).on("mouseout",".um-directory .um-member-directory-view-type",function(){jQuery(this).hasClass("um-disabled")||(jQuery(this).find(".um-member-directory-view-type-a").hide().tipsy("hide"),jQuery(this).find('.um-member-directory-view-type-a[data-type="'+jQuery(this).parents(".um-directory").data("view_type")+'"]').show())}),jQuery(document.body).on("click",".um-directory .um-member-directory-view-type-a",function(){var e=jQuery(this).parents(".um-directory");if(um_is_directory_busy(e))return!1;var r=jQuery(this),t=r.parents(".um-member-directory-view-type");if(!t.hasClass("um-disabled")){um_members_show_preloader(e);var a=t.find(".um-member-directory-view-type-a:visible");a.hide(),a.next().length?a.next().show().tipsy("show"):t.find(".um-member-directory-view-type-a:first").show().tipsy("show");var i=um_member_directory_last_data[um_members_get_hash(e)];if(null!==i){var m=r.data("type");um_set_url_from_data(e,"view_type",m),e.data("view_type",m),um_build_template(e,i)}um_members_hide_preloader(e)}}),jQuery(document.body).on("click",".um-directory .um-do-search",function(){um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("keypress",".um-directory .um-search-line",function(e){13===e.which&&um_run_search(jQuery(this).parents(".um-directory"))}),jQuery(document.body).on("click",".um-directory .um-member-directory-sorting-a .um-new-dropdown li a",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)&&1!==jQuery(this).data("selected")){um_members_show_preloader(e);var r=jQuery(this).data("value");e.data("sorting",r),um_set_url_from_data(e,"sort",r),um_ajax_get_members(e),jQuery(this).parents(".um-new-dropdown").find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),jQuery(this).data("selected",1).prop("data-selected",1).attr("data-selected",1),jQuery(this).parents(".um-member-directory-sorting-a").find("> a").html(jQuery(this).html())}}),jQuery(document.body).on("click",".um-directory .pagi:not(.current)",function(){if(!jQuery(this).hasClass("disabled")){var e,r=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(r))um_members_show_preloader(r),1===(e="first"===jQuery(this).data("page")?1:"prev"===jQuery(this).data("page")?1*r.data("page")-1:"next"===jQuery(this).data("page")?1*r.data("page")+1:"last"===jQuery(this).data("page")?parseInt(r.data("total_pages")):parseInt(jQuery(this).data("page")))?(r.find('.pagi[data-page="first"], .pagi[data-page="prev"]').addClass("disabled"),r.find('.pagi[data-page="prev"], .pagi[data-page="last"]').removeClass("disabled")):(e===parseInt(r.data("total_pages"))?r.find('.pagi[data-page="prev"], .pagi[data-page="last"]').addClass("disabled"):r.find('.pagi[data-page="prev"], .pagi[data-page="last"]').removeClass("disabled"),r.find('.pagi[data-page="first"], .pagi[data-page="prev"]').removeClass("disabled")),r.find(".pagi").removeClass("current"),r.find('.pagi[data-page="'+e+'"]').addClass("current"),r.data("page",e),um_set_url_from_data(r,"page",1===e?"":e),um_ajax_get_members(r)}}),jQuery(document.body).on("change",".um-directory .um-members-pagi-dropdown",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=jQuery(this).val();e.find(".pagi").removeClass("current"),e.find('.pagi[data-page="'+r+'"]').addClass("current"),e.data("page",r),um_set_url_from_data(e,"page",1===r?"":r),um_ajax_get_members(e)}}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-more a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member");return r.find(".um-member-more").hide(),r.find(".um-member-meta-main").slideDown(),r.find(".um-member-less").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-list .um-member-less a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member");return r.find(".um-member-less").hide(),r.find(".um-member-meta-main").slideUp(),r.find(".um-member-more").fadeIn(),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-more a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member"),t=jQuery(this).parents(".um-members");return r.find(".um-member-more").hide(),r.find(".um-member-meta").slideDown(function(){UM_Member_Grid(t)}),r.find(".um-member-less").fadeIn(),setTimeout(function(){UM_Member_Grid(t)},100),!1}),jQuery(document.body).on("click",".um-directory .um-members.um-members-grid .um-member-less a",function(e){e.preventDefault();var r=jQuery(this).parents(".um-member"),t=jQuery(this).parents(".um-members");return r.find(".um-member-less").hide(),r.find(".um-member-meta").slideUp(function(){r.find(".um-member-more").fadeIn(),UM_Member_Grid(t)}),!1}),jQuery(".um-member-directory-filters-a").click(function(){var e=jQuery(this),r=e.parents(".um-directory").find(".um-search");r.is(":visible")?r.slideUp(250,function(){e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}):r.slideDown({duration:250,start:function(){jQuery(this).css({display:"grid"}),e.toggleClass("um-member-directory-filters-visible"),r.parents(".um-member-directory-header-row").toggleClass("um-header-row-invisible")}})}),jQuery(document.body).on("change",".um-directory .um-search-filter select",function(){if(""!==jQuery(this).val()){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)){um_members_show_preloader(e);var r=jQuery(this).prop("name"),t=um_get_data_for_directory(e,"filter_"+r);t=void 0===t?[]:t.split("||"),-1===jQuery.inArray(jQuery(this).val(),t)&&(t.push(jQuery(this).val()),um_set_url_from_data(e,"filter_"+r,t=t.join("||")),e.data("page",1),um_set_url_from_data(e,"page","")),jQuery(this).find('option[value="'+jQuery(this).val()+'"]').prop("disabled",!0).hide(),1===jQuery(this).find("option:not(:disabled)").length&&jQuery(this).prop("disabled",!0),jQuery(this).select2("destroy").select2(),jQuery(this).val("").trigger("change"),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled")}}}),jQuery(document.body).on("blur",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)){var r=jQuery(this).val(),t=jQuery(this).prop("name"),a=um_get_data_for_directory(e,"filter_"+t);void 0===a&&(a=""),r!==a&&(um_members_show_preloader(e),um_set_url_from_data(e,"filter_"+t,r),e.data("page",1),um_set_url_from_data(e,"page",""),um_ajax_get_members(e),um_change_tag(e),e.data("searched",1),e.find(".um-member-directory-sorting-options").prop("disabled",!1),e.find(".um-member-directory-view-type").removeClass("um-disabled"))}}),jQuery(document.body).on("keypress",'.um-directory .um-search-filter.um-text-filter-type input[type="text"]',function(e){if(13===e.which){var r=jQuery(this).parents(".um-directory");if(um_is_directory_busy(r))return;var t=jQuery(this).val(),a=jQuery(this).prop("name"),i=um_get_data_for_directory(r,"filter_"+a);if(void 0===i&&(i=""),t===i)return;um_members_show_preloader(r),um_set_url_from_data(r,"filter_"+a,t),r.data("page",1),um_set_url_from_data(r,"page",""),um_ajax_get_members(r),um_change_tag(r),r.data("searched",1),r.find(".um-member-directory-sorting-options").prop("disabled",!1),r.find(".um-member-directory-view-type").removeClass("um-disabled")}}),jQuery(document.body).on("click",".um-directory .um-members-filter-remove",function(){var e=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(e)&&e){um_members_show_preloader(e);var r=jQuery(this).data("value"),t=jQuery(this).data("name"),a=jQuery(this).data("type");if("text"===a)um_set_url_from_data(e,"filter_"+t,""),jQuery('.um-search-filter input[name="'+t+'"]').val("");else if("select"===a){var i=um_get_data_for_directory(e,"filter_"+t);i=void 0===i?[]:i.split("||"),-1!==jQuery.inArray(r.toString(),i)&&(i=jQuery.grep(i,function(e){return e!==r.toString()})),i.length||(i=""),um_set_url_from_data(e,"filter_"+t,i);var m=jQuery('.um-search-filter select[name="'+t+'"]');m.find('option[value="'+r+'"]').prop("disabled",!1).show(),1d.data("total_pages")&&(r=d.data("total_pages")),d.data("page",r).attr("data-page",r),d.find(".um-member-directory-sorting").length){var t=um_get_data_for_directory(d,"sort");void 0===t&&(t=d.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]').find('a[data-default="1"]').data("value")),d.data("sorting",t);var a=d.find('.um-new-dropdown[data-element=".um-member-directory-sorting-a"]');a.find("a").data("selected",0).prop("data-selected",0).attr("data-selected",0),a.find('a[data-value="'+t+'"]').data("selected",1).prop("data-selected",1).attr("data-selected",1),d.find(".um-member-directory-sorting-a").find("> a").html(a.find('a[data-value="'+t+'"]').html())}if(d.find(".um-member-directory-view-type").length){var i=um_get_data_for_directory(d,"view_type");void 0===i&&(i=d.find('.um-member-directory-view-type-a[data-default="1"]').data("type")),d.data("view_type",i),d.find(".um-member-directory-view-type .um-member-directory-view-type-a").hide(),d.find('.um-member-directory-view-type .um-member-directory-view-type-a[data-type="'+i+'"]').show()}d.find(".um-datepicker-filter").each(function(){var e=jQuery(this),r=e.pickadate("picker"),t=e.data("filter_name"),a=e.data("range"),i=um_get_data_for_directory(d,"filter_"+t+"_"+a);void 0!==i?r.set("select",1e3*i):r.clear()}),d.find(".um-slider").each(function(){var e=jQuery(this),r=e.data("field_name"),t=um_get_data_for_directory(d,"filter_"+r+"_from"),a=um_get_data_for_directory(d,"filter_"+r+"_to");void 0===t&&(t=e.data("min")),t=parseInt(t),void 0===a&&(a=e.data("max")),a=parseInt(a),e.slider("values",[t,a]),um_set_range_label(e)}),d.find(".um-timepicker-filter").each(function(){var e=jQuery(this),r=e.pickatime("picker"),t=e.data("filter_name"),a=e.data("range"),i=um_get_data_for_directory(d,"filter_"+t+"_"+a);if(void 0!==i){var m=i.split(":");r.set("select",60*m[0])}else r.clear()});var m=!1;if(!(m=wp.hooks.applyFilters("um_member_directory_ignore_after_search",m))&&1===d.data("must-search")){var u=um_get_search(d);if(!um_get_filters_data(d).length&&!u)return d.data("searched",0),void um_members_hide_preloader(d);d.data("searched",1)}um_ajax_get_members(d),um_change_tag(d)})})}); \ No newline at end of file diff --git a/includes/admin/assets/css/um-admin-forms.css b/includes/admin/assets/css/um-admin-forms.css index 4e1dcb28..433579c1 100644 --- a/includes/admin/assets/css/um-admin-forms.css +++ b/includes/admin/assets/css/um-admin-forms.css @@ -291,4 +291,33 @@ textarea.um-forms-field.um-small-field { .um-forms-line[data-conditional] { display: none; +} + + + +/* Same page update field */ +.um-forms-line td .um-same-page-update-wrapper { + display: none; + margin: 7px 0 0 0; +} + +.um-forms-line td .um-same-page-update-wrapper input.um-admin-form-same-page-update { + margin: 7px 0 0 0; +} + +.um-forms-line td .um-same-page-update-wrapper .upgrade_log { + margin: 7px 0 0 0; + width:100%; + height:150px; + overflow: auto; + border: 1px solid #a1a1a1; +} + +.um-forms-line[data-field_type="same_page_update"] { + vertical-align: baseline; +} + +.um-forms-line[data-field_type="same_page_update"] th, +.um-forms-line[data-field_type="same_page_update"] td { + vertical-align: baseline; } \ No newline at end of file diff --git a/includes/admin/assets/js/um-admin-forms.js b/includes/admin/assets/js/um-admin-forms.js index 99459e53..6c49ddb5 100644 --- a/includes/admin/assets/js/um-admin-forms.js +++ b/includes/admin/assets/js/um-admin-forms.js @@ -1,6 +1,146 @@ jQuery(document).ready( function() { + /** + * Same page upgrade field + */ + jQuery( document.body ).on( 'click', '.um-forms-field[data-log-object]', function() { + var obj = jQuery( this ).data( 'log-object' ); + if ( jQuery( this ).is( ':checked' ) ) { + jQuery( this ).siblings( '.um-same-page-update-' + obj ).show(); + } else { + jQuery( this ).siblings( '.um-same-page-update-' + obj ).hide(); + } + }); + + + + jQuery( document.body ).on( 'click', '.um-admin-form-same-page-update', function() { + var field_key = jQuery(this).data('upgrade_cb'); + jQuery(this).prop( 'disabled', true ); + + um_add_same_page_log( field_key, wp.i18n.__( 'Upgrade Process Started...', 'ultimate-member' ) ); + + if ( field_key === 'sync_metatable' ) { + var metadata_pages = 0; + var metadata_per_page = 50; + var current_page; + + jQuery.ajax({ + url: wp.ajax.settings.url, + type: 'POST', + dataType: 'json', + data: { + action: 'um_same_page_update', + cb_func: 'um_usermeta_fields', + nonce: um_admin_scripts.nonce + }, + success: function( response ) { + get_metadata(); + }, + error: function() { + um_same_page_something_wrong( field_key ); + } + }); + + + /** + * + * @returns {boolean} + */ + function get_metadata() { + current_page = 1; + + um_add_same_page_log( field_key, wp.i18n.__( 'Getting metadata', 'ultimate-member' ) ); + jQuery.ajax({ + url: wp.ajax.settings.url, + type: 'POST', + dataType: 'json', + data: { + action: 'um_same_page_update', + cb_func: 'um_get_metadata', + nonce: um_admin_scripts.nonce + }, + success: function( response ) { + if ( typeof response.data.count != 'undefined' ) { + um_add_same_page_log( field_key, wp.i18n.__( 'There are ', 'ultimate-member' ) + response.data.count + wp.i18n.__( ' metadata rows...', 'ultimate-member' ) ); + um_add_same_page_log( field_key, wp.i18n.__( 'Start metadata upgrading...', 'ultimate-member' ) ); + + metadata_pages = Math.ceil( response.data.count / metadata_per_page ); + + update_metadata_per_page(); + } else { + um_same_page_wrong_ajax( field_key ); + } + }, + error: function() { + um_same_page_something_wrong( field_key ); + } + }); + + return false; + } + + + function update_metadata_per_page() { + if ( current_page <= metadata_pages ) { + jQuery.ajax({ + url: wp.ajax.settings.url, + type: 'POST', + dataType: 'json', + data: { + action: 'um_same_page_update', + cb_func: 'um_update_metadata_per_page', + page: current_page, + nonce: um_admin_scripts.nonce + }, + success: function( response ) { + if ( typeof response.data != 'undefined' ) { + um_add_same_page_log( field_key, response.data.message ); + current_page++; + update_metadata_per_page(); + } else { + um_same_page_wrong_ajax( field_key ); + } + }, + error: function() { + um_same_page_something_wrong( field_key ); + } + }); + } else { + return false; + } + } + } + }); + + + + /** + * + * @param field_key + * @param line + */ + function um_add_same_page_log( field_key, line ) { + var log_field = jQuery( '.um-same-page-update-' + field_key ).find( '.upgrade_log' ); + var previous_html = log_field.html(); + log_field.html( previous_html + line + "
" ); + } + + + function um_same_page_wrong_ajax( field_key ) { + um_add_same_page_log( field_key, wp.i18n.__( 'Wrong AJAX response...', 'ultimate-member' ) ); + um_add_same_page_log( field_key, wp.i18n.__( 'Your upgrade was crashed, please contact with support', 'ultimate-member' ) ); + } + + + function um_same_page_something_wrong( field_key ) { + um_add_same_page_log( field_key, wp.i18n.__( 'Something went wrong with AJAX request...', 'ultimate-member' ) ); + um_add_same_page_log( field_key, wp.i18n.__( 'Your upgrade was crashed, please contact with support', 'ultimate-member' ) ); + } + + + /** * Multi-selects sort */ diff --git a/includes/admin/core/class-admin-ajax-hooks.php b/includes/admin/core/class-admin-ajax-hooks.php index 2e261c88..b3972317 100644 --- a/includes/admin/core/class-admin-ajax-hooks.php +++ b/includes/admin/core/class-admin-ajax-hooks.php @@ -28,6 +28,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Ajax_Hooks' ) ) { 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' ) ); + + add_action( 'wp_ajax_um_same_page_update', array( UM()->admin_settings(), 'same_page_update_ajax' ) ); } } diff --git a/includes/admin/core/class-admin-forms.php b/includes/admin/core/class-admin-forms.php index 5fdb10d0..17a18863 100644 --- a/includes/admin/core/class-admin-forms.php +++ b/includes/admin/core/class-admin-forms.php @@ -773,6 +773,60 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) { } + /** + * @param $field_data + * + * @return bool|string + */ + function render_same_page_update( $field_data ) { + + if ( empty( $field_data['id'] ) ) { + return false; + } + + $id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id']; + $id_attr = ' id="' . esc_attr( $id ) . '" '; + $id_attr_hidden = ' id="' . esc_attr( $id ) . '_hidden" '; + + $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 ' . esc_attr( $class ) . '" '; + + $data = array( + 'field_id' => $field_data['id'] + ); + + if ( ! empty( $field_data['data'] ) ) { + $data = array_merge( $data, $field_data['data'] ); + } + + $data_attr = ''; + foreach ( $data as $key => $value ) { + $data_attr .= ' data-' . $key . '="' . esc_attr( $value ) . '" '; + } + + if ( ! empty( $field_data['upgrade_cb'] ) ) { + $data_attr .= ' data-log-object="' . esc_attr( $field_data['upgrade_cb'] ) . '" '; + } + + $name = $field_data['id']; + $name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name; + $name_attr = ' name="' . $name . '" '; + + $value = $this->get_field_value( $field_data ); + + $html = " + "; + + if ( ! empty( $field_data['upgrade_cb'] ) ) { + $html .= '
' . $field_data['upgrade_description'] . '
+
'; + } + + return $html; + } + + /** * @param $field_data * diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 482e54ac..aa5ad4d6 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -80,6 +80,113 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { } + + function same_page_update_ajax() { + UM()->admin()->check_ajax_nonce(); + + if ( empty( $_POST['cb_func'] ) ) { + wp_send_json_error( __( 'Wrong callback', 'ultimate-member' ) ); + } + + if ( 'um_usermeta_fields' == $_POST['cb_func'] ) { + //first install metatable + global $wpdb; + + $metakeys = array(); + foreach ( UM()->builtin()->all_user_fields as $all_user_field ) { + if ( $all_user_field['type'] == 'user_location' ) { + $metakeys[] = $all_user_field['metakey'] . '_lat'; + $metakeys[] = $all_user_field['metakey'] . '_lng'; + $metakeys[] = $all_user_field['metakey'] . '_url'; + } else { + $metakeys[] = $all_user_field['metakey']; + } + } + + if ( is_multisite() ) { + + $sites = get_sites( array( 'fields' => 'ids' ) ); + foreach ( $sites as $blog_id ) { + $metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities'; + } + + } else { + $blog_id = get_current_blog_id(); + $metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities'; + } + + //member directory data + $metakeys[] = 'um_member_directory_data'; + + $skip_fields = UM()->builtin()->get_fields_without_metakey(); + $skip_fields = array_merge( $skip_fields, UM()->member_directory()->core_search_fields ); + + $real_usermeta = $wpdb->get_col( "SELECT DISTINCT meta_key FROM {$wpdb->usermeta}" ); + $real_usermeta = ! empty( $real_usermeta ) ? $real_usermeta : array(); + $real_usermeta = array_merge( $real_usermeta, array( 'um_member_directory_data' ) ); + + $wp_usermeta_option = array_intersect( array_diff( $metakeys, $skip_fields ), $real_usermeta ); + + update_option( 'um_usermeta_fields', $wp_usermeta_option ); + + update_option( 'um_member_directory_update_meta', time() ); + + wp_send_json_success(); + } elseif ( 'um_get_metadata' == $_POST['cb_func'] ) { + global $wpdb; + + $wp_usermeta_option = get_option( 'um_usermeta_fields', array() ); + + $count = $wpdb->get_var( + "SELECT COUNT(*) + FROM {$wpdb->usermeta} + WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "')" + ); + + wp_send_json_success( array( 'count' => $count ) ); + } elseif ( 'um_update_metadata_per_page' == $_POST['cb_func'] ) { + + if ( empty( $_POST['page'] ) ) { + wp_send_json_error( __( 'Wrong data', 'ultimate-member' ) ); + } + + $per_page = 50; + $wp_usermeta_option = get_option( 'um_usermeta_fields', array() ); + + global $wpdb; + $metadata = $wpdb->get_results( $wpdb->prepare( + "SELECT * + FROM {$wpdb->usermeta} + WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "') + LIMIT %d, %d", + ( $_POST['page'] - 1 ) * $per_page, + $per_page + ), ARRAY_A ); + + foreach ( $metadata as $metarow ) { + $wpdb->insert( + "{$wpdb->prefix}um_metadata", + array( + 'user_id' => $metarow['user_id'], + 'um_key' => $metarow['meta_key'], + 'um_value' => $metarow['meta_value'], + ), + array( + '%d', + '%s', + '%s', + ) + ); + } + + $from = ( $_POST['page'] * $per_page ) - $per_page + 1; + $to = $_POST['page'] * $per_page; + + wp_send_json_success( array( 'message' => sprintf( __( 'Metadata from %s to %s was upgraded successfully...', 'ultimate-member' ), $from, $to ) ) ); + } + } + + /** * */ @@ -351,6 +458,22 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { 'default' => UM()->options()->get_default( 'restricted_access_taxonomy_metabox' ), ) ) ); + $latest_update = get_option( 'um_member_directory_update_meta', false ); + $latest_truncate = get_option( 'um_member_directory_truncated', false ); + + $same_page_update = array( + 'id' => 'member_directory_own_table', + 'type' => 'same_page_update', + 'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ), + 'tooltip' => __( 'Check this box if you would like to enable the use of a custom table for user metadata. Improved performance for member directory searches.', 'ultimate-member' ), + ); + + if ( empty( $latest_update ) || ( ! empty( $latest_truncate ) && $latest_truncate > $latest_update ) ) { + $same_page_update['upgrade_cb'] = 'sync_metatable'; + $same_page_update['upgrade_description'] = '

' . __( 'We recommend creating a backup of your site before running the update process. Do not exit the page before the update process has complete.', 'ultimate-member' ) . '

+

' . __( 'After clicking the "Run" button, the update process will start. All information will be displayed in the field below.', 'ultimate-member' ) . '

+

' . __( 'If the update was successful, you will see a corresponding message. Otherwise, contact technical support if the update failed.', 'ultimate-member' ) . '

'; + } /** * UM hook @@ -1143,12 +1266,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { '2.0' => __( '2.0 version', 'ultimate-member' ), ), ), - array( - 'id' => 'member_directory_own_table', - 'type' => 'checkbox', - 'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ), - 'tooltip' => __( 'Check this box if you would like to enable the using custom table with user metadata. It can be solution for the complex search.', 'ultimate-member' ), - ), + $same_page_update, array( 'id' => 'uninstall_on_delete', 'type' => 'checkbox', @@ -1669,6 +1787,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { */ function on_settings_save() { if ( ! empty( $_POST['um_options'] ) ) { + if ( ! empty( $_POST['um_options']['pages_settings'] ) ) { $post_ids = new \WP_Query( array( 'post_type' => 'page', @@ -1709,184 +1828,16 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { } } } - } elseif ( ! empty( $_POST['um_options']['member_directory_own_table'] ) ) { - //first install metatable - global $wpdb; + } elseif ( isset( $_POST['um_options']['member_directory_own_table'] ) ) { + if ( empty( $_POST['um_options']['member_directory_own_table'] ) ) { + global $wpdb; - $metakeys = array(); - foreach ( UM()->builtin()->all_user_fields as $all_user_field ) { - if ( $all_user_field['type'] == 'user_location' ) { - $metakeys[] = $all_user_field['metakey'] . '_lat'; - $metakeys[] = $all_user_field['metakey'] . '_lng'; - $metakeys[] = $all_user_field['metakey'] . '_url'; - } else { - $metakeys[] = $all_user_field['metakey']; + $results = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}um_metadata LIMIT 1", ARRAY_A ); + if ( ! empty( $results ) ) { + $wpdb->query("TRUNCATE TABLE IF EXISTS {$wpdb->prefix}um_metadata" ); + update_option( 'um_member_directory_truncated', time() ); } } - - if ( is_multisite() ) { - - $sites = get_sites( array( 'fields' => 'ids' ) ); - foreach ( $sites as $blog_id ) { - $metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities'; - } - - } else { - $blog_id = get_current_blog_id(); - $metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities'; - } - - //member directory data - $metakeys[] = 'um_member_directory_data'; - - $skip_fields = UM()->builtin()->get_fields_without_metakey(); - $skip_fields = array_merge( $skip_fields, UM()->member_directory()->core_search_fields ); - - $real_usermeta = $wpdb->get_col( "SELECT DISTINCT meta_key FROM {$wpdb->usermeta}" ); - - $wp_usermeta_option = array(); - foreach ( $metakeys as $metakey ) { - if ( in_array( $metakey, $skip_fields ) ) { - continue; - } - - if ( ! in_array( $metakey, $real_usermeta ) && $metakey != 'um_member_directory_data' ) { - continue; - } - - $wp_usermeta_option[] = $metakey; - } - - update_option( 'um_usermeta_fields', $wp_usermeta_option ); - - $charset_collate = $wpdb->get_charset_collate(); - - $sql = "CREATE TABLE {$wpdb->prefix}um_metadata ( -umeta_id bigint(20) unsigned NOT NULL auto_increment, -user_id bigint(20) unsigned NOT NULL default '0', -um_key varchar(255) default NULL, -um_value longtext default NULL, -PRIMARY KEY (umeta_id), -KEY user_id_indx (user_id), -KEY meta_key_indx (um_key), -KEY meta_value_indx (um_value(191)) -) $charset_collate;"; - - require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); - dbDelta( $sql ); - - $md_metadata = $wpdb->get_results( - "SELECT u.ID as user_id, um.meta_value AS account_status, um2.meta_value AS hide_in_members - FROM {$wpdb->users} u - LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = 'account_status' ) - LEFT JOIN {$wpdb->usermeta} um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'hide_in_members' )", - ARRAY_A ); - - $md_metadata2 = $wpdb->get_results( - "SELECT u.ID as user_id, um.meta_value AS synced_gravatar_hashed_id, um2.meta_value AS synced_profile_photo - FROM {$wpdb->users} u - LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = 'synced_gravatar_hashed_id' ) - LEFT JOIN {$wpdb->usermeta} um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'synced_profile_photo' )", - ARRAY_A ); - - $md_metadata3 = $wpdb->get_results( - "SELECT u.ID as user_id, um.meta_value AS profile_photo, um2.meta_value AS cover_photo - FROM {$wpdb->users} u - LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = 'profile_photo' ) - LEFT JOIN {$wpdb->usermeta} um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'cover_photo' )", - ARRAY_A ); - - $md_metadata4 = $wpdb->get_results( - "SELECT u.ID as user_id, um.meta_value AS verified - FROM {$wpdb->users} u - LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = '_um_verified' )", - ARRAY_A ); - - - $users_map = array(); - foreach ( $md_metadata as $md_metadatarow ) { - $hide_in_members = false; - if ( ! empty( $md_metadatarow['hide_in_members'] ) ) { - if ( $md_metadatarow['hide_in_members'] == 'Yes' || $md_metadatarow['hide_in_members'] == __( 'Yes', 'ultimate-member' ) || - $md_metadatarow['hide_in_members'] == serialize( array( 'Yes' ) ) || $md_metadatarow['hide_in_members'] == serialize( array( __( 'Yes', 'ultimate-member' ) ) ) ) { - $hide_in_members = true; - } - } - - $users_map[ $md_metadatarow['user_id'] ] = array( - 'account_status' => $md_metadatarow['account_status'], - 'hide_in_members' => $hide_in_members, - ); - } - - foreach ( $md_metadata3 as $md_metadatarow ) { - if ( ! isset( $users_map[ $md_metadatarow['user_id'] ] ) ) { - $users_map[ $md_metadatarow['user_id'] ] = array(); - } - - $users_map[ $md_metadatarow['user_id'] ] = array_merge( $users_map[ $md_metadatarow['user_id'] ], array( - 'profile_photo' => ! empty( $md_metadatarow['profile_photo'] ), - 'cover_photo' => ! empty( $md_metadatarow['cover_photo'] ), - ) ); - } - - foreach ( $md_metadata2 as $md_metadatarow ) { - if ( ! isset( $users_map[ $md_metadatarow['user_id'] ] ) ) { - $users_map[ $md_metadatarow['user_id'] ] = array(); - } - - if ( ! empty( $users_map[ $md_metadatarow['user_id'] ]['profile_photo'] ) ) { - continue; - } else { - $users_map[ $md_metadatarow['user_id'] ]['profile_photo'] = ( ! empty( $md_metadatarow['synced_gravatar_hashed_id'] ) || ! empty( $md_metadatarow['synced_profile_photo'] ) ); - } - } - - foreach ( $md_metadata4 as $md_metadatarow ) { - if ( ! isset( $users_map[ $md_metadatarow['user_id'] ] ) ) { - $users_map[ $md_metadatarow['user_id'] ] = array(); - } - $users_map[ $md_metadatarow['user_id'] ] = array_merge( $users_map[ $md_metadatarow['user_id'] ], array( - 'verified' => $md_metadatarow['verified'] == 'verified' ? true : false, - ) ); - } - - - if ( ! empty( $users_map ) ) { - - remove_action( 'updated_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10 ); - remove_action( 'added_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10 ); - - foreach ( $users_map as $user_id => $metavalue ) { - update_user_meta( $user_id, 'um_member_directory_data', $metavalue ); - } - - add_action( 'updated_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10, 4 ); - add_action( 'added_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10, 4 ); - } - - - $metadata = $wpdb->get_results( - "SELECT * - FROM {$wpdb->usermeta} - WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "')", - ARRAY_A ); - - foreach ( $metadata as $metarow ) { - $wpdb->insert( - "{$wpdb->prefix}um_metadata", - array( - 'user_id' => $metarow['user_id'], - 'um_key' => $metarow['meta_key'], - 'um_value' => $metarow['meta_value'], - ), - array( - '%d', - '%s', - '%s', - ) - ); - } } } } diff --git a/includes/admin/core/class-admin-upgrade.php b/includes/admin/core/class-admin-upgrade.php index df1ae275..30da72ff 100644 --- a/includes/admin/core/class-admin-upgrade.php +++ b/includes/admin/core/class-admin-upgrade.php @@ -246,15 +246,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) {

-

-
    -
  • -
  • -
  • -
-

+

%s version. Your latest DB version is %s. We recommend creating a backup of your site before running the update process. Do not exit the page before the update process has complete.', 'ultimate-member' ), ultimatemember_version, $um_last_version_upgrade ) ?>

+

"Run" button, the update process will start. All information will be displayed in the "Upgrade Log" field.', 'ultimate-member' ); ?>

-

+

diff --git a/includes/admin/core/packages/2.1.3-beta3/functions.php b/includes/admin/core/packages/2.1.3-beta3/functions.php new file mode 100644 index 00000000..1323ec82 --- /dev/null +++ b/includes/admin/core/packages/2.1.3-beta3/functions.php @@ -0,0 +1,144 @@ +admin()->check_ajax_nonce(); + + um_maybe_unset_time_limit(); + + $users = get_users( array( + 'number' => '', + 'fields' => 'ids' + ) ); + $count = count( $users ); + + wp_send_json_success( array( 'count' => $count ) ); +} + + +function um_upgrade_metadata_per_user213beta3() { + UM()->admin()->check_ajax_nonce(); + + um_maybe_unset_time_limit(); + + + if ( empty( $_POST['page'] ) ) { + wp_send_json_error( __( 'Wrong data', 'ultimate-member' ) ); + } + + $per_page = 50; + + global $wpdb; + + $min_max = $wpdb->get_row( $wpdb->prepare( + "SELECT MIN(ID) AS MinID, MAX(ID) AS MaxID + FROM ( + SELECT u.ID + FROM wpbultimate_users as u + ORDER BY u.ID + LIMIT %d, %d + ) as dt", + ( $_POST['page'] - 1 ) * $per_page, + $per_page + ), ARRAY_A ); + + $metadata = $wpdb->get_results( $wpdb->prepare( + "SELECT u.ID as user_id, + um.meta_key as meta_key, + um.meta_value as meta_value + FROM wpbultimate_users u + LEFT JOIN wpbultimate_usermeta um ON ( um.user_id = u.ID AND um.meta_key IN( 'account_status','hide_in_members','synced_gravatar_hashed_id','synced_profile_photo','profile_photo','cover_photo','_um_verified' ) ) + WHERE u.ID >= %d AND + u.ID <= %d", + $min_max['MinID'], + $min_max['MaxID'] + ), ARRAY_A ); + + $users_map = array(); + foreach ( $metadata as $metadatarow ) { + if ( ! isset( $users_map[ $metadatarow['user_id'] ] ) ) { + $users_map[ $metadatarow['user_id'] ] = array( + 'account_status' => 'approved', + 'hide_in_members' => false, + 'profile_photo' => false, + 'cover_photo' => false, + 'verified' => false, + ); + } + + switch ( $metadatarow['meta_key'] ) { + case 'account_status': + $users_map[ $metadatarow['user_id'] ]['account_status'] = $metadatarow['meta_value']; + break; + case 'hide_in_members': + + $hide_in_members = false; + if ( ! empty( $metadatarow['meta_value'] ) ) { + if ( $metadatarow['meta_value'] == 'Yes' || $metadatarow['meta_value'] == __( 'Yes', 'ultimate-member' ) || + $metadatarow['meta_value'] == serialize( array( 'Yes' ) ) || $metadatarow['meta_value'] == serialize( array( __( 'Yes', 'ultimate-member' ) ) ) ) { + $hide_in_members = true; + } + } + + $users_map[ $metadatarow['user_id'] ]['hide_in_members'] = $hide_in_members; + + break; + case 'synced_gravatar_hashed_id': + case 'synced_profile_photo': + + if ( empty( $users_map[ $metadatarow['user_id'] ]['profile_photo'] ) ) { + $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] ); + } + + break; + case 'profile_photo': + $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] ); + break; + case 'cover_photo': + $users_map[ $metadatarow['user_id'] ]['cover_photo'] = ! empty( $metadatarow['meta_value'] ); + break; + case '_um_verified': + $users_map[ $metadatarow['user_id'] ]['verified'] = $metadatarow['meta_value'] == 'verified' ? true : false; + break; + } + } + + if ( ! empty( $users_map ) ) { + foreach ( $users_map as $user_id => $metavalue ) { + update_user_meta( $user_id, 'um_member_directory_data', $metavalue ); + } + } + + $from = ( $_POST['page'] * $per_page ) - $per_page + 1; + $to = $_POST['page'] * $per_page; + + wp_send_json_success( array( 'message' => sprintf( __( 'Metadata from %s to %s users were upgraded successfully...', 'ultimate-member' ), $from, $to ) ) ); +} + + +function um_upgrade_metatable213beta3() { + UM()->admin()->check_ajax_nonce(); + + um_maybe_unset_time_limit(); + + global $wpdb; + + $charset_collate = $wpdb->get_charset_collate(); + + $sql = "CREATE TABLE {$wpdb->prefix}um_metadata ( +umeta_id bigint(20) unsigned NOT NULL auto_increment, +user_id bigint(20) unsigned NOT NULL default '0', +um_key varchar(255) default NULL, +um_value longtext default NULL, +PRIMARY KEY (umeta_id), +KEY user_id_indx (user_id), +KEY meta_key_indx (um_key), +KEY meta_value_indx (um_value(191)) +) $charset_collate;"; + + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); + dbDelta( $sql ); + + update_option( 'um_last_version_upgrade', '2.1.3-beta3' ); + wp_send_json_success( array( 'message' => __( 'Usermeta table was upgraded successfully', 'ultimate-member' ) ) ); +} \ No newline at end of file diff --git a/includes/admin/core/packages/2.1.3-beta3/hooks.php b/includes/admin/core/packages/2.1.3-beta3/hooks.php new file mode 100644 index 00000000..0add808f --- /dev/null +++ b/includes/admin/core/packages/2.1.3-beta3/hooks.php @@ -0,0 +1,7 @@ + 'users_count213beta3', + 'metadata_per_user213beta3' => 'metadata_per_user213beta3', + 'metatable213beta3' => 'metatable213beta3', +); \ No newline at end of file diff --git a/includes/admin/core/packages/2.1.3-beta3/init.php b/includes/admin/core/packages/2.1.3-beta3/init.php new file mode 100644 index 00000000..dfc340e0 --- /dev/null +++ b/includes/admin/core/packages/2.1.3-beta3/init.php @@ -0,0 +1,93 @@ + + + + \ No newline at end of file diff --git a/includes/admin/templates/directory/search.php b/includes/admin/templates/directory/search.php index 840bd306..0c7e72cb 100644 --- a/includes/admin/templates/directory/search.php +++ b/includes/admin/templates/directory/search.php @@ -12,36 +12,6 @@ global $post_id; ?> $_um_roles_filter_value = get_post_meta( $post_id, '_um_roles_can_filter', true ); $_um_roles_filter_value = empty( $_um_roles_filter_value ) ? array() : $_um_roles_filter_value; - /** - * UM hook - * - * @type filter - * @title um_admin_custom_search_filters - * @description Custom Search Filters - * @input_vars - * [{"var":"$custom_search","type":"array","desc":"Filters"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * - */ - $custom_search = apply_filters( 'um_admin_custom_search_filters', array() ); - $searchable_fields = UM()->builtin()->all_user_fields( 'date,time,url' ); - $searchable_fields = $searchable_fields + $custom_search; - $user_fields = array(); - foreach ( $searchable_fields as $key => $arr ) { - $user_fields[ $key ] = isset( $arr['title'] ) ? $arr['title'] : ''; - } - - //$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 ); diff --git a/includes/core/class-date-time.php b/includes/core/class-date-time.php index 0a462d6d..7af01cc0 100644 --- a/includes/core/class-date-time.php +++ b/includes/core/class-date-time.php @@ -79,22 +79,22 @@ if ( ! class_exists( 'um\core\Date_Time' ) ) { } if ( $days == 1 ) { - $since = sprintf( __( 'Yesterday at %s', 'ultimate-member' ), date_i18n( 'g:ia', $from ) ); + $since = sprintf( __( 'Yesterday at %s', 'ultimate-member' ), date_i18n( get_option( 'time_format' ), $from ) ); } else { - $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) ); + $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) ); } } elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) { - $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) ); + $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) ); } elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) { - $since = sprintf( __( '%s at %s','ultimate-member'), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) ); + $since = sprintf( __( '%s at %s','ultimate-member'), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) ); } elseif ( $diff >= YEAR_IN_SECONDS ) { - $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d, Y', $from ), date_i18n( 'g:ia', $from ) ); + $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( get_option( 'date_format' ), $from ), date_i18n( get_option( 'time_format' ), $from ) ); } diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index 7670c922..f328ab41 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -644,13 +644,14 @@ PRIMARY KEY (id) } case 'slider': { $range = $this->slider_filters_range( $filter, $directory_data ); - $placeholder = $this->slider_range_placeholder( $filter, $attrs ); + + list( $single_placeholder, $plural_placeholder ) = $this->slider_range_placeholder( $filter, $attrs ); if ( $range ) { ?>
-
+
$label: {min_range} - {max_range}"; + $placeholders = array( + "$label: {value}", + "$label: {min_range} - {max_range}", + ); break; case 'rating': - $placeholder = "$label: {min_range} - {max_range}" . __( ' stars', 'ultimate-member' ); + $placeholders = array( + "$label: {value}" . __( ' stars', 'ultimate-member' ), + "$label: {min_range} - {max_range}" . __( ' stars', 'ultimate-member' ) + ); break; } } @@ -794,12 +801,15 @@ PRIMARY KEY (id) break; } case 'birth_date': { - $placeholder = __( 'Age: {min_range} - {max_range} years old', 'ultimate-member' ); + $placeholders = array( + __( 'Age: {value} years old', 'ultimate-member' ), + __( 'Age: {min_range} - {max_range} years old', 'ultimate-member' ) + ); break; } } - return $placeholder; + return $placeholders; } @@ -1607,12 +1617,12 @@ PRIMARY KEY (id) case 'birth_date': $from_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ), date( 'Y', time() - min( $value ) * YEAR_IN_SECONDS ) ) ); - $to_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ) + 1, date( 'Y', time() - ( max( $value ) + 1 ) * YEAR_IN_SECONDS ) ) ); + $to_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ) + 1, date( 'Y', time() - ( max( $value ) + 1 ) * YEAR_IN_SECONDS ) - 1 ) ); $meta_query = array( array( 'key' => 'birth_date', - 'value' => array( $from_date, $to_date ), + 'value' => array( $to_date, $from_date ), 'compare' => 'BETWEEN', 'type' => 'DATE', 'inclusive' => true, @@ -1621,7 +1631,7 @@ PRIMARY KEY (id) $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) ); - $this->custom_filters_in_query[ $field ] = array( $from_date, $to_date ); + $this->custom_filters_in_query[ $field ] = array( $to_date, $from_date ); break; case 'user_registered': diff --git a/includes/core/class-plugin-updater.php b/includes/core/class-plugin-updater.php index 1e3e198b..a2c4212a 100644 --- a/includes/core/class-plugin-updater.php +++ b/includes/core/class-plugin-updater.php @@ -274,6 +274,19 @@ if ( ! class_exists( 'um\core\Plugin_Updater' ) ) { if ( ! is_wp_error( $request ) ) { $request = json_decode( wp_remote_retrieve_body( $request ) ); + } else { + $request = wp_remote_post( + UM()->store_url, + array( + 'timeout' => UM()->request_timeout, + 'sslverify' => true, + 'body' => $api_params + ) + ); + + if ( ! is_wp_error( $request ) ) { + $request = json_decode( wp_remote_retrieve_body( $request ) ); + } } $request = ( $request ) ? maybe_unserialize( $request ) : false; diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 57521216..de393acd 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -1446,7 +1446,7 @@ if ( ! class_exists( 'um\core\User' ) ) { if ( ! empty( $this->profile['role'] ) ) { return $this->profile['role']; } else { - if ( $this->profile['wp_roles'] == 'administrator' ) { + if ( ! empty( $this->profile['wp_roles'] ) && $this->profile['wp_roles'] == 'administrator' ) { return 'admin'; } else { return 'member'; diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index b114bc87..578acd2f 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -120,8 +120,8 @@ function um_profile_field_filter_hook__user_registered( $value, $data ) { if ( ! $value ) { return ''; } - $value = strtotime($value); - $value = sprintf(__('Joined %s','ultimate-member'), date_i18n('F d, Y', $value) ); + $value = strtotime( $value ); + $value = sprintf( __( 'Joined %s', 'ultimate-member' ), date_i18n( get_option( 'date_format' ), $value ) ); return $value; } add_filter( 'um_profile_field_filter_hook__user_registered', 'um_profile_field_filter_hook__user_registered', 99, 2 ); diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index 04273b5c..555aa3ec 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -995,12 +995,12 @@ function um_is_file_owner( $url, $user_id = null, $image_path = false ) { */ function um_is_temp_file( $filename ) { $user_basedir = UM()->uploader()->get_upload_user_base_dir( 'temp' ); - + $file = $user_basedir . '/' . $filename; - + if ( file_exists( $file ) ) { return true; - } + } return false; } @@ -1014,8 +1014,9 @@ function um_is_temp_file( $filename ) { */ function um_user_last_login_timestamp( $user_id ) { $value = get_user_meta( $user_id, '_um_last_login', true ); - if ($value) + if ( $value ) { return $value; + } return ''; } @@ -1047,8 +1048,9 @@ function um_get_core_page( $slug, $updated = false ) { if ( isset( UM()->config()->permalinks[ $slug ] ) ) { $url = get_permalink( UM()->config()->permalinks[ $slug ] ); - if ( $updated ) + if ( $updated ) { $url = add_query_arg( 'updated', esc_attr( $updated ), $url ); + } } /** diff --git a/templates/members.php b/templates/members.php index 021bd26f..bd88b109 100644 --- a/templates/members.php +++ b/templates/members.php @@ -272,11 +272,7 @@ if ( ( ( $search && $show_search ) || ( $filters && $show_filters && count( $sea <# _.each( data.filters, function( filter, key, list ) { #>
<# if ( filter.type == 'slider' ) { #> - <# if ( filter.value[0] == filter.value[1] ) { #> - {{{filter.label}}}: {{{filter.value[0]}}} - <# } else { #> - {{{filter.value_label}}} - <# } #> + {{{filter.value_label}}} <# } else { #> {{{filter.label}}}: {{{filter.value_label}}} <# } #> diff --git a/ultimate-member.php b/ultimate-member.php index 95115192..fa9d0cfa 100644 --- a/ultimate-member.php +++ b/ultimate-member.php @@ -3,7 +3,7 @@ Plugin Name: Ultimate Member Plugin URI: http://ultimatemember.com/ Description: The easiest way to create powerful online communities and beautiful user profiles with WordPress -Version: 2.1.3-beta2 +Version: 2.1.3-beta3 Author: Ultimate Member Author URI: http://ultimatemember.com/ Text Domain: ultimate-member