X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FInterface%2FWeb%2FHandler.pm;h=e41490f8fb210e30f8ac007589b678fb824d2338;hp=7ee654e7ccac46dc24ec70f4f13711640f843c3d;hb=9c68254528b6f2c7d8c1921b452fa56064783782;hpb=d39d52aac8f38ea9115628039f0df5aa3ac826de diff --git a/rt/lib/RT/Interface/Web/Handler.pm b/rt/lib/RT/Interface/Web/Handler.pm index 7ee654e7c..e41490f8f 100644 --- a/rt/lib/RT/Interface/Web/Handler.pm +++ b/rt/lib/RT/Interface/Web/Handler.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-2005 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -42,9 +42,24 @@ # 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::Interface::Web::Handler; +use CGI qw/-private_tempfiles/; +use MIME::Entity; +use Text::Wrapper; +use CGI::Cookie; +use Time::ParseDate; +use Time::HiRes; +use HTML::Entities; +use HTML::Scrubber; +use Text::Quoted; +use RT::Interface::Web::Handler; +use File::Path qw( rmtree ); +use File::Glob qw( bsd_glob ); +use File::Spec::Unix; + sub DefaultHandlerArgs { ( comp_root => [ [ local => $RT::MasonLocalComponentRoot ], @@ -53,7 +68,10 @@ sub DefaultHandlerArgs { ( default_escape_flags => 'h', data_dir => "$RT::MasonDataDir", allow_globals => [qw(%session)], - autoflush => 1 + # Turn off static source if we're in developer mode. + static_source => ($RT::DevelMode ? '0' : '1'), + use_object_files => ($RT::DevelMode ? '0' : '1'), + autoflush => 0 ) }; # {{{ sub new @@ -69,19 +87,17 @@ sub new { my $class = shift; $class->InitSessionDir; - if ($MasonX::Apache2Handler::VERSION) { - goto &NewApache2Handler; - } - elsif ($mod_perl::VERSION and $mod_perl::VERSION >= 1.9908) { - require Apache::RequestUtil; - no warnings 'redefine'; - my $sub = *Apache::request{CODE}; - *Apache::request = sub { - my $r; - eval { $r = $sub->('Apache'); }; - # warn $@ if $@; - return $r; - }; + if ( $mod_perl::VERSION && $mod_perl::VERSION >= 1.9908 ) { +# require Apache::RequestUtil; +# no warnings 'redefine'; +# my $sub = *Apache::request{CODE}; +# *Apache::request = sub { +# my $r; +# eval { $r = $sub->('Apache'); }; +# +# # warn $@ if $@; +# return $r; +# }; goto &NewApacheHandler; } elsif ($CGI::MOD_PERL) { @@ -96,14 +112,15 @@ sub InitSessionDir { # Activate the following if running httpd as root (the normal case). # Resets ownership of all files created by Mason at startup. # Note that mysql uses DB for sessions, so there's no need to do this. - unless ( $RT::DatabaseType =~ /(mysql|Pg)/ ) { + unless ( $RT::DatabaseType =~ /(?:mysql|Pg)/ ) { # Clean up our umask to protect session files umask(0077); - if ($CGI::MOD_PERL) { + if ($CGI::MOD_PERL and $CGI::MOD_PERL < 1.9908 ) { + chown( Apache->server->uid, Apache->server->gid, - [$RT::MasonSessionDir] ) + $RT::MasonSessionDir ) if Apache->server->can('uid'); } @@ -170,9 +187,36 @@ sub NewHandler { ); $handler->interp->set_escape( h => \&RT::Interface::Web::EscapeUTF8 ); + $handler->interp->set_escape( u => \&RT::Interface::Web::EscapeURI ); return($handler); } +=head2 CleanupRequest + +Rollback any uncommitted transaction. +Flush the ACL cache +Flush the searchbuilder query cache + +=cut + +sub CleanupRequest { + + if ( $RT::Handle->TransactionDepth ) { + $RT::Handle->ForceRollback; + $RT::Logger->crit( + "Transaction not committed. Usually indicates a software fault." + . "Data loss may have occurred" ); + } + + # Clean out the ACL cache. the performance impact should be marginal. + # Consistency is imprived, too. + RT::Principal->InvalidateACLCache(); + DBIx::SearchBuilder::Record::Cachable->FlushCache + if ( $RT::WebFlushDbCacheEveryRequest + and UNIVERSAL::can( + 'DBIx::SearchBuilder::Record::Cachable' => 'FlushCache' ) ); + +} # }}} 1;