From: Thomas Heck Date: Tue, 28 Aug 2012 10:38:35 +0000 (+0200) Subject: Merge branch 'master' of vc.linet-services.de:public/lx-office-erp X-Git-Tag: release-3.0.0beta1~271 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/a1a9bb961ab49ee053cb208ea01e17430d0ca836?hp=fcc1d512a5e2cd9db53702fea9ef83684aa0f2f3 Merge branch 'master' of vc.linet-services.de:public/lx-office-erp --- diff --git a/SL/Controller/LoginScreen.pm b/SL/Controller/LoginScreen.pm index f561a394b..47dfa90c9 100644 --- a/SL/Controller/LoginScreen.pm +++ b/SL/Controller/LoginScreen.pm @@ -14,6 +14,11 @@ use SL::User; sub action_user_login { my ($self) = @_; + # If the user is already logged in then redirect to the proper menu + # script. + return if $self->_redirect_to_main_script_if_already_logged_in; + + # Otherwise show the login form. $self->render('login_screen/user_login'); } @@ -55,6 +60,27 @@ sub action_login { # Everything is fine. $::auth->set_cookie_environment_variable(); + $self->_redirect_to_main_script($user); +} + +# +# settings +# +sub get_auth_level { + return 'none'; +} + +sub keep_auth_vars_in_form { + return 1; +} + +# +# private methods +# + +sub _redirect_to_main_script { + my ($self, $user) = @_; + return $self->redirect_to($::form->{callback}) if $::form->{callback}; my %style_to_script_map = ( @@ -68,14 +94,25 @@ sub action_login { $self->redirect_to(controller => "menu${menu_script}.pl", action => 'display'); } -# -# settings -# -sub get_auth_level { - return 'none'; -} +sub _redirect_to_main_script_if_already_logged_in { + my ($self) = @_; + + # Get 'login' from valid session. + my $login = $::auth->get_session_value('login'); + return unless $login; + + # See whether or not the user exists in the database. + my %user = $::auth->read_user(login => $login); + return if ($user{login} || '') ne $login; + + # Check if the session is logged in correctly. + return if SL::Auth::OK() != $::auth->authenticate($login, undef); + + $::auth->create_or_refresh_session; + $::auth->delete_session_value('FLASH'); + + $self->_redirect_to_main_script(\%user); -sub keep_auth_vars_in_form { return 1; } diff --git a/SL/Helper/DateTime.pm b/SL/Helper/DateTime.pm index 58fe6f879..59a100c2a 100644 --- a/SL/Helper/DateTime.pm +++ b/SL/Helper/DateTime.pm @@ -11,7 +11,9 @@ sub today_local { } sub to_lxoffice { - return $::locale->format_date(\%::myconfig, $_[0]); + my $self = shift; + my %params = (scalar(@_) == 1) && (ref($_[0]) eq 'HASH') ? %{ $_[0] } : @_; + return $::locale->format_date_object($self, %params); } sub from_lxoffice { @@ -40,16 +42,19 @@ Returns the current time with the time zone set to the local time zone. Returns the current date with the time zone set to the local time zone. -=item C +=item C -Formats the date according to the current Lx-Office user's date -format. +Formats the date and time according to the current Lx-Office user's +date format with L. -=item C +=item C Parses a date string formatted in the current Lx-Office user's date format and returns an instance of L. +Note that only dates can be parsed at the moment, not the time +component (as opposed to L). + =back =head1 AUTHOR diff --git a/SL/Locale.pm b/SL/Locale.pm index 24131378f..8a2caa2c0 100644 --- a/SL/Locale.pm +++ b/SL/Locale.pm @@ -277,73 +277,74 @@ sub date { my ($self, $myconfig, $date, $longformat) = @_; + if (!$date) { + $main::lxdebug->leave_sub(); + return ''; + } + my $longdate = ""; my $longmonth = ($longformat) ? 'LONG_MONTH' : 'SHORT_MONTH'; my ($spc, $yy, $mm, $dd); - if ($date) { - # get separator - $spc = $myconfig->{dateformat}; - $spc =~ s/\w//g; - $spc = substr($spc, 1, 1); + $spc = $myconfig->{dateformat}; + $spc =~ s/\w//g; + $spc = substr($spc, 1, 1); - if ($date =~ /\D/) { - if ($myconfig->{dateformat} =~ /^yy/) { - ($yy, $mm, $dd) = split /\D/, $date; - } - if ($myconfig->{dateformat} =~ /^mm/) { - ($mm, $dd, $yy) = split /\D/, $date; - } - if ($myconfig->{dateformat} =~ /^dd/) { - ($dd, $mm, $yy) = split /\D/, $date; - } - } else { - $date = substr($date, 2); - ($yy, $mm, $dd) = ($date =~ /(..)(..)(..)/); + if ($date =~ /\D/) { + if ($myconfig->{dateformat} =~ /^yy/) { + ($yy, $mm, $dd) = split /\D/, $date; + } + if ($myconfig->{dateformat} =~ /^mm/) { + ($mm, $dd, $yy) = split /\D/, $date; + } + if ($myconfig->{dateformat} =~ /^dd/) { + ($dd, $mm, $yy) = split /\D/, $date; } + } else { + $date = substr($date, 2); + ($yy, $mm, $dd) = ($date =~ /(..)(..)(..)/); + } - $dd *= 1; - $mm--; - $yy = ($yy < 70) ? $yy + 2000 : $yy; - $yy = ($yy >= 70 && $yy <= 99) ? $yy + 1900 : $yy; + $dd *= 1; + $mm--; + $yy = ($yy < 70) ? $yy + 2000 : $yy; + $yy = ($yy >= 70 && $yy <= 99) ? $yy + 1900 : $yy; - if ($myconfig->{dateformat} =~ /^dd/) { - if (defined $longformat && $longformat == 0) { - $mm++; - $dd = "0$dd" if ($dd < 10); - $mm = "0$mm" if ($mm < 10); - $longdate = "$dd$spc$mm$spc$yy"; - } else { - $longdate = "$dd"; - $longdate .= ($spc eq '.') ? ". " : " "; - $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; - } - } elsif ($myconfig->{dateformat} eq "yyyy-mm-dd") { - - # Use German syntax with the ISO date style "yyyy-mm-dd" because - # Lx-Office is mainly used in Germany or German speaking countries. - if (defined $longformat && $longformat == 0) { - $mm++; - $dd = "0$dd" if ($dd < 10); - $mm = "0$mm" if ($mm < 10); - $longdate = "$yy-$mm-$dd"; - } else { - $longdate = "$dd. "; - $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; - } + if ($myconfig->{dateformat} =~ /^dd/) { + if (defined $longformat && $longformat == 0) { + $mm++; + $dd = "0$dd" if ($dd < 10); + $mm = "0$mm" if ($mm < 10); + $longdate = "$dd$spc$mm$spc$yy"; } else { - if (defined $longformat && $longformat == 0) { - $mm++; - $dd = "0$dd" if ($dd < 10); - $mm = "0$mm" if ($mm < 10); - $longdate = "$mm$spc$dd$spc$yy"; - } else { - $longdate = &text($self, $self->{$longmonth}[$mm]) . " $dd, $yy"; - } + $longdate = "$dd"; + $longdate .= ($spc eq '.') ? ". " : " "; + $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; + } + } elsif ($myconfig->{dateformat} eq "yyyy-mm-dd") { + + # Use German syntax with the ISO date style "yyyy-mm-dd" because + # Lx-Office is mainly used in Germany or German speaking countries. + if (defined $longformat && $longformat == 0) { + $mm++; + $dd = "0$dd" if ($dd < 10); + $mm = "0$mm" if ($mm < 10); + $longdate = "$yy-$mm-$dd"; + } else { + $longdate = "$dd. "; + $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; + } + } else { + if (defined $longformat && $longformat == 0) { + $mm++; + $dd = "0$dd" if ($dd < 10); + $mm = "0$mm" if ($mm < 10); + $longdate = "$mm$spc$dd$spc$yy"; + } else { + $longdate = &text($self, $self->{$longmonth}[$mm]) . " $dd, $yy"; } - } $main::lxdebug->leave_sub(); @@ -396,6 +397,28 @@ sub parse_date_to_object { return $yy && $mm && $dd ? DateTime->new(year => $yy, month => $mm, day => $dd) : undef; } +sub format_date_object { + my ($self, $datetime, %params) = @_; + + my $format = $::myconfig{dateformat} || 'yyyy-mm-dd'; + $format =~ s/yyyy/\%Y/; + $format =~ s/yy/\%y/; + $format =~ s/mm/\%m/; + $format =~ s/dd/\%d/; + + my $precision = $params{precision} || 'day'; + $precision =~ s/s$//; + my %precision_spec_map = ( + second => '%H:%M:%S', + minute => '%H:%M', + hour => '%H', + ); + + $format .= ' ' . $precision_spec_map{$precision} if $precision_spec_map{$precision}; + + return $datetime->strftime($format); +} + sub reformat_date { $main::lxdebug->enter_sub(2); @@ -516,3 +539,140 @@ sub get_local_time_zone { } 1; +__END__ + +=pod + +=encoding utf8 + +=head1 NAME + +Locale - Functions for dealing with locale-dependant information + +=head1 SYNOPSIS + + use Locale; + use DateTime; + + my $locale = Locale->new('de'); + my $now = DateTime->now_local; + print "Current date and time: ", $::locale->format_date_object($now, precision => 'second'), "\n"; + +=head1 OVERVIEW + +TODO: write overview + +=head1 FUNCTIONS + +=over 4 + +=item C + +TODO: Describe date + +=item C + +TODO: Describe findsub + +=item C + +TODO: Describe format_date + +=item C + +Formats the C<$datetime> object accoring to the user's locale setting. + +The parameter C can control whether or not the time +component is formatted as well: + +=over 4 + +=item * C + +Only format the year, month and day. This is also the default. + +=item * C + +Add the hour to the date. + +=item * C + +Add hour:minute to the date. + +=item * C + +Add hour:minute:second to the date. + +=back + +=item C + +TODO: Describe get_local_time_zone + +=item C + +TODO: Describe is_utf8 + +=item C + +TODO: Describe lang_to_locale + +=item C + +TODO: Describe new + +=item C + +TODO: Describe parse_date + +=item C + +TODO: Describe parse_date_to_object + +=item C + +TODO: Describe quote_special_chars + +=item C + +TODO: Describe raw_io_active + +=item C + +TODO: Describe reformat_date + +=item C + +TODO: Describe remap_special_chars + +=item C + +TODO: Describe restore_numberformat + +=item C + +TODO: Describe set_numberformat_wo_thousands_separator + +=item C + +TODO: Describe text + +=item C + +TODO: Describe unquote_special_chars + +=item C + +TODO: Describe with_raw_io + +=back + +=head1 BUGS + +Nothing here yet. + +=head1 AUTHOR + +Moritz Bunkus Em.bunkus@linet-services.deE + +=cut