[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