[Rt-commit] rt branch, 4.4/include-people-by-username, created. rt-4.4.2-57-gb9b5e8cf1

Craig Kaiser craig at bestpractical.com
Mon Jan 8 14:22:12 EST 2018


The branch, 4.4/include-people-by-username has been created
        at  b9b5e8cf1894194c86fe1619b4025bc09fb862cf (commit)

- Log -----------------------------------------------------------------
commit b9b5e8cf1894194c86fe1619b4025bc09fb862cf
Author: Craig Kaiser <craig at bestpractical.com>
Date:   Fri Jan 5 13:53:16 2018 -0500

    Accept usernames for roles on ticket create
    
    In addition to being able to add a person to a ticket with an email, now
    a username is an acceptable argument on ticket create. It is possible that a user exist and
    should be attached to a ticket as a person, but that user account may
    not have an associated email. Then the username can be used in place of
    the email.

diff --git a/lib/RT/Record/Role/Roles.pm b/lib/RT/Record/Role/Roles.pm
index a1d49104e..54228fae8 100644
--- a/lib/RT/Record/Role/Roles.pm
+++ b/lib/RT/Record/Role/Roles.pm
@@ -582,7 +582,6 @@ sub DeleteRoleMember {
 sub _ResolveRoles {
     my $self = shift;
     my ($roles, %args) = (@_);
-
     my @errors;
     for my $role ($self->Roles) {
         if ($self->_ROLES->{$role}{Single}) {
@@ -620,20 +619,34 @@ sub _ResolveRoles {
                         push @errors,
                             $self->loc("Couldn't load principal: [_1]", $msg);
                     }
-                } else {
-                    my @addresses = RT::EmailParser->ParseEmailAddress( $value );
-                    for my $address ( @addresses ) {
-                        my $user = RT::User->new( RT->SystemUser );
-                        my ($id, $msg) = $user->LoadOrCreateByEmail( $address );
-                        if ( $id ) {
-                            # Load it back as us, not as the system
-                            # user, to be completely safe.
-                            $user = RT::User->new( $self->CurrentUser );
-                            $user->Load( $id );
-                            push @{ $roles->{$role} }, $user->PrincipalObj;
+                }
+                else {
+                    foreach my $person (my @persons = split / /, $value){
+                        if ( $person =~ /\,/ ) {
+                              $person = substr($person, 0, -1);
+                        }
+                        if ( $person !~ /\@/ ) {
+                            my $user = RT::User->new( RT->SystemUser );
+                                $person =~ s/^\s*(.*?)\s*$/$1/;
+                                my ($id, $msg) = $user->Load( $person );
+                                if ( $id ) {
+                                    push @{ $roles->{$role} }, $user->PrincipalObj;
+                                } else {
+                                    push @errors,
+                                        $self->loc("Couldn't load or create user from username: [_1]", $person);
+                                }
                         } else {
-                            push @errors,
-                                $self->loc("Couldn't load or create user: [_1]", $msg);
+                            my $address = $person;
+                            my $user = RT::User->new( RT->SystemUser );
+                            my ( $id, $msg ) = $user->LoadOrCreateByEmail( $address );
+                            if ( $id ) {
+                                $user = RT::User->new( $self->CurrentUser );
+                                $user->Load( $id );
+                                push @{ $roles->{$role} }, $user->PrincipalObj;
+                            } else {
+                                push @errors,
+                                    $self->loc("Couldn't load or create user from email: [_1]", $msg);
+                            }
                         }
                     }
                 }
diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
index 26dc216b0..afccb31c8 100644
--- a/share/html/Ticket/Create.html
+++ b/share/html/Ticket/Create.html
@@ -488,6 +488,9 @@ if ( !exists $ARGS{'AddMoreAttach'} && ($ARGS{'id'}||'') eq 'new' ) {
         my $value = $ARGS{ $field };
         next unless defined $value && length $value;
 
+        # Preserve non-email username inputs
+        my @usernames = grep {!/\@/} split /,/, $value;
+
         my @emails = Email::Address->parse( $value );
         foreach my $email ( grep RT::EmailParser->IsRTAddress($_->address), @emails ) {
             push @results, loc("[_1] is an address RT receives mail at. Adding it as a '[_2]' would create a mail loop", $email->format, loc($field =~ /^(.*?)s?$/) );
@@ -495,6 +498,7 @@ if ( !exists $ARGS{'AddMoreAttach'} && ($ARGS{'id'}||'') eq 'new' ) {
             $email = undef;
         }
         $ARGS{ $field } = join ', ', map $_->format, grep defined, @emails;
+        $ARGS{ $field } .= join ', ', @usernames;
     }
 }
 

-----------------------------------------------------------------------


More information about the rt-commit mailing list