From e9e68e28cfc50ccbd5d4464e3ae07ceb3b195614 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 29 Jan 2025 14:24:15 +0200 Subject: [PATCH 1/5] * added data attribute; * updated hooks docs; * WPCS; --- templates/profile.php | 383 +++++++++++++++++++++--------------------- 1 file changed, 196 insertions(+), 187 deletions(-) diff --git a/templates/profile.php b/templates/profile.php index de84b96a..8c1af9e4 100644 --- a/templates/profile.php +++ b/templates/profile.php @@ -6,7 +6,7 @@ * * Page: "Profile" * - * @version 2.6.9 + * @version 2.9.3 * * @var string $mode * @var int $form_id @@ -17,200 +17,227 @@ if ( ! defined( 'ABSPATH' ) ) { } $description_key = UM()->profile()->get_show_bio_key( $args ); ?> - -
- -
- +
+
Callback name -> Excerpt): + * 10 - `um_profile_completeness_show_notice()` displays Profile Completeness notices. + * + * @param {array} $args User Profile data. + * + * @since 1.3.x + * @hook um_profile_before_header + * + * @example Display some content before User Profile. + * function my_um_profile_before_header( $args ) { * // your code here + * echo $notice; * } - * ?> + * add_action( 'um_profile_before_header', 'my_um_profile_before_header' ); */ do_action( 'um_profile_before_header', $args ); - if ( um_is_on_edit_profile() ) { ?> + if ( um_is_on_edit_profile() ) { + ?>
- Callback name -> Excerpt): + * 9 - `um_profile_header_cover_area()` displays User Profile cover photo. + * + * @param {array} $args User Profile data. + * + * @since 1.3.x + * @hook um_profile_header_cover_area + * + * @example Display some content before or after User Profile cover. + * function my_um_profile_header_cover_area( $args ) { * // your code here + * echo $content; * } - * ?> + * add_action( 'um_profile_header_cover_area', 'my_um_profile_header_cover_area' ); */ do_action( 'um_profile_header_cover_area', $args ); - /** - * UM hook + * Fires for displaying User Profile header. * - * @type action - * @title um_profile_header - * @description Profile header area - * @input_vars - * [{"var":"$args","type":"array","desc":"Profile form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_profile_header', 'function_name', 10, 1 ); - * @example - * Callback name -> Excerpt): + * 9 - `um_profile_header()` displays User Profile header. + * + * @param {array} $args User Profile data. + * + * @since 1.3.x + * @hook um_profile_header + * + * @example Display some content before or after User Profile header. + * function my_um_profile_header( $args ) { * // your code here + * echo $content; * } - * ?> + * add_action( 'um_profile_header', 'my_um_profile_header' ); */ do_action( 'um_profile_header', $args ); - /** - * UM hook + * Filters classes of the User Profile navigation bar. * - * @type filter - * @title um_profile_navbar_classes - * @description Additional classes for profile navbar - * @input_vars - * [{"var":"$classes","type":"string","desc":"UM Posts Tab query"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Callback name -> Excerpt): + * 10 - `um_followers_profile_navbar_classes()` from Followers extension class. + * 10 - `profile_navbar_classes()` from Messaging extension class. + * + * @param {string} $classes User Profile navigation bar classes. + * + * @since 2.0 + * @hook um_profile_navbar_classes + * + * @return {string} User Profile navigation bar classes. + * + * @example Adds `my_custom_class` class to the navigation bar on the User Profile page. + * function my_um_profile_navbar_classes( $classes ) { * // your code here - * return $classes; + * $classes .= ' my_custom_class'; + * echo $classes; * } - * ?> + * add_filter( 'um_profile_navbar_classes', 'my_um_profile_navbar_classes' ); */ - $classes = apply_filters( 'um_profile_navbar_classes', '' ); ?> + $classes = apply_filters( 'um_profile_navbar_classes', '' ); + ?>
Callback name -> Excerpt): + * 4 - `um_followers_add_profile_bar()` displays Followers button. + * 5 - `add_profile_bar()` displays Messaging button. + * + * @param {array} $args User Profile data. + * + * @since 1.3.x + * @hook um_profile_navbar + * + * @example Display some content before or after User Profile navigation bar. + * function my_um_profile_navbar( $args ) { * // your code here + * echo $content; * } - * ?> + * add_action( 'um_profile_navbar', 'my_um_profile_navbar' ); */ - do_action( 'um_profile_navbar', $args ); ?> + do_action( 'um_profile_navbar', $args ); + ?>
Callback name -> Excerpt): + * 9 - `um_profile_menu()` displays User Profile menu. + * + * @param {array} $args User Profile data. + * + * @since 2.0 + * @hook um_profile_menu + * + * @example Display some content before or after User Profile menu. + * function my_um_profile_menu( $args ) { * // your code here + * echo $content; * } - * ?> + * add_action( 'um_profile_menu', 'my_um_profile_menu' ); */ do_action( 'um_profile_menu', $args ); if ( um_is_on_edit_profile() || UM()->user()->preview ) { - - $nav = 'main'; + $nav = 'main'; $subnav = UM()->profile()->active_subnav(); - $subnav = ! empty( $subnav ) ? $subnav : 'default'; ?> - + $subnav = ! empty( $subnav ) ? $subnav : 'default'; + ?>
- Callback name -> Excerpt): + * 10 - `um_profile_content_main()` displays `About` menu tab's content (v2). + * 10 - `UM()->frontend()->profile()->about()` displays `About` menu tab's content (v3). + * 10 - `um_profile_content_followers()` displays `Followers` menu tab's content. + * 10 - `um_profile_content_following()` displays `Following` menu tab's content. + * 10 - `um_profile_content_groups_list()` displays `User Groups List` menu tab's content. + * 10 - `profile_tab_content()` displays `My Jobs` menu tab's content. + * 10 - `profile_tab_dashboard_content()` displays `My Jobs Dashboard` menu tab's content. + * 10 - `content_messages()` displays `Messages` menu tab's content. + * 10 - `um_profile_content_private_content()` displays `Private Content` menu tab's content. + * 10 - `um_profile_content_{$tab['tabid']}` displays custom Profile Tabs content. + * 10 - `um_profile_content_reviews()` displays `Reviews` menu tab's content. + * 10 - `show_wall()` displays `Activity` menu tab's content. + * + * @param {array} $args User Profile data. + * + * @since 1.3.x + * @hook um_profile_content_{$nav} + * + * @example Display some content in User Profile `main` nav content tab. + * function my_profile_content_main( $args ) { * // your code here + * echo $content; * } - * ?> + * add_action( 'um_profile_content_main', 'my_profile_content_main' ); */ - do_action("um_profile_content_{$nav}", $args); - + do_action( "um_profile_content_$nav", $args ); /** - * UM hook + * Fires for adding content in User Profile nav > subnav menu content tab. + * $nav profile menu tab key. + * $subnav profile sub-menu tab key. * - * @type action - * @title um_profile_content_{$nav}_{$subnav} - * @description Custom hook to display tabbed content - * @input_vars - * [{"var":"$args","type":"array","desc":"Profile form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_profile_content_{$nav}_{$subnav}', 'function_name', 10, 1 ); - * @example - * Callback name -> Excerpt): + * 10 - `um_bbpress_user_topics()` displays `Topics` submenu of bbPress tab's content. + * 10 - `um_bbpress_user_replies()` displays `Replies` submenu of bbPress tab's content. + * 10 - `um_bbpress_user_favorites()` displays `Favorites` submenu of bbPress tab's content. + * 10 - `um_bbpress_user_subscriptions()` displays `Subscriptions` submenu of bbPress tab's content. + * 10 - `profile_content_forums_topics()` displays `Topics` submenu of ForumWP tab's content. + * 10 - `profile_content_forums_replies()` displays `Replies` submenu of ForumWP tab's content. + * 10 - `profile_content_subscriptions()` displays `Subscriptions` submenu of ForumWP tab's content. + * 10 - `profile_content_bookmarks()` displays `Bookmarks` submenu of ForumWP tab's content. + * 10 - `profile_content_likes()` displays `Likes` submenu of ForumWP tab's content. + * 10 - `um_profile_content_friends_myfriends()` displays `My Friends` submenu of Friends tab's content. + * 10 - `um_profile_content_friends_friendreqs()` displays `Friends Requests` submenu of Friends tab's content. + * 10 - `um_profile_content_friends_sentreqs()` displays `Send Friends Requests` submenu of Friends tab's content. + * 10 - `um_profile_content_badges_my_badges()` displays `My badges` submenu of myCRED tab's content. + * 10 - `um_profile_content_badges_all_badges()` displays `All badges` submenu of myCRED tab's content. + * 10 - `get_bookmarks_content()` displays `All bookmarks with folders` submenu of User Bookmarks tab's content. + * 10 - `get_bookmarks_content_all()` displays `All bookmarks` submenu of User Bookmarks tab's content. + * 10 - `get_bookmarks_content_users()` displays `All bookmarked users` submenu of User Bookmarks tab's content. + * 10 - `user_notes_profile_tab()` displays `View Notes` submenu of User Notes tab's content. + * 10 - `get_add_note_form()` displays `Add Note` submenu of User Notes tab's content. + * 10 - `get_gallery_content()` displays `Albums` submenu of User Photos tab's content. + * 10 - `get_gallery_photos_content()` displays `Photos` submenu of User Photos tab's content. + * 10 - `um_profile_content_purchases()` displays `Purchases` submenu of Woocommerce tab's content. + * 10 - `um_profile_content_product_reviews()` displays `Product Reviews` submenu of Woocommerce tab's content. + * + * @param {array} $args User Profile data. + * + * @since 1.3.x + * @hook um_profile_content_{$nav}_{$subnav} + * + * @example Display some content in User Profile `main` nav and `step2` subnav content tab. + * function my_profile_content_main_step2( $args ) { * // your code here + * echo $content; * } - * ?> + * add_action( 'um_profile_content_main_step2', 'my_profile_content_main_step2' ); */ - do_action( "um_profile_content_{$nav}_{$subnav}", $args ); ?> - + do_action( "um_profile_content_{$nav}_$subnav", $args ); + ?>
@@ -218,69 +245,51 @@ $description_key = UM()->profile()->get_show_bio_key( $args );
- options()->get( 'profile_menu' ); - $tabs = UM()->profile()->tabs_active(); + $profile_tabs = UM()->profile()->tabs_active(); - $nav = UM()->profile()->active_tab(); + $nav = UM()->profile()->active_tab(); $subnav = UM()->profile()->active_subnav(); $subnav = ! empty( $subnav ) ? $subnav : 'default'; - if ( $menu_enabled || ! empty( $tabs[ $nav ]['hidden'] ) ) { ?> - + if ( $menu_enabled || ! empty( $profile_tabs[ $nav ]['hidden'] ) ) { + ?>
- */ - do_action("um_profile_content_{$nav}", $args); - - /** - * UM hook - * - * @type action - * @title um_profile_content_{$nav}_{$subnav} - * @description Custom hook to display tabbed content - * @input_vars - * [{"var":"$args","type":"array","desc":"Profile form shortcode arguments"}] - * @change_log - * ["Since: 2.0"] - * @usage add_action( 'um_profile_content_{$nav}_{$subnav}', 'function_name', 10, 1 ); - * @example - * - */ - do_action( "um_profile_content_{$nav}_{$subnav}", $args ); ?> - + /** This action is documented in ultimate-member/templates/profile.php */ + do_action( "um_profile_content_$nav", $args ); + /** This action is documented in ultimate-member/templates/profile.php */ + do_action( "um_profile_content_{$nav}_$subnav", $args ); + ?>
- - + /** + * Fires for adding content below User Profile menu. + * + * Internal Ultimate Member callbacks (Priority -> Callback name -> Excerpt): + * 99 - `profile_footer_login_form()` displays User Login form related to messaging extension. + * + * @param {array} $args User Profile data. + * + * @since 2.0 + * @hook um_profile_footer + * + * @example Display some content in User Profile footer. + * function my_um_profile_footer( $args ) { + * // your code here + * echo $content; + * } + * add_action( 'um_profile_footer', 'my_um_profile_footer' ); + */ + do_action( 'um_profile_footer', $args ); + ?>
From 0520a55cc47070c9536724f89a0f3bd6d1ca9e71 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 29 Jan 2025 14:49:47 +0200 Subject: [PATCH 2/5] * removed hidden inputs on view mode; * handle data attribute instead of the hidden input; * WPCS; --- assets/js/um-modal.js | 6 ++-- assets/js/um-modal.min.js | 2 +- includes/core/um-actions-global.php | 56 +++++++++++++++++------------ 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/assets/js/um-modal.js b/assets/js/um-modal.js index bbb06e4c..a6fc3de1 100644 --- a/assets/js/um-modal.js +++ b/assets/js/um-modal.js @@ -107,9 +107,9 @@ jQuery(document).ready(function() { var form_id = 0; var mode = ''; if ( jQuery('div.um-field-image[data-key="' + key + '"]').length === 1 ) { - var $formWrapper = jQuery('div.um-field-image[data-key="' + key + '"]').closest('.um-form'); - form_id = $formWrapper.find('input[name="form_id"]').val(); - mode = $formWrapper.attr('data-mode'); + let $formWrapper = jQuery('div.um-field-image[data-key="' + key + '"]').closest('.um-form'); + form_id = $formWrapper.data('form_id'); + mode = $formWrapper.data('mode'); } if ( jQuery('.cropper-hidden').length > 0 && UM.frontend.cropper.obj ) { diff --git a/assets/js/um-modal.min.js b/assets/js/um-modal.min.js index 7464fe88..c2898478 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:not(:has(.um-form)) a',function(e){return e.preventDefault(),!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(),a=(um_remove_modal(),jQuery(".um-single-file-preview[data-key="+e+"]").fadeIn().html(a),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(a)}),jQuery(document).on("click",".um-finish-upload.image:not(.disabled)",function(){var a,e,t=jQuery(this),i=jQuery(this).attr("data-key"),r=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview"),u=r.find("img").attr("src"),r=r.find("img").data("file"),d=0,m=(jQuery(this).parents("#um_upload_single").data("user_id")&&(d=jQuery(this).parents("#um_upload_single").data("user_id")),0),n="";1===jQuery('div.um-field-image[data-key="'+i+'"]').length&&(m=(e=jQuery('div.um-field-image[data-key="'+i+'"]').closest(".um-form")).find('input[name="form_id"]').val(),n=e.attr("data-mode")),0'),jQuery(".um").hasClass("um-editing"))&&jQuery(".um-cover-overlay").show(),jQuery(".um-single-image-preview[data-key="+i+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+a.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+i+"]").parents(".um-field").find(".um-btn-auto-width").html(t.attr("data-change")),jQuery(".um-single-image-preview[data-key="+i+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(a=new Date,jQuery(".um-single-image-preview[data-key="+i+"]").fadeIn().find("img").attr("src",u+"?"+a.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+i+"]").parents(".um-field").find(".um-btn-auto-width").html(t.attr("data-change")),jQuery(".um-single-image-preview[data-key="+i+"]").parents(".um-field").find("input[type=hidden]").val(r))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";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="+r+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+a.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find(".um-btn-auto-width").html(t.attr("data-change")),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(a=new Date,jQuery(".um-single-image-preview[data-key="+r+"]").fadeIn().find("img").attr("src",u+"?"+a.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find(".um-btn-auto-width").html(t.attr("data-change")),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find("input[type=hidden]").val(i))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";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 + if ( is_admin() ) { + return; + } + + if ( true === UM()->fields()->editing ) { + ?> - - -

- - -

- - fields()->editing ) { + ?> +

+ + +

+ + if ( is_admin() ) { + return; + } + if ( true === UM()->fields()->editing ) { + ?> - - + Date: Wed, 29 Jan 2025 16:01:02 +0200 Subject: [PATCH 3/5] * backward compatibility; * update dropdown items texts on profile photo change/remove; * added escapers; * WPCS; --- assets/js/um-modal.js | 14 +++++++++++++- assets/js/um-modal.min.js | 2 +- assets/js/um-profile.js | 18 +++++++++++------- assets/js/um-profile.min.js | 2 +- includes/core/um-actions-profile.php | 26 ++++++++++++++------------ 5 files changed, 40 insertions(+), 22 deletions(-) diff --git a/assets/js/um-modal.js b/assets/js/um-modal.js index a6fc3de1..37d8e46e 100644 --- a/assets/js/um-modal.js +++ b/assets/js/um-modal.js @@ -108,8 +108,11 @@ jQuery(document).ready(function() { var mode = ''; if ( jQuery('div.um-field-image[data-key="' + key + '"]').length === 1 ) { let $formWrapper = jQuery('div.um-field-image[data-key="' + key + '"]').closest('.um-form'); - form_id = $formWrapper.data('form_id'); + form_id = $formWrapper.data('form_id') || $formWrapper.find('input[name="form_id"]').val(); // 'input[name="form_id"]' is a backward compatibility. mode = $formWrapper.data('mode'); + } else { + console.warn( wp.i18n.__( 'UM Warning: No field associated with image uploader.', 'ultimate-member' ) ); + return; } if ( jQuery('.cropper-hidden').length > 0 && UM.frontend.cropper.obj ) { @@ -140,6 +143,15 @@ jQuery(document).ready(function() { if ( key === 'profile_photo' ) { jQuery('.um-profile-photo-img img').attr('src', response.data.image.source_url + "?"+d.getTime()); + + let $dropdown = jQuery('.um-profile-photo .um-dropdown'); + if ( ! $dropdown.find('.um-reset-profile-photo').hasClass('um-is-visible') ) { + let $dropdownItem = $dropdown.find('.um-manual-trigger[data-parent=".um-profile-photo"]'); + let altText = $dropdownItem.data('alt_text'); + $dropdownItem.data( 'alt_text', $dropdownItem.text() ).text( altText ); + + $dropdown.find('.um-reset-profile-photo').addClass('um-is-visible').show(); + } } else if ( key === 'cover_photo' ) { jQuery('.um-cover-e').empty().html(''); if ( jQuery('.um').hasClass('um-editing') ) { diff --git a/assets/js/um-modal.min.js b/assets/js/um-modal.min.js index c2898478..9f97c0b0 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:not(:has(.um-form)) a',function(e){return e.preventDefault(),!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(),a=(um_remove_modal(),jQuery(".um-single-file-preview[data-key="+e+"]").fadeIn().html(a),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(a)}),jQuery(document).on("click",".um-finish-upload.image:not(.disabled)",function(){var a,e,t=jQuery(this),r=jQuery(this).attr("data-key"),i=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview"),u=i.find("img").attr("src"),i=i.find("img").data("file"),d=0,m=(jQuery(this).parents("#um_upload_single").data("user_id")&&(d=jQuery(this).parents("#um_upload_single").data("user_id")),0),n="";1===jQuery('div.um-field-image[data-key="'+r+'"]').length&&(m=(e=jQuery('div.um-field-image[data-key="'+r+'"]').closest(".um-form")).data("form_id"),n=e.data("mode")),0'),jQuery(".um").hasClass("um-editing"))&&jQuery(".um-cover-overlay").show(),jQuery(".um-single-image-preview[data-key="+r+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+a.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find(".um-btn-auto-width").html(t.attr("data-change")),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(a=new Date,jQuery(".um-single-image-preview[data-key="+r+"]").fadeIn().find("img").attr("src",u+"?"+a.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find(".um-btn-auto-width").html(t.attr("data-change")),jQuery(".um-single-image-preview[data-key="+r+"]").parents(".um-field").find("input[type=hidden]").val(i))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";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="+d+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+r.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find(".um-btn-auto-width").html(u.attr("data-change")),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(r=new Date,jQuery(".um-single-image-preview[data-key="+d+"]").fadeIn().find("img").attr("src",t+"?"+r.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find(".um-btn-auto-width").html(u.attr("data-change")),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find("input[type=hidden]").val(a)))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";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'),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()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("change keyup","#um-meta-bio",function(){if(void 0!==jQuery(this).val()){var t=jQuery(this).data("character-limit"),r=jQuery(this).data("html");let e=t-jQuery(this).val().length;e=(e=1===parseInt(r)?t-jQuery(this).val().replace(/(<([^>]+)>)/gi,"").length:e)<0?0:e,jQuery("span.um-meta-bio-character span.um-bio-limit").text(e);r=e<5?"red":"";jQuery("span.um-meta-bio-character").css("color",r)}}),jQuery("#um-meta-bio").trigger("change"),jQuery(".um-profile form").each(function(){let t=jQuery(this).data("description_key");jQuery(this).find('textarea[name="'+t+'"]').length&&jQuery(document.body).on("change input",'textarea[name="'+t+'"]',function(e){jQuery(this).parents("form").find('textarea[name="'+t+'"]').each(function(){jQuery(this).val(e.currentTarget.value),jQuery("#um-meta-bio")[0]!==e.currentTarget&&jQuery("#um-meta-bio")[0]===jQuery(this)[0]&&jQuery(this).trigger("change")})})}),jQuery(".um-profile-edit a.um_delete-item").on("click",function(e){if(e.preventDefault(),!confirm(wp.i18n.__("Are you sure that you want to delete this user?","ultimate-member")))return!1}),jQuery(".um-profile-nav a").on("touchend",function(e){jQuery(e.currentTarget).trigger("click")})}); \ No newline at end of file +jQuery(document).ready(function(){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-profile.um-viewing .um-profile-body").find(".um-row-heading,.um-row").remove(),jQuery(".um-profile-note").show()),jQuery(document.body).on("click",".um-profile-save",function(e){return e.preventDefault(),jQuery(this).parents(".um.um-profile.um-editing").find("form").trigger("submit"),!1}),jQuery(document.body).on("click",".um-profile-edit-a",function(e){jQuery(this).addClass("active")}),jQuery(document.body).on("click",".um-cover a.um-cover-add, .um-photo a",function(e){e.preventDefault()}),jQuery(document.body).on("click",".um-photo-modal",function(e){e.preventDefault();e=jQuery(this).attr("data-src");return um_new_modal("um_view_photo","fit",!0,e),!1}),jQuery(document.body).on("click",".um-reset-profile-photo",function(e){let t=jQuery(this);var r=t.data("user_id"),u=t.parents("ul").find('.um-manual-trigger[data-parent=".um-profile-photo"]'),i=u.data("alt_text");return u.data("alt_text",u.text()).text(i),jQuery(".um-profile-photo-img img").attr("src",t.data("default_src")),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_profile_photo",metakey:"profile_photo",user_id:r,nonce:um_scripts.nonce},success:function(){t.removeClass("um-is-visible").hide()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("click",".um-reset-cover-photo",function(e){var t=jQuery(this);return jQuery(".um-cover-overlay").hide(),jQuery(".um-cover-e").html(''),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()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("change keyup","#um-meta-bio",function(){if(void 0!==jQuery(this).val()){var t=jQuery(this).data("character-limit"),r=jQuery(this).data("html");let e=t-jQuery(this).val().length;e=(e=1===parseInt(r)?t-jQuery(this).val().replace(/(<([^>]+)>)/gi,"").length:e)<0?0:e,jQuery("span.um-meta-bio-character span.um-bio-limit").text(e);r=e<5?"red":"";jQuery("span.um-meta-bio-character").css("color",r)}}),jQuery("#um-meta-bio").trigger("change"),jQuery(".um-profile form").each(function(){let t=jQuery(this).data("description_key");jQuery(this).find('textarea[name="'+t+'"]').length&&jQuery(document.body).on("change input",'textarea[name="'+t+'"]',function(e){jQuery(this).parents("form").find('textarea[name="'+t+'"]').each(function(){jQuery(this).val(e.currentTarget.value),jQuery("#um-meta-bio")[0]!==e.currentTarget&&jQuery("#um-meta-bio")[0]===jQuery(this)[0]&&jQuery(this).trigger("change")})})}),jQuery(".um-profile-edit a.um_delete-item").on("click",function(e){if(e.preventDefault(),!confirm(wp.i18n.__("Are you sure that you want to delete this user?","ultimate-member")))return!1}),jQuery(".um-profile-nav a").on("touchend",function(e){jQuery(e.currentTarget).trigger("click")})}); \ No newline at end of file diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php index dea06397..03d01c23 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -883,14 +883,15 @@ function um_profile_header_cover_area( $args ) { do_action( 'um_cover_area_content', um_profile_id() ); if ( true === UM()->fields()->editing ) { - $hide_remove = um_user( 'cover_photo' ) ? false : ' style="display:none;"'; + $hide_remove = um_user( 'cover_photo' ) ? '' : ' style="display:none;"'; - $text = ! um_user( 'cover_photo' ) ? __( 'Upload a cover photo', 'ultimate-member' ) : __( 'Change cover photo', 'ultimate-member' ) ; + $text = ! um_user( 'cover_photo' ) ? __( 'Upload a cover photo', 'ultimate-member' ) : __( 'Change cover photo', 'ultimate-member' ) ; + $alt_text = um_user( 'cover_photo' ) ? __( 'Upload a cover photo', 'ultimate-member' ) : __( 'Change cover photo', 'ultimate-member' ) ; $items = array( - '' . $text . '', - '' . __( 'Remove', 'ultimate-member' ) . '', - '' . __( 'Cancel', 'ultimate-member' ) . '', + '' . esc_html( $text ) . '', + '' . esc_html__( 'Remove cover photo', 'ultimate-member' ) . '', + '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', ); $items = apply_filters( 'um_cover_area_content_dropdown_items', $items, um_profile_id() ); @@ -901,8 +902,8 @@ function um_profile_header_cover_area( $args ) { if ( ! isset( UM()->user()->cannot_edit ) && ! um_user( 'cover_photo' ) ) { $items = array( - '' . __( 'Upload a cover photo', 'ultimate-member' ) . '', - '' . __( 'Cancel', 'ultimate-member' ) . '', + '' . esc_html__( 'Upload a cover photo', 'ultimate-member' ) . '', + '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', ); $items = apply_filters( 'um_cover_area_content_dropdown_items', $items, um_profile_id() ); @@ -1086,8 +1087,9 @@ function um_profile_header( $args ) { if ( ! um_profile( 'profile_photo' ) ) { // has profile photo $items = array( - '' . __( 'Upload photo', 'ultimate-member' ) . '', - '' . __( 'Cancel', 'ultimate-member' ) . '', + '' . esc_html__( 'Upload photo', 'ultimate-member' ) . '', + '', + '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', ); /** @@ -1118,9 +1120,9 @@ function um_profile_header( $args ) { } elseif ( true === UM()->fields()->editing ) { $items = array( - '' . __( 'Change photo', 'ultimate-member' ) . '', - '' . __( 'Remove photo', 'ultimate-member' ) . '', - '' . __( 'Cancel', 'ultimate-member' ) . '', + '' . esc_html__( 'Change photo', 'ultimate-member' ) . '', + '' . esc_html__( 'Remove photo', 'ultimate-member' ) . '', + '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', ); /** From fce490f54bf6f36da47f28a058591a4610ad2ebf Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 29 Jan 2025 16:43:05 +0200 Subject: [PATCH 4/5] * update dropdown items texts on cover photo change/remove; * WPCS; --- assets/js/um-modal.js | 18 ++ assets/js/um-modal.min.js | 2 +- assets/js/um-profile.js | 19 +- assets/js/um-profile.min.js | 2 +- includes/core/um-actions-profile.php | 265 +++++++++++++-------------- 5 files changed, 157 insertions(+), 149 deletions(-) diff --git a/assets/js/um-modal.js b/assets/js/um-modal.js index 37d8e46e..d7792beb 100644 --- a/assets/js/um-modal.js +++ b/assets/js/um-modal.js @@ -152,11 +152,29 @@ jQuery(document).ready(function() { $dropdown.find('.um-reset-profile-photo').addClass('um-is-visible').show(); } + + if ( ! jQuery('.um').hasClass('um-editing') ) { + $dropdown.remove(); + } } else if ( key === 'cover_photo' ) { jQuery('.um-cover-e').empty().html(''); + + let $dropdown = jQuery('.um-cover .um-dropdown'); + if ( ! $dropdown.find('.um-reset-cover-photo').hasClass('um-is-visible') ) { + let $dropdownItem = $dropdown.find('.um-manual-trigger[data-parent=".um-cover"]'); + let altText = $dropdownItem.data('alt_text'); + $dropdownItem.data( 'alt_text', $dropdownItem.text() ).text( altText ); + + $dropdown.find('.um-reset-cover-photo').addClass('um-is-visible').show(); + } + if ( jQuery('.um').hasClass('um-editing') ) { jQuery('.um-cover-overlay').show(); + } else { + $dropdown.remove(); } + + um_responsive(); } jQuery('.um-single-image-preview[data-key='+key+']').fadeIn().find('img').attr('src', response.data.image.source_url + "?"+d.getTime()); diff --git a/assets/js/um-modal.min.js b/assets/js/um-modal.min.js index 9f97c0b0..152b2e1f 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:not(:has(.um-form)) a',function(e){return e.preventDefault(),!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(),a=(um_remove_modal(),jQuery(".um-single-file-preview[data-key="+e+"]").fadeIn().html(a),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(a)}),jQuery(document).on("click",".um-finish-upload.image:not(.disabled)",function(){var r,e,u=jQuery(this),d=jQuery(this).attr("data-key"),a=jQuery(this).parents(".um-modal-body").find(".um-single-image-preview"),t=a.find("img").attr("src"),a=a.find("img").data("file"),i=0,m=(jQuery(this).parents("#um_upload_single").data("user_id")&&(i=jQuery(this).parents("#um_upload_single").data("user_id")),0),n="";1!==jQuery('div.um-field-image[data-key="'+d+'"]').length?console.warn(wp.i18n.__("UM Warning: No field associated with image uploader.","ultimate-member")):(m=(e=jQuery('div.um-field-image[data-key="'+d+'"]').closest(".um-form")).data("form_id")||e.find('input[name="form_id"]').val(),n=e.data("mode"),0'),jQuery(".um").hasClass("um-editing"))&&jQuery(".um-cover-overlay").show(),jQuery(".um-single-image-preview[data-key="+d+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+r.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find(".um-btn-auto-width").html(u.attr("data-change")),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(r=new Date,jQuery(".um-single-image-preview[data-key="+d+"]").fadeIn().find("img").attr("src",t+"?"+r.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find(".um-btn-auto-width").html(u.attr("data-change")),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find("input[type=hidden]").val(a)))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";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'),um_responsive(),(a=jQuery(".um-cover .um-dropdown")).find(".um-reset-cover-photo").hasClass("um-is-visible")||(i=(t=a.find('.um-manual-trigger[data-parent=".um-cover"]')).data("alt_text"),t.data("alt_text",t.text()).text(i),a.find(".um-reset-cover-photo").addClass("um-is-visible").show()),jQuery(".um").hasClass("um-editing")?jQuery(".um-cover-overlay").show():a.remove()),jQuery(".um-single-image-preview[data-key="+d+"]").fadeIn().find("img").attr("src",e.data.image.source_url+"?"+r.getTime()),um_remove_modal(),jQuery("img.cropper-invisible").remove(),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find(".um-btn-auto-width").html(u.attr("data-change")),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find('input[type="hidden"]').val(e.data.image.filename))}})):(r=new Date,jQuery(".um-single-image-preview[data-key="+d+"]").fadeIn().find("img").attr("src",t+"?"+r.getTime()),um_remove_modal(),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find(".um-btn-auto-width").html(u.attr("data-change")),jQuery(".um-single-image-preview[data-key="+d+"]").parents(".um-field").find("input[type=hidden]").val(a)))}),jQuery(document.body).on("click",'a[data-modal^="um_"], span[data-modal^="um_"]',function(e){var a=jQuery(this).attr("data-modal"),t="normal";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-cover-e').html(''); 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( response ) { - obj.hide(); + success: function() { + $obj.removeClass('um-is-visible').hide(); } }); diff --git a/assets/js/um-profile.min.js b/assets/js/um-profile.min.js index 2a679d6e..8875a363 100644 --- a/assets/js/um-profile.min.js +++ b/assets/js/um-profile.min.js @@ -1 +1 @@ -jQuery(document).ready(function(){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-profile.um-viewing .um-profile-body").find(".um-row-heading,.um-row").remove(),jQuery(".um-profile-note").show()),jQuery(document.body).on("click",".um-profile-save",function(e){return e.preventDefault(),jQuery(this).parents(".um.um-profile.um-editing").find("form").trigger("submit"),!1}),jQuery(document.body).on("click",".um-profile-edit-a",function(e){jQuery(this).addClass("active")}),jQuery(document.body).on("click",".um-cover a.um-cover-add, .um-photo a",function(e){e.preventDefault()}),jQuery(document.body).on("click",".um-photo-modal",function(e){e.preventDefault();e=jQuery(this).attr("data-src");return um_new_modal("um_view_photo","fit",!0,e),!1}),jQuery(document.body).on("click",".um-reset-profile-photo",function(e){let t=jQuery(this);var r=t.data("user_id"),u=t.parents("ul").find('.um-manual-trigger[data-parent=".um-profile-photo"]'),i=u.data("alt_text");return u.data("alt_text",u.text()).text(i),jQuery(".um-profile-photo-img img").attr("src",t.data("default_src")),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_profile_photo",metakey:"profile_photo",user_id:r,nonce:um_scripts.nonce},success:function(){t.removeClass("um-is-visible").hide()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("click",".um-reset-cover-photo",function(e){var t=jQuery(this);return jQuery(".um-cover-overlay").hide(),jQuery(".um-cover-e").html(''),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()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("change keyup","#um-meta-bio",function(){if(void 0!==jQuery(this).val()){var t=jQuery(this).data("character-limit"),r=jQuery(this).data("html");let e=t-jQuery(this).val().length;e=(e=1===parseInt(r)?t-jQuery(this).val().replace(/(<([^>]+)>)/gi,"").length:e)<0?0:e,jQuery("span.um-meta-bio-character span.um-bio-limit").text(e);r=e<5?"red":"";jQuery("span.um-meta-bio-character").css("color",r)}}),jQuery("#um-meta-bio").trigger("change"),jQuery(".um-profile form").each(function(){let t=jQuery(this).data("description_key");jQuery(this).find('textarea[name="'+t+'"]').length&&jQuery(document.body).on("change input",'textarea[name="'+t+'"]',function(e){jQuery(this).parents("form").find('textarea[name="'+t+'"]').each(function(){jQuery(this).val(e.currentTarget.value),jQuery("#um-meta-bio")[0]!==e.currentTarget&&jQuery("#um-meta-bio")[0]===jQuery(this)[0]&&jQuery(this).trigger("change")})})}),jQuery(".um-profile-edit a.um_delete-item").on("click",function(e){if(e.preventDefault(),!confirm(wp.i18n.__("Are you sure that you want to delete this user?","ultimate-member")))return!1}),jQuery(".um-profile-nav a").on("touchend",function(e){jQuery(e.currentTarget).trigger("click")})}); \ No newline at end of file +jQuery(document).ready(function(){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-profile.um-viewing .um-profile-body").find(".um-row-heading,.um-row").remove(),jQuery(".um-profile-note").show()),jQuery(document.body).on("click",".um-profile-save",function(e){return e.preventDefault(),jQuery(this).parents(".um.um-profile.um-editing").find("form").trigger("submit"),!1}),jQuery(document.body).on("click",".um-profile-edit-a",function(e){jQuery(this).addClass("active")}),jQuery(document.body).on("click",".um-cover a.um-cover-add, .um-photo a",function(e){e.preventDefault()}),jQuery(document.body).on("click",".um-photo-modal",function(e){e.preventDefault();e=jQuery(this).attr("data-src");return um_new_modal("um_view_photo","fit",!0,e),!1}),jQuery(document.body).on("click",".um-reset-profile-photo",function(e){let t=jQuery(this);var r=t.data("user_id"),u=t.parents("ul").find('.um-manual-trigger[data-parent=".um-profile-photo"]'),i=u.data("alt_text");return u.data("alt_text",u.text()).text(i),jQuery(".um-profile-photo-img img").attr("src",t.data("default_src")),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_profile_photo",user_id:r,nonce:um_scripts.nonce},success:function(){t.removeClass("um-is-visible").hide()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("click",".um-reset-cover-photo",function(e){let t=jQuery(this);var r=t.data("user_id"),u=t.parents("ul").find('.um-manual-trigger[data-parent=".um-cover"]'),i=u.data("alt_text");return u.data("alt_text",u.text()).text(i),jQuery(".um-cover-overlay").hide(),jQuery(".um-cover-e").html(''),um_responsive(),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_cover_photo",user_id:r,nonce:um_scripts.nonce},success:function(){t.removeClass("um-is-visible").hide()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("change keyup","#um-meta-bio",function(){if(void 0!==jQuery(this).val()){var t=jQuery(this).data("character-limit"),r=jQuery(this).data("html");let e=t-jQuery(this).val().length;e=(e=1===parseInt(r)?t-jQuery(this).val().replace(/(<([^>]+)>)/gi,"").length:e)<0?0:e,jQuery("span.um-meta-bio-character span.um-bio-limit").text(e);r=e<5?"red":"";jQuery("span.um-meta-bio-character").css("color",r)}}),jQuery("#um-meta-bio").trigger("change"),jQuery(".um-profile form").each(function(){let t=jQuery(this).data("description_key");jQuery(this).find('textarea[name="'+t+'"]').length&&jQuery(document.body).on("change input",'textarea[name="'+t+'"]',function(e){jQuery(this).parents("form").find('textarea[name="'+t+'"]').each(function(){jQuery(this).val(e.currentTarget.value),jQuery("#um-meta-bio")[0]!==e.currentTarget&&jQuery("#um-meta-bio")[0]===jQuery(this)[0]&&jQuery(this).trigger("change")})})}),jQuery(".um-profile-edit a.um_delete-item").on("click",function(e){if(e.preventDefault(),!confirm(wp.i18n.__("Are you sure that you want to delete this user?","ultimate-member")))return!1}),jQuery(".um-profile-nav a").on("touchend",function(e){jQuery(e.currentTarget).trigger("click")})}); \ No newline at end of file diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php index 03d01c23..1512fd88 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -842,150 +842,141 @@ add_action( 'wp_head', 'um_profile_dynamic_meta_desc', 20 ); * @param $args */ function um_profile_header_cover_area( $args ) { - if ( isset( $args['cover_enabled'] ) && $args['cover_enabled'] == 1 ) { + if ( empty( $args['cover_enabled'] ) ) { + return; + } - $default_cover = UM()->options()->get( 'default_cover' ); + $default_cover = UM()->options()->get( 'default_cover' ); + $user_cover = um_user( 'cover_photo' ); - $overlay = ' + $cover_wrapper_classes = array( 'um-cover' ); + if ( $user_cover || ! empty( $default_cover['url'] ) ) { + $cover_wrapper_classes[] = 'has-cover'; + } + ?> +
+ + */ + do_action( 'um_cover_area_content', um_profile_id() ); + if ( true === UM()->fields()->editing ) { + + $hide_remove = ' style="display:none;"'; + $remove_classes = array( 'um-reset-cover-photo' ); + if ( $user_cover ) { + $hide_remove = ''; + $remove_classes[] = 'um-is-visible'; + } + + $text = ! $user_cover ? __( 'Upload a cover photo', 'ultimate-member' ) : __( 'Change cover photo', 'ultimate-member' ) ; + $alt_text = $user_cover ? __( 'Upload a cover photo', 'ultimate-member' ) : __( 'Change cover photo', 'ultimate-member' ) ; + + $items = array( + '' . esc_html( $text ) . '', + '' . esc_html__( 'Remove cover photo', 'ultimate-member' ) . '', + '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', + ); + + $items = apply_filters( 'um_cover_area_content_dropdown_items', $items, um_profile_id() ); + + UM()->profile()->new_ui( 'bc', 'div.um-cover', 'click', $items ); + } elseif ( ! isset( UM()->user()->cannot_edit ) && ! $user_cover ) { + $items = array( + '' . esc_html__( 'Upload a cover photo', 'ultimate-member' ) . '', + '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', + ); + + $items = apply_filters( 'um_cover_area_content_dropdown_items', $items, um_profile_id() ); + + UM()->profile()->new_ui( 'bc', 'div.um-cover', 'click', $items ); + } + + UM()->fields()->add_hidden_field( 'cover_photo' ); + ?> +
+ + * @example + * + */ + $size = apply_filters( 'um_mobile_cover_photo', $size ); + } + + echo um_user( 'cover_photo', $size ); + + } elseif ( ! empty( $default_cover['url'] ) ) { + + echo ''; + + } elseif ( ! isset( UM()->user()->cannot_edit ) ) { + ?> + + +
+ fields()->editing ) { ?> + - ' . __( 'Change your cover photo', 'ultimate-member' ) . ' + - '; - - ?> - -
- - - */ - do_action( 'um_cover_area_content', um_profile_id() ); - if ( true === UM()->fields()->editing ) { - - $hide_remove = um_user( 'cover_photo' ) ? '' : ' style="display:none;"'; - - $text = ! um_user( 'cover_photo' ) ? __( 'Upload a cover photo', 'ultimate-member' ) : __( 'Change cover photo', 'ultimate-member' ) ; - $alt_text = um_user( 'cover_photo' ) ? __( 'Upload a cover photo', 'ultimate-member' ) : __( 'Change cover photo', 'ultimate-member' ) ; - - $items = array( - '' . esc_html( $text ) . '', - '' . esc_html__( 'Remove cover photo', 'ultimate-member' ) . '', - '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', - ); - - $items = apply_filters( 'um_cover_area_content_dropdown_items', $items, um_profile_id() ); - - UM()->profile()->new_ui( 'bc', 'div.um-cover', 'click', $items ); - } else { - - if ( ! isset( UM()->user()->cannot_edit ) && ! um_user( 'cover_photo' ) ) { - - $items = array( - '' . esc_html__( 'Upload a cover photo', 'ultimate-member' ) . '', - '' . esc_html__( 'Cancel', 'ultimate-member' ) . '', - ); - - $items = apply_filters( 'um_cover_area_content_dropdown_items', $items, um_profile_id() ); - - UM()->profile()->new_ui( 'bc', 'div.um-cover', 'click', $items ); - - } - - } - - UM()->fields()->add_hidden_field( 'cover_photo' ); ?> - -
- - - * @example - * - */ - $size = apply_filters( 'um_mobile_cover_photo', $size ); - } - - echo um_user( 'cover_photo', $size ); - - } elseif ( $default_cover && $default_cover['url'] ) { - - $default_cover = $default_cover['url']; - - echo ''; - - } else { - - if ( ! isset( UM()->user()->cannot_edit ) ) { ?> - - - - - -
- - - -
- - + +
+ Date: Wed, 29 Jan 2025 16:44:29 +0200 Subject: [PATCH 5/5] * update dropdown items texts on cover photo change/remove; * WPCS; --- includes/core/um-actions-profile.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php index 1512fd88..743d5de2 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -855,7 +855,7 @@ function um_profile_header_cover_area( $args ) { } ?>
+ data-user_id="" data-ratio=""> ' . esc_html( $text ) . '', @@ -898,7 +898,7 @@ function um_profile_header_cover_area( $args ) { $items = apply_filters( 'um_cover_area_content_dropdown_items', $items, um_profile_id() ); UM()->profile()->new_ui( 'bc', 'div.um-cover', 'click', $items ); - } elseif ( ! isset( UM()->user()->cannot_edit ) && ! $user_cover ) { + } elseif ( ! $user_cover && ! isset( UM()->user()->cannot_edit ) ) { $items = array( '' . esc_html__( 'Upload a cover photo', 'ultimate-member' ) . '', '' . esc_html__( 'Cancel', 'ultimate-member' ) . '',