From 27135ed9886f8fa3da0d009626caace999f3ea08 Mon Sep 17 00:00:00 2001 From: nikitasinelnikov Date: Wed, 4 Sep 2019 14:54:03 +0300 Subject: [PATCH] - new member directory; --- assets/css/um-members.css | 4 - assets/js/um-members.js | 2 +- assets/js/um-members.min.js | 2 +- includes/class-functions.php | 10 ++ includes/core/class-member-directory.php | 126 +++++++++++------------ includes/um-deprecated-functions.php | 2 +- templates/members-grid.php | 2 + templates/members-list.php | 6 +- templates/members.php | 8 +- 9 files changed, 88 insertions(+), 74 deletions(-) diff --git a/assets/css/um-members.css b/assets/css/um-members.css index 09e4366d..fd9dd53d 100644 --- a/assets/css/um-members.css +++ b/assets/css/um-members.css @@ -373,10 +373,6 @@ a.um-edit-profile-btn { } -.um-member a.um-friend-btn:before {content: "\f234"} -.um-member a.um-unfriend-btn:before {content: "\f235"} - - /* NEW STYLES FOR VIEW TYPE LIST*/ .um-directory .um-member-directory-header { diff --git a/assets/js/um-members.js b/assets/js/um-members.js index abd74176..e6cb0026 100644 --- a/assets/js/um-members.js +++ b/assets/js/um-members.js @@ -168,6 +168,7 @@ function um_ajax_get_members( directory, args ) { search: search, sorting: sorting, gmt_offset: gmt_hours, + post_refferer: directory.data('base-post'), nonce: um_scripts.nonce }; @@ -237,7 +238,6 @@ function um_build_template( directory, data ) { var layout = directory.data('view_type'); var template = wp.template( 'um-member-' + layout ); - directory.find('.um-members-grid, .um-members-list').remove(); directory.find('.um-members-wrapper').prepend( template( data ) ); directory.addClass('um-loaded'); diff --git a/assets/js/um-members.min.js b/assets/js/um-members.min.js index c02008c1..3791f393 100644 --- a/assets/js/um-members.min.js +++ b/assets/js/um-members.min.js @@ -1 +1 @@ -var um_members_directory_busy=[],um_member_directories=[],um_member_directory_last_data=[];function um_parse_current_url(){var t={},a=window.location.search.substring(1).split("&");return jQuery.each(a,function(e){var r=a[e].split("=");t[r[0]]=r[1]}),t}function um_get_data_for_directory(e,r){var t=um_members_get_hash(e),a={},i=um_parse_current_url();if(jQuery.each(i,function(e){-1!==e.indexOf("_"+t)&&""!==i[e]&&(a[e.replace("_"+t,"")]=i[e])}),r){if(void 0!==a[r])try{a[r]=decodeURI(a[r])}catch(e){console.error(e)}return a[r]}return a}function um_set_url_from_data(e,r,t){var a=um_members_get_hash(e),i=um_get_data_for_directory(e),m={};""!==t&&(m[r+"_"+a]=t),jQuery.each(i,function(e){r===e?""!==t&&(m[e+"_"+a]=t):m[e+"_"+a]=i[e]});var _=[];jQuery.each(m,function(e){_.push(e+"="+m[e])});var u="?"+_.join("&");window.history.pushState("string","UM Member Directory",window.location.origin+window.location.pathname+u)}function um_members_get_hash(e){return e.data("hash")}function um_is_directory_busy(e){var r=um_members_get_hash(e);return void 0!==um_members_directory_busy[r]&&um_members_directory_busy[r]}function um_members_show_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!0,e.find(".um-members-overlay").show()}function um_members_hide_preloader(e){um_members_directory_busy[um_members_get_hash(e)]=!1,e.find(".um-members-overlay").hide()}function um_set_range_label(e,r){var t=e.siblings(".um-slider-range").data("placeholder");t=r?t.replace("{min_range}",r.values[0]).replace("{max_range}",r.values[1]).replace("{field_label}",e.siblings(".um-slider-range").data("label")):t.replace("{min_range}",e.slider("values",0)).replace("{max_range}",e.slider("values",1)).replace("{field_label}",e.siblings(".um-slider-range").data("label")),e.siblings(".um-slider-range").html(t),e.siblings(".um_range_min").val(e.slider("values",0)),e.siblings(".um_range_max").val(e.slider("values",1))}function um_get_search(e){return e.find(".um-search-line").length?e.find(".um-search-line").val():""}function um_get_sort(e){return e.find(".um-member-directory-sorting-options").length?e.find(".um-member-directory-sorting-options").val():""}function um_get_current_page(e){var r=e.data("page");return r&&void 0!==r||(r=1),r}function um_ajax_get_members(m,e){var t=um_members_get_hash(m),r=um_get_search(m),a=um_get_current_page(m),i=um_get_sort(m),_=((new Date).getTimezoneOffset(),{directory_id:t,page:a,search:r,sorting:i,nonce:um_scripts.nonce});m.find(".um-search-filter").length&&m.find(".um-search-filter").each(function(){var e=jQuery(this);if(e.find(".um-slider").length){var r=e.find(".um-slider").data("field_name"),t=um_get_data_for_directory(m,"filter_"+r+"_from"),a=um_get_data_for_directory(m,"filter_"+r+"_to");void 0!==i&&(_[r]=[t,a])}else if(e.find(".um-datepicker-filter").length){r=e.find(".um-datepicker-filter").data("filter_name"),t=um_get_data_for_directory(m,"filter_"+r+"_from"),a=um_get_data_for_directory(m,"filter_"+r+"_to");void 0!==i&&(_[r]=[t,a])}else if(e.find(".um-timepicker-filter").length){r=e.find(".um-timepicker-filter").data("filter_name"),t=um_get_data_for_directory(m,"filter_"+r+"_from"),a=um_get_data_for_directory(m,"filter_"+r+"_to");void 0!==i&&(_[r]=[t,a])}else{r=e.find("select").attr("name");var i=um_get_data_for_directory(m,"filter_"+r);void 0!==i&&(_[r]=i.split("||"))}}),wp.ajax.send("um_get_members",{data:_,success:function(e){um_member_directory_last_data[t]=e,um_build_template(m,e),um_members_hide_preloader(m);var r=wp.template("um-members-pagination");m.find(".um-members-pagination-box").html(r(e)),m.data("total_pages",e.pagination.total_pages),jQuery(document).trigger("um_members_rendered")},error:function(e){console.log(e)}})}function um_build_template(e,r){var t=e.data("view_type"),a=wp.template("um-member-"+t);e.find(".um-members-grid, .um-members-list").remove(),e.find(".um-members-wrapper").prepend(a(r)),e.addClass("um-loaded"),e.find(".um-members").length&&(UM_Member_Grid(e.find(".um-members")),jQuery(window).trigger("resize")),jQuery(document).trigger("um_build_template",[e,r]),jQuery(window).trigger("resize")}function UM_Member_Grid(e){e.find(".um-member").length&&e.imagesLoaded(function(){e.masonry({itemSelector:".um-member",columnWidth:".um-member",gutter:".um-gutter-sizer"}).on("layoutComplete",function(e,r){jQuery(document).trigger("um_grid_initialized",[e,r])})})}function um_change_tag(d){var n=[];d.find(".um-search-filter").each(function(){var t,a,_,i=jQuery(this);if(i.find("input.um-datepicker-filter").length)_="datepicker",i.find("input.um-datepicker-filter").each(function(){if("to"!==jQuery(this).data("range")){var e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(d,"filter_"+e+"_from"),t=um_get_data_for_directory(d,"filter_"+e+"_to");if(void 0!==r||void 0!==t){var a,i=jQuery(this).val(),m=d.find('input.um-datepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val();""!==i&&""!==m?a=i+" - "+m:""===i?a="before "+m:""===m&&(a="since "+i),n.push({name:e,label:jQuery(this).data("filter-label"),value_label:a,value:[r,t],type:_})}}});else if(i.find("input.um-timepicker-filter").length)_="timepicker",i.find("input.um-timepicker-filter").each(function(){if("to"!==jQuery(this).data("range")){var e=jQuery(this).data("filter_name"),r=um_get_data_for_directory(d,"filter_"+e+"_from"),t=um_get_data_for_directory(d,"filter_"+e+"_to");if(void 0!==r||void 0!==t){var a,i=jQuery(this).val(),m=d.find('input.um-timepicker-filter[data-range="to"][data-filter_name="'+e+'"]').val();""!==i&&""!==m?a=i+" - "+m:""===i?a="before "+m:""===m&&(a="since "+i),n.push({name:e,label:jQuery(this).data("filter-label"),value_label:a,value:[r,t],type:_})}}});else if(i.find("select").length){_="select",t=i.find("select").attr("name"),a=i.find("select").data("placeholder");var m=um_get_data_for_directory(d,"filter_"+t);m=void 0===m?[]:m.split("||"),jQuery.each(m,function(e){var r=i.find('select option[value="'+m[e]+'"]').data("value_label");n.push({name:t,label:a,value_label:r,value:m[e],type:_})})}else if(i.find("div.ui-slider").length){_="slider",t=i.find("div.ui-slider").data("field_name");var e=um_get_data_for_directory(d,"filter_"+t+"_from"),r=um_get_data_for_directory(d,"filter_"+t+"_to");if(void 0===e&&void 0===r)return;a=i.find("div.um-slider-range").data("label");var u=i.find("div.um-slider-range").data("placeholder").replace("{min_range}",e).replace("{max_range}",r).replace("{field_label}",i.find("div.um-slider-range").data("label"));n.push({name:t,label:a,value_label:u,value:[e,r],type:_})}}),d.find(".um-members-filter-tag").remove();var e=wp.template("um-members-filtered-line");d.find(".um-filtered-line").prepend(e({filters:n})),0filter_types[ $filter ] ) ) { return ''; @@ -485,8 +487,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { break; } case 'slider': { - $range = $this->slider_filters_range( $filter ); - $placeholder = $this->slider_range_placeholder( $filter ); + $range = $this->slider_filters_range( $filter, $directory_data ); + $placeholder = $this->slider_range_placeholder( $filter, $attrs ); if ( $range ) { ?> @@ -565,11 +567,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { /** - * @param $filter + * @param string $filter + * @param array $directory_data * * @return mixed */ - function slider_filters_range( $filter ) { + function slider_filters_range( $filter, $directory_data ) { switch ( $filter ) { @@ -588,7 +591,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $range = array( min( $meta ), max( $meta ) ); } - $range = apply_filters( "um_member_directory_filter_{$filter}_slider", $range ); + $range = apply_filters( "um_member_directory_filter_{$filter}_slider", $range, $directory_data ); break; } @@ -617,21 +620,29 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { * * @return mixed */ - function slider_range_placeholder( $filter ) { + function slider_range_placeholder( $filter, $attrs ) { switch ( $filter ) { default: { - $label = ucwords( str_replace(array('um_', '_'), array('', ' '), $filter) ); - $placeholder = apply_filters( "um_member_directory_filter_{$filter}_slider_range_placeholder", "$label: {min_range} - {max_range}" ); + $label = ucwords( str_replace( array( 'um_', '_' ), array( '', ' ' ), $filter ) ); + $placeholder = apply_filters( 'um_member_directory_filter_slider_range_placeholder', false, $filter ); + + if ( ! $placeholder ) { + switch ( $attrs['type'] ) { + default: + $placeholder = "$label: {min_range} - {max_range}"; + break; + case 'rating': + $placeholder = "$label: {min_range} - {max_range}" . __( ' stars', 'ultimate-member' ); + break; + } + } + break; } case 'birth_date': { $placeholder = __( 'Age: {min_range} - {max_range} years old', 'ultimate-member' ); break; } - case 'user_rating': { - $placeholder = __( 'User Rating: {min_range} - {max_range} points', 'ultimate-member' ); - break; - } } return $placeholder; @@ -860,7 +871,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { // add roles to appear in directory if ( ! empty( $directory_data['roles'] ) ) { //since WP4.4 use 'role__in' argument - $this->query_args['role__in'] = $directory_data['roles']; + $this->query_args['role__in'] = maybe_unserialize( $directory_data['roles'] ); } } @@ -1290,12 +1301,10 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { case 'slider': $field_query = array( - array( - 'key' => $field, - 'value' => $value, - 'compare' => 'BETWEEN', - 'inclusive' => true, - ) + 'key' => $field, + 'value' => $value, + 'compare' => 'BETWEEN', + 'inclusive' => true, ); break; @@ -1309,31 +1318,28 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $from_date = (int) min( $value ) + ( $offset * HOUR_IN_SECONDS ); // client time zone offset $to_date = (int) max( $value ) + ( $offset * HOUR_IN_SECONDS ) + DAY_IN_SECONDS - 1; // time 23:59 $field_query = array( - array( - 'key' => $field, - 'value' => array( $from_date, $to_date ), - 'compare' => 'BETWEEN', - ) + 'key' => $field, + 'value' => array( $from_date, $to_date ), + 'compare' => 'BETWEEN', ); break; case 'timepicker': $field_query = array( - array( - 'key' => $field, - 'value' => $value, - 'compare' => 'BETWEEN', - 'type' => 'TIME', - 'inclusive' => true, - ) + 'key' => $field, + 'value' => $value, + 'compare' => 'BETWEEN', + 'type' => 'TIME', + 'inclusive' => true, ); break; } + } - if ( ! empty( $field_query ) ) { + if ( ! empty( $field_query ) && $field_query !== true ) { $this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $field_query ) ); } @@ -1521,6 +1527,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { 'hook_after_user_name' => preg_replace( '/^\s+/im', '', $hook_after_user_name ), ); + $directory_data['tagline_fields'] = maybe_unserialize( $directory_data['tagline_fields'] ); + if ( $directory_data['show_tagline'] && is_array( $directory_data['tagline_fields'] ) ) { foreach ( $directory_data['tagline_fields'] as $key ) { if ( ! $key ) { @@ -1528,6 +1536,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { } $value = um_filtered_value( $key ); + if ( ! $value ) { continue; } @@ -1537,26 +1546,30 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { } if ( $directory_data['show_userinfo'] ) { - foreach ( $directory_data['reveal_fields'] as $key ) { - if ( ! $key ) { - continue; - } + $directory_data['reveal_fields'] = maybe_unserialize( $directory_data['reveal_fields'] ); - $value = um_filtered_value( $key ); - if ( ! $value ) { - continue; - } + if ( is_array( $directory_data['reveal_fields'] ) ) { + foreach ( $directory_data['reveal_fields'] as $key ) { + if ( ! $key ) { + continue; + } - $label = UM()->fields()->get_label( $key ); - if ( $key == 'role_select' || $key == 'role_radio' ) { - $label = strtr( $label, array( - ' (Dropdown)' => '', - ' (Radio)' => '' - ) ); - } + $value = um_filtered_value( $key ); + if ( ! $value ) { + continue; + } - $data_array[ "label_{$key}" ] = $label; - $data_array[ $key ] = $value; + $label = UM()->fields()->get_label( $key ); + if ( $key == 'role_select' || $key == 'role_radio' ) { + $label = strtr( $label, array( + ' (Dropdown)' => '', + ' (Radio)' => '' + ) ); + } + + $data_array[ "label_{$key}" ] = $label; + $data_array[ $key ] = $value; + } } if ( ! empty( $directory_data['show_social'] ) ) { @@ -1739,19 +1752,6 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $user_ids = apply_filters( 'um_prepare_user_results_array', $user_ids ); - - - - /* - * @todo generate user card data - */ - - - - - - - $sizes = UM()->options()->get( 'cover_thumb_sizes' ); $this->cover_size = UM()->mobile()->isTablet() ? $sizes[1] : $sizes[0]; diff --git a/includes/um-deprecated-functions.php b/includes/um-deprecated-functions.php index ae8b5031..7f3c8d3f 100644 --- a/includes/um-deprecated-functions.php +++ b/includes/um-deprecated-functions.php @@ -21,7 +21,7 @@ if ( ! defined( 'ABSPATH' ) ) { * @param string $replacement */ function um_deprecated_function( $function, $version, $replacement = null ) { - if ( is_ajax() ) { + if ( UM()->is_ajax() ) { do_action( 'deprecated_function_run', $function, $replacement, $version ); $log_string = "The {$function} function is deprecated since version {$version}."; $log_string .= $replacement ? " Replace with {$replacement}." : ''; diff --git a/templates/members-grid.php b/templates/members-grid.php index f52d9328..8b1f9bc2 100644 --- a/templates/members-grid.php +++ b/templates/members-grid.php @@ -27,6 +27,7 @@ @@ -41,6 +42,7 @@ 100 do_action( 'um_members_just_after_name_tmpl', $args ); ?> {{{user.hook_just_after_name}}} diff --git a/templates/members-list.php b/templates/members-list.php index 192d1efc..5b475f5f 100644 --- a/templates/members-list.php +++ b/templates/members-list.php @@ -18,6 +18,8 @@ @@ -32,7 +34,7 @@ + do_action( 'um_members_list_after_user_name_tmpl', $args ); ?> {{{user.hook_after_user_name}}} @@ -110,7 +112,7 @@ <# }); #> <# } #> - + {{{user.hook_just_after_name}}} diff --git a/templates/members.php b/templates/members.php index e56da642..fbf19b99 100644 --- a/templates/members.php +++ b/templates/members.php @@ -1,5 +1,7 @@ config()->core_directory_meta['members'] as $k => $v ) { @@ -59,6 +61,8 @@ if ( $args['enable_sorting'] ) { $sorting_options = array_intersect_key( $all_sorting_options, array_flip( $sorting_options ) ); } + $sorting_options = apply_filters( 'um_member_directory_pre_display_sorting', $sorting_options, $args ); + $sort_from_url = ( ! empty( $_GET[ 'sort_' . $unique_hash ] ) && in_array( $_GET[ 'sort_' . $unique_hash ], array_keys( $sorting_options ) ) ) ? $_GET[ 'sort_' . $unique_hash ] : $default_sorting; } @@ -117,7 +121,7 @@ UM()->get_template( 'members-header.php', '', $args, true ); UM()->get_template( 'members-pagination.php', '', $args, true ); ?>
@@ -205,7 +209,7 @@ UM()->get_template( 'members-pagination.php', '', $args, true ); ?>