autocomplete: add flags to show/hide active users, and also display this information

in autocomplete data.

ref #3374
This commit is contained in:
Marcin Kuzminski 2016-06-18 14:23:57 +02:00
parent 5f898873c6
commit 0276305290
3 changed files with 31 additions and 12 deletions

View file

@ -274,4 +274,11 @@ class HomeController(BaseController):
@XHRRequired()
@jsonify
def user_group_autocomplete_data(self):
return {'suggestions': []}
query = request.GET.get('query')
repo_model = RepoModel()
_user_groups = repo_model.get_user_groups(name_contains=query)
_user_groups = _user_groups
return {'suggestions': _user_groups}

View file

@ -140,10 +140,12 @@ class RepoModel(BaseModel):
return None
def get_users(self, name_contains=None, limit=20):
def get_users(self, name_contains=None, limit=20, only_active=True):
# TODO: mikhail: move this method to the UserModel.
query = self.sa.query(User)
query = query.filter(User.active == true())
if only_active:
query = query.filter(User.active == true())
if name_contains:
ilike_expression = u'%{}%'.format(safe_unicode(name_contains))
query = query.filter(
@ -165,16 +167,19 @@ class RepoModel(BaseModel):
'icon_link': h.gravatar_url(user.email, 14),
'value_display': h.person(user.email),
'value': user.username,
'value_type': 'user'
'value_type': 'user',
'active': user.active,
}
for user in users
]
return _users
def get_user_groups(self, name_contains=None, limit=20):
def get_user_groups(self, name_contains=None, limit=20, only_active=True):
# TODO: mikhail: move this method to the UserGroupModel.
query = self.sa.query(UserGroup)
query = query.filter(UserGroup.users_group_active == true())
if only_active:
query = query.filter(UserGroup.users_group_active == true())
if name_contains:
ilike_expression = u'%{}%'.format(safe_unicode(name_contains))
query = query.filter(
@ -196,7 +201,8 @@ class RepoModel(BaseModel):
'value_display': 'Group: %s (%d members)' % (
group.users_group_name, len(group.members),),
'value': group.users_group_name,
'value_type': 'user_group'
'value_type': 'user_group',
'active': group.users_group_active,
}
for group in user_groups
]

View file

@ -19,19 +19,25 @@
/**
* autocomplete formatter that uses gravatar
* */
var autocompleteFormatResult = function(data, value, org_formatter) {
var value_display = data.value_display;
var autocompleteFormatResult = function (data, value, org_formatter) {
var activeUser = data.active || true;
var valueDisplay = data.value_display;
if (!activeUser) {
valueDisplay = '<strong>(disabled)</strong> ' + valueDisplay;
}
var escapeRegExChars = function (value) {
return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
};
var pattern = '(' + escapeRegExChars(value) + ')';
value_display = value_display.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
var tmpl = '<div class="ac-container-wrap"><img class="gravatar" src="{0}"/>{1}</div>';
if (data.icon_link === "") {
tmpl = '<div class="ac-container-wrap">{0}</div>';
return tmpl.format(value_display);
return tmpl.format(valueDisplay);
}
return tmpl.format(data.icon_link, value_display);
return tmpl.format(data.icon_link, valueDisplay);
};
/**