X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FBase.pm;h=791058867b661900b5b3bfc1e143acfe806e03ca;hp=f32922103553b64e07dda3e7928b5e447ab67adc;hb=8103c1fc1b2c27a6855feadf26f91b980a54bc52;hpb=d4d0590bef31071e8809ec046717444b95b3f30a diff --git a/rt/lib/RT/Base.pm b/rt/lib/RT/Base.pm index f32922103..791058867 100644 --- a/rt/lib/RT/Base.pm +++ b/rt/lib/RT/Base.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -22,7 +22,9 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/copyleft/gpl.html. # # # CONTRIBUTION SUBMISSION POLICY: @@ -70,8 +72,10 @@ RT::Base =head2 CurrentUser If called with an argument, sets the current user to that user object. -This will affect ACL decisions, etc. -Returns the current user +This will affect ACL decisions, etc. The argument can be either +L or L object. + +Returns the current user object of L class. =cut @@ -80,18 +84,30 @@ sub CurrentUser { if (@_) { $self->{'original_user'} = $self->{'user'}; - $self->{'user'} = shift; + my $current_user = $_[0]; + if ( ref $current_user eq 'RT::User' ) { + $self->{'user'} = new RT::CurrentUser; + $self->{'user'}->Load( $current_user->id ); + } else { + $self->{'user'} = $current_user; + } # We need to weaken the CurrentUser ($self->{'user'}) reference # if the object in question is the currentuser object. # This avoids memory leaks. - Scalar::Util::weaken($self->{'user'}) if (ref($self->{'user'}) && - $self->{'user'} == $self ); + Scalar::Util::weaken($self->{'user'}) + if ref $self->{'user'} && $self->{'user'} == $self; } - unless ( ref( $self->{'user'}) ) { - $RT::Logger->err( "$self was created without a CurrentUser\n" . Carp::cluck() ); - return (0); + unless ( ref $self->{'user'} && $self->{'user'}->isa('RT::CurrentUser') ) { + my $msg = "$self was created without a CurrentUser." + ." Any RT object which is subclass of RT::Base must be created" + ." with a RT::CurrentUser or a RT::User obejct as the first argument."; + $msg .= "\n". Carp::cluck() if @_; + + $RT::Logger->err( $msg ); + return $self->{'user'} = undef; } + return ( $self->{'user'} ); }