X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FTicketSystem%2FRT_Internal.pm;h=033c746ba78b420d5deb3563ec50bb6f32ab0e48;hb=345710417c36b3521bc44def48e1a85ece4ae4df;hp=00398230f28bdbefac10f589adee8412c05771f6;hpb=8d4abaa99403699aa5b5f02e899d2ea33980f913;p=freeside.git diff --git a/FS/FS/TicketSystem/RT_Internal.pm b/FS/FS/TicketSystem/RT_Internal.pm index 00398230f..033c746ba 100644 --- a/FS/FS/TicketSystem/RT_Internal.pm +++ b/FS/FS/TicketSystem/RT_Internal.pm @@ -1,13 +1,16 @@ package FS::TicketSystem::RT_Internal; use strict; -use vars qw( @ISA ); +use vars qw( @ISA $DEBUG ); use FS::UID qw(dbh); use FS::CGI qw(popurl); use FS::TicketSystem::RT_Libs; +use RT::CurrentUser; @ISA = qw( FS::TicketSystem::RT_Libs ); +$DEBUG = 0; + sub sql_num_customer_tickets { "( select count(*) from tickets join links on ( tickets.id = links.localbase ) @@ -16,32 +19,119 @@ sub sql_num_customer_tickets { )"; } -sub num_customer_tickets { - my( $self, $custnum, $priority ) = ( shift, shift, shift ); - $self->SUPER::num_customer_tickets( $custnum, $priority, dbh ); +sub baseurl { + #my $self = shift; + if ( $RT::URI::freeside::URL ) { + $RT::URI::freeside::URL. '/rt/'; + } else { + 'http://you_need_to_set_RT_URI_freeside_URL_in_SiteConfig.pm/'; + } } -sub customer_tickets { - my( $self, $custnum, $limit, $priority ) = ( shift, shift, shift, shift ); - $self->SUPER::customer_tickets( $custnum, $limit, $priority, dbh ); -} +#mapping/genericize?? +#ShowConfigTab ModifySelf +sub access_right { + my( $self, $session, $right ) = @_; -sub href_customer_tickets { - my $self = shift; - # well, 2 is wrong here but will have to do for now - popurl(2).'rt/'. $self->SUPER::href_customer_tickets(@_); -} + #return '' unless $conf->config('ticket_system'); + return '' unless FS::Conf->new->config('ticket_system'); -sub href_new_ticket { - my $self = shift; - # well, 2 is wrong here but will have to do for now - popurl(2).'rt/'. $self->SUPER::href_new_ticket(@_); + $self->_web_external_auth($session) + unless $session + && $session->{'CurrentUser'}; + + $session->{'CurrentUser'}->HasRight( Right => $right, + Object => $RT::System ); } -sub href_ticket { - my $self = shift; - # well, 2 is wrong here but will have to do for now - popurl(2).'rt/'. $self->SUPER::href_ticket(@_); +#shameless false laziness w/rt/html/autohandler to get logged into RT from afar +sub _web_external_auth { + my( $self, $session ) = @_; + + my $user = $FS::CurrentUser::CurrentUser->username; + + $session->{'CurrentUser'} = RT::CurrentUser->new(); + + warn "loading RT user for $user\n" + if $DEBUG; + + $session->{'CurrentUser'}->Load($user); + + if ( ! $session->{'CurrentUser'}->Id() ) { + + # Create users on-the-fly + + warn "can't load RT user for $user; auto-creating\n" + if $DEBUG; + + my $UserObj = RT::User->new( RT::CurrentUser->new('RT_System') ); + + my ( $val, $msg ) = $UserObj->Create( + %{ ref($RT::AutoCreate) ? $RT::AutoCreate : {} }, + Name => $user, + Gecos => $user, + ); + + if ($val) { + + # now get user specific information, to better create our user. + my $new_user_info + = RT::Interface::Web::WebExternalAutoInfo($user); + + # set the attributes that have been defined. + # FIXME: this is a horrible kludge. I'm sure there's something cleaner + foreach my $attribute ( + 'Name', 'Comments', + 'Signature', 'EmailAddress', + 'PagerEmailAddress', 'FreeformContactInfo', + 'Organization', 'Disabled', + 'Privileged', 'RealName', + 'NickName', 'Lang', + 'EmailEncoding', 'WebEncoding', + 'ExternalContactInfoId', 'ContactInfoSystem', + 'ExternalAuthId', 'Gecos', + 'HomePhone', 'WorkPhone', + 'MobilePhone', 'PagerPhone', + 'Address1', 'Address2', + 'City', 'State', + 'Zip', 'Country' + ) + { + #uhh, wrong root + #$m->comp( '/Elements/Callback', %ARGS, + # _CallbackName => 'NewUser' ); + + my $method = "Set$attribute"; + $UserObj->$method( $new_user_info->{$attribute} ) + if ( defined $new_user_info->{$attribute} ); + } + $session->{'CurrentUser'}->Load($user); + } + else { + + # we failed to successfully create the user. abort abort abort. + delete $session->{'CurrentUser'}; + + die "can't auto-create RT user"; #an error message would be nice :/ + #$m->abort() unless $RT::WebFallbackToInternalAuth; + #$m->comp( '/Elements/Login', %ARGS, + # Error => loc( 'Cannot create user: [_1]', $msg ) ); + } + } + + unless ( $session->{'CurrentUser'}->Id() ) { + delete $session->{'CurrentUser'}; + + die "can't auto-create RT user"; + #$user = $orig_user; + # + #if ($RT::WebExternalOnly) { + # $m->comp( '/Elements/Login', %ARGS, + # Error => loc('You are not an authorized user') ); + # $m->abort(); + #} + } + } 1;