Version Description
Download this release
Release Info
Developer | nsinelnikov |
Plugin | Ultimate Member – User Profile & Membership Plugin |
Version | 2.1.17 |
Comparing to | |
See all releases |
Code changes from version 2.1.16 to 2.1.17
- assets/js/um-scripts.js +7 -8
- assets/js/um-scripts.min.js +1 -1
- includes/admin/assets/css/um-admin-global.css +11 -1
- includes/admin/assets/js/um-admin-blocks-shortcode.js +1 -1
- includes/admin/assets/js/um-admin-blocks.js +3 -2
- includes/admin/assets/js/um-admin-field.js +5 -5
- includes/admin/assets/js/um-admin-forms.js +26 -4
- includes/admin/core/class-admin-enqueue.php +1 -1
- includes/admin/core/class-admin-metabox.php +1 -1
- includes/admin/core/class-admin-settings.php +12 -9
- includes/admin/core/packages/2.1.17-alpha/functions.php +140 -0
- includes/admin/core/packages/2.1.17-alpha/hooks.php +5 -0
- includes/admin/core/packages/2.1.17-alpha/init.php +30 -0
- includes/class-config.php +1 -0
- includes/core/class-access.php +31 -7
- includes/core/class-fields.php +25 -6
- includes/core/class-files.php +1 -1
- includes/core/class-form.php +9 -9
- includes/core/class-mail.php +4 -0
- includes/core/class-member-directory-meta.php +24 -67
- includes/core/class-member-directory.php +4 -5
- includes/core/class-permalinks.php +5 -0
- includes/core/class-profile.php +24 -5
- includes/core/class-roles-capabilities.php +8 -3
- includes/core/class-user.php +8 -0
- includes/core/um-actions-account.php +1 -1
- includes/core/um-actions-form.php +121 -61
- includes/core/um-actions-login.php +1 -1
- includes/core/um-actions-profile.php +24 -28
- includes/um-short-functions.php +17 -30
- readme.txt +25 -1
- ultimate-member.php +1 -1
assets/js/um-scripts.js
CHANGED
@@ -124,14 +124,13 @@ jQuery(document).ready(function() {
|
|
124 |
function unselectEmptyOption( e ) {
|
125 |
var $element = jQuery( e.currentTarget );
|
126 |
var $selected = $element.find(':selected');
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
}
|
135 |
}
|
136 |
|
137 |
if ( typeof( jQuery.fn.select2 ) === 'function' ) {
|
124 |
function unselectEmptyOption( e ) {
|
125 |
var $element = jQuery( e.currentTarget );
|
126 |
var $selected = $element.find(':selected');
|
127 |
+
|
128 |
+
$selected.each( function ( i, option ) {
|
129 |
+
if ( option.value === '' ) {
|
130 |
+
option.selected = false;
|
131 |
+
$element.trigger( 'change' );
|
132 |
+
}
|
133 |
+
});
|
|
|
134 |
}
|
135 |
|
136 |
if ( typeof( jQuery.fn.select2 ) === 'function' ) {
|
assets/js/um-scripts.min.js
CHANGED
@@ -1 +1 @@
|
|
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,d=n.length?new Date(u):null;if(o&&"Invalid Date"==o.toString()&&3==n.length){var s=n[1]+"/"+n[2]+"/"+n[0];o=new Date(Date.parse(s))}if(d&&"Invalid Date"==d.toString()&&3==u.length){var l=u[1]+"/"+u[2]+"/"+u[0];d=new Date(Date.parse(l))}var c={disable:t,format:e.attr("data-format"),formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){e.blur()},onClose:function(){e.blur()}};null!==a&&(c.selectYears=a),null!==o&&(c.min=o),null!==d&&(c.max=d),e.pickadate(c)}),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(){function a(e){var a=jQuery(e.currentTarget),t=a.find(":selected");1<t.length&&t.each(function(e,t){""===t.value&&(t.selected=!1,a.trigger("change"))})}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(){var e=jQuery(this).find(".um-dropdown");return UM.dropdown.show(e),!1}),jQuery(document.body).on("click",".um-dropdown-hide",function(){return UM.dropdown.hideAll(),!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.dropdown.hideAll(),!1}),jQuery(".um-s1,.um-s2").css({display:"block"}),"function"==typeof jQuery.fn.select2&&(jQuery(".um-s1").each(function(e){var t=jQuery(this);t.select2({allowClear:!0,dropdownParent:t.parent()}).on("change",a)}),jQuery(".um-s2").each(function(e){var t=jQuery(this);t.select2({allowClear:!1,minimumResultsForSearch:10,dropdownParent:t.parent()}).on("change",a)}),jQuery(".um-s3").each(function(e){var t=jQuery(this);t.select2({allowClear:!1,minimumResultsForSearch:-1,dropdownParent:t.parent()}).on("change",a)})),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"]').prop("disabled",!1),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").trigger("submit")});var o={};function d(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.prop("disabled",!1);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,d(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(d,10,r,o[t],t),void 0===t&&""!==t||(r.find('option[value!=""]').remove(),r.val("").trigger("change"))}),jQuery('select[name="'+n+'"]').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,d=n.length?new Date(u):null;if(o&&"Invalid Date"==o.toString()&&3==n.length){var s=n[1]+"/"+n[2]+"/"+n[0];o=new Date(Date.parse(s))}if(d&&"Invalid Date"==d.toString()&&3==u.length){var l=u[1]+"/"+u[2]+"/"+u[0];d=new Date(Date.parse(l))}var c={disable:t,format:e.attr("data-format"),formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){e.blur()},onClose:function(){e.blur()}};null!==a&&(c.selectYears=a),null!==o&&(c.min=o),null!==d&&(c.max=d),e.pickadate(c)}),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(){function a(e){var a=jQuery(e.currentTarget);a.find(":selected").each(function(e,t){""===t.value&&(t.selected=!1,a.trigger("change"))})}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(){var e=jQuery(this).find(".um-dropdown");return UM.dropdown.show(e),!1}),jQuery(document.body).on("click",".um-dropdown-hide",function(){return UM.dropdown.hideAll(),!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.dropdown.hideAll(),!1}),jQuery(".um-s1,.um-s2").css({display:"block"}),"function"==typeof jQuery.fn.select2&&(jQuery(".um-s1").each(function(e){var t=jQuery(this);t.select2({allowClear:!0,dropdownParent:t.parent()}).on("change",a)}),jQuery(".um-s2").each(function(e){var t=jQuery(this);t.select2({allowClear:!1,minimumResultsForSearch:10,dropdownParent:t.parent()}).on("change",a)}),jQuery(".um-s3").each(function(e){var t=jQuery(this);t.select2({allowClear:!1,minimumResultsForSearch:-1,dropdownParent:t.parent()}).on("change",a)})),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"]').prop("disabled",!1),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").trigger("submit")});var o={};function d(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.prop("disabled",!1);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,d(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(d,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-global.css
CHANGED
@@ -203,8 +203,18 @@ a.um-delete{ color: #a00; }
|
|
203 |
margin-bottom: 2px !important;
|
204 |
}
|
205 |
|
|
|
|
|
|
|
|
|
206 |
.um_hidden_notice,
|
207 |
-
.um_block_settings_hide
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
display: none;
|
209 |
}
|
210 |
|
203 |
margin-bottom: 2px !important;
|
204 |
}
|
205 |
|
206 |
+
/*
|
207 |
+
- Restrict access
|
208 |
+
*/
|
209 |
+
|
210 |
.um_hidden_notice,
|
211 |
+
.um_block_settings .um_block_settings_hide{
|
212 |
+
display: none;
|
213 |
+
}
|
214 |
+
.um_block_settings .components-select-control .components-select-control__input[multiple]{
|
215 |
+
height: auto;
|
216 |
+
}
|
217 |
+
.um_block_settings .components-select-control .components-select-control__input[multiple] + .components-input-control__suffix{
|
218 |
display: none;
|
219 |
}
|
220 |
|
includes/admin/assets/js/um-admin-blocks-shortcode.js
CHANGED
@@ -365,7 +365,7 @@ wp.blocks.registerBlockType( 'um-block/um-account', {
|
|
365 |
wp.i18n.__( 'Account', 'ultimate-member' )
|
366 |
),
|
367 |
wp.element.createElement(
|
368 |
-
wp.
|
369 |
{},
|
370 |
wp.element.createElement(
|
371 |
wp.components.PanelBody,
|
365 |
wp.i18n.__( 'Account', 'ultimate-member' )
|
366 |
),
|
367 |
wp.element.createElement(
|
368 |
+
wp.blockEditor.InspectorControls,
|
369 |
{},
|
370 |
wp.element.createElement(
|
371 |
wp.components.PanelBody,
|
includes/admin/assets/js/um-admin-blocks.js
CHANGED
@@ -60,12 +60,13 @@ var um_block_restriction = wp.compose.createHigherOrderComponent( function( Bloc
|
|
60 |
{},
|
61 |
wp.element.createElement( BlockEdit, props ),
|
62 |
wp.element.createElement(
|
63 |
-
wp.
|
64 |
{},
|
65 |
wp.element.createElement(
|
66 |
wp.components.PanelBody,
|
67 |
{
|
68 |
-
title: wp.i18n.__( 'UM access Controls', 'ultimate-member' )
|
|
|
69 |
},
|
70 |
wp.element.createElement(
|
71 |
wp.components.ToggleControl,
|
60 |
{},
|
61 |
wp.element.createElement( BlockEdit, props ),
|
62 |
wp.element.createElement(
|
63 |
+
wp.blockEditor.InspectorControls,
|
64 |
{},
|
65 |
wp.element.createElement(
|
66 |
wp.components.PanelBody,
|
67 |
{
|
68 |
+
title: wp.i18n.__( 'UM access Controls', 'ultimate-member' ),
|
69 |
+
className: 'um_block_settings'
|
70 |
},
|
71 |
wp.element.createElement(
|
72 |
wp.components.ToggleControl,
|
includes/admin/assets/js/um-admin-field.js
CHANGED
@@ -4,11 +4,11 @@ jQuery(document).ready(function() {
|
|
4 |
jQuery(document.body).on('click', '.um-admin-btns a span.remove', function(e){
|
5 |
e.preventDefault();
|
6 |
|
7 |
-
if ( confirm( 'This will permanently delete this custom field from database' ) ) {
|
8 |
|
9 |
jQuery(this).parents('a').remove();
|
10 |
|
11 |
-
arg1 = jQuery(this).parents('a').data('arg1');
|
12 |
|
13 |
jQuery.ajax({
|
14 |
url: wp.ajax.settings.url,
|
@@ -20,10 +20,10 @@ jQuery(document).ready(function() {
|
|
20 |
nonce: um_admin_scripts.nonce
|
21 |
|
22 |
},
|
23 |
-
success: function(data){
|
24 |
-
|
25 |
},
|
26 |
-
error: function(data){
|
27 |
|
28 |
}
|
29 |
});
|
4 |
jQuery(document.body).on('click', '.um-admin-btns a span.remove', function(e){
|
5 |
e.preventDefault();
|
6 |
|
7 |
+
if ( confirm( wp.i18n.__( 'This will permanently delete this custom field from a database and from all forms on your site. Are you sure?', 'ultimate-member' ) ) ) {
|
8 |
|
9 |
jQuery(this).parents('a').remove();
|
10 |
|
11 |
+
var arg1 = jQuery(this).parents('a').data('arg1');
|
12 |
|
13 |
jQuery.ajax({
|
14 |
url: wp.ajax.settings.url,
|
20 |
nonce: um_admin_scripts.nonce
|
21 |
|
22 |
},
|
23 |
+
success: function(data) {
|
24 |
+
jQuery('#um-admin-form-builder .' + arg1).remove();
|
25 |
},
|
26 |
+
error: function(data) {
|
27 |
|
28 |
}
|
29 |
});
|
includes/admin/assets/js/um-admin-forms.js
CHANGED
@@ -774,10 +774,20 @@ jQuery(document).ready( function() {
|
|
774 |
if ( input_type === 'checkbox' ) {
|
775 |
own_condition = ( value == '1' ) ? cond_field.is(':checked') : ! cond_field.is(':checked');
|
776 |
} else {
|
777 |
-
|
|
|
|
|
|
|
|
|
778 |
}
|
779 |
} else if ( tagName === 'select' ) {
|
780 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
781 |
}
|
782 |
|
783 |
if ( own_condition && parent_condition ) {
|
@@ -794,10 +804,22 @@ jQuery(document).ready( function() {
|
|
794 |
if ( input_type == 'checkbox' ) {
|
795 |
own_condition = ( value == '1' ) ? condition_field.is(':checked') : ! condition_field.is(':checked');
|
796 |
} else {
|
797 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
798 |
}
|
799 |
} else if ( tagName == 'select' ) {
|
800 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
801 |
}
|
802 |
|
803 |
return ( own_condition && parent_condition );
|
774 |
if ( input_type === 'checkbox' ) {
|
775 |
own_condition = ( value == '1' ) ? cond_field.is(':checked') : ! cond_field.is(':checked');
|
776 |
} else {
|
777 |
+
if ( Array.isArray( value ) ) {
|
778 |
+
own_condition = ( value.indexOf( cond_field.val() ) !== -1 );
|
779 |
+
} else {
|
780 |
+
own_condition = ( cond_field.val() == value );
|
781 |
+
}
|
782 |
}
|
783 |
} else if ( tagName === 'select' ) {
|
784 |
+
|
785 |
+
if ( Array.isArray( value ) ) {
|
786 |
+
own_condition = ( value.indexOf( cond_field.val() ) !== -1 );
|
787 |
+
} else {
|
788 |
+
own_condition = ( cond_field.val() == value );
|
789 |
+
}
|
790 |
+
|
791 |
}
|
792 |
|
793 |
if ( own_condition && parent_condition ) {
|
804 |
if ( input_type == 'checkbox' ) {
|
805 |
own_condition = ( value == '1' ) ? condition_field.is(':checked') : ! condition_field.is(':checked');
|
806 |
} else {
|
807 |
+
|
808 |
+
if ( Array.isArray( value ) ) {
|
809 |
+
own_condition = ( value.indexOf( condition_field.val() ) !== -1 );
|
810 |
+
} else {
|
811 |
+
own_condition = ( condition_field.val() == value );
|
812 |
+
}
|
813 |
+
|
814 |
}
|
815 |
} else if ( tagName == 'select' ) {
|
816 |
+
|
817 |
+
if ( Array.isArray( value ) ) {
|
818 |
+
own_condition = ( value.indexOf( condition_field.val() ) !== -1 );
|
819 |
+
} else {
|
820 |
+
own_condition = ( condition_field.val() == value );
|
821 |
+
}
|
822 |
+
|
823 |
}
|
824 |
|
825 |
return ( own_condition && parent_condition );
|
includes/admin/core/class-admin-enqueue.php
CHANGED
@@ -279,7 +279,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) {
|
|
279 |
* Field Processing
|
280 |
*/
|
281 |
function load_field() {
|
282 |
-
wp_register_script( 'um_admin_field', $this->js_url . 'um-admin-field.js', array('jquery', 'wp-util'), ultimatemember_version, true );
|
283 |
wp_enqueue_script( 'um_admin_field' );
|
284 |
}
|
285 |
|
279 |
* Field Processing
|
280 |
*/
|
281 |
function load_field() {
|
282 |
+
wp_register_script( 'um_admin_field', $this->js_url . 'um-admin-field.js', array('jquery', 'wp-util', 'wp-i18n'), ultimatemember_version, true );
|
283 |
wp_enqueue_script( 'um_admin_field' );
|
284 |
}
|
285 |
|
includes/admin/core/class-admin-metabox.php
CHANGED
@@ -2280,7 +2280,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
|
|
2280 |
$privacy_options = array(
|
2281 |
'1' => __( 'Everyone', 'ultimate-member' ),
|
2282 |
'2' => __( 'Members', 'ultimate-member' ),
|
2283 |
-
'-1' => __( 'Only visible to profile owner and
|
2284 |
'-3' => __( 'Only visible to profile owner and specific roles', 'ultimate-member' ),
|
2285 |
'-2' => __( 'Only specific member roles', 'ultimate-member' ),
|
2286 |
);
|
2280 |
$privacy_options = array(
|
2281 |
'1' => __( 'Everyone', 'ultimate-member' ),
|
2282 |
'2' => __( 'Members', 'ultimate-member' ),
|
2283 |
+
'-1' => __( 'Only visible to profile owner and users who can edit other member accounts', 'ultimate-member' ),
|
2284 |
'-3' => __( 'Only visible to profile owner and specific roles', 'ultimate-member' ),
|
2285 |
'-2' => __( 'Only specific member roles', 'ultimate-member' ),
|
2286 |
);
|
includes/admin/core/class-admin-settings.php
CHANGED
@@ -99,15 +99,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
|
99 |
|
100 |
$metakeys = array();
|
101 |
foreach ( UM()->builtin()->all_user_fields as $all_user_field ) {
|
102 |
-
|
103 |
-
$metakeys[] = $all_user_field['metakey'] . '_lat';
|
104 |
-
$metakeys[] = $all_user_field['metakey'] . '_lng';
|
105 |
-
$metakeys[] = $all_user_field['metakey'] . '_url';
|
106 |
-
} else {
|
107 |
-
$metakeys[] = $all_user_field['metakey'];
|
108 |
-
}
|
109 |
}
|
110 |
|
|
|
|
|
111 |
if ( is_multisite() ) {
|
112 |
|
113 |
$sites = get_sites( array( 'fields' => 'ids' ) );
|
@@ -336,7 +332,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
|
336 |
'tooltip' => __( 'Select the the user roles allowed to view this tab.', 'ultimate-member' ),
|
337 |
'options' => UM()->roles()->get_roles(),
|
338 |
'placeholder' => __( 'Choose user roles...', 'ultimate-member' ),
|
339 |
-
'conditional' => array( 'profile_tab_' . $id . '_privacy', '=', 4 ),
|
340 |
'size' => 'small'
|
341 |
)
|
342 |
);
|
@@ -651,7 +647,14 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
|
651 |
'0' => __( 'No', 'ultimate-member' ),
|
652 |
'1' => __( 'Yes', 'ultimate-member' ),
|
653 |
]
|
654 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
655 |
)
|
656 |
),
|
657 |
'account' => array(
|
99 |
|
100 |
$metakeys = array();
|
101 |
foreach ( UM()->builtin()->all_user_fields as $all_user_field ) {
|
102 |
+
$metakeys[] = $all_user_field['metakey'];
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
}
|
104 |
|
105 |
+
$metakeys = apply_filters( 'um_metadata_same_page_update_ajax', $metakeys, UM()->builtin()->all_user_fields );
|
106 |
+
|
107 |
if ( is_multisite() ) {
|
108 |
|
109 |
$sites = get_sites( array( 'fields' => 'ids' ) );
|
332 |
'tooltip' => __( 'Select the the user roles allowed to view this tab.', 'ultimate-member' ),
|
333 |
'options' => UM()->roles()->get_roles(),
|
334 |
'placeholder' => __( 'Choose user roles...', 'ultimate-member' ),
|
335 |
+
'conditional' => array( 'profile_tab_' . $id . '_privacy', '=', [ '4', '5' ] ),
|
336 |
'size' => 'small'
|
337 |
)
|
338 |
);
|
647 |
'0' => __( 'No', 'ultimate-member' ),
|
648 |
'1' => __( 'Yes', 'ultimate-member' ),
|
649 |
]
|
650 |
+
),
|
651 |
+
array(
|
652 |
+
'id' => 'activation_link_expiry_time',
|
653 |
+
'type' => 'number',
|
654 |
+
'label' => __( 'Activation link lifetime', 'ultimate-member' ),
|
655 |
+
'tooltip' => __( 'How long does an activation link live? Leave empty for endless links.', 'ultimate-member' ),
|
656 |
+
'size' => 'small',
|
657 |
+
),
|
658 |
)
|
659 |
),
|
660 |
'account' => array(
|
includes/admin/core/packages/2.1.17-alpha/functions.php
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* @param $tab
|
6 |
+
*
|
7 |
+
* @return mixed
|
8 |
+
*/
|
9 |
+
function um_upgrade_get_slug2117( $tab ) {
|
10 |
+
$slug = get_post_meta( $tab->ID, 'um_tab_slug', true );
|
11 |
+
if ( UM()->external_integrations()->is_wpml_active() ) {
|
12 |
+
global $sitepress;
|
13 |
+
|
14 |
+
$tab_id = $sitepress->get_object_id( $tab->ID, 'um_profile_tabs', true, $sitepress->get_default_language() );
|
15 |
+
if ( $tab_id && $tab_id != $tab->ID ) {
|
16 |
+
$slug = get_post_meta( $tab_id, 'um_tab_slug', true );
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
return $slug;
|
21 |
+
}
|
22 |
+
|
23 |
+
|
24 |
+
function um_upgrade_profile_tabs2117() {
|
25 |
+
UM()->admin()->check_ajax_nonce();
|
26 |
+
|
27 |
+
um_maybe_unset_time_limit();
|
28 |
+
|
29 |
+
$labels = [
|
30 |
+
'name' => _x( 'Profile Tabs', 'Post Type General Name', 'ultimate-member' ),
|
31 |
+
'singular_name' => _x( 'Profile tab', 'Post Type Singular Name', 'ultimate-member' ),
|
32 |
+
'menu_name' => __( 'Profile Tabs', 'ultimate-member' ),
|
33 |
+
'name_admin_bar' => __( 'Profile Tabs', 'ultimate-member' ),
|
34 |
+
'archives' => __( 'Item Archives', 'ultimate-member' ),
|
35 |
+
'attributes' => __( 'Item Attributes', 'ultimate-member' ),
|
36 |
+
'parent_item_colon' => __( 'Parent Item:', 'ultimate-member' ),
|
37 |
+
'all_items' => __( 'All Items', 'ultimate-member' ),
|
38 |
+
'add_new_item' => __( 'Add New Item', 'ultimate-member' ),
|
39 |
+
'add_new' => __( 'Add New', 'ultimate-member' ),
|
40 |
+
'new_item' => __( 'New Item', 'ultimate-member' ),
|
41 |
+
'edit_item' => __( 'Edit Item', 'ultimate-member' ),
|
42 |
+
'update_item' => __( 'Update Item', 'ultimate-member' ),
|
43 |
+
'view_item' => __( 'View Item', 'ultimate-member' ),
|
44 |
+
'view_items' => __( 'View Items', 'ultimate-member' ),
|
45 |
+
'search_items' => __( 'Search Item', 'ultimate-member' ),
|
46 |
+
'not_found' => __( 'Not found', 'ultimate-member' ),
|
47 |
+
];
|
48 |
+
|
49 |
+
$args = [
|
50 |
+
'label' => __( 'Profile Tabs', 'ultimate-member' ),
|
51 |
+
'description' => __( '', 'ultimate-member' ),
|
52 |
+
'labels' => $labels,
|
53 |
+
'supports' => ['title', 'editor' ],
|
54 |
+
'hierarchical' => false,
|
55 |
+
'public' => false,
|
56 |
+
'show_ui' => true,
|
57 |
+
'show_in_menu' => false,
|
58 |
+
'menu_position' => 5,
|
59 |
+
'show_in_admin_bar' => false,
|
60 |
+
'show_in_nav_menus' => false,
|
61 |
+
'can_export' => true,
|
62 |
+
'has_archive' => false,
|
63 |
+
'exclude_from_search' => true,
|
64 |
+
'publicly_queryable' => true,
|
65 |
+
'capability_type' => 'page',
|
66 |
+
];
|
67 |
+
|
68 |
+
register_post_type( 'um_profile_tabs', $args );
|
69 |
+
|
70 |
+
$profile_tabs = get_posts( [
|
71 |
+
'post_type' => 'um_profile_tabs',
|
72 |
+
'orderby' => 'menu_order',
|
73 |
+
'posts_per_page' => -1,
|
74 |
+
] );
|
75 |
+
|
76 |
+
if ( ! empty( $profile_tabs ) ) {
|
77 |
+
$tabs_slugs = [];
|
78 |
+
|
79 |
+
foreach ( $profile_tabs as $tab ) {
|
80 |
+
$slug = um_upgrade_get_slug2117( $tab );
|
81 |
+
if ( ! empty( $slug ) && in_array( $slug, $tabs_slugs ) ) {
|
82 |
+
continue;
|
83 |
+
}
|
84 |
+
|
85 |
+
if ( preg_match( "/[a-z0-9]+$/i", urldecode( $tab->post_name ) ) ) {
|
86 |
+
$tab_slug = sanitize_title( $tab->post_name );
|
87 |
+
} else {
|
88 |
+
// otherwise use autoincrement and slug generator
|
89 |
+
$auto_increment = UM()->options()->get( 'custom_profiletab_increment' );
|
90 |
+
$auto_increment = ! empty( $auto_increment ) ? $auto_increment : 1;
|
91 |
+
$tab_slug = "custom_profiletab_{$auto_increment}";
|
92 |
+
}
|
93 |
+
|
94 |
+
if ( UM()->external_integrations()->is_wpml_active() ) {
|
95 |
+
global $sitepress;
|
96 |
+
|
97 |
+
$tab_id = $sitepress->get_object_id( $tab->ID, 'um_profile_tabs', true, $sitepress->get_default_language() );
|
98 |
+
if ( $tab_id && $tab_id == $tab->ID ) {
|
99 |
+
update_post_meta( $tab->ID, 'um_tab_slug', $tab_slug );
|
100 |
+
|
101 |
+
$tabs_slugs[] = $tab_slug;
|
102 |
+
|
103 |
+
if ( isset( $auto_increment ) ) {
|
104 |
+
$auto_increment++;
|
105 |
+
UM()->options()->update( 'custom_profiletab_increment', $auto_increment );
|
106 |
+
}
|
107 |
+
|
108 |
+
// show new profile tab by default - update UM Appearances > Profile Tabs settings
|
109 |
+
if ( UM()->options()->get( 'profile_tab_' . $tab_slug ) === '' ) {
|
110 |
+
UM()->options()->update( 'profile_tab_' . $tab_slug, '1' );
|
111 |
+
UM()->options()->update( 'profile_tab_' . $tab_slug . '_privacy', '0' );
|
112 |
+
}
|
113 |
+
}
|
114 |
+
} else {
|
115 |
+
update_post_meta( $tab->ID, 'um_tab_slug', $tab_slug );
|
116 |
+
|
117 |
+
$tabs_slugs[] = $tab_slug;
|
118 |
+
|
119 |
+
if ( isset( $auto_increment ) ) {
|
120 |
+
$auto_increment++;
|
121 |
+
UM()->options()->update( 'custom_profiletab_increment', $auto_increment );
|
122 |
+
}
|
123 |
+
|
124 |
+
// show new profile tab by default - update UM Appearances > Profile Tabs settings
|
125 |
+
if ( UM()->options()->get( 'profile_tab_' . $tab_slug ) === '' ) {
|
126 |
+
UM()->options()->update( 'profile_tab_' . $tab_slug, '1' );
|
127 |
+
UM()->options()->update( 'profile_tab_' . $tab_slug . '_privacy', '0' );
|
128 |
+
}
|
129 |
+
}
|
130 |
+
}
|
131 |
+
}
|
132 |
+
|
133 |
+
update_option( 'um_last_version_upgrade', '2.1.17-alpha' );
|
134 |
+
|
135 |
+
if ( ! empty( $profile_tabs ) ) {
|
136 |
+
wp_send_json_success( array( 'message' => __( 'Profile tabs have been updated successfully', 'ultimate-member' ) ) );
|
137 |
+
} else {
|
138 |
+
wp_send_json_success( array( 'message' => __( 'Database has been updated successfully', 'ultimate-member' ) ) );
|
139 |
+
}
|
140 |
+
}
|
includes/admin/core/packages/2.1.17-alpha/hooks.php
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ( ! defined( 'ABSPATH' ) ) exit;
|
2 |
+
|
3 |
+
return array(
|
4 |
+
'profile_tabs2117' => 'profile_tabs2117',
|
5 |
+
);
|
includes/admin/core/packages/2.1.17-alpha/init.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
|
2 |
+
|
3 |
+
|
4 |
+
<script type="text/javascript">
|
5 |
+
jQuery( document ).ready( function() {
|
6 |
+
um_add_upgrade_log( '<?php echo esc_js( __( 'Upgrade profile tabs...', 'ultimate-member' ) ) ?>' );
|
7 |
+
|
8 |
+
jQuery.ajax({
|
9 |
+
url: wp.ajax.settings.url,
|
10 |
+
type: 'POST',
|
11 |
+
dataType: 'json',
|
12 |
+
data: {
|
13 |
+
action: 'um_profile_tabs2117',
|
14 |
+
nonce: um_admin_scripts.nonce
|
15 |
+
},
|
16 |
+
success: function( response ) {
|
17 |
+
if ( typeof response.data.message != 'undefined' ) {
|
18 |
+
um_add_upgrade_log( response.data.message );
|
19 |
+
//switch to the next package
|
20 |
+
um_run_upgrade();
|
21 |
+
} else {
|
22 |
+
um_wrong_ajax();
|
23 |
+
}
|
24 |
+
},
|
25 |
+
error: function() {
|
26 |
+
um_something_wrong();
|
27 |
+
}
|
28 |
+
});
|
29 |
+
});
|
30 |
+
</script>
|
includes/class-config.php
CHANGED
@@ -577,6 +577,7 @@ if ( ! class_exists( 'um\Config' ) ) {
|
|
577 |
'member_directory_own_table' => 0,
|
578 |
'profile_show_html_bio' => 0,
|
579 |
'profile_noindex' => 0,
|
|
|
580 |
);
|
581 |
|
582 |
add_filter( 'um_get_tabs_from_config', '__return_true' );
|
577 |
'member_directory_own_table' => 0,
|
578 |
'profile_show_html_bio' => 0,
|
579 |
'profile_noindex' => 0,
|
580 |
+
'activation_link_expiry_time' => '',
|
581 |
);
|
582 |
|
583 |
add_filter( 'um_get_tabs_from_config', '__return_true' );
|
includes/core/class-access.php
CHANGED
@@ -59,6 +59,10 @@ if ( ! class_exists( 'um\core\Access' ) ) {
|
|
59 |
add_filter( 'get_pages', array( &$this, 'filter_protected_posts' ), 99, 2 );
|
60 |
//filter menu items
|
61 |
add_filter( 'wp_nav_menu_objects', array( &$this, 'filter_menu' ), 99, 2 );
|
|
|
|
|
|
|
|
|
62 |
|
63 |
//filter attachment
|
64 |
add_filter( 'wp_get_attachment_url', array( &$this, 'filter_attachment' ), 99, 2 );
|
@@ -756,7 +760,6 @@ if ( ! class_exists( 'um\core\Access' ) ) {
|
|
756 |
}
|
757 |
|
758 |
$this->current_single_post = $post;
|
759 |
-
add_filter( 'the_content', array( &$this, 'replace_post_content' ), 9999, 1 );
|
760 |
|
761 |
/**
|
762 |
* UM hook
|
@@ -858,7 +861,6 @@ if ( ! class_exists( 'um\core\Access' ) ) {
|
|
858 |
$post->post_content = stripslashes( $restricted_global_message );
|
859 |
|
860 |
$this->current_single_post = $post;
|
861 |
-
add_filter( 'the_content', array( &$this, 'replace_post_content' ), 9999, 1 );
|
862 |
|
863 |
if ( 'attachment' == $post->post_type ) {
|
864 |
remove_filter( 'the_content', 'prepend_attachment' );
|
@@ -867,7 +869,6 @@ if ( ! class_exists( 'um\core\Access' ) ) {
|
|
867 |
$post->post_content = ! empty( $restriction['_um_restrict_custom_message'] ) ? stripslashes( $restriction['_um_restrict_custom_message'] ) : '';
|
868 |
|
869 |
$this->current_single_post = $post;
|
870 |
-
add_filter( 'the_content', array( &$this, 'replace_post_content' ), 9999, 1 );
|
871 |
|
872 |
if ( 'attachment' == $post->post_type ) {
|
873 |
remove_filter( 'the_content', 'prepend_attachment' );
|
@@ -947,7 +948,6 @@ if ( ! class_exists( 'um\core\Access' ) ) {
|
|
947 |
$post->post_content = stripslashes( $restricted_global_message );
|
948 |
|
949 |
$this->current_single_post = $post;
|
950 |
-
add_filter( 'the_content', array( &$this, 'replace_post_content' ), 9999, 1 );
|
951 |
|
952 |
if ( 'attachment' == $post->post_type ) {
|
953 |
remove_filter( 'the_content', 'prepend_attachment' );
|
@@ -956,7 +956,6 @@ if ( ! class_exists( 'um\core\Access' ) ) {
|
|
956 |
$post->post_content = ! empty( $restriction['_um_restrict_custom_message'] ) ? stripslashes( $restriction['_um_restrict_custom_message'] ) : '';
|
957 |
|
958 |
$this->current_single_post = $post;
|
959 |
-
add_filter( 'the_content', array( &$this, 'replace_post_content' ), 9999, 1 );
|
960 |
|
961 |
if ( 'attachment' == $post->post_type ) {
|
962 |
remove_filter( 'the_content', 'prepend_attachment' );
|
@@ -1033,16 +1032,41 @@ if ( ! class_exists( 'um\core\Access' ) ) {
|
|
1033 |
|
1034 |
|
1035 |
/**
|
1036 |
-
*
|
1037 |
*
|
|
|
1038 |
* @return string
|
1039 |
*/
|
1040 |
function replace_post_content( $content ) {
|
1041 |
-
|
|
|
|
|
1042 |
return $content;
|
1043 |
}
|
1044 |
|
1045 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1046 |
/**
|
1047 |
* Disable comments if user has not permission to access this post
|
1048 |
*
|
59 |
add_filter( 'get_pages', array( &$this, 'filter_protected_posts' ), 99, 2 );
|
60 |
//filter menu items
|
61 |
add_filter( 'wp_nav_menu_objects', array( &$this, 'filter_menu' ), 99, 2 );
|
62 |
+
|
63 |
+
// turn on/off content replacement on the filter 'the_content'
|
64 |
+
add_action( 'get_header', array( &$this, 'replace_post_content_on' ), 12 );
|
65 |
+
add_action( 'get_footer', array( &$this, 'replace_post_content_off' ), 8 );
|
66 |
|
67 |
//filter attachment
|
68 |
add_filter( 'wp_get_attachment_url', array( &$this, 'filter_attachment' ), 99, 2 );
|
760 |
}
|
761 |
|
762 |
$this->current_single_post = $post;
|
|
|
763 |
|
764 |
/**
|
765 |
* UM hook
|
861 |
$post->post_content = stripslashes( $restricted_global_message );
|
862 |
|
863 |
$this->current_single_post = $post;
|
|
|
864 |
|
865 |
if ( 'attachment' == $post->post_type ) {
|
866 |
remove_filter( 'the_content', 'prepend_attachment' );
|
869 |
$post->post_content = ! empty( $restriction['_um_restrict_custom_message'] ) ? stripslashes( $restriction['_um_restrict_custom_message'] ) : '';
|
870 |
|
871 |
$this->current_single_post = $post;
|
|
|
872 |
|
873 |
if ( 'attachment' == $post->post_type ) {
|
874 |
remove_filter( 'the_content', 'prepend_attachment' );
|
948 |
$post->post_content = stripslashes( $restricted_global_message );
|
949 |
|
950 |
$this->current_single_post = $post;
|
|
|
951 |
|
952 |
if ( 'attachment' == $post->post_type ) {
|
953 |
remove_filter( 'the_content', 'prepend_attachment' );
|
956 |
$post->post_content = ! empty( $restriction['_um_restrict_custom_message'] ) ? stripslashes( $restriction['_um_restrict_custom_message'] ) : '';
|
957 |
|
958 |
$this->current_single_post = $post;
|
|
|
959 |
|
960 |
if ( 'attachment' == $post->post_type ) {
|
961 |
remove_filter( 'the_content', 'prepend_attachment' );
|
1032 |
|
1033 |
|
1034 |
/**
|
1035 |
+
* Replace the content on the filter 'the_content'
|
1036 |
*
|
1037 |
+
* @param $content
|
1038 |
* @return string
|
1039 |
*/
|
1040 |
function replace_post_content( $content ) {
|
1041 |
+
if ( ! empty( $this->current_single_post ) ) {
|
1042 |
+
$content = $this->current_single_post->post_content;
|
1043 |
+
}
|
1044 |
return $content;
|
1045 |
}
|
1046 |
|
1047 |
|
1048 |
+
/**
|
1049 |
+
* Turn on the content replacement on the filter 'the_content'
|
1050 |
+
*
|
1051 |
+
* @hooked get_header 12
|
1052 |
+
* @since 2.1.17
|
1053 |
+
*/
|
1054 |
+
public function replace_post_content_on() {
|
1055 |
+
add_filter( 'the_content', array( $this, 'replace_post_content' ), 9999, 1 );
|
1056 |
+
}
|
1057 |
+
|
1058 |
+
|
1059 |
+
/**
|
1060 |
+
* Turn off the content replacement on the filter 'the_content'
|
1061 |
+
*
|
1062 |
+
* @hooked get_footer 8
|
1063 |
+
* @since 2.1.17
|
1064 |
+
*/
|
1065 |
+
public function replace_post_content_off() {
|
1066 |
+
remove_filter( 'the_content', array( $this, 'replace_post_content' ), 9999 );
|
1067 |
+
}
|
1068 |
+
|
1069 |
+
|
1070 |
/**
|
1071 |
* Disable comments if user has not permission to access this post
|
1072 |
*
|
includes/core/class-fields.php
CHANGED
@@ -256,6 +256,14 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
|
|
256 |
do_action( 'um_delete_custom_field', $id, $args );
|
257 |
|
258 |
update_option( 'um_fields', $fields );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
}
|
260 |
}
|
261 |
|
@@ -1045,9 +1053,6 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
|
|
1045 |
if ( ! $this->editing || 'custom' == $this->set_mode ) {
|
1046 |
// show default on register screen if there is default
|
1047 |
if ( isset( $data['default'] ) ) {
|
1048 |
-
if ( ! is_array( $data['default'] ) && strstr( $data['default'], ', ' ) ) {
|
1049 |
-
$data['default'] = explode( ', ', $data['default'] );
|
1050 |
-
}
|
1051 |
|
1052 |
if ( ! is_array( $data['default'] ) && $data['default'] === $value ) {
|
1053 |
return true;
|
@@ -1061,6 +1066,14 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
|
|
1061 |
return true;
|
1062 |
}
|
1063 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1064 |
}
|
1065 |
} else {
|
1066 |
|
@@ -2395,11 +2408,17 @@ if ( ! class_exists( 'um\core\Fields' ) ) {
|
|
2395 |
$name = $key;
|
2396 |
}
|
2397 |
|
2398 |
-
|
|
|
|
|
|
|
|
|
|
|
2399 |
|
2400 |
-
$output .= '<input class="' . $this->get_class( $key, $data ) . '" type="' . esc_attr( $input ) . '" name="' . esc_attr( $name ) . '" id="' . esc_attr( $key . UM()->form()->form_suffix ) . '" value="' . $this->field_value( $key, $default, $data ) . '" placeholder="' . esc_attr( $placeholder ) . '" data-validate="' . esc_attr( $validate ) . '" data-key="' . esc_attr( $key ) . '" />
|
|
|
2401 |
|
2402 |
-
|
2403 |
|
2404 |
if ( $this->is_error( $key ) ) {
|
2405 |
$output .= $this->field_error( $this->show_error( $key ) );
|
256 |
do_action( 'um_delete_custom_field', $id, $args );
|
257 |
|
258 |
update_option( 'um_fields', $fields );
|
259 |
+
|
260 |
+
global $wpdb;
|
261 |
+
$forms = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'um_form'" );
|
262 |
+
foreach ( $forms as $form_id ) {
|
263 |
+
$form_fields = get_post_meta( $form_id, '_um_custom_fields', true );
|
264 |
+
unset( $form_fields[ $id ] );
|
265 |
+
update_post_meta( $form_id, '_um_custom_fields', $form_fields );
|
266 |
+
}
|
267 |
}
|
268 |
}
|
269 |
|
1053 |
if ( ! $this->editing || 'custom' == $this->set_mode ) {
|
1054 |
// show default on register screen if there is default
|
1055 |
if ( isset( $data['default'] ) ) {
|
|
|
|
|
|
|
1056 |
|
1057 |
if ( ! is_array( $data['default'] ) && $data['default'] === $value ) {
|
1058 |
return true;
|
1066 |
return true;
|
1067 |
}
|
1068 |
|
1069 |
+
// default value with comma
|
1070 |
+
if ( is_string( $data['default'] ) && strstr( $data['default'], ',' ) ) {
|
1071 |
+
$choices = array_map( 'trim', explode( ',', $data['default'] ) );
|
1072 |
+
if ( in_array( $value, $choices ) ) {
|
1073 |
+
return true;
|
1074 |
+
}
|
1075 |
+
}
|
1076 |
+
|
1077 |
}
|
1078 |
} else {
|
1079 |
|
2408 |
$name = $key;
|
2409 |
}
|
2410 |
|
2411 |
+
if( ! empty( $placeholder ) && ! isset( $data['label'] ) ){
|
2412 |
+
$placeholder = sprintf( __( 'Confirm %s', 'ultimate-member' ), $placeholder );
|
2413 |
+
}else if( isset( $data['label'] ) ){
|
2414 |
+
$placeholder = sprintf( __( 'Confirm %s', 'ultimate-member' ), $data['label'] );
|
2415 |
+
}
|
2416 |
+
|
2417 |
|
2418 |
+
$output .= '<input class="' . $this->get_class( $key, $data ) . '" type="' . esc_attr( $input ) . '" name="' . esc_attr( $name ) . '" id="' . esc_attr( $key . UM()->form()->form_suffix ) . '" value="' . $this->field_value( $key, $default, $data ) . '" placeholder="' . esc_attr( $placeholder ) . '" data-validate="' . esc_attr( $validate ) . '" data-key="' . esc_attr( $key ) . '" />';
|
2419 |
+
|
2420 |
|
2421 |
+
$output .= '</div>';
|
2422 |
|
2423 |
if ( $this->is_error( $key ) ) {
|
2424 |
$output .= $this->field_error( $this->show_error( $key ) );
|
includes/core/class-files.php
CHANGED
@@ -39,7 +39,7 @@ if ( ! class_exists( 'um\core\Files' ) ) {
|
|
39 |
|
40 |
$this->setup_paths();
|
41 |
|
42 |
-
add_action( 'template_redirect', array( &$this, 'download_routing' ) );
|
43 |
|
44 |
$this->fonticon = array(
|
45 |
'pdf' => array('icon' => 'um-faicon-file-pdf-o', 'color' => '#D24D4D' ),
|
39 |
|
40 |
$this->setup_paths();
|
41 |
|
42 |
+
add_action( 'template_redirect', array( &$this, 'download_routing' ), 1 );
|
43 |
|
44 |
$this->fonticon = array(
|
45 |
'pdf' => array('icon' => 'um-faicon-file-pdf-o', 'color' => '#D24D4D' ),
|
includes/core/class-form.php
CHANGED
@@ -366,12 +366,15 @@ if ( ! class_exists( 'um\core\Form' ) ) {
|
|
366 |
*/
|
367 |
$this->post_form = apply_filters( 'um_submit_post_form', $_POST );
|
368 |
|
|
|
|
|
|
|
|
|
369 |
$this->post_form = $this->beautify( $this->post_form );
|
|
|
370 |
|
371 |
$this->form_data = UM()->query()->post_data( $this->form_id );
|
372 |
|
373 |
-
$this->post_form['submitted'] = $this->post_form;
|
374 |
-
|
375 |
$this->post_form = array_merge( $this->form_data, $this->post_form );
|
376 |
|
377 |
// Remove role from post_form at first if role ! empty and there aren't custom fields with role name
|
@@ -438,10 +441,6 @@ if ( ! class_exists( 'um\core\Form' ) ) {
|
|
438 |
|
439 |
}
|
440 |
|
441 |
-
if ( isset( $_POST[ UM()->honeypot ] ) && $_POST[ UM()->honeypot ] != '' ) {
|
442 |
-
wp_die( __( 'Hello, spam bot!', 'ultimate-member' ) );
|
443 |
-
}
|
444 |
-
|
445 |
/**
|
446 |
* UM hook
|
447 |
*
|
@@ -518,18 +517,19 @@ if ( ! class_exists( 'um\core\Form' ) ) {
|
|
518 |
|
519 |
/**
|
520 |
* Beautify form data
|
|
|
521 |
* @param array $form
|
522 |
* @return array $form
|
523 |
*/
|
524 |
-
function beautify( $form ){
|
525 |
|
526 |
-
if (isset($form['form_id'])){
|
527 |
|
528 |
$this->form_suffix = '-' . $form['form_id'];
|
529 |
|
530 |
$this->processing = $form['form_id'];
|
531 |
|
532 |
-
foreach( $form as $key => $value ){
|
533 |
if ( strstr( $key, $this->form_suffix ) ) {
|
534 |
$a_key = str_replace( $this->form_suffix, '', $key );
|
535 |
$form[ $a_key ] = $value;
|
366 |
*/
|
367 |
$this->post_form = apply_filters( 'um_submit_post_form', $_POST );
|
368 |
|
369 |
+
if ( isset( $this->post_form[ UM()->honeypot ] ) && $this->post_form[ UM()->honeypot ] != '' ) {
|
370 |
+
wp_die( __( 'Hello, spam bot!', 'ultimate-member' ) );
|
371 |
+
}
|
372 |
+
|
373 |
$this->post_form = $this->beautify( $this->post_form );
|
374 |
+
$this->post_form['submitted'] = $this->post_form;
|
375 |
|
376 |
$this->form_data = UM()->query()->post_data( $this->form_id );
|
377 |
|
|
|
|
|
378 |
$this->post_form = array_merge( $this->form_data, $this->post_form );
|
379 |
|
380 |
// Remove role from post_form at first if role ! empty and there aren't custom fields with role name
|
441 |
|
442 |
}
|
443 |
|
|
|
|
|
|
|
|
|
444 |
/**
|
445 |
* UM hook
|
446 |
*
|
517 |
|
518 |
/**
|
519 |
* Beautify form data
|
520 |
+
*
|
521 |
* @param array $form
|
522 |
* @return array $form
|
523 |
*/
|
524 |
+
function beautify( $form ) {
|
525 |
|
526 |
+
if ( isset( $form['form_id'] ) ) {
|
527 |
|
528 |
$this->form_suffix = '-' . $form['form_id'];
|
529 |
|
530 |
$this->processing = $form['form_id'];
|
531 |
|
532 |
+
foreach ( $form as $key => $value ) {
|
533 |
if ( strstr( $key, $this->form_suffix ) ) {
|
534 |
$a_key = str_replace( $this->form_suffix, '', $key );
|
535 |
$form[ $a_key ] = $value;
|
includes/core/class-mail.php
CHANGED
@@ -405,6 +405,8 @@ if ( ! class_exists( 'um\core\Mail' ) ) {
|
|
405 |
return;
|
406 |
}
|
407 |
|
|
|
|
|
408 |
$this->attachments = array();
|
409 |
$this->headers = 'From: '. stripslashes( UM()->options()->get('mail_from') ) .' <'. UM()->options()->get('mail_from_addr') .'>' . "\r\n";
|
410 |
|
@@ -450,6 +452,8 @@ if ( ! class_exists( 'um\core\Mail' ) ) {
|
|
450 |
|
451 |
// Send mail
|
452 |
wp_mail( $email, $this->subject, $this->message, $this->headers, $this->attachments );
|
|
|
|
|
453 |
}
|
454 |
|
455 |
|
405 |
return;
|
406 |
}
|
407 |
|
408 |
+
do_action( 'um_before_email_notification_sending', $email, $template, $args );
|
409 |
+
|
410 |
$this->attachments = array();
|
411 |
$this->headers = 'From: '. stripslashes( UM()->options()->get('mail_from') ) .' <'. UM()->options()->get('mail_from_addr') .'>' . "\r\n";
|
412 |
|
452 |
|
453 |
// Send mail
|
454 |
wp_mail( $email, $this->subject, $this->message, $this->headers, $this->attachments );
|
455 |
+
|
456 |
+
do_action( 'um_after_email_notification_sending', $email, $template, $args );
|
457 |
}
|
458 |
|
459 |
|
includes/core/class-member-directory-meta.php
CHANGED
@@ -56,51 +56,25 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
|
|
56 |
function on_delete_custom_field( $metakey, $args ) {
|
57 |
$metakeys = get_option( 'um_usermeta_fields', array() );
|
58 |
|
59 |
-
if ( $
|
60 |
-
|
61 |
-
if ( false !== $searched = array_search( $metakey . '_lat', $metakeys ) ) {
|
62 |
-
unset( $metakeys[ $searched ] );
|
63 |
-
}
|
64 |
-
if ( false !== $searched = array_search( $metakey . '_lng', $metakeys ) ) {
|
65 |
-
unset( $metakeys[ $searched ] );
|
66 |
-
}
|
67 |
-
if ( false !== $searched = array_search( $metakey . '_url', $metakeys ) ) {
|
68 |
-
unset( $metakeys[ $searched ] );
|
69 |
-
}
|
70 |
|
71 |
-
|
72 |
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
|
83 |
-
|
84 |
-
}
|
85 |
-
} else {
|
86 |
-
if ( in_array( $metakey, $metakeys ) ) {
|
87 |
-
unset( $metakeys[ array_search( $metakey, $metakeys ) ] );
|
88 |
-
|
89 |
-
global $wpdb;
|
90 |
-
|
91 |
-
$wpdb->delete(
|
92 |
-
"{$wpdb->prefix}um_metadata",
|
93 |
-
array(
|
94 |
-
'um_key' => $metakey
|
95 |
-
),
|
96 |
-
array(
|
97 |
-
'%s'
|
98 |
-
)
|
99 |
-
);
|
100 |
-
|
101 |
-
update_option( 'um_usermeta_fields', array_values( $metakeys ) );
|
102 |
-
}
|
103 |
}
|
|
|
|
|
104 |
}
|
105 |
|
106 |
|
@@ -113,32 +87,12 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
|
|
113 |
function on_new_field_added( $metakey, $args ) {
|
114 |
$metakeys = get_option( 'um_usermeta_fields', array() );
|
115 |
|
116 |
-
if ( $
|
117 |
-
$
|
118 |
-
|
119 |
-
$update = true;
|
120 |
-
$metakeys[] = $metakey . '_lat';
|
121 |
-
}
|
122 |
-
|
123 |
-
if ( ! in_array( $metakey . '_lng', $metakeys ) ) {
|
124 |
-
$update = true;
|
125 |
-
$metakeys[] = $metakey . '_lng';
|
126 |
-
}
|
127 |
-
|
128 |
-
if ( ! in_array( $metakey . '_url', $metakeys ) ) {
|
129 |
-
$update = true;
|
130 |
-
$metakeys[] = $metakey . '_url';
|
131 |
-
}
|
132 |
-
|
133 |
-
if ( $update ) {
|
134 |
-
update_option( 'um_usermeta_fields', array_values( $metakeys ) );
|
135 |
-
}
|
136 |
-
} else {
|
137 |
-
if ( ! in_array( $metakey, $metakeys ) ) {
|
138 |
-
$metakeys[] = $metakey;
|
139 |
-
update_option( 'um_usermeta_fields', array_values( $metakeys ) );
|
140 |
-
}
|
141 |
}
|
|
|
|
|
142 |
}
|
143 |
|
144 |
|
@@ -291,7 +245,10 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) {
|
|
291 |
|
292 |
$value = trim( stripslashes( $value ) );
|
293 |
|
294 |
-
$
|
|
|
|
|
|
|
295 |
|
296 |
if ( ! $is_default ) {
|
297 |
$this->custom_filters_in_query[ $field ] = $value;
|
56 |
function on_delete_custom_field( $metakey, $args ) {
|
57 |
$metakeys = get_option( 'um_usermeta_fields', array() );
|
58 |
|
59 |
+
if ( in_array( $metakey, $metakeys ) ) {
|
60 |
+
unset( $metakeys[ array_search( $metakey, $metakeys ) ] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
|
62 |
+
global $wpdb;
|
63 |
|
64 |
+
$wpdb->delete(
|
65 |
+
"{$wpdb->prefix}um_metadata",
|
66 |
+
array(
|
67 |
+
'um_key' => $metakey
|
68 |
+
),
|
69 |
+
array(
|
70 |
+
'%s'
|
71 |
+
)
|
72 |
+
);
|
73 |
|
74 |
+
update_option( 'um_usermeta_fields', array_values( $metakeys ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
}
|
76 |
+
|
77 |
+
do_action( 'um_metadata_on_delete_custom_field', $metakeys, $metakey, $args );
|
78 |
}
|
79 |
|
80 |
|
87 |
function on_new_field_added( $metakey, $args ) {
|
88 |
$metakeys = get_option( 'um_usermeta_fields', array() );
|
89 |
|
90 |
+
if ( ! in_array( $metakey, $metakeys ) ) {
|
91 |
+
$metakeys[] = $metakey;
|
92 |
+
update_option( 'um_usermeta_fields', array_values( $metakeys ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
}
|
94 |
+
|
95 |
+
do_action( 'um_metadata_on_new_field_added', $metakeys, $metakey, $args );
|
96 |
}
|
97 |
|
98 |
|
245 |
|
246 |
$value = trim( stripslashes( $value ) );
|
247 |
|
248 |
+
$compare = apply_filters( 'um_members_directory_filter_text', '=', $field );
|
249 |
+
$value = apply_filters( 'um_members_directory_filter_text_meta_value', $value, $field );
|
250 |
+
|
251 |
+
$this->where_clauses[] = $wpdb->prepare( "{$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value {$compare} %s", $field, $value );
|
252 |
|
253 |
if ( ! $is_default ) {
|
254 |
$this->custom_filters_in_query[ $field ] = $value;
|
includes/core/class-member-directory.php
CHANGED
@@ -687,7 +687,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
|
687 |
<?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) );
|
688 |
|
689 |
if ( $admin ) {
|
690 |
-
if (
|
691 |
$default_value = array( $default_value );
|
692 |
}
|
693 |
|
@@ -1596,13 +1596,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
|
1596 |
case 'text':
|
1597 |
|
1598 |
$value = stripslashes( $value );
|
1599 |
-
|
1600 |
$field_query = array(
|
1601 |
'relation' => 'OR',
|
1602 |
array(
|
1603 |
'key' => $field,
|
1604 |
'value' => trim( $value ),
|
1605 |
-
'compare' => 'LIKE',
|
1606 |
),
|
1607 |
);
|
1608 |
|
@@ -1871,7 +1870,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
|
1871 |
$field_query = array(
|
1872 |
'key' => $field,
|
1873 |
'value' => $value,
|
1874 |
-
'compare' => '=',
|
1875 |
);
|
1876 |
|
1877 |
break;
|
@@ -2212,7 +2211,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
|
|
2212 |
$dropdown_actions = $this->build_user_actions_list( $user_id );
|
2213 |
|
2214 |
$actions = array();
|
2215 |
-
$can_edit = UM()->roles()->um_current_user_can( 'edit', $user_id )
|
2216 |
|
2217 |
// Replace hook 'um_members_just_after_name'
|
2218 |
ob_start();
|
687 |
<?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) );
|
688 |
|
689 |
if ( $admin ) {
|
690 |
+
if ( ! is_array( $default_value ) ) {
|
691 |
$default_value = array( $default_value );
|
692 |
}
|
693 |
|
1596 |
case 'text':
|
1597 |
|
1598 |
$value = stripslashes( $value );
|
|
|
1599 |
$field_query = array(
|
1600 |
'relation' => 'OR',
|
1601 |
array(
|
1602 |
'key' => $field,
|
1603 |
'value' => trim( $value ),
|
1604 |
+
'compare' => apply_filters( 'um_members_directory_filter_text', 'LIKE', $field )
|
1605 |
),
|
1606 |
);
|
1607 |
|
1870 |
$field_query = array(
|
1871 |
'key' => $field,
|
1872 |
'value' => $value,
|
1873 |
+
'compare' => apply_filters( 'um_members_directory_filter_text', '=', $field ),
|
1874 |
);
|
1875 |
|
1876 |
break;
|
2211 |
$dropdown_actions = $this->build_user_actions_list( $user_id );
|
2212 |
|
2213 |
$actions = array();
|
2214 |
+
$can_edit = UM()->roles()->um_current_user_can( 'edit', $user_id );
|
2215 |
|
2216 |
// Replace hook 'um_members_just_after_name'
|
2217 |
ob_start();
|
includes/core/class-permalinks.php
CHANGED
@@ -187,6 +187,11 @@ if ( ! class_exists( 'um\core\Permalinks' ) ) {
|
|
187 |
wp_die( __( 'This activation link is expired or have already been used.', 'ultimate-member' ) );
|
188 |
}
|
189 |
|
|
|
|
|
|
|
|
|
|
|
190 |
um_fetch_user( $user_id );
|
191 |
UM()->user()->approve();
|
192 |
um_reset_user();
|
187 |
wp_die( __( 'This activation link is expired or have already been used.', 'ultimate-member' ) );
|
188 |
}
|
189 |
|
190 |
+
$account_secret_hash_expiry = get_user_meta( $user_id, 'account_secret_hash_expiry', true );
|
191 |
+
if ( ! empty( $account_secret_hash_expiry ) && time() > $account_secret_hash_expiry ) {
|
192 |
+
wp_die( __( 'This activation link is expired.', 'ultimate-member' ) );
|
193 |
+
}
|
194 |
+
|
195 |
um_fetch_user( $user_id );
|
196 |
UM()->user()->approve();
|
197 |
um_reset_user();
|
includes/core/class-profile.php
CHANGED
@@ -101,7 +101,8 @@ if ( ! class_exists( 'um\core\Profile' ) ) {
|
|
101 |
1 => __( 'Guests only', 'ultimate-member' ),
|
102 |
2 => __( 'Members only', 'ultimate-member' ),
|
103 |
3 => __( 'Only the owner', 'ultimate-member' ),
|
104 |
-
4 => __( '
|
|
|
105 |
);
|
106 |
|
107 |
return $privacy;
|
@@ -227,6 +228,25 @@ if ( ! class_exists( 'um\core\Profile' ) ) {
|
|
227 |
}
|
228 |
}
|
229 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
230 |
|
231 |
default:
|
232 |
$can_view = true;
|
@@ -322,10 +342,9 @@ if ( ! class_exists( 'um\core\Profile' ) ) {
|
|
322 |
} else {
|
323 |
if ( ! empty( $tabs ) ) {
|
324 |
foreach ( $tabs as $k => $tab ) {
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
}
|
329 |
}
|
330 |
}
|
331 |
}
|
101 |
1 => __( 'Guests only', 'ultimate-member' ),
|
102 |
2 => __( 'Members only', 'ultimate-member' ),
|
103 |
3 => __( 'Only the owner', 'ultimate-member' ),
|
104 |
+
4 => __( 'Only specific roles', 'ultimate-member' ),
|
105 |
+
5 => __( 'Owner and specific roles', 'ultimate-member' ),
|
106 |
);
|
107 |
|
108 |
return $privacy;
|
228 |
}
|
229 |
}
|
230 |
break;
|
231 |
+
case 5:
|
232 |
+
if ( is_user_logged_in() ) {
|
233 |
+
// check profile owner if not - check privacy roles settings
|
234 |
+
$can_view = get_current_user_id() === $target_id;
|
235 |
+
|
236 |
+
if ( ! $can_view ) {
|
237 |
+
if ( isset( $tab_data['default_privacy'] ) ) {
|
238 |
+
$roles = isset( $tab_data['default_privacy_roles'] ) ? $tab_data['default_privacy_roles'] : array();
|
239 |
+
} else {
|
240 |
+
$roles = (array) UM()->options()->get( 'profile_tab_' . $tab . '_roles' );
|
241 |
+
}
|
242 |
+
|
243 |
+
$current_user_roles = um_user( 'roles' );
|
244 |
+
if ( ! empty( $current_user_roles ) && count( array_intersect( $current_user_roles, $roles ) ) > 0 ) {
|
245 |
+
$can_view = true;
|
246 |
+
}
|
247 |
+
}
|
248 |
+
}
|
249 |
+
break;
|
250 |
|
251 |
default:
|
252 |
$can_view = true;
|
342 |
} else {
|
343 |
if ( ! empty( $tabs ) ) {
|
344 |
foreach ( $tabs as $k => $tab ) {
|
345 |
+
// set first tab in order
|
346 |
+
$this->active_tab = $k;
|
347 |
+
break;
|
|
|
348 |
}
|
349 |
}
|
350 |
}
|
includes/core/class-roles-capabilities.php
CHANGED
@@ -643,13 +643,18 @@ if ( ! class_exists( 'um\core\Roles_Capabilities' ) ) {
|
|
643 |
$return = 0;
|
644 |
}
|
645 |
} else {
|
646 |
-
|
|
|
647 |
$return = 0;
|
648 |
} else {
|
649 |
-
if (
|
650 |
$return = 0;
|
651 |
} else {
|
652 |
-
$
|
|
|
|
|
|
|
|
|
653 |
}
|
654 |
}
|
655 |
}
|
643 |
$return = 0;
|
644 |
}
|
645 |
} else {
|
646 |
+
|
647 |
+
if ( ! um_user( 'can_access_private_profile' ) && UM()->user()->is_private_profile( $user_id ) ) {
|
648 |
$return = 0;
|
649 |
} else {
|
650 |
+
if ( ! um_user( 'can_edit_everyone' ) ) {
|
651 |
$return = 0;
|
652 |
} else {
|
653 |
+
if ( um_user( 'can_edit_roles' ) && ( empty( $current_user_roles ) || count( array_intersect( $current_user_roles, um_user( 'can_edit_roles' ) ) ) <= 0 ) ) {
|
654 |
+
$return = 0;
|
655 |
+
} else {
|
656 |
+
$return = 1;
|
657 |
+
}
|
658 |
}
|
659 |
}
|
660 |
}
|
includes/core/class-user.php
CHANGED
@@ -1336,6 +1336,13 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
|
1336 |
|
1337 |
$this->profile['account_secret_hash'] = UM()->validation()->generate();
|
1338 |
$this->update_usermeta_info( 'account_secret_hash' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1339 |
/**
|
1340 |
* UM hook
|
1341 |
*
|
@@ -1436,6 +1443,7 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
|
1436 |
|
1437 |
$this->set_status( 'approved' );
|
1438 |
$this->delete_meta( 'account_secret_hash' );
|
|
|
1439 |
|
1440 |
/**
|
1441 |
* UM hook
|
1336 |
|
1337 |
$this->profile['account_secret_hash'] = UM()->validation()->generate();
|
1338 |
$this->update_usermeta_info( 'account_secret_hash' );
|
1339 |
+
|
1340 |
+
$expiry_time = UM()->options()->get( 'activation_link_expiry_time' );
|
1341 |
+
if ( ! empty( $expiry_time ) && is_numeric( $expiry_time ) ) {
|
1342 |
+
$this->profile['account_secret_hash_expiry'] = time() + $expiry_time;
|
1343 |
+
$this->update_usermeta_info( 'account_secret_hash_expiry' );
|
1344 |
+
}
|
1345 |
+
|
1346 |
/**
|
1347 |
* UM hook
|
1348 |
*
|
1443 |
|
1444 |
$this->set_status( 'approved' );
|
1445 |
$this->delete_meta( 'account_secret_hash' );
|
1446 |
+
$this->delete_meta( 'account_secret_hash_expiry' );
|
1447 |
|
1448 |
/**
|
1449 |
* UM hook
|
includes/core/um-actions-account.php
CHANGED
@@ -453,7 +453,7 @@ function um_before_account_notifications( $args = array() ) {
|
|
453 |
$output = UM()->account()->get_tab_fields( 'notifications', $args );
|
454 |
if ( substr_count( $output, '_enable_new_' ) ) { ?>
|
455 |
|
456 |
-
<p><?php _e( 'Select what email notifications
|
457 |
|
458 |
<?php }
|
459 |
}
|
453 |
$output = UM()->account()->get_tab_fields( 'notifications', $args );
|
454 |
if ( substr_count( $output, '_enable_new_' ) ) { ?>
|
455 |
|
456 |
+
<p><?php _e( 'Select what email notifications you want to receive', 'ultimate-member' ); ?></p>
|
457 |
|
458 |
<?php }
|
459 |
}
|
includes/core/um-actions-form.php
CHANGED
@@ -106,14 +106,54 @@ add_action( 'um_submit_form_errors_hook__blockedwords', 'um_submit_form_errors_h
|
|
106 |
* @param $args
|
107 |
*/
|
108 |
function um_submit_form_errors_hook( $args ) {
|
109 |
-
$form_id = $args['form_id'];
|
110 |
-
|
111 |
$mode = $args['mode'];
|
112 |
|
113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
|
115 |
if ( $mode == 'register' ) {
|
116 |
|
|
|
117 |
/**
|
118 |
* UM hook
|
119 |
*
|
@@ -137,6 +177,7 @@ function um_submit_form_errors_hook( $args ) {
|
|
137 |
|
138 |
} elseif ( $mode == 'profile' ) {
|
139 |
|
|
|
140 |
/**
|
141 |
* UM hook
|
142 |
*
|
@@ -158,50 +199,9 @@ function um_submit_form_errors_hook( $args ) {
|
|
158 |
*/
|
159 |
do_action( 'um_submit_form_errors_hook__profile', $args );
|
160 |
|
161 |
-
}
|
162 |
|
163 |
-
/**
|
164 |
-
* UM hook
|
165 |
-
*
|
166 |
-
* @type action
|
167 |
-
* @title um_submit_form_errors_hook__blockedips
|
168 |
-
* @description Submit form validation
|
169 |
-
* @input_vars
|
170 |
-
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
171 |
-
* @change_log
|
172 |
-
* ["Since: 2.0"]
|
173 |
-
* @usage add_action( 'um_submit_form_errors_hook__blockedips', 'function_name', 10, 1 );
|
174 |
-
* @example
|
175 |
-
* <?php
|
176 |
-
* add_action( 'um_submit_form_errors_hook__blockedips', 'my_submit_form_errors_hook__blockedips', 10, 1 );
|
177 |
-
* function my_submit_form_errors_hook__blockedips( $args ) {
|
178 |
-
* // your code here
|
179 |
-
* }
|
180 |
-
* ?>
|
181 |
-
*/
|
182 |
-
do_action( 'um_submit_form_errors_hook__blockedips', $args );
|
183 |
-
/**
|
184 |
-
* UM hook
|
185 |
-
*
|
186 |
-
* @type action
|
187 |
-
* @title um_submit_form_errors_hook__blockedemails
|
188 |
-
* @description Submit form validation
|
189 |
-
* @input_vars
|
190 |
-
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
191 |
-
* @change_log
|
192 |
-
* ["Since: 2.0"]
|
193 |
-
* @usage add_action( 'um_submit_form_errors_hook__blockedemails', 'function_name', 10, 1 );
|
194 |
-
* @example
|
195 |
-
* <?php
|
196 |
-
* add_action( 'um_submit_form_errors_hook__blockedemails', 'my_submit_form_errors_hook__blockedemails', 10, 1 );
|
197 |
-
* function my_submit_form_errors_hook__blockedemails( $args ) {
|
198 |
-
* // your code here
|
199 |
-
* }
|
200 |
-
* ?>
|
201 |
-
*/
|
202 |
-
do_action( 'um_submit_form_errors_hook__blockedemails', $args );
|
203 |
|
204 |
-
if ( $mode == 'login' ) {
|
205 |
/**
|
206 |
* UM hook
|
207 |
*
|
@@ -222,6 +222,8 @@ function um_submit_form_errors_hook( $args ) {
|
|
222 |
* ?>
|
223 |
*/
|
224 |
do_action( 'um_submit_form_errors_hook_login', $args );
|
|
|
|
|
225 |
/**
|
226 |
* UM hook
|
227 |
*
|
@@ -243,47 +245,54 @@ function um_submit_form_errors_hook( $args ) {
|
|
243 |
*/
|
244 |
do_action( 'um_submit_form_errors_hook_logincheck', $args );
|
245 |
|
246 |
-
}
|
|
|
|
|
|
|
|
|
|
|
247 |
/**
|
248 |
* UM hook
|
249 |
*
|
250 |
* @type action
|
251 |
-
* @title
|
252 |
* @description Submit form validation
|
253 |
* @input_vars
|
254 |
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
255 |
* @change_log
|
256 |
* ["Since: 2.0"]
|
257 |
-
* @usage add_action( '
|
258 |
* @example
|
259 |
* <?php
|
260 |
-
* add_action( '
|
261 |
-
* function
|
262 |
* // your code here
|
263 |
* }
|
264 |
* ?>
|
265 |
*/
|
266 |
-
do_action( '
|
|
|
|
|
267 |
/**
|
268 |
* UM hook
|
269 |
*
|
270 |
* @type action
|
271 |
-
* @title
|
272 |
* @description Submit form validation
|
273 |
* @input_vars
|
274 |
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
275 |
* @change_log
|
276 |
* ["Since: 2.0"]
|
277 |
-
* @usage add_action( '
|
278 |
* @example
|
279 |
* <?php
|
280 |
-
* add_action( '
|
281 |
-
* function
|
282 |
* // your code here
|
283 |
* }
|
284 |
* ?>
|
285 |
*/
|
286 |
-
do_action( '
|
287 |
|
288 |
}
|
289 |
|
@@ -411,13 +420,25 @@ function um_submit_form_errors_hook_( $args ) {
|
|
411 |
$form_id = $args['form_id'];
|
412 |
$mode = $args['mode'];
|
413 |
$fields = unserialize( $args['custom_fields'] );
|
414 |
-
$um_profile_photo = um_profile('profile_photo');
|
415 |
|
|
|
416 |
if ( get_post_meta( $form_id, '_um_profile_photo_required', true ) && ( empty( $args['profile_photo'] ) && empty( $um_profile_photo ) ) ) {
|
417 |
UM()->form()->add_error('profile_photo', __( 'Profile Photo is required.', 'ultimate-member' ) );
|
418 |
}
|
419 |
|
420 |
if ( ! empty( $fields ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
421 |
foreach ( $fields as $key => $array ) {
|
422 |
|
423 |
if ( $mode == 'profile' ) {
|
@@ -427,13 +448,52 @@ function um_submit_form_errors_hook_( $args ) {
|
|
427 |
}
|
428 |
}
|
429 |
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
434 |
}
|
|
|
435 |
}
|
436 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
437 |
/**
|
438 |
* UM hook
|
439 |
*
|
106 |
* @param $args
|
107 |
*/
|
108 |
function um_submit_form_errors_hook( $args ) {
|
|
|
|
|
109 |
$mode = $args['mode'];
|
110 |
|
111 |
+
/**
|
112 |
+
* UM hook
|
113 |
+
*
|
114 |
+
* @type action
|
115 |
+
* @title um_submit_form_errors_hook__blockedips
|
116 |
+
* @description Submit form validation
|
117 |
+
* @input_vars
|
118 |
+
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
119 |
+
* @change_log
|
120 |
+
* ["Since: 2.0"]
|
121 |
+
* @usage add_action( 'um_submit_form_errors_hook__blockedips', 'function_name', 10, 1 );
|
122 |
+
* @example
|
123 |
+
* <?php
|
124 |
+
* add_action( 'um_submit_form_errors_hook__blockedips', 'my_submit_form_errors_hook__blockedips', 10, 1 );
|
125 |
+
* function my_submit_form_errors_hook__blockedips( $args ) {
|
126 |
+
* // your code here
|
127 |
+
* }
|
128 |
+
* ?>
|
129 |
+
*/
|
130 |
+
do_action( 'um_submit_form_errors_hook__blockedips', $args );
|
131 |
+
|
132 |
+
|
133 |
+
/**
|
134 |
+
* UM hook
|
135 |
+
*
|
136 |
+
* @type action
|
137 |
+
* @title um_submit_form_errors_hook__blockedemails
|
138 |
+
* @description Submit form validation
|
139 |
+
* @input_vars
|
140 |
+
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
141 |
+
* @change_log
|
142 |
+
* ["Since: 2.0"]
|
143 |
+
* @usage add_action( 'um_submit_form_errors_hook__blockedemails', 'function_name', 10, 1 );
|
144 |
+
* @example
|
145 |
+
* <?php
|
146 |
+
* add_action( 'um_submit_form_errors_hook__blockedemails', 'my_submit_form_errors_hook__blockedemails', 10, 1 );
|
147 |
+
* function my_submit_form_errors_hook__blockedemails( $args ) {
|
148 |
+
* // your code here
|
149 |
+
* }
|
150 |
+
* ?>
|
151 |
+
*/
|
152 |
+
do_action( 'um_submit_form_errors_hook__blockedemails', $args );
|
153 |
|
154 |
if ( $mode == 'register' ) {
|
155 |
|
156 |
+
|
157 |
/**
|
158 |
* UM hook
|
159 |
*
|
177 |
|
178 |
} elseif ( $mode == 'profile' ) {
|
179 |
|
180 |
+
|
181 |
/**
|
182 |
* UM hook
|
183 |
*
|
199 |
*/
|
200 |
do_action( 'um_submit_form_errors_hook__profile', $args );
|
201 |
|
202 |
+
} elseif ( $mode == 'login' ) {
|
203 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
|
|
|
205 |
/**
|
206 |
* UM hook
|
207 |
*
|
222 |
* ?>
|
223 |
*/
|
224 |
do_action( 'um_submit_form_errors_hook_login', $args );
|
225 |
+
|
226 |
+
|
227 |
/**
|
228 |
* UM hook
|
229 |
*
|
245 |
*/
|
246 |
do_action( 'um_submit_form_errors_hook_logincheck', $args );
|
247 |
|
248 |
+
}
|
249 |
+
|
250 |
+
|
251 |
+
if ( $mode != 'login' ) {
|
252 |
+
|
253 |
+
|
254 |
/**
|
255 |
* UM hook
|
256 |
*
|
257 |
* @type action
|
258 |
+
* @title um_submit_form_errors_hook__blockedwords
|
259 |
* @description Submit form validation
|
260 |
* @input_vars
|
261 |
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
262 |
* @change_log
|
263 |
* ["Since: 2.0"]
|
264 |
+
* @usage add_action( 'um_submit_form_errors_hook__blockedwords', 'function_name', 10, 1 );
|
265 |
* @example
|
266 |
* <?php
|
267 |
+
* add_action( 'um_submit_form_errors_hook__blockedwords', 'my_submit_form_errors_hook__blockedwords', 10, 1 );
|
268 |
+
* function my_submit_form_errors_hook__blockedwords( $args ) {
|
269 |
* // your code here
|
270 |
* }
|
271 |
* ?>
|
272 |
*/
|
273 |
+
do_action( 'um_submit_form_errors_hook__blockedwords', $args );
|
274 |
+
|
275 |
+
|
276 |
/**
|
277 |
* UM hook
|
278 |
*
|
279 |
* @type action
|
280 |
+
* @title um_submit_form_errors_hook_
|
281 |
* @description Submit form validation
|
282 |
* @input_vars
|
283 |
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
|
284 |
* @change_log
|
285 |
* ["Since: 2.0"]
|
286 |
+
* @usage add_action( 'um_submit_form_errors_hook_', 'function_name', 10, 1 );
|
287 |
* @example
|
288 |
* <?php
|
289 |
+
* add_action( 'um_submit_form_errors_hook_', 'my_submit_form_errors_hook', 10, 1 );
|
290 |
+
* function my_submit_form_errors_hook( $args ) {
|
291 |
* // your code here
|
292 |
* }
|
293 |
* ?>
|
294 |
*/
|
295 |
+
do_action( 'um_submit_form_errors_hook_', $args );
|
296 |
|
297 |
}
|
298 |
|
420 |
$form_id = $args['form_id'];
|
421 |
$mode = $args['mode'];
|
422 |
$fields = unserialize( $args['custom_fields'] );
|
|
|
423 |
|
424 |
+
$um_profile_photo = um_profile('profile_photo');
|
425 |
if ( get_post_meta( $form_id, '_um_profile_photo_required', true ) && ( empty( $args['profile_photo'] ) && empty( $um_profile_photo ) ) ) {
|
426 |
UM()->form()->add_error('profile_photo', __( 'Profile Photo is required.', 'ultimate-member' ) );
|
427 |
}
|
428 |
|
429 |
if ( ! empty( $fields ) ) {
|
430 |
+
|
431 |
+
$can_edit = false;
|
432 |
+
$current_user_roles = [];
|
433 |
+
if ( is_user_logged_in() ) {
|
434 |
+
|
435 |
+
$can_edit = UM()->roles()->um_current_user_can( 'edit', $args['user_id'] );
|
436 |
+
|
437 |
+
um_fetch_user( get_current_user_id() );
|
438 |
+
$current_user_roles = um_user( 'roles' );
|
439 |
+
um_reset_user();
|
440 |
+
}
|
441 |
+
|
442 |
foreach ( $fields as $key => $array ) {
|
443 |
|
444 |
if ( $mode == 'profile' ) {
|
448 |
}
|
449 |
}
|
450 |
|
451 |
+
$can_view = true;
|
452 |
+
if ( isset( $array['public'] ) && $mode != 'register' ) {
|
453 |
+
|
454 |
+
switch ( $array['public'] ) {
|
455 |
+
case '1': // Everyone
|
456 |
+
break;
|
457 |
+
case '2': // Members
|
458 |
+
if ( ! is_user_logged_in() ) {
|
459 |
+
$can_view = false;
|
460 |
+
}
|
461 |
+
break;
|
462 |
+
case '-1': // Only visible to profile owner and admins
|
463 |
+
if ( ! is_user_logged_in() ) {
|
464 |
+
$can_view = false;
|
465 |
+
} elseif ( $args['user_id'] != get_current_user_id() && ! $can_edit ) {
|
466 |
+
$can_view = false;
|
467 |
+
}
|
468 |
+
break;
|
469 |
+
case '-2': // Only specific member roles
|
470 |
+
if ( ! is_user_logged_in() ) {
|
471 |
+
$can_view = false;
|
472 |
+
} elseif ( ! empty( $array['roles'] ) && count( array_intersect( $current_user_roles, $array['roles'] ) ) <= 0 ) {
|
473 |
+
$can_view = false;
|
474 |
+
}
|
475 |
+
break;
|
476 |
+
case '-3': // Only visible to profile owner and specific roles
|
477 |
+
if ( ! is_user_logged_in() ) {
|
478 |
+
$can_view = false;
|
479 |
+
} elseif ( $args['user_id'] != get_current_user_id() && ! empty( $array['roles'] ) && count( array_intersect( $current_user_roles, $array['roles'] ) ) <= 0 ) {
|
480 |
+
$can_view = false;
|
481 |
+
}
|
482 |
+
break;
|
483 |
+
default:
|
484 |
+
$can_view = apply_filters( 'um_can_view_field_custom', $can_view, $array );
|
485 |
+
break;
|
486 |
}
|
487 |
+
|
488 |
}
|
489 |
|
490 |
+
$can_view = apply_filters( 'um_can_view_field', $can_view, $array );
|
491 |
+
|
492 |
+
if ( ! $can_view ) {
|
493 |
+
continue;
|
494 |
+
}
|
495 |
+
|
496 |
+
|
497 |
/**
|
498 |
* UM hook
|
499 |
*
|
includes/core/um-actions-login.php
CHANGED
@@ -75,7 +75,7 @@ function um_submit_form_errors_hook_login( $args ) {
|
|
75 |
|
76 |
// if there is an error notify wp
|
77 |
if ( UM()->form()->has_error( $field ) || UM()->form()->has_error( $user_password ) || UM()->form()->count_errors() > 0 ) {
|
78 |
-
do_action( 'wp_login_failed', $user_name );
|
79 |
}
|
80 |
}
|
81 |
add_action( 'um_submit_form_errors_hook_login', 'um_submit_form_errors_hook_login', 10 );
|
75 |
|
76 |
// if there is an error notify wp
|
77 |
if ( UM()->form()->has_error( $field ) || UM()->form()->has_error( $user_password ) || UM()->form()->count_errors() > 0 ) {
|
78 |
+
do_action( 'wp_login_failed', $user_name, UM()->form()->errors );
|
79 |
}
|
80 |
}
|
81 |
add_action( 'um_submit_form_errors_hook_login', 'um_submit_form_errors_hook_login', 10 );
|
includes/core/um-actions-profile.php
CHANGED
@@ -1294,42 +1294,38 @@ function um_pre_profile_shortcode( $args ) {
|
|
1294 |
*/
|
1295 |
extract( $args );
|
1296 |
|
1297 |
-
if ( $mode == 'profile'
|
1298 |
-
UM()->fields()->
|
1299 |
-
|
1300 |
-
|
1301 |
-
|
1302 |
-
|
1303 |
-
|
1304 |
-
|
1305 |
-
if ( ! UM()->roles()->um_current_user_can( 'edit', um_get_requested_user() ) ) {
|
1306 |
-
UM()->user()->cannot_edit = 1;
|
1307 |
}
|
1308 |
-
|
1309 |
-
um_fetch_user( um_get_requested_user() );
|
1310 |
} else {
|
1311 |
-
|
1312 |
-
um_redirect_home( um_get_requested_user(), um_is_myprofile() );
|
1313 |
-
}
|
1314 |
|
1315 |
-
if (
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
|
|
|
|
|
|
1320 |
|
1321 |
-
|
1322 |
-
|
|
|
|
|
|
|
1323 |
|
1324 |
-
|
1325 |
-
|
1326 |
-
|
1327 |
}
|
1328 |
-
um_fetch_user( um_get_requested_user() );
|
1329 |
}
|
1330 |
-
|
1331 |
}
|
1332 |
-
|
1333 |
}
|
1334 |
add_action( 'um_pre_profile_shortcode', 'um_pre_profile_shortcode' );
|
1335 |
|
1294 |
*/
|
1295 |
extract( $args );
|
1296 |
|
1297 |
+
if ( $mode == 'profile' ) {
|
1298 |
+
if ( UM()->fields()->editing ) {
|
1299 |
+
if ( um_get_requested_user() ) {
|
1300 |
+
if ( ! UM()->roles()->um_current_user_can( 'edit', um_get_requested_user() ) ) {
|
1301 |
+
um_redirect_home( um_get_requested_user(), um_is_myprofile() );
|
1302 |
+
}
|
1303 |
+
um_fetch_user( um_get_requested_user() );
|
|
|
|
|
|
|
1304 |
}
|
|
|
|
|
1305 |
} else {
|
1306 |
+
UM()->fields()->viewing = 1;
|
|
|
|
|
1307 |
|
1308 |
+
if ( um_get_requested_user() ) {
|
1309 |
+
if ( ! um_can_view_profile( um_get_requested_user() ) && ! um_is_myprofile() ) {
|
1310 |
+
um_redirect_home( um_get_requested_user(), um_is_myprofile() );
|
1311 |
+
}
|
1312 |
+
|
1313 |
+
if ( ! UM()->roles()->um_current_user_can( 'edit', um_get_requested_user() ) ) {
|
1314 |
+
UM()->user()->cannot_edit = 1;
|
1315 |
+
}
|
1316 |
|
1317 |
+
um_fetch_user( um_get_requested_user() );
|
1318 |
+
} else {
|
1319 |
+
if ( ! is_user_logged_in() ) {
|
1320 |
+
um_redirect_home( um_get_requested_user(), um_is_myprofile() );
|
1321 |
+
}
|
1322 |
|
1323 |
+
if ( ! um_user( 'can_edit_profile' ) ) {
|
1324 |
+
UM()->user()->cannot_edit = 1;
|
1325 |
+
}
|
1326 |
}
|
|
|
1327 |
}
|
|
|
1328 |
}
|
|
|
1329 |
}
|
1330 |
add_action( 'um_pre_profile_shortcode', 'um_pre_profile_shortcode' );
|
1331 |
|
includes/um-short-functions.php
CHANGED
@@ -1514,7 +1514,12 @@ function um_can_view_field( $data ) {
|
|
1514 |
|
1515 |
if ( isset( $data['public'] ) && UM()->fields()->set_mode != 'register' ) {
|
1516 |
|
|
|
|
|
1517 |
if ( is_user_logged_in() ) {
|
|
|
|
|
|
|
1518 |
$previous_user = um_user( 'ID' );
|
1519 |
um_fetch_user( get_current_user_id() );
|
1520 |
|
@@ -1523,47 +1528,32 @@ function um_can_view_field( $data ) {
|
|
1523 |
}
|
1524 |
|
1525 |
switch ( $data['public'] ) {
|
1526 |
-
case '1':
|
1527 |
-
$can_view = true;
|
1528 |
break;
|
1529 |
-
case '2':
|
1530 |
if ( ! is_user_logged_in() ) {
|
1531 |
$can_view = false;
|
1532 |
}
|
1533 |
break;
|
1534 |
-
case '-1':
|
1535 |
if ( ! is_user_logged_in() ) {
|
1536 |
$can_view = false;
|
1537 |
-
}
|
1538 |
-
|
1539 |
-
$can_view = false;
|
1540 |
-
}
|
1541 |
}
|
1542 |
break;
|
1543 |
-
case '-2':
|
1544 |
if ( ! is_user_logged_in() ) {
|
1545 |
$can_view = false;
|
1546 |
-
}
|
1547 |
-
|
1548 |
-
if ( empty( $current_user_roles ) || count( array_intersect( $current_user_roles, $data['roles'] ) ) <= 0 ) {
|
1549 |
-
$can_view = false;
|
1550 |
-
}
|
1551 |
-
}
|
1552 |
}
|
1553 |
break;
|
1554 |
-
case '-3':
|
1555 |
if ( ! is_user_logged_in() ) {
|
1556 |
$can_view = false;
|
1557 |
-
}
|
1558 |
-
|
1559 |
-
if ( empty( $current_user_roles ) || ( ! empty( $data['roles'] ) && count( array_intersect( $current_user_roles, $data['roles'] ) ) <= 0 ) ) {
|
1560 |
-
$can_view = false;
|
1561 |
-
}
|
1562 |
-
} else {
|
1563 |
-
if ( ! um_is_user_himself() && ( empty( $current_user_roles ) || ( ! empty( $data['roles'] ) && count( array_intersect( $current_user_roles, $data['roles'] ) ) <= 0 ) ) ) {
|
1564 |
-
$can_view = false;
|
1565 |
-
}
|
1566 |
-
}
|
1567 |
}
|
1568 |
break;
|
1569 |
default:
|
@@ -1585,10 +1575,6 @@ function um_can_view_field( $data ) {
|
|
1585 |
* @return bool
|
1586 |
*/
|
1587 |
function um_can_view_profile( $user_id ) {
|
1588 |
-
if ( UM()->roles()->um_current_user_can( 'edit', $user_id ) ) {
|
1589 |
-
return true;
|
1590 |
-
}
|
1591 |
-
|
1592 |
if ( ! is_user_logged_in() ) {
|
1593 |
return ! UM()->user()->is_private_profile( $user_id );
|
1594 |
}
|
@@ -1618,6 +1604,7 @@ function um_can_view_profile( $user_id ) {
|
|
1618 |
return false;
|
1619 |
}
|
1620 |
}
|
|
|
1621 |
um_fetch_user( $temp_id );
|
1622 |
return true;
|
1623 |
}
|
1514 |
|
1515 |
if ( isset( $data['public'] ) && UM()->fields()->set_mode != 'register' ) {
|
1516 |
|
1517 |
+
$can_edit = false;
|
1518 |
+
$current_user_roles = [];
|
1519 |
if ( is_user_logged_in() ) {
|
1520 |
+
|
1521 |
+
$can_edit = UM()->roles()->um_current_user_can( 'edit', um_user( 'ID' ) );
|
1522 |
+
|
1523 |
$previous_user = um_user( 'ID' );
|
1524 |
um_fetch_user( get_current_user_id() );
|
1525 |
|
1528 |
}
|
1529 |
|
1530 |
switch ( $data['public'] ) {
|
1531 |
+
case '1': // Everyone
|
|
|
1532 |
break;
|
1533 |
+
case '2': // Members
|
1534 |
if ( ! is_user_logged_in() ) {
|
1535 |
$can_view = false;
|
1536 |
}
|
1537 |
break;
|
1538 |
+
case '-1': // Only visible to profile owner and users who can edit other member accounts
|
1539 |
if ( ! is_user_logged_in() ) {
|
1540 |
$can_view = false;
|
1541 |
+
} elseif ( ! um_is_user_himself() && ! $can_edit ) {
|
1542 |
+
$can_view = false;
|
|
|
|
|
1543 |
}
|
1544 |
break;
|
1545 |
+
case '-2': // Only specific member roles
|
1546 |
if ( ! is_user_logged_in() ) {
|
1547 |
$can_view = false;
|
1548 |
+
} elseif ( ! empty( $data['roles'] ) && count( array_intersect( $current_user_roles, $data['roles'] ) ) <= 0 ) {
|
1549 |
+
$can_view = false;
|
|
|
|
|
|
|
|
|
1550 |
}
|
1551 |
break;
|
1552 |
+
case '-3': // Only visible to profile owner and specific roles
|
1553 |
if ( ! is_user_logged_in() ) {
|
1554 |
$can_view = false;
|
1555 |
+
} elseif ( ! um_is_user_himself() && ! empty( $data['roles'] ) && count( array_intersect( $current_user_roles, $data['roles'] ) ) <= 0 ) {
|
1556 |
+
$can_view = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1557 |
}
|
1558 |
break;
|
1559 |
default:
|
1575 |
* @return bool
|
1576 |
*/
|
1577 |
function um_can_view_profile( $user_id ) {
|
|
|
|
|
|
|
|
|
1578 |
if ( ! is_user_logged_in() ) {
|
1579 |
return ! UM()->user()->is_private_profile( $user_id );
|
1580 |
}
|
1604 |
return false;
|
1605 |
}
|
1606 |
}
|
1607 |
+
|
1608 |
um_fetch_user( $temp_id );
|
1609 |
return true;
|
1610 |
}
|
readme.txt
CHANGED
@@ -7,7 +7,7 @@ Tags: community, member, membership, user-profile, user-registration
|
|
7 |
Requires PHP: 5.6
|
8 |
Requires at least: 5.0
|
9 |
Tested up to: 5.7
|
10 |
-
Stable tag: 2.1.
|
11 |
License: GNU Version 2 or Any Later Version
|
12 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
13 |
|
@@ -155,6 +155,30 @@ The plugin works with popular caching plugins by automatically excluding Ultimat
|
|
155 |
* To learn more about version 2.1 please see this [docs](https://docs.ultimatemember.com/article/1512-upgrade-2-1-0)
|
156 |
* UM2.1+ is a significant update to the Member Directories' code base from 2.0.x. Please make sure you take a full-site backup with restore point before updating the plugin
|
157 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
158 |
= 2.1.16: March 10, 2021 =
|
159 |
|
160 |
* Enhancements:
|
7 |
Requires PHP: 5.6
|
8 |
Requires at least: 5.0
|
9 |
Tested up to: 5.7
|
10 |
+
Stable tag: 2.1.17
|
11 |
License: GNU Version 2 or Any Later Version
|
12 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
13 |
|
155 |
* To learn more about version 2.1 please see this [docs](https://docs.ultimatemember.com/article/1512-upgrade-2-1-0)
|
156 |
* UM2.1+ is a significant update to the Member Directories' code base from 2.0.x. Please make sure you take a full-site backup with restore point before updating the plugin
|
157 |
|
158 |
+
= 2.1.17: April 14, 2021 =
|
159 |
+
|
160 |
+
* Enhancements:
|
161 |
+
- Added: Activation link expiration setting (#803)
|
162 |
+
- Added: 'Owner and specific roles' privacy type for the Profile tabs (#773)
|
163 |
+
- Added: Hooks `um_before_email_notification_sending` and `um_after_email_notification_sending` regarding #743 pull-request
|
164 |
+
- Added: Hooks for integration member directory filters with different conditions for query to DB
|
165 |
+
|
166 |
+
* Bugfixes:
|
167 |
+
- Fixed: Editing private profiles capability. Removed the priority for "Can edit other member accounts?" capability when the account is private. (#805)
|
168 |
+
- Fixed: PHP notice when the admin filtering field has the not array default value (e.g. bool)
|
169 |
+
- Fixed: The conflict with [Disable Blog](https://wordpress.org/plugins/disable-blog/) plugin regarding this [issue](https://wordpress.org/support/topic/ultimate-member-file-image-download/). `download_routing` callback has the highest priority now.
|
170 |
+
- Fixed: Fields privacy functionality. This function `um_can_view_field()` has been rewritten (#780)
|
171 |
+
- Fixed: Fields privacy + form validation functionality. Skip the field's validation that aren't visible on the form based on the privacy settings (#795)
|
172 |
+
- Fixed: PHP notice in the confirm password label [wp.org thread](https://wordpress.org/support/topic/undefined-index-label-php-notice/)
|
173 |
+
- Fixed: Confirm password placeholder when label is empty
|
174 |
+
- Fixed: Permanently deleting form's field (#786)
|
175 |
+
- Fixed: Default value with comma for checkbox field-type (#729)
|
176 |
+
- Fixed: Gutenberg blocks conditional settings (#793)
|
177 |
+
- Fixed: Getting active Profile tab when some of them are hidden
|
178 |
+
- Fixed: Restricted content message is showing twice and removing header, avoid the conflicts with themes that use 'the_content' filter in header or footer (#799)
|
179 |
+
- Fixed: "Is required" validation for the multiselect field-type when it's empty on submit
|
180 |
+
- Fixed: Using 'wp_login_failed' hook, added 2nd parameter required since WordPress 5.4 version (#810)
|
181 |
+
|
182 |
= 2.1.16: March 10, 2021 =
|
183 |
|
184 |
* Enhancements:
|
ultimate-member.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Ultimate Member
|
4 |
Plugin URI: http://ultimatemember.com/
|
5 |
Description: The easiest way to create powerful online communities and beautiful user profiles with WordPress
|
6 |
-
Version: 2.1.
|
7 |
Author: Ultimate Member
|
8 |
Author URI: http://ultimatemember.com/
|
9 |
Text Domain: ultimate-member
|
3 |
Plugin Name: Ultimate Member
|
4 |
Plugin URI: http://ultimatemember.com/
|
5 |
Description: The easiest way to create powerful online communities and beautiful user profiles with WordPress
|
6 |
+
Version: 2.1.17
|
7 |
Author: Ultimate Member
|
8 |
Author URI: http://ultimatemember.com/
|
9 |
Text Domain: ultimate-member
|