diff options
Diffstat (limited to 'rt/bin/webmux.pl.in')
-rw-r--r-- | rt/bin/webmux.pl.in | 85 |
1 files changed, 46 insertions, 39 deletions
diff --git a/rt/bin/webmux.pl.in b/rt/bin/webmux.pl.in index 73b10143d..877948960 100644 --- a/rt/bin/webmux.pl.in +++ b/rt/bin/webmux.pl.in @@ -1,9 +1,9 @@ #!@PERL@ -# BEGIN BPS TAGGED BLOCK {{{ +# {{{ BEGIN BPS TAGGED BLOCK # # COPYRIGHT: # -# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC # <jesse@bestpractical.com> # # (Except where explicitly superseded by other copyright notices) @@ -43,7 +43,7 @@ # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # -# END BPS TAGGED BLOCK }}} +# }}} END BPS TAGGED BLOCK use strict; BEGIN { @@ -53,12 +53,10 @@ BEGIN { $ENV{'ENV'} = '' if defined $ENV{'ENV'}; $ENV{'IFS'} = '' if defined $ENV{'IFS'}; - use CGI qw(-private_tempfiles); #bring this in before mason, to make sure we - #set private_tempfiles - - die "RT does not support mod_perl 1.99. Please upgrade to mod_perl 2.0" + eval { require Apache2; require APR::Table; require MasonX::Apache2Handler; 1 } or + eval { require Apache2; require Apache::compat; 1 } or die $@ if $ENV{'MOD_PERL'} - and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:1\.9)}; + and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:2|1\.9)}; } @@ -67,57 +65,62 @@ use RT; package RT::Mason; +use CGI qw(-private_tempfiles); #bring this in before mason, to make sure we + #set private_tempfiles + +use HTML::Mason; # brings in subpackages: Parser, Interp, etc. + use vars qw($Nobody $SystemUser $Handler $r); #This drags in RT's config.pm -BEGIN { - RT::LoadConfig(); - if ($RT::DevelMode) { require Module::Refresh; } -} +RT::LoadConfig(); +use Carp; { package HTML::Mason::Commands; use vars qw(%session); + + 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::TicketCustomFieldValues; + + use RT::Interface::Web; + use MIME::Entity; + use Text::Wrapper; + use CGI::Cookie; + use Time::ParseDate; + use HTML::Entities; + use HTML::Scrubber; + use Text::Quoted; } -use RT::Interface::Web; use RT::Interface::Web::Handler; $Handler = RT::Interface::Web::Handler->new(@RT::MasonParameters); -if ($ENV{'MOD_PERL'} && !$RT::DevelMode) { - # Under static_source, we need to purge the component cache - # each time we restart, so newer components may be reloaded. - # - # We can't do this in FastCGI or we'll blow away the component root _every_ time a new server starts - # which happens every few hits. - - use File::Path qw( rmtree ); - use File::Glob qw( bsd_glob ); - rmtree([ bsd_glob("$RT::MasonDataDir/obj/*") ], 0, 1); -} - sub handler { ($r) = @_; local $SIG{__WARN__}; local $SIG{__DIE__}; - # We don't need to handle non-text, non-xml items - if ($r->content_type =~ m/^httpd\b.*\bdirectory/i) { - use File::Spec::Unix; - # Our DirectoryIndex is always index.html, regardless of httpd settings - $r->filename( File::Spec::Unix->catfile( $r->filename, 'index.html' ) ); - } - elsif (defined( $r->content_type )) { - $r->content_type =~ m!(^text/|\bxml\b)!i or return -1; - } - - Module::Refresh->refresh if $RT::DevelMode; - RT::Init(); + # We don't need to handle non-text, non-xml items + return -1 if defined( $r->content_type ) && $r->content_type !~ m!(^text/|\bxml\b)!io; + my %session; my $status; eval { $status = $Handler->handle_request($r) }; @@ -127,8 +130,12 @@ sub handler { undef(%session); - RT::Interface::Web::Handler->CleanupRequest(); - + if ( $RT::Handle->TransactionDepth ) { + $RT::Handle->ForceRollback; + $RT::Logger->crit( +"Transaction not committed. Usually indicates a software fault. Data loss may have occurred" + ); + } return $status; } |