epic-s6ts
[kivitendo-erp.git] / SL / Watchdog.pm
index 3aac653..9c1a3b5 100644 (file)
@@ -4,7 +4,9 @@ use Data::Dumper;
 
 require Tie::Hash;
 
-@ISA = (Tie::StdHash);
+our @ISA = qw(Tie::StdHash);
+
+use strict;
 
 my %watched_variables;
 
@@ -13,14 +15,16 @@ sub STORE {
 
   if (substr($key, 0, 10) eq "Watchdog::") {
     substr $key, 0, 10, "";
-    $watched_variables{$key} = $value;
-    if ($value) {
-      $main::lxdebug->_write("WATCH", "Starting to watch '$key' with current value '$this->{$key}'");
-    } else {
-      $main::lxdebug->_write("WATCH", "Stopping to watch '$key'");
+    foreach $key (split m/[ ,]/, $key) {
+      $watched_variables{$key} = $value;
+      if ($value) {
+        $main::lxdebug->_write("WATCH", "Starting to watch '$key' with current value '$this->{$key}'");
+      } else {
+        $main::lxdebug->_write("WATCH", "Stopping to watch '$key'");
+      }
     }
-    return;
 
+    return;
   }
 
   if ($watched_variables{$key}
@@ -30,9 +34,41 @@ sub STORE {
     $main::lxdebug->_write("WATCH",
                            "Value of '$key' changed from '$this->{$key}' to '$value' "
                              . "in ${subroutine} at ${self_filename}:${self_line}");
+    if ($watched_variables{$key} > 1) {
+      my $level = 1;
+      my ($dummy, $filename, $line);
+
+      while (($dummy, $filename, $line, $subroutine) = caller $level) {
+        $main::lxdebug->_write("WATCH", "  ${subroutine} from ${filename}:${line}");
+        $level++;
+      }
+    }
   }
 
   $this->{$key} = $value;
 }
 
+sub DELETE {
+  my ($this, $key) = @_;
+
+  if ($watched_variables{$key} && ($this->{$key} ne "")) {
+    my $subroutine = (caller 1)[3];
+    my ($self_filename, $self_line) = (caller)[1, 2];
+    $main::lxdebug->_write("WATCH",
+                           "Value of '$key' changed from '$this->{$key}' to '' "
+                             . "in ${subroutine} at ${self_filename}:${self_line}");
+    if ($watched_variables{$key} > 1) {
+      my $level = 1;
+      my ($dummy, $filename, $line);
+
+      while (($dummy, $filename, $line, $subroutine) = caller $level) {
+        $main::lxdebug->_write("WATCH", "  ${subroutine} from ${filename}:${line}");
+        $level++;
+      }
+    }
+  }
+
+  delete $this->{$key};
+}
+
 1;