diff options
Diffstat (limited to 'rt/lib/RT/User.pm')
-rwxr-xr-x | rt/lib/RT/User.pm | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/rt/lib/RT/User.pm b/rt/lib/RT/User.pm index f26ace445..5511b9f6a 100755 --- a/rt/lib/RT/User.pm +++ b/rt/lib/RT/User.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # <sales@bestpractical.com> # # (Except where explicitly superseded by other copyright notices) @@ -167,18 +167,10 @@ sub Create { return ( 0, $self->loc("Must specify 'Name' attribute") ); } - #SANITY CHECK THE NAME AND ABORT IF IT'S TAKEN - if (RT->SystemUser) { #This only works if RT::SystemUser has been defined - my $TempUser = RT::User->new(RT->SystemUser); - $TempUser->Load( $args{'Name'} ); - return ( 0, $self->loc('Name in use') ) if ( $TempUser->Id ); - - my ($val, $message) = $self->ValidateEmailAddress( $args{'EmailAddress'} ); - return (0, $message) unless ( $val ); - } else { - $RT::Logger->warning( "$self couldn't check for pre-existing users"); - } - + my ( $val, $msg ) = $self->ValidateName( $args{'Name'} ); + return ( 0, $msg ) unless $val; + ( $val, $msg ) = $self->ValidateEmailAddress( $args{'EmailAddress'} ); + return ( 0, $msg ) unless ($val); $RT::Handle->BeginTransaction(); # Groups deal with principal ids, rather than user ids. @@ -270,6 +262,30 @@ sub Create { return ( $id, $self->loc('User created') ); } +=head2 ValidateName STRING + +Returns either (0, "failure reason") or 1 depending on whether the given +name is valid. + +=cut + +sub ValidateName { + my $self = shift; + my $name = shift; + + return ( 0, $self->loc('empty name') ) unless defined $name && length $name; + + my $TempUser = RT::User->new( RT->SystemUser ); + $TempUser->Load($name); + + if ( $TempUser->id && ( !$self->id || $TempUser->id != $self->id ) ) { + return ( 0, $self->loc('Name in use') ); + } + else { + return 1; + } +} + =head2 ValidatePassword STRING Returns either (0, "failure reason") or 1 depending on whether the given @@ -572,6 +588,25 @@ sub ValidateEmailAddress { } } +=head2 SetName + +Check to make sure someone else isn't using this name already + +=cut + +sub SetName { + my $self = shift; + my $Value = shift; + + my ( $val, $message ) = $self->ValidateName($Value); + if ($val) { + return $self->_Set( Field => 'Name', Value => $Value ); + } + else { + return ( 0, $message ); + } +} + =head2 SetEmailAddress Check to make sure someone else isn't using this email address already @@ -1393,7 +1428,7 @@ $user->WatchedQueues('Cc', 'AdminCc'); sub WatchedQueues { my $self = shift; - my @roles = @_ || ('Cc', 'AdminCc'); + my @roles = @_ ? @_ : ('Cc', 'AdminCc'); $RT::Logger->debug('WatcheQueues got user ' . $self->Name); |