flash_later(): In Session gespeicherter Flash für nächsten Request implementiert
[kivitendo-erp.git] / SL / Auth.pm
index 7c97904..a11fbaf 100644 (file)
@@ -187,7 +187,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};
 }
@@ -496,9 +496,8 @@ sub restore_session {
   $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 +596,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 +615,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 +644,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 {