X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDispatcher.pm;h=01b6aff2ea860f1b4267dd3541e72f20a607a70a;hb=13fc241edb1b1a658eb818a106ec06e1e9dac005;hp=5282369fd758eb52d9bd9a3a04ebb96974e623b3;hpb=7c9fc25b6893a1ea508185a0f1a197d6b46f187a;p=kivitendo-erp.git diff --git a/SL/Dispatcher.pm b/SL/Dispatcher.pm index 5282369fd..01b6aff2e 100644 --- a/SL/Dispatcher.pm +++ b/SL/Dispatcher.pm @@ -16,6 +16,7 @@ BEGIN { unshift @INC, $exe_dir; } +use Carp; use CGI qw( -no_xhtml); use Config::Std; use DateTime; @@ -30,6 +31,7 @@ use SL::Dispatcher::AuthHandler; use SL::LXDebug; use SL::LxOfficeConf; use SL::Locale; +use SL::ClientJS; use SL::Common; use SL::Form; use SL::Helper::DateTime; @@ -74,6 +76,14 @@ sub pre_request_checks { } } +sub render_error_ajax { + my ($error) = @_; + + SL::ClientJS->new + ->error($error) + ->render(SL::Controller::Base->new); +} + sub show_error { $::lxdebug->enter_sub; my $template = shift; @@ -85,6 +95,8 @@ sub show_error { $::form->{error} = $::locale->text('The session is invalid or has expired.') if ($error_type eq 'session'); $::form->{error} = $::locale->text('Incorrect password!') if ($error_type eq 'password'); + return render_error_ajax($::form->{error}) if $::request->is_ajax; + $::form->header; print $::form->parse_html_template($template, \%params); $::lxdebug->leave_sub; @@ -117,6 +129,8 @@ sub pre_startup_setup { $::lxdebug->warn(@_); }; + $SIG{__DIE__} = sub { Carp::confess( @_ ) } if $::lx_office_conf{debug}->{backtrace_on_die}; + $self->_cache_file_modification_times; } @@ -198,6 +212,7 @@ sub handle_request { my %routing; eval { %routing = _route_request($ENV{SCRIPT_NAME}); 1; } or return; ($routing_type, $script_name, $action) = @routing{qw(type controller action)}; + $::lxdebug->log_request($routing_type, $script_name, $action); $::request->type(lc($routing{request_type} || 'html')); @@ -271,11 +286,17 @@ sub handle_request { 1; } or do { - if ($EVAL_ERROR ne END_OF_REQUEST) { - print STDERR $EVAL_ERROR; - $::form->{label_error} = $::request->{cgi}->pre($EVAL_ERROR); - chdir SL::System::Process::exe_dir; - eval { show_error('generic/error') }; + if (substr($EVAL_ERROR, 0, length(END_OF_REQUEST())) ne END_OF_REQUEST()) { + my $error = $EVAL_ERROR; + print STDERR $error; + + if ($::request->is_ajax) { + eval { render_error_ajax($error) }; + } else { + $::form->{label_error} = $::request->{cgi}->pre($error); + chdir SL::System::Process::exe_dir; + eval { show_error('generic/error') }; + } } };