From: ivan Date: Mon, 21 Jul 2008 18:58:47 +0000 (+0000) Subject: add framework for running Mason components standalone X-Git-Tag: root_of_webpay_support~469 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=9a90f2af0663c9b4e9611e044fd25349425d1aec add framework for running Mason components standalone --- diff --git a/FS/FS/CGI.pm b/FS/FS/CGI.pm index 96047f667..7ad1dc28f 100644 --- a/FS/FS/CGI.pm +++ b/FS/FS/CGI.pm @@ -194,16 +194,24 @@ sub myexit { } } -=item popurl LEVEL +=item popurl LEVEL [URL] -Returns current URL with LEVEL levels of path removed from the end (default 0). +Returns current (or, optionally, passed) URL with LEVEL levels of path removed +from the end (default 0). =cut sub popurl { - my($up)=@_; - my $cgi = &FS::UID::cgi; - my $url_string = $cgi->isa('Apache') ? $cgi->uri : $cgi->url; + my $up = shift; + + my $url_string; + if ( scalar(@_) ) { + $url_string = shift; + } else { + my $cgi = &FS::UID::cgi; + $url_string = $cgi->isa('Apache') ? $cgi->uri : $cgi->url; + } + $url_string =~ s/\?.*//; my $url = new URI::URL ( $url_string ); my(@path)=$url->path_components; diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm new file mode 100644 index 000000000..219f6b738 --- /dev/null +++ b/FS/FS/Mason.pm @@ -0,0 +1,371 @@ +package FS::Mason; + +use strict; +use vars qw( @ISA @EXPORT_OK ); +use Exporter; +use HTML::Mason 1.27; #http://www.masonhq.com/?ApacheModPerl2Redirect +use HTML::Mason::Interp; +use HTML::Mason::Compiler::ToObject; + +@ISA = qw( Exporter ); +@EXPORT_OK = qw( mason_interps ); + +=head1 NAME + +FS::Mason - Initialize the Mason environment + +=head1 SYNOPSIS + + use FS::Mason qw( mason_interps ); + + my( $fs_interp, $rt_interp ) = mason_interps('apache'); + + #OR + + my( $fs_interp, $rt_interp ) = mason_interps('standalone'); #XXX name? + +=head1 DESCRIPTION + +Initializes the Mason environment, loads all Freeside and RT libraries, etc. + +=cut + +# List of modules that you want to use from components (see Admin +# manual for details) +{ + package HTML::Mason::Commands; + + use strict; + use vars qw( %session ); + use CGI 3.29 qw(-private_tempfiles); #3.29 to fix RT attachment problems + #use CGI::Carp qw(fatalsToBrowser); + use CGI::Cookie; + use List::Util qw( max min ); + use Data::Dumper; + use Date::Format; + use Date::Parse; + use Time::Local; + use Time::Duration; + use DateTime; + use DateTime::Format::Strptime; + use Lingua::EN::Inflect qw(PL); + use Tie::IxHash; + use URI::URL; + use URI::Escape; + use HTML::Entities; + use HTML::TreeBuilder; + use HTML::FormatText; + use JSON; + use MIME::Base64; + use IO::Handle; + use IO::File; + use IO::Scalar; + #not actually using this yet anyway...# use IPC::Run3 0.036; + use Net::Whois::Raw qw(whois); + if ( $] < 5.006 ) { + eval "use Net::Whois::Raw 0.32 qw(whois)"; + die $@ if $@; + } + use Text::CSV_XS; + use Spreadsheet::WriteExcel; + use Business::CreditCard 0.30; #for mask-aware cardtype() + use NetAddr::IP; + use String::Approx qw(amatch); + use Chart::LinesPoints; + use Chart::Mountain; + use Color::Scheme; + use HTML::Widgets::SelectLayers 0.07; #should go away in favor of + #selectlayers.html + use Locale::Country; + use Business::US::USPS::WebTools::AddressStandardization; + use FS; + use FS::UID qw( getotaker dbh datasrc driver_name ); + use FS::Record qw( qsearch qsearchs fields dbdef + str2time_sql str2time_sql_closing + ); + use FS::Conf; + use FS::CGI qw(header menubar table itable ntable idiot + eidiot myexit http_header); + use FS::UI::Web qw(svc_url); + use FS::UI::Web::small_custview qw(small_custview); + use FS::UI::bytecount; + use FS::Msgcat qw(gettext geterror); + use FS::Misc qw( send_email send_fax states_hash counties state_label ); + use FS::Report::Table::Monthly; + use FS::TicketSystem; + + use FS::agent; + use FS::agent_type; + use FS::domain_record; + use FS::cust_bill; + use FS::cust_bill_pay; + use FS::cust_credit; + use FS::cust_credit_bill; + use FS::cust_main qw(smart_search); + use FS::cust_main_county; + use FS::cust_pay; + use FS::cust_pkg; + use FS::part_pkg_taxclass; + use FS::cust_pkg_reason; + use FS::cust_refund; + use FS::cust_credit_refund; + use FS::cust_pay_refund; + use FS::cust_svc; + use FS::nas; + use FS::part_bill_event; + use FS::part_event; + use FS::part_event_condition; + use FS::part_pkg; + use FS::part_referral; + use FS::part_svc; + use FS::part_svc_router; + use FS::part_virtual_field; + use FS::pay_batch; + use FS::pkg_svc; + use FS::port; + use FS::queue qw(joblisting); + use FS::raddb; + use FS::session; + use FS::svc_acct; + use FS::svc_acct_pop qw(popselector); + use FS::acct_rt_transaction; + use FS::svc_domain; + use FS::svc_forward; + use FS::svc_www; + use FS::router; + use FS::addr_block; + use FS::svc_broadband; + use FS::svc_external; + use FS::type_pkgs; + use FS::part_export; + use FS::part_export_option; + use FS::export_svc; + use FS::msgcat; + use FS::rate; + use FS::rate_region; + use FS::rate_prefix; + use FS::payment_gateway; + use FS::agent_payment_gateway; + use FS::XMLRPC; + use FS::payby; + use FS::cdr; + use FS::inventory_class; + use FS::inventory_item; + use FS::pkg_category; + use FS::pkg_class; + use FS::access_user; + use FS::access_user_pref; + use FS::access_group; + use FS::access_usergroup; + use FS::access_groupagent; + use FS::access_right; + use FS::AccessRight; + use FS::svc_phone; + use FS::reason_type; + use FS::reason; + use FS::cust_main_note; + use FS::tax_class; + use FS::cust_tax_location; + use FS::part_pkg_taxproduct; + use FS::part_pkg_taxoverride; + use FS::part_pkg_taxrate; + use FS::tax_rate; + + if ( %%%RT_ENABLED%%% ) { + eval ' + use lib ( "/opt/rt3/local/lib", "/opt/rt3/lib" ); + use vars qw($Nobody $SystemUser); + use RT; + use RT::Tickets; + use RT::Transactions; + use RT::Users; + use RT::CurrentUser; + use RT::Templates; + use RT::Queues; + use RT::ScripActions; + use RT::ScripConditions; + use RT::Scrips; + use RT::Groups; + use RT::GroupMembers; + use RT::CustomFields; + use RT::CustomFieldValues; + use RT::ObjectCustomFieldValues; + + #blah. manually updated from RT::Interface::Web::Handler + use RT::Interface::Web; + use MIME::Entity; + use Text::Wrapper; + use Time::ParseDate; + use Time::HiRes; + use HTML::Scrubber; + + #blah. not even in RT::Interface::Web::Handler, just in + #html/NoAuth/css/dhandler and rt-test-dependencies. ask for it here + #to throw a real error instead of just a mysterious unstyled RT + use CSS::Squish 0.06; + + #slow, unreliable, segfaults and is optional + #see rt/html/Ticket/Elements/ShowTransactionAttachments + #use Text::Quoted; + + #?#use File::Path qw( rmtree ); + #?#use File::Glob qw( bsd_glob ); + #?#use File::Spec::Unix; + + '; + die $@ if $@; + } + + *CGI::redirect = sub { + my $self = shift; + my $cookie = ''; + if ( $_[0] eq '-cookie' ) { #this isn't actually used at the moment + (my $x, $cookie) = (shift, shift); + $HTML::Mason::r->err_headers_out->add( 'Set-cookie' => $cookie ); + } + my $location = shift; + + use vars qw($m); + + # false laziness w/below + if ( defined(@DBIx::Profile::ISA) ) { #profiling redirect + + my $page = + qq!Redirect to $location!. + '

'.
+          ( UNIVERSAL::can(dbh, 'sprintProfile')
+              ? encode_entities(dbh->sprintProfile())
+              : 'DBIx::Profile missing sprintProfile method;'.
+                'unpatched or too old?'                        ).
+        #"\n\n". &sprintAutoProfile().  '
'. + "\n\n". ''. + ''; + dbh->{'private_profile'} = {}; + return $page; + + } else { #normal redirect + + $m->redirect($location); + ''; + + } + + }; + + sub include { + use vars qw($m); + $m->scomp(@_); + } + + sub errorpage { + use vars qw($m); + $m->comp('/elements/errorpage.html', @_); + } + + sub redirect { + my( $location ) = @_; + use vars qw($m); + $m->clear_buffer; + #false laziness w/above + if ( defined(@DBIx::Profile::ISA) ) { #profiling redirect + + $m->print( + qq!Redirect to $location!. + '

'.
+          ( UNIVERSAL::can(dbh, 'sprintProfile')
+              ? encode_entities(dbh->sprintProfile())
+              : 'DBIx::Profile missing sprintProfile method;'.
+                'unpatched or too old?'                        ).
+        #"\n\n". &sprintAutoProfile().  '
'. + "\n\n". ''. + '' + ); + dbh->{'private_profile'} = {}; + + } else { #normal redirect + + $m->redirect($location); + + } + + } + +} # end package HTML::Mason::Commands; + +=head1 SUBROUTINE + +=over 4 + +=item mason_interps [ MODE ] + +Returns a list consisting of two HTML::Mason::Interp objects, the first for +Freeside pages, and the second for RT pages. + +#MODE can be 'apache' or 'standalone'. If not specified, defaults to 'apache'. + +=cut + +sub mason_interps { + my $mode = shift || 'apache'; + my %opt = @_; + + #my $request_class = 'HTML::Mason::Request'. + #( $mode eq 'apache' ? '::ApacheHandler' : '' ); + my $request_class = 'FS::Mason::Request'; + + #not entirely sure it belongs here, but what the hey + if ( %%%RT_ENABLED%%% ) { + RT::LoadConfig(); + } + + my %interp = ( + request_class => $request_class, + data_dir => '%%%MASONDATA%%%', + error_mode => 'output', + error_format => 'html', + ignore_warnings_expr => '.', + comp_root => [ + [ 'freeside'=>'%%%FREESIDE_DOCUMENT_ROOT%%%' ], + [ 'rt' =>'%%%FREESIDE_DOCUMENT_ROOT%%%/rt' ], + ], + ); + + $interp{out_method} = $opt{outbuf} if $mode eq 'standalone' && $opt{outbuf}; + + my $fs_interp = new HTML::Mason::Interp ( + %interp, + escape_flags => { 'js_string' => sub { + #${$_[0]} =~ s/(['\\\n])/'\\'.($1 eq "\n" ? 'n' : $1)/ge; + ${$_[0]} =~ s/(['\\])/\\$1/g; + ${$_[0]} =~ s/\n/\\n/g; + ${$_[0]} = "'". ${$_[0]}. "'"; + } + }, + ); + + my $rt_interp = new HTML::Mason::Interp ( + %interp, + escape_flags => { 'h' => \&RT::Interface::Web::EscapeUTF8 }, + compiler => HTML::Mason::Compiler::ToObject->new( + default_escape_flags => 'h', + allow_globals => [qw(%session)], + ), + ); + + ( $fs_interp, $rt_interp ); + +} + +=back + +=head1 BUGS + +Lurking in the darkness... + +=head1 SEE ALSO + +L, L, L + +=cut + +1; diff --git a/FS/FS/Mason/Request.pm b/FS/FS/Mason/Request.pm new file mode 100644 index 000000000..0a1df874a --- /dev/null +++ b/FS/FS/Mason/Request.pm @@ -0,0 +1,78 @@ +package FS::Mason::Request; + +use strict; +use warnings; +use vars qw( $FSURL $QUERY_STRING ); +use base 'HTML::Mason::Request'; + +$FSURL = 'http://Set/FS_Mason_Request_FSURL/in_standalone_mode/'; +$QUERY_STRING = ''; + +sub new { + my $class = shift; + + my $superclass = $HTML::Mason::ApacheHandler::VERSION ? + 'HTML::Mason::Request::ApacheHandler' : + $HTML::Mason::CGIHandler::VERSION ? + 'HTML::Mason::Request::CGI' : + 'HTML::Mason::Request'; + + $class->alter_superclass( $superclass ); + + #huh... shouldn't alter_superclass take care of this for us? + __PACKAGE__->valid_params( %{ $superclass->valid_params() } ); + + my %opt = @_; + my $mode = $superclass =~ /Apache/i ? 'apache' : 'standalone'; + freeside_setup($opt{'comp'}, $mode); + + $class->SUPER::new(@_); + +} + +sub freeside_setup { + + my( $filename, $mode ) = @_; + + #warn "initializing for $filename\n"; + + if ( $filename !~ /\/rt\/.*NoAuth/ ) { #not RT images/JS + + package HTML::Mason::Commands; + use vars qw( $cgi $p $fsurl ); + use FS::UID qw( cgisuidsetup ); + use FS::CGI qw( popurl rooturl ); + + if ( $mode eq 'apache' ) { + $cgi = new CGI; + &cgisuidsetup($cgi); + #&cgisuidsetup($r); + $fsurl = rooturl(); + $p = popurl(2); + } elsif ( $mode eq 'standalone' ) { + $cgi = new CGI $FS::Mason::Request::QUERY_STRING; #better keep setting + #if you set it once + $FS::UID::cgi = $cgi; + $fsurl = $FS::Mason::Request::FSURL; #kludgy, but what the hell + $p = popurl(2, "$fsurl$filename"); + } else { + die "unknown mode $mode"; + } + + } elsif ( $filename =~ /\/rt\/REST\/.*NoAuth/ ) { + + package HTML::Mason::Commands; #? + use FS::UID qw( adminsuidsetup ); + + #need to log somebody in for the mail gw + + ##old installs w/fs_selfs or selfserv?? + #&adminsuidsetup('fs_selfservice'); + + &adminsuidsetup('fs_queue'); + + } + +} + +1; diff --git a/FS/MANIFEST b/FS/MANIFEST index 48a58b09d..aa07d01ce 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -45,6 +45,8 @@ FS/Report/Table/Monthly.pm FS/SearchCache.pm FS/UI/Web.pm FS/UID.pm +FS/Mason.pm +FS/Mason/Request.pm FS/Msgcat.pm FS/Pony.pm FS/acct_snarf.pm diff --git a/Makefile b/Makefile index a280889cb..2ad1915ac 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ #solaris and perhaps other very weirdass /bin/sh #SHELL="/bin/ksh" -DB_TYPE = Pg -#DB_TYPE = mysql +#DB_TYPE = Pg +DB_TYPE = mysql DB_USER = freeside DB_PASSWORD= @@ -108,11 +108,14 @@ FREESIDE_URL = "http://localhost/freeside/" #for now, same db as specified in DATASOURCE... eventually, otherwise? RT_DB_DATABASE = freeside +# for cvs-upgrade-deploy target, the username who checked out the CVS copy. +CVS_USER = ivan + +# for auto-version updates, so we can "make release" more things automatically RPM_SPECFILE = rpm/freeside.spec #--- - #rt/config.layout.in RT_PATH = /opt/rt3 @@ -129,6 +132,7 @@ help: @echo "supported targets:" @echo " create-database create-config" @echo " install deploy" + @echo " cvs-upgrade-deploy" @echo " configure-rt create-rt" @echo " clean help" @echo @@ -165,11 +169,6 @@ install-docs: docs cp -r masondocs ${FREESIDE_DOCUMENT_ROOT} chown -R freeside:freeside ${FREESIDE_DOCUMENT_ROOT} cp htetc/handler.pl ${MASON_HANDLER} - perl -p -i -e "\ - s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \ - s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \ - s'%%%MASONDATA%%%'${MASONDATA}'g;\ - " ${MASON_HANDLER} [ ! -e ${MASONDATA} ] && mkdir ${MASONDATA} || true chown -R freeside ${MASONDATA} @@ -178,14 +177,10 @@ dev-docs: ln -s ${FREESIDE_PATH}/httemplate ${FREESIDE_DOCUMENT_ROOT} cp htetc/handler.pl ${MASON_HANDLER} perl -p -i -e "\ - s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \ - s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \ - s'%%%MASONDATA%%%'${MASONDATA}'g;\ s'###use Module::Refresh;###'use Module::Refresh;'; \ s'###Module::Refresh->refresh;###'Module::Refresh->refresh;'; \ " ${MASON_HANDLER} || true - perl-modules: cd FS; \ [ -e Makefile ] || perl Makefile.PL; \ @@ -196,6 +191,9 @@ perl-modules: perl -p -i -e "\ s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\ s|%%%FREESIDE_CACHE%%%|${FREESIDE_CACHE}|g;\ + s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \ + s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \ + s'%%%MASONDATA%%%'${MASONDATA}'g;\ " blib/lib/FS/*.pm;\ perl -p -i -e "\ s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\ @@ -277,6 +275,12 @@ deploy: install ${HTTPD_RESTART} ${FREESIDE_RESTART} +cvs-upgrade-deploy: + su ${CVS_USER} -c 'cvs update -d -P' + make install-perl-modules + su freeside -c "freeside-upgrade ${CVS_USER}" #not really the same user + make deploy + dev: dev-perl-modules dev-docs create-database: diff --git a/htetc/handler.pl b/htetc/handler.pl index 77a1f640f..1dd16ec72 100644 --- a/htetc/handler.pl +++ b/htetc/handler.pl @@ -3,10 +3,10 @@ package HTML::Mason; use strict; -use vars qw($r); -use HTML::Mason 1.27; #http://www.masonhq.com/?ApacheModPerl2Redirect -use HTML::Mason::Interp; -use HTML::Mason::Compiler::ToObject; +use warnings; +use FS::Mason qw( mason_interps ); + +#use vars qw($r); # Bring in ApacheHandler, necessary for mod_perl integration. # Uncomment the second line (and comment the first) to use @@ -16,59 +16,14 @@ use HTML::Mason::ApacheHandler; ###use Module::Refresh;### -# List of modules that you want to use from components (see Admin -# manual for details) -#{ package HTML::Mason::Commands; -# use CGI; -#} - -if ( %%%RT_ENABLED%%% ) { - eval ' - use lib ( "/opt/rt3/local/lib", "/opt/rt3/lib" ); - use RT; - use vars qw($Nobody $SystemUser); - RT::LoadConfig(); - '; - die $@ if $@; -} - # Create Mason objects -my %interp = ( - request_class => 'HTML::Mason::Request::ApacheHandler', - data_dir => '%%%MASONDATA%%%', - error_mode => 'output', - error_format => 'html', - ignore_warnings_expr => '.', - comp_root => [ - [ 'freeside' => '%%%FREESIDE_DOCUMENT_ROOT%%%' ], - [ 'rt' => '%%%FREESIDE_DOCUMENT_ROOT%%%/rt' ], - ], -); - -my $fs_interp = new HTML::Mason::Interp ( - %interp, - escape_flags => { 'js_string' => sub { - #${$_[0]} =~ s/(['\\\n])/'\\'.($1 eq "\n" ? 'n' : $1)/ge; - ${$_[0]} =~ s/(['\\])/\\$1/g; - ${$_[0]} =~ s/\n/\\n/g; - ${$_[0]} = "'". ${$_[0]}. "'"; - } - }, -); - -my $rt_interp = new HTML::Mason::Interp ( - %interp, - escape_flags => { 'h' => \&RT::Interface::Web::EscapeUTF8 }, - compiler => HTML::Mason::Compiler::ToObject->new( - default_escape_flags => 'h', - allow_globals => [qw(%session)], - ), -); +my( $fs_interp, $rt_interp ) = mason_interps('apache'); my $ah = new HTML::Mason::ApacheHandler ( - interp => $fs_interp, - args_method => 'CGI', #(and FS too) + interp => $fs_interp, + request_class => 'FS::Mason::Request', + args_method => 'CGI', #(and FS too) ); # Activate the following if running httpd as root (the normal case). @@ -78,7 +33,8 @@ my $ah = new HTML::Mason::ApacheHandler ( sub handler { - ($r) = @_; + #($r) = @_; + my $r = shift; # If you plan to intermix images in the same directory as # components, activate the following to prevent Mason from @@ -86,289 +42,6 @@ sub handler # #return -1 if $r->content_type && $r->content_type !~ m|^text/|i; - #rar - { package HTML::Mason::Commands; - use strict; - use vars qw( $cgi $p $fsurl); - use vars qw( %session ); - use CGI 3.29 qw(-private_tempfiles); #3.29 to fix RT attachment problems - #use CGI::Carp qw(fatalsToBrowser); - use CGI::Cookie; - use List::Util qw( max min ); - use Data::Dumper; - use Date::Format; - use Date::Parse; - use Time::Local; - use Time::Duration; - use DateTime; - use DateTime::Format::Strptime; - use Lingua::EN::Inflect qw(PL); - use Tie::IxHash; - use URI::URL; - use URI::Escape; - use HTML::Entities; - use HTML::TreeBuilder; - use HTML::FormatText; - use JSON; - use MIME::Base64; - use IO::Handle; - use IO::File; - use IO::Scalar; - #not actually using this yet anyway...# use IPC::Run3 0.036; - use Net::Whois::Raw qw(whois); - if ( $] < 5.006 ) { - eval "use Net::Whois::Raw 0.32 qw(whois)"; - die $@ if $@; - } - use Text::CSV_XS; - use Spreadsheet::WriteExcel; - use Business::CreditCard 0.30; #for mask-aware cardtype() - use NetAddr::IP; - use String::Approx qw(amatch); - use Chart::LinesPoints; - use Chart::Mountain; - use Color::Scheme; - use HTML::Widgets::SelectLayers 0.07; #should go away in favor of - #selectlayers.html - use Locale::Country; - use Business::US::USPS::WebTools::AddressStandardization; - use FS; - use FS::UID qw( adminsuidsetup cgisuidsetup getotaker - dbh datasrc driver_name - ); - use FS::Record qw( qsearch qsearchs fields dbdef - str2time_sql str2time_sql_closing - ); - use FS::Conf; - use FS::CGI qw(header menubar popurl rooturl table itable ntable idiot - eidiot myexit http_header); - use FS::UI::Web qw(svc_url); - use FS::UI::Web::small_custview qw(small_custview); - use FS::UI::bytecount; - use FS::Msgcat qw(gettext geterror); - use FS::Misc qw( send_email send_fax states_hash counties state_label ); - use FS::Report::Table::Monthly; - use FS::TicketSystem; - - use FS::agent; - use FS::agent_type; - use FS::domain_record; - use FS::cust_bill; - use FS::cust_bill_pay; - use FS::cust_credit; - use FS::cust_credit_bill; - use FS::cust_main qw(smart_search); - use FS::cust_main_county; - use FS::cust_pay; - use FS::cust_pkg; - use FS::part_pkg_taxclass; - use FS::cust_pkg_reason; - use FS::cust_refund; - use FS::cust_credit_refund; - use FS::cust_pay_refund; - use FS::cust_svc; - use FS::nas; - use FS::part_bill_event; - use FS::part_event; - use FS::part_event_condition; - use FS::part_pkg; - use FS::part_referral; - use FS::part_svc; - use FS::part_svc_router; - use FS::part_virtual_field; - use FS::pay_batch; - use FS::pkg_svc; - use FS::port; - use FS::queue qw(joblisting); - use FS::raddb; - use FS::session; - use FS::svc_acct; - use FS::svc_acct_pop qw(popselector); - use FS::acct_rt_transaction; - use FS::svc_domain; - use FS::svc_forward; - use FS::svc_www; - use FS::router; - use FS::addr_block; - use FS::svc_broadband; - use FS::svc_external; - use FS::type_pkgs; - use FS::part_export; - use FS::part_export_option; - use FS::export_svc; - use FS::msgcat; - use FS::rate; - use FS::rate_region; - use FS::rate_prefix; - use FS::payment_gateway; - use FS::agent_payment_gateway; - use FS::XMLRPC; - use FS::payby; - use FS::cdr; - use FS::inventory_class; - use FS::inventory_item; - use FS::pkg_category; - use FS::pkg_class; - use FS::access_user; - use FS::access_user_pref; - use FS::access_group; - use FS::access_usergroup; - use FS::access_groupagent; - use FS::access_right; - use FS::AccessRight; - use FS::svc_phone; - use FS::reason_type; - use FS::reason; - use FS::cust_main_note; - use FS::tax_class; - use FS::cust_tax_location; - use FS::part_pkg_taxproduct; - use FS::part_pkg_taxoverride; - use FS::part_pkg_taxrate; - use FS::tax_rate; - - if ( %%%RT_ENABLED%%% ) { - eval ' - use RT::Tickets; - use RT::Transactions; - use RT::Users; - use RT::CurrentUser; - use RT::Templates; - use RT::Queues; - use RT::ScripActions; - use RT::ScripConditions; - use RT::Scrips; - use RT::Groups; - use RT::GroupMembers; - use RT::CustomFields; - use RT::CustomFieldValues; - use RT::ObjectCustomFieldValues; - - #blah. manually updated from RT::Interface::Web::Handler - use RT::Interface::Web; - use MIME::Entity; - use Text::Wrapper; - use Time::ParseDate; - use Time::HiRes; - use HTML::Scrubber; - - #blah. not even in RT::Interface::Web::Handler, just in - #html/NoAuth/css/dhandler and rt-test-dependencies. ask for it here - #to throw a real error instead of just a mysterious unstyled RT - use CSS::Squish 0.06; - - #slow, unreliable, segfaults and is optional - #see rt/html/Ticket/Elements/ShowTransactionAttachments - #use Text::Quoted; - - #?#use File::Path qw( rmtree ); - #?#use File::Glob qw( bsd_glob ); - #?#use File::Spec::Unix; - - '; - die $@ if $@; - } - - *CGI::redirect = sub { - my $self = shift; - my $cookie = ''; - if ( $_[0] eq '-cookie' ) { #this isn't actually used at the moment - (my $x, $cookie) = (shift, shift); - $HTML::Mason::r->err_headers_out->add( 'Set-cookie' => $cookie ); - } - my $location = shift; - - use vars qw($m); - - # false laziness w/below - if ( defined(@DBIx::Profile::ISA) ) { #profiling redirect - - my $page = - qq!Redirect to $location!. - '

'.
-              ( UNIVERSAL::can(dbh, 'sprintProfile')
-                  ? encode_entities(dbh->sprintProfile())
-                  : 'DBIx::Profile missing sprintProfile method;'.
-                    'unpatched or too old?'                        ).
-            #"\n\n". &sprintAutoProfile().  '
'. - "\n\n". ''. - ''; - dbh->{'private_profile'} = {}; - return $page; - - } else { #normal redirect - - $m->redirect($location); - ''; - - } - - }; - - if ( $HTML::Mason::r->filename !~ /\/rt\/.*NoAuth/ ) { #not RT images/JS - - $cgi = new CGI; - &cgisuidsetup($cgi); - #&cgisuidsetup($r); - $p = popurl(2); - $fsurl = rooturl(); - - } elsif ( $HTML::Mason::r->filename =~ /\/rt\/REST\/.*NoAuth/ ) { - - #need to log somebody in for the mail gw - - ##old installs w/fs_selfs or selfserv?? - #&adminsuidsetup('fs_selfservice'); - - &adminsuidsetup('fs_queue'); - - } - - sub include { - use vars qw($m); - $m->scomp(@_); - } - - sub errorpage { - use vars qw($m); - $m->comp('/elements/errorpage.html', @_); - } - - sub redirect { - my( $location ) = @_; - use vars qw($m); - $m->clear_buffer; - #false laziness w/above - if ( defined(@DBIx::Profile::ISA) ) { #profiling redirect - - $m->print( - qq!Redirect to $location!. - '

'.
-              ( UNIVERSAL::can(dbh, 'sprintProfile')
-                  ? encode_entities(dbh->sprintProfile())
-                  : 'DBIx::Profile missing sprintProfile method;'.
-                    'unpatched or too old?'                        ).
-            #"\n\n". &sprintAutoProfile().  '
'. - "\n\n". ''. - '' - ); - dbh->{'private_profile'} = {}; - - #whew. removing this is all that's needed to fix the annoying - #blank-page-instead-of-profiling-redirect-when-called-from-an-include - #bug triggered by mason 1.32 - #my $rv = $m->abort(200); - - } else { #normal redirect - - $m->redirect($location); - - } - - } - - } # end package HTML::Mason::Commands; - ###Module::Refresh->refresh;### $r->content_type('text/html');