# parse_html_template('login_screen/user_login')
# parse_html_template('generic/error')
-BEGIN {
- use SL::System::Process;
- my $exe_dir = SL::System::Process::exe_dir;
-
- unshift @INC, "${exe_dir}/modules/override"; # Use our own versions of various modules (e.g. YAML).
- push @INC, "${exe_dir}/modules/fallback"; # Only use our own versions of modules if there's no system version.
- unshift @INC, $exe_dir;
-}
-
use Carp;
use CGI qw( -no_xhtml);
use Config::Std;
use DateTime;
use Encode;
use English qw(-no_match_vars);
+use FCGI;
use File::Basename;
+use IO::File;
use List::MoreUtils qw(all);
use List::Util qw(first);
+use POSIX qw(setlocale);
use SL::ArchiveZipFixes;
use SL::Auth;
use SL::Dispatcher::AuthHandler;
use SL::Template::Plugin::HTMLFixes;
use SL::User;
+use Rose::Object::MakeMethods::Generic (
+ scalar => [ qw(restart_after_request) ],
+);
+
# Trailing new line is added so that Perl will not add the line
# number 'die' was called in.
use constant END_OF_REQUEST => "END-OF-REQUEST\n";
SL::ArchiveZipFixes->apply_fixes;
+ # Initialize character type locale to be UTF-8 instead of C:
+ foreach my $locale (qw(de_DE.UTF-8 en_US.UTF-8)) {
+ last if setlocale('LC_CTYPE', $locale);
+ }
+
return $self;
}
print $::form->parse_html_template($template, \%params);
$::lxdebug->leave_sub;
- ::end_of_request();
+ end_request();
}
sub pre_startup_setup {
"SL::Controller::$_[0]"->new->_run_action($_[1]);
}
+sub handle_all_requests {
+ my ($self) = @_;
+
+ my $request = FCGI::Request();
+ while ($request->Accept() >= 0) {
+ $self->handle_request($request);
+
+ $self->restart_after_request(1) if $self->_interface_is_fcgi && SL::System::Process::memory_usage_is_too_high();
+ $request->LastCall if $self->restart_after_request;
+ }
+
+ exec $0 if $self->restart_after_request;
+}
+
sub handle_request {
my $self = shift;
$self->{request} = shift;
action => $action,
);
- ::end_of_request() unless $auth_result{auth_ok};
+ $self->end_request unless $auth_result{auth_ok};
delete @{ $::form }{ grep { m/^\{AUTH\}/ } keys %{ $::form } } unless $auth_result{keep_auth_vars};
$self->{request}->Finish;
}
- $::lxdebug->end_request;
+ $::lxdebug->end_request(routing_type => $routing_type, script_name => $script_name, action => $action);
# cleanup
$::auth->save_session;
$::locale = undef;
$::form = undef;
- $::myconfig = ();
+ %::myconfig = ();
$::request = undef;
SL::DBConnect::Cache->reset_all;
- Form::disconnect_standard_dbh;
$self->_watch_for_changed_files;
$action .= '&error=' . $params{error} if $params{error};
print $::request->cgi->redirect("controller.pl?action=${action}");
- ::end_of_request();
+ $self->end_request;
}
sub unrequire_bin_mozilla {
my $ok = all { (stat($_))[9] == $fcgi_file_cache{$_} } keys %fcgi_file_cache;
return if $ok;
$::lxdebug->message(LXDebug::DEBUG1(), "Program modifications detected. Restarting.");
- exit;
+ $self->restart_after_request(1);
}
sub get_standard_filehandles {
$::form->header;
print $::form->parse_html_template('login_screen/old_configuration_files', { FILES => \@old_files });
- ::end_of_request();
+ end_request();
}
-package main;
-
-use strict;
-
-sub end_of_request {
+sub end_request {
die SL::Dispatcher->END_OF_REQUEST;
}