[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