diff --git a/includes/admin/assets/js/um-admin-forms.js b/includes/admin/assets/js/um-admin-forms.js
index 314d6d24..bd183335 100644
--- a/includes/admin/assets/js/um-admin-forms.js
+++ b/includes/admin/assets/js/um-admin-forms.js
@@ -1,17 +1,48 @@
function um_admin_init_users_select() {
if ( jQuery('.um-user-select-field').length ) {
+ function avatarformat( data ) {
+ var option;
+ if ( ! data.id ) {
+ return data.text;
+ }
+ if ( 'undefined' !== typeof data.img ) {
+ option = jQuery(' ' + data.text + '');
+ } else {
+ var img = data.element.attributes['data-img']['value'];
+ if ( img ) {
+ option = jQuery('
' + data.text + '');
+ } else {
+ option = jQuery('' + data.text + '');
+ }
+ }
+ return option;
+ }
+
var select2_atts = {
ajax: {
url: wp.ajax.settings.url,
dataType: 'json',
delay: 250, // delay in ms while typing when to perform a AJAX search
data: function( params ) {
- return {
- search: params.term, // search query
+ var args = {
action: 'um_get_users', // AJAX action for admin-ajax.php
+ search: params.term, // search query
page: params.page || 1, // infinite scroll pagination
nonce: um_admin_scripts.nonce
};
+
+ jQuery.each( jQuery(this)[0].attributes, function() {
+ // this.attributes is not a plain object, but an array
+ // of attribute nodes, which contain both the name and value
+ if ( this.specified ) {
+ if ( -1 !== this.name.indexOf( 'data-ajax-args-' ) ) {
+ var arg_name = this.name.replace( 'data-ajax-args-', '' ).trim();
+ args[ arg_name ] = this.value;
+ }
+ }
+ });
+
+ return args;
},
processResults: function( response, params ) {
params.page = params.page || 1;
@@ -19,7 +50,11 @@ function um_admin_init_users_select() {
if ( response.data.users ) {
jQuery.each( response.data.users, function( index, text ) {
- options.push( { id: text.ID, text: text.user_login + ' (#' + text.ID + ')' } );
+ if ( typeof text.img !== 'undefined' ) {
+ options.push({ id: text.ID, text: text.user_login + ' (#' + text.ID + ')', img: text.img });
+ } else {
+ options.push( { id: text.ID, text: text.user_login + ' (#' + text.ID + ')' } );
+ }
});
}
@@ -38,7 +73,9 @@ function um_admin_init_users_select() {
allowHtml: true,
dropdownCssClass: 'um-select2-users-dropdown',
containerCssClass : 'um-select2-users-container',
- placeholder: jQuery(this).data('placeholder')
+ placeholder: jQuery(this).data('placeholder'),
+ templateSelection: avatarformat,
+ templateResult: avatarformat
};
jQuery('.um-user-select-field').select2( select2_atts );
diff --git a/includes/admin/core/class-admin-forms.php b/includes/admin/core/class-admin-forms.php
index 260d29a9..8ffc9424 100644
--- a/includes/admin/core/class-admin-forms.php
+++ b/includes/admin/core/class-admin-forms.php
@@ -576,33 +576,39 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
*
* @return bool|string
*/
- function render_users_dropdown( $field_data ) {
+ public function render_users_dropdown( $field_data ) {
if ( empty( $field_data['id'] ) ) {
return false;
}
$multiple = ! empty( $field_data['multi'] ) ? 'multiple' : '';
- $id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id'];
+ $id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id'];
$id_attr = ' id="' . esc_attr( $id ) . '" ';
- $class = ! empty( $field_data['class'] ) ? $field_data['class'] . ' ' : ' ';
- $class .= ! empty( $field_data['size'] ) ? 'um-' . $field_data['size'] . '-field' : 'um-long-field';
+ $class = ! empty( $field_data['class'] ) ? $field_data['class'] . ' ' : ' ';
+ $class .= ! empty( $field_data['size'] ) ? 'um-' . $field_data['size'] . '-field' : 'um-long-field';
$class_attr = ' class="um-forms-field um-user-select-field' . esc_attr( $class ) . '" ';
$data = array(
'field_id' => $field_data['id'],
+ 'avatar' => ! empty( $field_data['avatar'] ) ? 1 : 0,
);
+ if ( ! empty( $field_data['data'] ) && is_array( $field_data['data'] ) ) {
+ $data = array_merge( $data, $field_data['data'] );
+ }
+
$data_attr = '';
foreach ( $data as $key => $value ) {
$data_attr .= ' data-' . $key . '="' . esc_attr( $value ) . '" ';
}
- $name = $field_data['id'];
- $name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name;
+ $name = $field_data['id'];
+ $name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name;
$hidden_name_attr = ' name="' . $name . '" ';
- $name = $name . ( ! empty( $field_data['multi'] ) ? '[]' : '' );
+
+ $name = $name . ( ! empty( $field_data['multi'] ) ? '[]' : '' );
$name_attr = ' name="' . $name . '" ';
$value = $this->get_field_value( $field_data );
@@ -620,15 +626,22 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
$options = '';
if ( ! empty( $users ) ) {
foreach ( $users as $user ) {
- $options .= '';
+ if ( ! empty( $field_data['avatar'] ) ) {
+ $url = get_avatar_url( $user->ID, 'size=20' );
+ $options .= '';
+ } else {
+ $options .= '';
+ }
}
}
+ $placeholder = ! empty( $field_data['placeholder'] ) ? $field_data['placeholder'] : __( 'Select Users', 'ultimate-member' );
+
$hidden = '';
if ( ! empty( $multiple ) ) {
$hidden = "";
}
- $html = "$hidden";
+ $html = "$hidden";
return $html;
}
diff --git a/includes/admin/core/class-admin-users.php b/includes/admin/core/class-admin-users.php
index 09cef460..e8c7c296 100644
--- a/includes/admin/core/class-admin-users.php
+++ b/includes/admin/core/class-admin-users.php
@@ -1,13 +1,12 @@
admin()->check_ajax_nonce();
$search_request = ! empty( $_REQUEST['search'] ) ? sanitize_text_field( $_REQUEST['search'] ) : '';
@@ -53,17 +51,26 @@ if ( ! class_exists( 'um\admin\core\Admin_Users' ) ) {
$args = array(
'fields' => array( 'ID', 'user_login' ),
'paged' => $page,
- 'number' => $per_page
+ 'number' => $per_page,
);
if ( ! empty( $search_request ) ) {
- $args['search'] = $search_request;
+ $args['search'] = '*' . $search_request . '*';
}
+ $args = apply_filters( 'um_get_users_list_ajax_args', $args );
+
$users_query = new \WP_User_Query( $args );
$users = $users_query->get_results();
$total_count = $users_query->get_total();
+ if ( ! empty( $_REQUEST['avatar'] ) ) {
+ foreach ( $users as $key => $user ) {
+ $url = get_avatar_url( $user->ID );
+ $users[ $key ]->img = $url;
+ }
+ }
+
wp_send_json_success(
array(
'users' => $users,
@@ -72,7 +79,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Users' ) ) {
);
}
-
/**
* Restrict the edit/delete users via wp-admin screen by the UM role capabilities
*
@@ -83,7 +89,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Users' ) ) {
*
* @return mixed
*/
- function map_caps_by_role( $allcaps, $cap, $args, $user ) {
+ public function map_caps_by_role( $allcaps, $cap, $args, $user ) {
if ( isset( $cap[0] ) && $cap[0] == 'edit_users' ) {
if ( isset( $args[0] ) && isset( $args[1] ) && ! user_can( $args[1], 'administrator' ) && $args[0] == 'edit_user' ) {
if ( isset( $args[2] ) && ! UM()->roles()->um_current_user_can( 'edit', $args[2] ) ) {
@@ -107,13 +113,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Users' ) ) {
return $allcaps;
}
-
/**
* Does an action to user asap
*
* @param string $action
*/
- function user_action_hook( $action ) {
+ public function user_action_hook( $action ) {
switch ( $action ) {
default:
/**
@@ -176,12 +181,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Users' ) ) {
}
}
-
/**
* Add UM Bulk actions to Users List Table
*
*/
- function restrict_manage_users() { ?>
+ public function restrict_manage_users() {
+ ?>