[Rt-commit] rt branch, 3.9-trunk, updated. rt-3.9.4-528-g74e8c95
Thomas Sibley
trs at bestpractical.com
Thu Nov 18 16:41:38 EST 2010
The branch, 3.9-trunk has been updated
via 74e8c95088109429663fdc78da33308101b721df (commit)
via 42d6cda105f4907802e353f14ec6602fb6c3951e (commit)
from 3217f12b7e61c947131490ad4cb3b3f93a4ff337 (commit)
Summary of changes:
share/html/Admin/Elements/SelectNewGroupMembers | 72 ++++++++---------------
share/html/Admin/Groups/Members.html | 31 +++++++---
share/html/Admin/Users/Memberships.html | 2 +-
share/html/Helpers/Autocomplete/Groups | 6 ++
share/html/Helpers/Autocomplete/Users | 6 ++
5 files changed, 59 insertions(+), 58 deletions(-)
- Log -----------------------------------------------------------------
commit 42d6cda105f4907802e353f14ec6602fb6c3951e
Author: Thomas Sibley <trs at bestpractical.com>
Date: Thu Nov 18 16:15:20 2010 -0500
Pass the Page parameter too since the list is now paged
diff --git a/share/html/Admin/Users/Memberships.html b/share/html/Admin/Users/Memberships.html
index 3bb3eb1..a180d26 100644
--- a/share/html/Admin/Users/Memberships.html
+++ b/share/html/Admin/Users/Memberships.html
@@ -64,7 +64,7 @@
Format => $Format,
Collection => $is_member,
AllowSorting => 1,
- PassArguments => [qw(Format Rows Order OrderBy id)],
+ PassArguments => [qw(Format Rows Page Order OrderBy id)],
&>
<h2><&|/l&>Groups the user is not member of (check box to add)</&></h2>
commit 74e8c95088109429663fdc78da33308101b721df
Author: Thomas Sibley <trs at bestpractical.com>
Date: Thu Nov 18 16:35:15 2010 -0500
Switch to autocomplete for selecting users and groups when editing members
This saves us a large performance hit when dealing with systems that
have larger numbers of either (or both). It currently doesn't deal at
all when multiple groups have the same name, but this issue will be
addressed in the near future.
diff --git a/share/html/Admin/Elements/SelectNewGroupMembers b/share/html/Admin/Elements/SelectNewGroupMembers
index d41362a..19e6a82 100755
--- a/share/html/Admin/Elements/SelectNewGroupMembers
+++ b/share/html/Admin/Elements/SelectNewGroupMembers
@@ -46,58 +46,36 @@
%#
%# END BPS TAGGED BLOCK }}}
% if ( $Show ne 'Groups' ) {
-<b><&|/l&>Users</&></b>
-<br />
-<select multiple="multiple" name="<% $Name %>Users" size="10">
-<%perl>
-my @users = sort { lc($a->[0]) cmp lc($b->[0]) }
- map { [$m->scomp("/Elements/ShowUser", User => $_), $_] }
- @{ $users->ItemsArrayRef };
-</%perl>
-% for (@users) {
-% my ($rendered, $user) = @$_;
-% next if $SkipUsers->{ $user->id };
-<option value="User-<% $user->id %>"><% $rendered |n%></option>
-% }
-</select>
-<br />
+<label for="<% $Name %>Users"><&|/l&>Add user</&>:</label>
+<input type="text" value="" name="<% $Name %>Users" id="<% $Name %>Users" /><br />
+<script type="text/javascript">
+ jQuery("#<% $Name %>Users").autocomplete({
+ source: "<% RT->Config->Get('WebPath')%>/Helpers/Autocomplete/Users?return=Name;privileged=1;exclude=<% $user_ids |u %>",
+ // Auto-submit once a user is chosen
+ select: function( event, ui ) {
+ jQuery(event.target).closest("form").submit();
+ }
+ });
+</script>
% }
% if ( $Show ne 'Users' ) {
-<b><&|/l&>Groups</&></b>
-<br />
-<select multiple="multiple" name="<% $Name %>Groups" size="10">
-% while ( my $group = $groups->Next ) {
-% next if $SkipGroups->{ $group->id };
-<option value="Group-<% $group->id %>"><% $group->Name %></option>
-% }
-</select>
+<label for="<% $Name %>Groups"><&|/l&>Add group</&>:</label>
+<input type="text" value="" name="<% $Name %>Groups-Name" id="<% $Name %>Groups-Name" /><br />
+<input type="hidden" value="" name="<% $Name %>Groups" id="<% $Name %>Groups" />
+<script type="text/javascript">
+ jQuery("#<% $Name %>Groups-Name").autocomplete({
+ source: "<% RT->Config->Get('WebPath')%>/Helpers/Autocomplete/Groups?exclude=<% $group_ids |u %>",
+ // Auto-submit once a user is chosen
+ select: function( event, ui ) {
+ jQuery(event.target).closest("form").submit();
+ }
+ });
+</script>
% }
-
<%INIT>
-my $users = RT::Users->new($session{'CurrentUser'});
-
-$users->Limit(
- FIELD => 'id',
- VALUE => RT->SystemUser->id,
- OPERATOR => '!=',
- ENTRYAGGREGATOR => 'AND'
-);
-$users->Limit(
- FIELD => 'id',
- VALUE => RT->Nobody->id,
- OPERATOR => '!=',
- ENTRYAGGREGATOR => 'AND'
-);
-$users->LimitToPrivileged();
-
-my $groups = RT::Groups->new($session{'CurrentUser'});
-
-# self-recursive group membership considered harmful!
-$groups->Limit(FIELD => 'id', VALUE => $Group->id, OPERATOR => '!=' );
-$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined');
-
-
+my $user_ids = join(',', grep { $SkipUsers->{$_} } keys %$SkipUsers);
+my $group_ids = join(',', grep { $SkipGroups->{$_} } keys %$SkipGroups);
</%INIT>
<%ARGS>
$Name => 'Users'
diff --git a/share/html/Admin/Groups/Members.html b/share/html/Admin/Groups/Members.html
index 6793d79..d8c0453 100755
--- a/share/html/Admin/Groups/Members.html
+++ b/share/html/Admin/Groups/Members.html
@@ -129,26 +129,37 @@ foreach my $key (keys %ARGS) {
push (@results, $msg);
}
-foreach my $member (grep $_, @AddMembersUsers, @AddMembersGroups) {
+# Process new users
+foreach my $member (grep $_, @AddMembersUsers) {
+ my $principal = RT::User->new($session{'CurrentUser'});
- my $principal;
-
- if ($member =~ /^Group-(\d+)$/) {
- $principal = RT::Group->new($session{'CurrentUser'});
- $principal->Load($1);
- } elsif ($member =~ /^User-(\d+)$/) {
- $principal = RT::User->new($session{'CurrentUser'});
+ if ($member =~ /^User-(\d+)$/) {
+ # Old style, using id
$principal->Load($1);
} else {
- next;
+ # New style, just a username
+ $principal->Load($member);
}
-
my ($val, $msg) = $Group->AddMember($principal->PrincipalId);
push (@results, $msg);
}
+# Process new groups
+foreach my $member (grep $_, @AddMembersGroups) {
+ my $principal = RT::Group->new($session{'CurrentUser'});
+
+ if ($member =~ /^Group-(\d+)$/) {
+ # Old style, using id
+ $principal->Load($1);
+ } else {
+ # New style, just a group name
+ $principal->LoadUserDefinedGroup($member);
+ }
+ my ($val, $msg) = $Group->AddMember($principal->PrincipalId);
+ push (@results, $msg);
+}
</%INIT>
<%ARGS>
diff --git a/share/html/Helpers/Autocomplete/Groups b/share/html/Helpers/Autocomplete/Groups
index 99adb12..6ef4a7c 100644
--- a/share/html/Helpers/Autocomplete/Groups
+++ b/share/html/Helpers/Autocomplete/Groups
@@ -50,6 +50,7 @@
<%ARGS>
$term => undef
$max => 10
+$exclude => ''
</%ARGS>
<%INIT>
require JSON;
@@ -71,6 +72,11 @@ $groups->Limit(
VALUE => $term,
);
+# Exclude groups we don't want
+foreach (split /\s*,\s*/, $exclude) {
+ $groups->Limit(FIELD => 'id', VALUE => $_, OPERATOR => '!=');
+}
+
my @suggestions;
while ( my $group = $groups->Next ) {
diff --git a/share/html/Helpers/Autocomplete/Users b/share/html/Helpers/Autocomplete/Users
index d23d634..e270c75 100644
--- a/share/html/Helpers/Autocomplete/Users
+++ b/share/html/Helpers/Autocomplete/Users
@@ -53,6 +53,7 @@ $term => undef
$delim => undef
$max => 10
$privileged => undef
+$exclude => ''
</%ARGS>
<%INIT>
require JSON;
@@ -104,6 +105,11 @@ while (my ($name, $op) = each %fields) {
);
}
+# Exclude users we don't want
+foreach (split /\s*,\s*/, $exclude) {
+ $users->Limit(FIELD => 'id', VALUE => $_, OPERATOR => '!=');
+}
+
my @suggestions;
while ( my $user = $users->Next ) {
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list