X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FBase.pm;h=791058867b661900b5b3bfc1e143acfe806e03ca;hp=03b50e60011b71bf435a16b54e8610914244ac15;hb=8103c1fc1b2c27a6855feadf26f91b980a54bc52;hpb=d39d52aac8f38ea9115628039f0df5aa3ac826de diff --git a/rt/lib/RT/Base.pm b/rt/lib/RT/Base.pm index 03b50e600..791058867 100644 --- a/rt/lib/RT/Base.pm +++ b/rt/lib/RT/Base.pm @@ -1,8 +1,8 @@ -# {{{ BEGIN BPS TAGGED BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2004 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: @@ -42,7 +44,7 @@ # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # -# }}} END BPS TAGGED BLOCK +# END BPS TAGGED BLOCK }}} package RT::Base; use Carp; use Scalar::Util; @@ -52,17 +54,28 @@ use vars qw(@EXPORT); @EXPORT=qw(loc CurrentUser); -=head1 FUNCTIONS +=head1 NAME + +RT::Base + + +=head1 SYNOPSIS + +=head1 DESCRIPTION +=head1 FUNCTIONS +=cut # {{{ sub CurrentUser =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 @@ -71,16 +84,30 @@ sub CurrentUser { if (@_) { $self->{'original_user'} = $self->{'user'}; - $self->{'user'} = shift; - Scalar::Util::weaken($self->{'user'}) if (ref($self->{'user'}) && - $self->{'user'} == $self ); + 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; } - unless ( ref( $self->{'user'}) ) { - $RT::Logger->err( "$self was created without a CurrentUser\n" . Carp::cluck() ); - return (0); - die; + 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'} ); } @@ -98,7 +125,7 @@ sub OriginalUser { } -=item loc LOC_STRING +=head2 loc LOC_STRING l is a method which takes a loc string to this object's CurrentUser->LanguageHandle for localization. @@ -125,6 +152,18 @@ sub loc { } } +sub loc_fuzzy { + my $self = shift; + if (my $user = $self->OriginalUser) { + return $user->loc_fuzzy(@_); + } + else { + use Carp; + Carp::confess("No currentuser"); + return ("Critical error:$self has no CurrentUser", $self); + } +} + eval "require RT::Base_Vendor"; die $@ if ($@ && $@ !~ qr{^Can't locate RT/Base_Vendor.pm}); eval "require RT::Base_Local";