X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDispatcher.pm;h=43bf6680b98c38dd1f50b9dd5672efb4fe5b4362;hb=29637d3f54132b3c10293f3600902d107127cdbc;hp=747da04854ede10bf7998bafb00b49fc14e76550;hpb=670f76a86aaf642bf1a6b5b37cdc023f8fdfc79c;p=kivitendo-erp.git diff --git a/SL/Dispatcher.pm b/SL/Dispatcher.pm index 747da0485..43bf6680b 100644 --- a/SL/Dispatcher.pm +++ b/SL/Dispatcher.pm @@ -2,9 +2,18 @@ package SL::Dispatcher; use strict; +# Force scripts/locales.pl to parse these templates: +# parse_html_template('login_screen/auth_db_unreachable') +# parse_html_template('login_screen/user_login') +# parse_html_template('generic/error') + BEGIN { - unshift @INC, "modules/override"; # Use our own versions of various modules (e.g. YAML). - push @INC, "modules/fallback"; # Only use our own versions of modules if there's no system version. + 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 CGI qw( -no_xhtml); @@ -56,7 +65,7 @@ sub pre_request_checks { ::run(); ::end_of_request(); } else { - show_error('login/auth_db_unreachable'); + show_error('login_screen/auth_db_unreachable'); } } } @@ -67,10 +76,10 @@ sub show_error { my $error_type = shift || ''; my %params = @_; - $::locale = Locale->new($::lx_office_conf{system}->{language}); + $::myconfig{countrycode} = delete($params{countrycode}) || $::lx_office_conf{system}->{language}; + $::locale = Locale->new($::myconfig{countrycode}); $::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'); - $::myconfig{countrycode} = $::lx_office_conf{system}->{language}; + $::form->{error} = $::locale->text('Incorrect password!') if ($error_type eq 'password'); $::form->header; print $::form->parse_html_template($template, \%params); @@ -200,24 +209,35 @@ sub handle_request { $::form->error($::locale->text('System currently down for maintenance!')) if -e ($::lx_office_conf{paths}->{userspath} . "/nologin") && $script ne 'admin'; - if ($script eq 'login' or $script eq 'admin') { - $::form->{titlebar} = "Lx-Office " . $::locale->text('Version') . " $::form->{version}"; + # For compatibility with a lot of database upgrade scripts etc: + # Re-write request to old 'login.pl?action=login' to new + # 'LoginScreen' controller. Make sure to load its code! + if (($script eq 'login') && ($action eq 'login')) { + ($routing_type, $script, $script_name, $action) = qw(controller controller LoginScreen login); + _require_controller('LoginScreen'); + } + + if (($script eq 'login') && !$action) { + print $::request->{cgi}->redirect('controller.pl?action=LoginScreen/user_login'); + + } elsif ($script eq 'admin') { + $::form->{titlebar} = "kivitendo " . $::locale->text('Version') . " $::form->{version}"; ::run($session_result); } else { - show_error('login/password_error', 'session') if SL::Auth::SESSION_EXPIRED == $session_result; + show_error('login_screen/user_login', 'session') if SL::Auth::SESSION_EXPIRED == $session_result; - my $auth_level = $self->{auth_handler}->handle( + my %auth_result = $self->{auth_handler}->handle( routing_type => $routing_type, script => $script, controller => $script_name, action => $action, ); - delete @{ $::form }{ grep { m/^\{AUTH\}/ } keys %{ $::form } }; + delete @{ $::form }{ grep { m/^\{AUTH\}/ } keys %{ $::form } } unless $auth_result{keep_auth_vars}; if ($action) { - $::instance_conf->init if $auth_level eq 'user'; + $::instance_conf->init if $auth_result{auth_level} eq 'user'; map { $::form->{$_} = $::myconfig{$_} } qw(charset) unless $action eq 'save' && $::form->{type} eq 'preferences'; @@ -238,6 +258,7 @@ sub handle_request { 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') }; } }; @@ -371,9 +392,9 @@ sub _check_for_old_config_files { my @old_files = grep { -f "config/${_}" } qw(authentication.pl console.conf lx-erp.conf lx-erp-local.conf); return unless @old_files; - $::form->{title} = $::locale->text('Old configuration files'); + $::form->{title} = $::locale->text('Old configuration files'); $::form->header; - print $::form->parse_html_template('login/old_configuration_files', { FILES => \@old_files }); + print $::form->parse_html_template('login_screen/old_configuration_files', { FILES => \@old_files }); ::end_of_request(); }