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:
parent
6bc75ec583
commit
2e53340908
4 changed files with 62 additions and 5 deletions
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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', []);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue