diff --git a/README.md b/README.md index c65e6b13..3a8a3db0 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Ultimate Member is the #1 user profile & membership plugin for WordPress. The pl | Latest Version |Requires at least|Stable Tag| | :------------: |:------------:|:------------:| -| 2.0.30 | WordPress 4.9 or higher| 2.0.30 | +| 2.0.33 | WordPress 4.9 or higher| 2.0.33 | Features of the plugin include: @@ -48,7 +48,7 @@ GNU Version 2 or Any Later Version Releases ==================== -[Official Release Version: 2.0.30](https://github.com/ultimatemember/ultimatemember/releases/tag/2.0.30). +[Official Release Version: 2.0.33](https://github.com/ultimatemember/ultimatemember/releases/tag/2.0.33). Changelog ==================== diff --git a/assets/dynamic_css/dynamic_global.php b/assets/dynamic_css/dynamic_global.php index 3a603470..101f9c15 100644 --- a/assets/dynamic_css/dynamic_global.php +++ b/assets/dynamic_css/dynamic_global.php @@ -7,7 +7,7 @@ print ".um-$form_id.um { }"; } -if ( isset( $align ) && in_array( $align, ['left', 'right'] ) ) { +if ( isset( $align ) && in_array( $align, array( 'left', 'right' ) ) ) { print ".um-$form_id.um { margin-$align: 0px !important; }"; diff --git a/assets/js/um-modal.js b/assets/js/um-modal.js index f1a480c9..12c96fd6 100644 --- a/assets/js/um-modal.js +++ b/assets/js/um-modal.js @@ -34,7 +34,8 @@ jQuery(document).ready(function() { type: 'post', data: { action: 'um_remove_file', - src: src + src: src, + nonce: um_scripts.nonce } }); @@ -64,7 +65,8 @@ jQuery(document).ready(function() { type: 'post', data: { action: 'um_remove_file', - src: src + src: src, + nonce: um_scripts.nonce } }); @@ -115,7 +117,8 @@ jQuery(document).ready(function() { src : src, coord : coord, user_id : user_id, - key: key + key: key, + nonce: um_scripts.nonce }, success: function( response ){ diff --git a/assets/js/um-modal.min.js b/assets/js/um-modal.min.js index abe282d2..8c591bbd 100644 --- a/assets/js/um-modal.min.js +++ b/assets/js/um-modal.min.js @@ -1 +1 @@ -jQuery(document).ready(function(){jQuery(document).on("click",".um-popup-overlay",function(){remove_Modal()}),jQuery(document).on("click",'.um-modal-overlay, a[data-action="um_remove_modal"]',function(){um_remove_modal()}),jQuery(document).on("click",'a[data-modal^="um_"], span[data-modal^="um_"], .um-modal a',function(e){return e.preventDefault(),!1}),jQuery(document).on("click",".um-modal .um-single-file-preview a.cancel",function(e){e.preventDefault();var a=jQuery(this).parents(".um-modal-body"),t=jQuery(this).parents(".um-modal-body").find(".um-single-fileinfo a").attr("href");return a.find(".um-single-file-preview").hide(),a.find(".ajax-upload-dragdrop").show(),a.find(".um-modal-btn.um-finish-upload").addClass("disabled"),um_modal_responsive(),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:t}}),!1}),jQuery(document).on("click",".um-modal .um-single-image-preview a.cancel",function(e){e.preventDefault();var a=jQuery(this).parents(".um-modal-body"),t=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview img").attr("src");return jQuery("img.cropper-hidden").cropper("destroy"),a.find(".um-single-image-preview img").attr("src",""),a.find(".um-single-image-preview").hide(),a.find(".ajax-upload-dragdrop").show(),a.find(".um-modal-btn.um-finish-upload").addClass("disabled"),um_modal_responsive(),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:t}}),!1}),jQuery(document).on("click",".um-finish-upload.file:not(.disabled)",function(){var e=jQuery(this).attr("data-key"),a=jQuery(this).parents(".um-modal-body").find(".um-single-file-preview").html();um_remove_modal(),jQuery(".um-single-file-preview[data-key="+e+"]").fadeIn().html(a);var t=jQuery(".um-field[data-key="+e+"]").find(".um-single-fileinfo a").data("file");jQuery(".um-single-file-preview[data-key="+e+"]").parents(".um-field").find(".um-btn-auto-width").html(jQuery(this).attr("data-change")),jQuery(".um-single-file-preview[data-key="+e+"]").parents(".um-field").find('input[type="hidden"]').val(t)}),jQuery(document).on("click",".um-finish-upload.image:not(.disabled)",function(){var a=jQuery(this),t=jQuery(this).attr("data-key"),e=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview"),i=e.find("img").attr("src"),r=e.attr("data-coord"),u=e.find("img").data("file"),m=0;jQuery(this).parents("#um_upload_single").data("user_id")&&(m=jQuery(this).parents("#um_upload_single").data("user_id")),r?(jQuery(this).html(jQuery(this).attr("data-processing")).addClass("disabled"),jQuery.ajax({url:wp.ajax.settings.url,type:"POST",dataType:"json",data:{action:"um_resize_image",src:i,coord:r,user_id:m,key:t},success:function(e){1==e.success&&(d=new Date,"profile_photo"==t&&jQuery(".um-profile-photo-img img").attr("src",e.data.image.source_url+"?"+d.getTime()),"cover_photo"==t&&(jQuery(".um-cover-e").empty().html(''),jQuery(".um").hasClass("um-editing")&&jQuery(".um-cover-overlay").show()),jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+d.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(d=new Date,jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",i+"?"+d.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find("input[type=hidden]").val(u))}),jQuery(document).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";if(jQuery(this).data("modal-size"))t=jQuery(this).data("modal-size");jQuery(this).data("modal-copy")&&(jQuery("#"+a).html(jQuery(this).parents(".um-field").find(".um-modal-hidden-content").html()),jQuery(this).parents(".um-profile-photo").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-profile-photo").attr("data-user_id")),jQuery(this).parents(".um-cover").attr("data-ratio")&&jQuery("#"+a).attr("data-ratio",jQuery(this).parents(".um-cover").attr("data-ratio")),jQuery(this).parents(".um-cover").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-cover").attr("data-user_id")),0'),jQuery(".um").hasClass("um-editing")&&jQuery(".um-cover-overlay").show()),jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+d.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(d=new Date,jQuery(".um-single-image-preview[data-key="+t+"]").fadeIn().find("img").attr("src",i+"?"+d.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find(".um-btn-auto-width").html(a.attr("data-change")),jQuery(".um-single-image-preview[data-key="+t+"]").parents(".um-field").find("input[type=hidden]").val(u))}),jQuery(document).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";if(jQuery(this).data("modal-size"))t=jQuery(this).data("modal-size");jQuery(this).data("modal-copy")&&(jQuery("#"+a).html(jQuery(this).parents(".um-field").find(".um-modal-hidden-content").html()),jQuery(this).parents(".um-profile-photo").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-profile-photo").attr("data-user_id")),jQuery(this).parents(".um-cover").attr("data-ratio")&&jQuery("#"+a).attr("data-ratio",jQuery(this).parents(".um-cover").attr("data-ratio")),jQuery(this).parents(".um-cover").attr("data-user_id")&&jQuery("#"+a).attr("data-user_id",jQuery(this).parents(".um-cover").attr("data-user_id")),0'),jQuery(".um-dropdown").hide(),um_responsive(),user_id=jQuery(this).attr("data-user_id"),metakey="cover_photo",jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_cover_photo",metakey:metakey,user_id:user_id},success:function(e){t.hide()}})}),e(),jQuery("textarea[id=um-meta-bio]").change(e),jQuery("textarea[id=um-meta-bio]").keyup(e),jQuery(".um-profile-edit a.um_delete-item").click(function(e){if(e.preventDefault(),!confirm("Are you sure that you want to delete this user?"))return!1})}); \ No newline at end of file +jQuery(document).ready(function(){function e(){if(void 0!==jQuery("textarea[id=um-meta-bio]").val()){var e=jQuery("textarea[id=um-meta-bio]").attr("data-character-limit")-jQuery("textarea[id=um-meta-bio]").val().length;jQuery("span.um-meta-bio-character span.um-bio-limit").text(e),e<5?jQuery("span.um-meta-bio-character").css("color","red"):jQuery("span.um-meta-bio-character").css("color","")}}jQuery(".um-profile.um-viewing .um-profile-body .um-row").each(function(){var e=jQuery(this);0==e.find(".um-field").length&&(e.prev(".um-row-heading").remove(),e.remove())}),jQuery(".um-profile.um-viewing .um-profile-body").length&&0==jQuery(".um-profile.um-viewing .um-profile-body").find(".um-field").length&&(jQuery(".um-row-heading,.um-row").remove(),jQuery(".um-profile-note").show()),jQuery(document).on("click",".um-profile-save",function(e){return e.preventDefault(),jQuery(this).parents(".um").find("form").submit(),!1}),jQuery(document).on("click",".um-profile-edit-a",function(e){jQuery(this).addClass("active")}),jQuery(document).on("click",".um-cover a.um-cover-add, .um-photo a",function(e){return e.preventDefault(),!1}),jQuery(document).on("click",".um-photo-modal",function(e){e.preventDefault();var t=jQuery(this).attr("data-src");return um_new_modal("um_view_photo","fit",!0,t),!1}),jQuery(document).on("click",".um-reset-profile-photo",function(e){jQuery(".um-profile-photo-img img").attr("src",jQuery(this).attr("data-default_src")),user_id=jQuery(this).attr("data-user_id"),metakey="profile_photo",jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_profile_photo",metakey:metakey,user_id:user_id,nonce:um_scripts.nonce}})}),jQuery(document).on("click",".um-reset-cover-photo",function(e){var t=jQuery(this);jQuery(".um-cover-overlay").hide(),jQuery(".um-cover-e").html(''),jQuery(".um-dropdown").hide(),um_responsive(),user_id=jQuery(this).attr("data-user_id"),metakey="cover_photo",jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_cover_photo",metakey:metakey,user_id:user_id,nonce:um_scripts.nonce},success:function(e){t.hide()}})}),e(),jQuery("textarea[id=um-meta-bio]").change(e),jQuery("textarea[id=um-meta-bio]").keyup(e),jQuery(".um-profile-edit a.um_delete-item").click(function(e){if(e.preventDefault(),!confirm("Are you sure that you want to delete this user?"))return!1})}); \ No newline at end of file diff --git a/assets/js/um-scripts.js b/assets/js/um-scripts.js index 033ab158..d5173414 100644 --- a/assets/js/um-scripts.js +++ b/assets/js/um-scripts.js @@ -155,7 +155,8 @@ jQuery(document).ready(function() { type: 'post', data: { action: 'um_remove_file', - src: src + src: src, + nonce: um_scripts.nonce } }); @@ -175,7 +176,8 @@ jQuery(document).ready(function() { type: 'post', data: { action: 'um_remove_file', - src: src + src: src, + nonce: um_scripts.nonce } }); @@ -269,7 +271,8 @@ jQuery(document).ready(function() { data: { action: 'um_ajax_paginate_posts', author: jQuery(this).data('author'), - page: next_page + page: next_page, + nonce: um_scripts.nonce }, complete: function() { parent.removeClass( 'loading' ); @@ -293,7 +296,8 @@ jQuery(document).ready(function() { data: { action: 'um_ajax_paginate', hook: hook, - args: args + args: args, + nonce: um_scripts.nonce }, complete: function() { parent.removeClass( 'loading' ); @@ -324,7 +328,8 @@ jQuery(document).ready(function() { action: 'um_muted_action', hook: hook, user_id: user_id, - arguments: arguments + arguments: arguments, + nonce: um_scripts.nonce }, success: function(data){ @@ -379,7 +384,8 @@ jQuery(document).ready(function() { child_callback: um_ajax_source, child_name: me.attr('name'), members_directory: me.attr('data-mebers-directory'), - form_id: form_id + form_id: form_id, + nonce: um_scripts.nonce }, success: function( data ){ if( data.status == 'success' && parent.val() != '' ){ diff --git a/assets/js/um-scripts.min.js b/assets/js/um-scripts.min.js index b72941b1..dce1d28c 100644 --- a/assets/js/um-scripts.min.js +++ b/assets/js/um-scripts.min.js @@ -1 +1 @@ -jQuery(document).ready(function(){jQuery(document).on("click",".um-dropdown a",function(e){return!1}),jQuery(document).on("click",".um-dropdown a.real_url",function(e){window.location=jQuery(this).attr("href")}),jQuery(document).on("click",".um-trigger-menu-on-click",function(e){return jQuery(".um-dropdown").hide(),menu=jQuery(this).find(".um-dropdown"),menu.show(),!1}),jQuery(document).on("click",".um-dropdown-hide",function(e){UM_hide_menus()}),jQuery(document).on("click","a.um-manual-trigger",function(){var e=jQuery(this).attr("data-child"),t=jQuery(this).attr("data-parent");jQuery(this).parents(t).find(e).trigger("click")}),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).on("change",".um-field-area input[type=radio]",function(){var e=jQuery(this).parents(".um-field-area"),t=jQuery(this).parents("label");e.find(".um-field-radio").removeClass("active"),e.find(".um-field-radio").find("i").removeAttr("class").addClass("um-icon-android-radio-button-off"),t.addClass("active"),t.find("i").removeAttr("class").addClass("um-icon-android-radio-button-on")}),jQuery(document).on("change",".um-field-area input[type=checkbox]",function(){jQuery(this).parents(".um-field-area");var e=jQuery(this).parents("label");e.hasClass("active")?(e.removeClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline-blank")):(e.addClass("active"),e.find("i").removeAttr("class").addClass("um-icon-android-checkbox-outline"))}),jQuery(".um-datepicker").each(function(){if(elem=jQuery(this),""!=elem.attr("data-disabled_weekdays"))var e=JSON.parse(elem.attr("data-disabled_weekdays"));else e=!1;var t=elem.attr("data-years"),a=elem.attr("data-date_min"),i=elem.attr("data-date_max"),r=a.split(","),n=i.split(","),u=r.length?new Date(r):null,o=r.length?new Date(n):null;if(u&&"Invalid Date"==u.toString()&&3==r.length){var d=r[1]+"/"+r[2]+"/"+r[0];u=new Date(Date.parse(d))}if(o&&"Invalid Date"==o.toString()&&3==n.length){var s=n[1]+"/"+n[2]+"/"+n[0];o=new Date(Date.parse(s))}elem.pickadate({selectYears:t,min:u,max:o,disable:e,format:elem.attr("data-format"),formatSubmit:"yyyy/mm/dd",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}})}),jQuery(".um-timepicker").each(function(){elem=jQuery(this),elem.pickatime({format:elem.attr("data-format"),interval:parseInt(elem.attr("data-intervals")),formatSubmit:"HH:i",hiddenName:!0,onOpen:function(){elem.blur()},onClose:function(){elem.blur()}})}),jQuery(".um-rating").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,click:function(e,t){live_field=this.id,live_value=e,um_apply_conditions(jQuery(this),!1)}}),jQuery(".um-rating-readonly").um_raty({half:!1,starType:"i",number:function(){return jQuery(this).attr("data-number")},score:function(){return jQuery(this).attr("data-score")},scoreName:function(){return jQuery(this).attr("data-key")},hints:!1,readOnly:!0}),jQuery(document).on("click",".um .um-single-image-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-image-preview img").attr("src");return t.find(".um-single-image-preview img").attr("src",""),t.find(".um-single-image-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a}}),!1}),jQuery(document).on("click",".um .um-single-file-preview a.cancel",function(e){e.preventDefault();var t=jQuery(this).parents(".um-field"),a=jQuery(this).parents(".um-field").find(".um-single-fileinfo a").attr("href");return t.find(".um-single-file-preview").hide(),t.find(".um-btn-auto-width").html("Upload"),t.find("input[type=hidden]").val("empty_file"),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_remove_file",src:a}}),!1}),jQuery(".um-s1,.um-s2").css({display:"block"}),jQuery(".um-s1").select2({allowClear:!0}),jQuery(".um-s2").select2({allowClear:!1,minimumResultsForSearch:10}),jQuery(document).on("click",".um-field-group-head:not(.disabled)",function(){var e=jQuery(this).parents(".um-field-group"),t=e.data("max_entries");e.find(".um-field-group-body").is(":hidden")?e.find(".um-field-group-body").show():e.find(".um-field-group-body:first").clone().appendTo(e),increase_id=0,e.find(".um-field-group-body").each(function(){increase_id++,jQuery(this).find("input").each(function(){var e=jQuery(this);e.attr("id",e.data("key")+"-"+increase_id),e.attr("name",e.data("key")+"-"+increase_id),e.parent().parent().find("label").attr("for",e.data("key")+"-"+increase_id)})}),0available_languages[$locale] ) ) return; - - $path = UM()->files()->upload_basedir; - $path = str_replace('/uploads/ultimatemember','',$path); - $path = $path . '/languages/plugins/'; - $path = str_replace('//','/',$path); - - $remote = 'https://ultimatemember.com/wp-content/languages/plugins/ultimatemember-' . $locale . '.po'; - $remote2 = 'https://ultimatemember.com/wp-content/languages/plugins/ultimatemember-' . $locale . '.mo'; - - $remote_tmp = download_url( $remote, $timeout = 300 ); - copy( $remote_tmp, $path . 'ultimatemember-' . $locale . '.po' ); - unlink( $remote_tmp ); - - $remote2_tmp = download_url( $remote2, $timeout = 300 ); - copy( $remote2_tmp, $path . 'ultimatemember-' . $locale . '.mo' ); - unlink( $remote2_tmp ); - - $url = remove_query_arg('um_adm_action', UM()->permalinks()->get_current_url() ); - $url = add_query_arg('update','language_updated',$url); - exit( wp_redirect($url) ); - - } - - /** * Action to hide notices in admin * diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php index 7f280250..cb858ddd 100644 --- a/includes/admin/core/class-admin-builder.php +++ b/includes/admin/core/class-admin-builder.php @@ -305,9 +305,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { * Update the builder area */ function update_builder() { + UM()->admin()->check_ajax_nonce(); if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { - die( 'Please login as administrator' ); + wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) ); } extract( $_POST ); @@ -618,8 +619,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { * */ function update_field() { - if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) - die( __('Please login as administrator','ultimate-member') ); + UM()->admin()->check_ajax_nonce(); + + if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { + wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) ); + } $output['error'] = null; @@ -770,12 +774,14 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { * */ function dynamic_modal_content() { - $metabox = UM()->metabox(); + UM()->admin()->check_ajax_nonce(); if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { - die( __( 'Please login as administrator', 'ultimate-member' ) ); + wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) ); } + $metabox = UM()->metabox(); + /** * @var $act_id * @var $arg1 @@ -1144,12 +1150,14 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { * Retrieves dropdown/multi-select options from a callback function */ function populate_dropdown_options() { - $arr_options = array(); + UM()->admin()->check_ajax_nonce(); - if ( ! current_user_can('manage_options') ) { - wp_die( __( 'This is not possible for security reasons.', 'ultimate-member' ) ); + if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { + wp_send_json_error( __( 'This is not possible for security reasons.', 'ultimate-member' ) ); } + $arr_options = array(); + $um_callback_func = $_POST['um_option_callback']; if ( empty( $um_callback_func ) ) { $arr_options['status'] = 'empty'; @@ -1158,7 +1166,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { } $arr_options['data'] = array(); - if ( function_exists( $um_callback_func ) ) { $arr_options['data'] = call_user_func( $um_callback_func ); } diff --git a/includes/admin/core/class-admin-dragdrop.php b/includes/admin/core/class-admin-dragdrop.php index 8c37b64a..56b2dbd5 100644 --- a/includes/admin/core/class-admin-dragdrop.php +++ b/includes/admin/core/class-admin-dragdrop.php @@ -26,9 +26,11 @@ if ( ! class_exists( 'um\admin\core\Admin_DragDrop' ) ) { * Update order of fields */ function update_order() { + UM()->admin()->check_ajax_nonce(); - if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) - die( 'Please login as administrator' ); + if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { + wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) ); + } /** * @var $form_id @@ -43,8 +45,8 @@ if ( ! class_exists( 'um\admin\core\Admin_DragDrop' ) ) { if ( ! empty( $fields ) ) { foreach ( $fields as $key => $array ) { if ( $array['type'] == 'row' ) { - $this->row_data[$key] = $array; - unset( $fields[$key] ); + $this->row_data[ $key ] = $array; + unset( $fields[ $key ] ); } } } else { @@ -217,6 +219,7 @@ if ( ! class_exists( 'um\admin\core\Admin_DragDrop' ) ) { +
diff --git a/includes/admin/core/class-admin-enqueue.php b/includes/admin/core/class-admin-enqueue.php index 46ca9f81..bf934363 100644 --- a/includes/admin/core/class-admin-enqueue.php +++ b/includes/admin/core/class-admin-enqueue.php @@ -332,9 +332,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { * } * ?> */ - $localize_data = apply_filters('um_admin_enqueue_localize_data', array( - 'ajaxurl' => admin_url( 'admin-ajax.php' ), - 'nonce' => wp_create_nonce( "um-admin-nonce" ) + $localize_data = apply_filters( 'um_admin_enqueue_localize_data', array( + 'nonce' => wp_create_nonce( "um-admin-nonce" ) ) ); diff --git a/includes/admin/core/class-admin-menu.php b/includes/admin/core/class-admin-menu.php index 26bafe60..88abb645 100644 --- a/includes/admin/core/class-admin-menu.php +++ b/includes/admin/core/class-admin-menu.php @@ -76,7 +76,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) { url: wp.ajax.settings.url, type: 'post', data: { - action: 'um_rated' + action: 'um_rated', + nonce: um_admin_scripts.nonce }, success: function(){ @@ -98,8 +99,14 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) { * When user clicks the review link in backend */ function ultimatemember_rated() { + UM()->admin()->check_ajax_nonce(); + + if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { + wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) ); + } + update_option( 'um_admin_footer_text_rated', 1 ); - die(); + wp_send_json_success(); } @@ -109,8 +116,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) { public function menu_order_count() { global $menu, $submenu; - if ( ! current_user_can( 'list_users' ) ) + if ( ! current_user_can( 'list_users' ) ) { return; + } $count = UM()->user()->get_pending_users_count(); if ( is_array( $menu ) ) { @@ -215,14 +223,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) { add_meta_box( 'um-metaboxes-sidebox-2', __( 'User Cache', 'ultimate-member' ), array( &$this, 'user_cache' ), $this->pagehook, 'side', 'core' ); - if ( $this->language_avaialable_not_installed() ) { - add_meta_box( 'um-metaboxes-sidebox-2', __( 'Language', 'ultimate-member' ), array( &$this, 'dl_language' ), $this->pagehook, 'side', 'core' ); - } else if ( $this->language_avaialable_installed() ) { - add_meta_box( 'um-metaboxes-sidebox-2', __( 'Language', 'ultimate-member' ), array( &$this, 'up_language' ), $this->pagehook, 'side', 'core' ); - } else if ( $this->language_not_available() ) { - add_meta_box( 'um-metaboxes-sidebox-2', __( 'Language', 'ultimate-member' ), array( &$this, 'ct_language' ), $this->pagehook, 'side', 'core' ); - } - //If there are active and licensed extensions - show metabox for upgrade it $exts = UM()->plugin_updater()->um_get_active_plugins(); if ( 0 < count( $exts ) ) { @@ -231,33 +231,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) { } - /** - * - */ - function up_language() { - $locale = get_option('WPLANG'); - include_once UM()->admin()->templates_path . 'dashboard/language-update.php'; - } - - - /** - * - */ - function dl_language() { - $locale = get_option('WPLANG'); - include_once UM()->admin()->templates_path . 'dashboard/language-download.php'; - } - - - /** - * - */ - function ct_language() { - $locale = get_option('WPLANG'); - include_once UM()->admin()->templates_path . 'dashboard/language-contrib.php'; - } - - /** * */ @@ -298,45 +271,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Menu' ) ) { } - /** - * Language not available - * - * @return bool - */ - function language_not_available() { - $locale = get_option( 'WPLANG' ); - if ( $locale && !strstr($locale, 'en_') && !isset( UM()->available_languages[$locale] ) && !file_exists( WP_LANG_DIR . '/plugins/ultimatemember-' . $locale . '.mo' ) ) - return true; - return false; - } - - - /** - * Language available but not installed - * - * @return bool - */ - function language_avaialable_not_installed() { - $locale = get_option('WPLANG'); - if ( $locale && isset( UM()->available_languages[$locale] ) && !file_exists( WP_LANG_DIR . '/plugins/ultimatemember-' . $locale . '.mo' ) ) - return true; - return false; - } - - - /** - * Language available and installed - * - * @return bool - */ - function language_avaialable_installed() { - $locale = get_option('WPLANG'); - if ( $locale && isset( UM()->available_languages[$locale] ) && file_exists( WP_LANG_DIR . '/plugins/ultimatemember-' . $locale . '.mo' ) ) - return true; - return false; - } - - /** * Get a directory size * diff --git a/includes/admin/core/class-admin-notices.php b/includes/admin/core/class-admin-notices.php index 05a032b6..50aede4a 100644 --- a/includes/admin/core/class-admin-notices.php +++ b/includes/admin/core/class-admin-notices.php @@ -38,7 +38,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { $this->old_extensions_notice(); $this->install_core_page_notice(); $this->exif_extension_notice(); - $this->localize_note(); $this->show_update_messages(); $this->check_wrong_install_folder(); $this->admin_notice_opt_in(); @@ -358,45 +357,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { } - /** - * Localization notice - */ - function localize_note() { - $locale = get_option( 'WPLANG' ); - if ( ! $locale || strstr( $locale, 'en_' ) ) { - return; - } - - if ( file_exists( WP_LANG_DIR . '/plugins/ultimatemember-' . $locale . '.mo' ) ) { - return; - } - - $hide_locale_notice = get_option( 'um_hide_locale_notice' ); - if ( $hide_locale_notice ) { - return; - } - - if ( isset( UM()->available_languages[ $locale ] ) ) { - - $download_uri = add_query_arg( 'um_adm_action', 'um_language_downloader' ); - - $this->add_notice( 'locale', array( - 'class' => 'updated', - 'message' => '

' . sprintf( __( 'Your site language is %1$s. Good news! Ultimate Member is already available in %2$s language. Download the translation files and start using the plugin in your language now. Hide this notice','ultimate-member'), $locale, UM()->available_languages[ $locale ], $download_uri, add_query_arg( 'um_adm_action', 'um_hide_locale_notice' ) ) . '

', - ), 40 ); - - } else { - - $this->add_notice( 'locale', array( - 'class' => 'updated', - 'message' => '

' . sprintf( __( 'Ultimate Member has not yet been translated to your language: %1$s. If you have translated the plugin you need put these files ultimatemember-%1$s.po and ultimatemember-%1$s.mo in /wp-content/languages/plugins/ for the plugin to be translated in your language. Hide this notice', 'ultimate-member' ), $locale, add_query_arg( 'um_adm_action', 'um_hide_locale_notice' ) ) . '

', - ), 40 ); - - } - - } - - /** * Updating users */ @@ -706,11 +666,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) { function dismiss_notice() { - $nonce = isset( $_POST["nonce"] ) ? $_POST["nonce"] : ""; - if ( ! wp_verify_nonce( $nonce, "um-admin-nonce" ) ) { - wp_send_json_error( esc_js( __( "Wrong Nonce", 'ultimate-member' ) ) ); - } - + UM()->admin()->check_ajax_nonce(); if ( empty( $_POST['key'] ) ) { wp_send_json_error( __( 'Wrong Data', 'ultimate-member' ) ); diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index af0435f9..3e9a43a5 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -1061,19 +1061,25 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { */ function sorting_licenses_options( $settings ) { //sorting licenses - if ( empty( $settings['licenses']['fields'] ) ) + if ( empty( $settings['licenses']['fields'] ) ) { return $settings; + } + $licenses = $settings['licenses']['fields']; - @uasort( $licenses, create_function( '$a,$b', 'return strnatcasecmp($a["label"],$b["label"]);' ) ); + @uasort( $licenses, function( $a, $b ) { + return strnatcasecmp( $a["label"], $b["label"] ); + } ); $settings['licenses']['fields'] = $licenses; - //sorting extensions - if ( empty( $settings['extensions']['sections'] ) ) + if ( empty( $settings['extensions']['sections'] ) ) { return $settings; + } $extensions = $settings['extensions']['sections']; - @uasort( $extensions, create_function( '$a,$b', 'return strnatcasecmp($a["title"],$b["title"]);' ) ); + @uasort( $extensions, function( $a, $b ) { + return strnatcasecmp( $a["title"], $b["title"] ); + } ); $keys = array_keys( $extensions ); if ( $keys[0] != "" ) { @@ -1082,7 +1088,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { $extensions[$new_key] = $temp; $extensions[""] = $extensions[$keys[0]]; unset( $extensions[$keys[0]] ); - @uasort( $extensions, create_function( '$a,$b', 'return strnatcasecmp($a["title"],$b["title"]);' ) ); + @uasort( $extensions, function( $a, $b ) { + return strnatcasecmp( $a["title"], $b["title"] ); + } ); } $settings['extensions']['sections'] = $extensions; @@ -1099,13 +1107,14 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { */ function get_section_fields( $tab, $section ) { - if ( empty( $this->settings_structure[$tab] ) ) + if ( empty( $this->settings_structure[ $tab ] ) ) { return array(); + } - if ( ! empty( $this->settings_structure[$tab]['sections'][$section]['fields'] ) ) { - return $this->settings_structure[$tab]['sections'][$section]['fields']; - } elseif ( ! empty( $this->settings_structure[$tab]['fields'] ) ) { - return $this->settings_structure[$tab]['fields']; + if ( ! empty( $this->settings_structure[ $tab ]['sections'][ $section ]['fields'] ) ) { + return $this->settings_structure[ $tab ]['sections'][ $section ]['fields']; + } elseif ( ! empty( $this->settings_structure[ $tab ]['fields'] ) ) { + return $this->settings_structure[ $tab ]['fields']; } return array(); diff --git a/includes/admin/core/class-admin-upgrade.php b/includes/admin/core/class-admin-upgrade.php index 2179daf4..da806aa5 100644 --- a/includes/admin/core/class-admin-upgrade.php +++ b/includes/admin/core/class-admin-upgrade.php @@ -260,7 +260,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) { type: 'POST', dataType: 'json', data: { - action: 'um_get_packages' + action: 'um_get_packages', + nonce: um_admin_scripts.nonce }, success: function( response ) { um_packages = response.data.packages; @@ -290,7 +291,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) { dataType: 'html', data: { action: 'um_run_package', - pack: pack + pack: pack, + nonce: um_admin_scripts.nonce }, success: function( html ) { um_add_upgrade_log( 'Package "' + pack + '" is ready. Start the execution...' ); @@ -334,6 +336,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) { function ajax_run_package() { + UM()->admin()->check_ajax_nonce(); + if ( empty( $_POST['pack'] ) ) { exit(''); } else { @@ -346,40 +350,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) { function ajax_get_packages() { + UM()->admin()->check_ajax_nonce(); + $update_versions = $this->need_run_upgrades(); wp_send_json_success( array( 'packages' => $update_versions ) ); } - /** - * Load packages - */ - /*public function packages() { - if ( ! ini_get( 'safe_mode' ) ) { - @set_time_limit(0); - } - - $this->set_update_versions(); - - $um_last_version_upgrade = get_option( 'um_last_version_upgrade' ); - $um_last_version_upgrade = ! $um_last_version_upgrade ? '0.0.0' : $um_last_version_upgrade; - - foreach ( $this->update_versions as $update_version ) { - - if ( version_compare( $update_version, $um_last_version_upgrade, '<=' ) ) - continue; - - if ( version_compare( $update_version, ultimatemember_version, '>' ) ) - continue; - - $file_path = $this->packages_dir . $update_version . '.php'; - - if ( file_exists( $file_path ) ) { - include_once( $file_path ); - update_option( 'um_last_version_upgrade', $update_version ); - } - } - }*/ - /** * Parse packages dir for packages files diff --git a/includes/admin/core/packages/1.3.39/functions.php b/includes/admin/core/packages/1.3.39/functions.php index 9a0ba7d1..a9f2c5da 100644 --- a/includes/admin/core/packages/1.3.39/functions.php +++ b/includes/admin/core/packages/1.3.39/functions.php @@ -1,5 +1,7 @@ admin()->check_ajax_nonce(); + include 'usermeta_query.php'; update_option( 'um_last_version_upgrade', '1.3.39' ); diff --git a/includes/admin/core/packages/1.3.39/init.php b/includes/admin/core/packages/1.3.39/init.php index 3781024d..ec96f373 100644 --- a/includes/admin/core/packages/1.3.39/init.php +++ b/includes/admin/core/packages/1.3.39/init.php @@ -5,11 +5,12 @@ um_add_upgrade_log( 'Upgrade Usermeta...' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_usermetaquery1339' + action: 'um_usermetaquery1339', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { diff --git a/includes/admin/core/packages/2.0-beta1/functions.php b/includes/admin/core/packages/2.0-beta1/functions.php index 52adba1f..e177d80c 100644 --- a/includes/admin/core/packages/2.0-beta1/functions.php +++ b/includes/admin/core/packages/2.0-beta1/functions.php @@ -1,5 +1,7 @@ admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'styles.php'; @@ -8,6 +10,8 @@ function um_upgrade_styles20beta1() { function um_upgrade_user_roles20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); /** * @var $response_roles_data @@ -19,7 +23,10 @@ function um_upgrade_user_roles20beta1() { function um_upgrade_get_users_per_role20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); + if ( ! empty( $_POST['key_in_meta'] ) ) { $args = array( 'meta_query' => array( @@ -43,6 +50,8 @@ function um_upgrade_get_users_per_role20beta1() { function um_upgrade_update_users_per_page20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); if ( ! empty( $_POST['key_in_meta'] ) && ! empty( $_POST['role_key'] ) && ! empty( $_POST['page'] ) ) { $users_per_page = 100; @@ -85,6 +94,8 @@ function um_upgrade_update_users_per_page20beta1() { function um_upgrade_content_restriction20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'content_restriction.php'; @@ -94,6 +105,8 @@ function um_upgrade_content_restriction20beta1() { function um_upgrade_settings20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'settings.php'; @@ -102,6 +115,8 @@ function um_upgrade_settings20beta1() { function um_upgrade_menus20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'menus.php'; @@ -110,6 +125,8 @@ function um_upgrade_menus20beta1() { function um_upgrade_mc_lists20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'mc_lists.php'; @@ -118,6 +135,8 @@ function um_upgrade_mc_lists20beta1() { function um_upgrade_social_login20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'social_login.php'; @@ -126,6 +145,8 @@ function um_upgrade_social_login20beta1() { function um_upgrade_cpt20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'um_cpt.php'; @@ -134,6 +155,8 @@ function um_upgrade_cpt20beta1() { function um_upgrade_get_forums20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); remove_all_actions( 'pre_get_posts' ); @@ -149,6 +172,8 @@ function um_upgrade_get_forums20beta1() { function um_upgrade_update_forum_per_page20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); if ( ! empty( $_POST['page'] ) ) { @@ -205,6 +230,8 @@ function um_upgrade_update_forum_per_page20beta1() { function um_upgrade_get_products20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); $wc_products = get_posts( array( @@ -218,6 +245,8 @@ function um_upgrade_get_products20beta1() { function um_upgrade_update_products_per_page20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); if ( ! empty( $_POST['page'] ) ) { @@ -296,6 +325,8 @@ function um_upgrade_update_products_per_page20beta1() { function um_upgrade_email_templates20beta1() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'email_templates.php'; diff --git a/includes/admin/core/packages/2.0-beta1/init.php b/includes/admin/core/packages/2.0-beta1/init.php index 08587a21..1e4799fd 100644 --- a/includes/admin/core/packages/2.0-beta1/init.php +++ b/includes/admin/core/packages/2.0-beta1/init.php @@ -13,11 +13,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_styles20beta1' + action: 'um_styles20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -36,11 +37,12 @@ function upgrade_roles() { um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_user_roles20beta1' + action: 'um_user_roles20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -70,12 +72,13 @@ var role = um_roles_data.shift(); um_add_upgrade_log( '"' + role.role_key + '"' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { action: 'um_get_users_per_role20beta1', - key_in_meta: role.key_in_meta + key_in_meta: role.key_in_meta, + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data.count != 'undefined' ) { @@ -103,14 +106,15 @@ function update_user_per_page( role_key, key_in_meta ) { if ( current_page <= users_pages ) { jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { action: 'um_update_users_per_page20beta1', role_key: role_key, key_in_meta: key_in_meta, - page: current_page + page: current_page, + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -135,11 +139,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_content_restriction20beta1' + action: 'um_content_restriction20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -160,11 +165,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_settings20beta1' + action: 'um_settings20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -185,11 +191,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_menus20beta1' + action: 'um_menus20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -210,11 +217,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_mc_lists20beta1' + action: 'um_mc_lists20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -235,11 +243,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_social_login20beta1' + action: 'um_social_login20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -260,11 +269,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_cpt20beta1' + action: 'um_cpt20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -286,11 +296,12 @@ um_add_upgrade_log( '' ); current_page = 1; jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_get_forums20beta1' + action: 'um_get_forums20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -313,12 +324,13 @@ function update_forums_per_page() { if ( current_page <= forums_pages ) { jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { action: 'um_update_forum_per_page20beta1', - page: current_page + page: current_page, + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -346,11 +358,12 @@ current_page = 1; jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_get_products20beta1' + action: 'um_get_products20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -373,12 +386,13 @@ function update_products_per_page() { if ( current_page <= products_pages ) { jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { action: 'um_update_products_per_page20beta1', - page: current_page + page: current_page, + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -402,11 +416,12 @@ function upgrade_email_templates() { um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_email_templates20beta1' + action: 'um_email_templates20beta1', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { diff --git a/includes/admin/core/packages/2.0.10/functions.php b/includes/admin/core/packages/2.0.10/functions.php index be32d0b3..0a12b32d 100644 --- a/includes/admin/core/packages/2.0.10/functions.php +++ b/includes/admin/core/packages/2.0.10/functions.php @@ -1,5 +1,7 @@ admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); include 'styles.php'; @@ -8,6 +10,8 @@ function um_upgrade_styles2010() { function um_upgrade_cache2010() { + UM()->admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); UM()->user()->remove_cache_all_users(); diff --git a/includes/admin/core/packages/2.0.10/init.php b/includes/admin/core/packages/2.0.10/init.php index c5b4d295..7ba29977 100644 --- a/includes/admin/core/packages/2.0.10/init.php +++ b/includes/admin/core/packages/2.0.10/init.php @@ -6,11 +6,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_styles2010' + action: 'um_styles2010', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { @@ -30,11 +31,12 @@ function um_clear_cache2010() { um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_cache2010' + action: 'um_cache2010', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { diff --git a/includes/admin/core/packages/2.0.24/functions.php b/includes/admin/core/packages/2.0.24/functions.php index b379280a..ada9df2e 100644 --- a/includes/admin/core/packages/2.0.24/functions.php +++ b/includes/admin/core/packages/2.0.24/functions.php @@ -1,5 +1,7 @@ admin()->check_ajax_nonce(); + um_maybe_unset_time_limit(); UM()->files()->remove_dir( UM()->files()->upload_temp ); diff --git a/includes/admin/core/packages/2.0.24/init.php b/includes/admin/core/packages/2.0.24/init.php index 8d97f6be..e40b5c6d 100644 --- a/includes/admin/core/packages/2.0.24/init.php +++ b/includes/admin/core/packages/2.0.24/init.php @@ -6,11 +6,12 @@ um_add_upgrade_log( '' ); jQuery.ajax({ - url: '', + url: wp.ajax.settings.url, type: 'POST', dataType: 'json', data: { - action: 'um_tempfolder2024' + action: 'um_tempfolder2024', + nonce: um_admin_scripts.nonce }, success: function( response ) { if ( typeof response.data != 'undefined' ) { diff --git a/includes/admin/templates/dashboard/language-contrib.php b/includes/admin/templates/dashboard/language-contrib.php deleted file mode 100644 index 6909e03b..00000000 --- a/includes/admin/templates/dashboard/language-contrib.php +++ /dev/null @@ -1,7 +0,0 @@ -

- %1$s.', 'ultimate-member' ), $locale ); ?> -

- -

- community forum.', 'ultimate-member' ); ?> -

\ No newline at end of file diff --git a/includes/admin/templates/dashboard/language-download.php b/includes/admin/templates/dashboard/language-download.php deleted file mode 100644 index ab5f06d7..00000000 --- a/includes/admin/templates/dashboard/language-download.php +++ /dev/null @@ -1,9 +0,0 @@ -

- %1$s (%2$s).', 'ultimate-member' ), UM()->available_languages[ $locale ], $locale ); ?> -

- -

- - - -

\ No newline at end of file diff --git a/includes/admin/templates/dashboard/language-update.php b/includes/admin/templates/dashboard/language-update.php deleted file mode 100644 index 4287e3b7..00000000 --- a/includes/admin/templates/dashboard/language-update.php +++ /dev/null @@ -1,9 +0,0 @@ -

- %1$s (%2$s).', 'ultimate-member' ), UM()->available_languages[ $locale ], $locale ); ?> -

- -

- - - -

\ No newline at end of file diff --git a/includes/admin/templates/extensions.php b/includes/admin/templates/extensions.php index c3755722..e475db72 100644 --- a/includes/admin/templates/extensions.php +++ b/includes/admin/templates/extensions.php @@ -162,11 +162,11 @@ $free['terms-conditions'] = array(
- Core Extensions Bundle – Check out our extensions bundle which includes all extensions at a significant discount. + All Access Pass – Get access to all Ultimate Member extensions at a significant discount with our All Access Pass.', 'ultimate-member' ) ?>
diff --git a/includes/admin/templates/modal/dynamic_edit_field.php b/includes/admin/templates/modal/dynamic_edit_field.php index daf838b4..779f994d 100644 --- a/includes/admin/templates/modal/dynamic_edit_field.php +++ b/includes/admin/templates/modal/dynamic_edit_field.php @@ -11,6 +11,7 @@
+
diff --git a/includes/admin/templates/modal/dynamic_edit_row.php b/includes/admin/templates/modal/dynamic_edit_row.php index 806c26ac..c00b530a 100644 --- a/includes/admin/templates/modal/dynamic_edit_row.php +++ b/includes/admin/templates/modal/dynamic_edit_row.php @@ -11,6 +11,7 @@
+
diff --git a/includes/admin/templates/modal/dynamic_new_divider.php b/includes/admin/templates/modal/dynamic_new_divider.php index f9c9b10a..18484216 100644 --- a/includes/admin/templates/modal/dynamic_new_divider.php +++ b/includes/admin/templates/modal/dynamic_new_divider.php @@ -11,6 +11,7 @@
+
diff --git a/includes/admin/templates/modal/dynamic_new_field.php b/includes/admin/templates/modal/dynamic_new_field.php index 9b3f64c6..9d4c587c 100644 --- a/includes/admin/templates/modal/dynamic_new_field.php +++ b/includes/admin/templates/modal/dynamic_new_field.php @@ -11,6 +11,7 @@
+
diff --git a/includes/admin/templates/modal/dynamic_new_group.php b/includes/admin/templates/modal/dynamic_new_group.php index 2f061007..d9a3cddd 100644 --- a/includes/admin/templates/modal/dynamic_new_group.php +++ b/includes/admin/templates/modal/dynamic_new_group.php @@ -11,6 +11,7 @@
+
diff --git a/includes/class-functions.php b/includes/class-functions.php index b40141cc..f2969d30 100644 --- a/includes/class-functions.php +++ b/includes/class-functions.php @@ -16,6 +16,21 @@ if ( ! class_exists( 'UM_Functions' ) ) { } + /** + * Check frontend nonce + * + * @param bool $action + */ + function check_ajax_nonce( $action = false ) { + $nonce = isset( $_POST['nonce'] ) ? $_POST['nonce'] : ''; + $action = empty( $action ) ? 'um-frontend-nonce' : $action; + + if ( ! wp_verify_nonce( $nonce, $action ) ) { + wp_send_json_error( esc_js( __( 'Wrong Nonce', 'ultimate-member' ) ) ); + } + } + + /** * What type of request is this? * diff --git a/includes/class-init.php b/includes/class-init.php index a21fd1e0..9af4fbca 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -65,14 +65,6 @@ if ( ! class_exists( 'UM' ) ) { public $is_permalinks; - /** - * UM Available Languages - * - * @var array - */ - var $available_languages; - - /** * Main UM Instance * @@ -198,31 +190,6 @@ if ( ! class_exists( 'UM' ) ) { $this->is_filtering = 0; $this->honeypot = 'request'; - $this->available_languages = array( - 'en_US' => 'English (US)', - 'es_ES' => 'Español', - 'es_MX' => 'Español (México)', - 'fr_FR' => 'Français', - 'it_IT' => 'Italiano', - 'de_DE' => 'Deutsch', - 'nl_NL' => 'Nederlands', - 'pt_BR' => 'Português do Brasil', - 'fi_FI' => 'Suomi', - 'ro_RO' => 'Română', - 'da_DK' => 'Dansk', - 'sv_SE' => 'Svenska', - 'pl_PL' => 'Polski', - 'cs_CZ' => 'Czech', - 'el' => 'Greek', - 'id_ID' => 'Indonesian', - 'zh_CN' => '简体中文', - 'ru_RU' => 'Русский', - 'tr_TR' => 'Türkçe', - 'fa_IR' => 'Farsi', - 'he_IL' => 'Hebrew', - 'ar' => 'العربية', - ); - // textdomain loading $this->localize(); diff --git a/includes/core/class-enqueue.php b/includes/core/class-enqueue.php index 1ef61d0b..d8fadb14 100644 --- a/includes/core/class-enqueue.php +++ b/includes/core/class-enqueue.php @@ -88,17 +88,15 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { wp_register_script( 'um_fileupload', $this->js_baseurl . 'um-fileupload' . $this->suffix . '.js', array( 'jquery', 'um_jquery_form' ), ultimatemember_version, true ); - $datetime_deps = array( 'jquery' ); - // load a localized version for date/time - $locale = get_locale(); - if ( $locale && file_exists( um_path . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { - wp_register_script('um_datetime_locale', um_url . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery' ), ultimatemember_version, true ); - $datetime_deps[] = 'um_datetime_locale'; - } - wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', $datetime_deps, ultimatemember_version, true ); + wp_register_script( 'um_datetime', $this->js_baseurl . 'pickadate/picker.js', array( 'jquery' ), ultimatemember_version, true ); wp_register_script( 'um_datetime_date', $this->js_baseurl . 'pickadate/picker.date.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); wp_register_script( 'um_datetime_time', $this->js_baseurl . 'pickadate/picker.time.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); wp_register_script( 'um_datetime_legacy', $this->js_baseurl . 'pickadate/legacy.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + // load a localized version for date/time + $locale = get_locale(); + if ( $locale && file_exists( um_path . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_register_script('um_datetime_locale', um_url . 'assets/js/pickadate/translations/' . $locale . '.js', array( 'jquery', 'um_datetime' ), ultimatemember_version, true ); + } wp_register_script( 'um_tipsy', $this->js_baseurl . 'um-tipsy' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); wp_register_script( 'um_raty', $this->js_baseurl . 'um-raty' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); @@ -110,7 +108,7 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { wp_register_script('um_functions', $this->js_baseurl . 'um-functions' . $this->suffix . '.js', array( 'jquery', 'jquery-masonry', 'wp-util', 'um_scrollbar' ), ultimatemember_version, true ); wp_register_script( 'um-gdpr', $this->js_baseurl . 'um-gdpr' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, false ); wp_register_script('um_conditional', $this->js_baseurl . 'um-conditional' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); - wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional' ), ultimatemember_version, true ); + wp_register_script('um_scripts', $this->js_baseurl . 'um-scripts' . $this->suffix . '.js', array( 'jquery', 'wp-util', 'um_conditional', 'um_datetime', 'um_datetime_date', 'um_datetime_time', 'um_datetime_legacy' ), ultimatemember_version, true ); /** * UM hook * @@ -131,7 +129,9 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { * } * ?> */ - $localize_data = apply_filters( 'um_enqueue_localize_data', array() ); + $localize_data = apply_filters( 'um_enqueue_localize_data', array( + 'nonce' => wp_create_nonce( "um-frontend-nonce" ), + ) ); wp_localize_script( 'um_scripts', 'um_scripts', $localize_data ); wp_register_script('um_members', $this->js_baseurl . 'um-members' . $this->suffix . '.js', array( 'jquery' ), ultimatemember_version, true ); @@ -327,6 +327,13 @@ if ( ! class_exists( 'um\core\Enqueue' ) ) { wp_enqueue_script('um_datetime_date'); wp_enqueue_script('um_datetime_time'); wp_enqueue_script('um_datetime_legacy'); + + // load a localized version for date/time + $locale = get_locale(); + if ( $locale && file_exists( um_path . 'assets/js/pickadate/translations/' . $locale . '.js' ) ) { + wp_enqueue_script('um_datetime_locale' ); + } + wp_enqueue_style('um_datetime'); wp_enqueue_style('um_datetime_date'); wp_enqueue_style('um_datetime_time'); diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index a87f19bf..3552f8ec 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -4096,21 +4096,25 @@ if ( ! class_exists( 'um\core\Fields' ) ) { * */ function do_ajax_action() { - if (!is_user_logged_in() || !current_user_can( 'manage_options' )) die( __( 'Please login as administrator', 'ultimate-member' ) ); + UM()->admin()->check_ajax_nonce(); + + if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) { + wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) ); + } extract( $_POST ); $output = null; $position = array(); - if (!empty( $in_column )) { + if ( ! empty( $in_column ) ) { $position['in_row'] = '_um_row_' . ( (int)$in_row + 1 ); $position['in_sub_row'] = $in_sub_row; $position['in_column'] = $in_column; $position['in_group'] = $in_group; } - switch ($act_id) { + switch ( $act_id ) { case 'um_admin_duplicate_field': $this->duplicate_field( $arg1, $arg2 ); diff --git a/includes/core/class-files.php b/includes/core/class-files.php index e5dd73c8..06974e16 100644 --- a/includes/core/class-files.php +++ b/includes/core/class-files.php @@ -81,11 +81,11 @@ if ( ! class_exists( 'um\core\Files' ) ) { $field_key = urlencode( $field_key ); if ( UM()->is_permalinks ) { - $url = get_site_url( get_current_blog_id() ); + $url = get_home_url( get_current_blog_id() ); $nonce = wp_create_nonce( $user_id . $form_id . 'um-download-nonce' ); $url = $url . "/um-download/{$form_id}/{$field_key}/{$user_id}/{$nonce}"; } else { - $url = get_site_url( get_current_blog_id() ); + $url = get_home_url( get_current_blog_id() ); $nonce = wp_create_nonce( $user_id . $form_id . 'um-download-nonce' ); $url = add_query_arg( array( 'um_action' => 'download', 'um_form' => $form_id, 'um_field' => $field_key, 'um_user' => $user_id, 'um_verify' => $nonce ), $url ); } @@ -241,7 +241,7 @@ if ( ! class_exists( 'um\core\Files' ) ) { * Remove file by AJAX */ function ajax_remove_file() { - UM()->check_frontend_ajax_nonce(); + UM()->check_ajax_nonce(); /** * @var $src @@ -257,7 +257,7 @@ if ( ! class_exists( 'um\core\Files' ) ) { * Resize image AJAX handler */ function ajax_resize_image() { - UM()->check_frontend_ajax_nonce(); + UM()->check_ajax_nonce(); /** * @var $key diff --git a/includes/core/class-form.php b/includes/core/class-form.php index ccebba66..59c5d8e7 100644 --- a/includes/core/class-form.php +++ b/includes/core/class-form.php @@ -50,6 +50,8 @@ if ( ! class_exists( 'um\core\Form' ) ) { * */ function ajax_muted_action() { + UM()->check_ajax_nonce(); + extract( $_REQUEST ); if ( ! UM()->roles()->um_current_user_can( 'edit', $user_id ) ) @@ -86,7 +88,7 @@ if ( ! class_exists( 'um\core\Form' ) ) { * */ function ajax_select_options() { - + UM()->check_ajax_nonce(); $arr_options = array(); $arr_options['status'] = 'success'; diff --git a/includes/core/class-profile.php b/includes/core/class-profile.php index 1b6d7e79..4ce8f126 100644 --- a/includes/core/class-profile.php +++ b/includes/core/class-profile.php @@ -45,6 +45,8 @@ if ( ! class_exists( 'um\core\Profile' ) ) { * Delete profile avatar AJAX handler */ function ajax_delete_profile_photo() { + UM()->check_ajax_nonce(); + /** * @var $user_id */ @@ -61,6 +63,8 @@ if ( ! class_exists( 'um\core\Profile' ) ) { * Delete cover photo AJAX handler */ function ajax_delete_cover_photo() { + UM()->check_ajax_nonce(); + /** * @var $user_id */ @@ -218,7 +222,7 @@ if ( ! class_exists( 'um\core\Profile' ) ) { */ function can_view_tab( $tab ) { - $target_id = UM()->user()->target_id; + $target_id = (int) UM()->user()->target_id; if ( empty( $target_id ) ) { return true; } diff --git a/includes/core/class-query.php b/includes/core/class-query.php index 1c4dbe64..dfd13ddb 100644 --- a/includes/core/class-query.php +++ b/includes/core/class-query.php @@ -39,6 +39,8 @@ if ( ! class_exists( 'um\core\Query' ) ) { * Ajax pagination for posts */ function ajax_paginate() { + UM()->check_ajax_nonce(); + /** * @var $hook * @var $args diff --git a/includes/core/class-user-posts.php b/includes/core/class-user-posts.php index 24ec6f76..76a75229 100644 --- a/includes/core/class-user-posts.php +++ b/includes/core/class-user-posts.php @@ -82,6 +82,8 @@ if ( ! class_exists( 'um\core\User_posts' ) ) { * */ function load_posts() { + UM()->check_ajax_nonce(); + $author = ! empty( $_POST['author'] ) ? $_POST['author'] : get_current_user_id(); $page = ! empty( $_POST['page'] ) ? $_POST['page'] : 0; diff --git a/includes/core/class-user.php b/includes/core/class-user.php index 30ab7290..24f709b1 100644 --- a/includes/core/class-user.php +++ b/includes/core/class-user.php @@ -87,8 +87,11 @@ if ( ! class_exists( 'um\core\User' ) ) { add_action( 'init', array( &$this, 'check_membership' ), 10 ); - add_action( 'delete_user', array( &$this, 'delete_user_handler' ), 10, 1 ); - add_action( 'wpmu_delete_user', array( &$this, 'delete_user_handler' ), 10, 1 ); + if ( is_multisite() ) { + add_action( 'delete_user', array( &$this, 'delete_user_handler' ), 10, 1 ); + } else { + add_action( 'wpmu_delete_user', array( &$this, 'delete_user_handler' ), 10, 1 ); + } } @@ -96,6 +99,8 @@ if ( ! class_exists( 'um\core\User' ) ) { * @param $user_id */ function delete_user_handler( $user_id ) { + error_log( '----------------' ); + error_log( $user_id ); um_fetch_user( $user_id ); diff --git a/includes/core/um-actions-ajax.php b/includes/core/um-actions-ajax.php index 7647e352..d8d82ba7 100644 --- a/includes/core/um-actions-ajax.php +++ b/includes/core/um-actions-ajax.php @@ -8,6 +8,8 @@ if ( ! defined( 'ABSPATH' ) ) exit; * @return boolean */ function ultimatemember_check_username_exists() { + UM()->check_ajax_nonce(); + $username = isset($_REQUEST['username']) ? $_REQUEST['username'] : ''; $exists = username_exists( $username ); diff --git a/includes/core/um-actions-misc.php b/includes/core/um-actions-misc.php index df9b737f..2def15d0 100644 --- a/includes/core/um-actions-misc.php +++ b/includes/core/um-actions-misc.php @@ -12,33 +12,30 @@ function um_browser_url_redirect_to( $args ) { $url = ''; if ( ! empty( $_REQUEST['redirect_to'] ) ) { + $url = $_REQUEST['redirect_to']; - echo ''; } elseif ( ! empty( $args['after_login'] ) ) { - + switch ( $args['after_login'] ) { - + case 'redirect_admin': $url = admin_url(); break; - + case 'redirect_profile': $url = um_user_profile_url(); break; - + case 'redirect_url': $url = $args['redirect_url']; break; - + case 'refresh': - $url = UM()->permalinks()->get_current_url(); - break; - + } - } /** @@ -66,7 +63,6 @@ function um_browser_url_redirect_to( $args ) { if ( ! empty( $url ) ) { echo ''; } - } add_action( 'um_after_form_fields', 'um_browser_url_redirect_to' ); diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php index 1a0042b0..500f28af 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -888,9 +888,7 @@ function um_profile_header( $args ) { data-character-limit="options()->get( 'profile_bio_maxchars' ); ?>" placeholder="" name="" - id=""> + id="">fields()->field_value( 'description' ) ?> options()->get( 'profile_bio_maxchars' ); ?> window.location = '" . $url . "'\";"; - register_shutdown_function( create_function( '', $funtext ) ); + register_shutdown_function( function( $url ) { + echo ''; + }, $url ); - if (1 < ob_get_level()) { - while (ob_get_level() > 1) { + if ( 1 < ob_get_level() ) { + while ( ob_get_level() > 1 ) { ob_end_clean(); } - } - - ?> - - + + %s %s requires 2.0 extensions. You have pre 2.0 extensions " @@ -1110,31 +1111,31 @@ msgid "" "versions. For more info see this doc." msgstr "" -#: includes/admin/core/class-admin-notices.php:301 +#: includes/admin/core/class-admin-notices.php:300 #, php-format msgid "" "%s needs to create several pages (User Profiles, Account, Registration, " "Login, Password Reset, Logout, Member Directory) to function correctly." msgstr "" -#: includes/admin/core/class-admin-notices.php:305 +#: includes/admin/core/class-admin-notices.php:304 msgid "Create Pages" msgstr "" -#: includes/admin/core/class-admin-notices.php:307 -#: includes/admin/core/class-admin-notices.php:540 +#: includes/admin/core/class-admin-notices.php:306 +#: includes/admin/core/class-admin-notices.php:500 msgid "No thanks" msgstr "" -#: includes/admin/core/class-admin-notices.php:327 +#: includes/admin/core/class-admin-notices.php:326 msgid "Ultimate Member Setup Error: User page can not be a child page." msgstr "" -#: includes/admin/core/class-admin-notices.php:337 +#: includes/admin/core/class-admin-notices.php:336 msgid "Ultimate Member Setup Error: Account page can not be a child page." msgstr "" -#: includes/admin/core/class-admin-notices.php:355 +#: includes/admin/core/class-admin-notices.php:354 #, php-format msgid "" "Exif is not enabled on your server. Mobile photo uploads will not be rotated " @@ -1142,88 +1143,69 @@ msgid "" "notice" msgstr "" -#: includes/admin/core/class-admin-notices.php:385 -#, php-format -msgid "" -"Your site language is %1$s. Good news! Ultimate Member is " -"already available in %2$s language. Download the translation files and start using the plugin in your " -"language now. Hide this notice" -msgstr "" - -#: includes/admin/core/class-admin-notices.php:392 -#, php-format -msgid "" -"Ultimate Member has not yet been translated to your language: %1$s. If you have translated the plugin you need put these files " -"ultimatemember-%1$s.po and ultimatemember-%1$s.mo in /" -"wp-content/languages/plugins/ for the plugin to be translated in " -"your language. Hide this notice" -msgstr "" - -#: includes/admin/core/class-admin-notices.php:429 +#: includes/admin/core/class-admin-notices.php:389 #, php-format msgid "" "Are you sure you want to delete the selected user(s)? The following users " "will be deleted:

%s

This cannot be undone!" msgstr "" -#: includes/admin/core/class-admin-notices.php:430 +#: includes/admin/core/class-admin-notices.php:390 msgid "Undo" msgstr "" -#: includes/admin/core/class-admin-notices.php:435 +#: includes/admin/core/class-admin-notices.php:395 msgid "Your translation files have been updated successfully." msgstr "" -#: includes/admin/core/class-admin-notices.php:439 +#: includes/admin/core/class-admin-notices.php:399 msgid "Your temp uploads directory is now clean." msgstr "" -#: includes/admin/core/class-admin-notices.php:443 +#: includes/admin/core/class-admin-notices.php:403 msgid "Your user cache is now removed." msgstr "" -#: includes/admin/core/class-admin-notices.php:447 +#: includes/admin/core/class-admin-notices.php:407 msgid "You got the latest upgrades." msgstr "" -#: includes/admin/core/class-admin-notices.php:451 +#: includes/admin/core/class-admin-notices.php:411 msgid "Try again later. You can run this action once daily." msgstr "" -#: includes/admin/core/class-admin-notices.php:455 +#: includes/admin/core/class-admin-notices.php:415 msgid "The form has been duplicated successfully." msgstr "" -#: includes/admin/core/class-admin-notices.php:459 +#: includes/admin/core/class-admin-notices.php:419 msgid "User has been updated." msgstr "" -#: includes/admin/core/class-admin-notices.php:463 +#: includes/admin/core/class-admin-notices.php:423 msgid "Users have been updated." msgstr "" -#: includes/admin/core/class-admin-notices.php:467 +#: includes/admin/core/class-admin-notices.php:427 msgid "Changed roles." msgstr "" -#: includes/admin/core/class-admin-notices.php:471 +#: includes/admin/core/class-admin-notices.php:431 msgid "Super administrators cannot be modified." msgstr "" -#: includes/admin/core/class-admin-notices.php:472 +#: includes/admin/core/class-admin-notices.php:432 msgid "Other users have been updated." msgstr "" -#: includes/admin/core/class-admin-notices.php:509 +#: includes/admin/core/class-admin-notices.php:469 #, php-format msgid "" "You have installed %s with wrong folder name. Correct " "folder name is \"ultimate-member\"." msgstr "" -#: includes/admin/core/class-admin-notices.php:534 +#: includes/admin/core/class-admin-notices.php:494 #, php-format msgid "" "Thanks for installing %s! We hope you like the plugin. To " @@ -1232,12 +1214,12 @@ msgid "" "discount code for our extensions bundle." msgstr "" -#: includes/admin/core/class-admin-notices.php:538 +#: includes/admin/core/class-admin-notices.php:498 #, php-format msgid "Claim 20% discount code" msgstr "" -#: includes/admin/core/class-admin-notices.php:577 +#: includes/admin/core/class-admin-notices.php:537 #, php-format msgid "" "There are %d inactive %s license keys for this site. This site is not " @@ -1245,14 +1227,14 @@ msgid "" "\">www.ultimatemember.com." msgstr "" -#: includes/admin/core/class-admin-notices.php:584 +#: includes/admin/core/class-admin-notices.php:544 #, php-format msgid "" "You have %d invalid or expired license keys for %s. Please go to the Licenses page to correct this issue." msgstr "" -#: includes/admin/core/class-admin-notices.php:598 +#: includes/admin/core/class-admin-notices.php:558 #, php-format msgid "" "%s version %s needs to be updated to work correctly.
page and run the upgrade process." msgstr "" -#: includes/admin/core/class-admin-notices.php:602 +#: includes/admin/core/class-admin-notices.php:562 msgid "Upgrade Now" msgstr "" -#: includes/admin/core/class-admin-notices.php:616 +#: includes/admin/core/class-admin-notices.php:576 #, php-format msgid "%s %s Successfully Upgraded" msgstr "" -#: includes/admin/core/class-admin-notices.php:642 +#: includes/admin/core/class-admin-notices.php:602 #, php-format msgid "" "Hey there! It's been one month since you installed %s. How have you found " "the plugin so far?" msgstr "" -#: includes/admin/core/class-admin-notices.php:645 +#: includes/admin/core/class-admin-notices.php:605 msgid "I love it!" msgstr "" -#: includes/admin/core/class-admin-notices.php:646 +#: includes/admin/core/class-admin-notices.php:606 msgid "It's good but could be better" msgstr "" -#: includes/admin/core/class-admin-notices.php:647 +#: includes/admin/core/class-admin-notices.php:607 msgid "I don't like the plugin" msgstr "" -#: includes/admin/core/class-admin-notices.php:652 +#: includes/admin/core/class-admin-notices.php:612 #, php-format msgid "" "Great! We're happy to hear that you love the plugin. It would be amazing if " @@ -1298,22 +1280,22 @@ msgid "" "appreciated by us!" msgstr "" -#: includes/admin/core/class-admin-notices.php:656 +#: includes/admin/core/class-admin-notices.php:616 msgid "Leave Review" msgstr "" -#: includes/admin/core/class-admin-notices.php:661 +#: includes/admin/core/class-admin-notices.php:621 msgid "" "We're glad to hear that you like the plugin but we would love to get your " "feedback so we can make the plugin better." msgstr "" -#: includes/admin/core/class-admin-notices.php:665 -#: includes/admin/core/class-admin-notices.php:674 +#: includes/admin/core/class-admin-notices.php:625 +#: includes/admin/core/class-admin-notices.php:634 msgid "Provide Feedback" msgstr "" -#: includes/admin/core/class-admin-notices.php:670 +#: includes/admin/core/class-admin-notices.php:630 #, php-format msgid "" "We're sorry to hear that. If you're having the issue with the plugin you can " @@ -1323,18 +1305,14 @@ msgid "" "like about the plugin you can tell us know by giving us feedback." msgstr "" -#: includes/admin/core/class-admin-notices.php:696 +#: includes/admin/core/class-admin-notices.php:656 #, php-format msgid "" "%s future plans! Detailed future list is here" msgstr "" -#: includes/admin/core/class-admin-notices.php:711 -msgid "Wrong Nonce" -msgstr "" - -#: includes/admin/core/class-admin-notices.php:716 +#: includes/admin/core/class-admin-notices.php:672 msgid "Wrong Data" msgstr "" @@ -2337,130 +2315,130 @@ msgstr "" msgid "Install Info" msgstr "" -#: includes/admin/core/class-admin-settings.php:1150 +#: includes/admin/core/class-admin-settings.php:1159 msgid "Ultimate Member - Settings" msgstr "" -#: includes/admin/core/class-admin-settings.php:1289 +#: includes/admin/core/class-admin-settings.php:1298 msgid "Save Changes" msgstr "" -#: includes/admin/core/class-admin-settings.php:1732 +#: includes/admin/core/class-admin-settings.php:1741 msgid "Subject Line" msgstr "" -#: includes/admin/core/class-admin-settings.php:1734 +#: includes/admin/core/class-admin-settings.php:1743 msgid "This is the subject line of the e-mail" msgstr "" -#: includes/admin/core/class-admin-settings.php:1739 +#: includes/admin/core/class-admin-settings.php:1748 msgid "Message Body" msgstr "" -#: includes/admin/core/class-admin-settings.php:1741 +#: includes/admin/core/class-admin-settings.php:1750 msgid "This is the content of the e-mail" msgstr "" -#: includes/admin/core/class-admin-settings.php:1791 -#: includes/admin/core/class-admin-settings.php:1889 +#: includes/admin/core/class-admin-settings.php:1800 +#: includes/admin/core/class-admin-settings.php:1898 #, php-format msgid "" "Your license key expired on %s. Please renew your license key." msgstr "" -#: includes/admin/core/class-admin-settings.php:1804 -#: includes/admin/core/class-admin-settings.php:1902 +#: includes/admin/core/class-admin-settings.php:1813 +#: includes/admin/core/class-admin-settings.php:1911 #, php-format msgid "" "Your license key has been disabled. Please contact support for more information." msgstr "" -#: includes/admin/core/class-admin-settings.php:1816 -#: includes/admin/core/class-admin-settings.php:1914 +#: includes/admin/core/class-admin-settings.php:1825 +#: includes/admin/core/class-admin-settings.php:1923 #, php-format msgid "" "Invalid license. Please visit your account " "page and verify it." msgstr "" -#: includes/admin/core/class-admin-settings.php:1829 -#: includes/admin/core/class-admin-settings.php:1927 +#: includes/admin/core/class-admin-settings.php:1838 +#: includes/admin/core/class-admin-settings.php:1936 #, php-format msgid "" "Your %s is not active for this URL. Please visit your account page to manage your license key URLs." msgstr "" -#: includes/admin/core/class-admin-settings.php:1841 -#: includes/admin/core/class-admin-settings.php:1939 +#: includes/admin/core/class-admin-settings.php:1850 +#: includes/admin/core/class-admin-settings.php:1948 #, php-format msgid "This appears to be an invalid license key for %s." msgstr "" -#: includes/admin/core/class-admin-settings.php:1850 -#: includes/admin/core/class-admin-settings.php:1948 +#: includes/admin/core/class-admin-settings.php:1859 +#: includes/admin/core/class-admin-settings.php:1957 #, php-format msgid "" "Your license key has reached its activation limit. View " "possible upgrades now." msgstr "" -#: includes/admin/core/class-admin-settings.php:1859 -#: includes/admin/core/class-admin-settings.php:1957 +#: includes/admin/core/class-admin-settings.php:1868 +#: includes/admin/core/class-admin-settings.php:1966 msgid "" "The key you entered belongs to a bundle, please use the product specific " "license key." msgstr "" -#: includes/admin/core/class-admin-settings.php:1867 -#: includes/admin/core/class-admin-settings.php:1875 +#: includes/admin/core/class-admin-settings.php:1876 +#: includes/admin/core/class-admin-settings.php:1884 msgid "unknown_error" msgstr "" -#: includes/admin/core/class-admin-settings.php:1868 -#: includes/admin/core/class-admin-settings.php:1876 +#: includes/admin/core/class-admin-settings.php:1877 +#: includes/admin/core/class-admin-settings.php:1885 #, php-format msgid "" "There was an error with this license key: %s. Please contact " "our support team." msgstr "" -#: includes/admin/core/class-admin-settings.php:1972 +#: includes/admin/core/class-admin-settings.php:1981 msgid "License key never expires." msgstr "" -#: includes/admin/core/class-admin-settings.php:1979 +#: includes/admin/core/class-admin-settings.php:1988 #, php-format msgid "" "Your license key expires soon! It expires on %s. Renew your license key." msgstr "" -#: includes/admin/core/class-admin-settings.php:1989 +#: includes/admin/core/class-admin-settings.php:1998 #, php-format msgid "Your license key expires on %s." msgstr "" -#: includes/admin/core/class-admin-settings.php:2007 +#: includes/admin/core/class-admin-settings.php:2016 #, php-format msgid "To receive updates, please enter your valid %s license key." msgstr "" -#: includes/admin/core/class-admin-settings.php:2031 +#: includes/admin/core/class-admin-settings.php:2040 msgid "Clear License" msgstr "" -#: includes/admin/core/class-admin-settings.php:2033 +#: includes/admin/core/class-admin-settings.php:2042 msgid "Activate" msgstr "" -#: includes/admin/core/class-admin-settings.php:2035 +#: includes/admin/core/class-admin-settings.php:2044 msgid "Re-Activate" msgstr "" -#: includes/admin/core/class-admin-settings.php:2087 +#: includes/admin/core/class-admin-settings.php:2096 msgid "" "To copy the Install info, click below then press Ctrl + C (PC) or Cmd + C " "(Mac)." @@ -2574,7 +2552,7 @@ msgstr "" #: includes/admin/core/class-admin-users.php:305 #: includes/admin/templates/dashboard/users.php:11 -#: includes/core/class-user.php:816 +#: includes/core/class-user.php:821 msgid "Approved" msgstr "" @@ -2697,59 +2675,59 @@ msgstr "" msgid "User Role Deleted Successfully." msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:6 -#: includes/admin/core/packages/2.0.10/functions.php:6 +#: includes/admin/core/packages/2.0-beta1/functions.php:8 +#: includes/admin/core/packages/2.0.10/functions.php:8 msgid "Styles was upgraded successfully" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:17 +#: includes/admin/core/packages/2.0-beta1/functions.php:21 msgid "User Roles was upgraded successfully" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:80 +#: includes/admin/core/packages/2.0-beta1/functions.php:89 #, php-format msgid "Users from %s to %s was upgraded successfully..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:100 +#: includes/admin/core/packages/2.0-beta1/functions.php:113 msgid "Settings was upgraded successfully" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:108 +#: includes/admin/core/packages/2.0-beta1/functions.php:123 msgid "Menus settings was upgraded successfully" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:116 +#: includes/admin/core/packages/2.0-beta1/functions.php:133 msgid "Mailchimp Lists was upgraded successfully" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:124 +#: includes/admin/core/packages/2.0-beta1/functions.php:143 msgid "Social login forms was upgraded successfully" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:132 +#: includes/admin/core/packages/2.0-beta1/functions.php:153 msgid "UM Custom Posts was upgraded successfully" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:147 +#: includes/admin/core/packages/2.0-beta1/functions.php:170 msgid "Forums are ready for upgrade" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:200 +#: includes/admin/core/packages/2.0-beta1/functions.php:225 #, php-format msgid "Forums from %s to %s was upgraded successfully..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:216 +#: includes/admin/core/packages/2.0-beta1/functions.php:243 msgid "Woocommerce Products are ready for upgrade" msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:290 +#: includes/admin/core/packages/2.0-beta1/functions.php:319 #, php-format msgid "Woocommerce Products from %s to %s was upgraded successfully..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/functions.php:306 +#: includes/admin/core/packages/2.0-beta1/functions.php:337 msgid "Email Templates was upgraded successfully" msgstr "" @@ -2758,72 +2736,72 @@ msgstr "" msgid "Upgrade Styles..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:37 +#: includes/admin/core/packages/2.0-beta1/init.php:38 msgid "Upgrade Roles..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:50 +#: includes/admin/core/packages/2.0-beta1/init.php:52 msgid "Upgrade Users..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:71 +#: includes/admin/core/packages/2.0-beta1/init.php:73 msgid "Getting " msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:71 -#: includes/admin/core/packages/2.0-beta1/init.php:82 +#: includes/admin/core/packages/2.0-beta1/init.php:73 +#: includes/admin/core/packages/2.0-beta1/init.php:85 msgid " users..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:82 +#: includes/admin/core/packages/2.0-beta1/init.php:85 msgid "There are " msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:83 +#: includes/admin/core/packages/2.0-beta1/init.php:86 msgid "Start users upgrading..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:135 +#: includes/admin/core/packages/2.0-beta1/init.php:139 msgid "Upgrade Content Restriction Settings..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:160 +#: includes/admin/core/packages/2.0-beta1/init.php:165 msgid "Upgrade Settings..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:185 +#: includes/admin/core/packages/2.0-beta1/init.php:191 msgid "Upgrade Menu Items..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:210 +#: includes/admin/core/packages/2.0-beta1/init.php:217 msgid "Upgrade Mailchimp Lists..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:235 +#: includes/admin/core/packages/2.0-beta1/init.php:243 msgid "Upgrade Social Login Forms..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:260 +#: includes/admin/core/packages/2.0-beta1/init.php:269 msgid "Upgrade UM Custom Post Types..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:285 +#: includes/admin/core/packages/2.0-beta1/init.php:295 msgid "Upgrade bbPress Forums..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:286 +#: includes/admin/core/packages/2.0-beta1/init.php:296 msgid "Get bbPress Forums count..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:343 +#: includes/admin/core/packages/2.0-beta1/init.php:355 msgid "Upgrade Woocommerce Products..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:344 +#: includes/admin/core/packages/2.0-beta1/init.php:356 msgid "Get all Products..." msgstr "" -#: includes/admin/core/packages/2.0-beta1/init.php:403 +#: includes/admin/core/packages/2.0-beta1/init.php:417 msgid "Upgrade Email Templates..." msgstr "" @@ -2852,15 +2830,15 @@ msgstr "" msgid "Search User Roles" msgstr "" -#: includes/admin/core/packages/2.0.10/functions.php:17 +#: includes/admin/core/packages/2.0.10/functions.php:21 msgid "Users cache was cleared successfully" msgstr "" -#: includes/admin/core/packages/2.0.10/init.php:31 +#: includes/admin/core/packages/2.0.10/init.php:32 msgid "Clear Users Cache..." msgstr "" -#: includes/admin/core/packages/2.0.24/functions.php:9 +#: includes/admin/core/packages/2.0.24/functions.php:11 msgid "Temporary dir was purged successfully" msgstr "" @@ -2881,39 +2859,6 @@ msgstr "" msgid "Latest From Ultimate Member" msgstr "" -#: includes/admin/templates/dashboard/language-contrib.php:2 -#, php-format -msgid "" -"Ultimate Member is not yet available in your language: %1$s." -msgstr "" - -#: includes/admin/templates/dashboard/language-contrib.php:6 -msgid "" -"If you want to contribute this translation to the plugin, please add it on " -"our community forum." -msgstr "" - -#: includes/admin/templates/dashboard/language-download.php:2 -#, php-format -msgid "" -"Ultimate Member is available in your language: %1$s (%2$s)." -msgstr "" - -#: includes/admin/templates/dashboard/language-download.php:7 -msgid "Download Translation" -msgstr "" - -#: includes/admin/templates/dashboard/language-update.php:2 -#, php-format -msgid "" -"You are currently using Ultimate Member in your language: %1$s " -"(%2$s)." -msgstr "" - -#: includes/admin/templates/dashboard/language-update.php:7 -msgid "Force Update Translation" -msgstr "" - #: includes/admin/templates/dashboard/purge.php:4 #, php-format msgid "" @@ -2942,12 +2887,12 @@ msgid "Get latest versions" msgstr "" #: includes/admin/templates/dashboard/users.php:27 -#: includes/core/class-user.php:824 +#: includes/core/class-user.php:829 msgid "Pending Review" msgstr "" #: includes/admin/templates/dashboard/users.php:32 -#: includes/core/class-user.php:820 +#: includes/core/class-user.php:825 msgid "Awaiting E-mail Confirmation" msgstr "" @@ -3184,8 +3129,14 @@ msgstr "" msgid "We are sorry. We cannot find any users who match your search criteria." msgstr "" +#: includes/admin/templates/extensions.php:165 +msgid "" +"All Access Pass – Get access to all Ultimate Member " +"extensions at a significant discount with our All Access Pass." +msgstr "" + #: includes/admin/templates/extensions.php:169 -msgid "View our Extensions Bundle" +msgid "View Pricing" msgstr "" #: includes/admin/templates/extensions.php:178 @@ -3525,19 +3476,19 @@ msgstr "" msgid "Update" msgstr "" -#: includes/admin/templates/modal/dynamic_edit_field.php:14 -#: includes/admin/templates/modal/dynamic_edit_row.php:14 -#: includes/admin/templates/modal/dynamic_new_divider.php:14 -#: includes/admin/templates/modal/dynamic_new_field.php:14 -#: includes/admin/templates/modal/dynamic_new_group.php:14 +#: includes/admin/templates/modal/dynamic_edit_field.php:15 +#: includes/admin/templates/modal/dynamic_edit_row.php:15 +#: includes/admin/templates/modal/dynamic_new_divider.php:15 +#: includes/admin/templates/modal/dynamic_new_field.php:15 +#: includes/admin/templates/modal/dynamic_new_group.php:15 #: includes/admin/templates/modal/fonticons.php:11 #: includes/admin/templates/role/publish.php:24 #: includes/core/class-fields.php:2301 includes/core/class-fields.php:2398 #: includes/core/um-actions-profile.php:554 #: includes/core/um-actions-profile.php:693 #: includes/core/um-actions-profile.php:726 -#: includes/core/um-actions-profile.php:1073 -#: includes/core/um-actions-profile.php:1080 +#: includes/core/um-actions-profile.php:1071 +#: includes/core/um-actions-profile.php:1078 msgid "Cancel" msgstr "" @@ -3900,7 +3851,7 @@ msgid "Members" msgstr "" #: includes/class-config.php:133 includes/class-config.php:738 -#: includes/core/um-actions-profile.php:1079 +#: includes/core/um-actions-profile.php:1077 #: includes/core/um-actions-user.php:15 msgid "Logout" msgstr "" @@ -4059,7 +4010,7 @@ msgstr "" msgid "Correct folder name is \"%s\"" msgstr "" -#: includes/class-init.php:160 includes/class-init.php:169 +#: includes/class-init.php:152 includes/class-init.php:161 msgid "Cheatin’ huh?" msgstr "" @@ -4171,7 +4122,7 @@ msgstr "" msgid "You must add a shortcode to the content area" msgstr "" -#: includes/core/class-builtin.php:663 includes/core/class-user.php:1538 +#: includes/core/class-builtin.php:663 includes/core/class-user.php:1543 msgid "Only me" msgstr "" @@ -6362,8 +6313,8 @@ msgstr "" msgid "Unauthorized to do this attempt." msgstr "" -#: includes/core/class-form.php:56 includes/core/class-profile.php:54 -#: includes/core/class-profile.php:70 +#: includes/core/class-form.php:58 includes/core/class-profile.php:56 +#: includes/core/class-profile.php:74 msgid "You can not edit this user" msgstr "" @@ -6425,15 +6376,15 @@ msgstr "" msgid "https://wordpress.org/support/" msgstr "" -#: includes/core/class-profile.php:106 +#: includes/core/class-profile.php:110 msgid "About" msgstr "" -#: includes/core/class-profile.php:110 +#: includes/core/class-profile.php:114 msgid "Posts" msgstr "" -#: includes/core/class-profile.php:114 +#: includes/core/class-profile.php:118 msgid "Comments" msgstr "" @@ -6558,19 +6509,19 @@ msgstr "" msgid "Maximum file size allowed: %s" msgstr "" -#: includes/core/class-user.php:610 +#: includes/core/class-user.php:615 msgid "Ultimate Member Role" msgstr "" -#: includes/core/class-user.php:613 +#: includes/core/class-user.php:618 msgid "— No role for Ultimate Member —" msgstr "" -#: includes/core/class-user.php:828 +#: includes/core/class-user.php:833 msgid "Membership Rejected" msgstr "" -#: includes/core/class-user.php:832 +#: includes/core/class-user.php:837 msgid "Membership Inactive" msgstr "" @@ -6836,51 +6787,51 @@ msgstr "" msgid "Last Page" msgstr "" -#: includes/core/um-actions-misc.php:115 +#: includes/core/um-actions-misc.php:111 msgid "Your account was updated successfully." msgstr "" -#: includes/core/um-actions-misc.php:119 +#: includes/core/um-actions-misc.php:115 msgid "You have successfully changed your password." msgstr "" -#: includes/core/um-actions-misc.php:123 +#: includes/core/um-actions-misc.php:119 msgid "Your account is now active! You can login." msgstr "" -#: includes/core/um-actions-misc.php:157 +#: includes/core/um-actions-misc.php:153 msgid "An error has been encountered" msgstr "" -#: includes/core/um-actions-misc.php:161 +#: includes/core/um-actions-misc.php:157 msgid "Registration is currently disabled" msgstr "" -#: includes/core/um-actions-misc.php:165 includes/core/um-filters-login.php:40 +#: includes/core/um-actions-misc.php:161 includes/core/um-filters-login.php:40 msgid "This email address has been blocked." msgstr "" -#: includes/core/um-actions-misc.php:169 +#: includes/core/um-actions-misc.php:165 msgid "We do not accept registrations from that domain." msgstr "" -#: includes/core/um-actions-misc.php:173 includes/core/um-filters-login.php:43 +#: includes/core/um-actions-misc.php:169 includes/core/um-filters-login.php:43 msgid "Your IP address has been blocked." msgstr "" -#: includes/core/um-actions-misc.php:177 includes/core/um-filters-login.php:136 +#: includes/core/um-actions-misc.php:173 includes/core/um-filters-login.php:136 msgid "Your account has been disabled." msgstr "" -#: includes/core/um-actions-misc.php:181 includes/core/um-filters-login.php:139 +#: includes/core/um-actions-misc.php:177 includes/core/um-filters-login.php:139 msgid "Your account has not been approved yet." msgstr "" -#: includes/core/um-actions-misc.php:185 includes/core/um-filters-login.php:142 +#: includes/core/um-actions-misc.php:181 includes/core/um-filters-login.php:142 msgid "Your account is awaiting e-mail verification." msgstr "" -#: includes/core/um-actions-misc.php:189 includes/core/um-filters-login.php:145 +#: includes/core/um-actions-misc.php:185 includes/core/um-filters-login.php:145 msgid "Your membership request has been rejected." msgstr "" @@ -6913,17 +6864,17 @@ msgstr "" msgid "Tell us a bit about yourself..." msgstr "" -#: includes/core/um-actions-profile.php:907 +#: includes/core/um-actions-profile.php:905 #, php-format msgid "This user account status is %s" msgstr "" -#: includes/core/um-actions-profile.php:1046 -#: includes/core/um-actions-profile.php:1077 +#: includes/core/um-actions-profile.php:1044 +#: includes/core/um-actions-profile.php:1075 msgid "Edit Profile" msgstr "" -#: includes/core/um-actions-profile.php:1078 +#: includes/core/um-actions-profile.php:1076 msgid "My Account" msgstr "" @@ -6969,11 +6920,11 @@ msgstr "" msgid "Login as this user" msgstr "" -#: includes/um-short-functions.php:580 +#: includes/um-short-functions.php:578 msgid "date submitted" msgstr "" -#: includes/um-short-functions.php:586 +#: includes/um-short-functions.php:584 msgid "(empty)" msgstr "" diff --git a/readme.txt b/readme.txt index 65bf3aa6..4ea68126 100644 --- a/readme.txt +++ b/readme.txt @@ -6,7 +6,7 @@ Donate link: Tags: community, member, membership, user-profile, user-registration Requires at least: 4.7 Tested up to: 4.9 -Stable tag: 2.0.30 +Stable tag: 2.0.33 License: GNU Version 2 or Any Later Version License URI: http://www.gnu.org/licenses/gpl-3.0.txt @@ -39,7 +39,7 @@ Read about all of the plugin's features at [Ultimate Member](https://ultimatemem = Paid Extensions = -Ultimate Member has a range of extensions that allow you to extend the power of the plugin +Ultimate Member has a range of extensions that allow you to extend the power of the plugin. You can purchase all of these extensions at a significant discount with our [All Access Pass](https://ultimatemember.com/pricing/) or you can purchase extensions individually. * [Private Content](https://ultimatemember.com/extensions/private-content/) - Display private content to logged in users that only they can access * [Instagram](https://ultimatemember.com/extensions/instagram/) - Allow users to show their Instagram photos on their profile @@ -137,6 +137,28 @@ The plugin works with popular caching plugins by automatically excluding Ultimat = Important: UM2.0+ is a significant update to the code base from 1.3.88. Please make sure you take a full-site backup with restore point before updating the plugin = += 2.0.33: November 21, 2018 = + +* Bugfixes: + - Fixed AJAX vulnerabilities + - Fixed delete user email notification + - Fixed profile tabs displaying + += 2.0.32: November 20, 2018 = + +* Bugfixes: + - Added compatibility with PHP7.2 (removed deprecated functions and ini variables) + - Fixed duplicated "redirect_to" field + - Fixed errors on the installs < PHP5.6 + - Fixed download files/images on the installs with the different home URL and site URL + - Fixed unique emails in admin email notifications + - Remove language notice, all translates are available on wp.org + += 2.0.31: November 14, 2018 = + +* Bugfixes: + - Fixed compatibility with JS/CSS cache plugins + = 2.0.30: November 12, 2018 = * Bugfixes: diff --git a/ultimate-member.php b/ultimate-member.php index 6fb8cc17..d0a901f5 100644 --- a/ultimate-member.php +++ b/ultimate-member.php @@ -3,7 +3,7 @@ Plugin Name: Ultimate Member Plugin URI: http://ultimatemember.com/ Description: The easiest way to create powerful online communities and beautiful user profiles with WordPress -Version: 2.0.30 +Version: 2.0.33 Author: Ultimate Member Author URI: http://ultimatemember.com/ Text Domain: ultimate-member