Ultimate Member – User Profile & Membership Plugin - Version 2.1.3

Version Description

Download this release

Release Info

Developer nsinelnikov
Plugin Icon 128x128 Ultimate Member – User Profile & Membership Plugin
Version 2.1.3
Comparing to
See all releases

Code changes from version 2.1.2 to 2.1.3

Files changed (67) hide show
  1. assets/css/um-account.css +26 -0
  2. assets/css/um-members.css +1 -1
  3. assets/img/extensions/profile-tabs.png +0 -0
  4. assets/js/um-account.js +31 -0
  5. assets/js/um-account.min.js +1 -1
  6. assets/js/um-conditional.js +6 -2
  7. assets/js/um-conditional.min.js +1 -1
  8. assets/js/um-members.js +151 -69
  9. assets/js/um-members.min.js +1 -1
  10. assets/js/um-modal.js +21 -22
  11. assets/js/um-modal.min.js +1 -1
  12. assets/js/um-scripts.js +90 -66
  13. assets/js/um-scripts.min.js +1 -1
  14. includes/admin/assets/css/um-admin-forms.css +94 -1
  15. includes/admin/assets/js/um-admin-forms.js +225 -11
  16. includes/admin/assets/js/um-admin-modal.js +2 -2
  17. includes/admin/core/class-admin-ajax-hooks.php +2 -0
  18. includes/admin/core/class-admin-builder.php +9 -9
  19. includes/admin/core/class-admin-enqueue.php +5 -0
  20. includes/admin/core/class-admin-forms.php +173 -3
  21. includes/admin/core/class-admin-metabox.php +20 -2
  22. includes/admin/core/class-admin-notices.php +11 -4
  23. includes/admin/core/class-admin-settings.php +333 -65
  24. includes/admin/core/class-admin-upgrade.php +3 -8
  25. includes/admin/core/packages/2.1.3-beta3/functions.php +147 -0
  26. includes/admin/core/packages/2.1.3-beta3/hooks.php +7 -0
  27. includes/admin/core/packages/2.1.3-beta3/init.php +93 -0
  28. includes/admin/templates/directory/search.php +0 -30
  29. includes/admin/templates/directory/sorting.php +11 -3
  30. includes/admin/templates/extensions.php +6 -0
  31. includes/class-config.php +3 -0
  32. includes/class-dependencies.php +2 -1
  33. includes/class-init.php +9 -3
  34. includes/core/class-builtin.php +15 -12
  35. includes/core/class-date-time.php +5 -5
  36. includes/core/class-enqueue.php +19 -4
  37. includes/core/class-fields.php +107 -86
  38. includes/core/class-files.php +69 -13
  39. includes/core/class-gdpr.php +10 -1
  40. includes/core/class-member-directory-meta.php +755 -0
  41. includes/core/class-member-directory.php +323 -156
  42. includes/core/class-password.php +2 -0
  43. includes/core/class-permalinks.php +8 -3
  44. includes/core/class-plugin-updater.php +18 -1
  45. includes/core/class-profile.php +11 -0
  46. includes/core/class-rewrite.php +20 -38
  47. includes/core/class-roles-capabilities.php +2 -2
  48. includes/core/class-setup.php +25 -0
  49. includes/core/class-shortcodes.php +2 -1
  50. includes/core/class-uploader.php +24 -14
  51. includes/core/class-user-posts.php +7 -1
  52. includes/core/class-user.php +151 -1
  53. includes/core/um-actions-account.php +113 -4
  54. includes/core/um-actions-profile.php +11 -9
  55. includes/core/um-filters-fields.php +2 -2
  56. includes/core/um-filters-members.php +0 -73
  57. includes/um-short-functions.php +13 -7
  58. languages/ultimate-member-en_US.mo +0 -0
  59. languages/ultimate-member-en_US.po +1488 -1329
  60. readme.txt +32 -1
  61. templates/members-grid.php +1 -1
  62. templates/members-header.php +2 -2
  63. templates/members-list.php +1 -1
  64. templates/members.php +29 -11
  65. templates/profile.php +1 -1
  66. templates/register.php +1 -1
  67. ultimate-member.php +1 -1
assets/css/um-account.css CHANGED
@@ -205,4 +205,30 @@
205
  color: #444;
206
  font-weight: bold;
207
  text-decoration: none !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  }
205
  color: #444;
206
  font-weight: bold;
207
  text-decoration: none !important;
208
+ }
209
+
210
+ .um-field-export_data .um-field-error {
211
+ display: none;
212
+ }
213
+
214
+ .um-field-export_data .um-field-area-response {
215
+ display: none;
216
+ line-height: 1.5;
217
+ padding: 10px 0;
218
+ }
219
+
220
+ .um-request-button {
221
+ display: inline-block;
222
+ background-color: #3ba1da;
223
+ border-radius: 5px;
224
+ color: #fff;
225
+ margin: 10px 0 0;
226
+ padding: 5px 10px;
227
+ text-decoration: none;
228
+ }
229
+
230
+ .um-request-button:hover {
231
+ background-color: #44b0ec;
232
+ color: #fff;
233
+ text-decoration: none;
234
  }
assets/css/um-members.css CHANGED
@@ -161,7 +161,7 @@ body #content .um-directory a {
161
  display: flex;
162
  flex-direction: row;
163
  justify-content: flex-start;
164
- align-items: baseline;
165
  flex-wrap: nowrap;
166
  width: 60%; }
167
  .um-directory .um-member-directory-header .um-member-directory-header-row .um-member-directory-search-line label {
161
  display: flex;
162
  flex-direction: row;
163
  justify-content: flex-start;
164
+ align-items: center;
165
  flex-wrap: nowrap;
166
  width: 60%; }
167
  .um-directory .um-member-directory-header .um-member-directory-header-row .um-member-directory-search-line label {
assets/img/extensions/profile-tabs.png ADDED
Binary file
assets/js/um-account.js CHANGED
@@ -64,4 +64,35 @@ jQuery(document).ready(function() {
64
 
65
  return false;
66
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  });
64
 
65
  return false;
66
  });
67
+
68
+
69
+ jQuery(document.body).on( 'click', '.um-request-button', function(e) {
70
+ e.preventDefault();
71
+
72
+ var request_action = jQuery(this).data('action');
73
+ var password = jQuery('#' + request_action).val();
74
+ jQuery('.um-field-area-response.' + request_action).hide();
75
+
76
+ if ( password === '' ) {
77
+ jQuery('.um-field-error.' + request_action).show();
78
+ } else {
79
+ jQuery('.um-field-error.' + request_action).hide();
80
+ var request = {
81
+ request_action: request_action,
82
+ password: password,
83
+ nonce: um_scripts.nonce
84
+ };
85
+ wp.ajax.send( 'um_request_user_data', {
86
+ data: request,
87
+ success: function (data) {
88
+ jQuery('.um-field-area-response.' + request_action).text( data.answer ).show();
89
+ },
90
+ error: function (data) {
91
+ console.log(data);
92
+ }
93
+ });
94
+ }
95
+
96
+ });
97
+
98
  });
assets/js/um-account.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(){var a=jQuery(".um-account-main").attr("data-current_tab");a&&(jQuery('.um-account-tab[data-tab="'+a+'"]').show(),jQuery(".um-account-tab:not(:visible)").find("input:not(:disabled)").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0)),jQuery(document.body).on("click",".um-account-side li a",function(a){a.preventDefault();var t=jQuery(this);t.parents("ul").find("li a").removeClass("current"),t.addClass("current");var u=jQuery(this).attr("href"),e=jQuery(this).attr("data-tab");return jQuery('input[id="_um_account_tab"]:hidden').val(e),window.history.pushState("","",u),jQuery(".um-account-tab").hide(),jQuery('.um-account-tab[data-tab="'+e+'"]').fadeIn(),jQuery(".um-account-tab:visible").find("input.um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input:not(:disabled)").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-nav a").removeClass("current"),jQuery('.um-account-nav a[data-tab="'+e+'"]').addClass("current"),!1}),jQuery(document.body).on("click",".um-account-nav a",function(a){a.preventDefault();var t=jQuery(this).attr("data-tab"),u=jQuery(this).parents("div"),e=jQuery(this);return jQuery('input[id="_um_account_tab"]:hidden').val(t),jQuery(".um-account-tab").hide(),e.hasClass("current")?(u.next(".um-account-tab").slideUp(),e.removeClass("current")):(u.next(".um-account-tab").slideDown(),e.parents("div").find("a").removeClass("current"),e.addClass("current")),jQuery(".um-account-tab:visible").find("input.um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input:not(:disabled)").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-side li a").removeClass("current"),jQuery('.um-account-side li a[data-tab="'+t+'"]').addClass("current"),!1})});
1
+ jQuery(document).ready(function(){var a=jQuery(".um-account-main").attr("data-current_tab");a&&(jQuery('.um-account-tab[data-tab="'+a+'"]').show(),jQuery(".um-account-tab:not(:visible)").find("input:not(:disabled)").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0)),jQuery(document.body).on("click",".um-account-side li a",function(a){a.preventDefault();var t=jQuery(this);t.parents("ul").find("li a").removeClass("current"),t.addClass("current");var e=jQuery(this).attr("href"),u=jQuery(this).attr("data-tab");return jQuery('input[id="_um_account_tab"]:hidden').val(u),window.history.pushState("","",e),jQuery(".um-account-tab").hide(),jQuery('.um-account-tab[data-tab="'+u+'"]').fadeIn(),jQuery(".um-account-tab:visible").find("input.um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input:not(:disabled)").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-nav a").removeClass("current"),jQuery('.um-account-nav a[data-tab="'+u+'"]').addClass("current"),!1}),jQuery(document.body).on("click",".um-account-nav a",function(a){a.preventDefault();var t=jQuery(this).attr("data-tab"),e=jQuery(this).parents("div"),u=jQuery(this);return jQuery('input[id="_um_account_tab"]:hidden').val(t),jQuery(".um-account-tab").hide(),u.hasClass("current")?(e.next(".um-account-tab").slideUp(),u.removeClass("current")):(e.next(".um-account-tab").slideDown(),u.parents("div").find("a").removeClass("current"),u.addClass("current")),jQuery(".um-account-tab:visible").find("input.um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input:not(:disabled)").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-side li a").removeClass("current"),jQuery('.um-account-side li a[data-tab="'+t+'"]').addClass("current"),!1}),jQuery(document.body).on("click",".um-request-button",function(a){a.preventDefault();var t=jQuery(this).data("action"),e=jQuery("#"+t).val();if(jQuery(".um-field-area-response."+t).hide(),""===e)jQuery(".um-field-error."+t).show();else{jQuery(".um-field-error."+t).hide();var u={request_action:t,password:e,nonce:um_scripts.nonce};wp.ajax.send("um_request_user_data",{data:u,success:function(a){jQuery(".um-field-area-response."+t).text(a.answer).show()},error:function(a){console.log(a)}})}})});
assets/js/um-conditional.js CHANGED
@@ -35,9 +35,12 @@ function um_get_field_default_value( $dom ) {
35
  if ($dom.find('input[type=checkbox]:checked').length >= 1) {
36
 
37
  if ($dom.find('input[type=checkbox]:checked').length > 1) {
 
 
38
  $dom.find('input[type=checkbox]:checked').each(function () {
39
- default_value = default_value + jQuery(this).val() + ' ';
40
  });
 
41
  } else {
42
  default_value = $dom.find('input[type=checkbox]:checked').val();
43
  }
@@ -387,6 +390,7 @@ function um_field_restore_default_value( $dom ) {
387
 
388
  case 'checkbox':
389
 
 
390
  if ( $dom.find('input[type=checkbox]:checked').length >= 1 ) {
391
 
392
  $dom.find('input[type=checkbox]:checked').removeAttr('checked');
@@ -408,7 +412,7 @@ function um_field_restore_default_value( $dom ) {
408
  cbox_elem.closest('.um-field-checkbox').find('i').removeClass('um-icon-android-checkbox-outline-blank');
409
  cbox_elem.closest('.um-field-checkbox').find('i').addClass('um-icon-android-checkbox-outline');
410
  cbox_elem.closest('.um-field-checkbox').addClass('active');
411
- }
412
 
413
  }
414
 
35
  if ($dom.find('input[type=checkbox]:checked').length >= 1) {
36
 
37
  if ($dom.find('input[type=checkbox]:checked').length > 1) {
38
+ var arr_values = [];
39
+ arr_values.push( default_value );
40
  $dom.find('input[type=checkbox]:checked').each(function () {
41
+ arr_values.push( jQuery(this).val() );
42
  });
43
+ default_value = arr_values;
44
  } else {
45
  default_value = $dom.find('input[type=checkbox]:checked').val();
46
  }
390
 
391
  case 'checkbox':
392
 
393
+
394
  if ( $dom.find('input[type=checkbox]:checked').length >= 1 ) {
395
 
396
  $dom.find('input[type=checkbox]:checked').removeAttr('checked');
412
  cbox_elem.closest('.um-field-checkbox').find('i').removeClass('um-icon-android-checkbox-outline-blank');
413
  cbox_elem.closest('.um-field-checkbox').find('i').addClass('um-icon-android-checkbox-outline');
414
  cbox_elem.closest('.um-field-checkbox').addClass('active');
415
+ }
416
 
417
  }
418
 
assets/js/um-conditional.min.js CHANGED
@@ -1 +1 @@
1
- var arr_all_conditions=[],um_field_conditions={},um_field_default_values={};function um_get_field_default_value(e){var i="",n=um_get_field_type(e);switch(n){case"text":case"number":case"date":case"textarea":case"select":i=e.find("input:text,input[type=number],textarea,select").val();break;case"multiselect":i=e.find("select").val();break;case"radio":1<=e.find("input[type=radio]:checked").length&&(i=e.find("input[type=radio]:checked").val());break;case"checkbox":1<=e.find("input[type=checkbox]:checked").length&&(1<e.find("input[type=checkbox]:checked").length?e.find("input[type=checkbox]:checked").each(function(){i=i+jQuery(this).val()+" "}):i=e.find("input[type=checkbox]:checked").val())}return{type:n,value:i}}function um_get_field_element(e){switch(um_get_field_type(e)){case"text":case"number":case"date":case"textarea":case"select":case"multiselect":case"radio":case"checkbox":return e.find("input,textarea,select")}return""}function um_get_field_type(e){var n="",i=e.attr("class");return jQuery.each(i.split(" "),function(e,i){-1!=i.indexOf("um-field-type")&&(n=i.split("_")[1])}),n}function um_get_field_children(n){var t=[];return jQuery.each(arr_all_conditions,function(e,i){i.field.parent==n&&t.push(i.field.condition)}),t}function um_splitup_array(e,i){for(var n=e.length%i,t=n,a=Math.floor(e.length/i),u=[],o=0;o<e.length;o+=a){var r=a+o,d=!1;0!==n&&t&&(r++,t--,d=!0),u.push(e.slice(o,r)),d&&o++}var c=[];return jQuery.each(u,function(e,i){c.push({action:i[0],if_field:i[1],operator:i[2],value:i[3]})}),c}function um_get_field_data(e){return um_live_field=e.parents(".um-field").data("key"),um_live_value=e.val(),e.is(":checkbox")&&(um_live_value="",1<e.parents(".um-field").find("input:checked").length?e.parents(".um-field").find("input:checked").each(function(){um_live_value=um_live_value+jQuery(this).val()+" "}):1<=e.parents(".um-field").find("input:checked").length&&(um_live_value=e.parents(".um-field").find("input:checked").val())),e.is(":radio")&&(um_live_value=e.parents(".um-field").find("input[type=radio]:checked").val()),um_live_value}function um_in_array(e,i,n){var t,a=!1;n=!!n;for(t in i)if(n&&i[t]===e||!n&&i[t]==e){a=!0;break}return a}function um_apply_conditions(n,e){if(n.parents(".um-field[data-key]").length){var i=n.parents(".um-field[data-key]").data("key"),t=um_field_conditions[i];if(void 0!==t){var a=um_get_field_data(n),u={},o={},r={};jQuery.each(t,function(e,i){void 0===o[i.owner]&&(o[i.owner]=[],r[i.owner]={}),o[i.owner].push(i.value),r[i.owner]=i}),jQuery.each(t,function(e,i){void 0===u[i.owner]&&(u[i.owner]={}),"empty"==i.operator&&(!a||""==a&&um_in_array(a,o[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1),"not empty"==i.operator&&(a&&""!=a&&!um_in_array(a,o[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1),"equals to"==i.operator&&(i.value==a&&um_in_array(a,o[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1),"not equals"==i.operator&&(jQuery.isNumeric(i.value)&&parseInt(a)!=parseInt(i.value)&&a&&!um_in_array(a,o[i.owner])?u[i.owner][e]=!0:i.value==a||um_in_array(a,o[i.owner])?u[i.owner][e]=!1:u[i.owner][e]=!0),"greater than"==i.operator&&(jQuery.isNumeric(i.value)&&parseInt(a)>parseInt(i.value)?u[i.owner][e]=!0:u[i.owner][e]=!1),"less than"==i.operator&&(jQuery.isNumeric(i.value)&&parseInt(a)<parseInt(i.value)?u[i.owner][e]=!0:u[i.owner][e]=!1),"contains"==i.operator&&("multiselect"==um_get_field_type(n.parents(".um-field[data-key]"))?a&&0<=a.indexOf(i.value)&&um_in_array(i.value,a)?u[i.owner][e]=!0:u[i.owner][e]=!1:"checkbox"==um_get_field_type(n.parents(".um-field[data-key]"))?a&&0<=a.indexOf(i.value)?u[i.owner][e]=!0:u[i.owner][e]=!1:a&&0<=a.indexOf(i.value)&&um_in_array(a,o[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1)}),jQuery.each(u,function(e,i){um_in_array(!0,i)?um_field_apply_action(n,r[e],!0):um_field_apply_action(n,r[e],!1)}),n.trigger("um_fields_change")}}}function um_field_apply_action(e,i,n){var t=jQuery('div.um-field[data-key="'+i.owner+'"]');"show"==i.action&&n&&(t.show(),_show_in_ie(t),um_field_restore_default_value(t)),"show"!=i.action||n||(t.hide(),_hide_in_ie(t)),"hide"==i.action&&n&&(t.hide(),_hide_in_ie(t)),"hide"!=i.action||n||(t.show(),_show_in_ie(t),um_field_restore_default_value(t)),e.removeClass("um-field-has-changed")}function um_field_restore_default_value(t){var e=um_get_field_type(t),i=t.data("key"),n=um_field_default_values[i];switch(e){case"text":case"number":case"date":case"textarea":t.find("input:text,input[type=number],textareas").val(n.value);break;case"select":t.find("select").find("option").prop("selected",!1),t.find("select").val(n.value),t.find("select").trigger("change");break;case"multiselect":t.find("select").find("option").prop("selected",!1),jQuery.each(n.value,function(e,i){t.find("select").find('option[value="'+i+'"]').attr("selected",!0)}),t.find("select").trigger("change");break;case"checkbox":if(1<=t.find("input[type=checkbox]:checked").length)if(t.find("input[type=checkbox]:checked").removeAttr("checked"),t.find("span.um-field-checkbox-state i").removeClass("um-icon-android-checkbox-outline"),t.find("span.um-field-checkbox-state i").addClass("um-icon-android-checkbox-outline-blank"),t.find(".um-field-checkbox.active").removeClass("active"),jQuery.isArray(n.value))jQuery.each(n.value,function(e,i){var n=t.find('input[type=checkbox][value="'+i+'"]');n.attr("checked",!0),n.closest(".um-field-checkbox").find("i").removeClass("um-icon-android-checkbox-outline-blank"),n.closest(".um-field-checkbox").find("i").addClass("um-icon-android-checkbox-outline"),n.closest(".um-field-checkbox").addClass("active")});else{var a=t.find('input[type=checkbox][value="'+n.value+'"]');a.attr("checked",!0),a.closest(".um-field-checkbox").find("i").removeClass("um-icon-android-checkbox-outline-blank"),a.closest(".um-field-checkbox").find("i").addClass("um-icon-android-checkbox-outline"),a.closest(".um-field-checkbox").addClass("active")}break;case"radio":1<=t.find("input[type=radio]:checked").length&&setTimeout(function(){t.find("input[type=radio]:checked").removeAttr("checked"),t.find("span.um-field-radio-state i").removeClass("um-icon-android-radio-button-on"),t.find("span.um-field-radio-state i").addClass("um-icon-android-radio-button-off"),t.find(".um-field-radio.active").removeClass("active");var e=t.find("input[type=radio][value='"+n.value+"']");e.attr("checked",!0),e.closest(".um-field-radio").find("i").removeClass("um-icon-android-radio-button-off"),e.closest(".um-field-radio").find("i").addClass("um-icon-android-radio-button-on"),e.closest(".um-field-radio").addClass("active")},100)}if(!t.hasClass("um-field-has-changed")){var u=um_get_field_element(t);"radio"!=e&&"checkbox"!=e||(u=u.find(":checked")),u&&(u.trigger("change"),t.addClass("um-field-has-changed"))}}function um_field_hide_siblings(){jQuery.each(um_field_conditions,function(e,i){(1<=jQuery('.um-field[data-key="'+e+'"]:hidden').length||"none"==jQuery('.um-field[data-key="'+e+'"]').css("display"))&&jQuery.each(i,function(e,i){jQuery('.um-field[data-key="'+i.owner+'"]').hide()})})}function _hide_in_ie(e){void 0!==jQuery.browser&&jQuery.browser.msie&&e.css({visibility:"hidden"})}function _show_in_ie(e){void 0!==jQuery.browser&&jQuery.browser.msie&&e.css({visibility:"visible"})}function um_init_field_conditions(){var e=[];jQuery(".um-field[data-key]").each(function(){var t=jQuery(this).data("key");e.push(t);var u={};jQuery.each(jQuery(this)[0].attributes,function(e,i){if(-1!=i.name.indexOf("data-cond")){var n=i.name.slice(10),t=n.substring(1,0),a=n.slice(2);void 0===u[t]&&(u[t]={}),u[t][a]=i.value}}),jQuery.each(u,function(e,i){var n={field:{owner:t,action:i.action,parent:i.field,operator:i.operator,value:i.value,condition:{owner:t,action:i.action,operator:i.operator,value:i.value}}};arr_all_conditions.push(n)}),um_field_default_values[jQuery(this).data("key")]=um_get_field_default_value(jQuery(this))}),jQuery.each(e,function(e,i){um_field_conditions[i]=um_get_field_children(i)}),jQuery(".um-field[data-key]:visible").each(function(){var e=um_get_field_element(jQuery(this));void 0!==e.trigger&&e.trigger("change")})}jQuery(document).ready(function(){jQuery(document).on("change",'.um-field select, .um-field input[type="radio"], .um-field input[type="checkbox"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("input change",'.um-field input[type="text"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("input change",'.um-field input[type="number"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("input change",'.um-field input[type="password"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("um_fields_change",function(){um_field_hide_siblings(),um_field_hide_siblings()}),um_init_field_conditions()});
1
+ var arr_all_conditions=[],um_field_conditions={},um_field_default_values={};function um_get_field_default_value(e){var i="",n=um_get_field_type(e);switch(n){case"text":case"number":case"date":case"textarea":case"select":i=e.find("input:text,input[type=number],textarea,select").val();break;case"multiselect":i=e.find("select").val();break;case"radio":1<=e.find("input[type=radio]:checked").length&&(i=e.find("input[type=radio]:checked").val());break;case"checkbox":if(1<=e.find("input[type=checkbox]:checked").length)if(1<e.find("input[type=checkbox]:checked").length){var a=[];a.push(i),e.find("input[type=checkbox]:checked").each(function(){a.push(jQuery(this).val())}),i=a}else i=e.find("input[type=checkbox]:checked").val()}return{type:n,value:i}}function um_get_field_element(e){switch(um_get_field_type(e)){case"text":case"number":case"date":case"textarea":case"select":case"multiselect":case"radio":case"checkbox":return e.find("input,textarea,select")}return""}function um_get_field_type(e){var n="",i=e.attr("class");return jQuery.each(i.split(" "),function(e,i){-1!=i.indexOf("um-field-type")&&(n=i.split("_")[1])}),n}function um_get_field_children(n){var a=[];return jQuery.each(arr_all_conditions,function(e,i){i.field.parent==n&&a.push(i.field.condition)}),a}function um_splitup_array(e,i){for(var n=e.length%i,a=n,t=Math.floor(e.length/i),u=[],r=0;r<e.length;r+=t){var o=t+r,d=!1;0!==n&&a&&(o++,a--,d=!0),u.push(e.slice(r,o)),d&&r++}var c=[];return jQuery.each(u,function(e,i){c.push({action:i[0],if_field:i[1],operator:i[2],value:i[3]})}),c}function um_get_field_data(e){return um_live_field=e.parents(".um-field").data("key"),um_live_value=e.val(),e.is(":checkbox")&&(um_live_value="",1<e.parents(".um-field").find("input:checked").length?e.parents(".um-field").find("input:checked").each(function(){um_live_value=um_live_value+jQuery(this).val()+" "}):1<=e.parents(".um-field").find("input:checked").length&&(um_live_value=e.parents(".um-field").find("input:checked").val())),e.is(":radio")&&(um_live_value=e.parents(".um-field").find("input[type=radio]:checked").val()),um_live_value}function um_in_array(e,i,n){var a,t=!1;n=!!n;for(a in i)if(n&&i[a]===e||!n&&i[a]==e){t=!0;break}return t}function um_apply_conditions(n,e){if(n.parents(".um-field[data-key]").length){var i=n.parents(".um-field[data-key]").data("key"),a=um_field_conditions[i];if(void 0!==a){var t=um_get_field_data(n),u={},r={},o={};jQuery.each(a,function(e,i){void 0===r[i.owner]&&(r[i.owner]=[],o[i.owner]={}),r[i.owner].push(i.value),o[i.owner]=i}),jQuery.each(a,function(e,i){void 0===u[i.owner]&&(u[i.owner]={}),"empty"==i.operator&&(!t||""==t&&um_in_array(t,r[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1),"not empty"==i.operator&&(t&&""!=t&&!um_in_array(t,r[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1),"equals to"==i.operator&&(i.value==t&&um_in_array(t,r[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1),"not equals"==i.operator&&(jQuery.isNumeric(i.value)&&parseInt(t)!=parseInt(i.value)&&t&&!um_in_array(t,r[i.owner])?u[i.owner][e]=!0:i.value==t||um_in_array(t,r[i.owner])?u[i.owner][e]=!1:u[i.owner][e]=!0),"greater than"==i.operator&&(jQuery.isNumeric(i.value)&&parseInt(t)>parseInt(i.value)?u[i.owner][e]=!0:u[i.owner][e]=!1),"less than"==i.operator&&(jQuery.isNumeric(i.value)&&parseInt(t)<parseInt(i.value)?u[i.owner][e]=!0:u[i.owner][e]=!1),"contains"==i.operator&&("multiselect"==um_get_field_type(n.parents(".um-field[data-key]"))?t&&0<=t.indexOf(i.value)&&um_in_array(i.value,t)?u[i.owner][e]=!0:u[i.owner][e]=!1:"checkbox"==um_get_field_type(n.parents(".um-field[data-key]"))?t&&0<=t.indexOf(i.value)?u[i.owner][e]=!0:u[i.owner][e]=!1:t&&0<=t.indexOf(i.value)&&um_in_array(t,r[i.owner])?u[i.owner][e]=!0:u[i.owner][e]=!1)}),jQuery.each(u,function(e,i){um_in_array(!0,i)?um_field_apply_action(n,o[e],!0):um_field_apply_action(n,o[e],!1)}),n.trigger("um_fields_change")}}}function um_field_apply_action(e,i,n){var a=jQuery('div.um-field[data-key="'+i.owner+'"]');"show"==i.action&&n&&(a.show(),_show_in_ie(a),um_field_restore_default_value(a)),"show"!=i.action||n||(a.hide(),_hide_in_ie(a)),"hide"==i.action&&n&&(a.hide(),_hide_in_ie(a)),"hide"!=i.action||n||(a.show(),_show_in_ie(a),um_field_restore_default_value(a)),e.removeClass("um-field-has-changed")}function um_field_restore_default_value(a){var e=um_get_field_type(a),i=a.data("key"),n=um_field_default_values[i];switch(e){case"text":case"number":case"date":case"textarea":a.find("input:text,input[type=number],textareas").val(n.value);break;case"select":a.find("select").find("option").prop("selected",!1),a.find("select").val(n.value),a.find("select").trigger("change");break;case"multiselect":a.find("select").find("option").prop("selected",!1),jQuery.each(n.value,function(e,i){a.find("select").find('option[value="'+i+'"]').attr("selected",!0)}),a.find("select").trigger("change");break;case"checkbox":if(1<=a.find("input[type=checkbox]:checked").length)if(a.find("input[type=checkbox]:checked").removeAttr("checked"),a.find("span.um-field-checkbox-state i").removeClass("um-icon-android-checkbox-outline"),a.find("span.um-field-checkbox-state i").addClass("um-icon-android-checkbox-outline-blank"),a.find(".um-field-checkbox.active").removeClass("active"),jQuery.isArray(n.value))jQuery.each(n.value,function(e,i){var n=a.find('input[type=checkbox][value="'+i+'"]');n.attr("checked",!0),n.closest(".um-field-checkbox").find("i").removeClass("um-icon-android-checkbox-outline-blank"),n.closest(".um-field-checkbox").find("i").addClass("um-icon-android-checkbox-outline"),n.closest(".um-field-checkbox").addClass("active")});else{var t=a.find('input[type=checkbox][value="'+n.value+'"]');t.attr("checked",!0),t.closest(".um-field-checkbox").find("i").removeClass("um-icon-android-checkbox-outline-blank"),t.closest(".um-field-checkbox").find("i").addClass("um-icon-android-checkbox-outline"),t.closest(".um-field-checkbox").addClass("active")}break;case"radio":1<=a.find("input[type=radio]:checked").length&&setTimeout(function(){a.find("input[type=radio]:checked").removeAttr("checked"),a.find("span.um-field-radio-state i").removeClass("um-icon-android-radio-button-on"),a.find("span.um-field-radio-state i").addClass("um-icon-android-radio-button-off"),a.find(".um-field-radio.active").removeClass("active");var e=a.find("input[type=radio][value='"+n.value+"']");e.attr("checked",!0),e.closest(".um-field-radio").find("i").removeClass("um-icon-android-radio-button-off"),e.closest(".um-field-radio").find("i").addClass("um-icon-android-radio-button-on"),e.closest(".um-field-radio").addClass("active")},100)}if(!a.hasClass("um-field-has-changed")){var u=um_get_field_element(a);"radio"!=e&&"checkbox"!=e||(u=u.find(":checked")),u&&(u.trigger("change"),a.addClass("um-field-has-changed"))}}function um_field_hide_siblings(){jQuery.each(um_field_conditions,function(e,i){(1<=jQuery('.um-field[data-key="'+e+'"]:hidden').length||"none"==jQuery('.um-field[data-key="'+e+'"]').css("display"))&&jQuery.each(i,function(e,i){jQuery('.um-field[data-key="'+i.owner+'"]').hide()})})}function _hide_in_ie(e){void 0!==jQuery.browser&&jQuery.browser.msie&&e.css({visibility:"hidden"})}function _show_in_ie(e){void 0!==jQuery.browser&&jQuery.browser.msie&&e.css({visibility:"visible"})}function um_init_field_conditions(){var e=[];jQuery(".um-field[data-key]").each(function(){var a=jQuery(this).data("key");e.push(a);var u={};jQuery.each(jQuery(this)[0].attributes,function(e,i){if(-1!=i.name.indexOf("data-cond")){var n=i.name.slice(10),a=n.substring(1,0),t=n.slice(2);void 0===u[a]&&(u[a]={}),u[a][t]=i.value}}),jQuery.each(u,function(e,i){var n={field:{owner:a,action:i.action,parent:i.field,operator:i.operator,value:i.value,condition:{owner:a,action:i.action,operator:i.operator,value:i.value}}};arr_all_conditions.push(n)}),um_field_default_values[jQuery(this).data("key")]=um_get_field_default_value(jQuery(this))}),jQuery.each(e,function(e,i){um_field_conditions[i]=um_get_field_children(i)}),jQuery(".um-field[data-key]:visible").each(function(){var e=um_get_field_element(jQuery(this));void 0!==e.trigger&&e.trigger("change")})}jQuery(document).ready(function(){jQuery(document).on("change",'.um-field select, .um-field input[type="radio"], .um-field input[type="checkbox"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("input change",'.um-field input[type="text"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("input change",'.um-field input[type="number"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("input change",'.um-field input[type="password"]',function(){um_apply_conditions(jQuery(this),!1)}),jQuery(document).on("um_fields_change",function(){um_field_hide_siblings(),um_field_hide_siblings()}),um_init_field_conditions()});
assets/js/um-members.js CHANGED
@@ -132,18 +132,32 @@ function um_members_hide_preloader( directory ) {
132
 
133
 
134
  function um_set_range_label( slider, ui ) {
135
- var placeholder = slider.siblings( '.um-slider-range' ).data( 'placeholder' );
136
-
137
- if( ui ) {
138
- placeholder = placeholder.replace( '\{min_range\}', ui.values[ 0 ] )
139
- .replace( '\{max_range\}', ui.values[ 1 ] )
140
- .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
141
- .data('label') );
 
 
 
 
 
 
 
 
142
  } else {
143
- placeholder = placeholder.replace( '\{min_range\}', slider.slider( "values", 0 ) )
144
- .replace( '\{max_range\}', slider.slider( "values", 1 ) )
145
- .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
146
- .data('label') );
 
 
 
 
 
 
147
  }
148
  slider.siblings( '.um-slider-range' ).html( placeholder );
149
 
@@ -320,7 +334,7 @@ function um_ajax_get_members( directory, args ) {
320
  }
321
 
322
  //args.directory = directory;
323
- jQuery( document ).trigger('um_members_rendered', args );
324
 
325
  um_init_new_dropdown();
326
 
@@ -500,11 +514,17 @@ function um_get_filters_data( directory ) {
500
  return;
501
  }
502
 
503
- filter_title = filter.find('div.um-slider-range').data('label');
 
 
 
 
 
 
 
 
504
 
505
- var filter_value_title = filter.find('div.um-slider-range').data( 'placeholder' ).replace( '\{min_range\}', filter_value_from )
506
- .replace( '\{max_range\}', filter_value_to )
507
- .replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') );
508
 
509
  filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':[filter_value_from, filter_value_to], 'type':filter_type} );
510
  }
@@ -559,16 +579,22 @@ function um_run_search( directory ) {
559
  directory.data( 'page', 1 );
560
  um_set_url_from_data( directory, 'page', '' );
561
 
562
- var show_after_search = directory.data('must-search');
563
- if ( show_after_search === 1 ) {
564
- var search = um_get_search( directory );
565
- if ( directory.find( '.um-members-filter-remove' ).length === 0 && ! search ) {
566
- directory.data( 'searched', 0 );
567
- directory.find('.um-members-grid, .um-members-list').remove();
568
- directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', true );
569
- directory.find( '.um-member-directory-view-type' ).addClass( 'um-disabled' );
570
- um_members_hide_preloader( directory );
571
- return;
 
 
 
 
 
 
572
  }
573
  }
574
 
@@ -1086,12 +1112,29 @@ jQuery(document.body).ready( function() {
1086
  } else if ( type === 'slider' ) {
1087
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1088
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
 
 
 
 
 
 
 
 
 
 
 
1089
  } else if ( type === 'datepicker' ) {
1090
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1091
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
 
 
 
1092
  } else if ( type === 'timepicker' ) {
1093
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1094
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
 
 
 
1095
  }
1096
 
1097
 
@@ -1108,16 +1151,21 @@ jQuery(document.body).ready( function() {
1108
  directory.find('.um-clear-filters').show();
1109
  }
1110
 
1111
- var show_after_search = directory.data('must-search');
1112
- if ( show_after_search === 1 ) {
1113
- var search = um_get_search( directory );
1114
- if ( directory.find( '.um-members-filter-remove' ).length === 0 && ! search ) {
1115
- directory.data( 'searched', 0 );
1116
- directory.find('.um-members-grid, .um-members-list').remove();
1117
- directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', true );
1118
- directory.find( '.um-member-directory-view-type' ).addClass( 'um-disabled' );
1119
- um_members_hide_preloader( directory );
1120
- return;
 
 
 
 
 
1121
  }
1122
  }
1123
 
@@ -1176,24 +1224,35 @@ jQuery(document.body).ready( function() {
1176
  }
1177
  select.select2('destroy').select2();
1178
 
 
 
 
 
1179
  } else if ( type === 'slider' ) {
1180
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1181
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1182
 
1183
- jQuery( '.um-search-filter input[name="filter_' + filter_name + '_from"]' ).val('');
1184
- jQuery( '.um-search-filter input[name="filter_' + filter_name + '_to"]' ).val('');
 
 
 
 
 
 
 
1185
  } else if ( type === 'datepicker' ) {
1186
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1187
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1188
 
1189
- jQuery( '.um-search-filter input[name="filter_' + filter_name + '_from"]' ).val('');
1190
- jQuery( '.um-search-filter input[name="filter_' + filter_name + '_to"]' ).val('');
1191
  } else if ( type === 'timepicker' ) {
1192
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1193
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1194
 
1195
- jQuery( '.um-search-filter input[name="filter_' + filter_name + '_from"]' ).val('');
1196
- jQuery( '.um-search-filter input[name="filter_' + filter_name + '_to"]' ).val('');
1197
  }
1198
  });
1199
 
@@ -1211,16 +1270,21 @@ jQuery(document.body).ready( function() {
1211
  directory.find('.um-clear-filters').parents('.um-member-directory-header-row').removeClass( 'um-header-row-invisible' );
1212
  }
1213
 
1214
- var show_after_search = directory.data('must-search');
1215
- if ( show_after_search === 1 ) {
1216
- var search = um_get_search( directory );
1217
- if ( ! search ) {
1218
- directory.data( 'searched', 0 );
1219
- directory.find('.um-members-grid, .um-members-list').remove();
1220
- directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', true );
1221
- directory.find( '.um-member-directory-view-type' ).addClass( 'um-disabled' );
1222
- um_members_hide_preloader( directory );
1223
- return;
 
 
 
 
 
1224
  }
1225
  }
1226
 
@@ -1325,6 +1389,11 @@ jQuery(document.body).ready( function() {
1325
  elem.blur();
1326
  },
1327
  onSet: function( context ) {
 
 
 
 
 
1328
  var directory = elem.parents('.um-directory');
1329
 
1330
  if ( um_is_directory_busy( directory ) ) {
@@ -1408,6 +1477,10 @@ jQuery(document.body).ready( function() {
1408
  onClose: function() { elem.blur(); },
1409
  onSet: function( context ) {
1410
 
 
 
 
 
1411
  var directory = elem.parents('.um-directory');
1412
 
1413
  if ( um_is_directory_busy( directory ) ) {
@@ -1486,12 +1559,17 @@ jQuery(document.body).ready( function() {
1486
 
1487
  });
1488
 
1489
- var show_after_search = directory.data('must-search');
1490
- if ( show_after_search === 1 ) {
1491
- var search = um_get_search( directory );
1492
- var filters_data = um_get_filters_data( directory );
1493
- if ( ! filters_data.length && ! search ) {
1494
- return;
 
 
 
 
 
1495
  }
1496
  }
1497
 
@@ -1611,17 +1689,21 @@ jQuery(document.body).ready( function() {
1611
  }
1612
  });
1613
 
1614
-
1615
- var show_after_search = directory.data('must-search');
1616
- if ( show_after_search === 1 ) {
1617
- var search = um_get_search( directory );
1618
- var filters_data = um_get_filters_data( directory );
1619
- if ( ! filters_data.length && ! search ) {
1620
- directory.data( 'searched', 0 );
1621
- um_members_hide_preloader( directory );
1622
- return;
1623
- } else {
1624
- directory.data( 'searched', 1 );
 
 
 
 
1625
  }
1626
  }
1627
 
132
 
133
 
134
  function um_set_range_label( slider, ui ) {
135
+ var placeholder = '';
136
+ var placeholder_s = slider.siblings( '.um-slider-range' ).data( 'placeholder-s' );
137
+ var placeholder_p = slider.siblings( '.um-slider-range' ).data( 'placeholder-p' );
138
+
139
+ if ( ui ) {
140
+ if ( ui.values[ 0 ] === ui.values[ 1 ] ) {
141
+ placeholder = placeholder_s.replace( '\{value\}', ui.values[ 0 ] )
142
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
143
+ .data('label') );
144
+ } else {
145
+ placeholder = placeholder_p.replace( '\{min_range\}', ui.values[ 0 ] )
146
+ .replace( '\{max_range\}', ui.values[ 1 ] )
147
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
148
+ .data('label') );
149
+ }
150
  } else {
151
+ if ( slider.slider( "values", 0 ) === slider.slider( "values", 1 ) ) {
152
+ placeholder = placeholder_s.replace( '\{value\}', slider.slider( "values", 0 ) )
153
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
154
+ .data('label') );
155
+ } else {
156
+ placeholder = placeholder_p.replace( '\{min_range\}', slider.slider( "values", 0 ) )
157
+ .replace( '\{max_range\}', slider.slider( "values", 1 ) )
158
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
159
+ .data('label') );
160
+ }
161
  }
162
  slider.siblings( '.um-slider-range' ).html( placeholder );
163
 
334
  }
335
 
336
  //args.directory = directory;
337
+ jQuery( document ).trigger('um_members_rendered', [ directory, answer ] );
338
 
339
  um_init_new_dropdown();
340
 
514
  return;
515
  }
516
 
517
+ var filter_value_title;
518
+ if ( filter_value_from === filter_value_to ) {
519
+ filter_value_title = filter.find('div.um-slider-range').data( 'placeholder-s' ).replace( '\{value\}', filter_value_from )
520
+ .replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') );
521
+ } else {
522
+ filter_value_title = filter.find('div.um-slider-range').data( 'placeholder-p' ).replace( '\{min_range\}', filter_value_from )
523
+ .replace( '\{max_range\}', filter_value_to )
524
+ .replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') );
525
+ }
526
 
527
+ filter_title = filter.find('div.um-slider-range').data('label');
 
 
528
 
529
  filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':[filter_value_from, filter_value_to], 'type':filter_type} );
530
  }
579
  directory.data( 'page', 1 );
580
  um_set_url_from_data( directory, 'page', '' );
581
 
582
+
583
+ var ignore_after_search = false;
584
+ ignore_after_search = wp.hooks.applyFilters( 'um_member_directory_ignore_after_search', ignore_after_search );
585
+
586
+ if ( ! ignore_after_search ) {
587
+ var show_after_search = directory.data('must-search');
588
+ if ( show_after_search === 1 ) {
589
+ var search = um_get_search( directory );
590
+ if ( directory.find( '.um-members-filter-remove' ).length === 0 && ! search ) {
591
+ directory.data( 'searched', 0 );
592
+ directory.find('.um-members-grid, .um-members-list').remove();
593
+ directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', true );
594
+ directory.find( '.um-member-directory-view-type' ).addClass( 'um-disabled' );
595
+ um_members_hide_preloader( directory );
596
+ return;
597
+ }
598
  }
599
  }
600
 
1112
  } else if ( type === 'slider' ) {
1113
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1114
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1115
+
1116
+
1117
+ var $slider = jQuery( '.um-search-filter #' + filter_name + '_min' ).siblings('.um-slider');
1118
+ var options = $slider.slider( 'option' );
1119
+
1120
+ $slider.slider( 'values', [ options.min, options.max ] );
1121
+
1122
+ jQuery( '.um-search-filter #' + filter_name + '_min' ).val('');
1123
+ jQuery( '.um-search-filter #' + filter_name + '_max' ).val('');
1124
+
1125
+ um_set_range_label( $slider );
1126
  } else if ( type === 'datepicker' ) {
1127
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1128
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1129
+
1130
+ jQuery( '.um-search-filter #' + filter_name + '_from' ).val('');
1131
+ jQuery( '.um-search-filter #' + filter_name + '_to' ).val('');
1132
  } else if ( type === 'timepicker' ) {
1133
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1134
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1135
+
1136
+ jQuery( '.um-search-filter #' + filter_name + '_from' ).val('');
1137
+ jQuery( '.um-search-filter #' + filter_name + '_to' ).val('');
1138
  }
1139
 
1140
 
1151
  directory.find('.um-clear-filters').show();
1152
  }
1153
 
1154
+ var ignore_after_search = false;
1155
+ ignore_after_search = wp.hooks.applyFilters( 'um_member_directory_ignore_after_search', ignore_after_search );
1156
+
1157
+ if ( ! ignore_after_search ) {
1158
+ var show_after_search = directory.data('must-search');
1159
+ if ( show_after_search === 1 ) {
1160
+ var search = um_get_search( directory );
1161
+ if ( directory.find( '.um-members-filter-remove' ).length === 0 && ! search ) {
1162
+ directory.data( 'searched', 0 );
1163
+ directory.find('.um-members-grid, .um-members-list').remove();
1164
+ directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', true );
1165
+ directory.find( '.um-member-directory-view-type' ).addClass( 'um-disabled' );
1166
+ um_members_hide_preloader( directory );
1167
+ return;
1168
+ }
1169
  }
1170
  }
1171
 
1224
  }
1225
  select.select2('destroy').select2();
1226
 
1227
+ if ( directory.find( '.um-search-filter select[data-um-parent="' + filter_name + '"]' ).length > 0 ) {
1228
+ select.trigger('change');
1229
+ }
1230
+
1231
  } else if ( type === 'slider' ) {
1232
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1233
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1234
 
1235
+ var $slider = jQuery( '.um-search-filter #' + filter_name + '_min' ).siblings('.um-slider');
1236
+ var options = $slider.slider( 'option' );
1237
+
1238
+ $slider.slider( 'values', [ options.min, options.max ] );
1239
+
1240
+ jQuery( '.um-search-filter #' + filter_name + '_min' ).val('');
1241
+ jQuery( '.um-search-filter #' + filter_name + '_max' ).val('');
1242
+
1243
+ um_set_range_label( $slider );
1244
  } else if ( type === 'datepicker' ) {
1245
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1246
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1247
 
1248
+ jQuery( '.um-search-filter #' + filter_name + '_from' ).val('');
1249
+ jQuery( '.um-search-filter #' + filter_name + '_to' ).val('');
1250
  } else if ( type === 'timepicker' ) {
1251
  um_set_url_from_data( directory, 'filter_' + filter_name + '_from','' );
1252
  um_set_url_from_data( directory, 'filter_' + filter_name + '_to', '' );
1253
 
1254
+ jQuery( '.um-search-filter #' + filter_name + '_from' ).val('');
1255
+ jQuery( '.um-search-filter #' + filter_name + '_to' ).val('');
1256
  }
1257
  });
1258
 
1270
  directory.find('.um-clear-filters').parents('.um-member-directory-header-row').removeClass( 'um-header-row-invisible' );
1271
  }
1272
 
1273
+ var ignore_after_search = false;
1274
+ ignore_after_search = wp.hooks.applyFilters( 'um_member_directory_ignore_after_search', ignore_after_search );
1275
+
1276
+ if ( ! ignore_after_search ) {
1277
+ var show_after_search = directory.data('must-search');
1278
+ if ( show_after_search === 1 ) {
1279
+ var search = um_get_search( directory );
1280
+ if ( ! search ) {
1281
+ directory.data( 'searched', 0 );
1282
+ directory.find('.um-members-grid, .um-members-list').remove();
1283
+ directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', true );
1284
+ directory.find( '.um-member-directory-view-type' ).addClass( 'um-disabled' );
1285
+ um_members_hide_preloader( directory );
1286
+ return;
1287
+ }
1288
  }
1289
  }
1290
 
1389
  elem.blur();
1390
  },
1391
  onSet: function( context ) {
1392
+
1393
+ if ( ! context.select ) {
1394
+ return;
1395
+ }
1396
+
1397
  var directory = elem.parents('.um-directory');
1398
 
1399
  if ( um_is_directory_busy( directory ) ) {
1477
  onClose: function() { elem.blur(); },
1478
  onSet: function( context ) {
1479
 
1480
+ if ( ! context.select ) {
1481
+ return;
1482
+ }
1483
+
1484
  var directory = elem.parents('.um-directory');
1485
 
1486
  if ( um_is_directory_busy( directory ) ) {
1559
 
1560
  });
1561
 
1562
+ var ignore_after_search = false;
1563
+ ignore_after_search = wp.hooks.applyFilters( 'um_member_directory_ignore_after_search', ignore_after_search );
1564
+
1565
+ if ( ! ignore_after_search ) {
1566
+ var show_after_search = directory.data('must-search');
1567
+ if ( show_after_search === 1 ) {
1568
+ var search = um_get_search( directory );
1569
+ var filters_data = um_get_filters_data( directory );
1570
+ if ( ! filters_data.length && ! search ) {
1571
+ return;
1572
+ }
1573
  }
1574
  }
1575
 
1689
  }
1690
  });
1691
 
1692
+ var ignore_after_search = false;
1693
+ ignore_after_search = wp.hooks.applyFilters( 'um_member_directory_ignore_after_search', ignore_after_search );
1694
+
1695
+ if ( ! ignore_after_search ) {
1696
+ var show_after_search = directory.data('must-search');
1697
+ if ( show_after_search === 1 ) {
1698
+ var search = um_get_search( directory );
1699
+ var filters_data = um_get_filters_data( directory );
1700
+ if ( ! filters_data.length && ! search ) {
1701
+ directory.data( 'searched', 0 );
1702
+ um_members_hide_preloader( directory );
1703
+ return;
1704
+ } else {
1705
+ directory.data( 'searched', 1 );
1706
+ }
1707
  }
1708
  }
1709
 
assets/js/um-members.min.js CHANGED
@@ -1 +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((t=e.find(".um-search-line").val())===r||""===t&&void 0===r)um_members_hide_preloader(e);else{if(e.data("general_search",t),um_set_url_from_data(e,"search",t),e.data("page",1),um_set_url_from_data(e,"page",""),1===e.data("must-search")){var t=um_get_search(e);if(0===e.find(".um-members-filter-remove").length&&!t)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(),1<m.find("option:not(:disabled)").length&&m.prop("disabled",!1),m.select2("destroy").select2(),0<e.find('.um-search-filter select[data-um-parent="'+t+'"]').length&&m.trigger("change")}else"slider"===a?(um_set_url_from_data(e,"filter_"+t+"_from",""),um_set_url_from_data(e,"filter_"+t+"_to","")):"datepicker"===a?(um_set_url_from_data(e,"filter_"+t+"_from",""),um_set_url_from_data(e,"filter_"+t+"_to","")):"timepicker"===a&&(um_set_url_from_data(e,"filter_"+t+"_from",""),um_set_url_from_data(e,"filter_"+t+"_to",""));if(e.data("page",1),um_set_url_from_data(e,"page",""),jQuery(this).tipsy("hide"),jQuery(this).parents(".um-members-filter-tag").remove(),0===e.find(".um-members-filter-remove").length?e.find(".um-clear-filters").hide():e.find(".um-clear-filters").show(),1===e.data("must-search")){var d=um_get_search(e);if(0===e.find(".um-members-filter-remove").length&&!d)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.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).on("click",".um-directory .um-clear-filters-a",function(){var m=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(m)){if(um_members_show_preloader(m),m.find(".um-members-filter-remove").each(function(){var r=jQuery(this).data("value"),e=jQuery(this).data("name"),t=jQuery(this).data("type");if("text"===t)um_set_url_from_data(m,"filter_"+e,""),jQuery('.um-search-filter input[name="'+e+'"]').val("");else if("select"===t){var a=um_get_data_for_directory(m,"filter_"+e);a=void 0===a?[]:a.split("||"),-1!==jQuery.inArray(r.toString(),a)&&(a=jQuery.grep(a,function(e){return e!==r.toString()})),a.length||(a=""),um_set_url_from_data(m,"filter_"+e,a);var i=jQuery('.um-search-filter select[name="'+e+'"]');i.find('option[value="'+r+'"]').prop("disabled",!1).show(),1<i.find("option:not(:disabled)").length&&i.prop("disabled",!1),i.select2("destroy").select2()}else"slider"===t?(um_set_url_from_data(m,"filter_"+e+"_from",""),um_set_url_from_data(m,"filter_"+e+"_to",""),jQuery('.um-search-filter input[name="filter_'+e+'_from"]').val(""),jQuery('.um-search-filter input[name="filter_'+e+'_to"]').val("")):"datepicker"===t?(um_set_url_from_data(m,"filter_"+e+"_from",""),um_set_url_from_data(m,"filter_"+e+"_to",""),jQuery('.um-search-filter input[name="filter_'+e+'_from"]').val(""),jQuery('.um-search-filter input[name="filter_'+e+'_to"]').val("")):"timepicker"===t&&(um_set_url_from_data(m,"filter_"+e+"_from",""),um_set_url_from_data(m,"filter_"+e+"_to",""),jQuery('.um-search-filter input[name="filter_'+e+'_from"]').val(""),jQuery('.um-search-filter input[name="filter_'+e+'_to"]').val(""))}),m.data("page",1),um_set_url_from_data(m,"page",""),m.find(".um-members-filter-tag").remove(),0===m.find(".um-members-filter-remove").length?(m.find(".um-clear-filters").hide(),m.find(".um-clear-filters").parents(".um-member-directory-header-row").addClass("um-header-row-invisible")):(m.find(".um-clear-filters").show(),m.find(".um-clear-filters").parents(".um-member-directory-header-row").removeClass("um-header-row-invisible")),1===m.data("must-search"))if(!um_get_search(m))return m.data("searched",0),m.find(".um-members-grid, .um-members-list").remove(),m.find(".um-member-directory-sorting-options").prop("disabled",!0),m.find(".um-member-directory-view-type").addClass("um-disabled"),void um_members_hide_preloader(m);m.find(".um-member-directory-sorting-options").prop("disabled",!1),m.find(".um-member-directory-view-type").removeClass("um-disabled"),um_ajax_get_members(m)}}),jQuery(".um-directory").each(function(){var e=jQuery(this),r=um_members_get_hash(e);if(um_member_directories.push(r),e.find(".um-search").length&&(e.find(".um-search").is(":visible")||e.find(".um-search").css({display:"grid"}).slideUp(1)),e.find(".um-slider").each(function(){var e=jQuery(this),t=e.parents(".um-directory"),a=e.data("field_name"),r=um_get_data_for_directory(t,"filter_"+a+"_from"),i=um_get_data_for_directory(t,"filter_"+a+"_to");void 0===r&&(r=parseInt(e.data("min"))),void 0===i&&(i=parseInt(e.data("max")));var m=[r,i];e.slider({range:!0,min:parseInt(e.data("min")),max:parseInt(e.data("max")),values:m,create:function(e,r){},step:1,slide:function(e,r){um_set_range_label(jQuery(this),r)},stop:function(e,r){um_is_directory_busy(t)||(um_set_url_from_data(t,"filter_"+a+"_from",r.values[0]),um_set_url_from_data(t,"filter_"+a+"_to",r.values[1]),t.data("page",1),um_set_url_from_data(t,"page",""),um_ajax_get_members(t),um_change_tag(t),t.data("searched",1),t.find(".um-member-directory-sorting-options").prop("disabled",!1),t.find(".um-member-directory-view-type").removeClass("um-disabled"))}}),um_set_range_label(e)}),e.find(".um-datepicker-filter").each(function(){var u=jQuery(this),s=new Date(1e3*u.data("date_min")),_=new Date(1e3*u.data("date_max")),e=u.pickadate({selectYears:!0,min:s,max:_,formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){u.blur()},onClose:function(){u.blur()},onSet:function(e){var r=u.parents(".um-directory");if(!um_is_directory_busy(r)){um_members_show_preloader(r);var t=u.data("filter_name"),a=u.data("range"),i=um_get_data_for_directory(r,"filter_"+t+"_from"),m=um_get_data_for_directory(r,"filter_"+t+"_to");void 0===i&&(i=s/1e3),void 0===m&&(m=_/1e3);var d=e.select/1e3;u.val();"from"===a?i=d:"to"===a&&(m=d),um_set_url_from_data(r,"filter_"+t+"_from",i),um_set_url_from_data(r,"filter_"+t+"_to",m),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")}}}).pickadate("picker"),r=u.data("filter_name"),t=u.data("range"),a=um_get_data_for_directory(u.parents(".um-directory"),"filter_"+r+"_"+t);void 0!==a&&e.set("select",1e3*a)}),e.find(".um-timepicker-filter").each(function(){var s=jQuery(this),_=s.attr("id"),o=s.data("filter_name"),n=s.attr("data-min"),l=s.attr("data-max"),e=n.split(":"),r=l.split(":"),t=s.pickatime({format:s.data("format"),interval:parseInt(s.data("intervals")),min:[e[0],e[1]],max:[r[0],r[1]],formatSubmit:"HH:i",hiddenName:!0,onOpen:function(){s.blur()},onClose:function(){s.blur()},onSet:function(e){var r=s.parents(".um-directory");if(!um_is_directory_busy(r)){um_members_show_preloader(r);var t=s.data("filter_name"),a=s.data("range"),i=um_get_data_for_directory(r,"filter_"+t+"_from"),m=um_get_data_for_directory(r,"filter_"+t+"_to");if(void 0===i&&(i=n),void 0===m&&(m=l),void 0!==e.select){var d=um_time_convert(e.select,a);"from"===a?i=d:"to"===a&&(m=d)}else"from"===a?i=n:"to"===a&&(m=l);var u=jQuery("#"+_).val();"from"===s.data("range")?jQuery("#"+o+"_to").pickatime("picker").set("min",u):jQuery("#"+o+"_from").pickatime("picker").set("max",u),um_set_url_from_data(r,"filter_"+t+"_from",i),um_set_url_from_data(r,"filter_"+t+"_to",m),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")}}}).pickatime("picker"),a=s.data("filter_name"),i=s.data("range"),m=um_get_data_for_directory(s.parents(".um-directory"),"filter_"+a+"_"+i);if(void 0!==m){var d=m.split(":");t.set("select",60*d[0]+1*d[1])}}),1===e.data("must-search")){var t=um_get_search(e);if(!um_get_filters_data(e).length&&!t)return}um_members_show_preloader(e),um_ajax_get_members(e,{first_load:!0}),um_change_tag(e)}),window.addEventListener("popstate",function(e){jQuery(".um-directory").each(function(){var d=jQuery(this),e=um_members_get_hash(d);(um_member_directories.push(e),um_members_show_preloader(d),d.find(".um-members-grid, .um-members-list, .um-members-intro").remove(),d.find(".um-member-directory-search-line").length)&&(void 0===(m=um_get_data_for_directory(d,"search"))&&(m=""),d.data("general_search",m),d.find(".um-search-line").val(m));var r=um_get_data_for_directory(d,"page");if(void 0===r?r=1:r>d.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()}if(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()}),1===d.data("must-search")){var m=um_get_search(d);if(!um_get_filters_data(d).length&&!m)return d.data("searched",0),void um_members_hide_preloader(d);d.data("searched",1)}um_ajax_get_members(d),um_change_tag(d)})})});
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="",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,e){var t=um_members_get_hash(s),r=um_get_current_page(s),a=um_get_search(s),i=um_get_sort(s),m=-(new Date).getTimezoneOffset()/60,_={directory_id:t,page:r,search:a,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[t]=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",[s,e]),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(),1<m.find("option:not(:disabled)").length&&m.prop("disabled",!1),m.select2("destroy").select2(),0<e.find('.um-search-filter select[data-um-parent="'+t+'"]').length&&m.trigger("change")}else if("slider"===a){um_set_url_from_data(e,"filter_"+t+"_from",""),um_set_url_from_data(e,"filter_"+t+"_to","");var d=jQuery(".um-search-filter #"+t+"_min").siblings(".um-slider"),u=d.slider("option");d.slider("values",[u.min,u.max]),jQuery(".um-search-filter #"+t+"_min").val(""),jQuery(".um-search-filter #"+t+"_max").val(""),um_set_range_label(d)}else"datepicker"===a?(um_set_url_from_data(e,"filter_"+t+"_from",""),um_set_url_from_data(e,"filter_"+t+"_to",""),jQuery(".um-search-filter #"+t+"_from").val(""),jQuery(".um-search-filter #"+t+"_to").val("")):"timepicker"===a&&(um_set_url_from_data(e,"filter_"+t+"_from",""),um_set_url_from_data(e,"filter_"+t+"_to",""),jQuery(".um-search-filter #"+t+"_from").val(""),jQuery(".um-search-filter #"+t+"_to").val(""));e.data("page",1),um_set_url_from_data(e,"page",""),jQuery(this).tipsy("hide"),jQuery(this).parents(".um-members-filter-tag").remove(),0===e.find(".um-members-filter-remove").length?e.find(".um-clear-filters").hide():e.find(".um-clear-filters").show();var s=!1;if(!(s=wp.hooks.applyFilters("um_member_directory_ignore_after_search",s)))if(1===e.data("must-search")){var _=um_get_search(e);if(0===e.find(".um-members-filter-remove").length&&!_)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.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).on("click",".um-directory .um-clear-filters-a",function(){var u=jQuery(this).parents(".um-directory");if(!um_is_directory_busy(u)){um_members_show_preloader(u),u.find(".um-members-filter-remove").each(function(){var r=jQuery(this).data("value"),e=jQuery(this).data("name"),t=jQuery(this).data("type");if("text"===t)um_set_url_from_data(u,"filter_"+e,""),jQuery('.um-search-filter input[name="'+e+'"]').val("");else if("select"===t){var a=um_get_data_for_directory(u,"filter_"+e);a=void 0===a?[]:a.split("||"),-1!==jQuery.inArray(r.toString(),a)&&(a=jQuery.grep(a,function(e){return e!==r.toString()})),a.length||(a=""),um_set_url_from_data(u,"filter_"+e,a);var i=jQuery('.um-search-filter select[name="'+e+'"]');i.find('option[value="'+r+'"]').prop("disabled",!1).show(),1<i.find("option:not(:disabled)").length&&i.prop("disabled",!1),i.select2("destroy").select2(),0<u.find('.um-search-filter select[data-um-parent="'+e+'"]').length&&i.trigger("change")}else if("slider"===t){um_set_url_from_data(u,"filter_"+e+"_from",""),um_set_url_from_data(u,"filter_"+e+"_to","");var m=jQuery(".um-search-filter #"+e+"_min").siblings(".um-slider"),d=m.slider("option");m.slider("values",[d.min,d.max]),jQuery(".um-search-filter #"+e+"_min").val(""),jQuery(".um-search-filter #"+e+"_max").val(""),um_set_range_label(m)}else"datepicker"===t?(um_set_url_from_data(u,"filter_"+e+"_from",""),um_set_url_from_data(u,"filter_"+e+"_to",""),jQuery(".um-search-filter #"+e+"_from").val(""),jQuery(".um-search-filter #"+e+"_to").val("")):"timepicker"===t&&(um_set_url_from_data(u,"filter_"+e+"_from",""),um_set_url_from_data(u,"filter_"+e+"_to",""),jQuery(".um-search-filter #"+e+"_from").val(""),jQuery(".um-search-filter #"+e+"_to").val(""))}),u.data("page",1),um_set_url_from_data(u,"page",""),u.find(".um-members-filter-tag").remove(),0===u.find(".um-members-filter-remove").length?(u.find(".um-clear-filters").hide(),u.find(".um-clear-filters").parents(".um-member-directory-header-row").addClass("um-header-row-invisible")):(u.find(".um-clear-filters").show(),u.find(".um-clear-filters").parents(".um-member-directory-header-row").removeClass("um-header-row-invisible"));var e=!1;if(!(e=wp.hooks.applyFilters("um_member_directory_ignore_after_search",e)))if(1===u.data("must-search"))if(!um_get_search(u))return u.data("searched",0),u.find(".um-members-grid, .um-members-list").remove(),u.find(".um-member-directory-sorting-options").prop("disabled",!0),u.find(".um-member-directory-view-type").addClass("um-disabled"),void um_members_hide_preloader(u);u.find(".um-member-directory-sorting-options").prop("disabled",!1),u.find(".um-member-directory-view-type").removeClass("um-disabled"),um_ajax_get_members(u)}}),jQuery(".um-directory").each(function(){var e=jQuery(this),r=um_members_get_hash(e);um_member_directories.push(r),e.find(".um-search").length&&(e.find(".um-search").is(":visible")||e.find(".um-search").css({display:"grid"}).slideUp(1)),e.find(".um-slider").each(function(){var e=jQuery(this),t=e.parents(".um-directory"),a=e.data("field_name"),r=um_get_data_for_directory(t,"filter_"+a+"_from"),i=um_get_data_for_directory(t,"filter_"+a+"_to");void 0===r&&(r=parseInt(e.data("min"))),void 0===i&&(i=parseInt(e.data("max")));var m=[r,i];e.slider({range:!0,min:parseInt(e.data("min")),max:parseInt(e.data("max")),values:m,create:function(e,r){},step:1,slide:function(e,r){um_set_range_label(jQuery(this),r)},stop:function(e,r){um_is_directory_busy(t)||(um_set_url_from_data(t,"filter_"+a+"_from",r.values[0]),um_set_url_from_data(t,"filter_"+a+"_to",r.values[1]),t.data("page",1),um_set_url_from_data(t,"page",""),um_ajax_get_members(t),um_change_tag(t),t.data("searched",1),t.find(".um-member-directory-sorting-options").prop("disabled",!1),t.find(".um-member-directory-view-type").removeClass("um-disabled"))}}),um_set_range_label(e)}),e.find(".um-datepicker-filter").each(function(){var u=jQuery(this),s=new Date(1e3*u.data("date_min")),_=new Date(1e3*u.data("date_max")),e=u.pickadate({selectYears:!0,min:s,max:_,formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){u.blur()},onClose:function(){u.blur()},onSet:function(e){if(e.select){var r=u.parents(".um-directory");if(!um_is_directory_busy(r)){um_members_show_preloader(r);var t=u.data("filter_name"),a=u.data("range"),i=um_get_data_for_directory(r,"filter_"+t+"_from"),m=um_get_data_for_directory(r,"filter_"+t+"_to");void 0===i&&(i=s/1e3),void 0===m&&(m=_/1e3);var d=e.select/1e3;u.val();"from"===a?i=d:"to"===a&&(m=d),um_set_url_from_data(r,"filter_"+t+"_from",i),um_set_url_from_data(r,"filter_"+t+"_to",m),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")}}}}).pickadate("picker"),r=u.data("filter_name"),t=u.data("range"),a=um_get_data_for_directory(u.parents(".um-directory"),"filter_"+r+"_"+t);void 0!==a&&e.set("select",1e3*a)}),e.find(".um-timepicker-filter").each(function(){var s=jQuery(this),_=s.attr("id"),o=s.data("filter_name"),n=s.attr("data-min"),l=s.attr("data-max"),e=n.split(":"),r=l.split(":"),t=s.pickatime({format:s.data("format"),interval:parseInt(s.data("intervals")),min:[e[0],e[1]],max:[r[0],r[1]],formatSubmit:"HH:i",hiddenName:!0,onOpen:function(){s.blur()},onClose:function(){s.blur()},onSet:function(e){if(e.select){var r=s.parents(".um-directory");if(!um_is_directory_busy(r)){um_members_show_preloader(r);var t=s.data("filter_name"),a=s.data("range"),i=um_get_data_for_directory(r,"filter_"+t+"_from"),m=um_get_data_for_directory(r,"filter_"+t+"_to");if(void 0===i&&(i=n),void 0===m&&(m=l),void 0!==e.select){var d=um_time_convert(e.select,a);"from"===a?i=d:"to"===a&&(m=d)}else"from"===a?i=n:"to"===a&&(m=l);var u=jQuery("#"+_).val();"from"===s.data("range")?jQuery("#"+o+"_to").pickatime("picker").set("min",u):jQuery("#"+o+"_from").pickatime("picker").set("max",u),um_set_url_from_data(r,"filter_"+t+"_from",i),um_set_url_from_data(r,"filter_"+t+"_to",m),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")}}}}).pickatime("picker"),a=s.data("filter_name"),i=s.data("range"),m=um_get_data_for_directory(s.parents(".um-directory"),"filter_"+a+"_"+i);if(void 0!==m){var d=m.split(":");t.set("select",60*d[0]+1*d[1])}});var t=!1;if(!(t=wp.hooks.applyFilters("um_member_directory_ignore_after_search",t))&&1===e.data("must-search")){var a=um_get_search(e);if(!um_get_filters_data(e).length&&!a)return}um_members_show_preloader(e),um_ajax_get_members(e,{first_load:!0}),um_change_tag(e)}),window.addEventListener("popstate",function(e){jQuery(".um-directory").each(function(){var d=jQuery(this),e=um_members_get_hash(d);(um_member_directories.push(e),um_members_show_preloader(d),d.find(".um-members-grid, .um-members-list, .um-members-intro").remove(),d.find(".um-member-directory-search-line").length)&&(void 0===(u=um_get_data_for_directory(d,"search"))&&(u=""),d.data("general_search",u),d.find(".um-search-line").val(u));var r=um_get_data_for_directory(d,"page");if(void 0===r?r=1:r>d.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)})})});
assets/js/um-modal.js CHANGED
@@ -16,25 +16,25 @@ jQuery(document).ready(function() {
16
 
17
  jQuery(document).on('click', '.um-modal .um-single-file-preview a.cancel', function(e){
18
  e.preventDefault();
19
-
20
  var parent = jQuery(this).parents('.um-modal-body');
21
  var src = jQuery(this).parents('.um-modal-body').find('.um-single-fileinfo a').attr('href');
22
-
23
- parent.find('.um-single-file-preview').hide();
24
-
25
- parent.find('.ajax-upload-dragdrop').show();
26
-
27
- parent.find('.um-modal-btn.um-finish-upload').addClass('disabled');
28
-
29
- um_modal_responsive();
30
-
31
  jQuery.ajax({
32
  url: wp.ajax.settings.url,
33
  type: 'post',
34
  data: {
35
  action: 'um_remove_file',
36
  src: src,
 
37
  nonce: um_scripts.nonce
 
 
 
 
 
 
38
  }
39
  });
40
 
@@ -46,18 +46,7 @@ jQuery(document).ready(function() {
46
 
47
  var parent = jQuery(this).parents('.um-modal-body');
48
  var src = jQuery(this).parents('.um-modal-body').find('.um-single-image-preview img').attr('src');
49
-
50
- jQuery('img.cropper-hidden').cropper('destroy');
51
-
52
- parent.find('.um-single-image-preview img').attr('src', '');
53
-
54
- parent.find('.um-single-image-preview').hide();
55
-
56
- parent.find('.ajax-upload-dragdrop').show();
57
-
58
- parent.find('.um-modal-btn.um-finish-upload').addClass('disabled');
59
-
60
- um_modal_responsive();
61
 
62
  jQuery.ajax({
63
  url: wp.ajax.settings.url,
@@ -65,7 +54,17 @@ jQuery(document).ready(function() {
65
  data: {
66
  action: 'um_remove_file',
67
  src: src,
 
68
  nonce: um_scripts.nonce
 
 
 
 
 
 
 
 
 
69
  }
70
  });
71
 
16
 
17
  jQuery(document).on('click', '.um-modal .um-single-file-preview a.cancel', function(e){
18
  e.preventDefault();
19
+
20
  var parent = jQuery(this).parents('.um-modal-body');
21
  var src = jQuery(this).parents('.um-modal-body').find('.um-single-fileinfo a').attr('href');
22
+ var mode = parent.find('.um-single-file-upload').data('set_mode');
23
+
 
 
 
 
 
 
 
24
  jQuery.ajax({
25
  url: wp.ajax.settings.url,
26
  type: 'post',
27
  data: {
28
  action: 'um_remove_file',
29
  src: src,
30
+ mode: mode,
31
  nonce: um_scripts.nonce
32
+ },
33
+ success: function() {
34
+ parent.find('.um-single-file-preview').hide();
35
+ parent.find('.ajax-upload-dragdrop').show();
36
+ parent.find('.um-modal-btn.um-finish-upload').addClass('disabled');
37
+ um_modal_responsive();
38
  }
39
  });
40
 
46
 
47
  var parent = jQuery(this).parents('.um-modal-body');
48
  var src = jQuery(this).parents('.um-modal-body').find('.um-single-image-preview img').attr('src');
49
+ var mode = parent.find('.um-single-image-upload').data('set_mode');
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  jQuery.ajax({
52
  url: wp.ajax.settings.url,
54
  data: {
55
  action: 'um_remove_file',
56
  src: src,
57
+ mode: mode,
58
  nonce: um_scripts.nonce
59
+ },
60
+ success: function() {
61
+ jQuery('img.cropper-hidden').cropper( 'destroy' );
62
+ parent.find('.um-single-image-preview img').attr( 'src', '' );
63
+ parent.find('.um-single-image-preview').hide();
64
+ parent.find('.ajax-upload-dragdrop').show();
65
+ parent.find('.um-modal-btn.um-finish-upload').addClass( 'disabled' );
66
+
67
+ um_modal_responsive();
68
  }
69
  });
70
 
assets/js/um-modal.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(){jQuery(document).on("click",".um-popup-overlay",function(){remove_Modal()}),jQuery(document).on("click",'.um-modal-overlay, a[data-action="um_remove_modal"]',function(){um_remove_modal()}),jQuery(document).on("click",'a[data-modal^="um_"], span[data-modal^="um_"], .um-modal a',function(e){return e.preventDefault(),!1}),jQuery(document).on("click",".um-modal .um-single-file-preview a.cancel",function(e){e.preventDefault();var a=jQuery(this).parents(".um-modal-body"),t=jQuery(this).parents(".um-modal-body").find(".um-single-fileinfo a").attr("href");return a.find(".um-single-file-preview").hide(),a.find(".ajax-upload-dragdrop").show(),a.find(".um-modal-btn.um-finish-upload").addClass("disabled"),um_modal_responsive(),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:t,nonce:um_scripts.nonce}}),!1}),jQuery(document).on("click",".um-modal .um-single-image-preview a.cancel",function(e){e.preventDefault();var a=jQuery(this).parents(".um-modal-body"),t=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview img").attr("src");return jQuery("img.cropper-hidden").cropper("destroy"),a.find(".um-single-image-preview img").attr("src",""),a.find(".um-single-image-preview").hide(),a.find(".ajax-upload-dragdrop").show(),a.find(".um-modal-btn.um-finish-upload").addClass("disabled"),um_modal_responsive(),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:t,nonce:um_scripts.nonce}}),!1}),jQuery(document).on("click",".um-finish-upload.file:not(.disabled)",function(){var e=jQuery(this).attr("data-key"),a=jQuery(this).parents(".um-modal-body").find(".um-single-file-preview").html();um_remove_modal(),jQuery(".um-single-file-preview[data-key="+e+"]").fadeIn().html(a);var t=jQuery(".um-field[data-key="+e+"]").find(".um-single-fileinfo a").data("file");jQuery(".um-single-file-preview[data-key="+e+"]").parents(".um-field").find(".um-btn-auto-width").html(jQuery(this).attr("data-change")),jQuery(".um-single-file-preview[data-key="+e+"]").parents(".um-field").find('input[type="hidden"]').val(t)}),jQuery(document).on("click",".um-finish-upload.image:not(.disabled)",function(){var a=jQuery(this),t=jQuery(this).attr("data-key"),e=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview"),i=e.find("img").attr("src"),r=e.attr("data-coord"),u=e.find("img").data("file"),n=0;jQuery(this).parents("#um_upload_single").data("user_id")&&(n=jQuery(this).parents("#um_upload_single").data("user_id")),r?(jQuery(this).html(jQuery(this).attr("data-processing")).addClass("disabled"),jQuery.ajax({url:wp.ajax.settings.url,type:"POST",dataType:"json",data:{action:"um_resize_image",src:i,coord:r,user_id:n,key:t,nonce:um_scripts.nonce},success:function(e){e.success&&(d=new Date,"profile_photo"===t?jQuery(".um-profile-photo-img img").attr("src",e.data.image.source_url+"?"+d.getTime()):"cover_photo"===t&&(jQuery(".um-cover-e").empty().html('<img src="'+e.data.image.source_url+"?"+d.getTime()+'" alt="" />'),jQuery(".um").hasClass("um-editing")&&jQuery(".um-cover-overlay").show()),jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+d.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(d=new Date,jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",i+"?"+d.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find("input[type=hidden]").val(u))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";if(jQuery(this).data("modal-size"))t=jQuery(this).data("modal-size");jQuery(this).data("modal-copy")&&(jQuery("#"+a).html(jQuery(this).parents(".um-field").find(".um-modal-hidden-content").html()),jQuery(this).parents(".um-profile-photo").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-profile-photo").attr("data-user_id")),jQuery(this).parents(".um-cover").attr("data-ratio")&&jQuery("#"+a).attr("data-ratio",jQuery(this).parents(".um-cover").attr("data-ratio")),jQuery(this).parents(".um-cover").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-cover").attr("data-user_id")),0<jQuery("input[type=hidden][name='user_id']").length&&jQuery("#"+a).attr("data-user_id",jQuery("input[type=hidden][name='user_id']").val())),um_new_modal(a,t)})});
1
+ jQuery(document).ready(function(){jQuery(document).on("click",".um-popup-overlay",function(){remove_Modal()}),jQuery(document).on("click",'.um-modal-overlay, a[data-action="um_remove_modal"]',function(){um_remove_modal()}),jQuery(document).on("click",'a[data-modal^="um_"], span[data-modal^="um_"], .um-modal a',function(e){return e.preventDefault(),!1}),jQuery(document).on("click",".um-modal .um-single-file-preview a.cancel",function(e){e.preventDefault();var a=jQuery(this).parents(".um-modal-body"),t=jQuery(this).parents(".um-modal-body").find(".um-single-fileinfo a").attr("href"),i=a.find(".um-single-file-upload").data("set_mode");return jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:t,mode:i,nonce:um_scripts.nonce},success:function(){a.find(".um-single-file-preview").hide(),a.find(".ajax-upload-dragdrop").show(),a.find(".um-modal-btn.um-finish-upload").addClass("disabled"),um_modal_responsive()}}),!1}),jQuery(document).on("click",".um-modal .um-single-image-preview a.cancel",function(e){e.preventDefault();var a=jQuery(this).parents(".um-modal-body"),t=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview img").attr("src"),i=a.find(".um-single-image-upload").data("set_mode");return jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:t,mode:i,nonce:um_scripts.nonce},success:function(){jQuery("img.cropper-hidden").cropper("destroy"),a.find(".um-single-image-preview img").attr("src",""),a.find(".um-single-image-preview").hide(),a.find(".ajax-upload-dragdrop").show(),a.find(".um-modal-btn.um-finish-upload").addClass("disabled"),um_modal_responsive()}}),!1}),jQuery(document).on("click",".um-finish-upload.file:not(.disabled)",function(){var e=jQuery(this).attr("data-key"),a=jQuery(this).parents(".um-modal-body").find(".um-single-file-preview").html();um_remove_modal(),jQuery(".um-single-file-preview[data-key="+e+"]").fadeIn().html(a);var t=jQuery(".um-field[data-key="+e+"]").find(".um-single-fileinfo a").data("file");jQuery(".um-single-file-preview[data-key="+e+"]").parents(".um-field").find(".um-btn-auto-width").html(jQuery(this).attr("data-change")),jQuery(".um-single-file-preview[data-key="+e+"]").parents(".um-field").find('input[type="hidden"]').val(t)}),jQuery(document).on("click",".um-finish-upload.image:not(.disabled)",function(){var a=jQuery(this),t=jQuery(this).attr("data-key"),e=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview"),i=e.find("img").attr("src"),r=e.attr("data-coord"),u=e.find("img").data("file"),n=0;jQuery(this).parents("#um_upload_single").data("user_id")&&(n=jQuery(this).parents("#um_upload_single").data("user_id")),r?(jQuery(this).html(jQuery(this).attr("data-processing")).addClass("disabled"),jQuery.ajax({url:wp.ajax.settings.url,type:"POST",dataType:"json",data:{action:"um_resize_image",src:i,coord:r,user_id:n,key:t,nonce:um_scripts.nonce},success:function(e){e.success&&(d=new Date,"profile_photo"===t?jQuery(".um-profile-photo-img img").attr("src",e.data.image.source_url+"?"+d.getTime()):"cover_photo"===t&&(jQuery(".um-cover-e").empty().html('<img src="'+e.data.image.source_url+"?"+d.getTime()+'" alt="" />'),jQuery(".um").hasClass("um-editing")&&jQuery(".um-cover-overlay").show()),jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+d.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(d=new Date,jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",i+"?"+d.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find("input[type=hidden]").val(u))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";if(jQuery(this).data("modal-size"))t=jQuery(this).data("modal-size");jQuery(this).data("modal-copy")&&(jQuery("#"+a).html(jQuery(this).parents(".um-field").find(".um-modal-hidden-content").html()),jQuery(this).parents(".um-profile-photo").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-profile-photo").attr("data-user_id")),jQuery(this).parents(".um-cover").attr("data-ratio")&&jQuery("#"+a).attr("data-ratio",jQuery(this).parents(".um-cover").attr("data-ratio")),jQuery(this).parents(".um-cover").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-cover").attr("data-user_id")),0<jQuery("input[type=hidden][name='user_id']").length&&jQuery("#"+a).attr("data-user_id",jQuery("input[type=hidden][name='user_id']").val())),um_new_modal(a,t)})});
assets/js/um-scripts.js CHANGED
@@ -1,11 +1,10 @@
1
  function um_init_datetimepicker() {
2
  jQuery('.um-datepicker:not(.picker__input)').each(function(){
3
- elem = jQuery(this);
4
 
5
- if ( typeof elem.attr('data-disabled_weekdays') != 'undefined' && elem.attr('data-disabled_weekdays') != '' ) {
6
- var disable = JSON.parse( elem.attr('data-disabled_weekdays') );
7
- } else {
8
- var disable = false;
9
  }
10
 
11
  var years_n = null;
@@ -64,7 +63,7 @@ function um_init_datetimepicker() {
64
  });
65
 
66
  jQuery('.um-timepicker:not(.picker__input)').each(function(){
67
- elem = jQuery(this);
68
 
69
  elem.pickatime({
70
  format: elem.attr('data-format'),
@@ -90,18 +89,18 @@ function init_tipsy() {
90
 
91
  jQuery(document).ready(function() {
92
 
93
- jQuery( document.body ).on('click', '.um-dropdown a.real_url', function(e){
94
  window.location = jQuery(this).attr('href');
95
  });
96
 
97
- jQuery( document.body ).on( 'click', '.um-trigger-menu-on-click', function(e) {
98
  jQuery('.um-dropdown').hide();
99
  var menu = jQuery(this).find('.um-dropdown');
100
  menu.show();
101
  return false;
102
  });
103
 
104
- jQuery( document.body ).on('click', '.um-dropdown-hide', function(e) {
105
  UM_hide_menus();
106
  return false;
107
  });
@@ -143,7 +142,7 @@ jQuery(document).ready(function() {
143
 
144
  init_tipsy();
145
 
146
- if( typeof(jQuery.fn.um_raty) === "function" ){
147
  jQuery('.um-rating').um_raty({
148
  half: false,
149
  starType: 'i',
@@ -152,19 +151,19 @@ jQuery(document).ready(function() {
152
  scoreName: function(){return jQuery(this).attr('data-key');},
153
  hints: false,
154
  click: function( score, evt ) {
155
- live_field = this.id;
156
- live_value = score;
157
  um_apply_conditions( jQuery(this), false );
158
  }
159
  });
160
 
161
  jQuery('.um-rating-readonly').um_raty({
162
- half: false,
163
- starType: 'i',
164
- number: function() {return jQuery(this).attr('data-number');},
165
- score: function() {return jQuery(this).attr('data-score');},
166
- scoreName: function(){return jQuery(this).attr('data-key');},
167
- hints: false,
168
  readOnly: true
169
  });
170
  }
@@ -179,8 +178,6 @@ jQuery(document).ready(function() {
179
  });
180
 
181
  jQuery(document).on('change', '.um-field-area input[type="checkbox"]', function(){
182
-
183
- var field = jQuery(this).parents('.um-field-area');
184
  var this_field = jQuery(this).parents('label');
185
  if ( this_field.hasClass('active') ) {
186
  this_field.removeClass('active');
@@ -197,42 +194,62 @@ jQuery(document).ready(function() {
197
  jQuery(document).on('click', '.um .um-single-image-preview a.cancel', function(e){
198
  e.preventDefault();
199
  var parent = jQuery(this).parents('.um-field');
 
 
 
200
  var src = jQuery(this).parents('.um-field').find('.um-single-image-preview img').attr('src');
201
- parent.find('.um-single-image-preview img').attr('src','');
202
- parent.find('.um-single-image-preview').hide();
203
- parent.find('.um-btn-auto-width').html('Upload');
204
- parent.find('input[type=hidden]').val('empty_file');
205
 
206
- jQuery.ajax({
207
- url: wp.ajax.settings.url,
208
- type: 'post',
209
  data: {
210
- action: 'um_remove_file',
 
211
  src: src,
212
  nonce: um_scripts.nonce
 
 
 
 
 
 
213
  }
214
- });
 
 
 
 
 
 
215
 
216
  return false;
217
  });
218
 
219
- jQuery(document).on('click', '.um .um-single-file-preview a.cancel', function(e){
220
  e.preventDefault();
221
  var parent = jQuery(this).parents('.um-field');
 
222
  var src = jQuery(this).parents('.um-field').find('.um-single-fileinfo a').attr('href');
223
- parent.find('.um-single-file-preview').hide();
224
- parent.find('.um-btn-auto-width').html('Upload');
225
- parent.find('input[type=hidden]').val('empty_file');
226
 
227
- jQuery.ajax({
228
- url: wp.ajax.settings.url,
229
- type: 'post',
230
  data: {
231
- action: 'um_remove_file',
 
232
  src: src,
233
  nonce: um_scripts.nonce
 
 
 
 
 
234
  }
235
- });
 
 
 
 
 
 
236
 
237
  return false;
238
  });
@@ -247,7 +264,7 @@ jQuery(document).ready(function() {
247
  field.find('.um-field-group-body:first').clone().appendTo( field );
248
  }
249
 
250
- increase_id = 0;
251
  field.find('.um-field-group-body').each(function(){
252
  increase_id++;
253
  jQuery(this).find('input').each(function(){
@@ -289,13 +306,15 @@ jQuery(document).ready(function() {
289
  e.preventDefault();
290
 
291
  var obj = jQuery(this);
292
- var parent = jQuery(this).parent();
293
  parent.addClass( 'loading' );
294
 
295
- var hook = jQuery(this).data('hook');
 
 
 
 
296
  if ( 'um_load_posts' === hook ) {
297
- var pages = jQuery(this).data('pages')*1;
298
- var next_page = jQuery(this).data('page')*1 + 1;
299
 
300
  jQuery.ajax({
301
  url: wp.ajax.settings.url,
@@ -319,8 +338,6 @@ jQuery(document).ready(function() {
319
  }
320
  });
321
  } else if ( 'um_load_comments' === hook ) {
322
- var pages = jQuery(this).data('pages')*1;
323
- var next_page = jQuery(this).data('page')*1 + 1;
324
 
325
  jQuery.ajax({
326
  url: wp.ajax.settings.url,
@@ -470,7 +487,6 @@ jQuery(document).ready(function() {
470
  var me = jQuery(this);
471
  var parent_option = me.data('um-parent');
472
  var um_ajax_source = me.data('um-ajax-source');
473
- var original_value = me.val();
474
 
475
  me.attr('data-um-init-field', true );
476
 
@@ -482,14 +498,22 @@ jQuery(document).ready(function() {
482
  if ( me.attr( 'data-member-directory' ) === 'yes' ) {
483
  var directory = parent.parents('.um-directory');
484
  arr_key = um_get_data_for_directory( directory, 'filter_' + parent_option );
485
- if ( typeof arr_key != 'undefined' ) {
486
  arr_key = arr_key.split('||');
 
 
487
  }
488
  } else {
489
  arr_key = parent.val();
490
  }
491
 
492
- if ( typeof arr_key != 'undefined' && arr_key != '' && typeof um_select_options_cache[ arr_key ] != 'object' ) {
 
 
 
 
 
 
493
 
494
  jQuery.ajax({
495
  url: wp.ajax.settings.url,
@@ -504,29 +528,31 @@ jQuery(document).ready(function() {
504
  form_id: form_id,
505
  nonce: um_scripts.nonce
506
  },
507
- success: function( data ){
508
- if ( data.status == 'success' && arr_key != '' ) {
 
509
  um_field_populate_child_options( me, data, arr_key );
510
  }
511
 
512
  if ( typeof data.debug !== 'undefined' ) {
513
  console.log( data );
514
  }
 
 
515
  },
516
- error: function( e ){
517
  console.log( e );
 
518
  }
519
  });
520
 
521
-
522
  }
523
 
524
- if ( typeof arr_key != 'undefined' && arr_key != '' && typeof um_select_options_cache[ arr_key ] == 'object' ) {
525
- var data = um_select_options_cache[ arr_key ];
526
- um_field_populate_child_options( me, data, arr_key );
527
  }
528
 
529
- if ( typeof arr_key != 'undefined' || arr_key == '' ) {
530
  me.find('option[value!=""]').remove();
531
  me.val('').trigger('change');
532
  }
@@ -537,17 +563,17 @@ jQuery(document).ready(function() {
537
 
538
  });
539
 
 
540
  /**
541
  * Populates child options and cache ajax response
542
- * @param DOM me child option elem
543
- * @param array data
544
- * @param string key
 
545
  */
546
- function um_field_populate_child_options( me, data, arr_key, arr_items ) {
547
  var directory = me.parents('.um-directory');
548
- var parent_option = me.data('um-parent');
549
  var child_name = me.attr('name');
550
- var parent_dom = jQuery('select[name="'+parent_option+'"]');
551
  me.find('option[value!=""]').remove();
552
 
553
  if ( ! me.hasClass('um-child-option-disabled') ) {
@@ -579,7 +605,7 @@ jQuery(document).ready(function() {
579
  });
580
 
581
  var current_filter_val = um_get_data_for_directory( directory, 'filter_' + child_name );
582
- if ( typeof current_filter_val != 'undefined' ) {
583
  current_filter_val = current_filter_val.split('||');
584
 
585
  var temp_filter_val = [];
@@ -609,7 +635,7 @@ jQuery(document).ready(function() {
609
  if ( data.post.members_directory !== 'yes' ) {
610
  if ( typeof data.field.default !== 'undefined' && ! me.data('um-original-value') ) {
611
  me.val( data.field.default ).trigger('change');
612
- } else if ( me.data('um-original-value') != '' ) {
613
  me.val( me.data('um-original-value') ).trigger('change');
614
  }
615
 
@@ -618,8 +644,6 @@ jQuery(document).ready(function() {
618
  me.attr('disabled','disabled');
619
  }
620
  }
621
- um_select_options_cache[ arr_key ] = data;
622
-
623
  }
624
 
625
  });
1
  function um_init_datetimepicker() {
2
  jQuery('.um-datepicker:not(.picker__input)').each(function(){
3
+ var elem = jQuery(this);
4
 
5
+ var disable = false;
6
+ if ( typeof elem.attr('data-disabled_weekdays') != 'undefined' && elem.attr('data-disabled_weekdays') !== '' ) {
7
+ disable = JSON.parse( elem.attr('data-disabled_weekdays') );
 
8
  }
9
 
10
  var years_n = null;
63
  });
64
 
65
  jQuery('.um-timepicker:not(.picker__input)').each(function(){
66
+ var elem = jQuery(this);
67
 
68
  elem.pickatime({
69
  format: elem.attr('data-format'),
89
 
90
  jQuery(document).ready(function() {
91
 
92
+ jQuery( document.body ).on('click', '.um-dropdown a.real_url', function() {
93
  window.location = jQuery(this).attr('href');
94
  });
95
 
96
+ jQuery( document.body ).on( 'click', '.um-trigger-menu-on-click', function() {
97
  jQuery('.um-dropdown').hide();
98
  var menu = jQuery(this).find('.um-dropdown');
99
  menu.show();
100
  return false;
101
  });
102
 
103
+ jQuery( document.body ).on('click', '.um-dropdown-hide', function() {
104
  UM_hide_menus();
105
  return false;
106
  });
142
 
143
  init_tipsy();
144
 
145
+ if ( typeof( jQuery.fn.um_raty ) === "function" ) {
146
  jQuery('.um-rating').um_raty({
147
  half: false,
148
  starType: 'i',
151
  scoreName: function(){return jQuery(this).attr('data-key');},
152
  hints: false,
153
  click: function( score, evt ) {
154
+ um_live_field = this.id;
155
+ um_live_value = score;
156
  um_apply_conditions( jQuery(this), false );
157
  }
158
  });
159
 
160
  jQuery('.um-rating-readonly').um_raty({
161
+ half: false,
162
+ starType: 'i',
163
+ number: function() {return jQuery(this).attr('data-number');},
164
+ score: function() {return jQuery(this).attr('data-score');},
165
+ scoreName: function(){return jQuery(this).attr('data-key');},
166
+ hints: false,
167
  readOnly: true
168
  });
169
  }
178
  });
179
 
180
  jQuery(document).on('change', '.um-field-area input[type="checkbox"]', function(){
 
 
181
  var this_field = jQuery(this).parents('label');
182
  if ( this_field.hasClass('active') ) {
183
  this_field.removeClass('active');
194
  jQuery(document).on('click', '.um .um-single-image-preview a.cancel', function(e){
195
  e.preventDefault();
196
  var parent = jQuery(this).parents('.um-field');
197
+
198
+ var filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val();
199
+
200
  var src = jQuery(this).parents('.um-field').find('.um-single-image-preview img').attr('src');
201
+ var mode = parent.data('mode');
 
 
 
202
 
203
+ var args = {
 
 
204
  data: {
205
+ mode: mode,
206
+ filename: filename,
207
  src: src,
208
  nonce: um_scripts.nonce
209
+ },
210
+ success: function() {
211
+ parent.find('.um-single-image-preview img').attr( 'src', '' );
212
+ parent.find('.um-single-image-preview').hide();
213
+ parent.find('.um-btn-auto-width').html( parent.data('upload-label') );
214
+ parent.find('input[type=hidden]').val( 'empty_file' );
215
  }
216
+ };
217
+
218
+ if ( mode !== 'register' ) {
219
+ args.data.user_id = jQuery(this).parents('form' ).find( '#user_id' ).val();
220
+ }
221
+
222
+ wp.ajax.send( 'um_remove_file', args );
223
 
224
  return false;
225
  });
226
 
227
+ jQuery(document).on('click', '.um .um-single-file-preview a.cancel', function(e) {
228
  e.preventDefault();
229
  var parent = jQuery(this).parents('.um-field');
230
+ var filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val();
231
  var src = jQuery(this).parents('.um-field').find('.um-single-fileinfo a').attr('href');
232
+ var mode = parent.data('mode');
 
 
233
 
234
+ var args = {
 
 
235
  data: {
236
+ mode: mode,
237
+ filename: filename,
238
  src: src,
239
  nonce: um_scripts.nonce
240
+ },
241
+ success: function() {
242
+ parent.find('.um-single-file-preview').hide();
243
+ parent.find('.um-btn-auto-width').html( parent.data('upload-label') );
244
+ parent.find('input[type=hidden]').val( 'empty_file' );
245
  }
246
+ };
247
+
248
+ if ( mode !== 'register' ) {
249
+ args.data.user_id = jQuery(this).parents('form' ).find( '#user_id' ).val();
250
+ }
251
+
252
+ wp.ajax.send( 'um_remove_file', args );
253
 
254
  return false;
255
  });
264
  field.find('.um-field-group-body:first').clone().appendTo( field );
265
  }
266
 
267
+ var increase_id = 0;
268
  field.find('.um-field-group-body').each(function(){
269
  increase_id++;
270
  jQuery(this).find('input').each(function(){
306
  e.preventDefault();
307
 
308
  var obj = jQuery(this);
309
+ var parent = obj.parent();
310
  parent.addClass( 'loading' );
311
 
312
+ var pages = obj.data('pages')*1;
313
+ var next_page = obj.data('page')*1 + 1;
314
+
315
+ var hook = obj.data('hook');
316
+
317
  if ( 'um_load_posts' === hook ) {
 
 
318
 
319
  jQuery.ajax({
320
  url: wp.ajax.settings.url,
338
  }
339
  });
340
  } else if ( 'um_load_comments' === hook ) {
 
 
341
 
342
  jQuery.ajax({
343
  url: wp.ajax.settings.url,
487
  var me = jQuery(this);
488
  var parent_option = me.data('um-parent');
489
  var um_ajax_source = me.data('um-ajax-source');
 
490
 
491
  me.attr('data-um-init-field', true );
492
 
498
  if ( me.attr( 'data-member-directory' ) === 'yes' ) {
499
  var directory = parent.parents('.um-directory');
500
  arr_key = um_get_data_for_directory( directory, 'filter_' + parent_option );
501
+ if ( typeof arr_key != 'undefined' ) {
502
  arr_key = arr_key.split('||');
503
+ } else {
504
+ arr_key = '';
505
  }
506
  } else {
507
  arr_key = parent.val();
508
  }
509
 
510
+ if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] !== 'object' ) {
511
+
512
+ if ( typeof( me.um_wait ) === 'undefined' || me.um_wait === false ) {
513
+ me.um_wait = true;
514
+ } else {
515
+ return;
516
+ }
517
 
518
  jQuery.ajax({
519
  url: wp.ajax.settings.url,
528
  form_id: form_id,
529
  nonce: um_scripts.nonce
530
  },
531
+ success: function( data ) {
532
+ if ( data.status === 'success' && arr_key !== '' ) {
533
+ um_select_options_cache[ arr_key ] = data;
534
  um_field_populate_child_options( me, data, arr_key );
535
  }
536
 
537
  if ( typeof data.debug !== 'undefined' ) {
538
  console.log( data );
539
  }
540
+
541
+ me.um_wait = false;
542
  },
543
+ error: function( e ) {
544
  console.log( e );
545
+ me.um_wait = false;
546
  }
547
  });
548
 
 
549
  }
550
 
551
+ if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] == 'object' ) {
552
+ setTimeout( um_field_populate_child_options, 10, me, um_select_options_cache[ arr_key ], arr_key );
 
553
  }
554
 
555
+ if ( typeof arr_key != 'undefined' || arr_key === '' ) {
556
  me.find('option[value!=""]').remove();
557
  me.val('').trigger('change');
558
  }
563
 
564
  });
565
 
566
+
567
  /**
568
  * Populates child options and cache ajax response
569
+ *
570
+ * @param me
571
+ * @param data
572
+ * @param arr_key
573
  */
574
+ function um_field_populate_child_options( me, data, arr_key ) {
575
  var directory = me.parents('.um-directory');
 
576
  var child_name = me.attr('name');
 
577
  me.find('option[value!=""]').remove();
578
 
579
  if ( ! me.hasClass('um-child-option-disabled') ) {
605
  });
606
 
607
  var current_filter_val = um_get_data_for_directory( directory, 'filter_' + child_name );
608
+ if ( typeof current_filter_val !== 'undefined' ) {
609
  current_filter_val = current_filter_val.split('||');
610
 
611
  var temp_filter_val = [];
635
  if ( data.post.members_directory !== 'yes' ) {
636
  if ( typeof data.field.default !== 'undefined' && ! me.data('um-original-value') ) {
637
  me.val( data.field.default ).trigger('change');
638
+ } else if ( me.data('um-original-value') !== '' ) {
639
  me.val( me.data('um-original-value') ).trigger('change');
640
  }
641
 
644
  me.attr('disabled','disabled');
645
  }
646
  }
 
 
647
  }
648
 
649
  });
assets/js/um-scripts.min.js CHANGED
@@ -1 +1 @@
1
- function um_init_datetimepicker(){jQuery(".um-datepicker:not(.picker__input)").each(function(){if(elem=jQuery(this),void 0!==elem.attr("data-disabled_weekdays")&&""!=elem.attr("data-disabled_weekdays"))var e=JSON.parse(elem.attr("data-disabled_weekdays"));else e=!1;var t=null;void 0!==elem.attr("data-years")&&(t=elem.attr("data-years"));var a=elem.attr("data-date_min"),i=elem.attr("data-date_max"),r=[],n=[];void 0!==a&&(r=a.split(",")),void 0!==i&&(n=i.split(","));var u=r.length?new Date(r):null,o=r.length?new Date(n):null;if(u&&"Invalid Date"==u.toString()&&3==r.length){var s=r[1]+"/"+r[2]+"/"+r[0];u=new Date(Date.parse(s))}if(o&&"Invalid Date"==o.toString()&&3==n.length){var d=n[1]+"/"+n[2]+"/"+n[0];o=new Date(Date.parse(d))}var l={disable:e,format:elem.attr("data-format"),formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}};null!==t&&(l.selectYears=t),null!==u&&(l.min=u),null!==o&&(l.max=o),elem.pickadate(l)}),jQuery(".um-timepicker:not(.picker__input)").each(function(){elem=jQuery(this),elem.pickatime({format:elem.attr("data-format"),interval:parseInt(elem.attr("data-intervals")),formatSubmit:"HH:i",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}})})}function init_tipsy(){"function"==typeof jQuery.fn.tipsy&&(jQuery(".um-tip-n").tipsy({gravity:"n",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-w").tipsy({gravity:"w",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-e").tipsy({gravity:"e",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-s").tipsy({gravity:"s",opacity:1,live:"a.live",offset:3}))}jQuery(document).ready(function(){jQuery(document.body).on("click",".um-dropdown a.real_url",function(e){window.location=jQuery(this).attr("href")}),jQuery(document.body).on("click",".um-trigger-menu-on-click",function(e){return jQuery(".um-dropdown").hide(),jQuery(this).find(".um-dropdown").show(),!1}),jQuery(document.body).on("click",".um-dropdown-hide",function(e){return UM_hide_menus(),!1}),jQuery(document.body).on("click","a.um-manual-trigger",function(){var e=jQuery(this).attr("data-child"),t=jQuery(this).attr("data-parent");return jQuery(this).parents(t).find(e).trigger("click"),UM_hide_menus(),!1}),jQuery(".um-s1,.um-s2").css({display:"block"}),"function"==typeof jQuery.fn.select2&&(jQuery(".um-s1").select2({allowClear:!0}),jQuery(".um-s2").select2({allowClear:!1,minimumResultsForSearch:10}),jQuery(".um-s3").select2({allowClear:!1,minimumResultsForSearch:-1})),init_tipsy(),"function"==typeof jQuery.fn.um_raty&&(jQuery(".um-rating").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,click:function(e,t){live_field=this.id,live_value=e,um_apply_conditions(jQuery(this),!1)}}),jQuery(".um-rating-readonly").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,readOnly:!0})),jQuery(document).on("change",'.um-field-area input[type="radio"]',function(){var e=jQuery(this).parents(".um-field-area"),t=jQuery(this).parents("label");e.find(".um-field-radio").removeClass("active"),e.find(".um-field-radio").find("i").removeAttr("class").addClass("um-icon-android-radio-button-off"),t.addClass("active"),t.find("i").removeAttr("class").addClass("um-icon-android-radio-button-on")}),jQuery(document).on("change",'.um-field-area input[type="checkbox"]',function(){jQuery(this).parents(".um-field-area");var e=jQuery(this).parents("label");e.hasClass("active")?(e.removeClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline-blank")):(e.addClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline"))}),um_init_datetimepicker(),jQuery(document).on("click",".um .um-single-image-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-image-preview img").attr("src");return t.find(".um-single-image-preview img").attr("src",""),t.find(".um-single-image-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a,nonce:um_scripts.nonce}}),!1}),jQuery(document).on("click",".um .um-single-file-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-fileinfo a").attr("href");return t.find(".um-single-file-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a,nonce:um_scripts.nonce}}),!1}),jQuery(document).on("click",".um-field-group-head:not(.disabled)",function(){var e=jQuery(this).parents(".um-field-group"),t=e.data("max_entries");e.find(".um-field-group-body").is(":hidden")?e.find(".um-field-group-body").show():e.find(".um-field-group-body:first").clone().appendTo(e),increase_id=0,e.find(".um-field-group-body").each(function(){increase_id++,jQuery(this).find("input").each(function(){var e=jQuery(this);e.attr("id",e.data("key")+"-"+increase_id),e.attr("name",e.data("key")+"-"+increase_id),e.parent().parent().find("label").attr("for",e.data("key")+"-"+increase_id)})}),0<t&&e.find(".um-field-group-body").length==t&&jQuery(this).addClass("disabled")}),jQuery(document).on("click",".um-field-group-cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field-group"),a=t.data("max_entries");return 1<t.find(".um-field-group-body").length?jQuery(this).parents(".um-field-group-body").remove():jQuery(this).parents(".um-field-group-body").hide(),0<a&&t.find(".um-field-group-body").length<a&&t.find(".um-field-group-head").removeClass("disabled"),!1}),jQuery(document.body).on("click",".um-ajax-paginate",function(e){e.preventDefault();var t=jQuery(this),a=jQuery(this).parent();a.addClass("loading");var i=jQuery(this).data("hook");if("um_load_posts"===i){var r=1*jQuery(this).data("pages"),n=1*jQuery(this).data("page")+1;jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate_posts",author:jQuery(this).data("author"),page:n,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.before(e),n===r?a.remove():t.data("page",n)}})}else if("um_load_comments"===i){r=1*jQuery(this).data("pages"),n=1*jQuery(this).data("page")+1;jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate_comments",user_id:jQuery(this).data("user_id"),page:n,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.before(e),n===r?a.remove():t.data("page",n)}})}else{var u=jQuery(this).data("args"),o=jQuery(this).parents(".um").find(".um-ajax-items");jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate",hook:i,args:u,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.remove(),o.append(e)}})}}),jQuery(document).on("click",".um-ajax-action",function(e){e.preventDefault();var t=jQuery(this).data("hook"),a=jQuery(this).data("user_id"),arguments=jQuery(this).data("arguments");return jQuery(this).data("js-remove")&&jQuery(this).parents("."+jQuery(this).data("js-remove")).fadeOut("fast"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_muted_action",hook:t,user_id:a,arguments:arguments,nonce:um_scripts.nonce},success:function(e){}}),!1}),jQuery(document.body).on("click","#um-search-button",function(){var e=jQuery(this).parents(".um-search-form").data("members_page"),t=[];jQuery(this).parents(".um-search-form").find('input[name="um-search-keys[]"]').each(function(){t.push(jQuery(this).val())});var a,i=jQuery(this).parents(".um-search-form").find(".um-search-field").val();if(""===i)a=e;else{for(var r="?",n=0;n<t.length;n++)r+=t[n]+"="+i,n!==t.length-1&&(r+="&");a=e+r}window.location=a}),jQuery(document.body).on("keypress",".um-search-field",function(e){if(13===e.which){var t=jQuery(this).parents(".um-search-form").data("members_page"),a=[];jQuery(this).parents(".um-search-form").find('input[name="um-search-keys[]"]').each(function(){a.push(jQuery(this).val())});var i,r=jQuery(this).val();if(""===r)i=t;else{for(var n="?",u=0;u<a.length;u++)n+=a[u]+"="+r,u!==a.length-1&&(n+="&");i=t+n}window.location=i}}),jQuery('.um-form input[class="um-button"][type="submit"]').removeAttr("disabled"),jQuery(document).one("click",'.um:not(.um-account) .um-form input[class="um-button"][type="submit"]:not(.um-has-recaptcha)',function(){jQuery(this).attr("disabled","disabled"),jQuery(this).parents("form").submit()});var d={};function s(t,e,a,i){var r=t.parents(".um-directory"),n=t.data("um-parent"),u=t.attr("name");jQuery('select[name="'+n+'"]');t.find('option[value!=""]').remove(),t.hasClass("um-child-option-disabled")||t.removeAttr("disabled");i=[];if("yes"===e.post.members_directory&&i.push({id:"",text:"",selected:1}),jQuery.each(e.items,function(e,t){i.push({id:e,text:t,selected:""===t})}),t.select2("destroy"),t.select2({data:i,allowClear:!0,minimumResultsForSearch:10}),"yes"===e.post.members_directory){t.find("option").each(function(){""!==jQuery(this).html()&&jQuery(this).data("value_label",jQuery(this).html()).attr("data-value_label",jQuery(this).html())});var o=um_get_data_for_directory(r,"filter_"+u);if(void 0!==o){o=o.split("||");var s=[];jQuery.each(o,function(e){t.find('option[value="'+o[e]+'"]').length&&s.push(o[e]),t.find('option[value="'+o[e]+'"]').prop("disabled",!0).hide(),1===t.find("option:not(:disabled)").length&&t.prop("disabled",!0),t.select2("destroy").select2(),t.val("").trigger("change")}),s=s.join("||"),o!==s&&(um_set_url_from_data(r,"filter_"+u,s),um_ajax_get_members(r))}um_change_tag(r)}"yes"!==e.post.members_directory&&(void 0===e.field.default||t.data("um-original-value")?""!=t.data("um-original-value")&&t.val(t.data("um-original-value")).trigger("change"):t.val(e.field.default).trigger("change"),0==e.field.editable&&(t.addClass("um-child-option-disabled"),t.attr("disabled","disabled"))),d[a]=e}jQuery("select[data-um-parent]").each(function(){var n=jQuery(this),u=n.data("um-parent"),o=n.data("um-ajax-source");n.val();n.attr("data-um-init-field",!0),jQuery(document).on("change",'select[name="'+u+'"]',function(){var t,e=jQuery(this),a=e.closest("form").find('input[type="hidden"][name="form_id"]').val();if("yes"===n.attr("data-member-directory")){var i=e.parents(".um-directory");void 0!==(t=um_get_data_for_directory(i,"filter_"+u))&&(t=t.split("||"))}else t=e.val();if(void 0!==t&&""!=t&&"object"!=typeof d[t]&&jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_select_options",parent_option_name:u,parent_option:t,child_callback:o,child_name:n.attr("name"),members_directory:n.attr("data-member-directory"),form_id:a,nonce:um_scripts.nonce},success:function(e){"success"==e.status&&""!=t&&s(n,e,t),void 0!==e.debug&&console.log(e)},error:function(e){console.log(e)}}),void 0!==t&&""!=t&&"object"==typeof d[t]){var r=d[t];s(n,r,t)}void 0===t&&""!=t||(n.find('option[value!=""]').remove(),n.val("").trigger("change"))}),jQuery('select[name="'+u+'"]').trigger("change")})});
1
+ function um_init_datetimepicker(){jQuery(".um-datepicker:not(.picker__input)").each(function(){var e=jQuery(this),t=!1;void 0!==e.attr("data-disabled_weekdays")&&""!==e.attr("data-disabled_weekdays")&&(t=JSON.parse(e.attr("data-disabled_weekdays")));var a=null;void 0!==e.attr("data-years")&&(a=e.attr("data-years"));var i=e.attr("data-date_min"),r=e.attr("data-date_max"),n=[],u=[];void 0!==i&&(n=i.split(",")),void 0!==r&&(u=r.split(","));var o=n.length?new Date(n):null,s=n.length?new Date(u):null;if(o&&"Invalid Date"==o.toString()&&3==n.length){var d=n[1]+"/"+n[2]+"/"+n[0];o=new Date(Date.parse(d))}if(s&&"Invalid Date"==s.toString()&&3==u.length){var l=u[1]+"/"+u[2]+"/"+u[0];s=new Date(Date.parse(l))}var m={disable:t,format:e.attr("data-format"),formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){e.blur()},onClose:function(){e.blur()}};null!==a&&(m.selectYears=a),null!==o&&(m.min=o),null!==s&&(m.max=s),e.pickadate(m)}),jQuery(".um-timepicker:not(.picker__input)").each(function(){var e=jQuery(this);e.pickatime({format:e.attr("data-format"),interval:parseInt(e.attr("data-intervals")),formatSubmit:"HH:i",hiddenName:!0,onOpen:function(){e.blur()},onClose:function(){e.blur()}})})}function init_tipsy(){"function"==typeof jQuery.fn.tipsy&&(jQuery(".um-tip-n").tipsy({gravity:"n",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-w").tipsy({gravity:"w",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-e").tipsy({gravity:"e",opacity:1,live:"a.live",offset:3}),jQuery(".um-tip-s").tipsy({gravity:"s",opacity:1,live:"a.live",offset:3}))}jQuery(document).ready(function(){jQuery(document.body).on("click",".um-dropdown a.real_url",function(){window.location=jQuery(this).attr("href")}),jQuery(document.body).on("click",".um-trigger-menu-on-click",function(){return jQuery(".um-dropdown").hide(),jQuery(this).find(".um-dropdown").show(),!1}),jQuery(document.body).on("click",".um-dropdown-hide",function(){return UM_hide_menus(),!1}),jQuery(document.body).on("click","a.um-manual-trigger",function(){var e=jQuery(this).attr("data-child"),t=jQuery(this).attr("data-parent");return jQuery(this).parents(t).find(e).trigger("click"),UM_hide_menus(),!1}),jQuery(".um-s1,.um-s2").css({display:"block"}),"function"==typeof jQuery.fn.select2&&(jQuery(".um-s1").select2({allowClear:!0}),jQuery(".um-s2").select2({allowClear:!1,minimumResultsForSearch:10}),jQuery(".um-s3").select2({allowClear:!1,minimumResultsForSearch:-1})),init_tipsy(),"function"==typeof jQuery.fn.um_raty&&(jQuery(".um-rating").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,click:function(e,t){um_live_field=this.id,um_live_value=e,um_apply_conditions(jQuery(this),!1)}}),jQuery(".um-rating-readonly").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,readOnly:!0})),jQuery(document).on("change",'.um-field-area input[type="radio"]',function(){var e=jQuery(this).parents(".um-field-area"),t=jQuery(this).parents("label");e.find(".um-field-radio").removeClass("active"),e.find(".um-field-radio").find("i").removeAttr("class").addClass("um-icon-android-radio-button-off"),t.addClass("active"),t.find("i").removeAttr("class").addClass("um-icon-android-radio-button-on")}),jQuery(document).on("change",'.um-field-area input[type="checkbox"]',function(){var e=jQuery(this).parents("label");e.hasClass("active")?(e.removeClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline-blank")):(e.addClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline"))}),um_init_datetimepicker(),jQuery(document).on("click",".um .um-single-image-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=t.find('input[type="hidden"]#'+t.data("key")+"-"+jQuery(this).parents("form").find('input[type="hidden"][name="form_id"]').val()).val(),i=jQuery(this).parents(".um-field").find(".um-single-image-preview img").attr("src"),r=t.data("mode"),n={data:{mode:r,filename:a,src:i,nonce:um_scripts.nonce},success:function(){t.find(".um-single-image-preview img").attr("src",""),t.find(".um-single-image-preview").hide(),t.find(".um-btn-auto-width").html(t.data("upload-label")),t.find("input[type=hidden]").val("empty_file")}};return"register"!==r&&(n.data.user_id=jQuery(this).parents("form").find("#user_id").val()),wp.ajax.send("um_remove_file",n),!1}),jQuery(document).on("click",".um .um-single-file-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=t.find('input[type="hidden"]#'+t.data("key")+"-"+jQuery(this).parents("form").find('input[type="hidden"][name="form_id"]').val()).val(),i=jQuery(this).parents(".um-field").find(".um-single-fileinfo a").attr("href"),r=t.data("mode"),n={data:{mode:r,filename:a,src:i,nonce:um_scripts.nonce},success:function(){t.find(".um-single-file-preview").hide(),t.find(".um-btn-auto-width").html(t.data("upload-label")),t.find("input[type=hidden]").val("empty_file")}};return"register"!==r&&(n.data.user_id=jQuery(this).parents("form").find("#user_id").val()),wp.ajax.send("um_remove_file",n),!1}),jQuery(document).on("click",".um-field-group-head:not(.disabled)",function(){var e=jQuery(this).parents(".um-field-group"),t=e.data("max_entries");e.find(".um-field-group-body").is(":hidden")?e.find(".um-field-group-body").show():e.find(".um-field-group-body:first").clone().appendTo(e);var a=0;e.find(".um-field-group-body").each(function(){a++,jQuery(this).find("input").each(function(){var e=jQuery(this);e.attr("id",e.data("key")+"-"+a),e.attr("name",e.data("key")+"-"+a),e.parent().parent().find("label").attr("for",e.data("key")+"-"+a)})}),0<t&&e.find(".um-field-group-body").length==t&&jQuery(this).addClass("disabled")}),jQuery(document).on("click",".um-field-group-cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field-group"),a=t.data("max_entries");return 1<t.find(".um-field-group-body").length?jQuery(this).parents(".um-field-group-body").remove():jQuery(this).parents(".um-field-group-body").hide(),0<a&&t.find(".um-field-group-body").length<a&&t.find(".um-field-group-head").removeClass("disabled"),!1}),jQuery(document.body).on("click",".um-ajax-paginate",function(e){e.preventDefault();var t=jQuery(this),a=t.parent();a.addClass("loading");var i=1*t.data("pages"),r=1*t.data("page")+1,n=t.data("hook");if("um_load_posts"===n)jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate_posts",author:jQuery(this).data("author"),page:r,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.before(e),r===i?a.remove():t.data("page",r)}});else if("um_load_comments"===n)jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate_comments",user_id:jQuery(this).data("user_id"),page:r,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.before(e),r===i?a.remove():t.data("page",r)}});else{var u=jQuery(this).data("args"),o=jQuery(this).parents(".um").find(".um-ajax-items");jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_ajax_paginate",hook:n,args:u,nonce:um_scripts.nonce},complete:function(){a.removeClass("loading")},success:function(e){a.remove(),o.append(e)}})}}),jQuery(document).on("click",".um-ajax-action",function(e){e.preventDefault();var t=jQuery(this).data("hook"),a=jQuery(this).data("user_id"),arguments=jQuery(this).data("arguments");return jQuery(this).data("js-remove")&&jQuery(this).parents("."+jQuery(this).data("js-remove")).fadeOut("fast"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_muted_action",hook:t,user_id:a,arguments:arguments,nonce:um_scripts.nonce},success:function(e){}}),!1}),jQuery(document.body).on("click","#um-search-button",function(){var e=jQuery(this).parents(".um-search-form").data("members_page"),t=[];jQuery(this).parents(".um-search-form").find('input[name="um-search-keys[]"]').each(function(){t.push(jQuery(this).val())});var a,i=jQuery(this).parents(".um-search-form").find(".um-search-field").val();if(""===i)a=e;else{for(var r="?",n=0;n<t.length;n++)r+=t[n]+"="+i,n!==t.length-1&&(r+="&");a=e+r}window.location=a}),jQuery(document.body).on("keypress",".um-search-field",function(e){if(13===e.which){var t=jQuery(this).parents(".um-search-form").data("members_page"),a=[];jQuery(this).parents(".um-search-form").find('input[name="um-search-keys[]"]').each(function(){a.push(jQuery(this).val())});var i,r=jQuery(this).val();if(""===r)i=t;else{for(var n="?",u=0;u<a.length;u++)n+=a[u]+"="+r,u!==a.length-1&&(n+="&");i=t+n}window.location=i}}),jQuery('.um-form input[class="um-button"][type="submit"]').removeAttr("disabled"),jQuery(document).one("click",'.um:not(.um-account) .um-form input[class="um-button"][type="submit"]:not(.um-has-recaptcha)',function(){jQuery(this).attr("disabled","disabled"),jQuery(this).parents("form").submit()});var o={};function s(t,e,a){var i=t.parents(".um-directory"),r=t.attr("name");t.find('option[value!=""]').remove(),t.hasClass("um-child-option-disabled")||t.removeAttr("disabled");var n=[];if("yes"===e.post.members_directory&&n.push({id:"",text:"",selected:1}),jQuery.each(e.items,function(e,t){n.push({id:e,text:t,selected:""===t})}),t.select2("destroy"),t.select2({data:n,allowClear:!0,minimumResultsForSearch:10}),"yes"===e.post.members_directory){t.find("option").each(function(){""!==jQuery(this).html()&&jQuery(this).data("value_label",jQuery(this).html()).attr("data-value_label",jQuery(this).html())});var u=um_get_data_for_directory(i,"filter_"+r);if(void 0!==u){u=u.split("||");var o=[];jQuery.each(u,function(e){t.find('option[value="'+u[e]+'"]').length&&o.push(u[e]),t.find('option[value="'+u[e]+'"]').prop("disabled",!0).hide(),1===t.find("option:not(:disabled)").length&&t.prop("disabled",!0),t.select2("destroy").select2(),t.val("").trigger("change")}),o=o.join("||"),u!==o&&(um_set_url_from_data(i,"filter_"+r,o),um_ajax_get_members(i))}um_change_tag(i)}"yes"!==e.post.members_directory&&(void 0===e.field.default||t.data("um-original-value")?""!==t.data("um-original-value")&&t.val(t.data("um-original-value")).trigger("change"):t.val(e.field.default).trigger("change"),0==e.field.editable&&(t.addClass("um-child-option-disabled"),t.attr("disabled","disabled")))}jQuery("select[data-um-parent]").each(function(){var r=jQuery(this),n=r.data("um-parent"),u=r.data("um-ajax-source");r.attr("data-um-init-field",!0),jQuery(document).on("change",'select[name="'+n+'"]',function(){var t,e=jQuery(this),a=e.closest("form").find('input[type="hidden"][name="form_id"]').val();if("yes"===r.attr("data-member-directory")){var i=e.parents(".um-directory");t=void 0!==(t=um_get_data_for_directory(i,"filter_"+n))?t.split("||"):""}else t=e.val();if(void 0!==t&&""!==t&&"object"!=typeof o[t]){if(void 0!==r.um_wait&&!1!==r.um_wait)return;r.um_wait=!0,jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_select_options",parent_option_name:n,parent_option:t,child_callback:u,child_name:r.attr("name"),members_directory:r.attr("data-member-directory"),form_id:a,nonce:um_scripts.nonce},success:function(e){"success"===e.status&&""!==t&&(o[t]=e,s(r,e,t)),void 0!==e.debug&&console.log(e),r.um_wait=!1},error:function(e){console.log(e),r.um_wait=!1}})}void 0!==t&&""!==t&&"object"==typeof o[t]&&setTimeout(s,10,r,o[t],t),void 0===t&&""!==t||(r.find('option[value!=""]').remove(),r.val("").trigger("change"))}),jQuery('select[name="'+n+'"]').trigger("change")})});
includes/admin/assets/css/um-admin-forms.css CHANGED
@@ -14,6 +14,28 @@
14
  padding: 0 0 15px 0;
15
  }
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  input[type=text].um-forms-field.um-long-field,
18
  select.um-forms-field.um-long-field,
19
  textarea.um-forms-field.um-long-field {
@@ -64,6 +86,10 @@ textarea.um-forms-field.um-small-field {
64
  margin: 5px 0 0 0;
65
  }
66
 
 
 
 
 
67
  .um-multi-selects-option-line.um-admin-drag-fld {
68
  background: none;
69
  border: none;
@@ -88,6 +114,33 @@ textarea.um-forms-field.um-small-field {
88
  box-sizing: border-box;
89
  }
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  .um-multi-selects-option-line.um-admin-drag-fld .um-field-wrapper {
92
  width: calc( 100% - 90px );
93
  }
@@ -125,6 +178,12 @@ textarea.um-forms-field.um-small-field {
125
  }
126
 
127
  .um-md-default-filters-option-line .um-field-wrapper2 input {
 
 
 
 
 
 
128
  width: calc( 50% - 7px ) !important;
129
  float: left;
130
  }
@@ -136,7 +195,8 @@ textarea.um-forms-field.um-small-field {
136
  display: block;
137
  }
138
 
139
- .um-md-default-filters-option-line .um-field-wrapper2 input:first-child {
 
140
  margin-right: 11px;
141
  }
142
 
@@ -190,6 +250,10 @@ textarea.um-forms-field.um-small-field {
190
  width:calc( 100% - 20px );
191
  }
192
 
 
 
 
 
193
 
194
  @media screen and (max-width: 782px) {
195
  .um-form-fields-section {
@@ -269,4 +333,33 @@ textarea.um-forms-field.um-small-field {
269
 
270
  .um-forms-line[data-conditional] {
271
  display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  }
14
  padding: 0 0 15px 0;
15
  }
16
 
17
+ .um-form-table.um-top-label .um-forms-line[data-field_type="icon"] td label {
18
+ width: 100%;
19
+ display: block;
20
+ margin: 0 0 5px 0;
21
+ }
22
+
23
+ .um_admin_fonticon_wrapper {
24
+ display: flex;
25
+ flex-direction: row;
26
+ flex-wrap: nowrap;
27
+ justify-content: flex-start;
28
+ align-items: center;
29
+ }
30
+
31
+ .um-admin-icon-value {
32
+ line-height: 1;
33
+ }
34
+
35
+ .um_admin_fonticon_wrapper .um-admin-icon-value i {
36
+ top: 0;
37
+ }
38
+
39
  input[type=text].um-forms-field.um-long-field,
40
  select.um-forms-field.um-long-field,
41
  textarea.um-forms-field.um-long-field {
86
  margin: 5px 0 0 0;
87
  }
88
 
89
+ .um-md-default-filters-option-line .um.um-field-wrapper2 {
90
+ margin: 5px 0 0 0;
91
+ }
92
+
93
  .um-multi-selects-option-line.um-admin-drag-fld {
94
  background: none;
95
  border: none;
114
  box-sizing: border-box;
115
  }
116
 
117
+ .um-multi-selects-option-line .um-field-wrapper.um-custom-order-fields {
118
+ margin: 5px 0 0 0;
119
+ }
120
+
121
+ .um-multi-selects-option-line .um-field-wrapper.um-custom-order-fields label {
122
+ float:left;
123
+ width: 100%;
124
+ line-height: 30px;
125
+ box-sizing: border-box;
126
+ margin: 0 !important;
127
+ padding: 0 !important;
128
+ font-weight: bold;
129
+ display: flex;
130
+ flex-direction: row;
131
+ flex-wrap: nowrap;
132
+ justify-content: space-between;
133
+ align-items: baseline;
134
+ }
135
+
136
+ .um-multi-selects-option-line .um-field-wrapper.um-custom-order-fields label input[type="text"] {
137
+ width: auto;
138
+ display: inline;
139
+ font-weight: normal;
140
+ max-width: 70%;
141
+ flex: 0.9;
142
+ }
143
+
144
  .um-multi-selects-option-line.um-admin-drag-fld .um-field-wrapper {
145
  width: calc( 100% - 90px );
146
  }
178
  }
179
 
180
  .um-md-default-filters-option-line .um-field-wrapper2 input {
181
+ width: 100%;
182
+ float: left;
183
+ }
184
+
185
+ .um-md-default-filters-option-line .um-field-wrapper2 input.um-timepicker-filter,
186
+ .um-md-default-filters-option-line .um-field-wrapper2 input.um-datepicker-filter {
187
  width: calc( 50% - 7px ) !important;
188
  float: left;
189
  }
195
  display: block;
196
  }
197
 
198
+ .um-md-default-filters-option-line .um-field-wrapper2 input.um-timepicker-filter:first-child,
199
+ .um-md-default-filters-option-line .um-field-wrapper2 input.um-datepicker-filter:first-child {
200
  margin-right: 11px;
201
  }
202
 
250
  width:calc( 100% - 20px );
251
  }
252
 
253
+ .um-multi-text-option-line,
254
+ .um-multi-selects-option-line {
255
+ margin: 0 0 5px 0;
256
+ }
257
 
258
  @media screen and (max-width: 782px) {
259
  .um-form-fields-section {
333
 
334
  .um-forms-line[data-conditional] {
335
  display: none;
336
+ }
337
+
338
+
339
+
340
+ /* Same page update field */
341
+ .um-forms-line td .um-same-page-update-wrapper {
342
+ display: none;
343
+ margin: 7px 0 0 0;
344
+ }
345
+
346
+ .um-forms-line td .um-same-page-update-wrapper input.um-admin-form-same-page-update {
347
+ margin: 7px 0 0 0;
348
+ }
349
+
350
+ .um-forms-line td .um-same-page-update-wrapper .upgrade_log {
351
+ margin: 7px 0 0 0;
352
+ width:100%;
353
+ height:150px;
354
+ overflow: auto;
355
+ border: 1px solid #a1a1a1;
356
+ }
357
+
358
+ .um-forms-line[data-field_type="same_page_update"] {
359
+ vertical-align: baseline;
360
+ }
361
+
362
+ .um-forms-line[data-field_type="same_page_update"] th,
363
+ .um-forms-line[data-field_type="same_page_update"] td {
364
+ vertical-align: baseline;
365
  }
includes/admin/assets/js/um-admin-forms.js CHANGED
@@ -1,6 +1,146 @@
1
  jQuery(document).ready( function() {
2
 
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  /**
5
  * Multi-selects sort
6
  */
@@ -10,6 +150,61 @@ jQuery(document).ready( function() {
10
  forcePlaceholderSize: true
11
  });
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  /**
15
  * Multi-selects field
@@ -26,6 +221,10 @@ jQuery(document).ready( function() {
26
  });
27
 
28
  jQuery( '.um-multi-selects-add-option' ).click( function() {
 
 
 
 
29
  var list = jQuery(this).siblings('ul.um-multi-selects-list');
30
 
31
  var sortable = list.hasClass( 'um-sortable-multi-selects' );
@@ -266,18 +465,33 @@ jQuery(document).ready( function() {
266
  });
267
 
268
  function um_set_range_label( slider, ui ) {
269
- var placeholder = slider.siblings( '.um-slider-range' ).data( 'placeholder' );
270
-
271
- if( ui ) {
272
- placeholder = placeholder.replace( '\{min_range\}', ui.values[ 0 ] )
273
- .replace( '\{max_range\}', ui.values[ 1 ] )
274
- .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
275
- .data('label') );
 
 
 
 
 
 
 
 
 
276
  } else {
277
- placeholder = placeholder.replace( '\{min_range\}', slider.slider( "values", 0 ) )
278
- .replace( '\{max_range\}', slider.slider( "values", 1 ) )
279
- .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
280
- .data('label') );
 
 
 
 
 
 
281
  }
282
  slider.siblings( '.um-slider-range' ).html( placeholder );
283
 
1
  jQuery(document).ready( function() {
2
 
3
 
4
+ /**
5
+ * Same page upgrade field
6
+ */
7
+ jQuery( document.body ).on( 'click', '.um-forms-field[data-log-object]', function() {
8
+ var obj = jQuery( this ).data( 'log-object' );
9
+ if ( jQuery( this ).is( ':checked' ) ) {
10
+ jQuery( this ).siblings( '.um-same-page-update-' + obj ).show();
11
+ } else {
12
+ jQuery( this ).siblings( '.um-same-page-update-' + obj ).hide();
13
+ }
14
+ });
15
+
16
+
17
+
18
+ jQuery( document.body ).on( 'click', '.um-admin-form-same-page-update', function() {
19
+ var field_key = jQuery(this).data('upgrade_cb');
20
+ jQuery(this).prop( 'disabled', true );
21
+
22
+ um_add_same_page_log( field_key, wp.i18n.__( 'Upgrade Process Started...', 'ultimate-member' ) );
23
+
24
+ if ( field_key === 'sync_metatable' ) {
25
+ var metadata_pages = 0;
26
+ var metadata_per_page = 500;
27
+ var current_page;
28
+
29
+ jQuery.ajax({
30
+ url: wp.ajax.settings.url,
31
+ type: 'POST',
32
+ dataType: 'json',
33
+ data: {
34
+ action: 'um_same_page_update',
35
+ cb_func: 'um_usermeta_fields',
36
+ nonce: um_admin_scripts.nonce
37
+ },
38
+ success: function( response ) {
39
+ get_metadata();
40
+ },
41
+ error: function() {
42
+ um_same_page_something_wrong( field_key );
43
+ }
44
+ });
45
+
46
+
47
+ /**
48
+ *
49
+ * @returns {boolean}
50
+ */
51
+ function get_metadata() {
52
+ current_page = 1;
53
+
54
+ um_add_same_page_log( field_key, wp.i18n.__( 'Getting metadata', 'ultimate-member' ) );
55
+ jQuery.ajax({
56
+ url: wp.ajax.settings.url,
57
+ type: 'POST',
58
+ dataType: 'json',
59
+ data: {
60
+ action: 'um_same_page_update',
61
+ cb_func: 'um_get_metadata',
62
+ nonce: um_admin_scripts.nonce
63
+ },
64
+ success: function( response ) {
65
+ if ( typeof response.data.count != 'undefined' ) {
66
+ um_add_same_page_log( field_key, wp.i18n.__( 'There are ', 'ultimate-member' ) + response.data.count + wp.i18n.__( ' metadata rows...', 'ultimate-member' ) );
67
+ um_add_same_page_log( field_key, wp.i18n.__( 'Start metadata upgrading...', 'ultimate-member' ) );
68
+
69
+ metadata_pages = Math.ceil( response.data.count / metadata_per_page );
70
+
71
+ update_metadata_per_page();
72
+ } else {
73
+ um_same_page_wrong_ajax( field_key );
74
+ }
75
+ },
76
+ error: function() {
77
+ um_same_page_something_wrong( field_key );
78
+ }
79
+ });
80
+
81
+ return false;
82
+ }
83
+
84
+
85
+ function update_metadata_per_page() {
86
+ if ( current_page <= metadata_pages ) {
87
+ jQuery.ajax({
88
+ url: wp.ajax.settings.url,
89
+ type: 'POST',
90
+ dataType: 'json',
91
+ data: {
92
+ action: 'um_same_page_update',
93
+ cb_func: 'um_update_metadata_per_page',
94
+ page: current_page,
95
+ nonce: um_admin_scripts.nonce
96
+ },
97
+ success: function( response ) {
98
+ if ( typeof response.data != 'undefined' ) {
99
+ um_add_same_page_log( field_key, response.data.message );
100
+ current_page++;
101
+ update_metadata_per_page();
102
+ } else {
103
+ um_same_page_wrong_ajax( field_key );
104
+ }
105
+ },
106
+ error: function() {
107
+ um_same_page_something_wrong( field_key );
108
+ }
109
+ });
110
+ } else {
111
+ window.location = um_forms_data.successfully_redirect;
112
+ }
113
+ }
114
+ }
115
+ });
116
+
117
+
118
+
119
+ /**
120
+ *
121
+ * @param field_key
122
+ * @param line
123
+ */
124
+ function um_add_same_page_log( field_key, line ) {
125
+ var log_field = jQuery( '.um-same-page-update-' + field_key ).find( '.upgrade_log' );
126
+ var previous_html = log_field.html();
127
+ log_field.html( previous_html + line + "<br />" );
128
+ }
129
+
130
+
131
+ function um_same_page_wrong_ajax( field_key ) {
132
+ um_add_same_page_log( field_key, wp.i18n.__( 'Wrong AJAX response...', 'ultimate-member' ) );
133
+ um_add_same_page_log( field_key, wp.i18n.__( 'Your upgrade was crashed, please contact with support', 'ultimate-member' ) );
134
+ }
135
+
136
+
137
+ function um_same_page_something_wrong( field_key ) {
138
+ um_add_same_page_log( field_key, wp.i18n.__( 'Something went wrong with AJAX request...', 'ultimate-member' ) );
139
+ um_add_same_page_log( field_key, wp.i18n.__( 'Your upgrade was crashed, please contact with support', 'ultimate-member' ) );
140
+ }
141
+
142
+
143
+
144
  /**
145
  * Multi-selects sort
146
  */
150
  forcePlaceholderSize: true
151
  });
152
 
153
+ jQuery('.um-multi-selects-list[data-field_id="_um_sorting_fields"] li').each( function() {
154
+ var if_other = jQuery(this).find( '.um-field-wrapper:not(.um-custom-order-fields) select' ).val();
155
+ if ( if_other === 'other' ) {
156
+ jQuery(this).find( '.um-field-wrapper.um-custom-order-fields' ).show();
157
+ } else {
158
+ jQuery(this).find( '.um-field-wrapper.um-custom-order-fields' ).hide();
159
+ }
160
+ });
161
+
162
+ jQuery( '.um-forms-line[data-field_type="md_sorting_fields"] .um-multi-selects-add-option' ).click( function() {
163
+ var list = jQuery(this).siblings('ul.um-multi-selects-list');
164
+
165
+ var sortable = list.hasClass( 'um-sortable-multi-selects' );
166
+
167
+ var field_id = list.data('field_id');
168
+ var k = 0;
169
+ if ( list.find( 'li:last select.um-forms-field' ).length > 0 ) {
170
+ k = list.find( 'li:last select.um-forms-field' ).attr('id').split("-");
171
+ k = k[1]*1 + 1;
172
+ }
173
+
174
+ var selector_html = jQuery( '<div>' ).append( list.siblings('.um-hidden-multi-selects').clone() ).html();
175
+
176
+ var html = '<li class="um-multi-selects-option-line' + ( sortable ? ' um-admin-drag-fld' : '' ) + '">';
177
+ if ( sortable ) {
178
+ html += '<span class="um-field-icon"><i class="um-faicon-sort"></i></span>';
179
+ }
180
+
181
+ html += '<span class="um-field-wrapper">' + selector_html + '</span>' +
182
+ '<span class="um-field-control">' +
183
+ '<a href="javascript:void(0);" class="um-select-delete">' + wp.i18n.__( 'Remove', 'ultimate-member' ) + '</a>' +
184
+ '</span>' +
185
+ '<span class="um-field-wrapper um-custom-order-fields"><label>' + wp.i18n.__( 'Meta key', 'ultimate-member' ) + ':&nbsp;<input type="text" name="meta_key" /></label></span>' +
186
+ '<span class="um-field-wrapper um-custom-order-fields"><label>' + wp.i18n.__( 'Label', 'ultimate-member' ) + ':&nbsp;<input type="text" name="label" /></label></span>' +
187
+ '</li>';
188
+ list.append( html );
189
+
190
+ list.find('li:last .um-hidden-multi-selects').attr('name', jQuery(this).data('name') ).
191
+ addClass('um-forms-field um-long-field').removeClass('um-hidden-multi-selects').attr('id', list.data('id_attr') + '-' + k).trigger('change');
192
+
193
+ jQuery( '#' + list.data('id_attr') + '-' + k ).parents('li').find('.um-field-wrapper.um-custom-order-fields input[name="meta_key"]').attr('name', 'um_metadata[_um_sorting_fields][other_data][' + k + '][meta_key]');
194
+ jQuery( '#' + list.data('id_attr') + '-' + k ).parents('li').find('.um-field-wrapper.um-custom-order-fields input[name="label"]').attr('name', 'um_metadata[_um_sorting_fields][other_data][' + k + '][label]');
195
+ });
196
+
197
+
198
+ jQuery( document.body ).on( 'change', '.um-multi-selects-list[data-field_id="_um_sorting_fields"] .um-field-wrapper:not(.um-custom-order-fields) select', function() {
199
+ var if_other = jQuery(this).val();
200
+
201
+ if ( if_other === 'other' ) {
202
+ jQuery(this).parents('li').find( '.um-field-wrapper.um-custom-order-fields' ).show();
203
+ } else {
204
+ jQuery(this).parents('li').find( '.um-field-wrapper.um-custom-order-fields' ).hide();
205
+ }
206
+ });
207
+
208
 
209
  /**
210
  * Multi-selects field
221
  });
222
 
223
  jQuery( '.um-multi-selects-add-option' ).click( function() {
224
+ if ( jQuery(this).parents( '.um-forms-line[data-field_type="md_sorting_fields"]' ).length ) {
225
+ return;
226
+ }
227
+
228
  var list = jQuery(this).siblings('ul.um-multi-selects-list');
229
 
230
  var sortable = list.hasClass( 'um-sortable-multi-selects' );
465
  });
466
 
467
  function um_set_range_label( slider, ui ) {
468
+ console.log( slider );
469
+ var placeholder = '';
470
+ var placeholder_s = slider.siblings( '.um-slider-range' ).data( 'placeholder-s' );
471
+ var placeholder_p = slider.siblings( '.um-slider-range' ).data( 'placeholder-p' );
472
+
473
+ if ( ui ) {
474
+ if ( ui.values[ 0 ] === ui.values[ 1 ] ) {
475
+ placeholder = placeholder_s.replace( '\{value\}', ui.values[ 0 ] )
476
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
477
+ .data('label') );
478
+ } else {
479
+ placeholder = placeholder_p.replace( '\{min_range\}', ui.values[ 0 ] )
480
+ .replace( '\{max_range\}', ui.values[ 1 ] )
481
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
482
+ .data('label') );
483
+ }
484
  } else {
485
+ if ( slider.slider( "values", 0 ) === slider.slider( "values", 1 ) ) {
486
+ placeholder = placeholder_s.replace( '\{value\}', slider.slider( "values", 0 ) )
487
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
488
+ .data('label') );
489
+ } else {
490
+ placeholder = placeholder_p.replace( '\{min_range\}', slider.slider( "values", 0 ) )
491
+ .replace( '\{max_range\}', slider.slider( "values", 1 ) )
492
+ .replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
493
+ .data('label') );
494
+ }
495
  }
496
  slider.siblings( '.um-slider-range' ).html( placeholder );
497
 
includes/admin/assets/js/um-admin-modal.js CHANGED
@@ -387,13 +387,13 @@ jQuery(document).ready(function() {
387
  jQuery(document.body).on('click', '#UM_fonticons a.um-admin-modal-back:not(.um-admin-modal-cancel)', function(){
388
  var v_id = '';
389
  var icon_selected = jQuery(this).attr('data-code');
390
- if (icon_selected != ''){
391
  if ( jQuery(this).attr('data-modal') ) {
392
  v_id = '#' + jQuery(this).attr('data-modal');
393
  } else {
394
  v_id = '.postbox';
395
  }
396
- jQuery( v_id ).find('input#_icon,input#_um_icon,input#notice__um_icon').val( icon_selected );
397
  jQuery( v_id ).find('span.um-admin-icon-value').html('<i class="'+icon_selected+'"></i>');
398
  jQuery( v_id ).find('.um-admin-icon-clear').show();
399
  }
387
  jQuery(document.body).on('click', '#UM_fonticons a.um-admin-modal-back:not(.um-admin-modal-cancel)', function(){
388
  var v_id = '';
389
  var icon_selected = jQuery(this).attr('data-code');
390
+ if ( icon_selected != '' ) {
391
  if ( jQuery(this).attr('data-modal') ) {
392
  v_id = '#' + jQuery(this).attr('data-modal');
393
  } else {
394
  v_id = '.postbox';
395
  }
396
+ jQuery( v_id ).find('input#_icon,input#_um_icon,input#notice__um_icon,input#um_profile_tab__icon').val( icon_selected );
397
  jQuery( v_id ).find('span.um-admin-icon-value').html('<i class="'+icon_selected+'"></i>');
398
  jQuery( v_id ).find('.um-admin-icon-clear').show();
399
  }
includes/admin/core/class-admin-ajax-hooks.php CHANGED
@@ -28,6 +28,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Ajax_Hooks' ) ) {
28
  add_action( 'wp_ajax_um_populate_dropdown_options', array( UM()->builder(), 'populate_dropdown_options' ) );
29
  add_action( 'wp_ajax_um_rated', array( UM()->admin_menu(), 'ultimatemember_rated' ) );
30
  add_action( 'wp_ajax_um_member_directory_default_filter_settings', array( UM()->member_directory(), 'default_filter_settings' ) );
 
 
31
  }
32
 
33
  }
28
  add_action( 'wp_ajax_um_populate_dropdown_options', array( UM()->builder(), 'populate_dropdown_options' ) );
29
  add_action( 'wp_ajax_um_rated', array( UM()->admin_menu(), 'ultimatemember_rated' ) );
30
  add_action( 'wp_ajax_um_member_directory_default_filter_settings', array( UM()->member_directory(), 'default_filter_settings' ) );
31
+
32
+ add_action( 'wp_ajax_um_same_page_update', array( UM()->admin_settings(), 'same_page_update_ajax' ) );
33
  }
34
 
35
  }
includes/admin/core/class-admin-builder.php CHANGED
@@ -635,7 +635,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) {
635
  * }
636
  * ?>
637
  */
638
- $array = apply_filters( "um_admin_pre_save_fields_hook", $array );
639
 
640
  /**
641
  * UM hook
@@ -666,23 +666,23 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) {
666
  */
667
  extract( $array['post'] );
668
 
669
- if ( empty( $output['error'] ) ){
670
 
671
  $save = array();
672
  $save[ $_metakey ] = null;
673
- foreach( $array['post'] as $key => $val){
674
 
675
- if ( substr( $key, 0, 1) === '_' && $val != '' ) { // field attribute
676
  $new_key = ltrim ($key,'_');
677
 
678
  if ( $new_key == 'options' ) {
679
  //$save[ $_metakey ][$new_key] = explode(PHP_EOL, $val);
680
- $save[ $_metakey ][$new_key] = preg_split('/[\r\n]+/', $val, -1, PREG_SPLIT_NO_EMPTY);
681
  } else {
682
- $save[ $_metakey ][$new_key] = $val;
683
  }
684
 
685
- } else if ( strstr( $key, 'um_editor' ) ) {
686
  $save[ $_metakey ]['content'] = $val;
687
  }
688
 
@@ -711,7 +711,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) {
711
  * }
712
  * ?>
713
  */
714
- $field_args = apply_filters("um_admin_pre_save_field_to_form", $field_args );
715
 
716
  UM()->fields()->update_field( $field_ID, $field_args, $post_id );
717
 
@@ -735,7 +735,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) {
735
  * }
736
  * ?>
737
  */
738
- $field_args = apply_filters("um_admin_pre_save_field_to_db", $field_args );
739
 
740
  if ( ! isset( $array['args']['form_only'] ) ) {
741
  if ( ! isset( UM()->builtin()->predefined_fields[ $field_ID ] ) ) {
635
  * }
636
  * ?>
637
  */
638
+ $array = apply_filters( 'um_admin_pre_save_fields_hook', $array );
639
 
640
  /**
641
  * UM hook
666
  */
667
  extract( $array['post'] );
668
 
669
+ if ( empty( $output['error'] ) ) {
670
 
671
  $save = array();
672
  $save[ $_metakey ] = null;
673
+ foreach ( $array['post'] as $key => $val ) {
674
 
675
+ if ( substr( $key, 0, 1 ) === '_' && $val != '' ) { // field attribute
676
  $new_key = ltrim ($key,'_');
677
 
678
  if ( $new_key == 'options' ) {
679
  //$save[ $_metakey ][$new_key] = explode(PHP_EOL, $val);
680
+ $save[ $_metakey ][ $new_key ] = preg_split( '/[\r\n]+/', $val, -1, PREG_SPLIT_NO_EMPTY );
681
  } else {
682
+ $save[ $_metakey ][ $new_key ] = $val;
683
  }
684
 
685
+ } elseif ( strstr( $key, 'um_editor' ) ) {
686
  $save[ $_metakey ]['content'] = $val;
687
  }
688
 
711
  * }
712
  * ?>
713
  */
714
+ $field_args = apply_filters( 'um_admin_pre_save_field_to_form', $field_args );
715
 
716
  UM()->fields()->update_field( $field_ID, $field_args, $post_id );
717
 
735
  * }
736
  * ?>
737
  */
738
+ $field_args = apply_filters( 'um_admin_pre_save_field_to_db', $field_args );
739
 
740
  if ( ! isset( $array['args']['form_only'] ) ) {
741
  if ( ! isset( UM()->builtin()->predefined_fields[ $field_ID ] ) ) {
includes/admin/core/class-admin-enqueue.php CHANGED
@@ -228,6 +228,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) {
228
  wp_enqueue_style( 'um_admin_forms' );
229
 
230
  wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true );
 
 
 
 
 
231
  wp_enqueue_script( 'um_admin_forms' );
232
  }
233
 
228
  wp_enqueue_style( 'um_admin_forms' );
229
 
230
  wp_register_script( 'um_admin_forms', $this->js_url . 'um-admin-forms.js', array( 'jquery', 'wp-i18n' ), ultimatemember_version, true );
231
+
232
+ wp_localize_script( 'um_admin_forms', 'um_forms_data', array(
233
+ 'successfully_redirect' => add_query_arg( array( 'page' => 'um_options', 'tab' => 'misc', 'msg' => 'updated' ), admin_url( 'admin.php' ) ),
234
+ ) );
235
+
236
  wp_enqueue_script( 'um_admin_forms' );
237
  }
238
 
includes/admin/core/class-admin-forms.php CHANGED
@@ -523,7 +523,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
523
  $value = $this->get_field_value( $field_data );
524
  $value_attr = ' value="' . $value . '" ';
525
 
526
- $html = '<a href="javascript:void(0);" class="button" data-modal="UM_fonticons" data-modal-size="normal" data-dynamic-content="um_admin_fonticon_selector" data-arg1="" data-arg2="" data-back="">' . __( 'Choose Icon', 'ultimate-member' ) . '</a>
527
  <span class="um-admin-icon-value">';
528
 
529
  if ( ! empty( $value ) ) {
@@ -540,7 +540,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
540
  $html .= '<span class="um-admin-icon-clear"><i class="um-icon-android-cancel"></i></span>';
541
  }
542
 
543
- $html .= '</span>';
544
 
545
  return $html;
546
  }
@@ -773,6 +773,60 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
773
  }
774
 
775
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
776
  /**
777
  * @param $field_data
778
  *
@@ -1291,7 +1345,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
1291
 
1292
  $html .= "<li class=\"um-md-default-filters-option-line\"><span class=\"um-field-wrapper\">
1293
  <select $id_attr $name_attr $class_attr $data_attr>$options</select></span>
1294
- <span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span><span class=\"um-field-wrapper2 um\">" . UM()->member_directory()->show_filter( $value, array( 'form_id' => $post->ID ), $values[ $value ] ) . "</span></li>";
1295
  }
1296
  } elseif ( ! empty( $field_data['show_default_number'] ) && is_numeric( $field_data['show_default_number'] ) && $field_data['show_default_number'] > 0 ) {
1297
  $i = 0;
@@ -1316,6 +1370,122 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
1316
  return $html;
1317
  }
1318
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1319
  /**
1320
  * Get field value
1321
  *
523
  $value = $this->get_field_value( $field_data );
524
  $value_attr = ' value="' . $value . '" ';
525
 
526
+ $html = '<span class="um_admin_fonticon_wrapper"><a href="javascript:void(0);" class="button" data-modal="UM_fonticons" data-modal-size="normal" data-dynamic-content="um_admin_fonticon_selector" data-arg1="" data-arg2="" data-back="">' . __( 'Choose Icon', 'ultimate-member' ) . '</a>
527
  <span class="um-admin-icon-value">';
528
 
529
  if ( ! empty( $value ) ) {
540
  $html .= '<span class="um-admin-icon-clear"><i class="um-icon-android-cancel"></i></span>';
541
  }
542
 
543
+ $html .= '</span></span>';
544
 
545
  return $html;
546
  }
773
  }
774
 
775
 
776
+ /**
777
+ * @param $field_data
778
+ *
779
+ * @return bool|string
780
+ */
781
+ function render_same_page_update( $field_data ) {
782
+
783
+ if ( empty( $field_data['id'] ) ) {
784
+ return false;
785
+ }
786
+
787
+ $id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id'];
788
+ $id_attr = ' id="' . esc_attr( $id ) . '" ';
789
+ $id_attr_hidden = ' id="' . esc_attr( $id ) . '_hidden" ';
790
+
791
+ $class = ! empty( $field_data['class'] ) ? $field_data['class'] : '';
792
+ $class .= ! empty( $field_data['size'] ) ? $field_data['size'] : 'um-long-field';
793
+ $class_attr = ' class="um-forms-field ' . esc_attr( $class ) . '" ';
794
+
795
+ $data = array(
796
+ 'field_id' => $field_data['id']
797
+ );
798
+
799
+ if ( ! empty( $field_data['data'] ) ) {
800
+ $data = array_merge( $data, $field_data['data'] );
801
+ }
802
+
803
+ $data_attr = '';
804
+ foreach ( $data as $key => $value ) {
805
+ $data_attr .= ' data-' . $key . '="' . esc_attr( $value ) . '" ';
806
+ }
807
+
808
+ if ( ! empty( $field_data['upgrade_cb'] ) ) {
809
+ $data_attr .= ' data-log-object="' . esc_attr( $field_data['upgrade_cb'] ) . '" ';
810
+ }
811
+
812
+ $name = $field_data['id'];
813
+ $name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name;
814
+ $name_attr = ' name="' . $name . '" ';
815
+
816
+ $value = $this->get_field_value( $field_data );
817
+
818
+ $html = "<input type=\"hidden\" $id_attr_hidden $name_attr value=\"0\" />
819
+ <input type=\"checkbox\" $id_attr $class_attr $name_attr $data_attr " . checked( $value, true, false ) . " value=\"1\" />";
820
+
821
+ if ( ! empty( $field_data['upgrade_cb'] ) ) {
822
+ $html .= '<div class="um-same-page-update-wrapper um-same-page-update-' . esc_attr( $field_data['upgrade_cb'] ) . '"><div class="um-same-page-update-description">' . $field_data['upgrade_description'] . '</div><input type="button" data-upgrade_cb="' . $field_data['upgrade_cb'] . '" class="button button-primary um-admin-form-same-page-update" value="' . esc_attr__( 'Run', 'ultimate-member' ) . '"/>
823
+ <div class="upgrade_log"></div></div>';
824
+ }
825
+
826
+ return $html;
827
+ }
828
+
829
+
830
  /**
831
  * @param $field_data
832
  *
1345
 
1346
  $html .= "<li class=\"um-md-default-filters-option-line\"><span class=\"um-field-wrapper\">
1347
  <select $id_attr $name_attr $class_attr $data_attr>$options</select></span>
1348
+ <span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span><span class=\"um-field-wrapper2 um\">" . UM()->member_directory()->show_filter( $value, array( 'form_id' => $post->ID ), $values[ $value ], true ) . "</span></li>";
1349
  }
1350
  } elseif ( ! empty( $field_data['show_default_number'] ) && is_numeric( $field_data['show_default_number'] ) && $field_data['show_default_number'] > 0 ) {
1351
  $i = 0;
1370
  return $html;
1371
  }
1372
 
1373
+
1374
+ function render_md_sorting_fields( $field_data ) {
1375
+ if ( empty( $field_data['id'] ) ) {
1376
+ return false;
1377
+ }
1378
+
1379
+ $id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id'];
1380
+
1381
+ $sorting = ! empty( $field_data['sorting'] ) ? $field_data['sorting'] : false;
1382
+
1383
+ $class = ! empty( $field_data['class'] ) ? $field_data['class'] : '';
1384
+ $class .= ! empty( $field_data['size'] ) ? $field_data['size'] : 'um-long-field';
1385
+ $class .= ! empty( $sorting ) ? 'um-sorting-enabled' : '';
1386
+ $class_attr = ' class="um-forms-field ' . $class . '" ';
1387
+
1388
+ $data = array(
1389
+ 'field_id' => $field_data['id'],
1390
+ 'id_attr' => $id
1391
+ );
1392
+
1393
+ $data_attr = '';
1394
+ foreach ( $data as $key => $value ) {
1395
+ $data_attr .= ' data-' . $key . '="' . esc_attr( $value ) . '" ';
1396
+ }
1397
+
1398
+ $name = $field_data['id'];
1399
+ $name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name;
1400
+ $name = "{$name}[]";
1401
+ $name_attr = ' name="' . $name . '" ';
1402
+
1403
+ $values = $this->get_field_value( $field_data );
1404
+
1405
+ $options = '';
1406
+ foreach ( $field_data['options'] as $key => $option ) {
1407
+ $options .= '<option value="' . $key . '">' . $option . '</option>';
1408
+ }
1409
+
1410
+ $html = "<select class=\"um-hidden-multi-selects\" $data_attr>$options</select>";
1411
+ $html .= "<ul class=\"um-multi-selects-list" . ( ! empty( $sorting ) ? ' um-sortable-multi-selects' : '' ) . "\" $data_attr>";
1412
+
1413
+ if ( $sorting && is_array( $values ) ) {
1414
+ ksort( $values );
1415
+ }
1416
+
1417
+ if ( ! empty( $values ) && is_array( $values ) ) {
1418
+ foreach ( $values as $k => $value ) {
1419
+
1420
+ $other_key = '';
1421
+ $other_label = '';
1422
+ if ( is_array( $value ) ) {
1423
+ $keys = array_keys( $value );
1424
+ $other_key = $keys[0];
1425
+
1426
+ $labels = array_values( $value );
1427
+ $other_label = $labels[0];
1428
+ } else {
1429
+ if ( ! in_array( $value, array_keys( $field_data['options'] ) ) ) {
1430
+ continue;
1431
+ }
1432
+ }
1433
+
1434
+ $id_attr = ' id="' . esc_attr( $id . '-' . $k ) . '" ';
1435
+
1436
+ $options = '';
1437
+ foreach ( $field_data['options'] as $key => $option ) {
1438
+ if ( is_array( $value ) ) {
1439
+ $selected = selected( $key == 'other', true, false );
1440
+ } else {
1441
+ $selected = selected( $key == $value, true, false );
1442
+ }
1443
+
1444
+ $options .= '<option value="' . $key . '" ' . $selected . '>' . $option . '</option>';
1445
+ }
1446
+
1447
+ $html .= '<li class="um-multi-selects-option-line' . ( ! empty( $sorting ) ? ' um-admin-drag-fld' : '' ) . '">';
1448
+ if ( $sorting ) {
1449
+ $html .= '<span class="um-field-icon"><i class="um-faicon-sort"></i></span>';
1450
+ }
1451
+ $html .= "<span class=\"um-field-wrapper\">
1452
+ <select $id_attr $name_attr $class_attr $data_attr>$options</select></span>
1453
+ <span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span>
1454
+ <span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Meta key', 'ultimate-member' ) . ":&nbsp;<input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $k . "][meta_key]\" value=\"" . esc_attr( $other_key ) . "\" /></label></span>
1455
+ <span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Label', 'ultimate-member' ) . ":&nbsp;<input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $k . "][label]\" value=\"" . esc_attr( $other_label ) . "\" /></label></span>
1456
+ </li>";
1457
+ }
1458
+ } elseif ( ! empty( $field_data['show_default_number'] ) && is_numeric( $field_data['show_default_number'] ) && $field_data['show_default_number'] > 0 ) {
1459
+ $i = 0;
1460
+ while ( $i < $field_data['show_default_number'] ) {
1461
+ $id_attr = ' id="' . $id . '-' . $i . '" ';
1462
+
1463
+ $options = '';
1464
+ foreach ( $field_data['options'] as $key => $option ) {
1465
+ $options .= '<option value="' . $key . '">' . $option . '</option>';
1466
+ }
1467
+
1468
+ $html .= '<li class="um-multi-selects-option-line' . ( ! empty( $sorting ) ? ' um-admin-drag-fld' : '' ) . '">';
1469
+ if ( $sorting ) {
1470
+ $html .= '<span class="um-field-icon"><i class="um-faicon-sort"></i></span>';
1471
+ }
1472
+
1473
+ $html .= "<span class=\"um-field-wrapper\">
1474
+ <select $id_attr $name_attr $class_attr $data_attr>$options</select></span>
1475
+ <span class=\"um-field-control\"><a href=\"javascript:void(0);\" class=\"um-select-delete\">" . __( 'Remove', 'ultimate-member' ) . "</a></span>
1476
+ <span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Meta key', 'ultimate-member' ) . ":&nbsp;<input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $i . "][meta_key]\" value=\"\" /></label></span>
1477
+ <span class=\"um-field-wrapper um-custom-order-fields\"><label>" . __( 'Label', 'ultimate-member' ) . ":&nbsp;<input type=\"text\" name=\"um_metadata[_um_sorting_fields][other_data][" . $i . "][label]\" value=\"\" /></label></span>
1478
+ </li>";
1479
+
1480
+ $i++;
1481
+ }
1482
+ }
1483
+
1484
+ $html .= "</ul><a href=\"javascript:void(0);\" class=\"button button-primary um-multi-selects-add-option\" data-name=\"$name\">{$field_data['add_text']}</a>";
1485
+
1486
+ return $html;
1487
+ }
1488
+
1489
  /**
1490
  * Get field value
1491
  *
includes/admin/core/class-admin-metabox.php CHANGED
@@ -19,6 +19,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
19
  * @var bool
20
  */
21
  private $form_nonce_added = false;
 
22
 
23
 
24
  /**
@@ -672,8 +673,25 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
672
  */
673
  function load_metabox_directory( $object, $box ) {
674
  $box['id'] = str_replace( 'um-admin-form-', '', $box['id'] );
675
- include_once UM()->admin()->templates_path . 'directory/'. $box['id'] . '.php';
676
- wp_nonce_field( basename( __FILE__ ), 'um_admin_save_metabox_directory_nonce' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
677
  }
678
 
679
 
19
  * @var bool
20
  */
21
  private $form_nonce_added = false;
22
+ private $directory_nonce_added = false;
23
 
24
 
25
  /**
673
  */
674
  function load_metabox_directory( $object, $box ) {
675
  $box['id'] = str_replace( 'um-admin-form-', '', $box['id'] );
676
+
677
+ preg_match('#\{.*?\}#s', $box['id'], $matches );
678
+
679
+ if ( isset( $matches[0] ) ) {
680
+ $path = $matches[0];
681
+ $box['id'] = preg_replace('~(\\{[^}]+\\})~','', $box['id'] );
682
+ } else {
683
+ $path = um_path;
684
+ }
685
+
686
+ $path = str_replace('{','', $path );
687
+ $path = str_replace('}','', $path );
688
+
689
+
690
+ include_once $path . 'includes/admin/templates/directory/'. $box['id'] . '.php';
691
+ if ( ! $this->directory_nonce_added ) {
692
+ $this->directory_nonce_added = true;
693
+ wp_nonce_field( basename( __FILE__ ), 'um_admin_save_metabox_directory_nonce' );
694
+ }
695
  }
696
 
697
 
includes/admin/core/class-admin-notices.php CHANGED
@@ -579,10 +579,17 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {
579
  ), 4 );
580
  } else {
581
  if ( isset( $_GET['msg'] ) && 'updated' == $_GET['msg'] ) {
582
- $this->add_notice( 'upgrade', array(
583
- 'class' => 'updated',
584
- 'message' => '<p>' . sprintf( __( '<strong>%s %s</strong> Successfully Upgraded', 'ultimate-member' ), ultimatemember_plugin_name, ultimatemember_version ) . '</p>',
585
- ), 4 );
 
 
 
 
 
 
 
586
  }
587
  }
588
  }
579
  ), 4 );
580
  } else {
581
  if ( isset( $_GET['msg'] ) && 'updated' == $_GET['msg'] ) {
582
+ if ( isset( $_GET['page'] ) && 'um_options' == $_GET['page'] ) {
583
+ $this->add_notice( 'settings_upgrade', array(
584
+ 'class' => 'updated',
585
+ 'message' => '<p>' . __( 'Settings successfully upgraded', 'ultimate-member' ) . '</p>',
586
+ ), 4 );
587
+ } else {
588
+ $this->add_notice( 'upgrade', array(
589
+ 'class' => 'updated',
590
+ 'message' => '<p>' . sprintf( __( '<strong>%s %s</strong> Successfully Upgraded', 'ultimate-member' ), ultimatemember_plugin_name, ultimatemember_version ) . '</p>',
591
+ ), 4 );
592
+ }
593
  }
594
  }
595
  }
includes/admin/core/class-admin-settings.php CHANGED
@@ -33,6 +33,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
33
  var $need_change_permalinks;
34
 
35
 
 
 
 
36
  /**
37
  * Admin_Settings constructor.
38
  */
@@ -80,6 +83,143 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
80
  }
81
 
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  /**
84
  *
85
  */
@@ -351,6 +491,22 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
351
  'default' => UM()->options()->get_default( 'restricted_access_taxonomy_metabox' ),
352
  ) ) );
353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
354
 
355
  /**
356
  * UM hook
@@ -399,79 +555,79 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
399
  'placeholder' => __( 'Select...', 'ultimate-member' ),
400
  ),
401
  array(
402
- 'id' => 'display_name',
403
- 'type' => 'select',
404
  'size' => 'medium',
405
- 'label' => __( 'User Display Name','ultimate-member' ),
406
- 'tooltip' => __( 'This is the name that will be displayed for users on the front end of your site. Default setting uses first/last name as display name if it exists','ultimate-member' ),
407
- 'options' => array(
408
- 'default' => __('Default WP Display Name','ultimate-member'),
409
- 'nickname' => __('Nickname','ultimate-member'),
410
- 'username' => __('Username','ultimate-member'),
411
- 'full_name' => __('First name & last name','ultimate-member'),
412
- 'sur_name' => __('Last name & first name','ultimate-member'),
413
- 'initial_name' => __('First name & first initial of last name','ultimate-member'),
414
- 'initial_name_f' => __('First initial of first name & last name','ultimate-member'),
415
- 'first_name' => __('First name only','ultimate-member'),
416
- 'field' => __('Custom field(s)','ultimate-member'),
417
  ),
418
- 'placeholder' => __('Select...'),
419
  ),
420
  array(
421
- 'id' => 'display_name_field',
422
- 'type' => 'text',
423
- 'label' => __( 'Display Name Custom Field(s)','ultimate-member' ),
424
- 'tooltip' => __('Specify the custom field meta key or custom fields seperated by comma that you want to use to display users name on the frontend of your site','ultimate-member'),
425
  'conditional' => array( 'display_name', '=', 'field' ),
426
  ),
427
  array(
428
- 'id' => 'author_redirect',
429
- 'type' => 'checkbox',
430
- 'label' => __( 'Automatically redirect author page to their profile?','ultimate-member'),
431
- 'tooltip' => __('If enabled, author pages will automatically redirect to the user\'s profile page','ultimate-member'),
432
  ),
433
  array(
434
- 'id' => 'members_page',
435
- 'type' => 'checkbox',
436
- 'label' => __( 'Enable Members Directory','ultimate-member' ),
437
- 'tooltip' => __('Control whether to enable or disable member directories on this site','ultimate-member'),
438
  ),
439
  array(
440
- 'id' => 'use_gravatars',
441
- 'type' => 'checkbox',
442
- 'label' => __( 'Use Gravatars?','ultimate-member' ),
443
- 'tooltip' => __('Do you want to use gravatars instead of the default plugin profile photo (If the user did not upload a custom profile photo / avatar)','ultimate-member'),
444
- ),
445
- array(
446
- 'id' => 'use_um_gravatar_default_builtin_image',
447
- 'type' => 'select',
448
- 'label' => __( 'Use Gravatar builtin image','ultimate-member' ),
449
- 'tooltip' => __( 'Gravatar has a number of built in options which you can also use as defaults','ultimate-member' ),
450
- 'options' => array(
451
- 'default' => __('Default','ultimate-member'),
452
- '404' => __('404 ( File Not Found response )','ultimate-member'),
453
- 'mm' => __('Mystery Man','ultimate-member'),
454
- 'identicon' => __('Identicon','ultimate-member'),
455
- 'monsterid' => __('Monsterid','ultimate-member'),
456
- 'wavatar' => __('Wavatar','ultimate-member'),
457
- 'retro' => __('Retro','ultimate-member'),
458
- 'blank' => __('Blank ( a transparent PNG image )','ultimate-member'),
459
  ),
460
- 'conditional' => array( 'use_gravatars', '=', 1 ),
461
  'size' => 'medium'
462
  ),
463
  array(
464
- 'id' => 'use_um_gravatar_default_image',
465
- 'type' => 'checkbox',
466
- 'label' => __( 'Use Default plugin avatar as Gravatar\'s Default avatar','ultimate-member' ),
467
- 'tooltip' => __('Do you want to use the plugin default avatar instead of the gravatar default photo (If the user did not upload a custom profile photo / avatar)','ultimate-member'),
468
- 'conditional' => array( 'use_um_gravatar_default_builtin_image', '=', 'default' ),
469
  ),
470
  array(
471
- 'id' => 'reset_require_strongpass',
472
- 'type' => 'checkbox',
473
- 'label' => __( 'Require a strong password? (when user resets password only)','ultimate-member' ),
474
- 'tooltip' => __('Enable or disable a strong password rules on password reset and change procedure','ultimate-member'),
475
  )
476
  )
477
  ),
@@ -544,17 +700,29 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
544
  'tooltip' => __( 'Password is required to save account data.', 'ultimate-member' ),
545
  ),
546
  array(
547
- 'id' => 'account_hide_in_directory',
548
- 'type' => 'checkbox',
549
- 'label' => __( 'Allow users to hide their profiles from directory','ultimate-member' ),
550
- 'tooltip' => __('Whether to allow users changing their profile visibility from member directory in account page.','ultimate-member'),
551
  ),
552
  array(
553
- 'id' => 'account_require_strongpass',
554
- 'type' => 'checkbox',
555
- 'label' => __( 'Require a strong password?','ultimate-member' ),
556
- 'tooltip' => __('Enable or disable a strong password rules on account page / change password tab','ultimate-member'),
557
- )
 
 
 
 
 
 
 
 
 
 
 
 
558
  )
559
  ),
560
  'uploads' => array(
@@ -1143,6 +1311,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
1143
  '2.0' => __( '2.0 version', 'ultimate-member' ),
1144
  ),
1145
  ),
 
1146
  array(
1147
  'id' => 'uninstall_on_delete',
1148
  'type' => 'checkbox',
@@ -1655,6 +1824,15 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
1655
  $this->need_change_permalinks = true;
1656
  }
1657
  }
 
 
 
 
 
 
 
 
 
1658
  }
1659
 
1660
 
@@ -1663,6 +1841,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
1663
  */
1664
  function on_settings_save() {
1665
  if ( ! empty( $_POST['um_options'] ) ) {
 
1666
  if ( ! empty( $_POST['um_options']['pages_settings'] ) ) {
1667
  $post_ids = new \WP_Query( array(
1668
  'post_type' => 'page',
@@ -1703,6 +1882,95 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
1703
  }
1704
  }
1705
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1706
  }
1707
  }
1708
  }
33
  var $need_change_permalinks;
34
 
35
 
36
+ var $gravatar_changed = false;
37
+
38
+
39
  /**
40
  * Admin_Settings constructor.
41
  */
83
  }
84
 
85
 
86
+
87
+ function same_page_update_ajax() {
88
+ UM()->admin()->check_ajax_nonce();
89
+
90
+ if ( empty( $_POST['cb_func'] ) ) {
91
+ wp_send_json_error( __( 'Wrong callback', 'ultimate-member' ) );
92
+ }
93
+
94
+ if ( 'um_usermeta_fields' == $_POST['cb_func'] ) {
95
+ //first install metatable
96
+ global $wpdb;
97
+
98
+ $metakeys = array();
99
+ foreach ( UM()->builtin()->all_user_fields as $all_user_field ) {
100
+ if ( $all_user_field['type'] == 'user_location' ) {
101
+ $metakeys[] = $all_user_field['metakey'] . '_lat';
102
+ $metakeys[] = $all_user_field['metakey'] . '_lng';
103
+ $metakeys[] = $all_user_field['metakey'] . '_url';
104
+ } else {
105
+ $metakeys[] = $all_user_field['metakey'];
106
+ }
107
+ }
108
+
109
+ if ( is_multisite() ) {
110
+
111
+ $sites = get_sites( array( 'fields' => 'ids' ) );
112
+ foreach ( $sites as $blog_id ) {
113
+ $metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities';
114
+ }
115
+
116
+ } else {
117
+ $blog_id = get_current_blog_id();
118
+ $metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities';
119
+ }
120
+
121
+ //member directory data
122
+ $metakeys[] = 'um_member_directory_data';
123
+ $metakeys[] = '_um_verified';
124
+ $metakeys[] = '_money_spent';
125
+ $metakeys[] = '_completed';
126
+ $metakeys[] = '_reviews_avg';
127
+
128
+ $sortby_custom_keys = $wpdb->get_col( "SELECT DISTINCT meta_value FROM {$wpdb->postmeta} WHERE meta_key='_um_sortby_custom'" );
129
+ if ( empty( $sortby_custom_keys ) ) {
130
+ $sortby_custom_keys = array();
131
+ }
132
+
133
+ $sortby_custom_keys2 = $wpdb->get_col( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key='_um_sorting_fields'" );
134
+ if ( ! empty( $sortby_custom_keys2 ) ) {
135
+ foreach ( $sortby_custom_keys2 as $custom_val ) {
136
+ $custom_val = maybe_unserialize( $custom_val );
137
+
138
+ foreach ( $custom_val as $sort_value ) {
139
+ if ( is_array( $sort_value ) ) {
140
+ $field_keys = array_keys( $sort_value );
141
+ $sortby_custom_keys[] = $field_keys[0];
142
+ }
143
+ }
144
+ }
145
+ }
146
+
147
+ if ( ! empty( $sortby_custom_keys ) ) {
148
+ $sortby_custom_keys = array_unique( $sortby_custom_keys );
149
+ $metakeys = array_merge( $metakeys, $sortby_custom_keys );
150
+ }
151
+
152
+ $skip_fields = UM()->builtin()->get_fields_without_metakey();
153
+ $skip_fields = array_merge( $skip_fields, UM()->member_directory()->core_search_fields );
154
+
155
+ $real_usermeta = $wpdb->get_col( "SELECT DISTINCT meta_key FROM {$wpdb->usermeta}" );
156
+ $real_usermeta = ! empty( $real_usermeta ) ? $real_usermeta : array();
157
+ $real_usermeta = array_merge( $real_usermeta, array( 'um_member_directory_data' ) );
158
+
159
+ if ( ! empty( $sortby_custom_keys ) ) {
160
+ $real_usermeta = array_merge( $real_usermeta, $sortby_custom_keys );
161
+ }
162
+
163
+ $wp_usermeta_option = array_intersect( array_diff( $metakeys, $skip_fields ), $real_usermeta );
164
+
165
+ update_option( 'um_usermeta_fields', array_values( $wp_usermeta_option ) );
166
+
167
+ update_option( 'um_member_directory_update_meta', time() );
168
+
169
+ UM()->options()->update( 'member_directory_own_table', true );
170
+
171
+ wp_send_json_success();
172
+ } elseif ( 'um_get_metadata' == $_POST['cb_func'] ) {
173
+ global $wpdb;
174
+
175
+ $wp_usermeta_option = get_option( 'um_usermeta_fields', array() );
176
+
177
+ $count = $wpdb->get_var(
178
+ "SELECT COUNT(*)
179
+ FROM {$wpdb->usermeta}
180
+ WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "')"
181
+ );
182
+
183
+ wp_send_json_success( array( 'count' => $count ) );
184
+ } elseif ( 'um_update_metadata_per_page' == $_POST['cb_func'] ) {
185
+
186
+ if ( empty( $_POST['page'] ) ) {
187
+ wp_send_json_error( __( 'Wrong data', 'ultimate-member' ) );
188
+ }
189
+
190
+ $per_page = 500;
191
+ $wp_usermeta_option = get_option( 'um_usermeta_fields', array() );
192
+
193
+ global $wpdb;
194
+ $metadata = $wpdb->get_results( $wpdb->prepare(
195
+ "SELECT *
196
+ FROM {$wpdb->usermeta}
197
+ WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "')
198
+ LIMIT %d, %d",
199
+ ( $_POST['page'] - 1 ) * $per_page,
200
+ $per_page
201
+ ), ARRAY_A );
202
+
203
+ $values = array();
204
+ foreach ( $metadata as $metarow ) {
205
+ $values[] = $wpdb->prepare('(%d, %s, %s)', $metarow['user_id'], $metarow['meta_key'], $metarow['meta_value'] );
206
+ }
207
+
208
+ if ( ! empty( $values ) ) {
209
+ $wpdb->query(
210
+ "INSERT INTO
211
+ {$wpdb->prefix}um_metadata(user_id, um_key, um_value)
212
+ VALUES " . implode( ',', $values ) );
213
+ }
214
+
215
+ $from = ( $_POST['page'] * $per_page ) - $per_page + 1;
216
+ $to = $_POST['page'] * $per_page;
217
+
218
+ wp_send_json_success( array( 'message' => sprintf( __( 'Metadata from %s to %s was upgraded successfully...', 'ultimate-member' ), $from, $to ) ) );
219
+ }
220
+ }
221
+
222
+
223
  /**
224
  *
225
  */
491
  'default' => UM()->options()->get_default( 'restricted_access_taxonomy_metabox' ),
492
  ) ) );
493
 
494
+ $latest_update = get_option( 'um_member_directory_update_meta', false );
495
+ $latest_truncate = get_option( 'um_member_directory_truncated', false );
496
+
497
+ $same_page_update = array(
498
+ 'id' => 'member_directory_own_table',
499
+ 'type' => 'same_page_update',
500
+ 'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ),
501
+ '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' ),
502
+ );
503
+
504
+ if ( empty( $latest_update ) || ( ! empty( $latest_truncate ) && $latest_truncate > $latest_update ) ) {
505
+ $same_page_update['upgrade_cb'] = 'sync_metatable';
506
+ $same_page_update['upgrade_description'] = '<p>' . __( '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' ) . '</p>
507
+ <p>' . __( 'After clicking the <strong>"Run"</strong> button, the update process will start. All information will be displayed in the field below.', 'ultimate-member' ) . '</p>
508
+ <p>' . __( 'If the update was successful, you will see a corresponding message. Otherwise, contact technical support if the update failed.', 'ultimate-member' ) . '</p>';
509
+ }
510
 
511
  /**
512
  * UM hook
555
  'placeholder' => __( 'Select...', 'ultimate-member' ),
556
  ),
557
  array(
558
+ 'id' => 'display_name',
559
+ 'type' => 'select',
560
  'size' => 'medium',
561
+ 'label' => __( 'User Display Name', 'ultimate-member' ),
562
+ 'tooltip' => __( 'This is the name that will be displayed for users on the front end of your site. Default setting uses first/last name as display name if it exists', 'ultimate-member' ),
563
+ 'options' => array(
564
+ 'default' => __( 'Default WP Display Name', 'ultimate-member' ),
565
+ 'nickname' => __( 'Nickname', 'ultimate-member' ),
566
+ 'username' => __( 'Username', 'ultimate-member' ),
567
+ 'full_name' => __( 'First name & last name', 'ultimate-member' ),
568
+ 'sur_name' => __( 'Last name & first name', 'ultimate-member' ),
569
+ 'initial_name' => __( 'First name & first initial of last name', 'ultimate-member' ),
570
+ 'initial_name_f' => __( 'First initial of first name & last name', 'ultimate-member' ),
571
+ 'first_name' => __( 'First name only', 'ultimate-member' ),
572
+ 'field' => __( 'Custom field(s)', 'ultimate-member' ),
573
  ),
574
+ 'placeholder' => __( 'Select...', 'ultimate-member' ),
575
  ),
576
  array(
577
+ 'id' => 'display_name_field',
578
+ 'type' => 'text',
579
+ 'label' => __( 'Display Name Custom Field(s)', 'ultimate-member' ),
580
+ 'tooltip' => __( 'Specify the custom field meta key or custom fields seperated by comma that you want to use to display users name on the frontend of your site', 'ultimate-member' ),
581
  'conditional' => array( 'display_name', '=', 'field' ),
582
  ),
583
  array(
584
+ 'id' => 'author_redirect',
585
+ 'type' => 'checkbox',
586
+ 'label' => __( 'Automatically redirect author page to their profile?', 'ultimate-member' ),
587
+ 'tooltip' => __( 'If enabled, author pages will automatically redirect to the user\'s profile page', 'ultimate-member' ),
588
  ),
589
  array(
590
+ 'id' => 'members_page',
591
+ 'type' => 'checkbox',
592
+ 'label' => __( 'Enable Members Directory', 'ultimate-member' ),
593
+ 'tooltip' => __( 'Control whether to enable or disable member directories on this site', 'ultimate-member' ),
594
  ),
595
  array(
596
+ 'id' => 'use_gravatars',
597
+ 'type' => 'checkbox',
598
+ 'label' => __( 'Use Gravatars?', 'ultimate-member' ),
599
+ 'tooltip' => __( 'Do you want to use gravatars instead of the default plugin profile photo (If the user did not upload a custom profile photo / avatar)', 'ultimate-member' ),
600
+ ),
601
+ array(
602
+ 'id' => 'use_um_gravatar_default_builtin_image',
603
+ 'type' => 'select',
604
+ 'label' => __( 'Use Gravatar builtin image', 'ultimate-member' ),
605
+ 'tooltip' => __( 'Gravatar has a number of built in options which you can also use as defaults', 'ultimate-member' ),
606
+ 'options' => array(
607
+ 'default' => __( 'Default', 'ultimate-member' ),
608
+ '404' => __( '404 ( File Not Found response )', 'ultimate-member' ),
609
+ 'mm' => __( 'Mystery Man', 'ultimate-member' ),
610
+ 'identicon' => __( 'Identicon', 'ultimate-member' ),
611
+ 'monsterid' => __( 'Monsterid', 'ultimate-member' ),
612
+ 'wavatar' => __( 'Wavatar', 'ultimate-member' ),
613
+ 'retro' => __( 'Retro', 'ultimate-member' ),
614
+ 'blank' => __( 'Blank ( a transparent PNG image )', 'ultimate-member' ),
615
  ),
616
+ 'conditional' => array( 'use_gravatars', '=', 1 ),
617
  'size' => 'medium'
618
  ),
619
  array(
620
+ 'id' => 'use_um_gravatar_default_image',
621
+ 'type' => 'checkbox',
622
+ 'label' => __( 'Use Default plugin avatar as Gravatar\'s Default avatar', 'ultimate-member' ),
623
+ 'tooltip' => __( 'Do you want to use the plugin default avatar instead of the gravatar default photo (If the user did not upload a custom profile photo / avatar)', 'ultimate-member' ),
624
+ 'conditional' => array( 'use_um_gravatar_default_builtin_image', '=', 'default' ),
625
  ),
626
  array(
627
+ 'id' => 'reset_require_strongpass',
628
+ 'type' => 'checkbox',
629
+ 'label' => __( 'Require a strong password? (when user resets password only)', 'ultimate-member' ),
630
+ 'tooltip' => __( 'Enable or disable a strong password rules on password reset and change procedure', 'ultimate-member' ),
631
  )
632
  )
633
  ),
700
  'tooltip' => __( 'Password is required to save account data.', 'ultimate-member' ),
701
  ),
702
  array(
703
+ 'id' => 'account_require_strongpass',
704
+ 'type' => 'checkbox',
705
+ 'label' => __( 'Require a strong password?','ultimate-member' ),
706
+ 'tooltip' => __( 'Enable or disable a strong password rules on account page / change password tab', 'ultimate-member' ),
707
  ),
708
  array(
709
+ 'id' => 'account_hide_in_directory',
710
+ 'type' => 'checkbox',
711
+ 'label' => __( 'Allow users to hide their profiles from directory', 'ultimate-member' ),
712
+ 'tooltip' => __( 'Whether to allow users changing their profile visibility from member directory in account page.', 'ultimate-member' ),
713
+ ),
714
+ array(
715
+ 'id' => 'account_hide_in_directory_default',
716
+ 'type' => 'select',
717
+ 'label' => __( 'Hide profiles from directory by default', 'ultimate-member' ),
718
+ 'tooltip' => __( 'Set default value for the "Hide my profile from directory" option', 'ultimate-member' ),
719
+ 'options' => array(
720
+ 'No' => __( 'No', 'ultimate-member' ),
721
+ 'Yes' => __( 'Yes', 'ultimate-member' )
722
+ ),
723
+ 'size' => 'small',
724
+ 'conditional' => array( 'account_hide_in_directory', '=', '1' ),
725
+ ),
726
  )
727
  ),
728
  'uploads' => array(
1311
  '2.0' => __( '2.0 version', 'ultimate-member' ),
1312
  ),
1313
  ),
1314
+ $same_page_update,
1315
  array(
1316
  'id' => 'uninstall_on_delete',
1317
  'type' => 'checkbox',
1824
  $this->need_change_permalinks = true;
1825
  }
1826
  }
1827
+
1828
+ // set variable if gravatar settings were changed
1829
+ // update for um_member_directory_data metakey
1830
+ if ( isset( $_POST['um_options']['use_gravatars'] ) ) {
1831
+ $use_gravatar = UM()->options()->get( 'use_gravatars' );
1832
+ if ( ( empty( $use_gravatar ) && ! empty( $_POST['um_options']['use_gravatars'] ) ) || ( ! empty( $use_gravatar ) && empty( $_POST['um_options']['use_gravatars'] ) ) ) {
1833
+ $this->gravatar_changed = true;
1834
+ }
1835
+ }
1836
  }
1837
 
1838
 
1841
  */
1842
  function on_settings_save() {
1843
  if ( ! empty( $_POST['um_options'] ) ) {
1844
+
1845
  if ( ! empty( $_POST['um_options']['pages_settings'] ) ) {
1846
  $post_ids = new \WP_Query( array(
1847
  'post_type' => 'page',
1882
  }
1883
  }
1884
  }
1885
+
1886
+
1887
+ // update for um_member_directory_data metakey
1888
+ if ( isset( $_POST['um_options']['use_gravatars'] ) ) {
1889
+ if ( $this->gravatar_changed ) {
1890
+ global $wpdb;
1891
+
1892
+ if ( ! empty( $_POST['um_options']['use_gravatars'] ) ) {
1893
+
1894
+ $results = $wpdb->get_col(
1895
+ "SELECT u.ID FROM {$wpdb->users} AS u
1896
+ LEFT JOIN {$wpdb->usermeta} AS um ON ( um.user_id = u.ID AND um.meta_key = 'synced_gravatar_hashed_id' )
1897
+ LEFT JOIN {$wpdb->usermeta} AS um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'um_member_directory_data' )
1898
+ WHERE um.meta_value != '' AND um.meta_value IS NOT NULL AND
1899
+ um2.meta_value LIKE '%s:13:\"profile_photo\";b:0;%'"
1900
+ );
1901
+
1902
+ } else {
1903
+
1904
+ $results = $wpdb->get_col(
1905
+ "SELECT u.ID FROM {$wpdb->users} AS u
1906
+ LEFT JOIN {$wpdb->usermeta} AS um ON ( um.user_id = u.ID AND ( um.meta_key = 'synced_profile_photo' || um.meta_key = 'profile_photo' ) )
1907
+ LEFT JOIN {$wpdb->usermeta} AS um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'um_member_directory_data' )
1908
+ WHERE ( um.meta_value IS NULL OR um.meta_value = '' ) AND
1909
+ um2.meta_value LIKE '%s:13:\"profile_photo\";b:1;%'"
1910
+ );
1911
+
1912
+ }
1913
+
1914
+ if ( ! empty( $results ) ) {
1915
+ foreach ( $results as $user_id ) {
1916
+ $md_data = get_user_meta( $user_id, 'um_member_directory_data', true );
1917
+ if ( ! empty( $md_data ) ) {
1918
+ $md_data['profile_photo'] = ! empty( $_POST['um_options']['use_gravatars'] );
1919
+ update_user_meta( $user_id, 'um_member_directory_data', $md_data );
1920
+ }
1921
+ }
1922
+ }
1923
+ }
1924
+ }
1925
+
1926
+ } elseif ( isset( $_POST['um_options']['member_directory_own_table'] ) ) {
1927
+ if ( empty( $_POST['um_options']['member_directory_own_table'] ) ) {
1928
+ global $wpdb;
1929
+
1930
+ $results = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}um_metadata LIMIT 1", ARRAY_A );
1931
+
1932
+ if ( ! empty( $results ) ) {
1933
+ $wpdb->query("TRUNCATE TABLE {$wpdb->prefix}um_metadata" );
1934
+ }
1935
+
1936
+ update_option( 'um_member_directory_truncated', time() );
1937
+ }
1938
+ } elseif ( isset( $_POST['um_options']['account_hide_in_directory_default'] ) ) {
1939
+
1940
+ global $wpdb;
1941
+
1942
+ if ( $_POST['um_options']['account_hide_in_directory_default'] == 'No' ) {
1943
+
1944
+ $results = $wpdb->get_col(
1945
+ "SELECT u.ID FROM {$wpdb->users} AS u
1946
+ LEFT JOIN {$wpdb->usermeta} AS um ON ( um.user_id = u.ID AND um.meta_key = 'hide_in_members' )
1947
+ LEFT JOIN {$wpdb->usermeta} AS um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'um_member_directory_data' )
1948
+ WHERE um.meta_value IS NULL AND
1949
+ um2.meta_value LIKE '%s:15:\"hide_in_members\";b:1;%'"
1950
+ );
1951
+
1952
+ } else {
1953
+
1954
+ $results = $wpdb->get_col(
1955
+ "SELECT u.ID FROM {$wpdb->users} AS u
1956
+ LEFT JOIN {$wpdb->usermeta} AS um ON ( um.user_id = u.ID AND um.meta_key = 'hide_in_members' )
1957
+ LEFT JOIN {$wpdb->usermeta} AS um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'um_member_directory_data' )
1958
+ WHERE um.meta_value IS NULL AND
1959
+ um2.meta_value LIKE '%s:15:\"hide_in_members\";b:0;%'"
1960
+ );
1961
+
1962
+ }
1963
+
1964
+ if ( ! empty( $results ) ) {
1965
+ foreach ( $results as $user_id ) {
1966
+ $md_data = get_user_meta( $user_id, 'um_member_directory_data', true );
1967
+ if ( ! empty( $md_data ) ) {
1968
+ $md_data['hide_in_members'] = ( $_POST['um_options']['account_hide_in_directory_default'] == 'No' ) ? false : true;
1969
+ update_user_meta( $user_id, 'um_member_directory_data', $md_data );
1970
+ }
1971
+ }
1972
+ }
1973
+
1974
  }
1975
  }
1976
  }
includes/admin/core/class-admin-upgrade.php CHANGED
@@ -246,15 +246,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) {
246
 
247
  <div class="wrap">
248
  <h2><?php printf( __( '%s - Upgrade Process', 'ultimate-member' ), ultimatemember_plugin_name ) ?></h2>
249
- <p><?php printf( __( 'You have installed %s version. Your latest DB version is %s. Before the click to "Run" button make sure that did the following:', 'ultimate-member' ), ultimatemember_version, $um_last_version_upgrade ) ?></p>
250
- <ul style="list-style: inside;">
251
- <li><?php _e( 'Create full site\'s backup.', 'ultimate-member' ) ?></li>
252
- <li><?php _e( 'Set maintenance mode (if you need)', 'ultimate-member' ) ?></li>
253
- <li><?php _e( 'You have nice Internet connection', 'ultimate-member' ) ?></li>
254
- </ul>
255
- <p><?php _e( 'After the click to "Run" button, the update process will be started. All information will be displayed in "Upgrade Log" field.', 'ultimate-member' ); ?></p>
256
  <p><?php _e( 'If the update was successful, you will see a corresponding message. Otherwise, contact technical support if the update failed.', 'ultimate-member' ); ?></p>
257
- <h4><?php printf( __( 'Upgrade Log' ), ultimatemember_plugin_name ) ?></h4>
258
  <div id="upgrade_log" style="width: 100%;height:300px; overflow: auto;border: 1px solid #a1a1a1;margin: 0 0 10px 0;"></div>
259
  <div>
260
  <input type="button" id="run_upgrade" class="button button-primary" value="<?php esc_attr_e( 'Run', 'ultimate-member' ) ?>"/>
246
 
247
  <div class="wrap">
248
  <h2><?php printf( __( '%s - Upgrade Process', 'ultimate-member' ), ultimatemember_plugin_name ) ?></h2>
249
+ <p><?php printf( __( 'You have installed <strong>%s</strong> version. Your latest DB version is <strong>%s</strong>. 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 ) ?></p>
250
+ <p><?php _e( 'After clicking the <strong>"Run"</strong> button, the update process will start. All information will be displayed in the <strong>"Upgrade Log"</strong> field.', 'ultimate-member' ); ?></p>
 
 
 
 
 
251
  <p><?php _e( 'If the update was successful, you will see a corresponding message. Otherwise, contact technical support if the update failed.', 'ultimate-member' ); ?></p>
252
+ <h4><?php _e( 'Upgrade Log', 'ultimate-member' ) ?></h4>
253
  <div id="upgrade_log" style="width: 100%;height:300px; overflow: auto;border: 1px solid #a1a1a1;margin: 0 0 10px 0;"></div>
254
  <div>
255
  <input type="button" id="run_upgrade" class="button button-primary" value="<?php esc_attr_e( 'Run', 'ultimate-member' ) ?>"/>
includes/admin/core/packages/2.1.3-beta3/functions.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit;
2
+
3
+
4
+ function um_upgrade_users_count213beta3() {
5
+ UM()->admin()->check_ajax_nonce();
6
+
7
+ um_maybe_unset_time_limit();
8
+
9
+ global $wpdb;
10
+
11
+ $count = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->users}" );
12
+
13
+ wp_send_json_success( array( 'count' => $count ) );
14
+ }
15
+
16
+
17
+ function um_upgrade_metadata_per_user213beta3() {
18
+ UM()->admin()->check_ajax_nonce();
19
+
20
+ um_maybe_unset_time_limit();
21
+
22
+
23
+ if ( empty( $_POST['page'] ) ) {
24
+ wp_send_json_error( __( 'Wrong data', 'ultimate-member' ) );
25
+ }
26
+
27
+ $per_page = 50;
28
+
29
+ global $wpdb;
30
+
31
+ $min_max = $wpdb->get_row( $wpdb->prepare(
32
+ "SELECT MIN(ID) AS MinID, MAX(ID) AS MaxID
33
+ FROM (
34
+ SELECT u.ID
35
+ FROM {$wpdb->users} as u
36
+ ORDER BY u.ID
37
+ LIMIT %d, %d
38
+ ) as dt",
39
+ ( $_POST['page'] - 1 ) * $per_page,
40
+ $per_page
41
+ ), ARRAY_A );
42
+
43
+ $metadata = $wpdb->get_results( $wpdb->prepare(
44
+ "SELECT u.ID as user_id,
45
+ um.meta_key as meta_key,
46
+ um.meta_value as meta_value
47
+ FROM {$wpdb->users} u
48
+ LEFT JOIN {$wpdb->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' ) )
49
+ WHERE u.ID >= %d AND
50
+ u.ID <= %d",
51
+ $min_max['MinID'],
52
+ $min_max['MaxID']
53
+ ), ARRAY_A );
54
+
55
+ $users_map = array();
56
+ foreach ( $metadata as $metadatarow ) {
57
+ if ( ! isset( $users_map[ $metadatarow['user_id'] ] ) ) {
58
+ $users_map[ $metadatarow['user_id'] ] = array(
59
+ 'account_status' => 'approved',
60
+ 'hide_in_members' => UM()->member_directory()->get_hide_in_members_default(),
61
+ 'profile_photo' => false,
62
+ 'cover_photo' => false,
63
+ 'verified' => false,
64
+ );
65
+ }
66
+
67
+ switch ( $metadatarow['meta_key'] ) {
68
+ case 'account_status':
69
+ $users_map[ $metadatarow['user_id'] ]['account_status'] = $metadatarow['meta_value'];
70
+ break;
71
+ case 'hide_in_members':
72
+
73
+ $hide_in_members = UM()->member_directory()->get_hide_in_members_default();
74
+ if ( ! empty( $metadatarow['meta_value'] ) ) {
75
+ if ( $metadatarow['meta_value'] == 'Yes' || $metadatarow['meta_value'] == __( 'Yes', 'ultimate-member' ) ||
76
+ ( is_array( $metadatarow['meta_value'] ) && array_intersect( array( 'Yes', __( 'Yes', 'ultimate-member' ) ), $metadatarow['meta_value'] ) ) ) {
77
+ $hide_in_members = true;
78
+ } else {
79
+ $hide_in_members = false;
80
+ }
81
+ }
82
+
83
+ $users_map[ $metadatarow['user_id'] ]['hide_in_members'] = $hide_in_members;
84
+
85
+ break;
86
+ case 'synced_gravatar_hashed_id':
87
+ if ( UM()->options()->get( 'use_gravatars' ) ) {
88
+ if ( empty( $users_map[ $metadatarow['user_id'] ]['profile_photo'] ) ) {
89
+ $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] );
90
+ }
91
+ }
92
+
93
+ break;
94
+ case 'synced_profile_photo':
95
+ case 'profile_photo':
96
+ if ( empty( $users_map[ $metadatarow['user_id'] ]['profile_photo'] ) ) {
97
+ $users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] );
98
+ }
99
+ break;
100
+ case 'cover_photo':
101
+ $users_map[ $metadatarow['user_id'] ]['cover_photo'] = ! empty( $metadatarow['meta_value'] );
102
+ break;
103
+ case '_um_verified':
104
+ $users_map[ $metadatarow['user_id'] ]['verified'] = $metadatarow['meta_value'] == 'verified' ? true : false;
105
+ break;
106
+ }
107
+ }
108
+
109
+ if ( ! empty( $users_map ) ) {
110
+ foreach ( $users_map as $user_id => $metavalue ) {
111
+ update_user_meta( $user_id, 'um_member_directory_data', $metavalue );
112
+ }
113
+ }
114
+
115
+ $from = ( $_POST['page'] * $per_page ) - $per_page + 1;
116
+ $to = $_POST['page'] * $per_page;
117
+
118
+ wp_send_json_success( array( 'message' => sprintf( __( 'Metadata from %s to %s users were upgraded successfully...', 'ultimate-member' ), $from, $to ) ) );
119
+ }
120
+
121
+
122
+ function um_upgrade_metatable213beta3() {
123
+ UM()->admin()->check_ajax_nonce();
124
+
125
+ um_maybe_unset_time_limit();
126
+
127
+ global $wpdb;
128
+
129
+ $charset_collate = $wpdb->get_charset_collate();
130
+
131
+ $sql = "CREATE TABLE {$wpdb->prefix}um_metadata (
132
+ umeta_id bigint(20) unsigned NOT NULL auto_increment,
133
+ user_id bigint(20) unsigned NOT NULL default '0',
134
+ um_key varchar(255) default NULL,
135
+ um_value longtext default NULL,
136
+ PRIMARY KEY (umeta_id),
137
+ KEY user_id_indx (user_id),
138
+ KEY meta_key_indx (um_key),
139
+ KEY meta_value_indx (um_value(191))
140
+ ) $charset_collate;";
141
+
142
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
143
+ dbDelta( $sql );
144
+
145
+ update_option( 'um_last_version_upgrade', '2.1.3-beta3' );
146
+ wp_send_json_success( array( 'message' => __( 'Usermeta table was upgraded successfully', 'ultimate-member' ) ) );
147
+ }
includes/admin/core/packages/2.1.3-beta3/hooks.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit;
2
+
3
+ return array(
4
+ 'users_count213beta3' => 'users_count213beta3',
5
+ 'metadata_per_user213beta3' => 'metadata_per_user213beta3',
6
+ 'metatable213beta3' => 'metatable213beta3',
7
+ );
includes/admin/core/packages/2.1.3-beta3/init.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
2
+
3
+
4
+ <script type="text/javascript">
5
+ jQuery( document ).ready( function() {
6
+ var users_pages;
7
+ var current_page = 1;
8
+ var users_per_page = 50;
9
+
10
+ um_add_upgrade_log( '<?php echo esc_js( __( 'Upgrade user metadata...', 'ultimate-member' ) ) ?>' );
11
+
12
+ jQuery.ajax({
13
+ url: wp.ajax.settings.url,
14
+ type: 'POST',
15
+ dataType: 'json',
16
+ data: {
17
+ action: 'um_users_count213beta3',
18
+ nonce: um_admin_scripts.nonce
19
+ },
20
+ success: function( response ) {
21
+ if ( typeof response.data.count != 'undefined' ) {
22
+ um_add_upgrade_log( '<?php echo esc_js( __( 'There are ', 'ultimate-member' ) ) ?>' + response.data.count + '<?php echo esc_js( __( ' users...', 'ultimate-member' ) ) ?>' );
23
+ um_add_upgrade_log( '<?php echo esc_js( __( 'Start metadata upgrading...', 'ultimate-member' ) ) ?>' );
24
+
25
+ users_pages = Math.ceil( response.data.count / users_per_page );
26
+
27
+ um_update_metadata_per_user213beta3();
28
+ } else {
29
+ um_wrong_ajax();
30
+ }
31
+ },
32
+ error: function() {
33
+ um_something_wrong();
34
+ }
35
+ });
36
+
37
+ function um_update_metadata_per_user213beta3() {
38
+ if ( current_page <= users_pages ) {
39
+ jQuery.ajax({
40
+ url: wp.ajax.settings.url,
41
+ type: 'POST',
42
+ dataType: 'json',
43
+ data: {
44
+ action: 'um_metadata_per_user213beta3',
45
+ page: current_page,
46
+ nonce: um_admin_scripts.nonce
47
+ },
48
+ success: function( response ) {
49
+ if ( typeof response.data != 'undefined' ) {
50
+ um_add_upgrade_log( response.data.message );
51
+ current_page++;
52
+ um_update_metadata_per_user213beta3();
53
+ } else {
54
+ um_wrong_ajax();
55
+ }
56
+ },
57
+ error: function() {
58
+ um_something_wrong();
59
+ }
60
+ });
61
+ } else {
62
+ um_metatable213beta3();
63
+ }
64
+ }
65
+
66
+
67
+ //clear users cache
68
+ function um_metatable213beta3() {
69
+ um_add_upgrade_log( '<?php echo esc_js( __( 'Create additional metadata table...', 'ultimate-member' ) ) ?>' );
70
+ jQuery.ajax({
71
+ url: wp.ajax.settings.url,
72
+ type: 'POST',
73
+ dataType: 'json',
74
+ data: {
75
+ action: 'um_metatable213beta3',
76
+ nonce: um_admin_scripts.nonce
77
+ },
78
+ success: function( response ) {
79
+ if ( typeof response.data != 'undefined' ) {
80
+ um_add_upgrade_log( response.data.message );
81
+ //switch to the next package
82
+ um_run_upgrade();
83
+ } else {
84
+ um_wrong_ajax();
85
+ }
86
+ },
87
+ error: function() {
88
+ um_something_wrong();
89
+ }
90
+ });
91
+ }
92
+ });
93
+ </script>
includes/admin/templates/directory/search.php CHANGED
@@ -12,36 +12,6 @@ global $post_id; ?>
12
  $_um_roles_filter_value = get_post_meta( $post_id, '_um_roles_can_filter', true );
13
  $_um_roles_filter_value = empty( $_um_roles_filter_value ) ? array() : $_um_roles_filter_value;
14
 
15
- /**
16
- * UM hook
17
- *
18
- * @type filter
19
- * @title um_admin_custom_search_filters
20
- * @description Custom Search Filters
21
- * @input_vars
22
- * [{"var":"$custom_search","type":"array","desc":"Filters"}]
23
- * @change_log
24
- * ["Since: 2.0"]
25
- * @usage
26
- * <?php add_filter( 'um_admin_custom_search_filters', 'function_name', 10, 1 ); ?>
27
- * @example
28
- * <?php
29
- * add_filter( 'um_admin_custom_search_filters', 'my_admin_custom_search_filters', 10, 1 );
30
- * function my_upload_file_name( $custom_search ) {
31
- * // your code here
32
- * return $custom_search;
33
- * }
34
- * ?>
35
- */
36
- $custom_search = apply_filters( 'um_admin_custom_search_filters', array() );
37
- $searchable_fields = UM()->builtin()->all_user_fields( 'date,time,url' );
38
- $searchable_fields = $searchable_fields + $custom_search;
39
- $user_fields = array();
40
- foreach ( $searchable_fields as $key => $arr ) {
41
- $user_fields[ $key ] = isset( $arr['title'] ) ? $arr['title'] : '';
42
- }
43
-
44
- //$post_id = get_the_ID();
45
  $_um_search_fields = get_post_meta( $post_id, '_um_search_fields', true );
46
  $_um_search_filters = get_post_meta( $post_id, '_um_search_filters', true );
47
 
12
  $_um_roles_filter_value = get_post_meta( $post_id, '_um_roles_can_filter', true );
13
  $_um_roles_filter_value = empty( $_um_roles_filter_value ) ? array() : $_um_roles_filter_value;
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  $_um_search_fields = get_post_meta( $post_id, '_um_search_fields', true );
16
  $_um_search_filters = get_post_meta( $post_id, '_um_search_filters', true );
17
 
includes/admin/templates/directory/sorting.php CHANGED
@@ -25,6 +25,14 @@ $_um_sorting_fields = empty( $_um_sorting_fields ) ? array() : $_um_sorting_fiel
25
  'value' => UM()->query()->get_meta_value( '_um_sortby_custom', null, 'na' ),
26
  'conditional' => array( '_um_sortby', '=', 'other' )
27
  ),
 
 
 
 
 
 
 
 
28
  array(
29
  'id' => '_um_enable_sorting',
30
  'type' => 'checkbox',
@@ -34,13 +42,13 @@ $_um_sorting_fields = empty( $_um_sorting_fields ) ? array() : $_um_sorting_fiel
34
  ),
35
  array(
36
  'id' => '_um_sorting_fields',
37
- 'type' => 'multi_selects',
38
  'label' => __( 'Choose field(s) to enable in sorting', 'ultimate-member' ),
39
  'value' => $_um_sorting_fields,
40
- 'options' => UM()->member_directory()->sort_fields,
41
  'add_text' => __( 'Add New Field', 'ultimate-member' ),
42
  'show_default_number' => 1,
43
- 'conditional' => array( '_um_enable_sorting', '=', 1 )
44
  )
45
  );
46
 
25
  'value' => UM()->query()->get_meta_value( '_um_sortby_custom', null, 'na' ),
26
  'conditional' => array( '_um_sortby', '=', 'other' )
27
  ),
28
+ array(
29
+ 'id' => '_um_sortby_custom_label',
30
+ 'type' => 'text',
31
+ 'label' => __( 'Label of custom sort', 'ultimate-member' ),
32
+ 'tooltip' => __( 'To sort by a custom field, enter the label of sorting here', 'ultimate-member' ),
33
+ 'value' => UM()->query()->get_meta_value( '_um_sortby_custom_label', null, 'na' ),
34
+ 'conditional' => array( '_um_sortby', '=', 'other' )
35
+ ),
36
  array(
37
  'id' => '_um_enable_sorting',
38
  'type' => 'checkbox',
42
  ),
43
  array(
44
  'id' => '_um_sorting_fields',
45
+ 'type' => 'md_sorting_fields',
46
  'label' => __( 'Choose field(s) to enable in sorting', 'ultimate-member' ),
47
  'value' => $_um_sorting_fields,
48
+ 'options' => array_merge( UM()->member_directory()->sort_fields, array( 'other' => __( 'Other (Custom Field)', 'ultimate-member' ) ) ),
49
  'add_text' => __( 'Add New Field', 'ultimate-member' ),
50
  'show_default_number' => 1,
51
+ 'conditional' => array( '_um_enable_sorting', '=', 1 ),
52
  )
53
  );
54
 
includes/admin/templates/extensions.php CHANGED
@@ -128,6 +128,12 @@ $premium['unsplash'] = array(
128
  'desc' => 'Allow users to select a profile cover photo from <a href="https://unsplash.com/" target="_blank">Unsplash</a> from their profile',
129
  );
130
 
 
 
 
 
 
 
131
  $free['forumwp'] = array(
132
  'url' => 'https://ultimatemember.com/extensions/forumwp/',
133
  'name' => 'ForumWP',
128
  'desc' => 'Allow users to select a profile cover photo from <a href="https://unsplash.com/" target="_blank">Unsplash</a> from their profile',
129
  );
130
 
131
+ $premium['profile-tabs'] = array(
132
+ 'url' => 'https://ultimatemember.com/extensions/profile-tabs/',
133
+ 'name' => 'Profile Tabs',
134
+ 'desc' => 'Allow users to add custom tabs to profiles',
135
+ );
136
+
137
  $free['forumwp'] = array(
138
  'url' => 'https://ultimatemember.com/extensions/forumwp/',
139
  'name' => 'ForumWP',
includes/class-config.php CHANGED
@@ -150,6 +150,7 @@ if ( ! class_exists( 'um\Config' ) ) {
150
 
151
  '_um_sortby' => 'user_registered_desc',
152
  '_um_sortby_custom' => '',
 
153
  '_um_enable_sorting' => 0,
154
  '_um_sorting_fields' => array(),
155
 
@@ -531,6 +532,7 @@ if ( ! class_exists( 'um\Config' ) ) {
531
  'account_email' => 1,
532
  'account_general_password' => 0,
533
  'account_hide_in_directory' => 1,
 
534
  'account_require_strongpass' => 0,
535
  'photo_thumb_sizes' => array( 40, 80, 190 ),
536
  'cover_thumb_sizes' => array( 300, 600 ),
@@ -569,6 +571,7 @@ if ( ! class_exists( 'um\Config' ) ) {
569
  'custom_roles_increment' => 1,
570
  'um_profile_object_cache_stop' => 0,
571
  'rest_api_version' => '2.0',
 
572
  'profile_show_html_bio' => 0,
573
  );
574
 
150
 
151
  '_um_sortby' => 'user_registered_desc',
152
  '_um_sortby_custom' => '',
153
+ '_um_sortby_custom_label' => '',
154
  '_um_enable_sorting' => 0,
155
  '_um_sorting_fields' => array(),
156
 
532
  'account_email' => 1,
533
  'account_general_password' => 0,
534
  'account_hide_in_directory' => 1,
535
+ 'account_hide_in_directory_default' => 'No',
536
  'account_require_strongpass' => 0,
537
  'photo_thumb_sizes' => array( 40, 80, 190 ),
538
  'cover_thumb_sizes' => array( 300, 600 ),
571
  'custom_roles_increment' => 1,
572
  'um_profile_object_cache_stop' => 0,
573
  'rest_api_version' => '2.0',
574
+ 'member_directory_own_table' => 0,
575
  'profile_show_html_bio' => 0,
576
  );
577
 
includes/class-dependencies.php CHANGED
@@ -47,6 +47,7 @@ if ( ! class_exists( 'um\Dependencies' ) ) {
47
  'online' => '2.1.1',
48
  'private-content' => '2.0.5',
49
  'profile-completeness' => '2.1.2',
 
50
  'recaptcha' => '2.1.2',
51
  'reviews' => '2.1.5',
52
  'social-activity' => '2.2.0',
@@ -64,7 +65,7 @@ if ( ! class_exists( 'um\Dependencies' ) ) {
64
 
65
  /*rc*/
66
  'user-notes' => '2.0',
67
- 'profile-tabs' => '1.6',
68
 
69
  /*beta*/
70
  'frontend-posting' => '1.0',
47
  'online' => '2.1.1',
48
  'private-content' => '2.0.5',
49
  'profile-completeness' => '2.1.2',
50
+ 'profile-tabs' => '1.0.0',
51
  'recaptcha' => '2.1.2',
52
  'reviews' => '2.1.5',
53
  'social-activity' => '2.2.0',
65
 
66
  /*rc*/
67
  'user-notes' => '2.0',
68
+
69
 
70
  /*beta*/
71
  'frontend-posting' => '1.0',
includes/class-init.php CHANGED
@@ -37,6 +37,7 @@ if ( ! class_exists( 'UM' ) ) {
37
  * @method UM_User_Bookmarks User_Bookmarks()
38
  * @method UM_Unsplash Unsplash()
39
  * @method UM_ForumWP ForumWP()
 
40
  */
41
  final class UM extends UM_Functions {
42
 
@@ -581,7 +582,14 @@ if ( ! class_exists( 'UM' ) ) {
581
  */
582
  function member_directory() {
583
  if ( empty( $this->classes['member_directory'] ) ) {
584
- $this->classes['member_directory'] = new um\core\Member_Directory();
 
 
 
 
 
 
 
585
  }
586
  return $this->classes['member_directory'];
587
  }
@@ -1456,8 +1464,6 @@ if ( ! class_exists( 'UM' ) ) {
1456
  require_once 'core/um-filters-avatars.php';
1457
  require_once 'core/um-filters-user.php';
1458
 
1459
- //require_once 'core/um-filters-members.php';
1460
-
1461
  require_once 'core/um-filters-profile.php';
1462
  require_once 'core/um-filters-account.php';
1463
  require_once 'core/um-filters-misc.php';
37
  * @method UM_User_Bookmarks User_Bookmarks()
38
  * @method UM_Unsplash Unsplash()
39
  * @method UM_ForumWP ForumWP()
40
+ * @method UM_Profile_Tabs Profile_Tabs()
41
  */
42
  final class UM extends UM_Functions {
43
 
582
  */
583
  function member_directory() {
584
  if ( empty( $this->classes['member_directory'] ) ) {
585
+
586
+ $search_in_table = $this->options()->get( 'member_directory_own_table' );
587
+
588
+ if ( ! empty( $search_in_table ) ) {
589
+ $this->classes['member_directory'] = new um\core\Member_Directory_Meta();
590
+ } else {
591
+ $this->classes['member_directory'] = new um\core\Member_Directory();
592
+ }
593
  }
594
  return $this->classes['member_directory'];
595
  }
1464
  require_once 'core/um-filters-avatars.php';
1465
  require_once 'core/um-filters-user.php';
1466
 
 
 
1467
  require_once 'core/um-filters-profile.php';
1468
  require_once 'core/um-filters-account.php';
1469
  require_once 'core/um-filters-misc.php';
includes/core/class-builtin.php CHANGED
@@ -1123,18 +1123,21 @@ if ( ! class_exists( 'um\core\Builtin' ) ) {
1123
  ),
1124
 
1125
  'hide_in_members' => array(
1126
- 'title' => __('Hide my profile from directory','ultimate-member'),
1127
- 'metakey' => 'hide_in_members',
1128
- 'type' => 'radio',
1129
- 'label' => __('Hide my profile from directory','ultimate-member'),
1130
- 'help' => __('Here you can hide yourself from appearing in public directory','ultimate-member'),
1131
- 'required' => 0,
1132
- 'public' => 1,
1133
- 'editable' => 1,
1134
- 'default' => 'No',
1135
- 'options' => array( 'No' => __('No','ultimate-member'), 'Yes' => __('Yes','ultimate-member') ),
1136
- 'account_only' => true,
1137
- 'required_opt' => array( 'members_page', 1 ),
 
 
 
1138
  ),
1139
 
1140
  'delete_account' => array(
1123
  ),
1124
 
1125
  'hide_in_members' => array(
1126
+ 'title' => __( 'Hide my profile from directory', 'ultimate-member' ),
1127
+ 'metakey' => 'hide_in_members',
1128
+ 'type' => 'radio',
1129
+ 'label' => __( 'Hide my profile from directory', 'ultimate-member' ),
1130
+ 'help' => __( 'Here you can hide yourself from appearing in public directory', 'ultimate-member' ),
1131
+ 'required' => 0,
1132
+ 'public' => 1,
1133
+ 'editable' => 1,
1134
+ 'default' => UM()->member_directory()->get_hide_in_members_default() ? 'Yes' : 'No',
1135
+ 'options' => array(
1136
+ 'No' => __( 'No', 'ultimate-member' ),
1137
+ 'Yes' => __( 'Yes', 'ultimate-member' ),
1138
+ ),
1139
+ 'account_only' => true,
1140
+ 'required_opt' => array( 'members_page', 1 ),
1141
  ),
1142
 
1143
  'delete_account' => array(
includes/core/class-date-time.php CHANGED
@@ -79,22 +79,22 @@ if ( ! class_exists( 'um\core\Date_Time' ) ) {
79
  }
80
 
81
  if ( $days == 1 ) {
82
- $since = sprintf( __( 'Yesterday at %s', 'ultimate-member' ), date_i18n( 'g:ia', $from ) );
83
  } else {
84
- $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) );
85
  }
86
 
87
  } elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
88
 
89
- $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) );
90
 
91
  } elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) {
92
 
93
- $since = sprintf( __( '%s at %s','ultimate-member'), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) );
94
 
95
  } elseif ( $diff >= YEAR_IN_SECONDS ) {
96
 
97
- $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d, Y', $from ), date_i18n( 'g:ia', $from ) );
98
 
99
  }
100
 
79
  }
80
 
81
  if ( $days == 1 ) {
82
+ $since = sprintf( __( 'Yesterday at %s', 'ultimate-member' ), date_i18n( get_option( 'time_format' ), $from ) );
83
  } else {
84
+ $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) );
85
  }
86
 
87
  } elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
88
 
89
+ $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) );
90
 
91
  } elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) {
92
 
93
+ $since = sprintf( __( '%s at %s','ultimate-member'), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) );
94
 
95
  } elseif ( $diff >= YEAR_IN_SECONDS ) {
96
 
97
+ $since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( get_option( 'date_format' ), $from ), date_i18n( get_option( 'time_format' ), $from ) );
98
 
99
  }
100
 
includes/core/class-enqueue.php CHANGED
@@ -43,6 +43,22 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) {
43
  $this->js_baseurl = um_url . 'assets/js/';
44
  $this->css_baseurl = um_url . 'assets/css/';
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /**
47
  * UM hook
48
  *
@@ -63,8 +79,7 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) {
63
  * }
64
  * ?>
65
  */
66
- $priority = apply_filters( 'um_core_enqueue_priority', 100 );
67
- add_action( 'wp_enqueue_scripts', array( &$this, 'wp_enqueue_scripts' ), $priority );
68
  }
69
 
70
 
@@ -80,7 +95,7 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) {
80
  wp_dequeue_script( 'select2');
81
  wp_deregister_script('select2');
82
  }
83
- wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full.min.js', array( 'jquery', 'jquery-masonry' ), ultimatemember_version, true );
84
 
85
  wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true );
86
 
@@ -141,7 +156,7 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) {
141
 
142
  wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true );
143
 
144
- wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry' ), ultimatemember_version, true );
145
  wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), ultimatemember_version, true );
146
  wp_register_script('um_account', $this->js_baseurl . 'um-account' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true );
147
 
43
  $this->js_baseurl = um_url . 'assets/js/';
44
  $this->css_baseurl = um_url . 'assets/css/';
45
 
46
+ add_action( 'init', array( &$this, 'scripts_enqueue_priority' ) );
47
+ }
48
+
49
+
50
+ /**
51
+ *
52
+ */
53
+ function scripts_enqueue_priority() {
54
+ add_action( 'wp_enqueue_scripts', array( &$this, 'wp_enqueue_scripts' ), $this->get_priority() );
55
+ }
56
+
57
+
58
+ /**
59
+ * @return int
60
+ */
61
+ function get_priority() {
62
  /**
63
  * UM hook
64
  *
79
  * }
80
  * ?>
81
  */
82
+ return apply_filters( 'um_core_enqueue_priority', 100 );
 
83
  }
84
 
85
 
95
  wp_dequeue_script( 'select2');
96
  wp_deregister_script('select2');
97
  }
98
+ wp_register_script( 'select2', $this->js_baseurl . 'select2/select2.full.min.js', array( 'jquery' ), ultimatemember_version, true );
99
 
100
  wp_register_script( 'um_scrollbar', $this->js_baseurl . 'simplebar' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true );
101
 
156
 
157
  wp_register_script('um_dropdown', $this->js_baseurl . 'dropdown' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true );
158
 
159
+ wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'jquery-ui-slider', 'um_dropdown', 'wp-hooks', 'jquery-masonry', 'um_scripts' ), ultimatemember_version, true );
160
  wp_register_script('um_profile', $this->js_baseurl . 'um-profile' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'wp-i18n' ), ultimatemember_version, true );
161
  wp_register_script('um_account', $this->js_baseurl . 'um-account' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true );
162
 
includes/core/class-fields.php CHANGED
@@ -21,6 +21,12 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
21
  var $set_mode = '';
22
 
23
 
 
 
 
 
 
 
24
  /**
25
  * Fields constructor.
26
  */
@@ -144,6 +150,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
144
  unset( $fields[ $id ]['in_group'] );
145
  unset( $fields[ $id ]['position'] );
146
 
 
 
147
  update_option( 'um_fields', $fields );
148
  }
149
 
@@ -242,6 +250,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
242
  $fields = UM()->builtin()->saved_fields;
243
  if ( isset( $fields[ $id ] ) ) {
244
  unset( $fields[ $id ] );
 
 
 
245
  update_option( 'um_fields', $fields );
246
  }
247
  }
@@ -348,6 +359,9 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
348
  unset( $all_fields[ $new_metakey ]['in_group'] );
349
  unset( $all_fields[ $new_metakey ]['position'] );
350
 
 
 
 
351
  UM()->query()->update_attr( 'custom_fields', $form_id, $fields );
352
  update_option( 'um_fields', $all_fields );
353
  }
@@ -2486,7 +2500,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2486
 
2487
  /* Single Image Upload */
2488
  case 'image':
2489
- $output .= '<div ' . $this->get_atts( $key, $classes, $conditional, $data ) . '>';
2490
  if ( in_array( $key, array( 'profile_photo', 'cover_photo' ) ) ) {
2491
  $field_value = '';
2492
  } else {
@@ -2498,7 +2512,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2498
  }
2499
  $modal_label = ( isset( $data['label'] ) ) ? $data['label'] : __( 'Upload Photo', 'ultimate-member' );
2500
  $output .= '<div class="um-field-area" style="text-align: center;">';
2501
- if ( $field_value ) {
 
2502
  if ( ! in_array( $key, array( 'profile_photo', 'cover_photo' ) ) ) {
2503
  if ( isset( $this->set_mode ) && 'register' == $this->set_mode ) {
2504
  $image_info = get_transient("um_{$field_value}");
@@ -2506,7 +2521,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2506
  $image_info = um_user( $data['metakey']."_metadata" );
2507
  }
2508
 
2509
- if ( isset( $this->set_mode ) && $this->set_mode == 'register' ) {
2510
  $imgValue = UM()->uploader()->get_core_temp_url() . "/" . $this->field_value( $key, $default, $data );
2511
  } else {
2512
  $imgValue = UM()->files()->get_download_link( $this->set_id, $key, um_user( 'ID' ) );
@@ -2549,7 +2564,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2549
  $output .= '</div>';
2550
  $output .= '</div>';
2551
  /* end */
2552
- if ($this->is_error( $key )) {
2553
  $output .= $this->field_error( $this->show_error( $key ) );
2554
  }
2555
  $output .= '</div>';
@@ -2558,41 +2573,41 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2558
 
2559
  /* Single File Upload */
2560
  case 'file':
2561
- $output .= '<div ' . $this->get_atts( $key, $classes, $conditional, $data ) . '>';
2562
  $output .= '<input type="hidden" name="' . esc_attr( $key . UM()->form()->form_suffix ) . '" id="' . esc_attr( $key . UM()->form()->form_suffix ) . '" value="' . $this->field_value( $key, $default, $data ) . '" />';
2563
- if (isset( $data['label'] )) {
2564
  $output .= $this->field_label( $label, $key, $data );
2565
  }
2566
  $modal_label = ( isset( $data['label'] ) ) ? $data['label'] : __( 'Upload File', 'ultimate-member' );
2567
  $output .= '<div class="um-field-area" style="text-align: center;">';
2568
- if ( $this->field_value( $key, $default, $data ) ) {
2569
- $file_field_value = $this->field_value( $key, $default, $data );
 
 
2570
  $file_type = wp_check_filetype( $file_field_value );
2571
 
2572
- if ( isset( $this->set_mode ) && 'register' == $this->set_mode ) {
2573
- $file_info = get_transient("um_{$file_field_value}");
2574
  } else {
2575
- $file_info = um_user( $data['metakey']."_metadata" );
2576
  }
2577
 
2578
  $file_field_name = $file_field_value;
2579
- if( isset( $file_info['original_name'] ) && ! empty( $file_info['original_name'] ) ){
2580
  $file_field_name = $file_info['original_name'];
2581
  }
2582
 
2583
- if ( isset( $this->set_mode ) && 'register' == $this->set_mode ) {
2584
- $file_url = UM()->uploader()->get_core_temp_url() . DIRECTORY_SEPARATOR . $this->field_value( $key, $default, $data );
2585
- $file_dir = UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $this->field_value( $key, $default, $data );
2586
  } else {
2587
  $file_url = UM()->files()->get_download_link( $this->set_id, $key, um_user( 'ID' ) );
2588
  $file_dir = UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $this->field_value( $key, $default, $data );
 
2589
 
2590
- if ( ! file_exists( $file_dir ) ) {
2591
- if ( is_multisite() ) {
2592
- //multisite fix for old customers
2593
- $file_dir = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $file_dir );
2594
- }
2595
- }
2596
  }
2597
 
2598
  if ( file_exists( $file_dir ) ) {
@@ -2618,7 +2633,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2618
  $output .= '<div class="um-modal-hidden-content">';
2619
  $output .= '<div class="um-modal-header"> ' . $modal_label . '</div>';
2620
  $output .= '<div class="um-modal-body">';
2621
- if (isset( $this->set_id )) {
2622
  $set_id = $this->set_id;
2623
  $set_mode = $this->set_mode;
2624
  } else {
@@ -2638,7 +2653,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2638
  $output .= '<div class="um-single-file-upload" data-user_id="' . esc_attr( $_um_profile_id ) . '" data-timestamp="' . esc_attr( $this->timestamp ) . '" data-nonce="' . $nonce . '" data-icon="' . esc_attr( $icon ) . '" data-set_id="' . esc_attr( $set_id ) . '" data-set_mode="' . esc_attr( $set_mode ) . '" data-type="' . esc_attr( $type ) . '" data-key="' . esc_attr( $key ) . '" data-max_size="' . esc_attr( $max_size ) . '" data-max_size_error="' . esc_attr( $max_size_error ) . '" data-min_size_error="' . esc_attr( $min_size_error ) . '" data-extension_error="' . esc_attr( $extension_error ) . '" data-allowed_types="' . esc_attr( $allowed_types ) . '" data-upload_text="' . esc_attr( $upload_text ) . '" data-max_files_error="' . esc_attr( $max_files_error ) . '" data-upload_help_text="' . esc_attr( $upload_help_text ) . '">' . $button_text . '</div>';
2639
  $output .= '<div class="um-modal-footer">
2640
  <div class="um-modal-right">
2641
- <a href="javascript:void(0);" class="um-modal-btn um-finish-upload file disabled" data-key="' . $key . '" data-change="' . __( 'Change file' ) . '" data-processing="' . __( 'Processing...', 'ultimate-member' ) . '"> ' . __( 'Save', 'ultimate-member' ) . '</a>
2642
  <a href="javascript:void(0);" class="um-modal-btn alt" data-action="um_remove_modal"> ' . __( 'Cancel', 'ultimate-member' ) . '</a>
2643
  </div>
2644
  <div class="um-clear"></div>
@@ -2668,7 +2683,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
2668
  $output .= $this->field_label( $label, $key, $data );
2669
  }
2670
 
2671
- $output .= '<div class="um-field-area ' . ( isset( $this->field_icons ) && $this->field_icons == 'field' ? 'um-field-area-has-icon' : '' ) . ' ">';
2672
  if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) {
2673
  $output .= '<div class="um-field-icon"><i class="' . esc_attr( $icon ) . '"></i></div>';
2674
  }
@@ -3002,7 +3017,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
3002
  */
3003
  $use_keyword = apply_filters( 'um_multiselect_option_value', 0, $data['type'] );
3004
 
3005
- $output .= '<div class="um-field-area ' . ( isset( $this->field_icons ) && $this->field_icons == 'field' ? 'um-field-area-has-icon' : '' ) . ' ">';
3006
  if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field') {
3007
  $output .= '<div class="um-field-icon"><i class="' . esc_attr( $icon ) . '"></i></div>';
3008
  }
@@ -3869,75 +3884,81 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
3869
  /* Default */
3870
  default:
3871
 
3872
- $output .= '<div ' . $this->get_atts( $key, $classes, $conditional, $data ) . '>';
3873
 
3874
- if ( isset( $data['label'] ) || ! empty( $data['icon'] ) ) {
 
 
 
3875
 
3876
- if ( ! isset( $data['label'] ) ) {
3877
- $data['label'] = '';
3878
- }
3879
 
3880
- $output .= $this->field_label( $data['label'], $key, $data );
3881
- }
 
3882
 
3883
- $res = $this->field_value( $key, $default, $data );
 
3884
 
3885
- if ( ! empty( $res ) ) {
3886
- $res = stripslashes( $res );
3887
- }
3888
 
3889
- $data['is_view_field'] = true;
3890
- /**
3891
- * UM hook
3892
- *
3893
- * @type filter
3894
- * @title um_view_field
3895
- * @description Change field HTML on view mode
3896
- * @input_vars
3897
- * [{"var":"$output","type":"string","desc":"Field HTML"},
3898
- * {"var":"$data","type":"string","desc":"Field Data"},
3899
- * {"var":"$type","type":"string","desc":"Field Type"}]
3900
- * @change_log
3901
- * ["Since: 2.0"]
3902
- * @usage add_filter( 'um_view_field', 'function_name', 10, 3 );
3903
- * @example
3904
- * <?php
3905
- * add_filter( 'um_view_field', 'my_view_field', 10, 3 );
3906
- * function my_form_edit_field( $output, $data, $type ) {
3907
- * // your code here
3908
- * return $output;
3909
- * }
3910
- * ?>
3911
- */
3912
- $res = apply_filters( 'um_view_field', $res, $data, $type );
3913
- /**
3914
- * UM hook
3915
- *
3916
- * @type filter
3917
- * @title um_view_field_value_{$type}
3918
- * @description Change field HTML on view mode by field type
3919
- * @input_vars
3920
- * [{"var":"$output","type":"string","desc":"Field HTML"},
3921
- * {"var":"$data","type":"string","desc":"Field Data"}]
3922
- * @change_log
3923
- * ["Since: 2.0"]
3924
- * @usage add_filter( 'um_view_field_value_{$type}', 'function_name', 10, 2 );
3925
- * @example
3926
- * <?php
3927
- * add_filter( 'um_view_field_value_{$type}', 'my_view_field', 10, 2 );
3928
- * function my_form_edit_field( $output, $data ) {
3929
- * // your code here
3930
- * return $output;
3931
- * }
3932
- * ?>
3933
- */
3934
- $res = apply_filters( "um_view_field_value_{$type}", $res, $data );
3935
 
3936
- $output .= '<div class="um-field-area">';
3937
- $output .= '<div class="um-field-value">' . $res . '</div>';
3938
- $output .= '</div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3939
 
3940
- $output .= '</div>';
 
 
 
 
 
3941
 
3942
  break;
3943
 
21
  var $set_mode = '';
22
 
23
 
24
+ /**
25
+ * @var int form_id
26
+ */
27
+ public $set_id = null;
28
+
29
+
30
  /**
31
  * Fields constructor.
32
  */
150
  unset( $fields[ $id ]['in_group'] );
151
  unset( $fields[ $id ]['position'] );
152
 
153
+ do_action( 'um_add_new_field', $id );
154
+
155
  update_option( 'um_fields', $fields );
156
  }
157
 
250
  $fields = UM()->builtin()->saved_fields;
251
  if ( isset( $fields[ $id ] ) ) {
252
  unset( $fields[ $id ] );
253
+
254
+ do_action( 'um_delete_custom_field', $id );
255
+
256
  update_option( 'um_fields', $fields );
257
  }
258
  }
359
  unset( $all_fields[ $new_metakey ]['in_group'] );
360
  unset( $all_fields[ $new_metakey ]['position'] );
361
 
362
+
363
+ do_action( 'um_add_new_field', $new_metakey );
364
+
365
  UM()->query()->update_attr( 'custom_fields', $form_id, $fields );
366
  update_option( 'um_fields', $all_fields );
367
  }
2500
 
2501
  /* Single Image Upload */
2502
  case 'image':
2503
+ $output .= '<div ' . $this->get_atts( $key, $classes, $conditional, $data ) . ' data-mode="' . esc_attr( $this->set_mode ) . '" data-upload-label="' . ( ! empty( $data['button_text'] ) ? esc_attr( $data['button_text'] ) : esc_attr__( 'Upload', 'ultimate-member' ) ) . '">';
2504
  if ( in_array( $key, array( 'profile_photo', 'cover_photo' ) ) ) {
2505
  $field_value = '';
2506
  } else {
2512
  }
2513
  $modal_label = ( isset( $data['label'] ) ) ? $data['label'] : __( 'Upload Photo', 'ultimate-member' );
2514
  $output .= '<div class="um-field-area" style="text-align: center;">';
2515
+
2516
+ if ( ! empty( $field_value ) && $field_value != 'empty_file' ) {
2517
  if ( ! in_array( $key, array( 'profile_photo', 'cover_photo' ) ) ) {
2518
  if ( isset( $this->set_mode ) && 'register' == $this->set_mode ) {
2519
  $image_info = get_transient("um_{$field_value}");
2521
  $image_info = um_user( $data['metakey']."_metadata" );
2522
  }
2523
 
2524
+ if ( ( isset( $this->set_mode ) && $this->set_mode == 'register' ) || file_exists( UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $field_value ) ) {
2525
  $imgValue = UM()->uploader()->get_core_temp_url() . "/" . $this->field_value( $key, $default, $data );
2526
  } else {
2527
  $imgValue = UM()->files()->get_download_link( $this->set_id, $key, um_user( 'ID' ) );
2564
  $output .= '</div>';
2565
  $output .= '</div>';
2566
  /* end */
2567
+ if ( $this->is_error( $key ) ) {
2568
  $output .= $this->field_error( $this->show_error( $key ) );
2569
  }
2570
  $output .= '</div>';
2573
 
2574
  /* Single File Upload */
2575
  case 'file':
2576
+ $output .= '<div ' . $this->get_atts( $key, $classes, $conditional, $data ) . ' data-mode="' . esc_attr( $this->set_mode ) . '" data-upload-label="' . ( ! empty( $data['button_text'] ) ? esc_attr( $data['button_text'] ) : esc_attr__( 'Upload', 'ultimate-member' ) ) . '">';
2577
  $output .= '<input type="hidden" name="' . esc_attr( $key . UM()->form()->form_suffix ) . '" id="' . esc_attr( $key . UM()->form()->form_suffix ) . '" value="' . $this->field_value( $key, $default, $data ) . '" />';
2578
+ if ( isset( $data['label'] ) ) {
2579
  $output .= $this->field_label( $label, $key, $data );
2580
  }
2581
  $modal_label = ( isset( $data['label'] ) ) ? $data['label'] : __( 'Upload File', 'ultimate-member' );
2582
  $output .= '<div class="um-field-area" style="text-align: center;">';
2583
+
2584
+ $file_field_value = $this->field_value( $key, $default, $data );
2585
+
2586
+ if ( ! empty( $file_field_value ) && 'empty_file' !== $file_field_value ) {
2587
  $file_type = wp_check_filetype( $file_field_value );
2588
 
2589
+ if ( um_is_temp_file( $file_field_value ) ) {
2590
+ $file_info = get_transient( "um_{$file_field_value}" );
2591
  } else {
2592
+ $file_info = um_user( $data['metakey'] . "_metadata" );
2593
  }
2594
 
2595
  $file_field_name = $file_field_value;
2596
+ if ( ! empty( $file_info['original_name'] ) ) {
2597
  $file_field_name = $file_info['original_name'];
2598
  }
2599
 
2600
+ if ( ( isset( $this->set_mode ) && 'register' == $this->set_mode ) || file_exists( UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $file_field_value ) ) {
2601
+ $file_url = UM()->uploader()->get_core_temp_url() . DIRECTORY_SEPARATOR . $file_field_value;
2602
+ $file_dir = UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR . $file_field_value;
2603
  } else {
2604
  $file_url = UM()->files()->get_download_link( $this->set_id, $key, um_user( 'ID' ) );
2605
  $file_dir = UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $this->field_value( $key, $default, $data );
2606
+ }
2607
 
2608
+ //multisite fix for old customers
2609
+ if ( ! file_exists( $file_dir ) && is_multisite() ) {
2610
+ $file_dir = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $file_dir );
 
 
 
2611
  }
2612
 
2613
  if ( file_exists( $file_dir ) ) {
2633
  $output .= '<div class="um-modal-hidden-content">';
2634
  $output .= '<div class="um-modal-header"> ' . $modal_label . '</div>';
2635
  $output .= '<div class="um-modal-body">';
2636
+ if ( isset( $this->set_id ) ) {
2637
  $set_id = $this->set_id;
2638
  $set_mode = $this->set_mode;
2639
  } else {
2653
  $output .= '<div class="um-single-file-upload" data-user_id="' . esc_attr( $_um_profile_id ) . '" data-timestamp="' . esc_attr( $this->timestamp ) . '" data-nonce="' . $nonce . '" data-icon="' . esc_attr( $icon ) . '" data-set_id="' . esc_attr( $set_id ) . '" data-set_mode="' . esc_attr( $set_mode ) . '" data-type="' . esc_attr( $type ) . '" data-key="' . esc_attr( $key ) . '" data-max_size="' . esc_attr( $max_size ) . '" data-max_size_error="' . esc_attr( $max_size_error ) . '" data-min_size_error="' . esc_attr( $min_size_error ) . '" data-extension_error="' . esc_attr( $extension_error ) . '" data-allowed_types="' . esc_attr( $allowed_types ) . '" data-upload_text="' . esc_attr( $upload_text ) . '" data-max_files_error="' . esc_attr( $max_files_error ) . '" data-upload_help_text="' . esc_attr( $upload_help_text ) . '">' . $button_text . '</div>';
2654
  $output .= '<div class="um-modal-footer">
2655
  <div class="um-modal-right">
2656
+ <a href="javascript:void(0);" class="um-modal-btn um-finish-upload file disabled" data-key="' . esc_attr( $key ) . '" data-change="' . esc_attr__( 'Change file' ) . '" data-processing="' . esc_attr__( 'Processing...', 'ultimate-member' ) . '"> ' . __( 'Save', 'ultimate-member' ) . '</a>
2657
  <a href="javascript:void(0);" class="um-modal-btn alt" data-action="um_remove_modal"> ' . __( 'Cancel', 'ultimate-member' ) . '</a>
2658
  </div>
2659
  <div class="um-clear"></div>
2683
  $output .= $this->field_label( $label, $key, $data );
2684
  }
2685
 
2686
+ $output .= '<div class="um-field-area ' . ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ? 'um-field-area-has-icon' : '' ) . ' ">';
2687
  if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ) {
2688
  $output .= '<div class="um-field-icon"><i class="' . esc_attr( $icon ) . '"></i></div>';
2689
  }
3017
  */
3018
  $use_keyword = apply_filters( 'um_multiselect_option_value', 0, $data['type'] );
3019
 
3020
+ $output .= '<div class="um-field-area ' . (! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field' ? 'um-field-area-has-icon' : '' ) . ' ">';
3021
  if ( ! empty( $icon ) && isset( $this->field_icons ) && $this->field_icons == 'field') {
3022
  $output .= '<div class="um-field-icon"><i class="' . esc_attr( $icon ) . '"></i></div>';
3023
  }
3884
  /* Default */
3885
  default:
3886
 
3887
+ $_field_value = $this->field_value( $key, $default, $data );
3888
 
3889
+ if ( ! isset( $_field_value ) || $_field_value == '' ) {
3890
+ $output = '';
3891
+ } else {
3892
+ $output .= '<div ' . $this->get_atts( $key, $classes, $conditional, $data ) . '>';
3893
 
3894
+ if ( isset( $data['label'] ) || ! empty( $data['icon'] ) ) {
 
 
3895
 
3896
+ if ( ! isset( $data['label'] ) ) {
3897
+ $data['label'] = '';
3898
+ }
3899
 
3900
+ $output .= $this->field_label( $data['label'], $key, $data );
3901
+ }
3902
 
3903
+ $res = $this->field_value( $key, $default, $data );
 
 
3904
 
3905
+ if ( ! empty( $res ) ) {
3906
+ $res = stripslashes( $res );
3907
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3908
 
3909
+ $data['is_view_field'] = true;
3910
+ /**
3911
+ * UM hook
3912
+ *
3913
+ * @type filter
3914
+ * @title um_view_field
3915
+ * @description Change field HTML on view mode
3916
+ * @input_vars
3917
+ * [{"var":"$output","type":"string","desc":"Field HTML"},
3918
+ * {"var":"$data","type":"string","desc":"Field Data"},
3919
+ * {"var":"$type","type":"string","desc":"Field Type"}]
3920
+ * @change_log
3921
+ * ["Since: 2.0"]
3922
+ * @usage add_filter( 'um_view_field', 'function_name', 10, 3 );
3923
+ * @example
3924
+ * <?php
3925
+ * add_filter( 'um_view_field', 'my_view_field', 10, 3 );
3926
+ * function my_form_edit_field( $output, $data, $type ) {
3927
+ * // your code here
3928
+ * return $output;
3929
+ * }
3930
+ * ?>
3931
+ */
3932
+ $res = apply_filters( 'um_view_field', $res, $data, $type );
3933
+ /**
3934
+ * UM hook
3935
+ *
3936
+ * @type filter
3937
+ * @title um_view_field_value_{$type}
3938
+ * @description Change field HTML on view mode by field type
3939
+ * @input_vars
3940
+ * [{"var":"$output","type":"string","desc":"Field HTML"},
3941
+ * {"var":"$data","type":"string","desc":"Field Data"}]
3942
+ * @change_log
3943
+ * ["Since: 2.0"]
3944
+ * @usage add_filter( 'um_view_field_value_{$type}', 'function_name', 10, 2 );
3945
+ * @example
3946
+ * <?php
3947
+ * add_filter( 'um_view_field_value_{$type}', 'my_view_field', 10, 2 );
3948
+ * function my_form_edit_field( $output, $data ) {
3949
+ * // your code here
3950
+ * return $output;
3951
+ * }
3952
+ * ?>
3953
+ */
3954
+ $res = apply_filters( "um_view_field_value_{$type}", $res, $data );
3955
 
3956
+ $output .= '<div class="um-field-area">';
3957
+ $output .= '<div class="um-field-value">' . $res . '</div>';
3958
+ $output .= '</div>';
3959
+
3960
+ $output .= '</div>';
3961
+ }
3962
 
3963
  break;
3964
 
includes/core/class-files.php CHANGED
@@ -253,13 +253,51 @@ if ( ! class_exists( 'um\core\Files' ) ) {
253
  function ajax_remove_file() {
254
  UM()->check_ajax_nonce();
255
 
256
- /**
257
- * @var $src
258
- */
259
- extract( $_REQUEST );
260
- $this->delete_file( $src );
 
 
 
 
 
 
 
 
 
 
 
 
261
 
262
- wp_send_json_success();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  }
264
 
265
 
@@ -287,6 +325,12 @@ if ( ! class_exists( 'um\core\Files' ) ) {
287
  }
288
 
289
  $user_id = empty( $_REQUEST['user_id'] ) ? get_current_user_id() : $_REQUEST['user_id'];
 
 
 
 
 
 
290
  $image_path = um_is_file_owner( $src, $user_id, true );
291
  if ( ! $image_path ) {
292
  wp_send_json_error( esc_js( __( 'Invalid file ownership', 'ultimate-member' ) ) );
@@ -319,6 +363,11 @@ if ( ! class_exists( 'um\core\Files' ) ) {
319
  UM()->fields()->set_id = $_POST['set_id'];
320
  UM()->fields()->set_mode = $_POST['set_mode'];
321
 
 
 
 
 
 
322
  /**
323
  * UM hook
324
  *
@@ -981,10 +1030,11 @@ if ( ! class_exists( 'um\core\Files' ) ) {
981
  /**
982
  * This function will delete file upload from server
983
  *
984
- * @param $src
 
 
985
  */
986
  function delete_file( $src ) {
987
-
988
  if ( strstr( $src, '?' ) ) {
989
  $splitted = explode( '?', $src );
990
  $src = $splitted[0];
@@ -993,9 +1043,9 @@ if ( ! class_exists( 'um\core\Files' ) ) {
993
  $is_temp = um_is_temp_upload( $src );
994
  if ( $is_temp ) {
995
  unlink( $is_temp );
996
- rmdir( dirname( $is_temp ) );
997
  } else {
998
- wp_die( __('Ultimate Member: Not a valid temp file','ultimate-member') );
999
  }
1000
  }
1001
 
@@ -1135,9 +1185,15 @@ if ( ! class_exists( 'um\core\Files' ) ) {
1135
  */
1136
  function remove_dir( $dir ) {
1137
  if ( file_exists( $dir ) ) {
1138
- foreach(glob($dir . '/*') as $file) {
1139
- if(is_dir($file)) $this->remove_dir($file); else unlink($file);
1140
- } rmdir($dir);
 
 
 
 
 
 
1141
  }
1142
  }
1143
 
253
  function ajax_remove_file() {
254
  UM()->check_ajax_nonce();
255
 
256
+ if ( empty( $_POST['src'] ) ) {
257
+ wp_send_json_error( __( 'Wrong path', 'ultimate-member' ) );
258
+ }
259
+
260
+ if ( empty( $_POST['mode'] ) ) {
261
+ wp_send_json_error( __( 'Wrong mode', 'ultimate-member' ) );
262
+ }
263
+
264
+ $src = $_POST['src'];
265
+ if ( strstr( $src, '?' ) ) {
266
+ $splitted = explode( '?', $src );
267
+ $src = $splitted[0];
268
+ }
269
+
270
+ $mode = sanitize_key( $_POST['mode'] );
271
+
272
+ if ( $mode == 'register' || empty( $_POST['user_id'] ) ) {
273
 
274
+ $is_temp = um_is_temp_upload( $src );
275
+ if ( ! $is_temp ) {
276
+ wp_send_json_success();
277
+ }
278
+
279
+ } else {
280
+
281
+ $user_id = absint( $_POST['user_id'] );
282
+
283
+ if ( ! UM()->roles()->um_current_user_can( 'edit', $user_id ) ) {
284
+ wp_send_json_error( __( 'You haven\'t ability to edit this user', 'ultimate-member' ) );
285
+ }
286
+
287
+ $is_temp = um_is_temp_upload( $src );
288
+ if ( ! $is_temp ) {
289
+ if ( ! empty( $_POST['filename'] ) && file_exists( UM()->uploader()->get_upload_user_base_dir( $user_id ) . DIRECTORY_SEPARATOR . $_POST['filename'] ) ) {
290
+ wp_send_json_success();
291
+ }
292
+ }
293
+
294
+ }
295
+
296
+ if ( $this->delete_file( $src ) ) {
297
+ wp_send_json_success();
298
+ } else {
299
+ wp_send_json_error( __( 'You haven\'t ability to delete this file', 'ultimate-member' ) );
300
+ }
301
  }
302
 
303
 
325
  }
326
 
327
  $user_id = empty( $_REQUEST['user_id'] ) ? get_current_user_id() : $_REQUEST['user_id'];
328
+
329
+ if ( ! UM()->roles()->um_current_user_can( 'edit', $user_id ) ) {
330
+ $ret['error'] = esc_js( __( 'You haven\'t ability to edit this user', 'ultimate-member' ) );
331
+ wp_send_json_error( $ret );
332
+ }
333
+
334
  $image_path = um_is_file_owner( $src, $user_id, true );
335
  if ( ! $image_path ) {
336
  wp_send_json_error( esc_js( __( 'Invalid file ownership', 'ultimate-member' ) ) );
363
  UM()->fields()->set_id = $_POST['set_id'];
364
  UM()->fields()->set_mode = $_POST['set_mode'];
365
 
366
+ if ( UM()->fields()->set_mode != 'register' && ! UM()->roles()->um_current_user_can( 'edit', $user_id ) ) {
367
+ $ret['error'] = __( 'You haven\'t ability to edit this user', 'ultimate-member' );
368
+ wp_send_json_error( $ret );
369
+ }
370
+
371
  /**
372
  * UM hook
373
  *
1030
  /**
1031
  * This function will delete file upload from server
1032
  *
1033
+ * @param string $src
1034
+ *
1035
+ * @return bool
1036
  */
1037
  function delete_file( $src ) {
 
1038
  if ( strstr( $src, '?' ) ) {
1039
  $splitted = explode( '?', $src );
1040
  $src = $splitted[0];
1043
  $is_temp = um_is_temp_upload( $src );
1044
  if ( $is_temp ) {
1045
  unlink( $is_temp );
1046
+ return true;
1047
  } else {
1048
+ return false;
1049
  }
1050
  }
1051
 
1185
  */
1186
  function remove_dir( $dir ) {
1187
  if ( file_exists( $dir ) ) {
1188
+ foreach ( glob($dir . '/*') as $file ) {
1189
+ if ( is_dir( $file ) ) {
1190
+ $this->remove_dir( $file );
1191
+ } else {
1192
+ unlink( $file );
1193
+ }
1194
+ }
1195
+
1196
+ rmdir( $dir );
1197
  }
1198
  }
1199
 
includes/core/class-gdpr.php CHANGED
@@ -32,9 +32,18 @@ if ( ! class_exists( 'um\core\GDPR' ) ) {
32
  * @param $args
33
  */
34
  function display_option( $args ) {
 
35
  if ( isset( $args['use_gdpr'] ) && $args['use_gdpr'] == 1 ) {
36
- require um_path . 'templates/gdpr-register.php';
 
 
 
 
 
 
 
37
  }
 
38
  }
39
 
40
 
32
  * @param $args
33
  */
34
  function display_option( $args ) {
35
+
36
  if ( isset( $args['use_gdpr'] ) && $args['use_gdpr'] == 1 ) {
37
+
38
+ $template_path = trailingslashit( get_stylesheet_directory() ). '/ultimate-member/templates/gdpr-register.php';
39
+
40
+ if ( file_exists( $template_path ) ) {
41
+ require $template_path;
42
+ } else {
43
+ require um_path . 'templates/gdpr-register.php';
44
+ }
45
  }
46
+
47
  }
48
 
49
 
includes/core/class-member-directory-meta.php ADDED
@@ -0,0 +1,755 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace um\core;
3
+
4
+
5
+ if ( ! defined( 'ABSPATH' ) ) exit;
6
+
7
+
8
+ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
9
+
10
+
11
+ /**
12
+ * Class Member_Directory_Meta
13
+ * @package um\core
14
+ */
15
+ class Member_Directory_Meta extends Member_Directory {
16
+
17
+
18
+ /**
19
+ * @var string
20
+ */
21
+ var $joins = array();
22
+ var $where_clauses = array();
23
+
24
+ var $roles = array();
25
+ var $general_meta_joined = false;
26
+
27
+ var $sql_limit = '';
28
+ var $sql_order = '';
29
+
30
+
31
+ /**
32
+ * Member_Directory_Meta constructor.
33
+ */
34
+ function __construct() {
35
+ parent::__construct();
36
+
37
+ add_action( 'updated_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 );
38
+ add_action( 'added_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 );
39
+ add_action( 'deleted_user_meta', array( &$this, 'on_delete_usermeta' ), 10, 4 );
40
+
41
+ add_action( 'um_add_new_field', array( &$this, 'on_new_field_added' ), 10, 1 );
42
+ add_action( 'um_delete_custom_field', array( &$this, 'on_delete_custom_field' ), 10, 1 );
43
+ }
44
+
45
+
46
+ /**
47
+ * Delete custom field and metakey from UM usermeta table
48
+ *
49
+ * @param $metakey
50
+ */
51
+ function on_delete_custom_field( $metakey ) {
52
+ $metakeys = get_option( 'um_usermeta_fields', array() );
53
+ if ( in_array( $metakey, $metakeys ) ) {
54
+ unset( $metakeys[ array_search( $metakey, $metakeys ) ] );
55
+
56
+ global $wpdb;
57
+
58
+ $wpdb->delete(
59
+ "{$wpdb->prefix}um_metadata",
60
+ array(
61
+ 'um_key' => $metakey
62
+ ),
63
+ array(
64
+ '%s'
65
+ )
66
+ );
67
+
68
+ update_option( 'um_usermeta_fields', array_values( $metakeys ) );
69
+ }
70
+ }
71
+
72
+
73
+ /**
74
+ * Add metakey to usermeta fields
75
+ *
76
+ * @param $metakey
77
+ */
78
+ function on_new_field_added( $metakey ) {
79
+ $metakeys = get_option( 'um_usermeta_fields', array() );
80
+ if ( ! in_array( $metakey, $metakeys ) ) {
81
+ $metakeys[] = $metakey;
82
+ update_option( 'um_usermeta_fields', array_values( $metakeys ) );
83
+ }
84
+ }
85
+
86
+
87
+ /**
88
+ * When you delete usermeta - remove row from um_metadata
89
+ *
90
+ * @param int|array $meta_ids
91
+ * @param int $object_id
92
+ * @param string $meta_key
93
+ * @param mixed $_meta_value
94
+ */
95
+ function on_delete_usermeta( $meta_ids, $object_id, $meta_key, $_meta_value ) {
96
+ $metakeys = get_option( 'um_usermeta_fields', array() );
97
+ if ( ! in_array( $meta_key, $metakeys ) ) {
98
+ return;
99
+ }
100
+
101
+ global $wpdb;
102
+
103
+ $wpdb->delete(
104
+ "{$wpdb->prefix}um_metadata",
105
+ array(
106
+ 'user_id' => $object_id,
107
+ 'um_key' => $meta_key
108
+ ),
109
+ array(
110
+ '%d',
111
+ '%s'
112
+ )
113
+ );
114
+ }
115
+
116
+
117
+ /**
118
+ * When you add/update usermeta - add/update row from um_metadata
119
+ *
120
+ * @param int $meta_id
121
+ * @param int $object_id
122
+ * @param string $meta_key
123
+ * @param mixed $_meta_value
124
+ */
125
+ function on_update_usermeta( $meta_id, $object_id, $meta_key, $_meta_value ) {
126
+
127
+ $metakeys = get_option( 'um_usermeta_fields', array() );
128
+ if ( ! in_array( $meta_key, $metakeys ) ) {
129
+ return;
130
+ }
131
+
132
+ global $wpdb;
133
+
134
+ $result = $wpdb->get_var( $wpdb->prepare(
135
+ "SELECT umeta_id
136
+ FROM {$wpdb->prefix}um_metadata
137
+ WHERE user_id = %d AND
138
+ um_key = %s
139
+ LIMIT 1",
140
+ $object_id,
141
+ $meta_key
142
+ ) );
143
+
144
+ if ( empty( $result ) ) {
145
+ $wpdb->insert(
146
+ "{$wpdb->prefix}um_metadata",
147
+ array(
148
+ 'user_id' => $object_id,
149
+ 'um_key' => $meta_key,
150
+ 'um_value' => maybe_serialize( $_meta_value ),
151
+ ),
152
+ array(
153
+ '%d',
154
+ '%s',
155
+ '%s',
156
+ )
157
+ );
158
+ } else {
159
+ $wpdb->update(
160
+ "{$wpdb->prefix}um_metadata",
161
+ array(
162
+ 'um_value' => maybe_serialize( $_meta_value ),
163
+ ),
164
+ array(
165
+ 'umeta_id' => $result,
166
+ ),
167
+ array(
168
+ '%s',
169
+ ),
170
+ array(
171
+ '%d',
172
+ )
173
+ );
174
+ }
175
+ }
176
+
177
+
178
+ /**
179
+ * @param $directory_data
180
+ * @param $field
181
+ * @param $value
182
+ * @param $i
183
+ * @param bool $is_default
184
+ */
185
+ function handle_filter_query( $directory_data, $field, $value, $i, $is_default = false ) {
186
+ global $wpdb;
187
+
188
+ $join_slug = $is_default ? 'ummd' : 'umm' ;
189
+
190
+ $blog_id = get_current_blog_id();
191
+
192
+ switch ( $field ) {
193
+ default:
194
+
195
+ $filter_type = $this->filter_types[ $field ];
196
+
197
+ /**
198
+ * UM hook
199
+ *
200
+ * @type filter
201
+ * @title um_query_args_{$field}__filter
202
+ * @description Change field's query for search at Members Directory
203
+ * @input_vars
204
+ * [{"var":"$field_query","type":"array","desc":"Field query"}]
205
+ * @change_log
206
+ * ["Since: 2.0"]
207
+ * @usage
208
+ * <?php add_filter( 'um_query_args_{$field}__filter_meta', 'function_name', 10, 4 ); ?>
209
+ * @example
210
+ * <?php
211
+ * add_filter( 'um_query_args_{$field}__filter_meta', 'my_query_args_filter', 10, 4 );
212
+ * function my_query_args_filter( $field_query ) {
213
+ * // your code here
214
+ * return $field_query;
215
+ * }
216
+ * ?>
217
+ */
218
+ $skip_default = apply_filters( "um_query_args_{$field}__filter_meta", false, $this, $field, $value, $filter_type, $is_default );
219
+
220
+ if ( ! $skip_default ) {
221
+
222
+ switch ( $filter_type ) {
223
+ default:
224
+
225
+ do_action( "um_query_args_{$field}_{$filter_type}__filter_meta", $field, $value, $filter_type, $i, $is_default );
226
+ break;
227
+
228
+ case 'text':
229
+
230
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
231
+
232
+ $value = trim( stripslashes( $value ) );
233
+
234
+ $this->where_clauses[] = $wpdb->prepare( "{$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value = %s", $field, $value );
235
+
236
+ if ( ! $is_default ) {
237
+ $this->custom_filters_in_query[ $field ] = $value;
238
+ }
239
+
240
+ break;
241
+
242
+ case 'select':
243
+ if ( ! is_array( $value ) ) {
244
+ $value = array( $value );
245
+ }
246
+
247
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
248
+
249
+ $values_array = array();
250
+ foreach ( $value as $single_val ) {
251
+ $single_val = stripslashes( $single_val );
252
+
253
+ $values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value LIKE %s", '%"' . trim( $single_val ) . '"%' );
254
+ $values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value LIKE %s", '%' . serialize( strval( trim( $single_val ) ) ) . '%' );
255
+ $values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value = %s", trim( $single_val ) );
256
+
257
+ if ( is_numeric( $single_val ) ) {
258
+ $values_array[] = $wpdb->prepare( "{$join_slug}{$i}.um_value LIKE %s", '%' . serialize( intval( trim( $single_val ) ) ) . '%' );
259
+ }
260
+ }
261
+
262
+ $values = implode( ' OR ', $values_array );
263
+
264
+ $this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND ( {$values} ) )", $field );
265
+
266
+ if ( ! $is_default ) {
267
+ $this->custom_filters_in_query[ $field ] = $value;
268
+ }
269
+
270
+ break;
271
+ case 'slider':
272
+
273
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
274
+
275
+ $min = min( $value );
276
+ $max = max( $value );
277
+
278
+ $this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value BETWEEN %d AND %d )", $field, $min, $max );
279
+
280
+ if ( ! $is_default ) {
281
+ $this->custom_filters_in_query[ $field ] = $value;
282
+ }
283
+
284
+ break;
285
+ case 'datepicker':
286
+
287
+ $offset = 0;
288
+ if ( ! $is_default ) {
289
+ if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
290
+ $offset = (int) $_POST['gmt_offset'];
291
+ }
292
+ } else {
293
+ $gmt_offset = get_post_meta( $directory_data['form_id'], '_um_search_filters_gmt', true );
294
+ if ( is_numeric( $gmt_offset ) ) {
295
+ $offset = $gmt_offset;
296
+ }
297
+ }
298
+
299
+ $from_date = (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ); // client time zone offset
300
+ $to_date = (int) max( $value ) + ( $offset * HOUR_IN_SECONDS ) + DAY_IN_SECONDS - 1; // time 23:59
301
+ $from_date = date( 'Y/m/d', $from_date );
302
+ $to_date = date( 'Y/m/d', $to_date );
303
+
304
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
305
+
306
+ $this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value BETWEEN %s AND %s )", $field, $from_date, $to_date );
307
+
308
+ if ( ! $is_default ) {
309
+ $this->custom_filters_in_query[ $field ] = array( $from_date, $to_date );
310
+ }
311
+
312
+ break;
313
+ case 'timepicker':
314
+
315
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
316
+ if ( $value[0] == $value[1] ) {
317
+ $this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value = %s )", $field, $value[0] );
318
+ } else {
319
+ $this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = %s AND CAST( {$join_slug}{$i}.um_value AS TIME ) BETWEEN %s AND %s )", $field, $value[0], $value[1] );
320
+ }
321
+
322
+ if ( ! $is_default ) {
323
+ $this->custom_filters_in_query[ $field ] = $value;
324
+ }
325
+
326
+ break;
327
+ }
328
+
329
+ }
330
+
331
+ break;
332
+ case 'role':
333
+ $value = array_map( 'strtolower', $value );
334
+
335
+ if ( empty( $this->roles ) && ! is_multisite() ) {
336
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_roles ON ( umm_roles.user_id = u.ID AND umm_roles.um_key = '" . $wpdb->get_blog_prefix( $blog_id ) . "capabilities' )";
337
+ $this->roles = $value;
338
+ }
339
+
340
+ $roles_clauses = array();
341
+ foreach ( $value as $role ) {
342
+ $roles_clauses[] = $wpdb->prepare( "umm_roles.um_value LIKE %s", '%"' . $role . '"%' );
343
+ }
344
+
345
+ $this->where_clauses[] = '( ' . implode( ' OR ', $roles_clauses ) . ' )';
346
+
347
+ if ( ! $is_default ) {
348
+ $this->custom_filters_in_query[ $field ] = $value;
349
+ }
350
+
351
+ break;
352
+ case 'birth_date':
353
+
354
+ $from_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ), date( 'Y', time() - min( $value ) * YEAR_IN_SECONDS ) ) );
355
+ $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 ) ) );
356
+
357
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
358
+
359
+ $this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = 'birth_date' AND {$join_slug}{$i}.um_value BETWEEN %s AND %s )", $to_date, $from_date );
360
+
361
+ if ( ! $is_default ) {
362
+ $this->custom_filters_in_query[ $field ] = array( $to_date, $from_date );
363
+ }
364
+
365
+ break;
366
+ case 'user_registered':
367
+
368
+ $offset = 0;
369
+ if ( ! $is_default ) {
370
+ if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
371
+ $offset = (int) $_POST['gmt_offset'];
372
+ }
373
+ } else {
374
+ $gmt_offset = get_post_meta( $directory_data['form_id'], '_um_search_filters_gmt', true );
375
+ if ( is_numeric( $gmt_offset ) ) {
376
+ $offset = $gmt_offset;
377
+ }
378
+ }
379
+
380
+ $from_date = date( 'Y-m-d H:s:i', strtotime( date( 'Y-m-d H:s:i', min( $value ) ) . "+$offset hours" ) );
381
+ $to_date = date( 'Y-m-d H:s:i', strtotime( date( 'Y-m-d H:s:i', max( $value ) ) . "+$offset hours" ) );
382
+
383
+ $this->where_clauses[] = $wpdb->prepare( "u.user_registered BETWEEN %s AND %s", $from_date, $to_date );
384
+
385
+ if ( ! $is_default ) {
386
+ $this->custom_filters_in_query[ $field ] = $value;
387
+ }
388
+
389
+ break;
390
+ case 'last_login':
391
+
392
+ $offset = 0;
393
+ if ( ! $is_default ) {
394
+ if ( isset( $_POST['gmt_offset'] ) && is_numeric( $_POST['gmt_offset'] ) ) {
395
+ $offset = (int) $_POST['gmt_offset'];
396
+ }
397
+ } else {
398
+ $gmt_offset = get_post_meta( $directory_data['form_id'], '_um_search_filters_gmt', true );
399
+ if ( is_numeric( $gmt_offset ) ) {
400
+ $offset = $gmt_offset;
401
+ }
402
+ }
403
+
404
+ $from_date = (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ); // client time zone offset
405
+ $to_date = (int) max( $value ) + ( $offset * HOUR_IN_SECONDS ) + DAY_IN_SECONDS - 1; // time 23:59
406
+
407
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata {$join_slug}{$i} ON {$join_slug}{$i}.user_id = u.ID";
408
+
409
+ $this->where_clauses[] = $wpdb->prepare( "( {$join_slug}{$i}.um_key = '_um_last_login' AND {$join_slug}{$i}.um_value BETWEEN %s AND %s )", $from_date, $to_date );
410
+
411
+ if ( ! $is_default ) {
412
+ $this->custom_filters_in_query[ $field ] = $value;
413
+ }
414
+
415
+ break;
416
+ }
417
+ }
418
+
419
+
420
+ /**
421
+ * Main Query function for getting members via AJAX
422
+ */
423
+ function ajax_get_members() {
424
+ UM()->check_ajax_nonce();
425
+
426
+ global $wpdb;
427
+
428
+ $blog_id = get_current_blog_id();
429
+
430
+ $directory_id = $this->get_directory_by_hash( $_POST['directory_id'] );
431
+ $directory_data = UM()->query()->post_data( $directory_id );
432
+
433
+ //predefined result for user without capabilities to see other members
434
+ $this->predefined_no_caps( $directory_data );
435
+
436
+ do_action( 'um_member_directory_before_query' );
437
+
438
+ // Prepare for BIG SELECT query
439
+ $wpdb->query( 'SET SQL_BIG_SELECTS=1' );
440
+
441
+
442
+ if ( ! empty( $directory_data['show_these_users'] ) ) {
443
+ $show_these_users = maybe_unserialize( $directory_data['show_these_users'] );
444
+
445
+ if ( is_array( $show_these_users ) && ! empty( $show_these_users ) ) {
446
+ $users_array = array();
447
+ foreach ( $show_these_users as $username ) {
448
+ if ( false !== ( $exists_id = username_exists( $username ) ) ) {
449
+ $users_array[] = $exists_id;
450
+ }
451
+ }
452
+
453
+ if ( ! empty( $users_array ) ) {
454
+ $this->where_clauses[] = "u.ID IN ( '" . implode( "','", $users_array ) . "' )";
455
+ }
456
+ }
457
+ }
458
+
459
+
460
+ $profile_photo_where = '';
461
+ if ( $directory_data['has_profile_photo'] == 1 ) {
462
+ $profile_photo_where = " AND umm_general.um_value LIKE '%s:13:\"profile_photo\";b:1;%'";
463
+ }
464
+
465
+ $cover_photo_where = '';
466
+ if ( $directory_data['has_cover_photo'] == 1 ) {
467
+ $cover_photo_where = " AND umm_general.um_value LIKE '%s:11:\"cover_photo\";b:1;%'";
468
+ }
469
+
470
+ if ( ! UM()->roles()->um_user_can( 'can_edit_everyone' ) ) {
471
+ if ( ! $this->general_meta_joined ) {
472
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_general ON umm_general.user_id = u.ID";
473
+ $this->general_meta_joined = true;
474
+ }
475
+ $this->where_clauses[] = "( umm_general.um_key = 'um_member_directory_data' AND
476
+ umm_general.um_value LIKE '%s:14:\"account_status\";s:8:\"approved\";%' AND umm_general.um_value LIKE '%s:15:\"hide_in_members\";b:0;%'{$profile_photo_where}{$cover_photo_where} )";
477
+ } else {
478
+ if ( ! empty( $cover_photo_where ) || ! empty( $profile_photo_where ) ) {
479
+ if ( ! $this->general_meta_joined ) {
480
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_general ON umm_general.user_id = u.ID";
481
+ $this->general_meta_joined = true;
482
+ }
483
+ $this->where_clauses[] = "( umm_general.um_key = 'um_member_directory_data'{$profile_photo_where}{$cover_photo_where} )";
484
+ }
485
+ }
486
+
487
+ //$this->roles = array();
488
+ if ( UM()->roles()->um_user_can( 'can_view_all' ) ) {
489
+ $view_roles = um_user( 'can_view_roles' );
490
+
491
+ if ( ! $view_roles ) {
492
+ $view_roles = array();
493
+ }
494
+
495
+ $this->roles = array_merge( $this->roles, maybe_unserialize( $view_roles ) );
496
+ }
497
+
498
+ if ( ! empty( $directory_data['roles'] ) ) {
499
+ if ( ! empty( $this->roles ) ) {
500
+ $this->roles = array_intersect( $this->roles, maybe_unserialize( $directory_data['roles'] ) );
501
+ } else {
502
+ $this->roles = array_merge( $this->roles, maybe_unserialize( $directory_data['roles'] ) );
503
+ }
504
+ }
505
+
506
+ if ( ! empty( $this->roles ) ) {
507
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_roles ON ( umm_roles.user_id = u.ID AND umm_roles.um_key = '" . $wpdb->get_blog_prefix( $blog_id ) . "capabilities' )";
508
+
509
+ $roles_clauses = array();
510
+ foreach ( $this->roles as $role ) {
511
+ $roles_clauses[] = $wpdb->prepare( 'umm_roles.um_value LIKE %s', '%"' . $role . '"%' );
512
+ }
513
+
514
+ $this->where_clauses[] = '( ' . implode( ' OR ', $roles_clauses ) . ' )';
515
+ } else {
516
+ if ( is_multisite() ) {
517
+ // select users who have capabilities for current blog
518
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_roles ON ( umm_roles.user_id = u.ID AND umm_roles.um_key = '" . $wpdb->get_blog_prefix( $blog_id ) . "capabilities' )";
519
+ $this->where_clauses[] = "umm_roles.um_value IS NOT NULL";
520
+ }
521
+ }
522
+
523
+
524
+ if ( ! empty( $_POST['search'] ) ) {
525
+ $search_line = trim( stripslashes( $_POST['search'] ) );
526
+
527
+ $searches = array();
528
+ foreach ( $this->core_search_fields as $field ) {
529
+ $searches[] = $wpdb->prepare( "u.{$field} LIKE %s", '%' . $search_line . '%' );
530
+ }
531
+
532
+ $core_search = implode( ' OR ', $searches );
533
+
534
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_search ON umm_search.user_id = u.ID";
535
+
536
+ $additional_search = apply_filters( 'um_member_directory_meta_general_search_meta_query', '', stripslashes( $_POST['search'] ) );
537
+
538
+ $this->where_clauses[] = $wpdb->prepare( "( umm_search.um_value = %s OR umm_search.um_value LIKE %s OR umm_search.um_value LIKE %s OR {$core_search}{$additional_search})", $search_line, '%' . $search_line . '%', '%' . serialize( strval( $search_line ) ) . '%' );
539
+
540
+ $this->is_search = true;
541
+ }
542
+
543
+
544
+ //filters
545
+ $filter_query = array();
546
+ if ( ! empty( $directory_data['search_fields'] ) ) {
547
+ $search_filters = maybe_unserialize( $directory_data['search_fields'] );
548
+ if ( ! empty( $search_filters ) && is_array( $search_filters ) ) {
549
+ $filter_query = array_intersect_key( $_POST, array_flip( $search_filters ) );
550
+ }
551
+ }
552
+
553
+ // added for user tags extension integration on individual tag page
554
+ $ignore_empty_filters = apply_filters( 'um_member_directory_ignore_empty_filters', false );
555
+
556
+ if ( ! empty( $filter_query ) || $ignore_empty_filters ) {
557
+ $this->is_search = true;
558
+
559
+ $i = 1;
560
+ foreach ( $filter_query as $field => $value ) {
561
+
562
+ $attrs = UM()->fields()->get_field( $field );
563
+ // skip private invisible fields
564
+ if ( ! um_can_view_field( $attrs ) ) {
565
+ continue;
566
+ }
567
+
568
+ $this->handle_filter_query( $directory_data, $field, $value, $i );
569
+
570
+ $i++;
571
+ }
572
+ }
573
+
574
+
575
+ //unable default filter in case if we select other filters in frontend filters
576
+ //if ( empty( $this->custom_filters_in_query ) ) {
577
+ $default_filters = array();
578
+ if ( ! empty( $directory_data['search_filters'] ) ) {
579
+ $default_filters = maybe_unserialize( $directory_data['search_filters'] );
580
+ }
581
+
582
+ if ( ! empty( $default_filters ) ) {
583
+ $i = 1;
584
+ foreach ( $default_filters as $field => $value ) {
585
+
586
+ $this->handle_filter_query( $directory_data, $field, $value, $i, true );
587
+
588
+ $i++;
589
+ }
590
+ }
591
+ //}
592
+
593
+ $order = 'ASC';
594
+ $sortby = ! empty( $_POST['sorting'] ) ? $_POST['sorting'] : $directory_data['sortby'];
595
+
596
+ $custom_sort = array();
597
+ $sorting_fields = maybe_unserialize( $directory_data['sorting_fields'] );
598
+ foreach ( $sorting_fields as $field ) {
599
+ if ( is_array( $field ) ) {
600
+ $field_keys = array_keys( $field );
601
+ $custom_sort[] = $field_keys[0];
602
+ }
603
+ }
604
+
605
+ // handle sorting options
606
+ // sort members by
607
+ if ( $sortby == $directory_data['sortby_custom'] || in_array( $sortby, $custom_sort ) ) {
608
+
609
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = '{$sortby}' )";
610
+
611
+ $custom_sort_type = apply_filters( 'um_member_directory_custom_sorting_type', 'CHAR', $sortby, $directory_data );
612
+
613
+ $this->sql_order = " ORDER BY CAST( umm_sort.um_value AS {$custom_sort_type} ) {$order} ";
614
+
615
+ } elseif ( 'display_name' == $sortby ) {
616
+
617
+ $display_name = UM()->options()->get( 'display_name' );
618
+ if ( $display_name == 'username' ) {
619
+
620
+ $this->sql_order = " ORDER BY u.user_login {$order} ";
621
+
622
+ } else {
623
+
624
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = 'full_name' )";
625
+
626
+ $this->sql_order = " ORDER BY CAST( umm_sort.um_value AS CHAR ) {$order}, u.display_name {$order} ";
627
+
628
+ }
629
+
630
+ } elseif ( in_array( $sortby, array( 'last_name', 'first_name', 'nickname' ) ) ) {
631
+
632
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = '{$sortby}' )";
633
+
634
+ $this->sql_order = " ORDER BY CAST( umm_sort.um_value AS CHAR ) {$order} ";
635
+
636
+ } elseif ( $sortby == 'last_login' ) {
637
+
638
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = '_um_last_login' )";
639
+
640
+ $this->sql_order = " ORDER BY CAST( umm_sort.um_value AS SIGNED ) {$order} ";
641
+
642
+ } elseif ( $sortby == 'last_first_name' ) {
643
+
644
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = 'last_name' )";
645
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort2 ON ( umm_sort2.user_id = u.ID AND umm_sort2.um_key = 'first_name' )";
646
+
647
+ $this->sql_order = " ORDER BY CAST( umm_sort.um_value AS CHAR ) ASC, CAST( umm_sort2.um_value AS CHAR ) ASC ";
648
+
649
+ } elseif ( $sortby == 'random' ) {
650
+
651
+ if ( um_is_session_started() === false ) {
652
+ @session_start();
653
+ }
654
+
655
+ // Reset seed on load of initial
656
+ if ( empty( $_REQUEST['directory_id'] ) && isset( $_SESSION['um_member_directory_seed'] ) ) {
657
+ unset( $_SESSION['um_member_directory_seed'] );
658
+ }
659
+
660
+ // Get seed from session variable if it exists
661
+ $seed = false;
662
+ if ( isset( $_SESSION['um_member_directory_seed'] ) ) {
663
+ $seed = $_SESSION['um_member_directory_seed'];
664
+ }
665
+
666
+ // Set new seed if none exists
667
+ if ( ! $seed ) {
668
+ $seed = rand();
669
+ $_SESSION['um_member_directory_seed'] = $seed;
670
+ }
671
+
672
+ $this->sql_order = 'ORDER BY RAND(' . $seed . ')';
673
+
674
+ } else {
675
+
676
+ if ( strstr( $sortby, '_desc' ) ) {
677
+ $sortby = str_replace( '_desc', '', $sortby );
678
+ $order = 'DESC';
679
+ }
680
+
681
+ if ( strstr( $sortby, '_asc' ) ) {
682
+ $sortby = str_replace( '_asc', '', $sortby );
683
+ $order = 'ASC';
684
+ }
685
+
686
+ $metakeys = get_option( 'um_usermeta_fields', array() );
687
+ if ( false !== array_search( $sortby, $metakeys ) ) {
688
+ $this->joins[] = "LEFT JOIN {$wpdb->prefix}um_metadata umm_sort ON ( umm_sort.user_id = u.ID AND umm_sort.um_key = '{$sortby}' )";
689
+ $this->sql_order = " ORDER BY CAST( umm_sort.um_value AS CHAR ) {$order} ";
690
+ } else {
691
+ $this->sql_order = " ORDER BY u.{$sortby} {$order} ";
692
+ }
693
+ }
694
+
695
+ $this->sql_order = apply_filters( 'um_modify_sortby_parameter_meta', $this->sql_order, $sortby );
696
+
697
+
698
+ $profiles_per_page = $directory_data['profiles_per_page'];
699
+ if ( UM()->mobile()->isMobile() && isset( $directory_data['profiles_per_page_mobile'] ) ) {
700
+ $profiles_per_page = $directory_data['profiles_per_page_mobile'];
701
+ }
702
+
703
+ $query_number = ( ! empty( $directory_data['max_users'] ) && $directory_data['max_users'] <= $profiles_per_page ) ? $directory_data['max_users'] : $profiles_per_page;
704
+ $query_paged = ! empty( $_POST['page'] ) ? $_POST['page'] : 1;
705
+
706
+ $number = $query_number;
707
+ if ( ! empty( $directory_data['max_users'] ) && $query_paged*$query_number > $directory_data['max_users'] ) {
708
+ $number = ( $query_paged*$query_number - ( $query_paged*$query_number - $directory_data['max_users'] ) ) % $query_number;
709
+ }
710
+
711
+ // limit
712
+ if ( isset( $query_number ) && $query_number > 0 ) {
713
+ $this->sql_limit .= $wpdb->prepare( 'LIMIT %d, %d', $query_number * ( $query_paged - 1 ), $number );
714
+ }
715
+
716
+ do_action( 'um_pre_users_query', $this, $directory_data, $sortby );
717
+
718
+ $sql_join = implode( ' ', $this->joins );
719
+ $sql_where = implode( ' AND ', $this->where_clauses );
720
+ $sql_where = ! empty( $sql_where ) ? 'AND ' . $sql_where : '';
721
+
722
+ global $wpdb;
723
+
724
+ $user_ids = $wpdb->get_col(
725
+ "SELECT SQL_CALC_FOUND_ROWS DISTINCT u.ID
726
+ FROM {$wpdb->users} AS u
727
+ {$sql_join}
728
+ WHERE 1=1 {$sql_where}
729
+ {$this->sql_order}
730
+ {$this->sql_limit}"
731
+ );
732
+
733
+ $total_users = (int) $wpdb->get_var( 'SELECT FOUND_ROWS()' );
734
+
735
+ $pagination_data = $this->calculate_pagination( $directory_data, $total_users );
736
+
737
+ $sizes = UM()->options()->get( 'cover_thumb_sizes' );
738
+
739
+ $this->cover_size = UM()->mobile()->isTablet() ? $sizes[1] : end( $sizes );
740
+
741
+ $avatar_size = UM()->options()->get( 'profile_photosize' );
742
+ $this->avatar_size = str_replace( 'px', '', $avatar_size );
743
+
744
+ $users = array();
745
+ foreach ( $user_ids as $user_id ) {
746
+ $users[] = $this->build_user_card_data( $user_id, $directory_data );
747
+ }
748
+
749
+ um_reset_user();
750
+ // end of user card
751
+
752
+ wp_send_json_success( array( 'pagination' => $pagination_data, 'users' => $users, 'is_search' => $this->is_search ) );
753
+ }
754
+ }
755
+ }
includes/core/class-member-directory.php CHANGED
@@ -98,6 +98,21 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
98
  }
99
 
100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  /**
102
  * Getting member directory post ID via hash
103
  * Hash is unique attr, which we use visible at frontend
@@ -200,11 +215,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
200
  foreach ( $value as $k ) {
201
  $filter_type = $this->filter_types[ $k ];
202
  if ( ! empty( $filter_type ) ) {
203
- if ( $filter_type == 'select' ) {
204
- if ( ! empty( $_POST[ $k ] ) ) {
205
- $temp_value[ $k ] = trim( $_POST[ $k ] );
206
- }
207
- } elseif ( $filter_type == 'slider' ) {
208
  if ( ! empty( $_POST[ $k ] ) ) {
209
  $temp_value[ $k ] = $_POST[ $k ];
210
  }
@@ -212,12 +223,47 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
212
  if ( ! empty( $_POST[ $k . '_from' ] ) && ! empty( $_POST[ $k . '_to' ] ) ) {
213
  $temp_value[ $k ] = array( $_POST[ $k . '_from' ], $_POST[ $k . '_to' ] );
214
  }
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
216
  }
217
  }
218
  }
219
 
220
  $value = $temp_value;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  }
222
  }
223
 
@@ -245,6 +291,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
245
  'first_name' => __( 'First name', 'ultimate-member' ),
246
  'last_name' => __( 'Last name', 'ultimate-member' ),
247
  'display_name' => __( 'Display name', 'ultimate-member' ),
 
248
  'last_login' => __( 'Last login', 'ultimate-member' ),
249
 
250
  ) );
@@ -372,15 +419,27 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
372
  * @param string $filter
373
  * @param array $directory_data
374
  * @param mixed $default_value
 
375
  *
376
  * @return string $filter
377
  */
378
- function show_filter( $filter, $directory_data, $default_value = false ) {
379
 
380
  if ( empty( $this->filter_types[ $filter ] ) ) {
381
  return '';
382
  }
383
 
 
 
 
 
 
 
 
 
 
 
 
384
  $field_key = $filter;
385
  if ( $filter == 'last_login' ) {
386
  $field_key = '_um_last_login';
@@ -444,7 +503,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
444
  * }
445
  * ?>
446
  */
447
- $attrs = apply_filters( 'um_search_fields', $attrs, $field_key );
448
 
449
  $unique_hash = substr( md5( $directory_data['form_id'] ), 10, 5 );
450
 
@@ -458,13 +517,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
458
  break;
459
  }
460
  case 'text': {
461
- $filter_from_url = ! empty( $_GET[ 'filter_' . $filter . '_' . $unique_hash ] ) ? $_GET[ 'filter_' . $filter . '_' . $unique_hash ] : ''; ?>
462
-
463
- <input type="text" autocomplete="off" id="<?php echo $filter; ?>" name="<?php echo $filter; ?>"
464
- placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
465
- value="<?php echo esc_attr( $filter_from_url ) ?>" class="um-form-field" />
466
-
467
- <?php break;
468
  }
469
  case 'select': {
470
 
@@ -480,7 +538,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
480
  "SELECT DISTINCT meta_value
481
  FROM $wpdb->usermeta
482
  WHERE meta_key = %s AND
483
- meta_value != ''",
484
  $attrs['metakey']
485
  )
486
  );
@@ -489,7 +547,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
489
  $values_array = ( ! empty( $users_roles['avail_roles'] ) && is_array( $users_roles['avail_roles'] ) ) ? array_keys( array_filter( $users_roles['avail_roles'] ) ) : array();
490
  }
491
 
492
- if ( ! empty( $values_array ) && in_array( $attrs['type'], array( 'select','multiselect', 'checkbox', 'radio' ) ) ) {
493
  $values_array = array_map( 'maybe_unserialize', $values_array );
494
  $temp_values = array();
495
  foreach ( $values_array as $values ) {
@@ -502,12 +560,11 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
502
  $values_array = array_unique( $temp_values );
503
  }
504
 
505
- if ( empty( $values_array ) ) {
506
  ob_get_clean();
507
  return '';
508
  }
509
 
510
- // old
511
  if ( isset( $attrs['metakey'] ) && strstr( $attrs['metakey'], 'role_' ) ) {
512
  $shortcode_roles = get_post_meta( $directory_data['form_id'], '_um_roles', true );
513
  $um_roles = UM()->roles()->get_roles( false );
@@ -520,6 +577,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
520
  $attrs['options'][ $key ] = $value;
521
  }
522
  }
 
 
 
 
 
 
523
  }
524
  }
525
 
@@ -544,12 +607,14 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
544
  $attrs['options'] = UM()->fields()->get_options_from_callback( $attrs, $attrs['type'] );
545
  }
546
 
547
- if ( $attrs['metakey'] != 'role_select' && empty( $custom_dropdown ) ) {
548
- $attrs['options'] = array_intersect( $attrs['options'], $values_array );
549
- } elseif ( ! empty( $custom_dropdown ) ) {
550
- $attrs['options'] = array_intersect_key( $attrs['options'], array_flip( $values_array ) );
551
- } else {
552
- $attrs['options'] = array_intersect_key( $attrs['options'], array_flip( $values_array ) );
 
 
553
  }
554
 
555
  $attrs['options'] = apply_filters( 'um_member_directory_filter_select_options', $attrs['options'], $values_array, $attrs );
@@ -567,10 +632,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
567
  $attrs['label'] = strip_tags( $attrs['label'] );
568
  }
569
 
570
- ksort( $attrs['options'] ); ?>
 
 
 
 
 
 
571
 
572
- <select class="um-s1" id="<?php echo esc_attr( $filter ); ?>" name="<?php echo esc_attr( $filter ); ?>"
573
- data-placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
 
574
  <?php echo $custom_dropdown; ?>>
575
 
576
  <option></option>
@@ -591,8 +663,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
591
  } ?>
592
 
593
  <option value="<?php echo esc_attr( $opt ); ?>" data-value_label="<?php esc_attr_e( $v, 'ultimate-member' ); ?>"
594
- <?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) ) ?>
595
- <?php selected( $opt === $default_value ) ?>>
 
 
 
 
 
 
 
 
 
596
  <?php _e( $v, 'ultimate-member' ); ?>
597
  </option>
598
 
@@ -605,13 +686,14 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
605
  }
606
  case 'slider': {
607
  $range = $this->slider_filters_range( $filter, $directory_data );
608
- $placeholder = $this->slider_range_placeholder( $filter, $attrs );
 
609
 
610
  if ( $range ) { ?>
611
  <input type="hidden" id="<?php echo $filter; ?>_min" name="<?php echo $filter; ?>[]" class="um_range_min" value="<?php echo ! empty( $default_value ) ? esc_attr( min( $default_value ) ) : '' ?>" />
612
  <input type="hidden" id="<?php echo $filter; ?>_max" name="<?php echo $filter; ?>[]" class="um_range_max" value="<?php echo ! empty( $default_value ) ? esc_attr( max( $default_value ) ) : '' ?>" />
613
  <div class="um-slider" data-field_name="<?php echo $filter; ?>" data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"></div>
614
- <div class="um-slider-range" data-placeholder="<?php echo esc_attr( $placeholder ); ?>" data-label="<?php echo ( ! empty( $attrs['label'] ) ) ? esc_attr__( stripslashes( $attrs['label'] ), 'ultimate-member' ) : ''; ?>"></div>
615
  <?php }
616
 
617
  break;
@@ -625,15 +707,15 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
625
  if ( $range ) { ?>
626
 
627
  <input type="text" id="<?php echo $filter; ?>_from" name="<?php echo $filter; ?>_from" class="um-datepicker-filter"
628
- placeholder="<?php esc_attr_e( sprintf( '%s From', stripslashes( $label ) ), 'ultimate-member' ); ?>"
629
- data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
630
- data-date_min="<?php echo $range[0] ?>" data-date_max="<?php echo $range[1] ?>"
631
- data-filter_name="<?php echo $filter; ?>" data-range="from" data-value="<?php echo ! empty( $default_value ) ? esc_attr( strtotime( min( $default_value ) ) ) : '' ?>" />
632
  <input type="text" id="<?php echo $filter; ?>_to" name="<?php echo $filter; ?>_to" class="um-datepicker-filter"
633
- placeholder="<?php esc_attr_e( sprintf( '%s To', stripslashes( $label ) ), 'ultimate-member' ); ?>"
634
- data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
635
- data-date_min="<?php echo $range[0] ?>" data-date_max="<?php echo $range[1] ?>"
636
- data-filter_name="<?php echo $filter; ?>" data-range="to" data-value="<?php echo ! empty( $default_value ) ? esc_attr( strtotime( max( $default_value ) ) ) : '' ?>" />
637
 
638
  <?php }
639
 
@@ -660,17 +742,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
660
  if ( $range ) { ?>
661
 
662
  <input type="text" id="<?php echo $filter; ?>_from" name="<?php echo $filter; ?>_from" class="um-timepicker-filter"
663
- placeholder="<?php esc_attr_e( sprintf( '%s From', stripslashes( $label ) ), 'ultimate-member' ); ?>"
664
- data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
665
- data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"
666
- data-format="<?php echo esc_attr( $js_format ) ?>" data-intervals="<?php echo esc_attr( $attrs['intervals'] ) ?>"
667
- data-filter_name="<?php echo $filter; ?>" data-range="from" />
668
  <input type="text" id="<?php echo $filter; ?>_to" name="<?php echo $filter; ?>_to" class="um-timepicker-filter"
669
- placeholder="<?php esc_attr_e( sprintf( '%s To', stripslashes( $label ) ), 'ultimate-member' ); ?>"
670
- data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
671
- data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"
672
- data-format="<?php echo esc_attr( $js_format ) ?>" data-intervals="<?php echo esc_attr( $attrs['intervals'] ) ?>"
673
- data-filter_name="<?php echo $filter; ?>" data-range="to" />
674
 
675
  <?php }
676
 
@@ -696,15 +778,18 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
696
  default: {
697
 
698
  global $wpdb;
699
- $meta = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT meta_value
700
- FROM {$wpdb->usermeta}
701
- WHERE meta_key = %s
702
- ORDER BY meta_value DESC", $filter ) );
703
-
704
- if ( empty( $meta ) || count( $meta ) === 1 ) {
705
- $range = false;
706
- } elseif ( ! empty( $meta ) ) {
707
- $range = array( min( $meta ), max( $meta ) );
 
 
 
708
  }
709
 
710
  $range = apply_filters( "um_member_directory_filter_{$filter}_slider", $range, $directory_data );
@@ -713,12 +798,18 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
713
  }
714
  case 'birth_date': {
715
  global $wpdb;
716
- $meta = $wpdb->get_col( "SELECT DISTINCT meta_value FROM {$wpdb->usermeta} WHERE meta_key='birth_date' ORDER BY meta_value DESC" );
717
-
718
- if ( empty( $meta ) || count( $meta ) === 1 ) {
 
 
 
 
 
 
719
  $range = false;
720
- } elseif ( ! empty( $meta ) ) {
721
- $range = array( $this->borndate( strtotime( $meta[0] ) ), $this->borndate( strtotime( $meta[ count( $meta ) - 1 ] ) ) );
722
  }
723
 
724
  break;
@@ -739,15 +830,21 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
739
  switch ( $filter ) {
740
  default: {
741
  $label = ucwords( str_replace( array( 'um_', '_' ), array( '', ' ' ), $filter ) );
742
- $placeholder = apply_filters( 'um_member_directory_filter_slider_range_placeholder', false, $filter );
743
 
744
- if ( ! $placeholder ) {
745
  switch ( $attrs['type'] ) {
746
  default:
747
- $placeholder = "<strong>$label:</strong>&nbsp;{min_range} - {max_range}";
 
 
 
748
  break;
749
  case 'rating':
750
- $placeholder = "<strong>$label:</strong>&nbsp;{min_range} - {max_range}" . __( ' stars', 'ultimate-member' );
 
 
 
751
  break;
752
  }
753
  }
@@ -755,12 +852,15 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
755
  break;
756
  }
757
  case 'birth_date': {
758
- $placeholder = __( '<strong>Age:</strong>&nbsp;{min_range} - {max_range} years old', 'ultimate-member' );
 
 
 
759
  break;
760
  }
761
  }
762
 
763
- return $placeholder;
764
  }
765
 
766
 
@@ -899,9 +999,9 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
899
  }
900
 
901
  $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array(
902
- 'key' => 'account_status',
903
- 'value' => 'approved',
904
- 'compare' => '='
905
  ) ) );
906
  }
907
 
@@ -938,29 +1038,11 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
938
  return;
939
  }
940
 
941
- $meta_query = array(
942
- "relation" => "OR",
943
- array(
944
- 'key' => 'hide_in_members',
945
- 'value' => '',
946
- 'compare' => 'NOT EXISTS'
947
- ),
948
- array(
949
- "relation" => "AND",
950
- array(
951
- 'key' => 'hide_in_members',
952
- 'value' => __( 'Yes', 'ultimate-member' ),
953
- 'compare' => 'NOT LIKE'
954
- ),
955
- array(
956
- 'key' => 'hide_in_members',
957
- 'value' => 'Yes',
958
- 'compare' => 'NOT LIKE'
959
- ),
960
- ),
961
- );
962
-
963
- $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
964
  }
965
 
966
 
@@ -988,7 +1070,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
988
  // add roles to appear in directory
989
  if ( ! empty( $directory_data['roles'] ) ) {
990
  //since WP4.4 use 'role__in' argument
991
- $this->query_args['role__in'] = maybe_unserialize( $directory_data['roles'] );
 
 
 
 
 
992
  }
993
  }
994
 
@@ -1000,29 +1087,11 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1000
  */
1001
  function show_only_with_avatar( $directory_data ) {
1002
  if ( $directory_data['has_profile_photo'] == 1 ) {
1003
- $meta_query = array(
1004
- 'relation' => 'OR',
1005
- array(
1006
- 'key' => 'synced_profile_photo', // addons
1007
- 'value' => '',
1008
- 'compare' => '!='
1009
- ),
1010
- array(
1011
- 'key' => 'profile_photo', // from upload form
1012
- 'value' => '',
1013
- 'compare' => '!='
1014
- )
1015
- );
1016
-
1017
- if ( UM()->options()->get( 'use_gravatars' ) ) {
1018
- $meta_query[] = array(
1019
- 'key' => 'synced_gravatar_hashed_id', // gravatar
1020
- 'value' => '',
1021
- 'compare' => '!='
1022
- );
1023
- }
1024
-
1025
- $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
1026
  }
1027
  }
1028
 
@@ -1035,9 +1104,9 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1035
  function show_only_with_cover( $directory_data ) {
1036
  if ( $directory_data['has_cover_photo'] == 1 ) {
1037
  $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array(
1038
- 'key' => 'cover_photo',
1039
- 'value' => '',
1040
- 'compare' => '!='
1041
  ) ) );
1042
  }
1043
  }
@@ -1098,10 +1167,33 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1098
  $this->query_args['order'] = 'ASC';
1099
  $sortby = ! empty( $_POST['sorting'] ) ? $_POST['sorting'] : $directory_data['sortby'];
1100
 
1101
- if ( $sortby == 'other' && $directory_data['sortby_custom'] ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1102
 
1103
- $this->query_args['meta_key'] = $directory_data['sortby_custom'];
1104
- $this->query_args['orderby'] = 'meta_value, display_name';
1105
 
1106
  } elseif ( 'display_name' == $sortby ) {
1107
 
@@ -1152,6 +1244,22 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1152
  );
1153
  unset( $this->query_args['order'] );
1154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1155
  } else {
1156
 
1157
  if ( strstr( $sortby, '_desc' ) ) {
@@ -1249,20 +1357,20 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1249
  $meta_query = array(
1250
  'relation' => 'OR',
1251
  array(
1252
- 'value' => trim( $_POST['search'] ),
1253
  'compare' => '=',
1254
  ),
1255
  array(
1256
- 'value' => trim( $_POST['search'] ),
1257
  'compare' => 'LIKE',
1258
  ),
1259
  array(
1260
- 'value' => trim( serialize( strval( $_POST['search'] ) ) ),
1261
  'compare' => 'LIKE',
1262
  ),
1263
  );
1264
 
1265
- $meta_query = apply_filters( 'um_member_directory_general_search_meta_query', $meta_query, $_POST['search'] );
1266
 
1267
  $this->query_args['meta_query'][] = $meta_query;
1268
 
@@ -1287,7 +1395,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1287
  function change_meta_sql( $sql, $queries, $type, $primary_table, $primary_id_column, $context ) {
1288
  if ( ! empty( $_POST['search'] ) ) {
1289
  global $wpdb;
1290
- $search = trim( $_POST['search'] );
1291
  if ( ! empty( $search ) ) {
1292
 
1293
  $meta_value = '%' . $wpdb->esc_like( $search ) . '%';
@@ -1313,11 +1421,15 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1313
  $custom_fields[] = $field_key;
1314
  }
1315
 
1316
- $sql['join'] = preg_replace(
1317
- '/(' . $meta_join_for_search . ' ON \( ' . $wpdb->users . '\.ID = ' . $meta_join_for_search . '\.user_id )(\))/im',
1318
- "$1 AND " . $meta_join_for_search . ".meta_key IN( '" . implode( "','", $custom_fields ) . "' ) $2",
1319
- $sql['join']
1320
- );
 
 
 
 
1321
  }
1322
 
1323
  // Add OR instead AND to search in WP core fields user_email, user_login, user_display_name
@@ -1547,7 +1659,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1547
  case 'birth_date':
1548
 
1549
  $from_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ), date( 'Y', time() - min( $value ) * YEAR_IN_SECONDS ) ) );
1550
- $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 ) ) );
1551
 
1552
  $meta_query = array(
1553
  array(
@@ -1626,11 +1738,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1626
  * @param $directory_data
1627
  */
1628
  function default_filters( $directory_data ) {
1629
- //unable default filter in case if we select other filters in frontend filters
1630
- if ( ! empty( $this->custom_filters_in_query ) ) {
1631
- return;
1632
- }
1633
-
1634
  $default_filters = array();
1635
  if ( ! empty( $directory_data['search_filters'] ) ) {
1636
  $default_filters = maybe_unserialize( $directory_data['search_filters'] );
@@ -1643,10 +1750,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1643
  }
1644
 
1645
  foreach ( $default_filters as $field => $value ) {
1646
- //unable default filter in case if we select other value in frontend filters
1647
- // if ( in_array( $field, array_keys( $this->custom_filters_in_query ) ) ) {
1648
- // continue;
1649
- // }
1650
 
1651
  switch ( $field ) {
1652
  default:
@@ -1684,6 +1787,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1684
  $field_query = apply_filters( "um_query_args_{$field}_{$filter_type}__filter", false, $field, $value, $filter_type );
1685
 
1686
  break;
 
 
 
 
 
 
 
 
 
 
 
1687
  case 'select':
1688
  if ( ! is_array( $value ) ) {
1689
  $value = array( $value );
@@ -1867,15 +1981,15 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
1867
  *
1868
  *
1869
  * @param array $directory_data
1870
- * @param \WP_User_Query $result
1871
  *
1872
  * @return array
1873
  */
1874
- function calculate_pagination( $directory_data, $result ) {
1875
 
1876
  $current_page = ! empty( $_POST['page'] ) ? $_POST['page'] : 1;
1877
 
1878
- $total_users = ( ! empty( $directory_data['max_users'] ) && $directory_data['max_users'] <= $result->total_users ) ? $directory_data['max_users'] : $result->total_users;
1879
 
1880
  // number of profiles for mobile
1881
  $profiles_per_page = $directory_data['profiles_per_page'];
@@ -2012,6 +2126,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2012
  * @return array
2013
  */
2014
  function build_user_card_data( $user_id, $directory_data ) {
 
2015
  um_fetch_user( $user_id );
2016
 
2017
  $dropdown_actions = $this->build_user_actions_list( $user_id );
@@ -2030,6 +2145,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2030
  $hook_after_user_name = ob_get_clean();
2031
 
2032
  $data_array = array(
 
2033
  'id' => $user_id,
2034
  'role' => um_user( 'role' ),
2035
  'account_status' => um_user( 'account_status' ),
@@ -2086,7 +2202,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2086
  ) );
2087
  }
2088
 
2089
- $data_array[ "label_{$key}" ] = $label;
2090
  $data_array[ $key ] = $value;
2091
  }
2092
  }
@@ -2101,6 +2217,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2101
  }
2102
 
2103
  $data_array = apply_filters( 'um_ajax_get_members_data', $data_array, $user_id, $directory_data );
 
2104
  um_reset_user_clean();
2105
 
2106
  return $data_array;
@@ -2108,16 +2225,35 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2108
 
2109
 
2110
  /**
2111
- * Main Query function for getting members via AJAX
 
 
2112
  */
2113
- function ajax_get_members() {
2114
- UM()->check_ajax_nonce();
2115
-
2116
  global $wpdb;
2117
 
2118
  $directory_id = $this->get_directory_by_hash( $_POST['directory_id'] );
2119
  $directory_data = UM()->query()->post_data( $directory_id );
2120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2121
  //predefined result for user without capabilities to see other members
2122
  if ( is_user_logged_in() && ! UM()->roles()->um_user_can( 'can_view_all' ) ) {
2123
  $pagination_data = array(
@@ -2132,6 +2268,22 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2132
 
2133
  wp_send_json_success( array( 'users' => array(), 'pagination' => $pagination_data ) );
2134
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2135
 
2136
  do_action( 'um_member_directory_before_query' );
2137
 
@@ -2221,8 +2373,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2221
 
2222
  add_filter( 'get_meta_sql', array( &$this, 'change_meta_sql' ), 10, 6 );
2223
 
 
 
 
 
2224
  $user_query = new \WP_User_Query( $this->query_args );
2225
 
 
 
 
 
 
2226
  remove_filter( 'get_meta_sql', array( &$this, 'change_meta_sql' ), 10 );
2227
 
2228
  /**
@@ -2247,7 +2408,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2247
  */
2248
  do_action( 'um_user_after_query', $this->query_args, $user_query );
2249
 
2250
- $pagination_data = $this->calculate_pagination( $directory_data, $user_query );
2251
 
2252
  $user_ids = ! empty( $user_query->results ) ? array_unique( $user_query->results ) : array();
2253
 
@@ -2290,7 +2451,13 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2290
  um_reset_user();
2291
  // end of user card
2292
 
2293
- wp_send_json_success( array( 'pagination' => $pagination_data, 'users' => $users, 'is_search' => $this->is_search ) );
 
 
 
 
 
 
2294
  }
2295
 
2296
 
@@ -2345,7 +2512,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
2345
  $filter_key = sanitize_key( $_REQUEST['key'] );
2346
  $directory_id = absint( $_REQUEST['directory_id'] );
2347
 
2348
- $html = $this->show_filter( $filter_key, array( 'form_id' => $directory_id ) );
2349
 
2350
  wp_send_json_success( array( 'field_html' => $html ) );
2351
  }
98
  }
99
 
100
 
101
+ /**
102
+ * @return bool
103
+ */
104
+ function get_hide_in_members_default() {
105
+ $default = false;
106
+ $option = UM()->options()->get( 'account_hide_in_directory_default' );
107
+ if ( $option == 'Yes' ) {
108
+ $default = true;
109
+ }
110
+
111
+ $default = apply_filters( 'um_member_directory_hide_in_members_default', $default );
112
+ return $default;
113
+ }
114
+
115
+
116
  /**
117
  * Getting member directory post ID via hash
118
  * Hash is unique attr, which we use visible at frontend
215
  foreach ( $value as $k ) {
216
  $filter_type = $this->filter_types[ $k ];
217
  if ( ! empty( $filter_type ) ) {
218
+ if ( $filter_type == 'slider' ) {
 
 
 
 
219
  if ( ! empty( $_POST[ $k ] ) ) {
220
  $temp_value[ $k ] = $_POST[ $k ];
221
  }
223
  if ( ! empty( $_POST[ $k . '_from' ] ) && ! empty( $_POST[ $k . '_to' ] ) ) {
224
  $temp_value[ $k ] = array( $_POST[ $k . '_from' ], $_POST[ $k . '_to' ] );
225
  }
226
+ } elseif ( $filter_type == 'select' ) {
227
+ if ( ! empty( $_POST[ $k ] ) ) {
228
+ if ( is_array( $_POST[ $k ] ) ) {
229
+ $temp_value[ $k ] = array_map( 'trim', $_POST[ $k ] );
230
+ } else {
231
+ $temp_value[ $k ] = array( trim( $_POST[ $k ] ) );
232
+ }
233
+ }
234
+ } else {
235
+ if ( ! empty( $_POST[ $k ] ) ) {
236
+ $temp_value[ $k ] = trim( $_POST[ $k ] );
237
+ }
238
  }
239
  }
240
  }
241
  }
242
 
243
  $value = $temp_value;
244
+ } elseif ( $key == '_um_sorting_fields' ) {
245
+ if ( ! empty( $value['other_data'] ) ) {
246
+ $other_data = $value['other_data'];
247
+ unset( $value['other_data'] );
248
+
249
+ foreach ( $value as $k => &$row ) {
250
+ if ( ! empty( $other_data[ $k ]['meta_key'] ) ) {
251
+ $metakey = sanitize_key( $other_data[ $k ]['meta_key'] );
252
+ if ( ! empty( $metakey ) ) {
253
+ if ( ! empty( $other_data[ $k ]['label'] ) ) {
254
+ $metalabel = wp_strip_all_tags( $other_data[ $k ]['label'] );
255
+ }
256
+ $row = array(
257
+ $metakey => ! empty( $metalabel ) ? $metalabel : $metakey
258
+ );
259
+ }
260
+ }
261
+ }
262
+ }
263
+ } elseif ( $key == '_um_sortby_custom' ) {
264
+ $value = sanitize_key( $value );
265
+ } elseif ( $key == '_um_sortby_custom_label' ) {
266
+ $value = wp_strip_all_tags( $value );
267
  }
268
  }
269
 
291
  'first_name' => __( 'First name', 'ultimate-member' ),
292
  'last_name' => __( 'Last name', 'ultimate-member' ),
293
  'display_name' => __( 'Display name', 'ultimate-member' ),
294
+ 'last_first_name' => __( 'Last & First name', 'ultimate-member' ),
295
  'last_login' => __( 'Last login', 'ultimate-member' ),
296
 
297
  ) );
419
  * @param string $filter
420
  * @param array $directory_data
421
  * @param mixed $default_value
422
+ * @param bool $admin
423
  *
424
  * @return string $filter
425
  */
426
+ function show_filter( $filter, $directory_data, $default_value = false, $admin = false ) {
427
 
428
  if ( empty( $this->filter_types[ $filter ] ) ) {
429
  return '';
430
  }
431
 
432
+ if ( $default_value === false ) {
433
+ $default_filters = array();
434
+ if ( ! empty( $directory_data['search_filters'] ) ) {
435
+ $default_filters = maybe_unserialize( $directory_data['search_filters'] );
436
+ }
437
+
438
+ if ( ! empty( $default_filters[ $filter ] ) && $this->filter_types[ $filter ] != 'select' ) {
439
+ return '';
440
+ }
441
+ }
442
+
443
  $field_key = $filter;
444
  if ( $filter == 'last_login' ) {
445
  $field_key = '_um_last_login';
503
  * }
504
  * ?>
505
  */
506
+ $attrs = apply_filters( 'um_search_fields', $attrs, $field_key, $directory_data['form_id'] );
507
 
508
  $unique_hash = substr( md5( $directory_data['form_id'] ), 10, 5 );
509
 
517
  break;
518
  }
519
  case 'text': {
520
+ $filter_from_url = ! empty( $_GET[ 'filter_' . $filter . '_' . $unique_hash ] ) ? $_GET[ 'filter_' . $filter . '_' . $unique_hash ] : $default_value; ?>
521
+ <input type="text" autocomplete="off" id="<?php echo $filter; ?>" name="<?php echo $filter; ?>"
522
+ placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
523
+ value="<?php echo esc_attr( $filter_from_url ) ?>" class="um-form-field" />
524
+ <?php
525
+ break;
 
526
  }
527
  case 'select': {
528
 
538
  "SELECT DISTINCT meta_value
539
  FROM $wpdb->usermeta
540
  WHERE meta_key = %s AND
541
+ meta_value != ''",
542
  $attrs['metakey']
543
  )
544
  );
547
  $values_array = ( ! empty( $users_roles['avail_roles'] ) && is_array( $users_roles['avail_roles'] ) ) ? array_keys( array_filter( $users_roles['avail_roles'] ) ) : array();
548
  }
549
 
550
+ if ( ! empty( $values_array ) && in_array( $attrs['type'], array( 'select', 'multiselect', 'checkbox', 'radio' ) ) ) {
551
  $values_array = array_map( 'maybe_unserialize', $values_array );
552
  $temp_values = array();
553
  foreach ( $values_array as $values ) {
560
  $values_array = array_unique( $temp_values );
561
  }
562
 
563
+ if ( $attrs['metakey'] != 'online_status' && empty( $values_array ) ) {
564
  ob_get_clean();
565
  return '';
566
  }
567
 
 
568
  if ( isset( $attrs['metakey'] ) && strstr( $attrs['metakey'], 'role_' ) ) {
569
  $shortcode_roles = get_post_meta( $directory_data['form_id'], '_um_roles', true );
570
  $um_roles = UM()->roles()->get_roles( false );
577
  $attrs['options'][ $key ] = $value;
578
  }
579
  }
580
+ } else {
581
+ $attrs['options'] = array();
582
+
583
+ foreach ( $um_roles as $key => $value ) {
584
+ $attrs['options'][ $key ] = $value;
585
+ }
586
  }
587
  }
588
 
607
  $attrs['options'] = UM()->fields()->get_options_from_callback( $attrs, $attrs['type'] );
608
  }
609
 
610
+ if ( $attrs['metakey'] != 'online_status' ) {
611
+ if ( $attrs['metakey'] != 'role_select' && $attrs['metakey'] != 'mycred_rank' && empty( $custom_dropdown ) ) {
612
+ $attrs['options'] = array_intersect( array_map( 'stripslashes', $attrs['options'] ), $values_array );
613
+ } elseif ( ! empty( $custom_dropdown ) ) {
614
+ $attrs['options'] = array_intersect_key( $attrs['options'], array_flip( $values_array ) );
615
+ } else {
616
+ $attrs['options'] = array_intersect_key( $attrs['options'], array_flip( $values_array ) );
617
+ }
618
  }
619
 
620
  $attrs['options'] = apply_filters( 'um_member_directory_filter_select_options', $attrs['options'], $values_array, $attrs );
632
  $attrs['label'] = strip_tags( $attrs['label'] );
633
  }
634
 
635
+ if ( ! empty( $default_filters[ $filter ] ) ) {
636
+ $attrs['options'] = array_intersect( $attrs['options'], $default_filters[ $filter ] );
637
+ }
638
+
639
+ ksort( $attrs['options'] );
640
+
641
+ $attrs['options'] = apply_filters( 'um_member_directory_filter_select_options_sorted', $attrs['options'], $attrs ); ?>
642
 
643
+ <select class="um-s1" id="<?php echo esc_attr( $filter ); ?>" name="<?php echo esc_attr( $filter ); ?><?php if ( $admin && count( $attrs['options'] ) > 1 ) { ?>[]<?php } ?>"
644
+ data-placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
645
+ <?php if ( $admin && count( $attrs['options'] ) > 1 ) { ?>multiple<?php } ?>
646
  <?php echo $custom_dropdown; ?>>
647
 
648
  <option></option>
663
  } ?>
664
 
665
  <option value="<?php echo esc_attr( $opt ); ?>" data-value_label="<?php esc_attr_e( $v, 'ultimate-member' ); ?>"
666
+ <?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) );
667
+
668
+ if ( $admin ) {
669
+ if ( is_string( $default_value ) ) {
670
+ $default_value = array( $default_value );
671
+ }
672
+
673
+ selected( in_array( $opt, $default_value ) );
674
+ } else {
675
+ selected( $opt === $default_value );
676
+ } ?>>
677
  <?php _e( $v, 'ultimate-member' ); ?>
678
  </option>
679
 
686
  }
687
  case 'slider': {
688
  $range = $this->slider_filters_range( $filter, $directory_data );
689
+
690
+ list( $single_placeholder, $plural_placeholder ) = $this->slider_range_placeholder( $filter, $attrs );
691
 
692
  if ( $range ) { ?>
693
  <input type="hidden" id="<?php echo $filter; ?>_min" name="<?php echo $filter; ?>[]" class="um_range_min" value="<?php echo ! empty( $default_value ) ? esc_attr( min( $default_value ) ) : '' ?>" />
694
  <input type="hidden" id="<?php echo $filter; ?>_max" name="<?php echo $filter; ?>[]" class="um_range_max" value="<?php echo ! empty( $default_value ) ? esc_attr( max( $default_value ) ) : '' ?>" />
695
  <div class="um-slider" data-field_name="<?php echo $filter; ?>" data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"></div>
696
+ <div class="um-slider-range" data-placeholder-s="<?php echo esc_attr( $single_placeholder ); ?>" data-placeholder-p="<?php echo esc_attr( $plural_placeholder ); ?>" data-label="<?php echo ( ! empty( $attrs['label'] ) ) ? esc_attr__( stripslashes( $attrs['label'] ), 'ultimate-member' ) : ''; ?>"></div>
697
  <?php }
698
 
699
  break;
707
  if ( $range ) { ?>
708
 
709
  <input type="text" id="<?php echo $filter; ?>_from" name="<?php echo $filter; ?>_from" class="um-datepicker-filter"
710
+ placeholder="<?php esc_attr_e( sprintf( '%s From', stripslashes( $label ) ), 'ultimate-member' ); ?>"
711
+ data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
712
+ data-date_min="<?php echo $range[0] ?>" data-date_max="<?php echo $range[1] ?>"
713
+ data-filter_name="<?php echo $filter; ?>" data-range="from" data-value="<?php echo ! empty( $default_value ) ? esc_attr( strtotime( min( $default_value ) ) ) : '' ?>" />
714
  <input type="text" id="<?php echo $filter; ?>_to" name="<?php echo $filter; ?>_to" class="um-datepicker-filter"
715
+ placeholder="<?php esc_attr_e( sprintf( '%s To', stripslashes( $label ) ), 'ultimate-member' ); ?>"
716
+ data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
717
+ data-date_min="<?php echo $range[0] ?>" data-date_max="<?php echo $range[1] ?>"
718
+ data-filter_name="<?php echo $filter; ?>" data-range="to" data-value="<?php echo ! empty( $default_value ) ? esc_attr( strtotime( max( $default_value ) ) ) : '' ?>" />
719
 
720
  <?php }
721
 
742
  if ( $range ) { ?>
743
 
744
  <input type="text" id="<?php echo $filter; ?>_from" name="<?php echo $filter; ?>_from" class="um-timepicker-filter"
745
+ placeholder="<?php esc_attr_e( sprintf( '%s From', stripslashes( $label ) ), 'ultimate-member' ); ?>"
746
+ data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
747
+ data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"
748
+ data-format="<?php echo esc_attr( $js_format ) ?>" data-intervals="<?php echo esc_attr( $attrs['intervals'] ) ?>"
749
+ data-filter_name="<?php echo $filter; ?>" data-range="from" />
750
  <input type="text" id="<?php echo $filter; ?>_to" name="<?php echo $filter; ?>_to" class="um-timepicker-filter"
751
+ placeholder="<?php esc_attr_e( sprintf( '%s To', stripslashes( $label ) ), 'ultimate-member' ); ?>"
752
+ data-filter-label="<?php echo esc_attr( stripslashes( $label ) ); ?>"
753
+ data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"
754
+ data-format="<?php echo esc_attr( $js_format ) ?>" data-intervals="<?php echo esc_attr( $attrs['intervals'] ) ?>"
755
+ data-filter_name="<?php echo $filter; ?>" data-range="to" />
756
 
757
  <?php }
758
 
778
  default: {
779
 
780
  global $wpdb;
781
+ $meta = $wpdb->get_row( $wpdb->prepare(
782
+ "SELECT MIN( meta_value ) as min_meta,
783
+ MAX( meta_value ) as max_meta,
784
+ COUNT( DISTINCT meta_value ) as amount
785
+ FROM {$wpdb->usermeta}
786
+ WHERE meta_key = %s",
787
+ $filter
788
+ ), ARRAY_A );
789
+
790
+ $range = false;
791
+ if ( ! empty( $meta['min_meta'] ) && ! empty( $meta['max_meta'] ) ) {
792
+ $range = array( $meta['min_meta'], $meta['max_meta'] );
793
  }
794
 
795
  $range = apply_filters( "um_member_directory_filter_{$filter}_slider", $range, $directory_data );
798
  }
799
  case 'birth_date': {
800
  global $wpdb;
801
+ $meta = $wpdb->get_row(
802
+ "SELECT MIN( meta_value ) as min_meta,
803
+ MAX( meta_value ) as max_meta,
804
+ COUNT( DISTINCT meta_value ) as amount
805
+ FROM {$wpdb->usermeta}
806
+ WHERE meta_key='birth_date'",
807
+ ARRAY_A );
808
+
809
+ if ( empty( $meta ) || ! isset( $meta['amount'] ) || $meta['amount'] === 1 ) {
810
  $range = false;
811
+ } elseif ( ! empty( $meta['min_meta'] ) && ! empty( $meta['max_meta'] ) ) {
812
+ $range = array( $this->borndate( strtotime( $meta['max_meta'] ) ), $this->borndate( strtotime( $meta['min_meta'] ) ) );
813
  }
814
 
815
  break;
830
  switch ( $filter ) {
831
  default: {
832
  $label = ucwords( str_replace( array( 'um_', '_' ), array( '', ' ' ), $filter ) );
833
+ $placeholders = apply_filters( 'um_member_directory_filter_slider_range_placeholder', false, $filter );
834
 
835
+ if ( ! $placeholders ) {
836
  switch ( $attrs['type'] ) {
837
  default:
838
+ $placeholders = array(
839
+ "<strong>$label:</strong>&nbsp;{value}",
840
+ "<strong>$label:</strong>&nbsp;{min_range} - {max_range}",
841
+ );
842
  break;
843
  case 'rating':
844
+ $placeholders = array(
845
+ "<strong>$label:</strong>&nbsp;{value}" . __( ' stars', 'ultimate-member' ),
846
+ "<strong>$label:</strong>&nbsp;{min_range} - {max_range}" . __( ' stars', 'ultimate-member' )
847
+ );
848
  break;
849
  }
850
  }
852
  break;
853
  }
854
  case 'birth_date': {
855
+ $placeholders = array(
856
+ __( '<strong>Age:</strong>&nbsp;{value} years old', 'ultimate-member' ),
857
+ __( '<strong>Age:</strong>&nbsp;{min_range} - {max_range} years old', 'ultimate-member' )
858
+ );
859
  break;
860
  }
861
  }
862
 
863
+ return $placeholders;
864
  }
865
 
866
 
999
  }
1000
 
1001
  $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array(
1002
+ 'key' => 'um_member_directory_data',
1003
+ 'value' => 's:14:"account_status";s:8:"approved";',
1004
+ 'compare' => 'LIKE'
1005
  ) ) );
1006
  }
1007
 
1038
  return;
1039
  }
1040
 
1041
+ $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array(
1042
+ 'key' => 'um_member_directory_data',
1043
+ 'value' => 's:15:"hide_in_members";b:0;',
1044
+ 'compare' => 'LIKE'
1045
+ ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1046
  }
1047
 
1048
 
1070
  // add roles to appear in directory
1071
  if ( ! empty( $directory_data['roles'] ) ) {
1072
  //since WP4.4 use 'role__in' argument
1073
+ if ( ! empty( $this->query_args['role__in'] ) ) {
1074
+ $this->query_args['role__in'] = is_array( $this->query_args['role__in'] ) ? $this->query_args['role__in'] : array( $this->query_args['role__in'] );
1075
+ $this->query_args['role__in'] = array_intersect( $this->query_args['role__in'], maybe_unserialize( $directory_data['roles'] ) );
1076
+ } else {
1077
+ $this->query_args['role__in'] = maybe_unserialize( $directory_data['roles'] );
1078
+ }
1079
  }
1080
  }
1081
 
1087
  */
1088
  function show_only_with_avatar( $directory_data ) {
1089
  if ( $directory_data['has_profile_photo'] == 1 ) {
1090
+ $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array(
1091
+ 'key' => 'um_member_directory_data',
1092
+ 'value' => 's:13:"profile_photo";b:1;',
1093
+ 'compare' => 'LIKE'
1094
+ ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1095
  }
1096
  }
1097
 
1104
  function show_only_with_cover( $directory_data ) {
1105
  if ( $directory_data['has_cover_photo'] == 1 ) {
1106
  $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( array(
1107
+ 'key' => 'um_member_directory_data',
1108
+ 'value' => 's:11:"cover_photo";b:1;',
1109
+ 'compare' => 'LIKE'
1110
  ) ) );
1111
  }
1112
  }
1167
  $this->query_args['order'] = 'ASC';
1168
  $sortby = ! empty( $_POST['sorting'] ) ? $_POST['sorting'] : $directory_data['sortby'];
1169
 
1170
+ $custom_sort = array();
1171
+ $sorting_fields = maybe_unserialize( $directory_data['sorting_fields'] );
1172
+ foreach ( $sorting_fields as $field ) {
1173
+ if ( is_array( $field ) ) {
1174
+ $field_keys = array_keys( $field );
1175
+ $custom_sort[] = $field_keys[0];
1176
+ }
1177
+ }
1178
+
1179
+ if ( $sortby == $directory_data['sortby_custom'] || in_array( $sortby, $custom_sort ) ) {
1180
+
1181
+ $custom_sort_type = apply_filters( 'um_member_directory_custom_sorting_type', 'CHAR', $sortby, $directory_data );
1182
+
1183
+ $this->query_args['meta_query'][] = array(
1184
+ 'relation' => 'OR',
1185
+ $sortby . '_cs' => array(
1186
+ 'key' => $sortby,
1187
+ 'compare' => 'EXISTS',
1188
+ 'type' => $custom_sort_type,
1189
+ ),
1190
+ array(
1191
+ 'key' => $sortby,
1192
+ 'compare' => 'NOT EXISTS',
1193
+ )
1194
+ );
1195
 
1196
+ $this->query_args['orderby'] = array( $sortby . '_cs' => 'ASC', 'user_login' => 'ASC' );
 
1197
 
1198
  } elseif ( 'display_name' == $sortby ) {
1199
 
1244
  );
1245
  unset( $this->query_args['order'] );
1246
 
1247
+ } elseif ( $sortby == 'last_first_name' ) {
1248
+
1249
+ $this->query_args['meta_query'][] = array(
1250
+ 'last_name_c' => array(
1251
+ 'key' => 'last_name',
1252
+ 'compare' => 'EXISTS',
1253
+ ),
1254
+ 'first_name_c' => array(
1255
+ 'key' => 'first_name',
1256
+ 'compare' => 'EXISTS',
1257
+ ),
1258
+ );
1259
+
1260
+ $this->query_args['orderby'] = array( 'last_name_c' => 'ASC', 'first_name_c' => 'ASC' );
1261
+ unset( $this->query_args['order'] );
1262
+
1263
  } else {
1264
 
1265
  if ( strstr( $sortby, '_desc' ) ) {
1357
  $meta_query = array(
1358
  'relation' => 'OR',
1359
  array(
1360
+ 'value' => trim( stripslashes( $_POST['search'] ) ),
1361
  'compare' => '=',
1362
  ),
1363
  array(
1364
+ 'value' => trim( stripslashes( $_POST['search'] ) ),
1365
  'compare' => 'LIKE',
1366
  ),
1367
  array(
1368
+ 'value' => trim( serialize( strval( stripslashes( $_POST['search'] ) ) ) ),
1369
  'compare' => 'LIKE',
1370
  ),
1371
  );
1372
 
1373
+ $meta_query = apply_filters( 'um_member_directory_general_search_meta_query', $meta_query, stripslashes( $_POST['search'] ) );
1374
 
1375
  $this->query_args['meta_query'][] = $meta_query;
1376
 
1395
  function change_meta_sql( $sql, $queries, $type, $primary_table, $primary_id_column, $context ) {
1396
  if ( ! empty( $_POST['search'] ) ) {
1397
  global $wpdb;
1398
+ $search = trim( stripslashes( $_POST['search'] ) );
1399
  if ( ! empty( $search ) ) {
1400
 
1401
  $meta_value = '%' . $wpdb->esc_like( $search ) . '%';
1421
  $custom_fields[] = $field_key;
1422
  }
1423
 
1424
+ $custom_fields = apply_filters( 'um_general_search_custom_fields', $custom_fields );
1425
+
1426
+ if ( ! empty( $custom_fields ) ) {
1427
+ $sql['join'] = preg_replace(
1428
+ '/(' . $meta_join_for_search . ' ON \( ' . $wpdb->users . '\.ID = ' . $meta_join_for_search . '\.user_id )(\))/im',
1429
+ "$1 AND " . $meta_join_for_search . ".meta_key IN( '" . implode( "','", $custom_fields ) . "' ) $2",
1430
+ $sql['join']
1431
+ );
1432
+ }
1433
  }
1434
 
1435
  // Add OR instead AND to search in WP core fields user_email, user_login, user_display_name
1659
  case 'birth_date':
1660
 
1661
  $from_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ), date( 'Y', time() - min( $value ) * YEAR_IN_SECONDS ) ) );
1662
+ $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 ) );
1663
 
1664
  $meta_query = array(
1665
  array(
1738
  * @param $directory_data
1739
  */
1740
  function default_filters( $directory_data ) {
 
 
 
 
 
1741
  $default_filters = array();
1742
  if ( ! empty( $directory_data['search_filters'] ) ) {
1743
  $default_filters = maybe_unserialize( $directory_data['search_filters'] );
1750
  }
1751
 
1752
  foreach ( $default_filters as $field => $value ) {
 
 
 
 
1753
 
1754
  switch ( $field ) {
1755
  default:
1787
  $field_query = apply_filters( "um_query_args_{$field}_{$filter_type}__filter", false, $field, $value, $filter_type );
1788
 
1789
  break;
1790
+
1791
+ case 'text':
1792
+
1793
+ $field_query = array(
1794
+ 'key' => $field,
1795
+ 'value' => $value,
1796
+ 'compare' => '=',
1797
+ );
1798
+
1799
+ break;
1800
+
1801
  case 'select':
1802
  if ( ! is_array( $value ) ) {
1803
  $value = array( $value );
1981
  *
1982
  *
1983
  * @param array $directory_data
1984
+ * @param int $total_users
1985
  *
1986
  * @return array
1987
  */
1988
+ function calculate_pagination( $directory_data, $total_users ) {
1989
 
1990
  $current_page = ! empty( $_POST['page'] ) ? $_POST['page'] : 1;
1991
 
1992
+ $total_users = ( ! empty( $directory_data['max_users'] ) && $directory_data['max_users'] <= $total_users ) ? $directory_data['max_users'] : $total_users;
1993
 
1994
  // number of profiles for mobile
1995
  $profiles_per_page = $directory_data['profiles_per_page'];
2126
  * @return array
2127
  */
2128
  function build_user_card_data( $user_id, $directory_data ) {
2129
+
2130
  um_fetch_user( $user_id );
2131
 
2132
  $dropdown_actions = $this->build_user_actions_list( $user_id );
2145
  $hook_after_user_name = ob_get_clean();
2146
 
2147
  $data_array = array(
2148
+ 'card_anchor' => substr( md5( $user_id ), 10, 5 ),
2149
  'id' => $user_id,
2150
  'role' => um_user( 'role' ),
2151
  'account_status' => um_user( 'account_status' ),
2202
  ) );
2203
  }
2204
 
2205
+ $data_array[ "label_{$key}" ] = __( $label, 'ultimate-member' );
2206
  $data_array[ $key ] = $value;
2207
  }
2208
  }
2217
  }
2218
 
2219
  $data_array = apply_filters( 'um_ajax_get_members_data', $data_array, $user_id, $directory_data );
2220
+
2221
  um_reset_user_clean();
2222
 
2223
  return $data_array;
2225
 
2226
 
2227
  /**
2228
+ * Update limit query
2229
+ *
2230
+ * @param $user_query
2231
  */
2232
+ function pagination_changes( $user_query ) {
 
 
2233
  global $wpdb;
2234
 
2235
  $directory_id = $this->get_directory_by_hash( $_POST['directory_id'] );
2236
  $directory_data = UM()->query()->post_data( $directory_id );
2237
 
2238
+ $qv = $user_query->query_vars;
2239
+
2240
+ $number = $qv['number'];
2241
+ if ( ! empty( $directory_data['max_users'] ) && $qv['paged']*$qv['number'] > $directory_data['max_users'] ) {
2242
+ $number = ( $qv['paged']*$qv['number'] - ( $qv['paged']*$qv['number'] - $directory_data['max_users'] ) ) % $qv['number'];
2243
+ }
2244
+
2245
+ // limit
2246
+ if ( isset( $qv['number'] ) && $qv['number'] > 0 ) {
2247
+ if ( $qv['offset'] ) {
2248
+ $user_query->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $number );
2249
+ } else {
2250
+ $user_query->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $number );
2251
+ }
2252
+ }
2253
+ }
2254
+
2255
+
2256
+ function predefined_no_caps( $directory_data ) {
2257
  //predefined result for user without capabilities to see other members
2258
  if ( is_user_logged_in() && ! UM()->roles()->um_user_can( 'can_view_all' ) ) {
2259
  $pagination_data = array(
2268
 
2269
  wp_send_json_success( array( 'users' => array(), 'pagination' => $pagination_data ) );
2270
  }
2271
+ }
2272
+
2273
+
2274
+ /**
2275
+ * Main Query function for getting members via AJAX
2276
+ */
2277
+ function ajax_get_members() {
2278
+ UM()->check_ajax_nonce();
2279
+
2280
+ global $wpdb;
2281
+
2282
+ $directory_id = $this->get_directory_by_hash( $_POST['directory_id'] );
2283
+ $directory_data = UM()->query()->post_data( $directory_id );
2284
+
2285
+ //predefined result for user without capabilities to see other members
2286
+ $this->predefined_no_caps( $directory_data );
2287
 
2288
  do_action( 'um_member_directory_before_query' );
2289
 
2373
 
2374
  add_filter( 'get_meta_sql', array( &$this, 'change_meta_sql' ), 10, 6 );
2375
 
2376
+ add_filter( 'pre_user_query', array( &$this, 'pagination_changes' ), 10, 1 );
2377
+
2378
+ //var_dump( $this->query_args );
2379
+
2380
  $user_query = new \WP_User_Query( $this->query_args );
2381
 
2382
+ //var_dump( $user_query->request );
2383
+ //exit;
2384
+
2385
+ remove_filter( 'pre_user_query', array( &$this, 'pagination_changes' ), 10 );
2386
+
2387
  remove_filter( 'get_meta_sql', array( &$this, 'change_meta_sql' ), 10 );
2388
 
2389
  /**
2408
  */
2409
  do_action( 'um_user_after_query', $this->query_args, $user_query );
2410
 
2411
+ $pagination_data = $this->calculate_pagination( $directory_data, $user_query->total_users );
2412
 
2413
  $user_ids = ! empty( $user_query->results ) ? array_unique( $user_query->results ) : array();
2414
 
2451
  um_reset_user();
2452
  // end of user card
2453
 
2454
+ $member_directory_response = apply_filters( 'um_ajax_get_members_response', array(
2455
+ 'pagination' => $pagination_data,
2456
+ 'users' => $users,
2457
+ 'is_search' => $this->is_search,
2458
+ ), $directory_data );
2459
+
2460
+ wp_send_json_success( $member_directory_response );
2461
  }
2462
 
2463
 
2512
  $filter_key = sanitize_key( $_REQUEST['key'] );
2513
  $directory_id = absint( $_REQUEST['directory_id'] );
2514
 
2515
+ $html = $this->show_filter( $filter_key, array( 'form_id' => $directory_id ), false, true );
2516
 
2517
  wp_send_json_success( array( 'field_html' => $html ) );
2518
  }
includes/core/class-password.php CHANGED
@@ -161,6 +161,8 @@ if ( ! class_exists( 'um\core\Password' ) ) {
161
  }
162
  }
163
 
 
 
164
  /**
165
  * @var $mode
166
  * @var $template
161
  }
162
  }
163
 
164
+ UM()->fields()->set_id = 'um_password_id';
165
+
166
  /**
167
  * @var $mode
168
  * @var $template
includes/core/class-permalinks.php CHANGED
@@ -136,9 +136,14 @@ if ( ! class_exists( 'um\core\Permalinks' ) ) {
136
  //check if WP-CLI there isn't set HTTP_HOST, use localhost instead
137
  if ( defined( 'WP_CLI' ) && WP_CLI ) {
138
  $host = isset( $_SERVER['HTTP_HOST'] ) ? $_SERVER['HTTP_HOST'] : 'localhost';
139
- } else {
140
- $host = $_SERVER['HTTP_HOST'];
141
- }
 
 
 
 
 
142
  $page_url = ( is_ssl() ? 'https://' : 'http://' ) . $host . $_SERVER['REQUEST_URI'];
143
 
144
  if ( $no_query_params == true ) {
136
  //check if WP-CLI there isn't set HTTP_HOST, use localhost instead
137
  if ( defined( 'WP_CLI' ) && WP_CLI ) {
138
  $host = isset( $_SERVER['HTTP_HOST'] ) ? $_SERVER['HTTP_HOST'] : 'localhost';
139
+ } else{
140
+ if ( isset( $_SERVER['HTTP_HOST'] ) ) {
141
+ $host = $_SERVER['HTTP_HOST'];
142
+ }else{
143
+ $host = 'localhost';
144
+ }
145
+ }
146
+
147
  $page_url = ( is_ssl() ? 'https://' : 'http://' ) . $host . $_SERVER['REQUEST_URI'];
148
 
149
  if ( $no_query_params == true ) {
includes/core/class-plugin-updater.php CHANGED
@@ -159,10 +159,14 @@ if ( ! class_exists( 'um\core\Plugin_Updater' ) ) {
159
  'key' => 'filesharing',
160
  'title' => 'File Sharing',
161
  ),
162
- 'um-user-location/um-user-location.php' => array(
163
  'key' => 'user-location',
164
  'title' => 'User Location',
165
  ),
 
 
 
 
166
  );
167
 
168
  $active_um_plugins = array();
@@ -270,6 +274,19 @@ if ( ! class_exists( 'um\core\Plugin_Updater' ) ) {
270
 
271
  if ( ! is_wp_error( $request ) ) {
272
  $request = json_decode( wp_remote_retrieve_body( $request ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  }
274
 
275
  $request = ( $request ) ? maybe_unserialize( $request ) : false;
159
  'key' => 'filesharing',
160
  'title' => 'File Sharing',
161
  ),
162
+ 'um-user-location/um-user-location.php' => array(
163
  'key' => 'user-location',
164
  'title' => 'User Location',
165
  ),
166
+ 'um-profile-tabs/um-profile-tabs.php' => array(
167
+ 'key' => 'profile_tabs',
168
+ 'title' => 'Profile tabs',
169
+ ),
170
  );
171
 
172
  $active_um_plugins = array();
274
 
275
  if ( ! is_wp_error( $request ) ) {
276
  $request = json_decode( wp_remote_retrieve_body( $request ) );
277
+ } else {
278
+ $request = wp_remote_post(
279
+ UM()->store_url,
280
+ array(
281
+ 'timeout' => UM()->request_timeout,
282
+ 'sslverify' => true,
283
+ 'body' => $api_params
284
+ )
285
+ );
286
+
287
+ if ( ! is_wp_error( $request ) ) {
288
+ $request = json_decode( wp_remote_retrieve_body( $request ) );
289
+ }
290
  }
291
 
292
  $request = ( $request ) ? maybe_unserialize( $request ) : false;
includes/core/class-profile.php CHANGED
@@ -41,6 +41,17 @@ if ( ! class_exists( 'um\core\Profile' ) ) {
41
  }
42
 
43
 
 
 
 
 
 
 
 
 
 
 
 
44
  /**
45
  * Delete profile avatar AJAX handler
46
  */
41
  }
42
 
43
 
44
+ /**
45
+ * @param array $args
46
+ *
47
+ * @return string
48
+ */
49
+ function get_show_bio_key( $args ) {
50
+ $key = apply_filters( 'um_profile_bio_key', 'description', $args );
51
+ return $key;
52
+ }
53
+
54
+
55
  /**
56
  * Delete profile avatar AJAX handler
57
  */
includes/core/class-rewrite.php CHANGED
@@ -95,32 +95,24 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) {
95
  if ( isset( $user->post_name ) ) {
96
 
97
  $user_slug = $user->post_name;
 
 
98
 
99
- $add_lang_code = '';
100
- $language_code = '';
101
 
102
- if ( function_exists('icl_object_id') || function_exists('icl_get_current_language') ) {
103
 
104
- if ( function_exists('icl_get_current_language') ) {
105
- $language_code = icl_get_current_language();
106
- } elseif( function_exists('icl_object_id') && defined('ICL_LANGUAGE_CODE') ) {
107
- $language_code = ICL_LANGUAGE_CODE;
108
- }
109
 
110
- // User page translated slug
111
- $lang_post_id = icl_object_id( $user->ID, 'post', FALSE, $language_code );
112
  $lang_post_obj = get_post( $lang_post_id );
113
- if( isset( $lang_post_obj->post_name ) ){
114
- $user_slug = $lang_post_obj->post_name;
115
- }
116
 
117
- if( $language_code != icl_get_default_language() ){
118
- $add_lang_code = $language_code;
 
119
  }
120
-
121
  }
122
-
123
- $newrules[ $user_slug.'/([^/]+)/?$' ] = 'index.php?page_id='.$user_page_id.'&um_user=$matches[1]&lang='.$add_lang_code;
124
  }
125
  }
126
 
@@ -132,35 +124,25 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) {
132
  if ( isset( $account->post_name ) ) {
133
 
134
  $account_slug = $account->post_name;
 
 
135
 
136
- $add_lang_code = '';
137
- $language_code = '';
138
 
139
- if ( function_exists('icl_object_id') || function_exists('icl_get_current_language') ) {
140
 
141
- if ( function_exists('icl_get_current_language') ){
142
- $language_code = icl_get_current_language();
143
- } elseif( function_exists('icl_object_id') && defined('ICL_LANGUAGE_CODE') ) {
144
- $language_code = ICL_LANGUAGE_CODE;
145
- }
146
 
147
- // Account page translated slug
148
- $lang_post_id = icl_object_id( $account->ID, 'post', FALSE, $language_code );
149
  $lang_post_obj = get_post( $lang_post_id );
150
- if ( isset( $lang_post_obj->post_name ) ){
151
- $account_slug = $lang_post_obj->post_name;
152
- }
153
 
154
- if ( $language_code != icl_get_default_language() ) {
155
- $add_lang_code = $language_code;
 
156
  }
157
-
158
  }
159
-
160
- $newrules[ $account_slug.'/([^/]+)?$' ] = 'index.php?page_id='.$account_page_id.'&um_tab=$matches[1]&lang='.$add_lang_code;
161
-
162
  }
163
-
164
  }
165
 
166
  return $newrules + $rules;
95
  if ( isset( $user->post_name ) ) {
96
 
97
  $user_slug = $user->post_name;
98
+ $newrules[ $user_slug . '/([^/]+)/?$' ] = 'index.php?page_id=' . $user_page_id . '&um_user=$matches[1]';
99
+ }
100
 
101
+ if ( UM()->external_integrations()->is_wpml_active() ) {
102
+ global $sitepress;
103
 
104
+ $active_languages = $sitepress->get_active_languages();
105
 
106
+ foreach ( $active_languages as $language_code => $language ) {
 
 
 
 
107
 
108
+ $lang_post_id = wpml_object_id_filter( $user_page_id, 'post', false, $language_code );
 
109
  $lang_post_obj = get_post( $lang_post_id );
 
 
 
110
 
111
+ if ( isset( $lang_post_obj->post_name ) && $lang_post_obj->post_name != $user->post_name ) {
112
+ $user_slug = $lang_post_obj->post_name;
113
+ $newrules[ $user_slug . '/([^/]+)/?$' ] = 'index.php?page_id=' . $lang_post_id . '&um_user=$matches[1]&lang=' . $language_code;
114
  }
 
115
  }
 
 
116
  }
117
  }
118
 
124
  if ( isset( $account->post_name ) ) {
125
 
126
  $account_slug = $account->post_name;
127
+ $newrules[ $account_slug . '/([^/]+)?$' ] = 'index.php?page_id=' . $account_page_id . '&um_tab=$matches[1]';
128
+ }
129
 
130
+ if ( UM()->external_integrations()->is_wpml_active() ) {
131
+ global $sitepress;
132
 
133
+ $active_languages = $sitepress->get_active_languages();
134
 
135
+ foreach ( $active_languages as $language_code => $language ) {
 
 
 
 
136
 
137
+ $lang_post_id = wpml_object_id_filter( $account_page_id, 'post', false, $language_code );
 
138
  $lang_post_obj = get_post( $lang_post_id );
 
 
 
139
 
140
+ if ( isset( $lang_post_obj->post_name ) && $lang_post_obj->post_name != $account->post_name ) {
141
+ $account_slug = $lang_post_obj->post_name;
142
+ $newrules[ $account_slug . '/([^/]+)/?$' ] = 'index.php?page_id=' . $lang_post_id . '&um_user=$matches[1]&lang=' . $language_code;
143
  }
 
144
  }
 
 
 
145
  }
 
146
  }
147
 
148
  return $newrules + $rules;
includes/core/class-roles-capabilities.php CHANGED
@@ -566,8 +566,8 @@ if ( ! class_exists( 'um\core\Roles_Capabilities' ) ) {
566
  }
567
 
568
  if ( $exclude ) {
569
- foreach( $exclude as $role ) {
570
- unset( $roles[$role] );
571
  }
572
  }
573
 
566
  }
567
 
568
  if ( $exclude ) {
569
+ foreach ( $exclude as $role ) {
570
+ unset ( $roles[ $role ] );
571
  }
572
  }
573
 
includes/core/class-setup.php CHANGED
@@ -27,6 +27,7 @@ if ( ! class_exists( 'um\core\Setup' ) ) {
27
  * Run setup
28
  */
29
  function run_setup() {
 
30
  $this->install_basics();
31
  $this->install_default_forms();
32
  $this->set_default_settings();
@@ -34,6 +35,30 @@ if ( ! class_exists( 'um\core\Setup' ) ) {
34
  }
35
 
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  /**
38
  * Basics
39
  */
27
  * Run setup
28
  */
29
  function run_setup() {
30
+ $this->create_db();
31
  $this->install_basics();
32
  $this->install_default_forms();
33
  $this->set_default_settings();
35
  }
36
 
37
 
38
+ /**
39
+ * Create custom DB tables
40
+ */
41
+ function create_db() {
42
+ global $wpdb;
43
+
44
+ $charset_collate = $wpdb->get_charset_collate();
45
+
46
+ $sql = "CREATE TABLE {$wpdb->prefix}um_metadata (
47
+ umeta_id bigint(20) unsigned NOT NULL auto_increment,
48
+ user_id bigint(20) unsigned NOT NULL default '0',
49
+ um_key varchar(255) default NULL,
50
+ um_value longtext default NULL,
51
+ PRIMARY KEY (umeta_id),
52
+ KEY user_id_indx (user_id),
53
+ KEY meta_key_indx (um_key),
54
+ KEY meta_value_indx (um_value(191))
55
+ ) $charset_collate;";
56
+
57
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
58
+ dbDelta( $sql );
59
+ }
60
+
61
+
62
  /**
63
  * Basics
64
  */
includes/core/class-shortcodes.php CHANGED
@@ -377,7 +377,8 @@ if ( ! class_exists( 'um\core\Shortcodes' ) ) {
377
  }
378
 
379
  $output = ob_get_clean();
380
- return htmlspecialchars_decode( $output );
 
381
  }
382
 
383
 
377
  }
378
 
379
  $output = ob_get_clean();
380
+
381
+ return htmlspecialchars_decode( $output, ENT_NOQUOTES );
382
  }
383
 
384
 
includes/core/class-uploader.php CHANGED
@@ -1176,6 +1176,7 @@ if ( ! class_exists( 'um\core\Uploader' ) ) {
1176
  */
1177
  function move_temporary_files( $user_id, $files, $move_only = false ) {
1178
  $new_files = array();
 
1179
 
1180
  $user_basedir = UM()->uploader()->get_upload_user_base_dir( $user_id, true );
1181
 
@@ -1202,7 +1203,7 @@ if ( ! class_exists( 'um\core\Uploader' ) ) {
1202
 
1203
  delete_user_meta( $user_id, $key );
1204
  delete_user_meta( $user_id, "{$key}_metadata" );
1205
- delete_transient("um_{$filename}");
1206
 
1207
  continue;
1208
  }
@@ -1226,17 +1227,19 @@ if ( ! class_exists( 'um\core\Uploader' ) ) {
1226
 
1227
  if ( $move_only ) {
1228
 
1229
- $file = $user_basedir. DIRECTORY_SEPARATOR . $filename;
1230
- $new_files[ $key ] = $filename;
1231
- rename( $temp_file_path, $file );
 
1232
 
1233
  } else {
1234
 
1235
- $file = $user_basedir. DIRECTORY_SEPARATOR . $new_filename;
1236
-
1237
- $new_files[ $key ] = $new_filename;
1238
 
1239
  if ( rename( $temp_file_path, $file ) ) {
 
 
 
1240
  update_user_meta( $user_id, $key, $new_filename );
1241
 
1242
  $file_info = get_transient( "um_{$filename}" );
@@ -1256,7 +1259,7 @@ if ( ! class_exists( 'um\core\Uploader' ) ) {
1256
  }
1257
 
1258
  //remove user old files
1259
- $this->remove_unused_uploads( $user_id, $new_files );
1260
  }
1261
 
1262
 
@@ -1265,12 +1268,18 @@ if ( ! class_exists( 'um\core\Uploader' ) ) {
1265
  *
1266
  * @param int $user_id
1267
  * @param array $new_files
 
1268
  */
1269
- function remove_unused_uploads( $user_id, $new_files ) {
1270
  um_fetch_user( $user_id );
 
 
 
 
 
1271
  $user_meta_keys = UM()->user()->profile;
1272
 
1273
- $_array = array();
1274
  if ( ! empty( UM()->builtin()->custom_fields ) ) {
1275
  foreach ( UM()->builtin()->custom_fields as $_field ) {
1276
  if ( $_field['type'] == 'file' && ! empty( $user_meta_keys[ $_field['metakey'] ] ) ) {
@@ -1278,17 +1287,18 @@ if ( ! class_exists( 'um\core\Uploader' ) ) {
1278
  }
1279
  }
1280
  }
1281
- $_array = array_merge( $_array, $new_files );
1282
 
1283
  $files = glob( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . '*', GLOB_BRACE );
1284
- $error = array();
1285
- if ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR ) && $files && isset( $_array ) && is_array( $_array ) ) {
1286
  foreach ( $files as $file ) {
1287
  $str = basename( $file );
1288
 
 
 
 
 
1289
  if ( ! strstr( $str, 'profile_photo' ) && ! strstr( $str, 'cover_photo' ) &&
1290
  ! strstr( $str, 'stream_photo' ) && ! preg_grep( '/' . $str . '/', $_array ) ) {
1291
- $error[] = $str;
1292
  unlink( $file );
1293
  }
1294
  }
1176
  */
1177
  function move_temporary_files( $user_id, $files, $move_only = false ) {
1178
  $new_files = array();
1179
+ $old_files = array();
1180
 
1181
  $user_basedir = UM()->uploader()->get_upload_user_base_dir( $user_id, true );
1182
 
1203
 
1204
  delete_user_meta( $user_id, $key );
1205
  delete_user_meta( $user_id, "{$key}_metadata" );
1206
+ delete_transient( "um_{$filename}" );
1207
 
1208
  continue;
1209
  }
1227
 
1228
  if ( $move_only ) {
1229
 
1230
+ $file = $user_basedir . DIRECTORY_SEPARATOR . $filename;
1231
+ if ( rename( $temp_file_path, $file ) ) {
1232
+ $new_files[ $key ] = $filename;
1233
+ }
1234
 
1235
  } else {
1236
 
1237
+ $file = $user_basedir . DIRECTORY_SEPARATOR . $new_filename;
 
 
1238
 
1239
  if ( rename( $temp_file_path, $file ) ) {
1240
+ $new_files[ $key ] = $new_filename;
1241
+ $old_files[ $key ] = get_user_meta( $user_id, $key, true );
1242
+
1243
  update_user_meta( $user_id, $key, $new_filename );
1244
 
1245
  $file_info = get_transient( "um_{$filename}" );
1259
  }
1260
 
1261
  //remove user old files
1262
+ $this->remove_unused_uploads( $user_id, $new_files, $old_files );
1263
  }
1264
 
1265
 
1268
  *
1269
  * @param int $user_id
1270
  * @param array $new_files
1271
+ * @param array $old_files
1272
  */
1273
+ function remove_unused_uploads( $user_id, $new_files, $old_files = array() ) {
1274
  um_fetch_user( $user_id );
1275
+
1276
+ if ( ! file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR ) ) {
1277
+ return;
1278
+ }
1279
+
1280
  $user_meta_keys = UM()->user()->profile;
1281
 
1282
+ $_array = $new_files;
1283
  if ( ! empty( UM()->builtin()->custom_fields ) ) {
1284
  foreach ( UM()->builtin()->custom_fields as $_field ) {
1285
  if ( $_field['type'] == 'file' && ! empty( $user_meta_keys[ $_field['metakey'] ] ) ) {
1287
  }
1288
  }
1289
  }
 
1290
 
1291
  $files = glob( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . '*', GLOB_BRACE );
1292
+ if ( ! empty( $files ) ) {
 
1293
  foreach ( $files as $file ) {
1294
  $str = basename( $file );
1295
 
1296
+ if ( preg_grep( '/' . $str . '/i', $old_files ) ) {
1297
+ unlink( $file );
1298
+ }
1299
+
1300
  if ( ! strstr( $str, 'profile_photo' ) && ! strstr( $str, 'cover_photo' ) &&
1301
  ! strstr( $str, 'stream_photo' ) && ! preg_grep( '/' . $str . '/', $_array ) ) {
 
1302
  unlink( $file );
1303
  }
1304
  }
includes/core/class-user-posts.php CHANGED
@@ -60,7 +60,13 @@ if ( ! class_exists( 'um\core\User_posts' ) ) {
60
  $args = apply_filters( 'um_profile_query_make_posts', $args );
61
  $posts = get_posts( $args );
62
 
63
- $count_posts = (int) count_user_posts( um_get_requested_user(), 'post', true );
 
 
 
 
 
 
64
 
65
  UM()->get_template( 'profile/posts.php', '', array( 'posts' => $posts, 'count_posts' => $count_posts ), true );
66
  }
60
  $args = apply_filters( 'um_profile_query_make_posts', $args );
61
  $posts = get_posts( $args );
62
 
63
+ $args['posts_per_page'] = -1;
64
+ $args['fields'] = 'ids';
65
+ unset( $args['offset'] );
66
+ $count_posts = get_posts( $args );
67
+ if ( ! empty( $count_posts ) && ! is_wp_error( $count_posts ) ) {
68
+ $count_posts = count( $count_posts );
69
+ }
70
 
71
  UM()->get_template( 'profile/posts.php', '', array( 'posts' => $posts, 'count_posts' => $count_posts ), true );
72
  }
includes/core/class-user.php CHANGED
@@ -93,6 +93,156 @@ if ( ! class_exists( 'um\core\User' ) ) {
93
  } else {
94
  add_action( 'delete_user', array( &$this, 'delete_user_handler' ), 10, 1 );
95
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  }
97
 
98
 
@@ -1446,7 +1596,7 @@ if ( ! class_exists( 'um\core\User' ) ) {
1446
  if ( ! empty( $this->profile['role'] ) ) {
1447
  return $this->profile['role'];
1448
  } else {
1449
- if ( $this->profile['wp_roles'] == 'administrator' ) {
1450
  return 'admin';
1451
  } else {
1452
  return 'member';
93
  } else {
94
  add_action( 'delete_user', array( &$this, 'delete_user_handler' ), 10, 1 );
95
  }
96
+
97
+
98
+ add_action( 'updated_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 );
99
+ add_action( 'added_user_meta', array( &$this, 'on_update_usermeta' ), 10, 4 );
100
+
101
+ add_action( 'deleted_user_meta', array( &$this, 'on_delete_usermeta' ), 10, 4 );
102
+ }
103
+
104
+
105
+ /**
106
+ * When you delete usermeta connected with member directory - reset it to default value
107
+ *
108
+ * @param int|array $meta_ids
109
+ * @param int $object_id
110
+ * @param string $meta_key
111
+ * @param mixed $_meta_value
112
+ */
113
+ function on_delete_usermeta( $meta_ids, $object_id, $meta_key, $_meta_value ) {
114
+ $metakeys = array( 'account_status', 'hide_in_members', 'synced_gravatar_hashed_id', 'synced_profile_photo', 'profile_photo', 'cover_photo', '_um_verified' );
115
+ if ( ! in_array( $meta_key, $metakeys ) ) {
116
+ return;
117
+ }
118
+
119
+ $md_data = get_user_meta( $object_id, 'um_member_directory_data', true );
120
+ if ( empty( $md_data ) ) {
121
+ $md_data = array(
122
+ 'account_status' => 'approved',
123
+ 'hide_in_members' => UM()->member_directory()->get_hide_in_members_default(),
124
+ 'profile_photo' => false,
125
+ 'cover_photo' => false,
126
+ 'verified' => false,
127
+ );
128
+ }
129
+
130
+ switch ( $meta_key ) {
131
+ case 'account_status':
132
+ $md_data['account_status'] = 'approved';
133
+ break;
134
+ case 'hide_in_members':
135
+ $md_data['hide_in_members'] = UM()->member_directory()->get_hide_in_members_default();
136
+ break;
137
+ case 'synced_gravatar_hashed_id':
138
+ if ( UM()->options()->get( 'use_gravatars' ) ) {
139
+ $profile_photo = get_user_meta( $object_id, 'profile_photo', true );
140
+ $synced_profile_photo = get_user_meta( $object_id, 'synced_profile_photo', true );
141
+
142
+ $md_data['profile_photo'] = ! empty( $profile_photo ) || ! empty( $synced_profile_photo );
143
+ }
144
+
145
+ break;
146
+ case 'synced_profile_photo':
147
+ $profile_photo = get_user_meta( $object_id, 'profile_photo', true );
148
+
149
+ $synced_gravatar_hashed_id = false;
150
+ if ( UM()->options()->get( 'use_gravatars' ) ) {
151
+ $synced_gravatar_hashed_id = get_user_meta( $object_id, 'synced_gravatar_hashed_id', true );
152
+ }
153
+
154
+ $md_data['profile_photo'] = ! empty( $profile_photo ) || ! empty( $synced_gravatar_hashed_id );
155
+ break;
156
+ case 'profile_photo':
157
+ $synced_profile_photo = get_user_meta( $object_id, 'synced_profile_photo', true );
158
+
159
+ $synced_gravatar_hashed_id = false;
160
+ if ( UM()->options()->get( 'use_gravatars' ) ) {
161
+ $synced_gravatar_hashed_id = get_user_meta( $object_id, 'synced_gravatar_hashed_id', true );
162
+ }
163
+
164
+ $md_data['profile_photo'] = ! empty( $synced_profile_photo ) || ! empty( $synced_gravatar_hashed_id );
165
+ break;
166
+ case 'cover_photo':
167
+ $md_data['cover_photo'] = false;
168
+ break;
169
+ case '_um_verified':
170
+ $md_data['verified'] = false;
171
+ break;
172
+ }
173
+
174
+ update_user_meta( $object_id, 'um_member_directory_data', $md_data );
175
+ }
176
+
177
+
178
+ /**
179
+ * When you add/update usermeta connected with member directories - set this data to member directory metakey
180
+ *
181
+ * @param int $meta_id
182
+ * @param int $object_id
183
+ * @param string $meta_key
184
+ * @param mixed $_meta_value
185
+ */
186
+ function on_update_usermeta( $meta_id, $object_id, $meta_key, $_meta_value ) {
187
+
188
+ $metakeys = array( 'account_status', 'hide_in_members', 'synced_gravatar_hashed_id', 'synced_profile_photo', 'profile_photo', 'cover_photo', '_um_verified' );
189
+ if ( ! in_array( $meta_key, $metakeys ) ) {
190
+ return;
191
+ }
192
+
193
+ $md_data = get_user_meta( $object_id, 'um_member_directory_data', true );
194
+ if ( empty( $md_data ) ) {
195
+ $md_data = array(
196
+ 'account_status' => 'approved',
197
+ 'hide_in_members' => UM()->member_directory()->get_hide_in_members_default(),
198
+ 'profile_photo' => false,
199
+ 'cover_photo' => false,
200
+ 'verified' => false,
201
+ );
202
+ }
203
+
204
+ switch ( $meta_key ) {
205
+ case 'account_status':
206
+ $md_data['account_status'] = $_meta_value;
207
+ break;
208
+ case 'hide_in_members':
209
+
210
+ $hide_in_members = UM()->member_directory()->get_hide_in_members_default();
211
+ if ( ! empty( $_meta_value ) ) {
212
+ if ( $_meta_value == 'Yes' || $_meta_value == __( 'Yes', 'ultimate-member' ) ||
213
+ array_intersect( array( 'Yes', __( 'Yes', 'ultimate-member' ) ), $_meta_value ) ) {
214
+ $hide_in_members = true;
215
+ } else {
216
+ $hide_in_members = false;
217
+ }
218
+ }
219
+
220
+ $md_data['hide_in_members'] = $hide_in_members;
221
+
222
+ break;
223
+ case 'synced_gravatar_hashed_id':
224
+ if ( UM()->options()->get( 'use_gravatars' ) ) {
225
+ if ( empty( $md_data['profile_photo'] ) ) {
226
+ $md_data['profile_photo'] = ! empty( $_meta_value );
227
+ }
228
+ }
229
+
230
+ break;
231
+ case 'synced_profile_photo':
232
+ case 'profile_photo':
233
+ if ( empty( $md_data['profile_photo'] ) ) {
234
+ $md_data['profile_photo'] = ! empty( $_meta_value );
235
+ }
236
+ break;
237
+ case 'cover_photo':
238
+ $md_data['cover_photo'] = ! empty( $_meta_value );
239
+ break;
240
+ case '_um_verified':
241
+ $md_data['verified'] = $_meta_value == 'verified' ? true : false;
242
+ break;
243
+ }
244
+
245
+ update_user_meta( $object_id, 'um_member_directory_data', $md_data );
246
  }
247
 
248
 
1596
  if ( ! empty( $this->profile['role'] ) ) {
1597
  return $this->profile['role'];
1598
  } else {
1599
+ if ( ! empty( $this->profile['wp_roles'] ) && $this->profile['wp_roles'] == 'administrator' ) {
1600
  return 'admin';
1601
  } else {
1602
  return 'member';
includes/core/um-actions-account.php CHANGED
@@ -267,9 +267,18 @@ function um_submit_account_details( $args ) {
267
  $changes[ $k ] = $v;
268
  }
269
 
270
- if ( isset( $changes['hide_in_members'] ) && ( $changes['hide_in_members'] == __( 'No', 'ultimate-member' ) || $changes['hide_in_members'] == 'No' ) ) {
271
- delete_user_meta( $user_id, 'hide_in_members' );
272
- unset( $changes['hide_in_members'] );
 
 
 
 
 
 
 
 
 
273
  }
274
 
275
  /**
@@ -463,4 +472,104 @@ add_action( 'um_after_user_account_updated', 'um_account_updated_notification',
463
  function um_disable_native_email_notificatiion( $changed, $user_id ) {
464
  add_filter( 'send_email_change_email', '__return_false' );
465
  }
466
- add_action( 'um_account_pre_update_profile', 'um_disable_native_email_notificatiion', 10, 2 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  $changes[ $k ] = $v;
268
  }
269
 
270
+ if ( isset( $changes['hide_in_members'] ) ) {
271
+ if ( UM()->member_directory()->get_hide_in_members_default() ) {
272
+ if ( $changes['hide_in_members'] == __( 'Yes', 'ultimate-member' ) || $changes['hide_in_members'] == 'Yes' || array_intersect( array( 'Yes', __( 'Yes', 'ultimate-member' ) ), $changes['hide_in_members'] ) ) {
273
+ delete_user_meta( $user_id, 'hide_in_members' );
274
+ unset( $changes['hide_in_members'] );
275
+ }
276
+ } else {
277
+ if ( $changes['hide_in_members'] == __( 'No', 'ultimate-member' ) || $changes['hide_in_members'] == 'No' || array_intersect( array( 'No', __( 'No', 'ultimate-member' ) ), $changes['hide_in_members'] ) ) {
278
+ delete_user_meta( $user_id, 'hide_in_members' );
279
+ unset( $changes['hide_in_members'] );
280
+ }
281
+ }
282
  }
283
 
284
  /**
472
  function um_disable_native_email_notificatiion( $changed, $user_id ) {
473
  add_filter( 'send_email_change_email', '__return_false' );
474
  }
475
+ add_action( 'um_account_pre_update_profile', 'um_disable_native_email_notificatiion', 10, 2 );
476
+
477
+
478
+ /**
479
+ * Add export and erase user's data in privacy tab
480
+ *
481
+ * @param $args
482
+ */
483
+ add_action( 'um_after_account_privacy', 'um_after_account_privacy' );
484
+ function um_after_account_privacy( $args ) {
485
+ ?>
486
+
487
+ <div class="um-field um-field-export_data">
488
+ <div class="um-field-label">
489
+ <label>
490
+ <?php esc_html_e( 'Download your data', 'ultimate-member' ); ?>
491
+ </label>
492
+ <span class="um-tip um-tip-w" original-title="<?php esc_attr_e( 'You can request a file with the information that we believe is most relevant and useful to you.', 'ultimate-member' ); ?>">
493
+ <i class="um-icon-help-circled"></i>
494
+ </span>
495
+ <div class="um-clear"></div>
496
+ </div>
497
+ <label name="um-export-data">
498
+ <?php esc_html_e( 'Enter your current password to confirm export of your personal data.', 'ultimate-member' ); ?>
499
+ </label>
500
+ <div class="um-field-area">
501
+ <input id="um-export-data" type="password" placeholder="<?php esc_attr_e( 'Password', 'ultimate-member' )?>">
502
+ <div class="um-field-error um-export-data">
503
+ <span class="um-field-arrow"><i class="um-faicon-caret-up"></i></span><?php esc_html_e( 'You must enter a password', 'ultimate-member' ); ?>
504
+ </div>
505
+ <div class="um-field-area-response um-export-data"></div>
506
+ </div>
507
+ <a class="um-request-button um-export-data-button" data-action="um-export-data" href="javascript:void(0);">
508
+ <?php esc_html_e( 'Request data', 'ultimate-member' ); ?>
509
+ </a>
510
+ </div>
511
+
512
+ <div class="um-field um-field-export_data">
513
+ <div class="um-field-label">
514
+ <label>
515
+ <?php esc_html_e( 'Erase of your data', 'ultimate-member' ); ?>
516
+ </label>
517
+ <span class="um-tip um-tip-w" original-title="<?php esc_attr_e( 'You can request erasing of the data that we have about you.', 'ultimate-member' ); ?>">
518
+ <i class="um-icon-help-circled"></i>
519
+ </span>
520
+ <div class="um-clear"></div>
521
+ </div>
522
+ <label name="um-erase-data">
523
+ <?php esc_html_e( 'Enter your current password to confirm the erasure of your personal data.', 'ultimate-member' ); ?>
524
+ <input id="um-erase-data" type="password" placeholder="<?php esc_attr_e( 'Password', 'ultimate-member' )?>">
525
+ <div class="um-field-error um-erase-data">
526
+ <span class="um-field-arrow"><i class="um-faicon-caret-up"></i></span><?php esc_html_e( 'You must enter a password', 'ultimate-member' ); ?>
527
+ </div>
528
+ <div class="um-field-area-response um-erase-data"></div>
529
+ </label>
530
+ <a class="um-request-button um-erase-data-button" data-action="um-erase-data" href="javascript:void(0);">
531
+ <?php esc_html_e( 'Request data erase', 'ultimate-member' ); ?>
532
+ </a>
533
+ </div>
534
+
535
+ <?php
536
+ }
537
+
538
+
539
+ function um_request_user_data() {
540
+ UM()->check_ajax_nonce();
541
+
542
+ $user_id = get_current_user_id();
543
+ $password = $_POST['password'];
544
+ $user = get_userdata( $user_id );
545
+ $hash = $user->data->user_pass;
546
+
547
+ if ( wp_check_password( $password, $hash ) && isset( $_POST['request_action'] ) ) {
548
+
549
+ if ( $_POST['request_action'] == 'um-export-data' ) {
550
+ $request_id = wp_create_user_request( $user->data->user_email, 'export_personal_data' );
551
+ } elseif ( $_POST['request_action'] == 'um-erase-data' ) {
552
+ $request_id = wp_create_user_request( $user->data->user_email, 'remove_personal_data' );
553
+ }
554
+
555
+ if ( empty( $request_id ) ) {
556
+ wp_send_json_error( __( 'Wrong request.', 'ultimate-member' ) );
557
+ }
558
+
559
+ if ( is_wp_error( $request_id ) ) {
560
+ $answer = $request_id->get_error_message();
561
+ } else {
562
+ wp_send_user_request( $request_id );
563
+ $answer = esc_html__( 'A confirmation email has been sent to your email. Click the link within the email to confirm your export request.', 'ultimate-member' );
564
+ }
565
+
566
+ } else {
567
+
568
+ $answer = esc_html__( 'The password you entered is incorrect.', 'ultimate-member' );
569
+
570
+ }
571
+
572
+ wp_send_json_success( array( 'answer' => esc_html( $answer ) ) );
573
+ }
574
+ add_action( 'wp_ajax_nopriv_um_request_user_data', 'um_request_user_data' );
575
+ add_action( 'wp_ajax_um_request_user_data', 'um_request_user_data' );
includes/core/um-actions-profile.php CHANGED
@@ -362,9 +362,9 @@ function um_user_edit_profile( $args ) {
362
  }
363
  }
364
 
365
-
366
- if ( isset( $args['submitted']['description'] ) ) {
367
- $to_update['description'] = $args['submitted']['description'];
368
  }
369
 
370
  if ( ! empty( $args['submitted']['role'] ) ) {
@@ -1047,10 +1047,12 @@ function um_profile_header( $args ) {
1047
  </div>
1048
  <?php }
1049
 
1050
- if ( UM()->fields()->viewing == true && um_user( 'description' ) && $args['show_bio'] ) { ?>
 
 
1051
 
1052
  <div class="um-meta-text">
1053
- <?php $description = get_user_meta( um_user( 'ID' ), 'description', true );
1054
 
1055
  if ( UM()->options()->get( 'profile_show_html_bio' ) ) {
1056
  echo make_clickable( wpautop( wp_kses_post( $description ) ) );
@@ -1065,13 +1067,13 @@ function um_profile_header( $args ) {
1065
  <textarea id="um-meta-bio"
1066
  data-character-limit="<?php echo esc_attr( UM()->options()->get( 'profile_bio_maxchars' ) ); ?>"
1067
  placeholder="<?php esc_attr_e( 'Tell us a bit about yourself...', 'ultimate-member' ); ?>"
1068
- name="<?php echo esc_attr( 'description-' . $args['form_id'] ); ?>"
1069
- id="<?php echo esc_attr( 'description-' . $args['form_id'] ); ?>"><?php echo UM()->fields()->field_value( 'description' ) ?></textarea>
1070
  <span class="um-meta-bio-character um-right"><span
1071
  class="um-bio-limit"><?php echo UM()->options()->get( 'profile_bio_maxchars' ); ?></span></span>
1072
 
1073
- <?php if ( UM()->fields()->is_error( 'description' ) ) {
1074
- echo UM()->fields()->field_error( UM()->fields()->show_error( 'description' ), true );
1075
  } ?>
1076
 
1077
  </div>
362
  }
363
  }
364
 
365
+ $description_key = UM()->profile()->get_show_bio_key( $args );
366
+ if ( isset( $args['submitted'][ $description_key ] ) ) {
367
+ $to_update[ $description_key ] = $args['submitted'][ $description_key ];
368
  }
369
 
370
  if ( ! empty( $args['submitted']['role'] ) ) {
1047
  </div>
1048
  <?php }
1049
 
1050
+ $description_key = UM()->profile()->get_show_bio_key( $args );
1051
+
1052
+ if ( UM()->fields()->viewing == true && um_user( $description_key ) && $args['show_bio'] ) { ?>
1053
 
1054
  <div class="um-meta-text">
1055
+ <?php $description = get_user_meta( um_user( 'ID' ), $description_key, true );
1056
 
1057
  if ( UM()->options()->get( 'profile_show_html_bio' ) ) {
1058
  echo make_clickable( wpautop( wp_kses_post( $description ) ) );
1067
  <textarea id="um-meta-bio"
1068
  data-character-limit="<?php echo esc_attr( UM()->options()->get( 'profile_bio_maxchars' ) ); ?>"
1069
  placeholder="<?php esc_attr_e( 'Tell us a bit about yourself...', 'ultimate-member' ); ?>"
1070
+ name="<?php echo esc_attr( $description_key . '-' . $args['form_id'] ); ?>"
1071
+ id="<?php echo esc_attr( $description_key . '-' . $args['form_id'] ); ?>"><?php echo UM()->fields()->field_value( $description_key ) ?></textarea>
1072
  <span class="um-meta-bio-character um-right"><span
1073
  class="um-bio-limit"><?php echo UM()->options()->get( 'profile_bio_maxchars' ); ?></span></span>
1074
 
1075
+ <?php if ( UM()->fields()->is_error( $description_key ) ) {
1076
+ echo UM()->fields()->field_error( UM()->fields()->show_error( $description_key ), true );
1077
  } ?>
1078
 
1079
  </div>
includes/core/um-filters-fields.php CHANGED
@@ -120,8 +120,8 @@ function um_profile_field_filter_hook__user_registered( $value, $data ) {
120
  if ( ! $value ) {
121
  return '';
122
  }
123
- $value = strtotime($value);
124
- $value = sprintf(__('Joined %s','ultimate-member'), date_i18n('F d, Y', $value) );
125
  return $value;
126
  }
127
  add_filter( 'um_profile_field_filter_hook__user_registered', 'um_profile_field_filter_hook__user_registered', 99, 2 );
120
  if ( ! $value ) {
121
  return '';
122
  }
123
+ $value = strtotime( $value );
124
+ $value = sprintf( __( 'Joined %s', 'ultimate-member' ), date_i18n( get_option( 'date_format' ), $value ) );
125
  return $value;
126
  }
127
  add_filter( 'um_profile_field_filter_hook__user_registered', 'um_profile_field_filter_hook__user_registered', 99, 2 );
includes/core/um-filters-members.php DELETED
@@ -1,73 +0,0 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
2
-
3
-
4
- /**
5
- * Remove users we do not need to show in directory
6
- *
7
- * @param $query_args
8
- * @param $args
9
- *
10
- * @return mixed
11
- */
12
- function um_remove_special_users_from_list( $query_args, $args ) {
13
- extract( $args );
14
-
15
- $query_args['meta_query']['relation'] = 'AND';
16
-
17
- if ( ! UM()->roles()->um_user_can( 'can_edit_everyone' ) ) {
18
-
19
- $query_args['meta_query'][] = array(
20
- 'key' => 'account_status',
21
- 'value' => 'approved',
22
- 'compare' => '='
23
- );
24
-
25
- }
26
-
27
- if ( UM()->options()->get( 'account_hide_in_directory' ) ) {
28
- if ( ! UM()->roles()->um_user_can( 'can_access_private_profile' ) ) {
29
- $query_args['meta_query'][] = array(
30
- "relation" => "OR",
31
- array(
32
- 'key' => 'hide_in_members',
33
- 'value' => '',
34
- 'compare' => 'NOT EXISTS'
35
- ),
36
- array(
37
- "relation" => "AND",
38
- array(
39
- 'key' => 'hide_in_members',
40
- 'value' => __('Yes','ultimate-member'),
41
- 'compare' => 'NOT LIKE'
42
- ),
43
- array(
44
- 'key' => 'hide_in_members',
45
- 'value' => 'Yes',
46
- 'compare' => 'NOT LIKE'
47
- ),
48
- ),
49
- );
50
- }
51
- }
52
-
53
- $roles = um_user( 'can_view_roles' );
54
- if ( UM()->roles()->um_user_can( 'can_view_all' ) && ! empty( $roles ) ) {
55
-
56
- $roles = maybe_unserialize( $roles );
57
-
58
- if ( ! empty( $roles ) ) {
59
- if ( ! empty( $query_args['role__in'] ) ) {
60
- $roles_intersect = array_intersect( $query_args['role__in'], $roles );
61
- if( ! empty( $roles_intersect ) ){
62
- $query_args['role__in'] = $roles_intersect;
63
- }
64
- } else {
65
- $query_args['role__in'] = $roles;
66
- }
67
- }
68
-
69
- }
70
-
71
- return $query_args;
72
- }
73
- //add_filter( 'um_prepare_user_query_args', 'um_remove_special_users_from_list', 99, 2 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/um-short-functions.php CHANGED
@@ -209,8 +209,12 @@ function um_convert_tags( $content, $args = array(), $with_kses = true ) {
209
  // Support for all usermeta keys
210
  if ( ! empty( $matches[1] ) && is_array( $matches[1] ) ) {
211
  foreach ( $matches[1] as $match ) {
212
- $strip_key = str_replace( 'usermeta:', '', $match );
213
- $content = str_replace( '{' . $match . '}', um_user( $strip_key ), $content );
 
 
 
 
214
  }
215
  }
216
  return $content;
@@ -995,12 +999,12 @@ function um_is_file_owner( $url, $user_id = null, $image_path = false ) {
995
  */
996
  function um_is_temp_file( $filename ) {
997
  $user_basedir = UM()->uploader()->get_upload_user_base_dir( 'temp' );
998
-
999
  $file = $user_basedir . '/' . $filename;
1000
-
1001
  if ( file_exists( $file ) ) {
1002
  return true;
1003
- }
1004
  return false;
1005
  }
1006
 
@@ -1014,8 +1018,9 @@ function um_is_temp_file( $filename ) {
1014
  */
1015
  function um_user_last_login_timestamp( $user_id ) {
1016
  $value = get_user_meta( $user_id, '_um_last_login', true );
1017
- if ($value)
1018
  return $value;
 
1019
 
1020
  return '';
1021
  }
@@ -1047,8 +1052,9 @@ function um_get_core_page( $slug, $updated = false ) {
1047
 
1048
  if ( isset( UM()->config()->permalinks[ $slug ] ) ) {
1049
  $url = get_permalink( UM()->config()->permalinks[ $slug ] );
1050
- if ( $updated )
1051
  $url = add_query_arg( 'updated', esc_attr( $updated ), $url );
 
1052
  }
1053
 
1054
  /**
209
  // Support for all usermeta keys
210
  if ( ! empty( $matches[1] ) && is_array( $matches[1] ) ) {
211
  foreach ( $matches[1] as $match ) {
212
+ $key = str_replace( 'usermeta:', '', $match );
213
+ $value = um_user( $key );
214
+ if ( is_array( $value ) ) {
215
+ $value = implode( ', ', $value );
216
+ }
217
+ $content = str_replace( '{' . $match . '}', apply_filters( 'um_convert_tags', $value, $key ), $content );
218
  }
219
  }
220
  return $content;
999
  */
1000
  function um_is_temp_file( $filename ) {
1001
  $user_basedir = UM()->uploader()->get_upload_user_base_dir( 'temp' );
1002
+
1003
  $file = $user_basedir . '/' . $filename;
1004
+
1005
  if ( file_exists( $file ) ) {
1006
  return true;
1007
+ }
1008
  return false;
1009
  }
1010
 
1018
  */
1019
  function um_user_last_login_timestamp( $user_id ) {
1020
  $value = get_user_meta( $user_id, '_um_last_login', true );
1021
+ if ( $value ) {
1022
  return $value;
1023
+ }
1024
 
1025
  return '';
1026
  }
1052
 
1053
  if ( isset( UM()->config()->permalinks[ $slug ] ) ) {
1054
  $url = get_permalink( UM()->config()->permalinks[ $slug ] );
1055
+ if ( $updated ) {
1056
  $url = add_query_arg( 'updated', esc_attr( $updated ), $url );
1057
+ }
1058
  }
1059
 
1060
  /**
languages/ultimate-member-en_US.mo CHANGED
Binary file
languages/ultimate-member-en_US.po CHANGED
@@ -1,8 +1,8 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Ultimate Member\n"
4
- "POT-Creation-Date: 2019-12-04 11:13+0200\n"
5
- "PO-Revision-Date: 2019-12-04 11:13+0200\n"
6
  "Last-Translator: \n"
7
  "Language-Team: \n"
8
  "Language: en_US\n"
@@ -35,7 +35,7 @@ msgid "Docs"
35
  msgstr ""
36
 
37
  #: includes/admin/class-admin.php:308
38
- #: includes/admin/core/class-admin-settings.php:1238
39
  msgid "Settings"
40
  msgstr ""
41
 
@@ -103,7 +103,7 @@ msgstr ""
103
  #: includes/admin/core/class-admin-builder.php:765
104
  #: includes/admin/core/class-admin-dragdrop.php:33
105
  #: includes/admin/core/class-admin-menu.php:106
106
- #: includes/core/class-fields.php:4382
107
  msgid "Please login as administrator"
108
  msgstr ""
109
 
@@ -145,7 +145,7 @@ msgid "Delete Group"
145
  msgstr ""
146
 
147
  #: includes/admin/core/class-admin-builder.php:554
148
- #: includes/admin/core/class-admin-enqueue.php:487
149
  #: includes/admin/core/list-tables/roles-list-table.php:342
150
  #: includes/admin/core/list-tables/roles-list-table.php:410
151
  msgid "Delete"
@@ -164,7 +164,7 @@ msgid "Predefined Fields"
164
  msgstr ""
165
 
166
  #: includes/admin/core/class-admin-builder.php:880
167
- #: includes/core/class-builtin.php:1330
168
  msgid "None"
169
  msgstr ""
170
 
@@ -183,7 +183,7 @@ msgstr ""
183
 
184
  #: includes/admin/core/class-admin-builder.php:1169
185
  #: includes/core/class-form.php:176 includes/core/class-form.php:350
186
- #: includes/core/class-password.php:533
187
  msgid "This is not possible for security reasons."
188
  msgstr ""
189
 
@@ -193,7 +193,7 @@ msgstr ""
193
 
194
  #: includes/admin/core/class-admin-columns.php:131
195
  #: includes/admin/core/class-admin-columns.php:151
196
- #: includes/admin/core/class-admin-metabox.php:2115
197
  #: includes/admin/templates/role/role-edit.php:190
198
  #: includes/widgets/class-um-search-widget.php:81
199
  msgid "Title"
@@ -210,7 +210,7 @@ msgstr ""
210
 
211
  #: includes/admin/core/class-admin-columns.php:134
212
  #: includes/admin/core/class-admin-columns.php:153
213
- #: includes/admin/core/class-admin-settings.php:451
214
  #: includes/admin/templates/form/login_settings.php:16
215
  #: includes/admin/templates/form/register_customize.php:6
216
  #: includes/admin/templates/form/register_customize.php:32
@@ -219,8 +219,8 @@ msgstr ""
219
 
220
  #: includes/admin/core/class-admin-columns.php:135
221
  #: includes/admin/core/class-admin-columns.php:154
222
- #: includes/admin/core/class-admin-metabox.php:785
223
- #: includes/admin/core/class-admin-metabox.php:946
224
  msgid "Shortcode"
225
  msgstr ""
226
 
@@ -231,6 +231,7 @@ msgstr ""
231
 
232
  #: includes/admin/core/class-admin-columns.php:186
233
  #: includes/admin/core/class-admin-columns.php:219
 
234
  #: includes/admin/core/list-tables/roles-list-table.php:371
235
  #: includes/admin/core/list-tables/roles-list-table.php:379
236
  #: includes/admin/templates/form/login_customize.php:16
@@ -248,16 +249,19 @@ msgstr ""
248
  #: includes/admin/templates/form/register_customize.php:23
249
  #: includes/admin/templates/form/register_customize.php:79
250
  #: includes/admin/templates/form/register_gdpr.php:26
251
- #: includes/core/class-builtin.php:1135 includes/core/class-builtin.php:1149
252
- #: includes/core/class-builtin.php:1150
253
- #: includes/core/um-actions-account.php:270
254
  msgid "No"
255
  msgstr ""
256
 
257
  #: includes/admin/core/class-admin-columns.php:186
258
  #: includes/admin/core/class-admin-columns.php:219
 
259
  #: includes/admin/core/list-tables/roles-list-table.php:371
260
  #: includes/admin/core/list-tables/roles-list-table.php:379
 
 
261
  #: includes/admin/templates/form/login_customize.php:17
262
  #: includes/admin/templates/form/login_customize.php:65
263
  #: includes/admin/templates/form/login_customize.php:84
@@ -273,9 +277,9 @@ msgstr ""
273
  #: includes/admin/templates/form/register_customize.php:24
274
  #: includes/admin/templates/form/register_customize.php:80
275
  #: includes/admin/templates/form/register_gdpr.php:27
276
- #: includes/core/class-builtin.php:1135 includes/core/class-builtin.php:1150
277
- #: includes/core/class-member-directory.php:952
278
- #: includes/core/um-filters-members.php:40
279
  msgid "Yes"
280
  msgstr ""
281
 
@@ -287,24 +291,26 @@ msgstr ""
287
  msgid "e.g. New Registration Form"
288
  msgstr ""
289
 
290
- #: includes/admin/core/class-admin-enqueue.php:475
291
  #: includes/core/class-builtin.php:698 includes/core/class-builtin.php:701
292
- #: includes/core/class-builtin.php:1155 includes/core/class-builtin.php:1158
 
 
293
  msgid "Password"
294
  msgstr ""
295
 
296
- #: includes/admin/core/class-admin-enqueue.php:479
297
- #: includes/admin/core/class-admin-metabox.php:2227
298
  #: includes/core/class-account.php:109
299
  msgid "Privacy"
300
  msgstr ""
301
 
302
- #: includes/admin/core/class-admin-enqueue.php:483
303
  #: includes/core/class-account.php:115
304
  msgid "Notifications"
305
  msgstr ""
306
 
307
- #: includes/admin/core/class-admin-enqueue.php:537
308
  msgid "Ultimate Member Blocks"
309
  msgstr ""
310
 
@@ -314,40 +320,59 @@ msgid "Required"
314
  msgstr ""
315
 
316
  #: includes/admin/core/class-admin-forms.php:526
317
- #: includes/admin/core/class-admin-metabox.php:1405
318
- #: includes/admin/core/class-admin-metabox.php:1433
319
  msgid "Choose Icon"
320
  msgstr ""
321
 
322
  #: includes/admin/core/class-admin-forms.php:532
323
- #: includes/admin/core/class-admin-metabox.php:1407
324
- #: includes/admin/core/class-admin-metabox.php:1435
325
  msgid "No Icon"
326
  msgstr ""
327
 
328
- #: includes/admin/core/class-admin-forms.php:908
329
- #: includes/admin/core/class-admin-forms.php:927
330
- #: includes/admin/core/class-admin-forms.php:1050
331
- #: includes/admin/core/class-admin-forms.php:1059
332
- #: includes/admin/core/class-admin-forms.php:1294
333
- #: includes/admin/core/class-admin-forms.php:1308
 
 
 
 
 
 
 
334
  #: includes/admin/core/class-admin-notices.php:398
335
  #: includes/core/um-actions-profile.php:673
336
  msgid "Remove"
337
  msgstr ""
338
 
339
- #: includes/admin/core/class-admin-forms.php:1106
340
  msgid "Select media"
341
  msgstr ""
342
 
343
- #: includes/admin/core/class-admin-forms.php:1129
344
  msgid "Select"
345
  msgstr ""
346
 
347
- #: includes/admin/core/class-admin-forms.php:1130
348
  msgid "Clear"
349
  msgstr ""
350
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  #: includes/admin/core/class-admin-gdpr.php:42
352
  msgid "Privacy Policy"
353
  msgstr ""
@@ -453,7 +478,7 @@ msgstr ""
453
  #. Plugin Name of the plugin/theme
454
  #. Author of the plugin/theme
455
  #: includes/admin/core/class-admin-menu.php:147
456
- #: includes/core/class-user.php:562
457
  msgid "Ultimate Member"
458
  msgstr ""
459
 
@@ -478,7 +503,7 @@ msgid "Member Directories"
478
  msgstr ""
479
 
480
  #: includes/admin/core/class-admin-menu.php:206
481
- #: includes/admin/core/class-admin-settings.php:1095
482
  msgid "Extensions"
483
  msgstr ""
484
 
@@ -502,954 +527,955 @@ msgstr ""
502
  msgid "Upgrade's Manual Request"
503
  msgstr ""
504
 
505
- #: includes/admin/core/class-admin-metabox.php:222
506
  msgid "UM Content Restriction"
507
  msgstr ""
508
 
509
- #: includes/admin/core/class-admin-metabox.php:378
510
- #: includes/admin/core/class-admin-metabox.php:529
511
  #: includes/admin/templates/access/restrict_content.php:53
512
  msgid "Restrict access to this content?"
513
  msgstr ""
514
 
515
- #: includes/admin/core/class-admin-metabox.php:379
516
- #: includes/admin/core/class-admin-metabox.php:386
517
- #: includes/admin/core/class-admin-metabox.php:399
518
- #: includes/admin/core/class-admin-metabox.php:530
519
- #: includes/admin/core/class-admin-metabox.php:538
520
- #: includes/admin/core/class-admin-metabox.php:552
521
  #: includes/admin/templates/access/restrict_content.php:54
522
  #: includes/admin/templates/access/restrict_content.php:61
523
  #: includes/admin/templates/access/restrict_content.php:74
524
  msgid "Activate content restriction for this post"
525
  msgstr ""
526
 
527
- #: includes/admin/core/class-admin-metabox.php:385
528
- #: includes/admin/core/class-admin-metabox.php:537
529
  #: includes/admin/templates/access/restrict_content.php:60
530
  msgid "Who can access this content?"
531
  msgstr ""
532
 
533
- #: includes/admin/core/class-admin-metabox.php:389
534
- #: includes/admin/core/class-admin-metabox.php:541
535
- #: includes/admin/core/class-admin-metabox.php:2229
536
  #: includes/admin/core/class-admin-navmenu.php:141
537
  #: includes/admin/templates/access/restrict_content.php:64
538
  #: includes/core/class-builtin.php:662
539
  msgid "Everyone"
540
  msgstr ""
541
 
542
- #: includes/admin/core/class-admin-metabox.php:390
543
- #: includes/admin/core/class-admin-metabox.php:542
544
  #: includes/admin/templates/access/restrict_content.php:65
545
  msgid "Logged out users"
546
  msgstr ""
547
 
548
- #: includes/admin/core/class-admin-metabox.php:391
549
- #: includes/admin/core/class-admin-metabox.php:543
550
  #: includes/admin/templates/access/restrict_content.php:66
551
  msgid "Logged in users"
552
  msgstr ""
553
 
554
- #: includes/admin/core/class-admin-metabox.php:398
555
- #: includes/admin/core/class-admin-metabox.php:551
556
  #: includes/admin/templates/access/restrict_content.php:73
557
  msgid "Select which roles can access this content"
558
  msgstr ""
559
 
560
- #: includes/admin/core/class-admin-metabox.php:407
561
- #: includes/admin/core/class-admin-metabox.php:562
562
  #: includes/admin/templates/access/restrict_content.php:83
563
  msgid "What happens when users without access tries to view the content?"
564
  msgstr ""
565
 
566
- #: includes/admin/core/class-admin-metabox.php:408
567
- #: includes/admin/core/class-admin-metabox.php:420
568
- #: includes/admin/core/class-admin-metabox.php:563
569
- #: includes/admin/core/class-admin-metabox.php:576
570
  #: includes/admin/templates/access/restrict_content.php:84
571
  #: includes/admin/templates/access/restrict_content.php:96
572
  msgid "Action when users without access tries to view the content"
573
  msgstr ""
574
 
575
- #: includes/admin/core/class-admin-metabox.php:411
576
- #: includes/admin/core/class-admin-metabox.php:566
577
  #: includes/admin/templates/access/restrict_content.php:87
578
  msgid "Show access restricted message"
579
  msgstr ""
580
 
581
- #: includes/admin/core/class-admin-metabox.php:412
582
- #: includes/admin/core/class-admin-metabox.php:567
583
  #: includes/admin/templates/access/restrict_content.php:88
584
  msgid "Redirect user"
585
  msgstr ""
586
 
587
- #: includes/admin/core/class-admin-metabox.php:419
588
- #: includes/admin/core/class-admin-metabox.php:575
589
  #: includes/admin/templates/access/restrict_content.php:95
590
  msgid ""
591
  "Would you like to use the global default message or apply a custom message "
592
  "to this content?"
593
  msgstr ""
594
 
595
- #: includes/admin/core/class-admin-metabox.php:423
596
- #: includes/admin/core/class-admin-metabox.php:579
597
  #: includes/admin/templates/access/restrict_content.php:99
598
  msgid "Global default message (default)"
599
  msgstr ""
600
 
601
- #: includes/admin/core/class-admin-metabox.php:424
602
- #: includes/admin/core/class-admin-metabox.php:580
603
  #: includes/admin/templates/access/restrict_content.php:100
604
  msgid "Custom message"
605
  msgstr ""
606
 
607
- #: includes/admin/core/class-admin-metabox.php:431
608
- #: includes/admin/core/class-admin-metabox.php:588
609
  #: includes/admin/templates/access/restrict_content.php:107
610
  msgid "Custom Restrict Content message"
611
  msgstr ""
612
 
613
- #: includes/admin/core/class-admin-metabox.php:432
614
- #: includes/admin/core/class-admin-metabox.php:452
615
- #: includes/admin/core/class-admin-metabox.php:589
616
- #: includes/admin/core/class-admin-metabox.php:611
617
  #: includes/admin/templates/access/restrict_content.php:108
618
  #: includes/admin/templates/access/restrict_content.php:128
619
  msgid "Changed global restrict message"
620
  msgstr ""
621
 
622
- #: includes/admin/core/class-admin-metabox.php:439
623
- #: includes/admin/core/class-admin-metabox.php:597
624
  #: includes/admin/templates/access/restrict_content.php:115
625
  msgid "Where should users be redirected to?"
626
  msgstr ""
627
 
628
- #: includes/admin/core/class-admin-metabox.php:440
629
- #: includes/admin/core/class-admin-metabox.php:598
630
  #: includes/admin/templates/access/restrict_content.php:116
631
  msgid "Select redirect to page when user hasn't access to content"
632
  msgstr ""
633
 
634
- #: includes/admin/core/class-admin-metabox.php:444
635
- #: includes/admin/core/class-admin-metabox.php:602
636
  #: includes/admin/templates/access/restrict_content.php:120
637
  msgid "Login page"
638
  msgstr ""
639
 
640
- #: includes/admin/core/class-admin-metabox.php:445
641
- #: includes/admin/core/class-admin-metabox.php:603
642
  #: includes/admin/templates/access/restrict_content.php:121
643
  msgid "Custom URL"
644
  msgstr ""
645
 
646
- #: includes/admin/core/class-admin-metabox.php:451
647
- #: includes/admin/core/class-admin-metabox.php:610
648
  #: includes/admin/templates/access/restrict_content.php:127
649
  msgid "Redirect URL"
650
  msgstr ""
651
 
652
- #: includes/admin/core/class-admin-metabox.php:459
653
- #: includes/admin/core/class-admin-metabox.php:619
654
  #: includes/admin/templates/access/restrict_content.php:135
655
  msgid "Hide from queries"
656
  msgstr ""
657
 
658
- #: includes/admin/core/class-admin-metabox.php:460
659
- #: includes/admin/core/class-admin-metabox.php:620
660
  #: includes/admin/templates/access/restrict_content.php:136
661
  msgid ""
662
  "Hide this content from archives, RSS feeds etc for users who do not have "
663
  "permission to view this content"
664
  msgstr ""
665
 
666
- #: includes/admin/core/class-admin-metabox.php:780
667
  msgid "General Options"
668
  msgstr ""
669
 
670
- #: includes/admin/core/class-admin-metabox.php:781
671
  msgid "Sorting"
672
  msgstr ""
673
 
674
- #: includes/admin/core/class-admin-metabox.php:782
675
  msgid "Profile Card"
676
  msgstr ""
677
 
678
- #: includes/admin/core/class-admin-metabox.php:783
679
  msgid "Search Options"
680
  msgstr ""
681
 
682
- #: includes/admin/core/class-admin-metabox.php:784
683
  msgid "Results &amp; Pagination"
684
  msgstr ""
685
 
686
- #: includes/admin/core/class-admin-metabox.php:786
687
  msgid "Styling: General"
688
  msgstr ""
689
 
690
- #: includes/admin/core/class-admin-metabox.php:799
691
  msgid "Administrative Permissions"
692
  msgstr ""
693
 
694
- #: includes/admin/core/class-admin-metabox.php:807
695
  msgid "General Permissions"
696
  msgstr ""
697
 
698
- #: includes/admin/core/class-admin-metabox.php:815
699
  msgid "Profile Access"
700
  msgstr ""
701
 
702
- #: includes/admin/core/class-admin-metabox.php:826
703
  msgid "Homepage Options"
704
  msgstr ""
705
 
706
- #: includes/admin/core/class-admin-metabox.php:837
707
  msgid "Registration Options"
708
  msgstr ""
709
 
710
- #: includes/admin/core/class-admin-metabox.php:845
711
  msgid "Login Options"
712
  msgstr ""
713
 
714
- #: includes/admin/core/class-admin-metabox.php:853
715
  msgid "Logout Options"
716
  msgstr ""
717
 
718
- #: includes/admin/core/class-admin-metabox.php:861
719
  msgid "Delete Options"
720
  msgstr ""
721
 
722
- #: includes/admin/core/class-admin-metabox.php:869
723
  msgid "Publish"
724
  msgstr ""
725
 
726
- #: includes/admin/core/class-admin-metabox.php:917
727
  msgid "WP Capabilities"
728
  msgstr ""
729
 
730
- #: includes/admin/core/class-admin-metabox.php:944
731
  msgid "Select Form Type"
732
  msgstr ""
733
 
734
- #: includes/admin/core/class-admin-metabox.php:945
735
  msgid "Form Builder"
736
  msgstr ""
737
 
738
- #: includes/admin/core/class-admin-metabox.php:948
739
- #: includes/admin/core/class-admin-metabox.php:969
740
- #: includes/admin/core/class-admin-metabox.php:991
741
  msgid "Customize this form"
742
  msgstr ""
743
 
744
- #: includes/admin/core/class-admin-metabox.php:970
745
  msgid "User Meta"
746
  msgstr ""
747
 
748
- #: includes/admin/core/class-admin-metabox.php:992
749
  msgid "Options"
750
  msgstr ""
751
 
752
- #: includes/admin/core/class-admin-metabox.php:1226
753
  msgid "Visibility"
754
  msgstr ""
755
 
756
- #: includes/admin/core/class-admin-metabox.php:1226
757
  msgid ""
758
  "Select where this field should appear. This option should only be changed on "
759
  "the profile form and allows you to show a field in one mode only (edit or "
760
  "view) or in both modes."
761
  msgstr ""
762
 
763
- #: includes/admin/core/class-admin-metabox.php:1228
764
  msgid "View everywhere"
765
  msgstr ""
766
 
767
- #: includes/admin/core/class-admin-metabox.php:1229
768
  msgid "Edit mode only"
769
  msgstr ""
770
 
771
- #: includes/admin/core/class-admin-metabox.php:1230
772
  msgid "View mode only"
773
  msgstr ""
774
 
775
- #: includes/admin/core/class-admin-metabox.php:1258
776
  msgid "If"
777
  msgstr ""
778
 
779
- #: includes/admin/core/class-admin-metabox.php:1335
780
  msgid "Value"
781
  msgstr ""
782
 
783
- #: includes/admin/core/class-admin-metabox.php:1344
784
  msgid "Validate"
785
  msgstr ""
786
 
787
- #: includes/admin/core/class-admin-metabox.php:1344
788
  msgid "Does this field require a special validation"
789
  msgstr ""
790
 
791
- #: includes/admin/core/class-admin-metabox.php:1345
792
  msgid "Select a validation type..."
793
  msgstr ""
794
 
795
- #: includes/admin/core/class-admin-metabox.php:1389
796
  msgid "Custom Action"
797
  msgstr ""
798
 
799
- #: includes/admin/core/class-admin-metabox.php:1389
800
  msgid ""
801
  "If you want to apply your custom validation, you can use action hooks to add "
802
  "custom validation. Please refer to documentation for further details."
803
  msgstr ""
804
 
805
- #: includes/admin/core/class-admin-metabox.php:1403
806
- #: includes/admin/core/class-admin-metabox.php:1431
807
  msgid "Icon"
808
  msgstr ""
809
 
810
- #: includes/admin/core/class-admin-metabox.php:1403
811
- #: includes/admin/core/class-admin-metabox.php:1431
812
  msgid ""
813
  "Select an icon to appear in the field. Leave blank if you do not want an "
814
  "icon to show in the field."
815
  msgstr ""
816
 
817
- #: includes/admin/core/class-admin-metabox.php:1458
818
  msgid "CSS Class"
819
  msgstr ""
820
 
821
- #: includes/admin/core/class-admin-metabox.php:1458
822
  msgid "Specify a custom CSS class to be applied to this element"
823
  msgstr ""
824
 
825
- #: includes/admin/core/class-admin-metabox.php:1468
826
  msgid "Thickness (in pixels)"
827
  msgstr ""
828
 
829
- #: includes/admin/core/class-admin-metabox.php:1468
830
  msgid "This is the width in pixels, e.g. 4 or 2, etc"
831
  msgstr ""
832
 
833
- #: includes/admin/core/class-admin-metabox.php:1478
834
  msgid "Optional Text"
835
  msgstr ""
836
 
837
- #: includes/admin/core/class-admin-metabox.php:1478
838
  msgid "Optional text to include with the divider"
839
  msgstr ""
840
 
841
- #: includes/admin/core/class-admin-metabox.php:1488
842
  msgid "Padding"
843
  msgstr ""
844
 
845
- #: includes/admin/core/class-admin-metabox.php:1488
846
  msgid "Set padding for this section"
847
  msgstr ""
848
 
849
- #: includes/admin/core/class-admin-metabox.php:1498
850
  msgid "Margin"
851
  msgstr ""
852
 
853
- #: includes/admin/core/class-admin-metabox.php:1498
854
  msgid "Set margin for this section"
855
  msgstr ""
856
 
857
- #: includes/admin/core/class-admin-metabox.php:1508
858
  msgid "Border"
859
  msgstr ""
860
 
861
- #: includes/admin/core/class-admin-metabox.php:1508
862
  msgid "Set border for this section"
863
  msgstr ""
864
 
865
- #: includes/admin/core/class-admin-metabox.php:1518
866
- #: includes/admin/core/class-admin-metabox.php:1689
867
  msgid "Style"
868
  msgstr ""
869
 
870
- #: includes/admin/core/class-admin-metabox.php:1518
871
  msgid "Choose the border style"
872
  msgstr ""
873
 
874
- #: includes/admin/core/class-admin-metabox.php:1520
875
- #: includes/admin/core/class-admin-metabox.php:1691
876
  msgid "Solid"
877
  msgstr ""
878
 
879
- #: includes/admin/core/class-admin-metabox.php:1521
880
- #: includes/admin/core/class-admin-metabox.php:1692
881
  msgid "Dotted"
882
  msgstr ""
883
 
884
- #: includes/admin/core/class-admin-metabox.php:1522
885
- #: includes/admin/core/class-admin-metabox.php:1693
886
  msgid "Dashed"
887
  msgstr ""
888
 
889
- #: includes/admin/core/class-admin-metabox.php:1523
890
- #: includes/admin/core/class-admin-metabox.php:1694
891
  msgid "Double"
892
  msgstr ""
893
 
894
- #: includes/admin/core/class-admin-metabox.php:1533
895
  msgid "Border Radius"
896
  msgstr ""
897
 
898
- #: includes/admin/core/class-admin-metabox.php:1533
899
  msgid "Rounded corners can be applied by setting a pixels value here. e.g. 5px"
900
  msgstr ""
901
 
902
- #: includes/admin/core/class-admin-metabox.php:1543
903
  msgid "Border Color"
904
  msgstr ""
905
 
906
- #: includes/admin/core/class-admin-metabox.php:1543
907
  msgid "Give a color to this border"
908
  msgstr ""
909
 
910
- #: includes/admin/core/class-admin-metabox.php:1553
911
  msgid "Enable Row Heading"
912
  msgstr ""
913
 
914
- #: includes/admin/core/class-admin-metabox.php:1553
915
  msgid "Whether to enable a heading for this row"
916
  msgstr ""
917
 
918
- #: includes/admin/core/class-admin-metabox.php:1563
919
  msgid "Heading Text"
920
  msgstr ""
921
 
922
- #: includes/admin/core/class-admin-metabox.php:1563
923
  msgid "Enter the row heading text here"
924
  msgstr ""
925
 
926
- #: includes/admin/core/class-admin-metabox.php:1573
927
  msgid "Background Color"
928
  msgstr ""
929
 
930
- #: includes/admin/core/class-admin-metabox.php:1573
931
  msgid "This will be the background of entire section"
932
  msgstr ""
933
 
934
- #: includes/admin/core/class-admin-metabox.php:1583
935
  msgid "Heading Background Color"
936
  msgstr ""
937
 
938
- #: includes/admin/core/class-admin-metabox.php:1583
939
  msgid "This will be the background of the heading section"
940
  msgstr ""
941
 
942
- #: includes/admin/core/class-admin-metabox.php:1593
943
  msgid "Heading Text Color"
944
  msgstr ""
945
 
946
- #: includes/admin/core/class-admin-metabox.php:1593
947
  msgid "This will be the text color of heading part only"
948
  msgstr ""
949
 
950
- #: includes/admin/core/class-admin-metabox.php:1603
951
  msgid "Text Color"
952
  msgstr ""
953
 
954
- #: includes/admin/core/class-admin-metabox.php:1603
955
  msgid "This will be the text color of entire section"
956
  msgstr ""
957
 
958
- #: includes/admin/core/class-admin-metabox.php:1613
959
  msgid "Icon Color"
960
  msgstr ""
961
 
962
- #: includes/admin/core/class-admin-metabox.php:1613
963
  msgid ""
964
  "This will be the color of selected icon. By default It will be the same "
965
  "color as heading text color"
966
  msgstr ""
967
 
968
- #: includes/admin/core/class-admin-metabox.php:1623
969
  msgid "Color"
970
  msgstr ""
971
 
972
- #: includes/admin/core/class-admin-metabox.php:1623
973
  msgid "Select a color for this divider"
974
  msgstr ""
975
 
976
- #: includes/admin/core/class-admin-metabox.php:1633
977
  msgid "URL Alt Text"
978
  msgstr ""
979
 
980
- #: includes/admin/core/class-admin-metabox.php:1633
981
  msgid "Entering custom text here will replace the url with a text link"
982
  msgstr ""
983
 
984
- #: includes/admin/core/class-admin-metabox.php:1643
985
  msgid "Link Target"
986
  msgstr ""
987
 
988
- #: includes/admin/core/class-admin-metabox.php:1643
989
  msgid "Choose whether to open this link in same window or in a new window"
990
  msgstr ""
991
 
992
- #: includes/admin/core/class-admin-metabox.php:1645
993
  msgid "Open in new window"
994
  msgstr ""
995
 
996
- #: includes/admin/core/class-admin-metabox.php:1646
997
  msgid "Same window"
998
  msgstr ""
999
 
1000
- #: includes/admin/core/class-admin-metabox.php:1656
1001
  msgid "SEO Follow"
1002
  msgstr ""
1003
 
1004
- #: includes/admin/core/class-admin-metabox.php:1656
1005
  msgid "Whether to follow or nofollow this link by search engines"
1006
  msgstr ""
1007
 
1008
- #: includes/admin/core/class-admin-metabox.php:1658
1009
  msgid "Follow"
1010
  msgstr ""
1011
 
1012
- #: includes/admin/core/class-admin-metabox.php:1659
1013
  msgid "No-Follow"
1014
  msgstr ""
1015
 
1016
- #: includes/admin/core/class-admin-metabox.php:1669
1017
  msgid "Force strong password?"
1018
  msgstr ""
1019
 
1020
- #: includes/admin/core/class-admin-metabox.php:1669
1021
  msgid ""
1022
  "Turn on to force users to create a strong password (A combination of one "
1023
  "lowercase letter, one uppercase letter, and one number). If turned on this "
1024
  "option is only applied to register forms and not to login forms."
1025
  msgstr ""
1026
 
1027
- #: includes/admin/core/class-admin-metabox.php:1679
1028
  msgid "Automatically add a confirm password field?"
1029
  msgstr ""
1030
 
1031
- #: includes/admin/core/class-admin-metabox.php:1679
1032
  msgid ""
1033
  "Turn on to add a confirm password field. If turned on the confirm password "
1034
  "field will only show on register forms and not on login forms."
1035
  msgstr ""
1036
 
1037
- #: includes/admin/core/class-admin-metabox.php:1689
1038
  msgid "This is the line-style of divider"
1039
  msgstr ""
1040
 
1041
- #: includes/admin/core/class-admin-metabox.php:1705
1042
  msgid "Time Intervals (in minutes)"
1043
  msgstr ""
1044
 
1045
- #: includes/admin/core/class-admin-metabox.php:1705
1046
  msgid "Choose the minutes interval between each time in the time picker."
1047
  msgstr ""
1048
 
1049
- #: includes/admin/core/class-admin-metabox.php:1706
1050
  msgid "e.g. 30, 60, 120"
1051
  msgstr ""
1052
 
1053
- #: includes/admin/core/class-admin-metabox.php:1718
1054
  msgid "Date User-Friendly Format"
1055
  msgstr ""
1056
 
1057
- #: includes/admin/core/class-admin-metabox.php:1718
1058
  msgid "The display format of the date which is visible to user."
1059
  msgstr ""
1060
 
1061
- #: includes/admin/core/class-admin-metabox.php:1729
1062
  msgid "Time Format"
1063
  msgstr ""
1064
 
1065
- #: includes/admin/core/class-admin-metabox.php:1729
1066
  msgid "Choose the displayed time-format for this field"
1067
  msgstr ""
1068
 
1069
- #: includes/admin/core/class-admin-metabox.php:1731
1070
- #: includes/admin/core/class-admin-metabox.php:1732
1071
  msgid "( 12-hr format )"
1072
  msgstr ""
1073
 
1074
- #: includes/admin/core/class-admin-metabox.php:1733
1075
  msgid "( 24-hr format )"
1076
  msgstr ""
1077
 
1078
- #: includes/admin/core/class-admin-metabox.php:1744
1079
  msgid "Use custom Date format"
1080
  msgstr ""
1081
 
1082
- #: includes/admin/core/class-admin-metabox.php:1744
1083
  msgid ""
1084
  "This option overrides \"Date User-Friendly Format\" option. See https://www."
1085
  "php.net/manual/en/function.date.php"
1086
  msgstr ""
1087
 
1088
- #: includes/admin/core/class-admin-metabox.php:1754
1089
  msgid "Displayed Date Format"
1090
  msgstr ""
1091
 
1092
- #: includes/admin/core/class-admin-metabox.php:1754
1093
  msgid ""
1094
  "Whether you wish to show the date in full or only show the years e.g. 25 "
1095
  "Years"
1096
  msgstr ""
1097
 
1098
- #: includes/admin/core/class-admin-metabox.php:1756
1099
  msgid "Show full date"
1100
  msgstr ""
1101
 
1102
- #: includes/admin/core/class-admin-metabox.php:1757
1103
  msgid "Show years only"
1104
  msgstr ""
1105
 
1106
- #: includes/admin/core/class-admin-metabox.php:1773
1107
  msgid "Disable specific weekdays"
1108
  msgstr ""
1109
 
1110
- #: includes/admin/core/class-admin-metabox.php:1773
1111
  msgid ""
1112
  "Disable specific week days from being available for selection in this date "
1113
  "picker"
1114
  msgstr ""
1115
 
1116
- #: includes/admin/core/class-admin-metabox.php:1775
1117
  msgid "Sunday"
1118
  msgstr ""
1119
 
1120
- #: includes/admin/core/class-admin-metabox.php:1776
1121
  msgid "Monday"
1122
  msgstr ""
1123
 
1124
- #: includes/admin/core/class-admin-metabox.php:1777
1125
  msgid "Tuesday"
1126
  msgstr ""
1127
 
1128
- #: includes/admin/core/class-admin-metabox.php:1778
1129
  msgid "Wednesday"
1130
  msgstr ""
1131
 
1132
- #: includes/admin/core/class-admin-metabox.php:1779
1133
  msgid "Thursday"
1134
  msgstr ""
1135
 
1136
- #: includes/admin/core/class-admin-metabox.php:1780
1137
  msgid "Friday"
1138
  msgstr ""
1139
 
1140
- #: includes/admin/core/class-admin-metabox.php:1781
1141
  msgid "Saturday"
1142
  msgstr ""
1143
 
1144
- #: includes/admin/core/class-admin-metabox.php:1791
1145
  msgid "Number of Years to pick from"
1146
  msgstr ""
1147
 
1148
- #: includes/admin/core/class-admin-metabox.php:1791
1149
  msgid ""
1150
  "Number of years available for the date selection. Default to last 50 years"
1151
  msgstr ""
1152
 
1153
- #: includes/admin/core/class-admin-metabox.php:1801
1154
  msgid "Years Selection"
1155
  msgstr ""
1156
 
1157
- #: includes/admin/core/class-admin-metabox.php:1801
1158
  msgid "This decides which years should be shown relative to today date"
1159
  msgstr ""
1160
 
1161
- #: includes/admin/core/class-admin-metabox.php:1803
1162
  msgid "Equal years before / after today"
1163
  msgstr ""
1164
 
1165
- #: includes/admin/core/class-admin-metabox.php:1804
1166
  msgid "Past years only"
1167
  msgstr ""
1168
 
1169
- #: includes/admin/core/class-admin-metabox.php:1805
1170
  msgid "Future years only"
1171
  msgstr ""
1172
 
1173
- #: includes/admin/core/class-admin-metabox.php:1815
1174
  msgid "Date Range Start"
1175
  msgstr ""
1176
 
1177
- #: includes/admin/core/class-admin-metabox.php:1815
1178
  msgid "Set the minimum date/day in range in the format YYYY/MM/DD"
1179
  msgstr ""
1180
 
1181
- #: includes/admin/core/class-admin-metabox.php:1816
1182
- #: includes/admin/core/class-admin-metabox.php:1826
1183
  msgid "YYYY/MM/DD"
1184
  msgstr ""
1185
 
1186
- #: includes/admin/core/class-admin-metabox.php:1825
1187
  msgid "Date Range End"
1188
  msgstr ""
1189
 
1190
- #: includes/admin/core/class-admin-metabox.php:1825
1191
  msgid "Set the maximum date/day in range in the format YYYY/MM/DD"
1192
  msgstr ""
1193
 
1194
- #: includes/admin/core/class-admin-metabox.php:1835
1195
  msgid "Set Date Range"
1196
  msgstr ""
1197
 
1198
- #: includes/admin/core/class-admin-metabox.php:1835
1199
  msgid ""
1200
  "Whether to show a specific number of years or specify a date range to be "
1201
  "available for the date picker."
1202
  msgstr ""
1203
 
1204
- #: includes/admin/core/class-admin-metabox.php:1837
1205
  msgid "Fixed Number of Years"
1206
  msgstr ""
1207
 
1208
- #: includes/admin/core/class-admin-metabox.php:1838
1209
  msgid "Specific Date Range"
1210
  msgstr ""
1211
 
1212
- #: includes/admin/core/class-admin-metabox.php:1851
1213
  msgid "Enter Shortcode"
1214
  msgstr ""
1215
 
1216
- #: includes/admin/core/class-admin-metabox.php:1851
1217
  msgid ""
1218
  "Enter the shortcode in the following textarea and it will be displayed on "
1219
  "the fields"
1220
  msgstr ""
1221
 
1222
- #: includes/admin/core/class-admin-metabox.php:1852
1223
  msgid "e.g. [my_custom_shortcode]"
1224
  msgstr ""
1225
 
1226
- #: includes/admin/core/class-admin-metabox.php:1861
1227
  msgid "Content Editor"
1228
  msgstr ""
1229
 
1230
- #: includes/admin/core/class-admin-metabox.php:1861
1231
  msgid "Edit the content of this field here"
1232
  msgstr ""
1233
 
1234
- #: includes/admin/core/class-admin-metabox.php:1874
1235
  msgid "Crop Feature"
1236
  msgstr ""
1237
 
1238
- #: includes/admin/core/class-admin-metabox.php:1874
1239
  msgid "Enable/disable crop feature for this image upload and define ratio"
1240
  msgstr ""
1241
 
1242
- #: includes/admin/core/class-admin-metabox.php:1876
1243
  msgid "Turn Off (Default)"
1244
  msgstr ""
1245
 
1246
- #: includes/admin/core/class-admin-metabox.php:1877
1247
  msgid "Crop and force 1:1 ratio"
1248
  msgstr ""
1249
 
1250
- #: includes/admin/core/class-admin-metabox.php:1878
1251
  msgid "Crop and force user-defined ratio"
1252
  msgstr ""
1253
 
1254
- #: includes/admin/core/class-admin-metabox.php:1895
1255
  msgid "Allowed Image Types"
1256
  msgstr ""
1257
 
1258
- #: includes/admin/core/class-admin-metabox.php:1895
1259
  #: includes/admin/core/class-admin-metabox.php:1913
 
1260
  msgid ""
1261
  "Select the image types that you want to allow to be uploaded via this field."
1262
  msgstr ""
1263
 
1264
- #: includes/admin/core/class-admin-metabox.php:1913
1265
  msgid "Allowed File Types"
1266
  msgstr ""
1267
 
1268
- #: includes/admin/core/class-admin-metabox.php:1930
1269
  msgid "Drag &amp; Drop Photo"
1270
  msgstr ""
1271
 
1272
- #: includes/admin/core/class-admin-metabox.php:1933
1273
  msgid "Drag &amp; Drop File"
1274
  msgstr ""
1275
 
1276
- #: includes/admin/core/class-admin-metabox.php:1938
1277
- #: includes/admin/core/class-admin-metabox.php:1958
1278
  msgid "Upload Box Text"
1279
  msgstr ""
1280
 
1281
- #: includes/admin/core/class-admin-metabox.php:1938
1282
  msgid "This is the headline that appears in the upload box for this field"
1283
  msgstr ""
1284
 
1285
- #: includes/admin/core/class-admin-metabox.php:1948
1286
  msgid "Additional Instructions Text"
1287
  msgstr ""
1288
 
1289
- #: includes/admin/core/class-admin-metabox.php:1948
1290
  msgid ""
1291
  "If you need to add information or secondary line below the headline of "
1292
  "upload box, enter it here"
1293
  msgstr ""
1294
 
1295
- #: includes/admin/core/class-admin-metabox.php:1958
1296
  msgid "The text that appears on the button. e.g. Upload"
1297
  msgstr ""
1298
 
1299
- #: includes/admin/core/class-admin-metabox.php:1959
1300
- #: includes/core/class-fields.php:1638 includes/core/class-fields.php:1679
 
1301
  msgid "Upload"
1302
  msgstr ""
1303
 
1304
- #: includes/admin/core/class-admin-metabox.php:1968
1305
  msgid "Maximum Size in bytes"
1306
  msgstr ""
1307
 
1308
- #: includes/admin/core/class-admin-metabox.php:1968
1309
  msgid ""
1310
  "The maximum size for image that can be uploaded through this field. Leave "
1311
  "empty for unlimited size."
1312
  msgstr ""
1313
 
1314
- #: includes/admin/core/class-admin-metabox.php:1978
1315
  msgid "Textarea Height"
1316
  msgstr ""
1317
 
1318
- #: includes/admin/core/class-admin-metabox.php:1978
1319
  msgid "The height of textarea in pixels. Default is 100 pixels"
1320
  msgstr ""
1321
 
1322
- #: includes/admin/core/class-admin-metabox.php:1988
1323
  msgid "Spacing"
1324
  msgstr ""
1325
 
1326
- #: includes/admin/core/class-admin-metabox.php:1988
1327
  msgid "This is the required spacing in pixels. e.g. 20px"
1328
  msgstr ""
1329
 
1330
- #: includes/admin/core/class-admin-metabox.php:1998
1331
  msgid "Allow multiple selections"
1332
  msgstr ""
1333
 
1334
- #: includes/admin/core/class-admin-metabox.php:1998
1335
  msgid "Enable/disable multiple selections for this field"
1336
  msgstr ""
1337
 
1338
- #: includes/admin/core/class-admin-metabox.php:2008
1339
  msgid "Maximum number of selections"
1340
  msgstr ""
1341
 
1342
- #: includes/admin/core/class-admin-metabox.php:2008
1343
  msgid ""
1344
  "Enter a number here to force a maximum number of selections by user for this "
1345
  "field"
1346
  msgstr ""
1347
 
1348
- #: includes/admin/core/class-admin-metabox.php:2018
1349
  msgid "Minimum number of selections"
1350
  msgstr ""
1351
 
1352
- #: includes/admin/core/class-admin-metabox.php:2018
1353
  msgid ""
1354
  "Enter a number here to force a minimum number of selections by user for this "
1355
  "field"
1356
  msgstr ""
1357
 
1358
- #: includes/admin/core/class-admin-metabox.php:2028
1359
  msgid "Maximum number of entries"
1360
  msgstr ""
1361
 
1362
- #: includes/admin/core/class-admin-metabox.php:2028
1363
  msgid "This is the max number of entries the user can add via field group."
1364
  msgstr ""
1365
 
1366
- #: includes/admin/core/class-admin-metabox.php:2038
1367
  msgid "Maximum allowed words"
1368
  msgstr ""
1369
 
1370
- #: includes/admin/core/class-admin-metabox.php:2038
1371
  msgid ""
1372
  "If you want to enable a maximum number of words to be input in this "
1373
  "textarea. Leave empty to disable this setting"
1374
  msgstr ""
1375
 
1376
- #: includes/admin/core/class-admin-metabox.php:2048
1377
  msgid "Minimum Number"
1378
  msgstr ""
1379
 
1380
- #: includes/admin/core/class-admin-metabox.php:2048
1381
  msgid "Minimum number that can be entered in this field"
1382
  msgstr ""
1383
 
1384
- #: includes/admin/core/class-admin-metabox.php:2058
1385
  msgid "Maximum Number"
1386
  msgstr ""
1387
 
1388
- #: includes/admin/core/class-admin-metabox.php:2058
1389
  msgid "Maximum number that can be entered in this field"
1390
  msgstr ""
1391
 
1392
- #: includes/admin/core/class-admin-metabox.php:2068
1393
  msgid "Minimum length"
1394
  msgstr ""
1395
 
1396
- #: includes/admin/core/class-admin-metabox.php:2068
1397
  msgid ""
1398
  "If you want to enable a minimum number of characters to be input in this "
1399
  "field. Leave empty to disable this setting"
1400
  msgstr ""
1401
 
1402
- #: includes/admin/core/class-admin-metabox.php:2078
1403
  msgid "Maximum length"
1404
  msgstr ""
1405
 
1406
- #: includes/admin/core/class-admin-metabox.php:2078
1407
  msgid ""
1408
  "If you want to enable a maximum number of characters to be input in this "
1409
  "field. Leave empty to disable this setting"
1410
  msgstr ""
1411
 
1412
- #: includes/admin/core/class-admin-metabox.php:2088
1413
  msgid "Does this textarea accept HTML?"
1414
  msgstr ""
1415
 
1416
- #: includes/admin/core/class-admin-metabox.php:2088
1417
  msgid "Turn on/off HTML tags for this textarea"
1418
  msgstr ""
1419
 
1420
- #: includes/admin/core/class-admin-metabox.php:2105
1421
  msgid "Edit Choices"
1422
  msgstr ""
1423
 
1424
- #: includes/admin/core/class-admin-metabox.php:2105
1425
  msgid ""
1426
  "Enter one choice per line. This will represent the available choices or "
1427
  "selections available for user."
1428
  msgstr ""
1429
 
1430
- #: includes/admin/core/class-admin-metabox.php:2115
1431
  msgid ""
1432
  "This is the title of the field for your reference in the backend. The title "
1433
  "will not appear on the front-end of your website."
1434
  msgstr ""
1435
 
1436
- #: includes/admin/core/class-admin-metabox.php:2126
1437
  msgid "Unique ID"
1438
  msgstr ""
1439
 
1440
- #: includes/admin/core/class-admin-metabox.php:2140
1441
- #: includes/admin/core/class-admin-metabox.php:2146
1442
  msgid "Meta Key"
1443
  msgstr ""
1444
 
1445
- #: includes/admin/core/class-admin-metabox.php:2140
1446
  msgid ""
1447
  "The meta key cannot be changed for duplicated fields or when editing an "
1448
  "existing field. If you require a different meta key please create a new "
1449
  "field."
1450
  msgstr ""
1451
 
1452
- #: includes/admin/core/class-admin-metabox.php:2146
1453
  msgid ""
1454
  "A meta key is required to store the entered info in this field in the "
1455
  "database. The meta key should be unique to this field and be written in "
@@ -1457,11 +1483,11 @@ msgid ""
1457
  "job_title"
1458
  msgstr ""
1459
 
1460
- #: includes/admin/core/class-admin-metabox.php:2159
1461
  msgid "Help Text"
1462
  msgstr ""
1463
 
1464
- #: includes/admin/core/class-admin-metabox.php:2159
1465
  msgid ""
1466
  "This is the text that appears in a tooltip when a user hovers over the info "
1467
  "icon. Help text is useful for providing users with more information about "
@@ -1469,153 +1495,149 @@ msgid ""
1469
  "for field."
1470
  msgstr ""
1471
 
1472
- #: includes/admin/core/class-admin-metabox.php:2171
1473
  msgid "Default Text"
1474
  msgstr ""
1475
 
1476
- #: includes/admin/core/class-admin-metabox.php:2171
1477
  msgid "Text to display by default in this field"
1478
  msgstr ""
1479
 
1480
- #: includes/admin/core/class-admin-metabox.php:2177
1481
  msgid "Default Date"
1482
  msgstr ""
1483
 
1484
- #: includes/admin/core/class-admin-metabox.php:2177
1485
- #: includes/admin/core/class-admin-metabox.php:2183
1486
  msgid ""
1487
  "You may use all PHP compatible date formats such as: 2020-02-02, 02/02/2020, "
1488
  "yesterday, today, tomorrow, next monday, first day of next month, +3 day"
1489
  msgstr ""
1490
 
1491
- #: includes/admin/core/class-admin-metabox.php:2183
1492
  msgid "Default Time"
1493
  msgstr ""
1494
 
1495
- #: includes/admin/core/class-admin-metabox.php:2189
1496
  msgid "Default Rating"
1497
  msgstr ""
1498
 
1499
- #: includes/admin/core/class-admin-metabox.php:2189
1500
  msgid ""
1501
  "If you wish the rating field to be prefilled with a number of stars, enter "
1502
  "it here."
1503
  msgstr ""
1504
 
1505
- #: includes/admin/core/class-admin-metabox.php:2195
1506
  msgid "Default Value"
1507
  msgstr ""
1508
 
1509
- #: includes/admin/core/class-admin-metabox.php:2195
1510
  msgid ""
1511
  "This option allows you to pre-fill the field with a default value prior to "
1512
  "the user entering a value in the field. Leave blank to have no default value"
1513
  msgstr ""
1514
 
1515
- #: includes/admin/core/class-admin-metabox.php:2207
1516
- msgid "Label"
1517
- msgstr ""
1518
-
1519
- #: includes/admin/core/class-admin-metabox.php:2207
1520
  msgid ""
1521
  "The field label is the text that appears above the field on your front-end "
1522
  "form. Leave blank to not show a label above field."
1523
  msgstr ""
1524
 
1525
- #: includes/admin/core/class-admin-metabox.php:2217
1526
  msgid "Placeholder"
1527
  msgstr ""
1528
 
1529
- #: includes/admin/core/class-admin-metabox.php:2217
1530
  msgid ""
1531
  "This is the text that appears within the field e.g please enter your email "
1532
  "address. Leave blank to not show any placeholder text."
1533
  msgstr ""
1534
 
1535
- #: includes/admin/core/class-admin-metabox.php:2227
1536
  msgid ""
1537
  "Field privacy allows you to select who can view this field on the front-end. "
1538
  "The site admin can view all fields regardless of the option set here."
1539
  msgstr ""
1540
 
1541
- #: includes/admin/core/class-admin-metabox.php:2230
1542
- #: includes/class-config.php:134 includes/class-config.php:788
1543
  msgid "Members"
1544
  msgstr ""
1545
 
1546
- #: includes/admin/core/class-admin-metabox.php:2231
1547
  msgid "Only visible to profile owner and admins"
1548
  msgstr ""
1549
 
1550
- #: includes/admin/core/class-admin-metabox.php:2232
1551
  msgid "Only visible to profile owner and specific roles"
1552
  msgstr ""
1553
 
1554
- #: includes/admin/core/class-admin-metabox.php:2233
1555
  msgid "Only specific member roles"
1556
  msgstr ""
1557
 
1558
- #: includes/admin/core/class-admin-metabox.php:2250
1559
  msgid "Select member roles"
1560
  msgstr ""
1561
 
1562
- #: includes/admin/core/class-admin-metabox.php:2250
1563
  msgid "Select the member roles that can view this field on the front-end."
1564
  msgstr ""
1565
 
1566
- #: includes/admin/core/class-admin-metabox.php:2276
1567
  msgid "Is this field required?"
1568
  msgstr ""
1569
 
1570
- #: includes/admin/core/class-admin-metabox.php:2276
1571
  msgid ""
1572
  "This option allows you to set whether the field must be filled in before the "
1573
  "form can be processed."
1574
  msgstr ""
1575
 
1576
- #: includes/admin/core/class-admin-metabox.php:2290
1577
  msgid "Can user edit this field?"
1578
  msgstr ""
1579
 
1580
- #: includes/admin/core/class-admin-metabox.php:2290
1581
  msgid ""
1582
  "This option allows you to set whether or not the user can edit the "
1583
  "information in this field."
1584
  msgstr ""
1585
 
1586
- #: includes/admin/core/class-admin-metabox.php:2303
1587
  msgid "Rating System"
1588
  msgstr ""
1589
 
1590
- #: includes/admin/core/class-admin-metabox.php:2303
1591
  msgid "Choose whether you want a 5-stars or 10-stars ratings based here."
1592
  msgstr ""
1593
 
1594
- #: includes/admin/core/class-admin-metabox.php:2305
1595
  msgid "5 stars rating system"
1596
  msgstr ""
1597
 
1598
- #: includes/admin/core/class-admin-metabox.php:2306
1599
  msgid "10 stars rating system"
1600
  msgstr ""
1601
 
1602
- #: includes/admin/core/class-admin-metabox.php:2316
1603
  msgid "Choices Callback"
1604
  msgstr ""
1605
 
1606
- #: includes/admin/core/class-admin-metabox.php:2316
1607
  msgid "Add a callback source to retrieve choices."
1608
  msgstr ""
1609
 
1610
- #: includes/admin/core/class-admin-metabox.php:2327
1611
  msgid "Parent Option"
1612
  msgstr ""
1613
 
1614
- #: includes/admin/core/class-admin-metabox.php:2327
1615
  msgid "Dynamically populates the option based from selected parent option."
1616
  msgstr ""
1617
 
1618
- #: includes/admin/core/class-admin-metabox.php:2329
1619
  msgid "No Selected"
1620
  msgstr ""
1621
 
@@ -1792,31 +1814,35 @@ msgstr ""
1792
  msgid "Upgrade Now"
1793
  msgstr ""
1794
 
1795
- #: includes/admin/core/class-admin-notices.php:584
 
 
 
 
1796
  #, php-format
1797
  msgid "<strong>%s %s</strong> Successfully Upgraded"
1798
  msgstr ""
1799
 
1800
- #: includes/admin/core/class-admin-notices.php:610
1801
  #, php-format
1802
  msgid ""
1803
  "Hey there! It's been one month since you installed %s. How have you found "
1804
  "the plugin so far?"
1805
  msgstr ""
1806
 
1807
- #: includes/admin/core/class-admin-notices.php:613
1808
  msgid "I love it!"
1809
  msgstr ""
1810
 
1811
- #: includes/admin/core/class-admin-notices.php:614
1812
  msgid "It's good but could be better"
1813
  msgstr ""
1814
 
1815
- #: includes/admin/core/class-admin-notices.php:615
1816
  msgid "I don't like the plugin"
1817
  msgstr ""
1818
 
1819
- #: includes/admin/core/class-admin-notices.php:620
1820
  #, php-format
1821
  msgid ""
1822
  "Great! We're happy to hear that you love the plugin. It would be amazing if "
@@ -1825,22 +1851,22 @@ msgid ""
1825
  "appreciated by us!"
1826
  msgstr ""
1827
 
1828
- #: includes/admin/core/class-admin-notices.php:624
1829
  msgid "Leave Review"
1830
  msgstr ""
1831
 
1832
- #: includes/admin/core/class-admin-notices.php:629
1833
  msgid ""
1834
  "We're glad to hear that you like the plugin but we would love to get your "
1835
  "feedback so we can make the plugin better."
1836
  msgstr ""
1837
 
1838
- #: includes/admin/core/class-admin-notices.php:633
1839
- #: includes/admin/core/class-admin-notices.php:642
1840
  msgid "Provide Feedback"
1841
  msgstr ""
1842
 
1843
- #: includes/admin/core/class-admin-notices.php:638
1844
  #, php-format
1845
  msgid ""
1846
  "We're sorry to hear that. If you're having the issue with the plugin you can "
@@ -1850,1247 +1876,1298 @@ msgid ""
1850
  "like about the plugin you can tell us know by giving us feedback."
1851
  msgstr ""
1852
 
1853
- #: includes/admin/core/class-admin-notices.php:664
1854
  #, php-format
1855
  msgid ""
1856
  "<strong>%s</strong> future plans! Detailed future list is <a href=\"%s\" "
1857
  "target=\"_blank\">here</a>"
1858
  msgstr ""
1859
 
1860
- #: includes/admin/core/class-admin-notices.php:680
1861
  msgid "Wrong Data"
1862
  msgstr ""
1863
 
1864
- #: includes/admin/core/class-admin-settings.php:108
1865
- #: includes/admin/core/class-admin-settings.php:117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1866
  #, php-format
1867
  msgid "%s page"
1868
  msgstr ""
1869
 
1870
- #: includes/admin/core/class-admin-settings.php:109
1871
  msgid "Add page ID"
1872
  msgstr ""
1873
 
1874
- #: includes/admin/core/class-admin-settings.php:119
1875
  msgid "Choose a page..."
1876
  msgstr ""
1877
 
1878
- #: includes/admin/core/class-admin-settings.php:131
1879
  msgid "Enable profile menu"
1880
  msgstr ""
1881
 
1882
- #: includes/admin/core/class-admin-settings.php:155
1883
- #: includes/admin/core/class-admin-settings.php:166
1884
  #, php-format
1885
  msgid "%s Tab"
1886
  msgstr ""
1887
 
1888
- #: includes/admin/core/class-admin-settings.php:173
1889
  #, php-format
1890
  msgid "Who can see %s Tab?"
1891
  msgstr ""
1892
 
1893
- #: includes/admin/core/class-admin-settings.php:174
1894
  msgid "Select which users can view this tab."
1895
  msgstr ""
1896
 
1897
- #: includes/admin/core/class-admin-settings.php:183
1898
  msgid "Allowed roles"
1899
  msgstr ""
1900
 
1901
- #: includes/admin/core/class-admin-settings.php:184
1902
  msgid "Select the the user roles allowed to view this tab."
1903
  msgstr ""
1904
 
1905
- #: includes/admin/core/class-admin-settings.php:186
1906
  msgid "Choose user roles..."
1907
  msgstr ""
1908
 
1909
- #: includes/admin/core/class-admin-settings.php:199
1910
  msgid "Profile menu default tab"
1911
  msgstr ""
1912
 
1913
- #: includes/admin/core/class-admin-settings.php:200
1914
  msgid "This will be the default tab on user profile page"
1915
  msgstr ""
1916
 
1917
- #: includes/admin/core/class-admin-settings.php:210
1918
  msgid "Enable menu icons in desktop view"
1919
  msgstr ""
1920
 
1921
- #: includes/admin/core/class-admin-settings.php:263
1922
  msgid "Global Site Access"
1923
  msgstr ""
1924
 
1925
- #: includes/admin/core/class-admin-settings.php:264
1926
  msgid ""
1927
  "Globally control the access of your site, you can have seperate restrict "
1928
  "options per post/page by editing the desired item."
1929
  msgstr ""
1930
 
1931
- #: includes/admin/core/class-admin-settings.php:266
1932
  msgid "Site accessible to Everyone"
1933
  msgstr ""
1934
 
1935
- #: includes/admin/core/class-admin-settings.php:267
1936
  msgid "Site accessible to Logged In Users"
1937
  msgstr ""
1938
 
1939
- #: includes/admin/core/class-admin-settings.php:274
1940
  msgid "Custom Redirect URL"
1941
  msgstr ""
1942
 
1943
- #: includes/admin/core/class-admin-settings.php:275
1944
  msgid ""
1945
  "A logged out user will be redirected to this url If he is not permitted to "
1946
  "access the site"
1947
  msgstr ""
1948
 
1949
- #: includes/admin/core/class-admin-settings.php:281
1950
  msgid "Exclude the following URLs"
1951
  msgstr ""
1952
 
1953
- #: includes/admin/core/class-admin-settings.php:282
1954
  msgid ""
1955
  "Here you can exclude URLs beside the redirect URI to be accessible to "
1956
  "everyone"
1957
  msgstr ""
1958
 
1959
- #: includes/admin/core/class-admin-settings.php:283
1960
  msgid "Add New URL"
1961
  msgstr ""
1962
 
1963
- #: includes/admin/core/class-admin-settings.php:290
1964
  msgid "Allow Homepage to be accessible"
1965
  msgstr ""
1966
 
1967
- #: includes/admin/core/class-admin-settings.php:296
1968
  msgid "Allow Category pages to be accessible"
1969
  msgstr ""
1970
 
1971
- #: includes/admin/core/class-admin-settings.php:302
1972
  msgid "Restricted Access Message"
1973
  msgstr ""
1974
 
1975
- #: includes/admin/core/class-admin-settings.php:303
1976
  msgid ""
1977
  "This is the message shown to users that do not have permission to view the "
1978
  "content"
1979
  msgstr ""
1980
 
1981
- #: includes/admin/core/class-admin-settings.php:312
1982
  msgid "Allow Gutenberg Blocks restriction options"
1983
  msgstr ""
1984
 
1985
- #: includes/admin/core/class-admin-settings.php:317
1986
  msgid "Restricted Block Message"
1987
  msgstr ""
1988
 
1989
- #: includes/admin/core/class-admin-settings.php:318
1990
  msgid ""
1991
  "This is the message shown to users that do not have permission to view the "
1992
  "block's content"
1993
  msgstr ""
1994
 
1995
- #: includes/admin/core/class-admin-settings.php:336
1996
  msgid "Restricted Access to Posts"
1997
  msgstr ""
1998
 
1999
- #: includes/admin/core/class-admin-settings.php:337
2000
  msgid "Restriction content of the current Posts"
2001
  msgstr ""
2002
 
2003
- #: includes/admin/core/class-admin-settings.php:346
2004
  msgid "Restricted Access to Taxonomies"
2005
  msgstr ""
2006
 
2007
- #: includes/admin/core/class-admin-settings.php:347
2008
  msgid "Restriction content of the current Taxonomies"
2009
  msgstr ""
2010
 
2011
- #: includes/admin/core/class-admin-settings.php:377
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2012
  msgid "General"
2013
  msgstr ""
2014
 
2015
- #: includes/admin/core/class-admin-settings.php:380
2016
  msgid "Pages"
2017
  msgstr ""
2018
 
2019
- #: includes/admin/core/class-admin-settings.php:384
2020
  #: includes/admin/templates/dashboard/users.php:15
2021
  msgid "Users"
2022
  msgstr ""
2023
 
2024
- #: includes/admin/core/class-admin-settings.php:390
2025
  msgid "Profile Permalink Base"
2026
  msgstr ""
2027
 
2028
- #: includes/admin/core/class-admin-settings.php:391
2029
  msgid ""
2030
  "Here you can control the permalink structure of the user profile URL "
2031
  "globally e.g. "
2032
  msgstr ""
2033
 
2034
- #: includes/admin/core/class-admin-settings.php:393
2035
- #: includes/admin/core/class-admin-settings.php:410
2036
  #: includes/core/class-builtin.php:674 includes/core/class-builtin.php:677
2037
- #: includes/core/class-member-directory.php:243
2038
  msgid "Username"
2039
  msgstr ""
2040
 
2041
- #: includes/admin/core/class-admin-settings.php:394
2042
  msgid "First and Last Name with '.'"
2043
  msgstr ""
2044
 
2045
- #: includes/admin/core/class-admin-settings.php:395
2046
  msgid "First and Last Name with '-'"
2047
  msgstr ""
2048
 
2049
- #: includes/admin/core/class-admin-settings.php:396
2050
  msgid "First and Last Name with '+'"
2051
  msgstr ""
2052
 
2053
- #: includes/admin/core/class-admin-settings.php:397
2054
  msgid "User ID"
2055
  msgstr ""
2056
 
2057
- #: includes/admin/core/class-admin-settings.php:399
2058
- #: includes/admin/core/class-admin-settings.php:418
2059
  msgid "Select..."
2060
  msgstr ""
2061
 
2062
- #: includes/admin/core/class-admin-settings.php:405
2063
  msgid "User Display Name"
2064
  msgstr ""
2065
 
2066
- #: includes/admin/core/class-admin-settings.php:406
2067
  msgid ""
2068
  "This is the name that will be displayed for users on the front end of your "
2069
  "site. Default setting uses first/last name as display name if it exists"
2070
  msgstr ""
2071
 
2072
- #: includes/admin/core/class-admin-settings.php:408
2073
  msgid "Default WP Display Name"
2074
  msgstr ""
2075
 
2076
- #: includes/admin/core/class-admin-settings.php:409
2077
  #: includes/core/class-builtin.php:732 includes/core/class-builtin.php:735
2078
- #: includes/core/class-member-directory.php:244
2079
- #: includes/core/class-member-directory.php:272
2080
  msgid "Nickname"
2081
  msgstr ""
2082
 
2083
- #: includes/admin/core/class-admin-settings.php:411
2084
  msgid "First name & last name"
2085
  msgstr ""
2086
 
2087
- #: includes/admin/core/class-admin-settings.php:412
2088
  msgid "Last name & first name"
2089
  msgstr ""
2090
 
2091
- #: includes/admin/core/class-admin-settings.php:413
2092
  msgid "First name & first initial of last name"
2093
  msgstr ""
2094
 
2095
- #: includes/admin/core/class-admin-settings.php:414
2096
  msgid "First initial of first name & last name"
2097
  msgstr ""
2098
 
2099
- #: includes/admin/core/class-admin-settings.php:415
2100
  msgid "First name only"
2101
  msgstr ""
2102
 
2103
- #: includes/admin/core/class-admin-settings.php:416
2104
  msgid "Custom field(s)"
2105
  msgstr ""
2106
 
2107
- #: includes/admin/core/class-admin-settings.php:423
2108
  msgid "Display Name Custom Field(s)"
2109
  msgstr ""
2110
 
2111
- #: includes/admin/core/class-admin-settings.php:424
2112
  msgid ""
2113
  "Specify the custom field meta key or custom fields seperated by comma that "
2114
  "you want to use to display users name on the frontend of your site"
2115
  msgstr ""
2116
 
2117
- #: includes/admin/core/class-admin-settings.php:430
2118
  msgid "Automatically redirect author page to their profile?"
2119
  msgstr ""
2120
 
2121
- #: includes/admin/core/class-admin-settings.php:431
2122
  msgid ""
2123
  "If enabled, author pages will automatically redirect to the user's profile "
2124
  "page"
2125
  msgstr ""
2126
 
2127
- #: includes/admin/core/class-admin-settings.php:436
2128
  msgid "Enable Members Directory"
2129
  msgstr ""
2130
 
2131
- #: includes/admin/core/class-admin-settings.php:437
2132
  msgid "Control whether to enable or disable member directories on this site"
2133
  msgstr ""
2134
 
2135
- #: includes/admin/core/class-admin-settings.php:442
2136
  msgid "Use Gravatars?"
2137
  msgstr ""
2138
 
2139
- #: includes/admin/core/class-admin-settings.php:443
2140
  msgid ""
2141
  "Do you want to use gravatars instead of the default plugin profile photo (If "
2142
  "the user did not upload a custom profile photo / avatar)"
2143
  msgstr ""
2144
 
2145
- #: includes/admin/core/class-admin-settings.php:448
2146
  msgid "Use Gravatar builtin image"
2147
  msgstr ""
2148
 
2149
- #: includes/admin/core/class-admin-settings.php:449
2150
  msgid ""
2151
  "Gravatar has a number of built in options which you can also use as defaults"
2152
  msgstr ""
2153
 
2154
- #: includes/admin/core/class-admin-settings.php:452
2155
  msgid "404 ( File Not Found response )"
2156
  msgstr ""
2157
 
2158
- #: includes/admin/core/class-admin-settings.php:453
2159
  msgid "Mystery Man"
2160
  msgstr ""
2161
 
2162
- #: includes/admin/core/class-admin-settings.php:454
2163
  msgid "Identicon"
2164
  msgstr ""
2165
 
2166
- #: includes/admin/core/class-admin-settings.php:455
2167
  msgid "Monsterid"
2168
  msgstr ""
2169
 
2170
- #: includes/admin/core/class-admin-settings.php:456
2171
  msgid "Wavatar"
2172
  msgstr ""
2173
 
2174
- #: includes/admin/core/class-admin-settings.php:457
2175
  msgid "Retro"
2176
  msgstr ""
2177
 
2178
- #: includes/admin/core/class-admin-settings.php:458
2179
  msgid "Blank ( a transparent PNG image )"
2180
  msgstr ""
2181
 
2182
- #: includes/admin/core/class-admin-settings.php:466
2183
  msgid "Use Default plugin avatar as Gravatar's Default avatar"
2184
  msgstr ""
2185
 
2186
- #: includes/admin/core/class-admin-settings.php:467
2187
  msgid ""
2188
  "Do you want to use the plugin default avatar instead of the gravatar default "
2189
  "photo (If the user did not upload a custom profile photo / avatar)"
2190
  msgstr ""
2191
 
2192
- #: includes/admin/core/class-admin-settings.php:473
2193
  msgid "Require a strong password? (when user resets password only)"
2194
  msgstr ""
2195
 
2196
- #: includes/admin/core/class-admin-settings.php:474
2197
  msgid ""
2198
  "Enable or disable a strong password rules on password reset and change "
2199
  "procedure"
2200
  msgstr ""
2201
 
2202
- #: includes/admin/core/class-admin-settings.php:479
2203
- #: includes/class-config.php:136 includes/class-config.php:790
2204
  #: includes/core/class-account.php:97
2205
  msgid "Account"
2206
  msgstr ""
2207
 
2208
- #: includes/admin/core/class-admin-settings.php:484
2209
  msgid "Password Account Tab"
2210
  msgstr ""
2211
 
2212
- #: includes/admin/core/class-admin-settings.php:490
2213
  msgid "Privacy Account Tab"
2214
  msgstr ""
2215
 
2216
- #: includes/admin/core/class-admin-settings.php:491
2217
  msgid "Enable/disable the Privacy account tab in account page"
2218
  msgstr ""
2219
 
2220
- #: includes/admin/core/class-admin-settings.php:496
2221
  msgid "Notifications Account Tab"
2222
  msgstr ""
2223
 
2224
- #: includes/admin/core/class-admin-settings.php:497
2225
  msgid "Enable/disable the Notifications account tab in account page"
2226
  msgstr ""
2227
 
2228
- #: includes/admin/core/class-admin-settings.php:502
2229
  msgid "Delete Account Tab"
2230
  msgstr ""
2231
 
2232
- #: includes/admin/core/class-admin-settings.php:503
2233
  msgid "Enable/disable the Delete account tab in account page"
2234
  msgstr ""
2235
 
2236
- #: includes/admin/core/class-admin-settings.php:508
2237
  msgid "Account Deletion Custom Text"
2238
  msgstr ""
2239
 
2240
- #: includes/admin/core/class-admin-settings.php:509
2241
  msgid ""
2242
  "This is custom text that will be displayed to users before they delete their "
2243
  "accounts from your site"
2244
  msgstr ""
2245
 
2246
- #: includes/admin/core/class-admin-settings.php:517
2247
  msgid "Add a First & Last Name fields"
2248
  msgstr ""
2249
 
2250
- #: includes/admin/core/class-admin-settings.php:518
2251
  msgid ""
2252
  "Whether to enable these fields on the user account page by default or hide "
2253
  "them."
2254
  msgstr ""
2255
 
2256
- #: includes/admin/core/class-admin-settings.php:523
2257
  msgid "Disable First & Last Name fields"
2258
  msgstr ""
2259
 
2260
- #: includes/admin/core/class-admin-settings.php:524
2261
  msgid ""
2262
  "Whether to allow users changing their first and last name in account page."
2263
  msgstr ""
2264
 
2265
- #: includes/admin/core/class-admin-settings.php:530
2266
  msgid "Require First & Last Name"
2267
  msgstr ""
2268
 
2269
- #: includes/admin/core/class-admin-settings.php:531
2270
  msgid "Require first and last name?"
2271
  msgstr ""
2272
 
2273
- #: includes/admin/core/class-admin-settings.php:537
2274
  msgid "Allow users to change e-mail"
2275
  msgstr ""
2276
 
2277
- #: includes/admin/core/class-admin-settings.php:538
2278
  msgid "Whether to allow users changing their email in account page."
2279
  msgstr ""
2280
 
2281
- #: includes/admin/core/class-admin-settings.php:543
2282
  msgid "Password is required?"
2283
  msgstr ""
2284
 
2285
- #: includes/admin/core/class-admin-settings.php:544
2286
  msgid "Password is required to save account data."
2287
  msgstr ""
2288
 
2289
- #: includes/admin/core/class-admin-settings.php:549
 
 
 
 
 
 
 
 
 
 
2290
  msgid "Allow users to hide their profiles from directory"
2291
  msgstr ""
2292
 
2293
- #: includes/admin/core/class-admin-settings.php:550
2294
  msgid ""
2295
  "Whether to allow users changing their profile visibility from member "
2296
  "directory in account page."
2297
  msgstr ""
2298
 
2299
- #: includes/admin/core/class-admin-settings.php:555
2300
- msgid "Require a strong password?"
2301
  msgstr ""
2302
 
2303
- #: includes/admin/core/class-admin-settings.php:556
2304
- msgid ""
2305
- "Enable or disable a strong password rules on account page / change password "
2306
- "tab"
2307
  msgstr ""
2308
 
2309
- #: includes/admin/core/class-admin-settings.php:561
2310
  msgid "Uploads"
2311
  msgstr ""
2312
 
2313
- #: includes/admin/core/class-admin-settings.php:567
2314
  msgid "Profile Photo Maximum File Size (bytes)"
2315
  msgstr ""
2316
 
2317
- #: includes/admin/core/class-admin-settings.php:568
2318
  msgid "Sets a maximum size for the uploaded photo"
2319
  msgstr ""
2320
 
2321
- #: includes/admin/core/class-admin-settings.php:575
2322
  msgid "Cover Photo Maximum File Size (bytes)"
2323
  msgstr ""
2324
 
2325
- #: includes/admin/core/class-admin-settings.php:576
2326
  msgid "Sets a maximum size for the uploaded cover"
2327
  msgstr ""
2328
 
2329
- #: includes/admin/core/class-admin-settings.php:582
2330
  msgid "Profile Photo Thumbnail Sizes (px)"
2331
  msgstr ""
2332
 
2333
- #: includes/admin/core/class-admin-settings.php:583
2334
  msgid ""
2335
  "Here you can define which thumbnail sizes will be created for each profile "
2336
  "photo upload."
2337
  msgstr ""
2338
 
2339
- #: includes/admin/core/class-admin-settings.php:585
2340
- #: includes/admin/core/class-admin-settings.php:595
2341
  msgid "Add New Size"
2342
  msgstr ""
2343
 
2344
- #: includes/admin/core/class-admin-settings.php:592
2345
  msgid "Cover Photo Thumbnail Sizes (px)"
2346
  msgstr ""
2347
 
2348
- #: includes/admin/core/class-admin-settings.php:593
2349
  msgid ""
2350
  "Here you can define which thumbnail sizes will be created for each cover "
2351
  "photo upload."
2352
  msgstr ""
2353
 
2354
- #: includes/admin/core/class-admin-settings.php:603
2355
  msgid "Image Quality"
2356
  msgstr ""
2357
 
2358
- #: includes/admin/core/class-admin-settings.php:604
2359
  msgid ""
2360
  "Quality is used to determine quality of image uploads, and ranges from 0 "
2361
  "(worst quality, smaller file) to 100 (best quality, biggest file). The "
2362
  "default range is 60."
2363
  msgstr ""
2364
 
2365
- #: includes/admin/core/class-admin-settings.php:611
2366
  msgid "Image Upload Maximum Width (px)"
2367
  msgstr ""
2368
 
2369
- #: includes/admin/core/class-admin-settings.php:612
2370
  msgid ""
2371
  "Any image upload above this width will be resized to this limit "
2372
  "automatically."
2373
  msgstr ""
2374
 
2375
- #: includes/admin/core/class-admin-settings.php:619
2376
  msgid "Cover Photo Minimum Width (px)"
2377
  msgstr ""
2378
 
2379
- #: includes/admin/core/class-admin-settings.php:620
2380
  msgid "This will be the minimum width for cover photo uploads"
2381
  msgstr ""
2382
 
2383
- #: includes/admin/core/class-admin-settings.php:627
2384
  msgid "Access"
2385
  msgstr ""
2386
 
2387
- #: includes/admin/core/class-admin-settings.php:630
2388
  msgid "Restriction Content"
2389
  msgstr ""
2390
 
2391
- #: includes/admin/core/class-admin-settings.php:634
2392
  msgid "Other"
2393
  msgstr ""
2394
 
2395
- #: includes/admin/core/class-admin-settings.php:639
2396
  msgid "Enable the Reset Password Limit?"
2397
  msgstr ""
2398
 
2399
- #: includes/admin/core/class-admin-settings.php:644
2400
  msgid "Reset Password Limit"
2401
  msgstr ""
2402
 
2403
- #: includes/admin/core/class-admin-settings.php:645
2404
  msgid ""
2405
  "Set the maximum reset password limit. If reached the maximum limit, user "
2406
  "will be locked from using this."
2407
  msgstr ""
2408
 
2409
- #: includes/admin/core/class-admin-settings.php:653
2410
  msgid "Blocked Email Addresses"
2411
  msgstr ""
2412
 
2413
- #: includes/admin/core/class-admin-settings.php:654
2414
  msgid ""
2415
  "This will block the specified e-mail addresses from being able to sign up or "
2416
  "sign in to your site. To block an entire domain, use something like *@domain."
2417
  "com"
2418
  msgstr ""
2419
 
2420
- #: includes/admin/core/class-admin-settings.php:659
2421
  msgid "Blacklist Words"
2422
  msgstr ""
2423
 
2424
- #: includes/admin/core/class-admin-settings.php:660
2425
  msgid ""
2426
  "This option lets you specify blacklist of words to prevent anyone from "
2427
  "signing up with such a word as their username"
2428
  msgstr ""
2429
 
2430
- #: includes/admin/core/class-admin-settings.php:667
2431
  #: includes/admin/core/list-tables/emails-list-table.php:300
2432
  msgid "Email"
2433
  msgstr ""
2434
 
2435
- #: includes/admin/core/class-admin-settings.php:672
2436
  msgid "Admin E-mail Address"
2437
  msgstr ""
2438
 
2439
- #: includes/admin/core/class-admin-settings.php:673
2440
- #: includes/admin/core/class-admin-settings.php:685
2441
  msgid "e.g. admin@companyname.com"
2442
  msgstr ""
2443
 
2444
- #: includes/admin/core/class-admin-settings.php:678
2445
  msgid "Mail appears from"
2446
  msgstr ""
2447
 
2448
- #: includes/admin/core/class-admin-settings.php:679
2449
  msgid "e.g. Site Name"
2450
  msgstr ""
2451
 
2452
- #: includes/admin/core/class-admin-settings.php:684
2453
  msgid "Mail appears from address"
2454
  msgstr ""
2455
 
2456
- #: includes/admin/core/class-admin-settings.php:690
2457
  msgid "Use HTML for E-mails?"
2458
  msgstr ""
2459
 
2460
- #: includes/admin/core/class-admin-settings.php:691
2461
  msgid ""
2462
  "If you plan use e-mails with HTML, please make sure that this option is "
2463
  "enabled. Otherwise, HTML will be displayed as plain text."
2464
  msgstr ""
2465
 
2466
- #: includes/admin/core/class-admin-settings.php:696
2467
  msgid "Appearance"
2468
  msgstr ""
2469
 
2470
- #: includes/admin/core/class-admin-settings.php:699
2471
  msgid "Profile"
2472
  msgstr ""
2473
 
2474
- #: includes/admin/core/class-admin-settings.php:704
2475
  msgid "Profile Default Template"
2476
  msgstr ""
2477
 
2478
- #: includes/admin/core/class-admin-settings.php:705
2479
  msgid "This will be the default template to output profile"
2480
  msgstr ""
2481
 
2482
- #: includes/admin/core/class-admin-settings.php:713
2483
  msgid "Profile Maximum Width"
2484
  msgstr ""
2485
 
2486
- #: includes/admin/core/class-admin-settings.php:715
2487
- #: includes/admin/core/class-admin-settings.php:924
2488
- #: includes/admin/core/class-admin-settings.php:1014
2489
  msgid "The maximum width this shortcode can take from the page width"
2490
  msgstr ""
2491
 
2492
- #: includes/admin/core/class-admin-settings.php:722
2493
  msgid "Profile Area Maximum Width"
2494
  msgstr ""
2495
 
2496
- #: includes/admin/core/class-admin-settings.php:724
2497
  #: includes/admin/templates/form/profile_customize.php:59
2498
  msgid ""
2499
  "The maximum width of the profile area inside profile (below profile header)"
2500
  msgstr ""
2501
 
2502
- #: includes/admin/core/class-admin-settings.php:730
2503
  msgid "Profile Field Icons"
2504
  msgstr ""
2505
 
2506
- #: includes/admin/core/class-admin-settings.php:731
2507
  msgid "This is applicable for edit mode only"
2508
  msgstr ""
2509
 
2510
- #: includes/admin/core/class-admin-settings.php:734
2511
- #: includes/admin/core/class-admin-settings.php:947
2512
- #: includes/admin/core/class-admin-settings.php:1037
2513
  #: includes/admin/templates/form/login_customize.php:43
2514
  #: includes/admin/templates/form/profile_customize.php:70
2515
  #: includes/admin/templates/form/register_customize.php:58
2516
  msgid "Show inside text field"
2517
  msgstr ""
2518
 
2519
- #: includes/admin/core/class-admin-settings.php:735
2520
- #: includes/admin/core/class-admin-settings.php:948
2521
- #: includes/admin/core/class-admin-settings.php:1038
2522
  #: includes/admin/templates/form/login_customize.php:44
2523
  #: includes/admin/templates/form/profile_customize.php:71
2524
  #: includes/admin/templates/form/register_customize.php:59
2525
  msgid "Show with label"
2526
  msgstr ""
2527
 
2528
- #: includes/admin/core/class-admin-settings.php:736
2529
- #: includes/admin/core/class-admin-settings.php:949
2530
- #: includes/admin/core/class-admin-settings.php:1039
2531
  #: includes/admin/templates/form/login_customize.php:45
2532
  #: includes/admin/templates/form/profile_customize.php:72
2533
  #: includes/admin/templates/form/register_customize.php:60
2534
  msgid "Turn off"
2535
  msgstr ""
2536
 
2537
- #: includes/admin/core/class-admin-settings.php:743
2538
  msgid "Profile Primary Button Text"
2539
  msgstr ""
2540
 
2541
- #: includes/admin/core/class-admin-settings.php:745
2542
  msgid "The text that is used for updating profile button"
2543
  msgstr ""
2544
 
2545
- #: includes/admin/core/class-admin-settings.php:751
2546
  msgid "Profile Secondary Button"
2547
  msgstr ""
2548
 
2549
- #: includes/admin/core/class-admin-settings.php:753
2550
- #: includes/admin/core/class-admin-settings.php:966
2551
- #: includes/admin/core/class-admin-settings.php:1056
2552
  msgid "Switch on/off the secondary button display in the form"
2553
  msgstr ""
2554
 
2555
- #: includes/admin/core/class-admin-settings.php:758
2556
  msgid "Profile Secondary Button Text"
2557
  msgstr ""
2558
 
2559
- #: includes/admin/core/class-admin-settings.php:760
2560
  msgid "The text that is used for cancelling update profile button"
2561
  msgstr ""
2562
 
2563
- #: includes/admin/core/class-admin-settings.php:767
2564
  msgid "Default Profile Photo"
2565
  msgstr ""
2566
 
2567
- #: includes/admin/core/class-admin-settings.php:768
2568
  msgid ""
2569
  "You can change the default profile picture globally here. Please make sure "
2570
  "that the photo is 300x300px."
2571
  msgstr ""
2572
 
2573
- #: includes/admin/core/class-admin-settings.php:769
2574
  msgid "Select Default Profile Photo"
2575
  msgstr ""
2576
 
2577
- #: includes/admin/core/class-admin-settings.php:779
2578
  msgid "Default Cover Photo"
2579
  msgstr ""
2580
 
2581
- #: includes/admin/core/class-admin-settings.php:780
2582
  msgid ""
2583
  "You can change the default cover photo globally here. Please make sure that "
2584
  "the default cover is large enough and respects the ratio you are using for "
2585
  "cover photos."
2586
  msgstr ""
2587
 
2588
- #: includes/admin/core/class-admin-settings.php:781
2589
  msgid "Select Default Cover Photo"
2590
  msgstr ""
2591
 
2592
- #: includes/admin/core/class-admin-settings.php:786
2593
  #: includes/admin/templates/form/profile_customize.php:140
2594
  msgid "Disable Profile Photo Upload"
2595
  msgstr ""
2596
 
2597
- #: includes/admin/core/class-admin-settings.php:787
2598
  #: includes/admin/templates/form/profile_customize.php:141
2599
  msgid "Switch on/off the profile photo uploader"
2600
  msgstr ""
2601
 
2602
- #: includes/admin/core/class-admin-settings.php:793
2603
  #: includes/admin/templates/form/profile_customize.php:152
2604
  msgid "Profile Photo Size"
2605
  msgstr ""
2606
 
2607
- #: includes/admin/core/class-admin-settings.php:796
2608
  msgid ""
2609
  "The global default of profile photo size. This can be overridden by "
2610
  "individual form settings"
2611
  msgstr ""
2612
 
2613
- #: includes/admin/core/class-admin-settings.php:802
2614
  msgid "Profile Cover Photos"
2615
  msgstr ""
2616
 
2617
- #: includes/admin/core/class-admin-settings.php:804
2618
  msgid "Switch on/off the profile cover photos"
2619
  msgstr ""
2620
 
2621
- #: includes/admin/core/class-admin-settings.php:809
2622
  msgid "Profile Cover Size"
2623
  msgstr ""
2624
 
2625
- #: includes/admin/core/class-admin-settings.php:812
2626
  msgid ""
2627
  "The global default width of cover photo size. This can be overridden by "
2628
  "individual form settings"
2629
  msgstr ""
2630
 
2631
- #: includes/admin/core/class-admin-settings.php:819
2632
  msgid "Profile Cover Ratio"
2633
  msgstr ""
2634
 
2635
- #: includes/admin/core/class-admin-settings.php:820
2636
  msgid "Choose global ratio for cover photos of profiles"
2637
  msgstr ""
2638
 
2639
- #: includes/admin/core/class-admin-settings.php:834
2640
  msgid "Profile Header Meta Text Icon"
2641
  msgstr ""
2642
 
2643
- #: includes/admin/core/class-admin-settings.php:836
2644
  msgid "Display field icons for related user meta fields in header or not"
2645
  msgstr ""
2646
 
2647
- #: includes/admin/core/class-admin-settings.php:841
2648
  msgid "Show display name in profile header"
2649
  msgstr ""
2650
 
2651
- #: includes/admin/core/class-admin-settings.php:843
2652
  msgid "Switch on/off the user name on profile header"
2653
  msgstr ""
2654
 
2655
- #: includes/admin/core/class-admin-settings.php:848
2656
  msgid "Show social links in profile header"
2657
  msgstr ""
2658
 
2659
- #: includes/admin/core/class-admin-settings.php:850
2660
  msgid "Switch on/off the social links on profile header"
2661
  msgstr ""
2662
 
2663
- #: includes/admin/core/class-admin-settings.php:855
2664
  msgid "Show user description in header"
2665
  msgstr ""
2666
 
2667
- #: includes/admin/core/class-admin-settings.php:857
2668
  msgid "Switch on/off the user description on profile header"
2669
  msgstr ""
2670
 
2671
- #: includes/admin/core/class-admin-settings.php:862
2672
  msgid "Enable HTML support for user description"
2673
  msgstr ""
2674
 
2675
- #: includes/admin/core/class-admin-settings.php:863
2676
  msgid ""
2677
  "Switch on/off to enable/disable support for html tags on user description."
2678
  msgstr ""
2679
 
2680
- #: includes/admin/core/class-admin-settings.php:868
2681
  msgid "User description maximum chars"
2682
  msgstr ""
2683
 
2684
- #: includes/admin/core/class-admin-settings.php:870
2685
  msgid ""
2686
  "Maximum number of characters to allow in user description field in header."
2687
  msgstr ""
2688
 
2689
- #: includes/admin/core/class-admin-settings.php:877
2690
  msgid "Profile Header Menu Position"
2691
  msgstr ""
2692
 
2693
- #: includes/admin/core/class-admin-settings.php:879
2694
  msgid ""
2695
  "For incompatible themes, please make the menu open from left instead of "
2696
  "bottom by default."
2697
  msgstr ""
2698
 
2699
- #: includes/admin/core/class-admin-settings.php:881
2700
  msgid "Bottom of Icon"
2701
  msgstr ""
2702
 
2703
- #: includes/admin/core/class-admin-settings.php:882
2704
  msgid "Left of Icon (right for RTL)"
2705
  msgstr ""
2706
 
2707
- #: includes/admin/core/class-admin-settings.php:889
2708
  msgid "Show a custom message if profile is empty"
2709
  msgstr ""
2710
 
2711
- #: includes/admin/core/class-admin-settings.php:891
2712
  msgid "Switch on/off the custom message that appears when the profile is empty"
2713
  msgstr ""
2714
 
2715
- #: includes/admin/core/class-admin-settings.php:896
2716
  msgid "Show the emoticon"
2717
  msgstr ""
2718
 
2719
- #: includes/admin/core/class-admin-settings.php:898
2720
  msgid "Switch on/off the emoticon (sad face) that appears above the message"
2721
  msgstr ""
2722
 
2723
- #: includes/admin/core/class-admin-settings.php:904
2724
  msgid "Profile Menu"
2725
  msgstr ""
2726
 
2727
- #: includes/admin/core/class-admin-settings.php:908
2728
  #: includes/admin/templates/form/mode.php:12
2729
  msgid "Registration Form"
2730
  msgstr ""
2731
 
2732
- #: includes/admin/core/class-admin-settings.php:913
2733
  msgid "Registration Default Template"
2734
  msgstr ""
2735
 
2736
- #: includes/admin/core/class-admin-settings.php:914
2737
  msgid "This will be the default template to output registration"
2738
  msgstr ""
2739
 
2740
- #: includes/admin/core/class-admin-settings.php:922
2741
  msgid "Registration Maximum Width"
2742
  msgstr ""
2743
 
2744
- #: includes/admin/core/class-admin-settings.php:930
2745
  msgid "Registration Shortcode Alignment"
2746
  msgstr ""
2747
 
2748
- #: includes/admin/core/class-admin-settings.php:931
2749
- #: includes/admin/core/class-admin-settings.php:1021
2750
  #: includes/admin/templates/form/profile_customize.php:127
2751
  msgid "The shortcode is centered by default unless you specify otherwise here"
2752
  msgstr ""
2753
 
2754
- #: includes/admin/core/class-admin-settings.php:934
2755
- #: includes/admin/core/class-admin-settings.php:1024
2756
  msgid "Centered"
2757
  msgstr ""
2758
 
2759
- #: includes/admin/core/class-admin-settings.php:935
2760
- #: includes/admin/core/class-admin-settings.php:1025
2761
  msgid "Left aligned"
2762
  msgstr ""
2763
 
2764
- #: includes/admin/core/class-admin-settings.php:936
2765
- #: includes/admin/core/class-admin-settings.php:1026
2766
  msgid "Right aligned"
2767
  msgstr ""
2768
 
2769
- #: includes/admin/core/class-admin-settings.php:943
2770
  msgid "Registration Field Icons"
2771
  msgstr ""
2772
 
2773
- #: includes/admin/core/class-admin-settings.php:944
2774
  msgid "This controls the display of field icons in the registration form"
2775
  msgstr ""
2776
 
2777
- #: includes/admin/core/class-admin-settings.php:956
2778
  msgid "Registration Primary Button Text"
2779
  msgstr ""
2780
 
2781
- #: includes/admin/core/class-admin-settings.php:958
2782
- #: includes/admin/core/class-admin-settings.php:1048
2783
  msgid "The text that is used for primary button text"
2784
  msgstr ""
2785
 
2786
- #: includes/admin/core/class-admin-settings.php:964
2787
  msgid "Registration Secondary Button"
2788
  msgstr ""
2789
 
2790
- #: includes/admin/core/class-admin-settings.php:971
2791
  msgid "Registration Secondary Button Text"
2792
  msgstr ""
2793
 
2794
- #: includes/admin/core/class-admin-settings.php:973
2795
- #: includes/admin/core/class-admin-settings.php:1063
2796
  msgid "The text that is used for the secondary button text"
2797
  msgstr ""
2798
 
2799
- #: includes/admin/core/class-admin-settings.php:980
2800
  msgid "Registration Secondary Button URL"
2801
  msgstr ""
2802
 
2803
- #: includes/admin/core/class-admin-settings.php:982
2804
- #: includes/admin/core/class-admin-settings.php:1072
2805
  msgid "You can replace default link for this button by entering custom URL"
2806
  msgstr ""
2807
 
2808
- #: includes/admin/core/class-admin-settings.php:989
2809
  msgid "Registration Default Role"
2810
  msgstr ""
2811
 
2812
- #: includes/admin/core/class-admin-settings.php:990
2813
  msgid ""
2814
  "This will be the default role assigned to users registering thru "
2815
  "registration form"
2816
  msgstr ""
2817
 
2818
- #: includes/admin/core/class-admin-settings.php:998
2819
  #: includes/admin/templates/form/mode.php:16
2820
  msgid "Login Form"
2821
  msgstr ""
2822
 
2823
- #: includes/admin/core/class-admin-settings.php:1003
2824
  msgid "Login Default Template"
2825
  msgstr ""
2826
 
2827
- #: includes/admin/core/class-admin-settings.php:1004
2828
  msgid "This will be the default template to output login"
2829
  msgstr ""
2830
 
2831
- #: includes/admin/core/class-admin-settings.php:1012
2832
  msgid "Login Maximum Width"
2833
  msgstr ""
2834
 
2835
- #: includes/admin/core/class-admin-settings.php:1020
2836
  msgid "Login Shortcode Alignment"
2837
  msgstr ""
2838
 
2839
- #: includes/admin/core/class-admin-settings.php:1033
2840
  msgid "Login Field Icons"
2841
  msgstr ""
2842
 
2843
- #: includes/admin/core/class-admin-settings.php:1034
2844
  msgid "This controls the display of field icons in the login form"
2845
  msgstr ""
2846
 
2847
- #: includes/admin/core/class-admin-settings.php:1046
2848
  msgid "Login Primary Button Text"
2849
  msgstr ""
2850
 
2851
- #: includes/admin/core/class-admin-settings.php:1054
2852
  msgid "Login Secondary Button"
2853
  msgstr ""
2854
 
2855
- #: includes/admin/core/class-admin-settings.php:1061
2856
  msgid "Login Secondary Button Text"
2857
  msgstr ""
2858
 
2859
- #: includes/admin/core/class-admin-settings.php:1070
2860
  msgid "Login Secondary Button URL"
2861
  msgstr ""
2862
 
2863
- #: includes/admin/core/class-admin-settings.php:1079
2864
  msgid "Login Forgot Password Link"
2865
  msgstr ""
2866
 
2867
- #: includes/admin/core/class-admin-settings.php:1081
2868
  msgid "Switch on/off the forgot password link in login form"
2869
  msgstr ""
2870
 
2871
- #: includes/admin/core/class-admin-settings.php:1086
2872
  msgid "Show \"Remember Me\""
2873
  msgstr ""
2874
 
2875
- #: includes/admin/core/class-admin-settings.php:1088
2876
  msgid ""
2877
  "Allow users to choose If they want to stay signed in even after closing the "
2878
  "browser. If you do not show this option, the default will be to not remember "
2879
  "login session."
2880
  msgstr ""
2881
 
2882
- #: includes/admin/core/class-admin-settings.php:1098
2883
  msgid "Licenses"
2884
  msgstr ""
2885
 
2886
- #: includes/admin/core/class-admin-settings.php:1101
2887
  msgid "Misc"
2888
  msgstr ""
2889
 
2890
- #: includes/admin/core/class-admin-settings.php:1106
2891
  msgid "Show an asterisk for required fields"
2892
  msgstr ""
2893
 
2894
- #: includes/admin/core/class-admin-settings.php:1111
2895
  msgid "User Profile Title"
2896
  msgstr ""
2897
 
2898
- #: includes/admin/core/class-admin-settings.php:1112
2899
  msgid "This is the title that is displayed on a specific user profile"
2900
  msgstr ""
2901
 
2902
- #: includes/admin/core/class-admin-settings.php:1118
2903
  msgid "User Profile Dynamic Meta Description"
2904
  msgstr ""
2905
 
2906
- #: includes/admin/core/class-admin-settings.php:1119
2907
  msgid ""
2908
  "This will be used in the meta description that is available for search-"
2909
  "engines."
2910
  msgstr ""
2911
 
2912
- #: includes/admin/core/class-admin-settings.php:1127
2913
  msgid "Disable Cache User Profile"
2914
  msgstr ""
2915
 
2916
- #: includes/admin/core/class-admin-settings.php:1128
2917
  msgid ""
2918
  "Check this box if you would like to disable Ultimate Member user's cache."
2919
  msgstr ""
2920
 
2921
- #: includes/admin/core/class-admin-settings.php:1133
2922
  msgid "Enable Gutenberg Blocks"
2923
  msgstr ""
2924
 
2925
- #: includes/admin/core/class-admin-settings.php:1134
2926
  msgid ""
2927
  "Check this box if you would like to use Ultimate Member blocks in Gutenberg "
2928
  "editor. Important some themes have the conflicts with Gutenberg editor."
2929
  msgstr ""
2930
 
2931
- #: includes/admin/core/class-admin-settings.php:1139
2932
  msgid "REST API version"
2933
  msgstr ""
2934
 
2935
- #: includes/admin/core/class-admin-settings.php:1140
2936
  msgid ""
2937
  "This controls the REST API version, we recommend to use the last version"
2938
  msgstr ""
2939
 
2940
- #: includes/admin/core/class-admin-settings.php:1142
2941
  msgid "1.0 version"
2942
  msgstr ""
2943
 
2944
- #: includes/admin/core/class-admin-settings.php:1143
2945
  msgid "2.0 version"
2946
  msgstr ""
2947
 
2948
- #: includes/admin/core/class-admin-settings.php:1149
2949
  msgid "Remove Data on Uninstall?"
2950
  msgstr ""
2951
 
2952
- #: includes/admin/core/class-admin-settings.php:1150
2953
  msgid ""
2954
  "Check this box if you would like Ultimate Member to completely remove all of "
2955
  "its data when the plugin/extensions are deleted."
2956
  msgstr ""
2957
 
2958
- #: includes/admin/core/class-admin-settings.php:1155
2959
  msgid "Install Info"
2960
  msgstr ""
2961
 
2962
- #: includes/admin/core/class-admin-settings.php:1272
2963
  msgid "Ultimate Member - Settings"
2964
  msgstr ""
2965
 
2966
- #: includes/admin/core/class-admin-settings.php:1402
2967
  msgid "Save Changes"
2968
  msgstr ""
2969
 
2970
- #: includes/admin/core/class-admin-settings.php:1860
2971
  msgid "Subject Line"
2972
  msgstr ""
2973
 
2974
- #: includes/admin/core/class-admin-settings.php:1862
2975
  msgid "This is the subject line of the e-mail"
2976
  msgstr ""
2977
 
2978
- #: includes/admin/core/class-admin-settings.php:1867
2979
  msgid "Message Body"
2980
  msgstr ""
2981
 
2982
- #: includes/admin/core/class-admin-settings.php:1869
2983
  msgid "This is the content of the e-mail"
2984
  msgstr ""
2985
 
2986
- #: includes/admin/core/class-admin-settings.php:1919
2987
- #: includes/admin/core/class-admin-settings.php:2029
2988
  #, php-format
2989
  msgid ""
2990
  "Your license key expired on %s. Please <a href=\"%s\" target=\"_blank"
2991
  "\">renew your license key</a>."
2992
  msgstr ""
2993
 
2994
- #: includes/admin/core/class-admin-settings.php:1932
2995
- #: includes/admin/core/class-admin-settings.php:2042
2996
  #, php-format
2997
  msgid ""
2998
  "Your license key has been disabled. Please <a href=\"%s\" target=\"_blank"
2999
  "\">contact support</a> for more information."
3000
  msgstr ""
3001
 
3002
- #: includes/admin/core/class-admin-settings.php:1944
3003
- #: includes/admin/core/class-admin-settings.php:2054
3004
  #, php-format
3005
  msgid ""
3006
  "Invalid license. Please <a href=\"%s\" target=\"_blank\">visit your account "
3007
  "page</a> and verify it."
3008
  msgstr ""
3009
 
3010
- #: includes/admin/core/class-admin-settings.php:1957
3011
- #: includes/admin/core/class-admin-settings.php:2067
3012
  #, php-format
3013
  msgid ""
3014
  "Your %s is not active for this URL. Please <a href=\"%s\" target=\"_blank"
3015
  "\">visit your account page</a> to manage your license key URLs."
3016
  msgstr ""
3017
 
3018
- #: includes/admin/core/class-admin-settings.php:1969
3019
- #: includes/admin/core/class-admin-settings.php:2079
3020
  #, php-format
3021
  msgid "This appears to be an invalid license key for %s."
3022
  msgstr ""
3023
 
3024
- #: includes/admin/core/class-admin-settings.php:1978
3025
- #: includes/admin/core/class-admin-settings.php:2088
3026
  #, php-format
3027
  msgid ""
3028
  "Your license key has reached its activation limit. <a href=\"%s\">View "
3029
  "possible upgrades</a> now."
3030
  msgstr ""
3031
 
3032
- #: includes/admin/core/class-admin-settings.php:1987
3033
- #: includes/admin/core/class-admin-settings.php:2097
3034
  msgid ""
3035
  "The key you entered belongs to a bundle, please use the product specific "
3036
  "license key."
3037
  msgstr ""
3038
 
3039
- #: includes/admin/core/class-admin-settings.php:1995
3040
- #: includes/admin/core/class-admin-settings.php:2003
3041
- #: includes/admin/core/class-admin-settings.php:2015
3042
  msgid "unknown_error"
3043
  msgstr ""
3044
 
3045
- #: includes/admin/core/class-admin-settings.php:1996
3046
- #: includes/admin/core/class-admin-settings.php:2004
3047
  #, php-format
3048
  msgid ""
3049
  "There was an error with this license key: %s. Please <a href=\"%s\">contact "
3050
  "our support team</a>."
3051
  msgstr ""
3052
 
3053
- #: includes/admin/core/class-admin-settings.php:2017
3054
  #, php-format
3055
  msgid ""
3056
  "There was an error with this license key: %s%s. Please <a href=\"%s"
3057
  "\">contact our support team</a>."
3058
  msgstr ""
3059
 
3060
- #: includes/admin/core/class-admin-settings.php:2112
3061
  msgid "License key never expires."
3062
  msgstr ""
3063
 
3064
- #: includes/admin/core/class-admin-settings.php:2119
3065
  #, php-format
3066
  msgid ""
3067
  "Your license key expires soon! It expires on %s. <a href=\"%s\" target="
3068
  "\"_blank\">Renew your license key</a>."
3069
  msgstr ""
3070
 
3071
- #: includes/admin/core/class-admin-settings.php:2129
3072
  #, php-format
3073
  msgid "Your license key expires on %s."
3074
  msgstr ""
3075
 
3076
- #: includes/admin/core/class-admin-settings.php:2147
3077
  #, php-format
3078
  msgid "To receive updates, please enter your valid %s license key."
3079
  msgstr ""
3080
 
3081
- #: includes/admin/core/class-admin-settings.php:2169
3082
  msgid "Clear License"
3083
  msgstr ""
3084
 
3085
- #: includes/admin/core/class-admin-settings.php:2171
3086
  msgid "Activate"
3087
  msgstr ""
3088
 
3089
- #: includes/admin/core/class-admin-settings.php:2173
3090
  msgid "Re-Activate"
3091
  msgstr ""
3092
 
3093
- #: includes/admin/core/class-admin-settings.php:2225
3094
  msgid ""
3095
  "To copy the Install info, click below then press Ctrl + C (PC) or Cmd + C "
3096
  "(Mac)."
@@ -3119,49 +3196,30 @@ msgstr ""
3119
  #: includes/admin/core/class-admin-upgrade.php:249
3120
  #, php-format
3121
  msgid ""
3122
- "You have installed %s version. Your latest DB version is %s. Before the "
3123
- "click to \"Run\" button make sure that did the following:"
3124
- msgstr ""
3125
-
3126
- #: includes/admin/core/class-admin-upgrade.php:251
3127
- msgid "Create full site's backup."
3128
- msgstr ""
3129
-
3130
- #: includes/admin/core/class-admin-upgrade.php:252
3131
- msgid "Set maintenance mode (if you need)"
3132
- msgstr ""
3133
-
3134
- #: includes/admin/core/class-admin-upgrade.php:253
3135
- msgid "You have nice Internet connection"
3136
- msgstr ""
3137
-
3138
- #: includes/admin/core/class-admin-upgrade.php:255
3139
- msgid ""
3140
- "After the click to \"Run\" button, the update process will be started. All "
3141
- "information will be displayed in \"Upgrade Log\" field."
3142
  msgstr ""
3143
 
3144
- #: includes/admin/core/class-admin-upgrade.php:256
3145
  msgid ""
3146
- "If the update was successful, you will see a corresponding message. "
3147
- "Otherwise, contact technical support if the update failed."
 
3148
  msgstr ""
3149
 
3150
- #: includes/admin/core/class-admin-upgrade.php:257
3151
  msgid "Upgrade Log"
3152
  msgstr ""
3153
 
3154
- #: includes/admin/core/class-admin-upgrade.php:260
3155
- msgid "Run"
3156
- msgstr ""
3157
-
3158
  #: includes/admin/core/class-admin-users.php:117
3159
  #: includes/admin/core/class-admin-users.php:120
3160
  msgid "UM Action"
3161
  msgstr ""
3162
 
3163
  #: includes/admin/core/class-admin-users.php:124
3164
- #: includes/core/class-fields.php:2544
3165
  msgid "Apply"
3166
  msgstr ""
3167
 
@@ -3204,7 +3262,7 @@ msgstr ""
3204
 
3205
  #: includes/admin/core/class-admin-users.php:314
3206
  #: includes/admin/templates/dashboard/users.php:28
3207
- #: includes/core/class-user.php:831
3208
  msgid "Approved"
3209
  msgstr ""
3210
 
@@ -3271,7 +3329,7 @@ msgstr ""
3271
  #: includes/admin/core/list-tables/roles-list-table.php:22
3272
  #: includes/admin/core/list-tables/roles-list-table.php:89
3273
  #: includes/admin/core/list-tables/roles-list-table.php:402
3274
- #: includes/core/class-member-directory.php:266
3275
  msgid "Roles"
3276
  msgstr ""
3277
 
@@ -3401,10 +3459,12 @@ msgstr ""
3401
 
3402
  #: includes/admin/core/packages/2.0-beta1/init.php:73
3403
  #: includes/admin/core/packages/2.0-beta1/init.php:85
 
3404
  msgid " users..."
3405
  msgstr ""
3406
 
3407
  #: includes/admin/core/packages/2.0-beta1/init.php:85
 
3408
  msgid "There are "
3409
  msgstr ""
3410
 
@@ -3522,6 +3582,7 @@ msgid "Member directories were upgraded successfully"
3522
  msgstr ""
3523
 
3524
  #: includes/admin/core/packages/2.1.0-beta1/init.php:7
 
3525
  msgid "Upgrade user metadata..."
3526
  msgstr ""
3527
 
@@ -3529,6 +3590,23 @@ msgstr ""
3529
  msgid "Upgrade Member Directories..."
3530
  msgstr ""
3531
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3532
  #: includes/admin/templates/dashboard/cache.php:12
3533
  msgid "Run this task from time to time to keep your DB clean."
3534
  msgstr ""
@@ -3570,12 +3648,12 @@ msgid "Get latest versions"
3570
  msgstr ""
3571
 
3572
  #: includes/admin/templates/dashboard/users.php:60
3573
- #: includes/core/class-user.php:839
3574
  msgid "Pending Review"
3575
  msgstr ""
3576
 
3577
  #: includes/admin/templates/dashboard/users.php:73
3578
- #: includes/core/class-user.php:835
3579
  msgid "Awaiting E-mail Confirmation"
3580
  msgstr ""
3581
 
@@ -3722,7 +3800,7 @@ msgstr ""
3722
 
3723
  #: includes/admin/templates/directory/profile.php:48
3724
  #: includes/admin/templates/directory/profile.php:64
3725
- #: includes/admin/templates/directory/search.php:93
3726
  msgid "Add New Custom Field"
3727
  msgstr ""
3728
 
@@ -3746,69 +3824,69 @@ msgstr ""
3746
  msgid "If not checked always shown"
3747
  msgstr ""
3748
 
3749
- #: includes/admin/templates/directory/search.php:55
3750
  msgid "Enable Search feature"
3751
  msgstr ""
3752
 
3753
- #: includes/admin/templates/directory/search.php:56
3754
  msgid "If turned on, users will be able to search members in this directory"
3755
  msgstr ""
3756
 
3757
- #: includes/admin/templates/directory/search.php:62
3758
  msgid "User Roles that can use search"
3759
  msgstr ""
3760
 
3761
- #: includes/admin/templates/directory/search.php:63
3762
  msgid "If you want to allow specific user roles to be able to search only"
3763
  msgstr ""
3764
 
3765
- #: includes/admin/templates/directory/search.php:72
3766
  msgid "Enable Filters feature"
3767
  msgstr ""
3768
 
3769
- #: includes/admin/templates/directory/search.php:73
3770
  msgid "If turned on, users will be able to filter members in this directory"
3771
  msgstr ""
3772
 
3773
- #: includes/admin/templates/directory/search.php:79
3774
  msgid "User Roles that can use filters"
3775
  msgstr ""
3776
 
3777
- #: includes/admin/templates/directory/search.php:80
3778
  msgid "If you want to allow specific user roles to be able to filter only"
3779
  msgstr ""
3780
 
3781
- #: includes/admin/templates/directory/search.php:89
3782
  msgid "Choose filter(s) meta to enable"
3783
  msgstr ""
3784
 
3785
- #: includes/admin/templates/directory/search.php:100
3786
  msgid "Expand the filter bar by default"
3787
  msgstr ""
3788
 
3789
- #: includes/admin/templates/directory/search.php:101
3790
  msgid "If turned on, filters bar will be visible after a page loading"
3791
  msgstr ""
3792
 
3793
- #: includes/admin/templates/directory/search.php:108
3794
  msgid "Can filter bar be collapsed"
3795
  msgstr ""
3796
 
3797
- #: includes/admin/templates/directory/search.php:109
3798
  msgid "If turned on, filters bar can be collapsed after a page loading"
3799
  msgstr ""
3800
 
3801
- #: includes/admin/templates/directory/search.php:116
3802
  msgid "Admin filtering"
3803
  msgstr ""
3804
 
3805
- #: includes/admin/templates/directory/search.php:117
3806
  msgid ""
3807
  "Limit which users appear in the member directory e.g only display users from "
3808
  "USA"
3809
  msgstr ""
3810
 
3811
- #: includes/admin/templates/directory/search.php:120
3812
  msgid "Add New Filter"
3813
  msgstr ""
3814
 
@@ -3820,57 +3898,66 @@ msgstr ""
3820
  msgid "Default sorting users by a specific parameter in the directory"
3821
  msgstr ""
3822
 
3823
- #: includes/admin/templates/directory/sorting.php:23
3824
- msgid "Meta key"
3825
- msgstr ""
3826
-
3827
  #: includes/admin/templates/directory/sorting.php:24
3828
  msgid "To sort by a custom field, enter the meta key of field here"
3829
  msgstr ""
3830
 
3831
  #: includes/admin/templates/directory/sorting.php:31
3832
- msgid "Enable custom sorting"
3833
  msgstr ""
3834
 
3835
  #: includes/admin/templates/directory/sorting.php:32
 
 
 
 
 
 
 
 
3836
  msgid ""
3837
  "Whether to provide an ability to change the sorting on the directory page"
3838
  msgstr ""
3839
 
3840
- #: includes/admin/templates/directory/sorting.php:38
3841
  msgid "Choose field(s) to enable in sorting"
3842
  msgstr ""
3843
 
3844
- #: includes/admin/templates/directory/sorting.php:41
 
 
 
 
 
3845
  #: includes/admin/templates/form/profile_settings.php:25
3846
  msgid "Add New Field"
3847
  msgstr ""
3848
 
3849
- #: includes/admin/templates/extensions.php:161
3850
  msgid ""
3851
  "<strong>All Access Pass</strong> – Get access to all Ultimate Member "
3852
  "extensions at a significant discount with our All Access Pass."
3853
  msgstr ""
3854
 
3855
- #: includes/admin/templates/extensions.php:165
3856
  msgid "View Pricing"
3857
  msgstr ""
3858
 
3859
- #: includes/admin/templates/extensions.php:174
3860
  msgid "Premium"
3861
  msgstr ""
3862
 
3863
- #: includes/admin/templates/extensions.php:179
3864
  msgid "Free"
3865
  msgstr ""
3866
 
3867
- #: includes/admin/templates/extensions.php:205
3868
- #: includes/admin/templates/extensions.php:239
3869
  msgid "Get this Add on"
3870
  msgstr ""
3871
 
3872
- #: includes/admin/templates/extensions.php:210
3873
- #: includes/admin/templates/extensions.php:244
3874
  msgid "More Details"
3875
  msgstr ""
3876
 
@@ -4200,14 +4287,14 @@ msgstr ""
4200
  #: includes/admin/templates/modal/dynamic_new_field.php:18
4201
  #: includes/admin/templates/modal/dynamic_new_group.php:18
4202
  #: includes/admin/templates/modal/fonticons.php:14
4203
- #: includes/admin/templates/role/publish.php:24 includes/class-config.php:252
4204
- #: includes/core/class-fields.php:2545 includes/core/class-fields.php:2642
4205
  #: includes/core/um-actions-profile.php:674
4206
  #: includes/core/um-actions-profile.php:686
4207
  #: includes/core/um-actions-profile.php:874
4208
  #: includes/core/um-actions-profile.php:907
4209
- #: includes/core/um-actions-profile.php:1252
4210
- #: includes/core/um-actions-profile.php:1259
4211
  msgid "Cancel"
4212
  msgstr ""
4213
 
@@ -4556,193 +4643,193 @@ msgstr ""
4556
  msgid "Check All"
4557
  msgstr ""
4558
 
4559
- #: includes/class-config.php:131 includes/class-config.php:785
4560
  msgid "User"
4561
  msgstr ""
4562
 
4563
- #: includes/class-config.php:132 includes/class-config.php:262
4564
- #: includes/class-config.php:270 includes/class-config.php:786
4565
  msgid "Login"
4566
  msgstr ""
4567
 
4568
- #: includes/class-config.php:133 includes/class-config.php:260
4569
- #: includes/class-config.php:274 includes/class-config.php:787
4570
  msgid "Register"
4571
  msgstr ""
4572
 
4573
- #: includes/class-config.php:135 includes/class-config.php:789
4574
- #: includes/core/class-member-directory.php:1996
4575
- #: includes/core/um-actions-profile.php:1258
4576
  #: includes/core/um-actions-user.php:19
4577
  msgid "Logout"
4578
  msgstr ""
4579
 
4580
- #: includes/class-config.php:137 includes/class-config.php:791
4581
  msgid "Password Reset"
4582
  msgstr ""
4583
 
4584
- #: includes/class-config.php:179 includes/class-config.php:279
4585
  msgid "{total_users} Members"
4586
  msgstr ""
4587
 
4588
- #: includes/class-config.php:180 includes/class-config.php:280
4589
  msgid "{total_users} Member"
4590
  msgstr ""
4591
 
4592
- #: includes/class-config.php:181
4593
  msgid "We are sorry. We cannot find any users who match your search criteria."
4594
  msgstr ""
4595
 
4596
- #: includes/class-config.php:250
4597
  msgid "Update Profile"
4598
  msgstr ""
4599
 
4600
- #: includes/class-config.php:339
4601
  msgid "Account Welcome Email"
4602
  msgstr ""
4603
 
4604
- #: includes/class-config.php:350
4605
  msgid ""
4606
  "Whether to send the user an email when his account is automatically approved"
4607
  msgstr ""
4608
 
4609
- #: includes/class-config.php:356
4610
  msgid "Account Activation Email"
4611
  msgstr ""
4612
 
4613
- #: includes/class-config.php:364
4614
  msgid ""
4615
  "Whether to send the user an email when his account needs e-mail activation"
4616
  msgstr ""
4617
 
4618
- #: includes/class-config.php:369
4619
  msgid "Your account is pending review"
4620
  msgstr ""
4621
 
4622
- #: includes/class-config.php:377
4623
  msgid "Whether to send the user an email when his account needs admin review"
4624
  msgstr ""
4625
 
4626
- #: includes/class-config.php:382
4627
  msgid "Account Approved Email"
4628
  msgstr ""
4629
 
4630
- #: includes/class-config.php:394
4631
  msgid "Whether to send the user an email when his account is approved"
4632
  msgstr ""
4633
 
4634
- #: includes/class-config.php:399
4635
  msgid "Account Rejected Email"
4636
  msgstr ""
4637
 
4638
- #: includes/class-config.php:406
4639
  msgid "Whether to send the user an email when his account is rejected"
4640
  msgstr ""
4641
 
4642
- #: includes/class-config.php:411
4643
  msgid "Account Deactivated Email"
4644
  msgstr ""
4645
 
4646
- #: includes/class-config.php:418
4647
  msgid "Whether to send the user an email when his account is deactivated"
4648
  msgstr ""
4649
 
4650
- #: includes/class-config.php:424
4651
  msgid "Account Deleted Email"
4652
  msgstr ""
4653
 
4654
- #: includes/class-config.php:431
4655
  msgid "Whether to send the user an email when his account is deleted"
4656
  msgstr ""
4657
 
4658
- #: includes/class-config.php:437
4659
  msgid "Password Reset Email"
4660
  msgstr ""
4661
 
4662
- #: includes/class-config.php:445
4663
  msgid ""
4664
  "Whether to send an email when users changed their password (Recommended, "
4665
  "please keep on)"
4666
  msgstr ""
4667
 
4668
- #: includes/class-config.php:451
4669
  msgid "Password Changed Email"
4670
  msgstr ""
4671
 
4672
- #: includes/class-config.php:458
4673
  msgid ""
4674
  "Whether to send the user an email when he request to reset password "
4675
  "(Recommended, please keep on)"
4676
  msgstr ""
4677
 
4678
- #: includes/class-config.php:464
4679
  msgid "Account Updated Email"
4680
  msgstr ""
4681
 
4682
- #: includes/class-config.php:471
4683
  msgid "Whether to send the user an email when he updated their account"
4684
  msgstr ""
4685
 
4686
- #: includes/class-config.php:477
4687
  msgid "New User Notification"
4688
  msgstr ""
4689
 
4690
- #: includes/class-config.php:483
4691
  msgid "Whether to receive notification when a new user account is approved"
4692
  msgstr ""
4693
 
4694
- #: includes/class-config.php:489
4695
  msgid "Account Needs Review Notification"
4696
  msgstr ""
4697
 
4698
- #: includes/class-config.php:496
4699
  msgid "Whether to receive notification when an account needs admin review"
4700
  msgstr ""
4701
 
4702
- #: includes/class-config.php:501
4703
  msgid "Account Deletion Notification"
4704
  msgstr ""
4705
 
4706
- #: includes/class-config.php:504
4707
  msgid "Whether to receive notification when an account is deleted"
4708
  msgstr ""
4709
 
4710
- #: includes/class-config.php:527
4711
  msgid ""
4712
  "Are you sure you want to delete your account? This will erase all of your "
4713
  "account data from the site. To delete your account enter your password below"
4714
  msgstr ""
4715
 
4716
- #: includes/class-dependencies.php:191
4717
  #, php-format
4718
  msgid ""
4719
  "This version of <strong>\"%s\"</strong> requires the core <strong>%s</"
4720
  "strong> plugin to be <strong>%s</strong> or higher."
4721
  msgstr ""
4722
 
4723
- #: includes/class-dependencies.php:193
4724
  #, php-format
4725
  msgid "Please update <strong>%s</strong> to the latest version."
4726
  msgstr ""
4727
 
4728
- #: includes/class-dependencies.php:195
4729
  #, php-format
4730
  msgid ""
4731
  "Sorry, but this version of <strong>%s</strong> does not work with extension "
4732
  "<strong>\"%s\" %s</strong> version."
4733
  msgstr ""
4734
 
4735
- #: includes/class-dependencies.php:197
4736
  #, php-format
4737
  msgid "Please update extension <strong>\"%s\"</strong> to the latest version."
4738
  msgstr ""
4739
 
4740
- #: includes/class-dependencies.php:206
4741
  #, php-format
4742
  msgid "Please check <strong>\"%s\" %s</strong> extension's folder name."
4743
  msgstr ""
4744
 
4745
- #: includes/class-dependencies.php:208
4746
  #, php-format
4747
  msgid "Correct folder name is <strong>\"%s\"</strong>"
4748
  msgstr ""
@@ -4752,7 +4839,7 @@ msgstr ""
4752
  msgid "%s License Key"
4753
  msgstr ""
4754
 
4755
- #: includes/class-init.php:156 includes/class-init.php:165
4756
  msgid "Cheatin&#8217; huh?"
4757
  msgstr ""
4758
 
@@ -4777,7 +4864,7 @@ msgid "Update Notifications"
4777
  msgstr ""
4778
 
4779
  #: includes/core/class-account.php:124 includes/core/class-account.php:125
4780
- #: includes/core/class-builtin.php:1141 includes/core/class-builtin.php:1144
4781
  msgid "Delete Account"
4782
  msgstr ""
4783
 
@@ -4856,7 +4943,7 @@ msgstr ""
4856
  msgid "You must add a shortcode to the content area"
4857
  msgstr ""
4858
 
4859
- #: includes/core/class-builtin.php:663 includes/core/class-user.php:1561
4860
  msgid "Only me"
4861
  msgstr ""
4862
 
@@ -4866,17 +4953,17 @@ msgid "Username or E-mail"
4866
  msgstr ""
4867
 
4868
  #: includes/core/class-builtin.php:712 includes/core/class-builtin.php:715
4869
- #: includes/core/class-member-directory.php:270
4870
  msgid "First Name"
4871
  msgstr ""
4872
 
4873
  #: includes/core/class-builtin.php:722 includes/core/class-builtin.php:725
4874
- #: includes/core/class-member-directory.php:271
4875
  msgid "Last Name"
4876
  msgstr ""
4877
 
4878
  #: includes/core/class-builtin.php:742 includes/core/class-builtin.php:745
4879
- #: includes/core/class-builtin.php:1350
4880
  msgid "Website URL"
4881
  msgstr ""
4882
 
@@ -4885,7 +4972,7 @@ msgid "Registration Date"
4885
  msgstr ""
4886
 
4887
  #: includes/core/class-builtin.php:764 includes/core/class-builtin.php:767
4888
- #: includes/core/class-member-directory.php:268
4889
  msgid "Last Login"
4890
  msgstr ""
4891
 
@@ -4894,12 +4981,12 @@ msgid "E-mail Address"
4894
  msgstr ""
4895
 
4896
  #: includes/core/class-builtin.php:786 includes/core/class-builtin.php:789
4897
- #: includes/core/class-member-directory.php:273
4898
  msgid "Secondary E-mail Address"
4899
  msgstr ""
4900
 
4901
  #: includes/core/class-builtin.php:798 includes/core/class-builtin.php:801
4902
- #: includes/core/class-member-directory.php:274
4903
  msgid "Biography"
4904
  msgstr ""
4905
 
@@ -4912,7 +4999,7 @@ msgid "Birth Date"
4912
  msgstr ""
4913
 
4914
  #: includes/core/class-builtin.php:825 includes/core/class-builtin.php:828
4915
- #: includes/core/class-member-directory.php:264
4916
  msgid "Gender"
4917
  msgstr ""
4918
 
@@ -4925,7 +5012,7 @@ msgid "Female"
4925
  msgstr ""
4926
 
4927
  #: includes/core/class-builtin.php:836 includes/core/class-builtin.php:839
4928
- #: includes/core/class-member-directory.php:263
4929
  msgid "Country"
4930
  msgstr ""
4931
 
@@ -4954,7 +5041,7 @@ msgid "Instagram"
4954
  msgstr ""
4955
 
4956
  #: includes/core/class-builtin.php:938 includes/core/class-builtin.php:941
4957
- #: includes/core/class-builtin.php:1342
4958
  msgid "Skype ID"
4959
  msgstr ""
4960
 
@@ -4983,7 +5070,7 @@ msgid "Roles (Radio)"
4983
  msgstr ""
4984
 
4985
  #: includes/core/class-builtin.php:1030
4986
- #: includes/core/class-member-directory.php:265
4987
  msgid "Languages"
4988
  msgstr ""
4989
 
@@ -4996,13 +5083,13 @@ msgid "Select languages"
4996
  msgstr ""
4997
 
4998
  #: includes/core/class-builtin.php:1042 includes/core/class-builtin.php:1045
4999
- #: includes/core/class-builtin.php:1341
5000
- #: includes/core/class-member-directory.php:275
5001
  msgid "Phone Number"
5002
  msgstr ""
5003
 
5004
  #: includes/core/class-builtin.php:1054 includes/core/class-builtin.php:1057
5005
- #: includes/core/class-member-directory.php:276
5006
  msgid "Mobile Number"
5007
  msgstr ""
5008
 
@@ -5051,1801 +5138,1801 @@ msgstr ""
5051
  msgid "Here you can hide yourself from appearing in public directory"
5052
  msgstr ""
5053
 
5054
- #: includes/core/class-builtin.php:1145
5055
  msgid ""
5056
  "If you confirm, everything related to your profile will be deleted "
5057
  "permanently from the site"
5058
  msgstr ""
5059
 
5060
- #: includes/core/class-builtin.php:1331
5061
  msgid "Alphabetic value only"
5062
  msgstr ""
5063
 
5064
- #: includes/core/class-builtin.php:1332
5065
  msgid "Alpha-numeric value"
5066
  msgstr ""
5067
 
5068
- #: includes/core/class-builtin.php:1333
5069
  msgid "English letters only"
5070
  msgstr ""
5071
 
5072
- #: includes/core/class-builtin.php:1334
5073
  msgid "Facebook URL"
5074
  msgstr ""
5075
 
5076
- #: includes/core/class-builtin.php:1335
5077
  msgid "Google+ URL"
5078
  msgstr ""
5079
 
5080
- #: includes/core/class-builtin.php:1336
5081
  msgid "Instagram URL"
5082
  msgstr ""
5083
 
5084
- #: includes/core/class-builtin.php:1337
5085
  msgid "LinkedIn URL"
5086
  msgstr ""
5087
 
5088
- #: includes/core/class-builtin.php:1338
5089
  msgid "VKontakte URL"
5090
  msgstr ""
5091
 
5092
- #: includes/core/class-builtin.php:1339
5093
  msgid "Lowercase only"
5094
  msgstr ""
5095
 
5096
- #: includes/core/class-builtin.php:1340
5097
  msgid "Numeric value only"
5098
  msgstr ""
5099
 
5100
- #: includes/core/class-builtin.php:1343
5101
  msgid "SoundCloud Profile"
5102
  msgstr ""
5103
 
5104
- #: includes/core/class-builtin.php:1344
5105
  msgid "Twitter URL"
5106
  msgstr ""
5107
 
5108
- #: includes/core/class-builtin.php:1345
5109
  msgid "E-mail( Not Unique )"
5110
  msgstr ""
5111
 
5112
- #: includes/core/class-builtin.php:1346
5113
  msgid "Unique E-mail"
5114
  msgstr ""
5115
 
5116
- #: includes/core/class-builtin.php:1347
5117
  msgid "Unique Metakey value"
5118
  msgstr ""
5119
 
5120
- #: includes/core/class-builtin.php:1348
5121
  msgid "Unique Username"
5122
  msgstr ""
5123
 
5124
- #: includes/core/class-builtin.php:1349
5125
  msgid "Unique Username/E-mail"
5126
  msgstr ""
5127
 
5128
- #: includes/core/class-builtin.php:1351
5129
  msgid "YouTube Profile"
5130
  msgstr ""
5131
 
5132
- #: includes/core/class-builtin.php:1352
5133
  msgid "Custom Validation"
5134
  msgstr ""
5135
 
5136
- #: includes/core/class-builtin.php:1391
5137
  msgid "Afar"
5138
  msgstr ""
5139
 
5140
- #: includes/core/class-builtin.php:1392
5141
  msgid "Abkhazian"
5142
  msgstr ""
5143
 
5144
- #: includes/core/class-builtin.php:1393
5145
  msgid "Avestan"
5146
  msgstr ""
5147
 
5148
- #: includes/core/class-builtin.php:1394
5149
  msgid "Afrikaans"
5150
  msgstr ""
5151
 
5152
- #: includes/core/class-builtin.php:1395
5153
  msgid "Akan"
5154
  msgstr ""
5155
 
5156
- #: includes/core/class-builtin.php:1396
5157
  msgid "Amharic"
5158
  msgstr ""
5159
 
5160
- #: includes/core/class-builtin.php:1397
5161
  msgid "Aragonese"
5162
  msgstr ""
5163
 
5164
- #: includes/core/class-builtin.php:1398
5165
  msgid "Arabic"
5166
  msgstr ""
5167
 
5168
- #: includes/core/class-builtin.php:1399
5169
  msgid "Assamese"
5170
  msgstr ""
5171
 
5172
- #: includes/core/class-builtin.php:1400
5173
  msgid "Avaric"
5174
  msgstr ""
5175
 
5176
- #: includes/core/class-builtin.php:1401
5177
  msgid "Aymara"
5178
  msgstr ""
5179
 
5180
- #: includes/core/class-builtin.php:1402
5181
  msgid "Azerbaijani"
5182
  msgstr ""
5183
 
5184
- #: includes/core/class-builtin.php:1403
5185
  msgid "Bashkir"
5186
  msgstr ""
5187
 
5188
- #: includes/core/class-builtin.php:1404
5189
  msgid "Belarusian"
5190
  msgstr ""
5191
 
5192
- #: includes/core/class-builtin.php:1405
5193
  msgid "Bulgarian"
5194
  msgstr ""
5195
 
5196
- #: includes/core/class-builtin.php:1406
5197
  msgid "Bihari"
5198
  msgstr ""
5199
 
5200
- #: includes/core/class-builtin.php:1407
5201
  msgid "Bislama"
5202
  msgstr ""
5203
 
5204
- #: includes/core/class-builtin.php:1408
5205
  msgid "Bambara"
5206
  msgstr ""
5207
 
5208
- #: includes/core/class-builtin.php:1409
5209
  msgid "Bengali"
5210
  msgstr ""
5211
 
5212
- #: includes/core/class-builtin.php:1410
5213
  msgid "Tibetan"
5214
  msgstr ""
5215
 
5216
- #: includes/core/class-builtin.php:1411
5217
  msgid "Breton"
5218
  msgstr ""
5219
 
5220
- #: includes/core/class-builtin.php:1412
5221
  msgid "Bosnian"
5222
  msgstr ""
5223
 
5224
- #: includes/core/class-builtin.php:1413
5225
  msgid "Catalan"
5226
  msgstr ""
5227
 
5228
- #: includes/core/class-builtin.php:1414
5229
  msgid "Chechen"
5230
  msgstr ""
5231
 
5232
- #: includes/core/class-builtin.php:1415
5233
  msgid "Chamorro"
5234
  msgstr ""
5235
 
5236
- #: includes/core/class-builtin.php:1416
5237
  msgid "Corsican"
5238
  msgstr ""
5239
 
5240
- #: includes/core/class-builtin.php:1417
5241
  msgid "Cree"
5242
  msgstr ""
5243
 
5244
- #: includes/core/class-builtin.php:1418
5245
  msgid "Czech"
5246
  msgstr ""
5247
 
5248
- #: includes/core/class-builtin.php:1419
5249
  msgid "Church Slavic"
5250
  msgstr ""
5251
 
5252
- #: includes/core/class-builtin.php:1420
5253
  msgid "Chuvash"
5254
  msgstr ""
5255
 
5256
- #: includes/core/class-builtin.php:1421
5257
  msgid "Welsh"
5258
  msgstr ""
5259
 
5260
- #: includes/core/class-builtin.php:1422
5261
  msgid "Danish"
5262
  msgstr ""
5263
 
5264
- #: includes/core/class-builtin.php:1423
5265
  msgid "German"
5266
  msgstr ""
5267
 
5268
- #: includes/core/class-builtin.php:1424
5269
  msgid "Divehi"
5270
  msgstr ""
5271
 
5272
- #: includes/core/class-builtin.php:1425
5273
  msgid "Dzongkha"
5274
  msgstr ""
5275
 
5276
- #: includes/core/class-builtin.php:1426
5277
  msgid "Ewe"
5278
  msgstr ""
5279
 
5280
- #: includes/core/class-builtin.php:1427
5281
  msgid "Greek"
5282
  msgstr ""
5283
 
5284
- #: includes/core/class-builtin.php:1428
5285
  msgid "English"
5286
  msgstr ""
5287
 
5288
- #: includes/core/class-builtin.php:1429
5289
  msgid "Esperanto"
5290
  msgstr ""
5291
 
5292
- #: includes/core/class-builtin.php:1430
5293
  msgid "Spanish"
5294
  msgstr ""
5295
 
5296
- #: includes/core/class-builtin.php:1431
5297
  msgid "Estonian"
5298
  msgstr ""
5299
 
5300
- #: includes/core/class-builtin.php:1432
5301
  msgid "Basque"
5302
  msgstr ""
5303
 
5304
- #: includes/core/class-builtin.php:1433
5305
  msgid "Persian"
5306
  msgstr ""
5307
 
5308
- #: includes/core/class-builtin.php:1434
5309
  msgid "Fulah"
5310
  msgstr ""
5311
 
5312
- #: includes/core/class-builtin.php:1435
5313
  msgid "Finnish"
5314
  msgstr ""
5315
 
5316
- #: includes/core/class-builtin.php:1436
5317
  msgid "Fijian"
5318
  msgstr ""
5319
 
5320
- #: includes/core/class-builtin.php:1437
5321
  msgid "Faroese"
5322
  msgstr ""
5323
 
5324
- #: includes/core/class-builtin.php:1438
5325
  msgid "French"
5326
  msgstr ""
5327
 
5328
- #: includes/core/class-builtin.php:1439
5329
  msgid "Western Frisian"
5330
  msgstr ""
5331
 
5332
- #: includes/core/class-builtin.php:1440
5333
  msgid "Irish"
5334
  msgstr ""
5335
 
5336
- #: includes/core/class-builtin.php:1441
5337
  msgid "Scottish Gaelic"
5338
  msgstr ""
5339
 
5340
- #: includes/core/class-builtin.php:1442
5341
  msgid "Galician"
5342
  msgstr ""
5343
 
5344
- #: includes/core/class-builtin.php:1443
5345
  msgid "Guarani"
5346
  msgstr ""
5347
 
5348
- #: includes/core/class-builtin.php:1444
5349
  msgid "Gujarati"
5350
  msgstr ""
5351
 
5352
- #: includes/core/class-builtin.php:1445
5353
  msgid "Manx"
5354
  msgstr ""
5355
 
5356
- #: includes/core/class-builtin.php:1446
5357
  msgid "Hausa"
5358
  msgstr ""
5359
 
5360
- #: includes/core/class-builtin.php:1447
5361
  msgid "Hebrew"
5362
  msgstr ""
5363
 
5364
- #: includes/core/class-builtin.php:1448
5365
  msgid "Hindi"
5366
  msgstr ""
5367
 
5368
- #: includes/core/class-builtin.php:1449
5369
  msgid "Hiri Motu"
5370
  msgstr ""
5371
 
5372
- #: includes/core/class-builtin.php:1450
5373
  msgid "Croatian"
5374
  msgstr ""
5375
 
5376
- #: includes/core/class-builtin.php:1451
5377
  msgid "Haitian"
5378
  msgstr ""
5379
 
5380
- #: includes/core/class-builtin.php:1452
5381
  msgid "Hungarian"
5382
  msgstr ""
5383
 
5384
- #: includes/core/class-builtin.php:1453
5385
  msgid "Armenian"
5386
  msgstr ""
5387
 
5388
- #: includes/core/class-builtin.php:1454
5389
  msgid "Herero"
5390
  msgstr ""
5391
 
5392
- #: includes/core/class-builtin.php:1455
5393
  msgid "Interlingua (International Auxiliary Language Association)"
5394
  msgstr ""
5395
 
5396
- #: includes/core/class-builtin.php:1456
5397
  msgid "Indonesian"
5398
  msgstr ""
5399
 
5400
- #: includes/core/class-builtin.php:1457
5401
  msgid "Interlingue"
5402
  msgstr ""
5403
 
5404
- #: includes/core/class-builtin.php:1458
5405
  msgid "Igbo"
5406
  msgstr ""
5407
 
5408
- #: includes/core/class-builtin.php:1459
5409
  msgid "Sichuan Yi"
5410
  msgstr ""
5411
 
5412
- #: includes/core/class-builtin.php:1460
5413
  msgid "Inupiaq"
5414
  msgstr ""
5415
 
5416
- #: includes/core/class-builtin.php:1461
5417
  msgid "Ido"
5418
  msgstr ""
5419
 
5420
- #: includes/core/class-builtin.php:1462
5421
  msgid "Icelandic"
5422
  msgstr ""
5423
 
5424
- #: includes/core/class-builtin.php:1463
5425
  msgid "Italian"
5426
  msgstr ""
5427
 
5428
- #: includes/core/class-builtin.php:1464
5429
  msgid "Inuktitut"
5430
  msgstr ""
5431
 
5432
- #: includes/core/class-builtin.php:1465
5433
  msgid "Japanese"
5434
  msgstr ""
5435
 
5436
- #: includes/core/class-builtin.php:1466
5437
  msgid "Javanese"
5438
  msgstr ""
5439
 
5440
- #: includes/core/class-builtin.php:1467
5441
  msgid "Georgian"
5442
  msgstr ""
5443
 
5444
- #: includes/core/class-builtin.php:1468
5445
  msgid "Kongo"
5446
  msgstr ""
5447
 
5448
- #: includes/core/class-builtin.php:1469
5449
  msgid "Kikuyu"
5450
  msgstr ""
5451
 
5452
- #: includes/core/class-builtin.php:1470
5453
  msgid "Kwanyama"
5454
  msgstr ""
5455
 
5456
- #: includes/core/class-builtin.php:1471
5457
  msgid "Kazakh"
5458
  msgstr ""
5459
 
5460
- #: includes/core/class-builtin.php:1472
5461
  msgid "Kalaallisut"
5462
  msgstr ""
5463
 
5464
- #: includes/core/class-builtin.php:1473
5465
  msgid "Khmer"
5466
  msgstr ""
5467
 
5468
- #: includes/core/class-builtin.php:1474
5469
  msgid "Kannada"
5470
  msgstr ""
5471
 
5472
- #: includes/core/class-builtin.php:1475
5473
  msgid "Korean"
5474
  msgstr ""
5475
 
5476
- #: includes/core/class-builtin.php:1476
5477
  msgid "Kanuri"
5478
  msgstr ""
5479
 
5480
- #: includes/core/class-builtin.php:1477
5481
  msgid "Kashmiri"
5482
  msgstr ""
5483
 
5484
- #: includes/core/class-builtin.php:1478
5485
  msgid "Kurdish"
5486
  msgstr ""
5487
 
5488
- #: includes/core/class-builtin.php:1479
5489
  msgid "Komi"
5490
  msgstr ""
5491
 
5492
- #: includes/core/class-builtin.php:1480
5493
  msgid "Cornish"
5494
  msgstr ""
5495
 
5496
- #: includes/core/class-builtin.php:1481
5497
  msgid "Kirghiz"
5498
  msgstr ""
5499
 
5500
- #: includes/core/class-builtin.php:1482
5501
  msgid "Latin"
5502
  msgstr ""
5503
 
5504
- #: includes/core/class-builtin.php:1483
5505
  msgid "Luxembourgish"
5506
  msgstr ""
5507
 
5508
- #: includes/core/class-builtin.php:1484
5509
  msgid "Ganda"
5510
  msgstr ""
5511
 
5512
- #: includes/core/class-builtin.php:1485
5513
  msgid "Limburgish"
5514
  msgstr ""
5515
 
5516
- #: includes/core/class-builtin.php:1486
5517
  msgid "Lingala"
5518
  msgstr ""
5519
 
5520
- #: includes/core/class-builtin.php:1487
5521
  msgid "Lao"
5522
  msgstr ""
5523
 
5524
- #: includes/core/class-builtin.php:1488
5525
  msgid "Lithuanian"
5526
  msgstr ""
5527
 
5528
- #: includes/core/class-builtin.php:1489
5529
  msgid "Luba-Katanga"
5530
  msgstr ""
5531
 
5532
- #: includes/core/class-builtin.php:1490
5533
  msgid "Latvian"
5534
  msgstr ""
5535
 
5536
- #: includes/core/class-builtin.php:1491
5537
  msgid "Malagasy"
5538
  msgstr ""
5539
 
5540
- #: includes/core/class-builtin.php:1492
5541
  msgid "Marshallese"
5542
  msgstr ""
5543
 
5544
- #: includes/core/class-builtin.php:1493
5545
  msgid "Maori"
5546
  msgstr ""
5547
 
5548
- #: includes/core/class-builtin.php:1494
5549
  msgid "Macedonian"
5550
  msgstr ""
5551
 
5552
- #: includes/core/class-builtin.php:1495
5553
  msgid "Malayalam"
5554
  msgstr ""
5555
 
5556
- #: includes/core/class-builtin.php:1496
5557
  msgid "Mongolian"
5558
  msgstr ""
5559
 
5560
- #: includes/core/class-builtin.php:1497
5561
  msgid "Marathi"
5562
  msgstr ""
5563
 
5564
- #: includes/core/class-builtin.php:1498
5565
  msgid "Malay"
5566
  msgstr ""
5567
 
5568
- #: includes/core/class-builtin.php:1499
5569
  msgid "Maltese"
5570
  msgstr ""
5571
 
5572
- #: includes/core/class-builtin.php:1500
5573
  msgid "Burmese"
5574
  msgstr ""
5575
 
5576
- #: includes/core/class-builtin.php:1501 includes/core/class-builtin.php:1732
5577
  msgid "Nauru"
5578
  msgstr ""
5579
 
5580
- #: includes/core/class-builtin.php:1502
5581
  msgid "Norwegian Bokmal"
5582
  msgstr ""
5583
 
5584
- #: includes/core/class-builtin.php:1503
5585
  msgid "North Ndebele"
5586
  msgstr ""
5587
 
5588
- #: includes/core/class-builtin.php:1504
5589
  msgid "Nepali"
5590
  msgstr ""
5591
 
5592
- #: includes/core/class-builtin.php:1505
5593
  msgid "Ndonga"
5594
  msgstr ""
5595
 
5596
- #: includes/core/class-builtin.php:1506
5597
  msgid "Dutch"
5598
  msgstr ""
5599
 
5600
- #: includes/core/class-builtin.php:1507
5601
  msgid "Norwegian Nynorsk"
5602
  msgstr ""
5603
 
5604
- #: includes/core/class-builtin.php:1508
5605
  msgid "Norwegian"
5606
  msgstr ""
5607
 
5608
- #: includes/core/class-builtin.php:1509
5609
  msgid "South Ndebele"
5610
  msgstr ""
5611
 
5612
- #: includes/core/class-builtin.php:1510
5613
  msgid "Navajo"
5614
  msgstr ""
5615
 
5616
- #: includes/core/class-builtin.php:1511
5617
  msgid "Chichewa"
5618
  msgstr ""
5619
 
5620
- #: includes/core/class-builtin.php:1512
5621
  msgid "Occitan"
5622
  msgstr ""
5623
 
5624
- #: includes/core/class-builtin.php:1513
5625
  msgid "Ojibwa"
5626
  msgstr ""
5627
 
5628
- #: includes/core/class-builtin.php:1514
5629
  msgid "Oromo"
5630
  msgstr ""
5631
 
5632
- #: includes/core/class-builtin.php:1515
5633
  msgid "Oriya"
5634
  msgstr ""
5635
 
5636
- #: includes/core/class-builtin.php:1516
5637
  msgid "Ossetian"
5638
  msgstr ""
5639
 
5640
- #: includes/core/class-builtin.php:1517
5641
  msgid "Panjabi"
5642
  msgstr ""
5643
 
5644
- #: includes/core/class-builtin.php:1518
5645
  msgid "Pali"
5646
  msgstr ""
5647
 
5648
- #: includes/core/class-builtin.php:1519
5649
  msgid "Polish"
5650
  msgstr ""
5651
 
5652
- #: includes/core/class-builtin.php:1520
5653
  msgid "Pashto"
5654
  msgstr ""
5655
 
5656
- #: includes/core/class-builtin.php:1521
5657
  msgid "Portuguese"
5658
  msgstr ""
5659
 
5660
- #: includes/core/class-builtin.php:1522
5661
  msgid "Quechua"
5662
  msgstr ""
5663
 
5664
- #: includes/core/class-builtin.php:1523
5665
  msgid "Raeto-Romance"
5666
  msgstr ""
5667
 
5668
- #: includes/core/class-builtin.php:1524
5669
  msgid "Kirundi"
5670
  msgstr ""
5671
 
5672
- #: includes/core/class-builtin.php:1525
5673
  msgid "Romanian"
5674
  msgstr ""
5675
 
5676
- #: includes/core/class-builtin.php:1526
5677
  msgid "Russian"
5678
  msgstr ""
5679
 
5680
- #: includes/core/class-builtin.php:1527
5681
  msgid "Kinyarwanda"
5682
  msgstr ""
5683
 
5684
- #: includes/core/class-builtin.php:1528
5685
  msgid "Sanskrit"
5686
  msgstr ""
5687
 
5688
- #: includes/core/class-builtin.php:1529
5689
  msgid "Sardinian"
5690
  msgstr ""
5691
 
5692
- #: includes/core/class-builtin.php:1530
5693
  msgid "Sindhi"
5694
  msgstr ""
5695
 
5696
- #: includes/core/class-builtin.php:1531
5697
  msgid "Northern Sami"
5698
  msgstr ""
5699
 
5700
- #: includes/core/class-builtin.php:1532
5701
  msgid "Sango"
5702
  msgstr ""
5703
 
5704
- #: includes/core/class-builtin.php:1533
5705
  msgid "Sinhala"
5706
  msgstr ""
5707
 
5708
- #: includes/core/class-builtin.php:1534
5709
  msgid "Slovak"
5710
  msgstr ""
5711
 
5712
- #: includes/core/class-builtin.php:1535
5713
  msgid "Slovenian"
5714
  msgstr ""
5715
 
5716
- #: includes/core/class-builtin.php:1536
5717
  msgid "Samoan"
5718
  msgstr ""
5719
 
5720
- #: includes/core/class-builtin.php:1537
5721
  msgid "Shona"
5722
  msgstr ""
5723
 
5724
- #: includes/core/class-builtin.php:1538
5725
  msgid "Somali"
5726
  msgstr ""
5727
 
5728
- #: includes/core/class-builtin.php:1539
5729
  msgid "Albanian"
5730
  msgstr ""
5731
 
5732
- #: includes/core/class-builtin.php:1540
5733
  msgid "Serbian"
5734
  msgstr ""
5735
 
5736
- #: includes/core/class-builtin.php:1541
5737
  msgid "Swati"
5738
  msgstr ""
5739
 
5740
- #: includes/core/class-builtin.php:1542
5741
  msgid "Southern Sotho"
5742
  msgstr ""
5743
 
5744
- #: includes/core/class-builtin.php:1543
5745
  msgid "Sundanese"
5746
  msgstr ""
5747
 
5748
- #: includes/core/class-builtin.php:1544
5749
  msgid "Swedish"
5750
  msgstr ""
5751
 
5752
- #: includes/core/class-builtin.php:1545
5753
  msgid "Swahili"
5754
  msgstr ""
5755
 
5756
- #: includes/core/class-builtin.php:1546
5757
  msgid "Tamil"
5758
  msgstr ""
5759
 
5760
- #: includes/core/class-builtin.php:1547
5761
  msgid "Telugu"
5762
  msgstr ""
5763
 
5764
- #: includes/core/class-builtin.php:1548
5765
  msgid "Tajik"
5766
  msgstr ""
5767
 
5768
- #: includes/core/class-builtin.php:1549
5769
  msgid "Thai"
5770
  msgstr ""
5771
 
5772
- #: includes/core/class-builtin.php:1550
5773
  msgid "Tigrinya"
5774
  msgstr ""
5775
 
5776
- #: includes/core/class-builtin.php:1551
5777
  msgid "Turkmen"
5778
  msgstr ""
5779
 
5780
- #: includes/core/class-builtin.php:1552
5781
  msgid "Tagalog"
5782
  msgstr ""
5783
 
5784
- #: includes/core/class-builtin.php:1553
5785
  msgid "Tswana"
5786
  msgstr ""
5787
 
5788
- #: includes/core/class-builtin.php:1554 includes/core/class-builtin.php:1802
5789
  msgid "Tonga"
5790
  msgstr ""
5791
 
5792
- #: includes/core/class-builtin.php:1555
5793
  msgid "Turkish"
5794
  msgstr ""
5795
 
5796
- #: includes/core/class-builtin.php:1556
5797
  msgid "Tsonga"
5798
  msgstr ""
5799
 
5800
- #: includes/core/class-builtin.php:1557
5801
  msgid "Tatar"
5802
  msgstr ""
5803
 
5804
- #: includes/core/class-builtin.php:1558
5805
  msgid "Twi"
5806
  msgstr ""
5807
 
5808
- #: includes/core/class-builtin.php:1559
5809
  msgid "Tahitian"
5810
  msgstr ""
5811
 
5812
- #: includes/core/class-builtin.php:1560
5813
  msgid "Uighur"
5814
  msgstr ""
5815
 
5816
- #: includes/core/class-builtin.php:1561
5817
  msgid "Ukrainian"
5818
  msgstr ""
5819
 
5820
- #: includes/core/class-builtin.php:1562
5821
  msgid "Urdu"
5822
  msgstr ""
5823
 
5824
- #: includes/core/class-builtin.php:1563
5825
  msgid "Uzbek"
5826
  msgstr ""
5827
 
5828
- #: includes/core/class-builtin.php:1564
5829
  msgid "Venda"
5830
  msgstr ""
5831
 
5832
- #: includes/core/class-builtin.php:1565
5833
  msgid "Vietnamese"
5834
  msgstr ""
5835
 
5836
- #: includes/core/class-builtin.php:1566
5837
  msgid "Volapuk"
5838
  msgstr ""
5839
 
5840
- #: includes/core/class-builtin.php:1567
5841
  msgid "Walloon"
5842
  msgstr ""
5843
 
5844
- #: includes/core/class-builtin.php:1568
5845
  msgid "Wolof"
5846
  msgstr ""
5847
 
5848
- #: includes/core/class-builtin.php:1569
5849
  msgid "Xhosa"
5850
  msgstr ""
5851
 
5852
- #: includes/core/class-builtin.php:1570
5853
  msgid "Yiddish"
5854
  msgstr ""
5855
 
5856
- #: includes/core/class-builtin.php:1571
5857
  msgid "Yoruba"
5858
  msgstr ""
5859
 
5860
- #: includes/core/class-builtin.php:1572
5861
  msgid "Zhuang"
5862
  msgstr ""
5863
 
5864
- #: includes/core/class-builtin.php:1573
5865
  msgid "Chinese"
5866
  msgstr ""
5867
 
5868
- #: includes/core/class-builtin.php:1574
5869
  msgid "Zulu"
5870
  msgstr ""
5871
 
5872
- #: includes/core/class-builtin.php:1580
5873
  msgid "Afghanistan"
5874
  msgstr ""
5875
 
5876
- #: includes/core/class-builtin.php:1581
5877
  msgid "Åland Islands"
5878
  msgstr ""
5879
 
5880
- #: includes/core/class-builtin.php:1582
5881
  msgid "Albania"
5882
  msgstr ""
5883
 
5884
- #: includes/core/class-builtin.php:1583
5885
  msgid "Algeria"
5886
  msgstr ""
5887
 
5888
- #: includes/core/class-builtin.php:1584
5889
  msgid "American Samoa"
5890
  msgstr ""
5891
 
5892
- #: includes/core/class-builtin.php:1585
5893
  msgid "Andorra"
5894
  msgstr ""
5895
 
5896
- #: includes/core/class-builtin.php:1586
5897
  msgid "Angola"
5898
  msgstr ""
5899
 
5900
- #: includes/core/class-builtin.php:1587
5901
  msgid "Anguilla"
5902
  msgstr ""
5903
 
5904
- #: includes/core/class-builtin.php:1588
5905
  msgid "Antarctica"
5906
  msgstr ""
5907
 
5908
- #: includes/core/class-builtin.php:1589
5909
  msgid "Antigua and Barbuda"
5910
  msgstr ""
5911
 
5912
- #: includes/core/class-builtin.php:1590
5913
  msgid "Argentina"
5914
  msgstr ""
5915
 
5916
- #: includes/core/class-builtin.php:1591
5917
  msgid "Armenia"
5918
  msgstr ""
5919
 
5920
- #: includes/core/class-builtin.php:1592
5921
  msgid "Aruba"
5922
  msgstr ""
5923
 
5924
- #: includes/core/class-builtin.php:1593
5925
  msgid "Australia"
5926
  msgstr ""
5927
 
5928
- #: includes/core/class-builtin.php:1594
5929
  msgid "Austria"
5930
  msgstr ""
5931
 
5932
- #: includes/core/class-builtin.php:1595
5933
  msgid "Azerbaijan"
5934
  msgstr ""
5935
 
5936
- #: includes/core/class-builtin.php:1596
5937
  msgid "Bahamas"
5938
  msgstr ""
5939
 
5940
- #: includes/core/class-builtin.php:1597
5941
  msgid "Bahrain"
5942
  msgstr ""
5943
 
5944
- #: includes/core/class-builtin.php:1598
5945
  msgid "Bangladesh"
5946
  msgstr ""
5947
 
5948
- #: includes/core/class-builtin.php:1599
5949
  msgid "Barbados"
5950
  msgstr ""
5951
 
5952
- #: includes/core/class-builtin.php:1600
5953
  msgid "Belarus"
5954
  msgstr ""
5955
 
5956
- #: includes/core/class-builtin.php:1601
5957
  msgid "Belgium"
5958
  msgstr ""
5959
 
5960
- #: includes/core/class-builtin.php:1602
5961
  msgid "Belize"
5962
  msgstr ""
5963
 
5964
- #: includes/core/class-builtin.php:1603
5965
  msgid "Benin"
5966
  msgstr ""
5967
 
5968
- #: includes/core/class-builtin.php:1604
5969
  msgid "Bermuda"
5970
  msgstr ""
5971
 
5972
- #: includes/core/class-builtin.php:1605
5973
  msgid "Bhutan"
5974
  msgstr ""
5975
 
5976
- #: includes/core/class-builtin.php:1606
5977
  msgid "Bolivia, Plurinational State of"
5978
  msgstr ""
5979
 
5980
- #: includes/core/class-builtin.php:1607
5981
  msgid "Bosnia and Herzegovina"
5982
  msgstr ""
5983
 
5984
- #: includes/core/class-builtin.php:1608
5985
  msgid "Botswana"
5986
  msgstr ""
5987
 
5988
- #: includes/core/class-builtin.php:1609
5989
  msgid "Bouvet Island"
5990
  msgstr ""
5991
 
5992
- #: includes/core/class-builtin.php:1610
5993
  msgid "Brazil"
5994
  msgstr ""
5995
 
5996
- #: includes/core/class-builtin.php:1611
5997
  msgid "British Indian Ocean Territory"
5998
  msgstr ""
5999
 
6000
- #: includes/core/class-builtin.php:1612
6001
  msgid "Brunei Darussalam"
6002
  msgstr ""
6003
 
6004
- #: includes/core/class-builtin.php:1613
6005
  msgid "Bulgaria"
6006
  msgstr ""
6007
 
6008
- #: includes/core/class-builtin.php:1614
6009
  msgid "Burkina Faso"
6010
  msgstr ""
6011
 
6012
- #: includes/core/class-builtin.php:1615
6013
  msgid "Burundi"
6014
  msgstr ""
6015
 
6016
- #: includes/core/class-builtin.php:1616
6017
  msgid "Cambodia"
6018
  msgstr ""
6019
 
6020
- #: includes/core/class-builtin.php:1617
6021
  msgid "Cameroon"
6022
  msgstr ""
6023
 
6024
- #: includes/core/class-builtin.php:1618
6025
  msgid "Canada"
6026
  msgstr ""
6027
 
6028
- #: includes/core/class-builtin.php:1619
6029
  msgid "Cape Verde"
6030
  msgstr ""
6031
 
6032
- #: includes/core/class-builtin.php:1620
6033
  msgid "Cayman Islands"
6034
  msgstr ""
6035
 
6036
- #: includes/core/class-builtin.php:1621
6037
  msgid "Central African Republic"
6038
  msgstr ""
6039
 
6040
- #: includes/core/class-builtin.php:1622
6041
  msgid "Chad"
6042
  msgstr ""
6043
 
6044
- #: includes/core/class-builtin.php:1623
6045
  msgid "Chile"
6046
  msgstr ""
6047
 
6048
- #: includes/core/class-builtin.php:1624
6049
  msgid "China"
6050
  msgstr ""
6051
 
6052
- #: includes/core/class-builtin.php:1625
6053
  msgid "Christmas Island"
6054
  msgstr ""
6055
 
6056
- #: includes/core/class-builtin.php:1626
6057
  msgid "Cocos (Keeling) Islands"
6058
  msgstr ""
6059
 
6060
- #: includes/core/class-builtin.php:1627
6061
  msgid "Colombia"
6062
  msgstr ""
6063
 
6064
- #: includes/core/class-builtin.php:1628
6065
  msgid "Comoros"
6066
  msgstr ""
6067
 
6068
- #: includes/core/class-builtin.php:1629
6069
  msgid "Congo"
6070
  msgstr ""
6071
 
6072
- #: includes/core/class-builtin.php:1630
6073
  msgid "Congo, the Democratic Republic of the"
6074
  msgstr ""
6075
 
6076
- #: includes/core/class-builtin.php:1631
6077
  msgid "Cook Islands"
6078
  msgstr ""
6079
 
6080
- #: includes/core/class-builtin.php:1632
6081
  msgid "Costa Rica"
6082
  msgstr ""
6083
 
6084
- #: includes/core/class-builtin.php:1633
6085
  msgid "Côte d'Ivoire"
6086
  msgstr ""
6087
 
6088
- #: includes/core/class-builtin.php:1634
6089
  msgid "Croatia"
6090
  msgstr ""
6091
 
6092
- #: includes/core/class-builtin.php:1635
6093
  msgid "Cuba"
6094
  msgstr ""
6095
 
6096
- #: includes/core/class-builtin.php:1636
6097
  msgid "Cyprus"
6098
  msgstr ""
6099
 
6100
- #: includes/core/class-builtin.php:1637
6101
  msgid "Czech Republic"
6102
  msgstr ""
6103
 
6104
- #: includes/core/class-builtin.php:1638
6105
  msgid "Denmark"
6106
  msgstr ""
6107
 
6108
- #: includes/core/class-builtin.php:1639
6109
  msgid "Djibouti"
6110
  msgstr ""
6111
 
6112
- #: includes/core/class-builtin.php:1640
6113
  msgid "Dominica"
6114
  msgstr ""
6115
 
6116
- #: includes/core/class-builtin.php:1641
6117
  msgid "Dominican Republic"
6118
  msgstr ""
6119
 
6120
- #: includes/core/class-builtin.php:1642
6121
  msgid "Ecuador"
6122
  msgstr ""
6123
 
6124
- #: includes/core/class-builtin.php:1643
6125
  msgid "Egypt"
6126
  msgstr ""
6127
 
6128
- #: includes/core/class-builtin.php:1644
6129
  msgid "El Salvador"
6130
  msgstr ""
6131
 
6132
- #: includes/core/class-builtin.php:1645
6133
  msgid "Equatorial Guinea"
6134
  msgstr ""
6135
 
6136
- #: includes/core/class-builtin.php:1646
6137
  msgid "Eritrea"
6138
  msgstr ""
6139
 
6140
- #: includes/core/class-builtin.php:1647
6141
  msgid "Estonia"
6142
  msgstr ""
6143
 
6144
- #: includes/core/class-builtin.php:1648
6145
  msgid "Ethiopia"
6146
  msgstr ""
6147
 
6148
- #: includes/core/class-builtin.php:1649
6149
  msgid "Falkland Islands (Malvinas)"
6150
  msgstr ""
6151
 
6152
- #: includes/core/class-builtin.php:1650
6153
  msgid "Faroe Islands"
6154
  msgstr ""
6155
 
6156
- #: includes/core/class-builtin.php:1651
6157
  msgid "Fiji"
6158
  msgstr ""
6159
 
6160
- #: includes/core/class-builtin.php:1652
6161
  msgid "Finland"
6162
  msgstr ""
6163
 
6164
- #: includes/core/class-builtin.php:1653
6165
  msgid "France"
6166
  msgstr ""
6167
 
6168
- #: includes/core/class-builtin.php:1654
6169
  msgid "French Guiana"
6170
  msgstr ""
6171
 
6172
- #: includes/core/class-builtin.php:1655
6173
  msgid "French Polynesia"
6174
  msgstr ""
6175
 
6176
- #: includes/core/class-builtin.php:1656
6177
  msgid "French Southern Territories"
6178
  msgstr ""
6179
 
6180
- #: includes/core/class-builtin.php:1657
6181
  msgid "Gabon"
6182
  msgstr ""
6183
 
6184
- #: includes/core/class-builtin.php:1658