]> wagnertech.de Git - mfinanz.git/commitdiff
Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
authorThomas Heck <theck@linet-services.de>
Tue, 28 Aug 2012 10:38:35 +0000 (12:38 +0200)
committerThomas Heck <theck@linet-services.de>
Tue, 28 Aug 2012 10:38:35 +0000 (12:38 +0200)
SL/Controller/LoginScreen.pm
SL/Helper/DateTime.pm
SL/Locale.pm

index f561a394b23faa56a5561be405c168f085f0b2b8..47dfa90c9b7c135a93b419454e6f992b114141da 100644 (file)
@@ -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;
 }
 
index 58fe6f8796289626829455e5f2734d960d3cc274..59a100c2ac6769536d2cc1e1e5c4ec14cb1455a7 100644 (file)
@@ -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<to_lxoffice>
+=item C<to_lxoffice %param>
 
-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<Locale::format_datetime_object>.
 
-=item C<from_lxoffice>
+=item C<from_lxoffice $string>
 
 Parses a date string formatted in the current Lx-Office user's date
 format and returns an instance of L<DateTime>.
 
+Note that only dates can be parsed at the moment, not the time
+component (as opposed to L<to_lxoffice>).
+
 =back
 
 =head1 AUTHOR
index 24131378fb4d01739f3c92e4536f950abcd5d387..8a2caa2c0bfb7e335b046f88eb94a075ea4508e5 100644 (file)
@@ -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<date>
+
+TODO: Describe date
+
+=item C<findsub>
+
+TODO: Describe findsub
+
+=item C<format_date>
+
+TODO: Describe format_date
+
+=item C<format_date_object $datetime, %params>
+
+Formats the C<$datetime> object accoring to the user's locale setting.
+
+The parameter C<precision> can control whether or not the time
+component is formatted as well:
+
+=over 4
+
+=item * C<day>
+
+Only format the year, month and day. This is also the default.
+
+=item * C<hour>
+
+Add the hour to the date.
+
+=item * C<minute>
+
+Add hour:minute to the date.
+
+=item * C<second>
+
+Add hour:minute:second to the date.
+
+=back
+
+=item C<get_local_time_zone>
+
+TODO: Describe get_local_time_zone
+
+=item C<is_utf8>
+
+TODO: Describe is_utf8
+
+=item C<lang_to_locale>
+
+TODO: Describe lang_to_locale
+
+=item C<new>
+
+TODO: Describe new
+
+=item C<parse_date>
+
+TODO: Describe parse_date
+
+=item C<parse_date_to_object>
+
+TODO: Describe parse_date_to_object
+
+=item C<quote_special_chars>
+
+TODO: Describe quote_special_chars
+
+=item C<raw_io_active>
+
+TODO: Describe raw_io_active
+
+=item C<reformat_date>
+
+TODO: Describe reformat_date
+
+=item C<remap_special_chars>
+
+TODO: Describe remap_special_chars
+
+=item C<restore_numberformat>
+
+TODO: Describe restore_numberformat
+
+=item C<set_numberformat_wo_thousands_separator>
+
+TODO: Describe set_numberformat_wo_thousands_separator
+
+=item C<text>
+
+TODO: Describe text
+
+=item C<unquote_special_chars>
+
+TODO: Describe unquote_special_chars
+
+=item C<with_raw_io>
+
+TODO: Describe with_raw_io
+
+=back
+
+=head1 BUGS
+
+Nothing here yet.
+
+=head1 AUTHOR
+
+Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
+
+=cut