admin: in usergroups admin allow prefiltering the list of users

based on an autocomplete query. also updated a couple tests which
were not testing correct response.
This commit is contained in:
Daniel Dourvaris 2016-06-02 19:38:51 +03:00
parent 6bc75ec583
commit 2e53340908
4 changed files with 62 additions and 5 deletions

View file

@ -36,6 +36,7 @@ from rhodecode.lib import auth
from rhodecode.lib import helpers as h
from rhodecode.lib.exceptions import UserGroupAssignedException,\
RepoGroupAssignmentError
from rhodecode.lib.utils import jsonify, action_logger
from rhodecode.lib.utils2 import safe_unicode, str2bool, safe_int
from rhodecode.lib.auth import (
LoginRequired, NotAnonymous, HasUserGroupPermissionAnyDecorator,
@ -181,7 +182,8 @@ class UserGroupsController(BaseController):
h.flash(_('Error occurred during creation of user group %s') \
% request.POST.get('users_group_name'), category='error')
return redirect(url('users_groups'))
return redirect(
url('edit_users_group', user_group_id=user_group.users_group_id))
@HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true')
def new(self):
@ -467,5 +469,12 @@ class UserGroupsController(BaseController):
c.group_members_obj = sorted((x.user for x in c.user_group.members),
key=lambda u: u.username.lower())
c.group_members = [(x.user_id, x.username) for x in c.group_members_obj]
group_members = [(x.user_id, x.username) for x in c.group_members_obj]
if request.is_xhr:
return jsonify(lambda *a, **k: {
'members': group_members
})
c.group_members = group_members
return render('admin/user_groups/user_group_edit.html')

View file

@ -14,6 +14,7 @@ function registerRCRoutes() {
pyroutes.register('files_home', '/%(repo_name)s/files/%(revision)s/%(f_path)s', ['repo_name', 'revision', 'f_path']);
pyroutes.register('edit_repo', '/%(repo_name)s/settings', ['repo_name']);
pyroutes.register('edit_repo_perms', '/%(repo_name)s/settings/permissions', ['repo_name']);
pyroutes.register('edit_user_group_members', '/_admin/user_groups/%(user_group_id)s/edit/members', ['user_group_id']);
pyroutes.register('pullrequest_home', '/%(repo_name)s/pull-request/new', ['repo_name']);
pyroutes.register('user_autocomplete_data', '/_users', []);
pyroutes.register('toggle_following', '/_admin/toggle_following', []);

View file

@ -44,6 +44,9 @@
<div class="field">
<div class="label">
<label for="users_group_active">${_('Members')}:</label>
${h.text('from_user_group',
placeholder="select only users",
class_="medium")}
</div>
<div class="select side-by-side-selector">
<div class="left-group">
@ -60,7 +63,8 @@
<i id="remove_element" class="icon-chevron-right"></i>
</div>
<div class="right-group">
<label class="text" >${_('Available members')}</label>
<label class="text" >${_('Available members')}
</label>
${h.select('available_members',[],c.available_members,multiple=True,size=8,)}
<div class="btn" id="add_all_elements" >
<i class="icon-chevron-left"></i>${_('Add all elements')}
@ -86,6 +90,42 @@
'dropdownAutoWidth': true
});
$('#from_user_group').autocomplete({
serviceUrl: pyroutes.url('user_autocomplete_data'),
minChars:2,
maxHeight:400,
width:300,
deferRequestBy: 300, //miliseconds
showNoSuggestionNotice: true,
params: { user_groups:true },
formatResult: autocompleteFormatResult,
lookupFilter: autocompleteFilterResult,
onSelect: function(element, suggestion){
function preSelectUserIds(uids) {
$('#available_members').val(uids);
$('#users_group_members').val(uids);
}
if (suggestion.value_type == 'user_group') {
$.getJSON(
pyroutes.url('edit_user_group_members',
{'user_group_id': suggestion.id}),
function(data) {
var uids = [];
$.each(data.members, function(idx, user) {
var userid = user[0],
username = user[1];
uids.push(userid.toString());
});
preSelectUserIds(uids)
}
);
} else if (suggestion.value_type == 'user') {
preSelectUserIds([suggestion.id.toString()]);
}
}
});
UsersAutoComplete('user', '${c.rhodecode_user.user_id}');
})
</script>

View file

@ -35,7 +35,8 @@ class TestAdminUsersGroupsController(TestController):
def test_index(self):
self.log_user()
self.app.get(url('users_groups'))
response = self.app.get(url('users_groups'))
response.mustcontain('No members yet')
def test_create(self):
self.log_user()
@ -148,7 +149,13 @@ class TestAdminUsersGroupsController(TestController):
fixture.destroy_user_group(users_group_name)
def test_edit(self):
self.app.get(url('edit_users_group', user_group_id=1))
self.log_user()
response = self.app.get(url('edit_users_group', user_group_id=1))
def test_edit_user_group_members(self):
self.log_user()
response = self.app.get(url('edit_user_group_members', user_group_id=1))
response.mustcontain('No members yet')
def test_usergroup_escape(self):
user = User.get_by_username('test_admin')