- added text-type filters;

- added limitation for select-type filters for getting only exists options;
- added fixes for member directory styles;
This commit is contained in:
nikitasinelnikov
2019-11-20 17:07:38 +02:00
parent 97a8f41d8e
commit cc08e23bd2
12 changed files with 371 additions and 84 deletions
+26 -4
View File
@@ -107,7 +107,7 @@ body #content .um-directory a {
width: 100%;
top: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.8);
background: none;
z-index: 2; }
.um-directory .um-members-overlay .um-ajax-loading {
-webkit-transition: 0.1s opacity;
@@ -144,6 +144,8 @@ body #content .um-directory a {
align-items: stretch;
flex-wrap: nowrap;
width: 100%; }
.um-directory .um-member-directory-header .um-member-directory-header-row.um-member-directory-filters-bar {
padding: 0 0 10px 0; }
.um-directory .um-member-directory-header .um-member-directory-header-row:not(.um-member-directory-filters-bar) {
display: flex;
flex-direction: row;
@@ -172,9 +174,13 @@ body #content .um-directory a {
margin: 0 5px 0 0; }
.um-directory .um-member-directory-header .um-member-directory-header-row .um-member-directory-search-line label .um-search-line {
-webkit-appearance: textfield;
width: 100%; }
width: 100%;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box; }
.um-directory .um-member-directory-header .um-member-directory-header-row .um-member-directory-search-line .um-do-search {
min-width: 15%; }
min-width: 15%;
width: auto; }
.um-directory .um-member-directory-header .um-member-directory-header-row .um-member-directory-nav-line {
display: flex;
flex-direction: row;
@@ -279,6 +285,8 @@ body #content .um-directory a {
width: 100% !important; }
.um-directory .um-member-directory-header .um-member-directory-header-row .um-search .um-search-filter .um-s1 {
width: 100%; }
.um-directory .um-member-directory-header .um-member-directory-header-row .um-search .um-search-filter.um-text-filter-type input {
width: 100%; }
.um-directory .um-member-directory-header .um-member-directory-header-row .um-search .um-search-filter.um-slider-filter-type {
flex-direction: column;
align-items: stretch; }
@@ -595,7 +603,7 @@ body #content .um-directory a {
width: 100%;
padding: 15px;
margin: 0;
background: none;
background: #fff;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box; }
@@ -651,6 +659,8 @@ body #content .um-directory a {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box; }
.um-directory .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-container .um-member-card.no-photo {
width: 100%; }
.um-directory .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-container .um-member-card .um-member-card-content {
display: flex;
flex-direction: column;
@@ -803,6 +813,12 @@ body #content .um-directory a {
font-size: 28px;
height: 28px;
line-height: 28px; }
.um-directory .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer.no-photo.no-reveal .um-member-card-footer-buttons {
width: 100%; }
.um-directory .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer.no-photo:not(.no-reveal) .um-member-card-footer-buttons {
width: calc( 100% - 30px); }
.um-directory .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer.no-reveal:not(.no-photo) .um-member-card-footer-buttons {
width: calc( 100% - 125px); }
.um-directory .um-members-wrapper .um-members .um-members-none {
text-align: center;
font-size: 18px; }
@@ -918,6 +934,8 @@ body #content .um-directory a {
margin: 0 0 5px 0; }
.um-directory.uimob340 .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer .um-member-card-footer-buttons .um-members-list-footer-button-wrapper a.um-button {
width: 100% !important; }
.um-directory.uimob340 .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer.no-reveal:not(.no-photo) .um-member-card-footer-buttons {
width: calc( 100% - 70px); }
.um-directory.uimob340 .um-members-pagination-box .um-members-pagi {
display: none; }
.um-directory.uimob500 .um-member-directory-header .um-member-directory-header-row .um-member-directory-search-line {
@@ -954,6 +972,8 @@ body #content .um-directory a {
margin: 0 10px 0 0; }
.um-directory.uimob500 .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer .um-member-card-footer-buttons .um-members-list-footer-button-wrapper {
margin: 0 10px 5px 0; }
.um-directory.uimob500 .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer.no-reveal:not(.no-photo) .um-member-card-footer-buttons {
width: calc( 100% - 90px); }
.um-directory.uimob500 .um-members-pagination-box .um-members-pagi {
display: none; }
.um-directory.uimob800 .um-member-directory-header .um-member-directory-header-row .um-member-directory-search-line {
@@ -983,6 +1003,8 @@ body #content .um-directory a {
margin: 0 10px 0 0; }
.um-directory.uimob800 .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer .um-member-card-footer-buttons .um-members-list-footer-button-wrapper {
margin: 0 10px 5px 0; }
.um-directory.uimob800 .um-members-wrapper .um-members.um-members-list .um-member .um-member-card-footer.no-reveal:not(.no-photo) .um-member-card-footer-buttons {
width: calc( 100% - 100px); }
.um-directory.uimob960 .um-member-directory-header .um-search {
grid-template-columns: repeat(2, 1fr); }
.um-directory.uimob960 .um-members-wrapper .um-members.um-members-grid .um-gutter-sizer {
+5
View File
@@ -126,6 +126,7 @@ div.uimob800 .um-account-side li a.current:hover
}
.um .um-form input[type=text],
.um .um-form input[type=search],
.um .um-form input[type=tel],
.um .um-form input[type=number],
.um .um-form input[type=password],
@@ -145,6 +146,7 @@ div.uimob800 .um-account-side li a.current:hover
}
.um .um-form input[type=text]:focus,
.um .um-form input[type=search]:focus,
.um .um-form input[type=tel]:focus,
.um .um-form input[type=number]:focus,
.um .um-form input[type=password]:focus,
@@ -155,6 +157,7 @@ div.uimob800 .um-account-side li a.current:hover
}
.um .um-form input[type=text],
.um .um-form input[type=search],
.um .um-form input[type=tel],
.um .um-form input[type=number],
.um .um-form input[type=password],
@@ -166,6 +169,7 @@ div.uimob800 .um-account-side li a.current:hover
}
.um .um-form input[type=text]:focus,
.um .um-form input[type=search]:focus,
.um .um-form input[type=tel]:focus,
.um .um-form input[type=number]:focus,
.um .um-form input[type=password]:focus,
@@ -174,6 +178,7 @@ div.uimob800 .um-account-side li a.current:hover
}
.um .um-form input[type=text],
.um .um-form input[type=search],
.um .um-form input[type=tel],
.um .um-form input[type=password],
.um .um-form textarea
+2
View File
@@ -391,6 +391,7 @@ p.um-notice.warning a {
}
.um-form input[type=text],
.um-form input[type=search],
.um-form input[type=tel],
.um-form input[type=number],
.um-form input[type=password] {
@@ -418,6 +419,7 @@ p.um-notice.warning a {
}
.um-form input[type=text]:focus,
.um-form input[type=search]:focus,
.um-form input[type=tel]:focus,
.um-form input[type=number]:focus,
.um-form input[type=password]:focus,
+116 -7
View File
@@ -216,12 +216,18 @@ function um_ajax_get_members( directory, args ) {
if ( typeof value_from != 'undefined' || typeof value_to != 'undefined' ) {
request[ filter_name ] = [ value_from, value_to ];
}
} else {
} else if ( filter.find( 'select' ).length ) {
var filter_name = filter.find('select').attr('name');
var value = um_get_data_for_directory( directory, 'filter_' + filter_name );
if ( typeof value != 'undefined' ) {
request[ filter_name ] = value.split( '||' );
}
} else {
var filter_name = filter.find('input[type="text"]').attr('name');
var value = um_get_data_for_directory( directory, 'filter_' + filter_name );
if ( typeof value != 'undefined' ) {
request[ filter_name ] = value;
}
}
});
}
@@ -274,7 +280,9 @@ function um_build_template( directory, data ) {
var header_template = wp.template( 'um-members-header' );
directory.find('.um-members-intro').remove();
directory.find('.um-members-wrapper').prepend( header_template( data ) );
if ( typeof data.is_search != 'undefined' && data.is_search ) {
directory.find('.um-members-wrapper').prepend( header_template( data ) );
}
directory.addClass('um-loaded');
@@ -402,6 +410,21 @@ function um_get_filters_data( directory ) {
filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':filter_value[ i ], 'type':filter_type} );
});
} else if( filter.find('input[type="text"]').length ) {
filter_type = 'text';
filter_name = filter.find('input[type="text"]').attr('name');
filter_title = filter.find('input[type="text"]').attr('placeholder');
var filter_value = um_get_data_for_directory( directory, 'filter_' + filter_name );
if ( typeof filter_value == 'undefined' ) {
filter_value = '';
}
if ( filter_value != '' ) {
filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value, 'value':filter_value, 'type':filter_type} );
}
} else if( filter.find('div.ui-slider').length ) {
filter_type = 'slider';
@@ -433,7 +456,7 @@ function um_change_tag( directory ) {
directory.find('.um-members-filter-tag').remove();
var filtered_line = directory.find('.um-filtered-line');
if ( filtered_line.length ){
if ( filtered_line.length ) {
var filters_template = wp.template( 'um-members-filtered-line' );
filtered_line.prepend( filters_template( {'filters': filters_data} ) );
@@ -865,20 +888,101 @@ jQuery(document.body).ready( function() {
});
jQuery( document.body ).on( 'click', '.um-directory .um-members-filter-remove', function() {
jQuery( document.body ).on( 'blur', '.um-directory .um-search-filter input[type="text"]', function() {
var directory = jQuery(this).parents('.um-directory');
if ( um_is_directory_busy( directory ) || ! directory ) {
if ( um_is_directory_busy( directory ) ) {
return;
}
var current_value = jQuery(this).val();
var filter_name = jQuery(this).prop('name');
var url_value = um_get_data_for_directory( directory, 'filter_' + filter_name );
if ( typeof url_value == 'undefined' ) {
url_value = '';
}
if ( current_value === url_value ) {
return;
}
um_members_show_preloader( directory );
um_set_url_from_data( directory, 'filter_' + filter_name, current_value );
//set 1st page after filtration
directory.data( 'page', 1 );
um_set_url_from_data( directory, 'page', '' );
um_ajax_get_members( directory );
um_change_tag( directory );
directory.data( 'searched', 1 );
directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', false );
directory.find( '.um-member-directory-view-type' ).removeClass( 'um-disabled' );
});
//make search on Enter click
jQuery( document.body ).on( 'keypress', '.um-directory .um-search-filter input[type="text"]', function(e) {
if ( e.which === 13 ) {
var directory = jQuery(this).parents('.um-directory');
if ( um_is_directory_busy( directory ) ) {
return;
}
var current_value = jQuery(this).val();
var filter_name = jQuery(this).prop('name');
var url_value = um_get_data_for_directory( directory, 'filter_' + filter_name );
if ( typeof url_value == 'undefined' ) {
url_value = '';
}
if ( current_value === url_value ) {
return;
}
um_members_show_preloader( directory );
um_set_url_from_data( directory, 'filter_' + filter_name, current_value );
//set 1st page after filtration
directory.data( 'page', 1 );
um_set_url_from_data( directory, 'page', '' );
um_ajax_get_members( directory );
um_change_tag( directory );
directory.data( 'searched', 1 );
directory.find( '.um-member-directory-sorting-options' ).prop( 'disabled', false );
directory.find( '.um-member-directory-view-type' ).removeClass( 'um-disabled' );
}
});
jQuery( document.body ).on( 'click', '.um-directory .um-members-filter-remove', function() {
var directory = jQuery(this).parents('.um-directory');
if ( um_is_directory_busy(directory) || ! directory ) {
return;
}
um_members_show_preloader(directory);
var removeItem = jQuery(this).data('value');
var filter_name = jQuery(this).data('name');
var type = jQuery(this).data('type');
if ( type === 'select' ) {
if ( type === 'text' ) {
um_set_url_from_data( directory, 'filter_' + filter_name,'' );
jQuery( '.um-search-filter input[name="' + filter_name + '"]' ).val('');
} else if ( type === 'select' ) {
var current_value = um_get_data_for_directory( directory, 'filter_' + filter_name );
if ( typeof current_value == 'undefined' ) {
@@ -967,7 +1071,12 @@ jQuery(document.body).ready( function() {
var filter_name = jQuery(this).data('name');
var type = jQuery(this).data('type');
if ( type === 'select' ) {
if ( type === 'text' ) {
um_set_url_from_data( directory, 'filter_' + filter_name,'' );
jQuery( '.um-search-filter input[name="' + filter_name + '"]' ).val('');
} else if ( type === 'select' ) {
var current_value = um_get_data_for_directory( directory, 'filter_' + filter_name );
if ( typeof current_value == 'undefined' ) {
+1 -1
View File
File diff suppressed because one or more lines are too long
+30 -2
View File
@@ -89,7 +89,7 @@ body
width: 100%
top: 0
bottom: 0
background: rgba(255, 255, 255, 0.8)
background: none
z-index: 2
.um-ajax-loading
+transition(.1s,opacity)
@@ -120,6 +120,8 @@ body
+flex( column, flex-start, stretch, nowrap )
width: 100%
.um-member-directory-header-row
&.um-member-directory-filters-bar
padding: 0 0 10px 0
&:not(.um-member-directory-filters-bar)
+flex( row, flex-start, baseline, nowrap )
margin: 0 0 10px 0
@@ -141,8 +143,10 @@ body
.um-search-line
-webkit-appearance: textfield
width: 100%
+border-box
.um-do-search
min-width: 15%
width: auto
.um-member-directory-nav-line
+flex( row, space-between, center, nowrap )
width: 100%
@@ -236,6 +240,9 @@ body
.um-s1
width: 100%
&.um-text-filter-type
input
width: 100%
&.um-slider-filter-type
flex-direction: column
align-items: stretch
@@ -560,7 +567,7 @@ body
width: 100%
padding: 15px
margin: 0
background: none
background: #fff
+border-box
.um-member-status
display: none
@@ -605,6 +612,8 @@ body
padding: 0
margin: 0
+border-box
&.no-photo
width: 100%
.um-member-card-content
+flex( column, flex-start, stretch, nowrap )
@@ -733,6 +742,16 @@ body
font-size: 28px
height: 28px
line-height: 28px
&.no-photo.no-reveal
.um-member-card-footer-buttons
width: 100%
&.no-photo:not(.no-reveal)
.um-member-card-footer-buttons
width: calc( 100% - 30px )
&.no-reveal:not(.no-photo)
.um-member-card-footer-buttons
width: calc( 100% - 125px )
.um-members-none
@@ -873,6 +892,9 @@ body
margin: 0 0 5px 0
a.um-button
width: 100% !important
&.no-reveal:not(.no-photo)
.um-member-card-footer-buttons
width: calc( 100% - 70px )
.um-members-pagination-box
.um-members-pagi
display: none
@@ -921,6 +943,9 @@ body
margin: 0 10px 0 0
.um-members-list-footer-button-wrapper
margin: 0 10px 5px 0
&.no-reveal:not(.no-photo)
.um-member-card-footer-buttons
width: calc( 100% - 90px )
.um-members-pagination-box
.um-members-pagi
display: none
@@ -961,6 +986,9 @@ body
margin: 0 10px 0 0
.um-members-list-footer-button-wrapper
margin: 0 10px 5px 0
&.no-reveal:not(.no-photo)
.um-member-card-footer-buttons
width: calc( 100% - 100px )
&.uimob960
.um-member-directory-header
.um-search
@@ -87,6 +87,9 @@ if ( ! empty( $member_directories ) && ! is_wp_error( $member_directories ) ) {
update_post_meta( $id, '_um_roles_can_filter', $can_search_roles );
update_post_meta( $id, '_um_search_fields', $filter_fields );
update_post_meta( $id, '_um_search_fields_old', $search_fields_old );
update_post_meta( $id, '_um_filters_expanded', 1 );
update_post_meta( $id, '_um_filters_is_collapsible', 0 );
} else {
update_post_meta( $id, '_um_search', 0 );
update_post_meta( $id, '_um_filters', 0 );
@@ -97,10 +97,18 @@ global $post_id; ?>
'id' => '_um_filters_expanded',
'type' => 'checkbox',
'label' => __( 'Expand the filter bar by default', 'ultimate-member' ),
'tooltip' => __( 'If turned on, filters bar will be visible after a page loading and can be collapsed', 'ultimate-member' ),
'tooltip' => __( 'If turned on, filters bar will be visible after a page loading', 'ultimate-member' ),
'value' => UM()->query()->get_meta_value( '_um_filters_expanded' ),
'conditional' => array( '_um_filters', '=', 1 )
),
array(
'id' => '_um_filters_is_collapsible',
'type' => 'checkbox',
'label' => __( 'Can filter bar be collapsed', 'ultimate-member' ),
'tooltip' => __( 'If turned on, filters bar can be collapsed after a page loading', 'ultimate-member' ),
'value' => UM()->query()->get_meta_value( '_um_filters_is_collapsible' ),
'conditional' => array( '_um_filters_expanded', '=', 1 )
),
array(
'id' => '_um_search_filters',
'type' => 'md_default_filters',
+1
View File
@@ -169,6 +169,7 @@ if ( ! class_exists( 'um\Config' ) ) {
'_um_roles_can_filter' => array(),
'_um_search_fields' => array(),
'_um_filters_expanded' => 0,
'_um_filters_is_collapsible' => 1,
'_um_search_filters' => array(),
'_um_must_search' => 0,
+162 -55
View File
@@ -51,12 +51,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
var $filter_supported_fields = array();
var $filter_types = array(
// 'select',
// 'slider',
// 'datepicker',
// 'timepicker',
);
var $filter_types = array();
var $core_search_fields = array(
@@ -86,6 +81,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
var $avatar_size;
/**
* @var bool Searching marker
*/
var $is_search = false;
/**
* Member_Directory constructor.
*/
@@ -257,19 +258,31 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
// Filters
$this->filter_fields = array(
'country' => __( 'Country', 'ultimate-member' ),
'gender' => __( 'Gender', 'ultimate-member' ),
'languages' => __( 'Languages', 'ultimate-member' ),
'role' => __( 'Roles', 'ultimate-member' ),
'birth_date' => __( 'Age', 'ultimate-member' ),
'last_login' => __( 'Last Login', 'ultimate-member' ),
'user_registered' => __( 'User Registered', 'ultimate-member' ),
'country' => __( 'Country', 'ultimate-member' ),
'gender' => __( 'Gender', 'ultimate-member' ),
'languages' => __( 'Languages', 'ultimate-member' ),
'role' => __( 'Roles', 'ultimate-member' ),
'birth_date' => __( 'Age', 'ultimate-member' ),
'last_login' => __( 'Last Login', 'ultimate-member' ),
'user_registered' => __( 'User Registered', 'ultimate-member' ),
'first_name' => __( 'First Name', 'ultimate-member' ),
'last_name' => __( 'Last Name', 'ultimate-member' ),
'nickname' => __( 'Nickname', 'ultimate-member' ),
'secondary_user_email' => __( 'Secondary E-mail Address', 'ultimate-member' ),
'description' => __( 'Biography', 'ultimate-member' ),
'phone_number' => __( 'Phone Number', 'ultimate-member' ),
'mobile_number' => __( 'Mobile Number', 'ultimate-member' ),
);
$this->filter_supported_fields = apply_filters( 'um_members_directory_custom_field_types_supported_filter', array( 'date', 'time', 'select', 'multiselect', 'radio', 'checkbox', 'rating' ) );
$this->filter_supported_fields = apply_filters( 'um_members_directory_custom_field_types_supported_filter', array( 'date', 'time', 'select', 'multiselect', 'radio', 'checkbox', 'rating', 'text', 'textarea' ) );
if ( ! empty( UM()->builtin()->saved_fields ) ) {
foreach ( UM()->builtin()->saved_fields as $key => $data ) {
if ( $key == '_um_last_login' ) {
continue;
}
if ( isset( $data['type'] ) && in_array( $data['type'], $this->filter_supported_fields ) ) {
if ( isset( $data['title'] ) && array_search( $data['title'], $this->filter_fields ) !== false ) {
$data['title'] = $data['title'] . ' (' . $key . ')';
@@ -296,13 +309,20 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
*/
function init_filter_types() {
$this->filter_types = apply_filters( 'um_members_directory_filter_types', array(
'country' => 'select',
'gender' => 'select',
'languages' => 'select',
'role' => 'select',
'birth_date' => 'slider',
'last_login' => 'datepicker',
'user_registered' => 'datepicker',
'country' => 'select',
'gender' => 'select',
'languages' => 'select',
'role' => 'select',
'birth_date' => 'slider',
'last_login' => 'datepicker',
'user_registered' => 'datepicker',
'first_name' => 'text',
'last_name' => 'text',
'nickname' => 'text',
'secondary_user_email' => 'text',
'description' => 'text',
'phone_number' => 'text',
'mobile_number' => 'text',
) );
$fields = UM()->builtin()->all_user_fields;
@@ -316,6 +336,10 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
default:
$value = apply_filters( 'um_custom_field_filter_type', 'select', $fields[ $key ] );
break;
case 'text':
case 'textarea':
$value = 'text';
break;
case 'date':
$value = 'datepicker';
break;
@@ -426,11 +450,56 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
break;
}
case 'text': {
$filter_from_url = ! empty( $_GET[ 'filter_' . $filter . '_' . $unique_hash ] ) ? $_GET[ 'filter_' . $filter . '_' . $unique_hash ] : ''; ?>
<input type="text" autocomplete="off" id="<?php echo $filter; ?>" name="<?php echo $filter; ?>"
placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
value="<?php echo esc_attr( $filter_from_url ) ?>" class="um-form-field" />
<?php break;
}
case 'select': {
// getting value from GET line
$filter_from_url = ! empty( $_GET[ 'filter_' . $filter . '_' . $unique_hash ] ) ? explode( '||', sanitize_text_field( $_GET[ 'filter_' . $filter . '_' . $unique_hash ] ) ) : array();
// new
global $wpdb;
if ( $attrs['metakey'] != 'role_select' ) {
$values_array = $wpdb->get_col(
$wpdb->prepare(
"SELECT DISTINCT meta_value
FROM $wpdb->usermeta
WHERE meta_key = %s AND
meta_value != ''",
$attrs['metakey']
)
);
} else {
$users_roles = count_users();
$values_array = ( ! empty( $users_roles['avail_roles'] ) && is_array( $users_roles['avail_roles'] ) ) ? array_keys( array_filter( $users_roles['avail_roles'] ) ) : array();
}
if ( ! empty( $values_array ) && in_array( $attrs['type'], array( 'select','multiselect', 'checkbox', 'radio' ) ) ) {
$values_array = array_map( 'maybe_unserialize', $values_array );
$temp_values = array();
foreach ( $values_array as $values ) {
if ( is_array( $values ) ) {
$temp_values = array_merge( $temp_values, $values );
} else {
$temp_values[] = $values;
}
}
$values_array = array_unique( $temp_values );
}
if ( empty( $values_array ) ) {
return '';
}
// old
if ( isset( $attrs['metakey'] ) && strstr( $attrs['metakey'], 'role_' ) ) {
$shortcode_roles = get_post_meta( $directory_data['form_id'], '_um_roles', true );
$um_roles = UM()->roles()->get_roles( false );
@@ -446,58 +515,64 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
}
}
$custom_dropdown = '';
if ( ! empty( $attrs['custom_dropdown_options_source'] ) ) {
$attrs['custom'] = true;
$attrs['options'] = UM()->fields()->get_options_from_callback( $attrs, $attrs['type'] );
$custom_dropdown = ' data-um-ajax-source="' . esc_attr( $attrs['custom_dropdown_options_source'] ) . '"';
}
if ( $attrs['metakey'] != 'role_select' ) {
$attrs['options'] = array_intersect( $attrs['options'], $values_array );
} else {
$attrs['options'] = array_intersect_key( $attrs['options'], array_flip( $values_array ) );
}
$attrs['options'] = apply_filters( 'um_member_directory_filter_select_options', $attrs['options'], $values_array, $attrs );
if ( empty( $attrs['options'] ) || ! is_array( $attrs['options'] ) ) {
return '';
}
if ( isset( $attrs['label'] ) ) {
$attrs['label'] = strip_tags( $attrs['label'] );
}
if ( isset( $attrs['options'] ) && is_array( $attrs['options'] ) ) {
asort( $attrs['options'] );
}
asort( $attrs['options'] ); ?>
$custom_dropdown = ! empty( $attrs['custom_dropdown_options_source'] ) ? ' data-um-ajax-source="' . $attrs['custom_dropdown_options_source'] . '"' : '';
<select class="um-s1" id="<?php echo $filter; ?>" name="<?php echo $filter; ?>"
data-placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
<?php echo $custom_dropdown; ?>>
if ( ! empty( $attrs['options'] ) || ! empty( $custom_dropdown ) ) { ?>
<option></option>
<select class="um-s1" id="<?php echo $filter; ?>" name="<?php echo $filter; ?>"
data-placeholder="<?php esc_attr_e( stripslashes( $attrs['label'] ), 'ultimate-member' ); ?>"
<?php echo $custom_dropdown; ?>>
<?php if ( ! empty( $attrs['options'] ) ) {
foreach ( $attrs['options'] as $k => $v ) {
<option></option>
$v = stripslashes( $v );
<?php if ( ! empty( $attrs['options'] ) ) {
foreach ( $attrs['options'] as $k => $v ) {
$opt = $v;
$v = stripslashes( $v );
if ( strstr( $filter, 'role_' ) ) {
$opt = $k;
}
$opt = $v;
if ( isset( $attrs['custom'] ) ) {
$opt = $k;
} ?>
if ( strstr( $filter, 'role_' ) ) {
$opt = $k;
}
<option value="<?php echo esc_attr( $opt ); ?>" data-value_label="<?php esc_attr_e( $v, 'ultimate-member' ); ?>"
<?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) ) ?>
<?php selected( $opt == $default_value ) ?>>
<?php _e( $v, 'ultimate-member' ); ?>
</option>
if ( isset( $attrs['custom'] ) ) {
$opt = $k;
} ?>
<?php }
} ?>
<option value="<?php echo esc_attr( $opt ); ?>" data-value_label="<?php esc_attr_e( $v, 'ultimate-member' ); ?>"
<?php disabled( ! empty( $filter_from_url ) && in_array( $opt, $filter_from_url ) ) ?>
<?php selected( $opt == $default_value ) ?>>
<?php _e( $v, 'ultimate-member' ); ?>
</option>
</select>
<?php }
} ?>
</select>
<?php }
break;
<?php break;
}
case 'slider': {
$range = $this->slider_filters_range( $filter, $directory_data );
@@ -1164,6 +1239,8 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
$meta_query = apply_filters( 'um_member_directory_general_search_meta_query', $meta_query, $_POST['search'] );
$this->query_args['meta_query'][] = $meta_query;
$this->is_search = true;
}
}
@@ -1244,6 +1321,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
return;
}
$this->is_search = true;
foreach ( $filter_query as $field => $value ) {
switch ( $field ) {
@@ -1282,11 +1360,30 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
$field_query = apply_filters( "um_query_args_{$field}_{$filter_type}__filter", false, $field, $value, $filter_type );
break;
case 'text':
$value = stripslashes( $value );
$field_query = array(
'relation' => 'OR',
array(
'key' => $field,
'value' => trim( $value ),
'compare' => 'LIKE',
),
);
$this->custom_filters_in_query[ $field ] = $value;
break;
case 'select':
if ( is_array( $value ) ) {
$field_query = array( 'relation' => 'OR' );
foreach ( $value as $single_val ) {
$single_val = stripslashes( $single_val );
$arr_meta_query = array(
array(
'key' => $field,
@@ -1733,7 +1830,17 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
$current_page = ! empty( $_POST['page'] ) ? $_POST['page'] : 1;
$total_users = ( ! empty( $directory_data['max_users'] ) && $directory_data['max_users'] <= $result->total_users ) ? $directory_data['max_users'] : $result->total_users;
$total_pages = ceil( $total_users / $directory_data['profiles_per_page'] );
// number of profiles for mobile
$profiles_per_page = $directory_data['profiles_per_page'];
if ( UM()->mobile()->isMobile() && isset( $directory_data['profiles_per_page_mobile'] ) ) {
$profiles_per_page = $directory_data['profiles_per_page_mobile'];
}
$total_pages = 1;
if ( ! empty( $profiles_per_page ) ) {
$total_pages = ceil( $total_users / $profiles_per_page );
}
if ( ! empty( $total_pages ) ) {
$index1 = 0 - ( $current_page - 2 ) + 1;
@@ -2135,7 +2242,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) {
um_reset_user();
// end of user card
wp_send_json_success( array( 'pagination' => $pagination_data, 'users' => $users ) );
wp_send_json_success( array( 'pagination' => $pagination_data, 'users' => $users, 'is_search' => $this->is_search ) );
}
+9 -11
View File
@@ -116,24 +116,22 @@
</div>
</div>
<div class="um-member-card-footer">
<div class="um-member-card-footer <?php echo ! $profile_photo ? 'no-photo' : '' ?> <?php if ( $show_userinfo && $userinfo_animate ) { ?><# if ( ! $show_block ) { #>no-reveal<# } #><?php } ?>">
<div class="um-member-card-footer-buttons">
<?php do_action( 'um_members_list_just_after_actions_tmpl', $args ); ?>
</div>
<?php if ( $show_userinfo ) { ?>
<?php if ( $show_userinfo && $userinfo_animate ) { ?>
<# if ( $show_block ) { #>
<?php if ( $userinfo_animate ) { ?>
<div class="um-member-card-reveal-buttons">
<div class="um-member-more">
<a href="javascript:void(0);"><i class="um-faicon-angle-down"></i></a>
</div>
<div class="um-member-less">
<a href="javascript:void(0);"><i class="um-faicon-angle-up"></i></a>
</div>
<div class="um-member-card-reveal-buttons">
<div class="um-member-more">
<a href="javascript:void(0);"><i class="um-faicon-angle-down"></i></a>
</div>
<?php } ?>
<div class="um-member-less">
<a href="javascript:void(0);"><i class="um-faicon-angle-up"></i></a>
</div>
</div>
<# } #>
<?php } ?>
</div>
+7 -3
View File
@@ -113,7 +113,11 @@ if ( ! empty( $args['enable_sorting'] ) && ! empty( $sorting_options ) && count(
$classes .= ' um-member-with-sorting';
}
$filters_collapsible = true;
$filters_expanded = ! empty( $args['filters_expanded'] ) ? true : false;
if ( $filters_expanded ) {
$filters_collapsible = ! empty( $args['filters_is_collapsible'] ) ? true : false;
}
//send $args variable to the templates
$args['args'] = $args;
@@ -183,7 +187,7 @@ if ( ( ( $search && $show_search ) || ( $filters && $show_filters && count( $sea
data-sorting="<?php echo esc_attr( $sort_from_url ) ?>">
<div class="um-members-overlay"><div class="um-ajax-loading"></div></div>
<div class="um-member-directory-header">
<div class="um-member-directory-header um-form">
<?php if ( $search && $show_search ) { ?>
<div class="um-member-directory-header-row um-member-directory-search-row">
<div class="um-member-directory-search-line">
@@ -191,7 +195,7 @@ if ( ( ( $search && $show_search ) || ( $filters && $show_filters && count( $sea
<span><?php _e( 'Search:', 'ultimate-member' ); ?></span>
<input type="search" class="um-search-line" placeholder="<?php esc_attr_e( 'Search', 'ultimate-member' ) ?>" value="<?php echo esc_attr( $search_from_url ) ?>" aria-label="<?php esc_attr_e( 'Search', 'ultimate-member' ) ?>" speech />
</label>
<input type="button" class="um-do-search" value="<?php esc_attr_e( 'Search', 'ultimate-member' ); ?>" />
<input type="button" class="um-do-search um-button" value="<?php esc_attr_e( 'Search', 'ultimate-member' ); ?>" />
</div>
</div>
<?php }
@@ -245,7 +249,7 @@ if ( ( ( $search && $show_search ) || ( $filters && $show_filters && count( $sea
<?php }
if ( $filters && $show_filters && count( $search_filters ) ) { ?>
if ( $filters && $show_filters && count( $search_filters ) && $filters_collapsible ) { ?>
<span class="um-member-directory-filters">
<span class="um-member-directory-filters-a<?php if ( $filters_expanded ) { ?> um-member-directory-filters-visible<?php } ?>">
<a href="javascript:void(0);">