fxsellprice auf sellprice setzen
[kivitendo-erp.git] / SL / Auth.pm
index 7c97904..087301a 100644 (file)
@@ -13,6 +13,7 @@ use SL::Auth::DB;
 use SL::Auth::LDAP;
 
 use SL::User;
+use SL::DBUpgrade2;
 use SL::DBUtils;
 
 use strict;
@@ -187,7 +188,7 @@ sub dbconnect {
     $main::form->error($main::locale->text('The connection to the authentication database failed:') . "\n" . $DBI::errstr);
   }
 
-  $main::lxdebug->leave_sub();
+  $main::lxdebug->leave_sub(2);
 
   return $self->{dbh};
 }
@@ -303,7 +304,7 @@ sub create_tables {
   $charset     ||= Common::DEFAULT_CHARSET;
 
   $dbh->rollback();
-  User->process_query($main::form, $dbh, 'sql/auth_db.sql', undef, $charset);
+  SL::DBUpgrade2->new(form => $::form)->process_query($dbh, 'sql/auth_db.sql', undef, $charset);
 
   $main::lxdebug->leave_sub();
 }
@@ -489,16 +490,15 @@ sub restore_session {
   if (!$cookie || $cookie->{is_expired} || ($cookie->{ip_address} ne $ENV{REMOTE_ADDR})) {
     $self->destroy_session();
     $main::lxdebug->leave_sub();
-    return SESSION_EXPIRED;
+    return $cookie ? SESSION_EXPIRED : SESSION_NONE;
   }
 
   $query = qq|SELECT sess_key, sess_value FROM auth.session_content WHERE session_id = ?|;
   $sth   = prepare_execute_query($form, $dbh, $query, $session_id);
 
   while (my $ref = $sth->fetchrow_hashref()) {
-    my $value                            = $self->_load_value($ref->{sess_value});
-    $self->{SESSION}->{$ref->{sess_key}} = $value;
-    $form->{$ref->{sess_key}}            = $value if (!defined $form->{$ref->{sess_key}});
+    $self->{SESSION}->{$ref->{sess_key}} = $ref->{sess_value};
+    $form->{$ref->{sess_key}}            = $self->_load_value($ref->{sess_value}) if (!defined $form->{$ref->{sess_key}});
   }
 
   $sth->finish();
@@ -597,7 +597,6 @@ sub create_or_refresh_session {
 
   if ($id) {
     do_query($form, $dbh, qq|UPDATE auth.session SET mtime = now() WHERE id = ?|, $session_id);
-    do_query($form, $dbh, qq|DELETE FROM auth.session_content WHERE session_id = ?|, $session_id);
 
   } else {
     do_query($form, $dbh, qq|INSERT INTO auth.session (id, ip_address, mtime) VALUES (?, ?, now())|, $session_id, $ENV{REMOTE_ADDR});
@@ -617,14 +616,20 @@ sub save_session {
 
   my $dbh          = $provided_dbh || $self->dbconnect();
 
-  my $query        = qq|INSERT INTO auth.session_content (session_id, sess_key, sess_value) VALUES (?, ?, ?)|;
-  my $sth          = prepare_query($::form, $dbh, $query);
+  do_query($::form, $dbh, qq|DELETE FROM auth.session_content WHERE session_id = ?|, $session_id);
 
-  foreach my $key (sort keys %{ $self->{SESSION} }) {
-    do_statement($::form, $sth, $query, $session_id, $key, $self->{SESSION}->{$key});
+  if (%{ $self->{SESSION} }) {
+    my $query = qq|INSERT INTO auth.session_content (session_id, sess_key, sess_value) VALUES (?, ?, ?)|;
+    my $sth   = prepare_query($::form, $dbh, $query);
+
+    foreach my $key (sort keys %{ $self->{SESSION} }) {
+      do_statement($::form, $sth, $query, $session_id, $key, $self->{SESSION}->{$key});
+    }
+
+    $sth->finish();
   }
 
-  $sth->finish();
+  $dbh->commit() unless $provided_dbh;
 }
 
 sub set_session_value {
@@ -640,6 +645,32 @@ sub set_session_value {
   }
 
   $main::lxdebug->leave_sub();
+
+  return $self;
+}
+
+sub delete_session_value {
+  $main::lxdebug->enter_sub();
+
+  my $self = shift;
+
+  $self->{SESSION} ||= { };
+  delete @{ $self->{SESSION} }{ @_ };
+
+  $main::lxdebug->leave_sub();
+
+  return $self;
+}
+
+sub get_session_value {
+  $main::lxdebug->enter_sub();
+
+  my $self  = shift;
+  my $value = $self->{SESSION} ? $self->_load_value($self->{SESSION}->{ $_[0] }) : undef;
+
+  $main::lxdebug->leave_sub();
+
+  return $value;
 }
 
 sub set_cookie_environment_variable {