diff --git a/assets/img/extensions/jobboardwp.png b/assets/img/extensions/jobboardwp.png new file mode 100644 index 00000000..04bf3b6b Binary files /dev/null and b/assets/img/extensions/jobboardwp.png differ diff --git a/assets/js/um-account.js b/assets/js/um-account.js index c325eaf4..eb8eef0d 100644 --- a/assets/js/um-account.js +++ b/assets/js/um-account.js @@ -77,15 +77,19 @@ jQuery(document).ready(function() { var password = jQuery('#' + request_action).val(); jQuery('.um-field-area-response.' + request_action).hide(); - if ( password === '' ) { + if ( jQuery('#' + request_action).length && password === '' ) { jQuery('.um-field-error.' + request_action).show(); } else { jQuery('.um-field-error.' + request_action).hide(); var request = { request_action: request_action, - password: password, nonce: um_scripts.nonce }; + + if ( jQuery('#' + request_action).length ) { + request.password = password; + } + wp.ajax.send( 'um_request_user_data', { data: request, success: function (data) { diff --git a/assets/js/um-account.min.js b/assets/js/um-account.min.js index df52f585..3c9d18d0 100644 --- a/assets/js/um-account.min.js +++ b/assets/js/um-account.min.js @@ -1 +1 @@ -jQuery(document).ready(function(){var a=jQuery(".um-account-main").attr("data-current_tab");a&&(jQuery('.um-account-tab[data-tab="'+a+'"]').show(),jQuery(".um-account-tab:not(:visible)").find("input, select, textarea").not(":disabled").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0)),jQuery(document.body).on("click",".um-account-side li a",function(a){a.preventDefault();var e=jQuery(this);e.parents("ul").find("li a").removeClass("current"),e.addClass("current");var t=jQuery(this).attr("href"),u=jQuery(this).attr("data-tab");return jQuery('input[id="_um_account_tab"]:hidden').val(u),window.history.pushState("","",t),jQuery(".um-account-tab").hide(),jQuery('.um-account-tab[data-tab="'+u+'"]').fadeIn(),jQuery(".um-account-tab:visible").find("input, select, textarea").filter(".um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input, select, textarea").not(":disabled").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-nav a").removeClass("current"),jQuery('.um-account-nav a[data-tab="'+u+'"]').addClass("current"),wp.hooks.doAction("um_after_account_tab_changed",u),!1}),jQuery(document.body).on("click",".um-account-nav a",function(a){a.preventDefault();var e=jQuery(this).attr("data-tab"),t=jQuery(this).parents("div"),u=jQuery(this);return jQuery('input[id="_um_account_tab"]:hidden').val(e),jQuery(".um-account-tab").hide(),u.hasClass("current")?(t.next(".um-account-tab").slideUp(),u.removeClass("current")):(t.next(".um-account-tab").slideDown(),u.parents("div").find("a").removeClass("current"),u.addClass("current")),jQuery(".um-account-tab:visible").find("input, select, textarea").filter(".um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input, select, textarea").not(":disabled").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-side li a").removeClass("current"),jQuery('.um-account-side li a[data-tab="'+e+'"]').addClass("current"),wp.hooks.doAction("um_after_account_tab_changed",e),!1}),jQuery(document.body).on("click",".um-request-button",function(a){a.preventDefault();var e=jQuery(this).data("action"),t=jQuery("#"+e).val();if(jQuery(".um-field-area-response."+e).hide(),""===t)jQuery(".um-field-error."+e).show();else{jQuery(".um-field-error."+e).hide();var u={request_action:e,password:t,nonce:um_scripts.nonce};wp.ajax.send("um_request_user_data",{data:u,success:function(a){jQuery(".um-field-area-response."+e).text(a.answer).show()},error:function(a){console.log(a)}})}})}); \ No newline at end of file +jQuery(document).ready(function(){var a=jQuery(".um-account-main").attr("data-current_tab");a&&(jQuery('.um-account-tab[data-tab="'+a+'"]').show(),jQuery(".um-account-tab:not(:visible)").find("input, select, textarea").not(":disabled").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0)),jQuery(document.body).on("click",".um-account-side li a",function(a){a.preventDefault();var e=jQuery(this);e.parents("ul").find("li a").removeClass("current"),e.addClass("current");var t=jQuery(this).attr("href"),u=jQuery(this).attr("data-tab");return jQuery('input[id="_um_account_tab"]:hidden').val(u),window.history.pushState("","",t),jQuery(".um-account-tab").hide(),jQuery('.um-account-tab[data-tab="'+u+'"]').fadeIn(),jQuery(".um-account-tab:visible").find("input, select, textarea").filter(".um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input, select, textarea").not(":disabled").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-nav a").removeClass("current"),jQuery('.um-account-nav a[data-tab="'+u+'"]').addClass("current"),wp.hooks.doAction("um_after_account_tab_changed",u),!1}),jQuery(document.body).on("click",".um-account-nav a",function(a){a.preventDefault();var e=jQuery(this).attr("data-tab"),t=jQuery(this).parents("div"),u=jQuery(this);return jQuery('input[id="_um_account_tab"]:hidden').val(e),jQuery(".um-account-tab").hide(),u.hasClass("current")?(t.next(".um-account-tab").slideUp(),u.removeClass("current")):(t.next(".um-account-tab").slideDown(),u.parents("div").find("a").removeClass("current"),u.addClass("current")),jQuery(".um-account-tab:visible").find("input, select, textarea").filter(".um_account_inactive:disabled").removeClass("um_account_inactive").prop("disabled",!1).attr("disabled",!1),jQuery(".um-account-tab:not(:visible)").find("input, select, textarea").not(":disabled").addClass("um_account_inactive").prop("disabled",!0).attr("disabled",!0),jQuery(".um-account-side li a").removeClass("current"),jQuery('.um-account-side li a[data-tab="'+e+'"]').addClass("current"),wp.hooks.doAction("um_after_account_tab_changed",e),!1}),jQuery(document.body).on("click",".um-request-button",function(a){a.preventDefault();var e=jQuery(this).data("action"),t=jQuery("#"+e).val();if(jQuery(".um-field-area-response."+e).hide(),jQuery("#"+e).length&&""===t)jQuery(".um-field-error."+e).show();else{jQuery(".um-field-error."+e).hide();var u={request_action:e,nonce:um_scripts.nonce};jQuery("#"+e).length&&(u.password=t),wp.ajax.send("um_request_user_data",{data:u,success:function(a){jQuery(".um-field-area-response."+e).text(a.answer).show()},error:function(a){console.log(a)}})}})}); \ No newline at end of file diff --git a/includes/admin/templates/extensions.php b/includes/admin/templates/extensions.php index 085ae767..4da751fa 100644 --- a/includes/admin/templates/extensions.php +++ b/includes/admin/templates/extensions.php @@ -134,11 +134,11 @@ $premium['user-locations'] = array( 'desc' => 'Using the Google Maps API, display users on a map on the member directory page and allow users to add their location via their profile', ); -//$premium['profile-tabs'] = array( -// 'url' => 'https://ultimatemember.com/extensions/profile-tabs/', -// 'name' => 'Profile Tabs', -// 'desc' => 'Allow users to add custom tabs to profiles', -//); +$free['jobboardwp'] = array( + 'url' => 'https://wordpress.org/plugins/um-jobboardwp', + 'name' => 'JobBoardWP', + 'desc' => 'Integrates Ultimate Member with the job board plugin JobBoardWP', +); $free['forumwp'] = array( 'url' => 'https://ultimatemember.com/extensions/forumwp/', diff --git a/includes/core/class-account.php b/includes/core/class-account.php index fea95b00..ade56be5 100644 --- a/includes/core/class-account.php +++ b/includes/core/class-account.php @@ -160,6 +160,10 @@ if ( ! class_exists( 'um\core\Account' ) ) { * @throws \Exception */ function ultimatemember_account( $args = array() ) { + if ( ! is_user_logged_in() ) { + return ''; + } + um_fetch_user( get_current_user_id() ); ob_start(); @@ -626,7 +630,10 @@ if ( ! class_exists( 'um\core\Account' ) ) { case 'delete': - $args = 'single_user_password'; + $args = ''; + if ( $this->current_password_is_required( $id ) ) { + $args = 'single_user_password'; + } /** * UM hook @@ -660,6 +667,10 @@ if ( ! class_exists( 'um\core\Account' ) ) { $output .= UM()->fields()->edit_field( $key, $data ); } + if ( ! $output && ! $this->current_password_is_required( $id ) ) { + $output = '
'; + } + break; case 'general': @@ -674,7 +685,7 @@ if ( ! class_exists( 'um\core\Account' ) ) { $args = str_replace(',user_email','', $args ); } - if ( UM()->options()->get( 'account_general_password' ) ) { + if ( $this->current_password_is_required( $id ) ) { $args .= ',single_user_password'; } @@ -930,5 +941,34 @@ if ( ! class_exists( 'um\core\Account' ) ) { $classes = apply_filters( 'um_form_official_classes__hook', $classes ); return $classes; } + + + /** + * Checks account actions require current password + * + * @param $tab_key + * + * @return bool + */ + function current_password_is_required( $tab_key ) { + $is_required = true; + + switch ( $tab_key ) { + case 'general': + $is_required = UM()->options()->get( 'account_general_password' ); + break; + case 'delete': + break; + case 'password': + break; + case 'privacy_erase_data': + case 'privacy_download_data': + break; + } + + $is_required = apply_filters( "um_account_{$tab_key}_require_current", $is_required ); + + return $is_required; + } } } \ No newline at end of file diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index a65ba453..826e3cf2 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -2279,7 +2279,8 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } else { - if ( $this->set_mode == 'account' || um_is_core_page( 'account' ) ) { + if ( UM()->account()->current_password_is_required( 'password' ) && + ( $this->set_mode == 'account' || um_is_core_page( 'account' ) ) ) { $key = 'current_' . $original_key; $output .= '' . esc_html__( 'A confirmation email has been sent to your email. Click the link within the email to confirm your export request.', 'ultimate-member' ) . '
'; } elseif ( ! empty( $pending ) && $pending['post_status'] == 'request-confirmed' ) { echo '' . esc_html__( 'The administrator has not yet approved downloading the data. Please expect an email with a link to your data.', 'ultimate-member' ) . '
'; - } else { ?> - -' . esc_html__( 'A confirmation email has been sent to your email. Click the link within the email to confirm your export request.', 'ultimate-member' ) . '
'; } elseif ( ! empty( $pending ) && $pending['post_status'] == 'request-confirmed' ) { echo '' . esc_html__( 'The administrator has not yet approved deleting your data. Please expect an email with a link to your data.', 'ultimate-member' ) . '
'; - } else { ?> - + } else { + if ( UM()->account()->current_password_is_required( 'privacy_erase_data' ) ) { ?> + + + + + + + + + @@ -615,37 +657,48 @@ function um_after_account_privacy( $args ) { function um_request_user_data() { UM()->check_ajax_nonce(); + if ( ! isset( $_POST['request_action'] ) ) { + wp_send_json_error( __( 'Wrong request.', 'ultimate-member' ) ); + } + $user_id = get_current_user_id(); - $password = $_POST['password']; + $password = ! empty( $_POST['password'] ) ? $_POST['password'] : ''; $user = get_userdata( $user_id ); $hash = $user->data->user_pass; - if ( wp_check_password( $password, $hash ) && isset( $_POST['request_action'] ) ) { - - if ( $_POST['request_action'] == 'um-export-data' ) { - $request_id = wp_create_user_request( $user->data->user_email, 'export_personal_data' ); - } elseif ( $_POST['request_action'] == 'um-erase-data' ) { - $request_id = wp_create_user_request( $user->data->user_email, 'remove_personal_data' ); + if ( $_POST['request_action'] == 'um-export-data' ) { + if ( UM()->account()->current_password_is_required( 'privacy_download_data' ) ) { + if ( ! wp_check_password( $password, $hash ) ) { + $answer = esc_html__( 'The password you entered is incorrect.', 'ultimate-member' ); + wp_send_json_success( array( 'answer' => $answer ) ); + } } - - if ( empty( $request_id ) ) { - wp_send_json_error( __( 'Wrong request.', 'ultimate-member' ) ); + } elseif ( $_POST['request_action'] == 'um-erase-data' ) { + if ( UM()->account()->current_password_is_required( 'privacy_erase_data' ) ) { + if ( ! wp_check_password( $password, $hash ) ) { + $answer = esc_html__( 'The password you entered is incorrect.', 'ultimate-member' ); + wp_send_json_success( array( 'answer' => $answer ) ); + } } - - if ( is_wp_error( $request_id ) ) { - $answer = $request_id->get_error_message(); - } else { - wp_send_user_request( $request_id ); - $answer = esc_html__( 'A confirmation email has been sent to your email. Click the link within the email to confirm your export request.', 'ultimate-member' ); - } - - } else { - - $answer = esc_html__( 'The password you entered is incorrect.', 'ultimate-member' ); - } - wp_send_json_success( array( 'answer' => esc_html( $answer ) ) ); + if ( $_POST['request_action'] == 'um-export-data' ) { + $request_id = wp_create_user_request( $user->data->user_email, 'export_personal_data' ); + } elseif ( $_POST['request_action'] == 'um-erase-data' ) { + $request_id = wp_create_user_request( $user->data->user_email, 'remove_personal_data' ); + } + + if ( ! isset( $request_id ) || empty( $request_id ) ) { + wp_send_json_error( __( 'Wrong request.', 'ultimate-member' ) ); + } + + if ( is_wp_error( $request_id ) ) { + $answer = esc_html( $request_id->get_error_message() ); + } else { + wp_send_user_request( $request_id ); + $answer = esc_html__( 'A confirmation email has been sent to your email. Click the link within the email to confirm your export request.', 'ultimate-member' ); + } + + wp_send_json_success( array( 'answer' => $answer ) ); } -add_action( 'wp_ajax_nopriv_um_request_user_data', 'um_request_user_data' ); add_action( 'wp_ajax_um_request_user_data', 'um_request_user_data' ); \ No newline at end of file diff --git a/includes/core/um-actions-global.php b/includes/core/um-actions-global.php index e411ebc6..e87db7e2 100644 --- a/includes/core/um-actions-global.php +++ b/includes/core/um-actions-global.php @@ -28,7 +28,7 @@ function um_add_security_checks( $args ) {- +