X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FLXDebug.pm;h=cedd5baec480f3d063e0215e9ff4d1684d2e108c;hb=7f5edaa695f8e23af197c4b82b66ca2e1bbfc35e;hp=e0b7cca3c926cbbf138d9e9cc14324c903d04f61;hpb=d0693cf4b8b5224643f91c827658fb88fe377947;p=kivitendo-erp.git diff --git a/SL/LXDebug.pm b/SL/LXDebug.pm index e0b7cca3c..cedd5baec 100644 --- a/SL/LXDebug.pm +++ b/SL/LXDebug.pm @@ -20,6 +20,7 @@ use constant STDERR_TARGET => 1; use Data::Dumper; use POSIX qw(strftime getpid); +use Scalar::Util qw(blessed reftype); use Time::HiRes qw(gettimeofday tv_interval); use YAML; use SL::Request (); @@ -156,15 +157,20 @@ sub warn { $self->message(WARN, $message); } +sub _clone_for_dump { + my ($src) = @_; + + return undef unless defined($src); + return $src->as_debug_info if blessed($src) && $src->can('as_debug_info'); + return [ map { _clone_for_dump($_) } @{ $src } ] if reftype($src) eq 'ARRAY'; + return { map { ($_ => _clone_for_dump($src->{$_})) } keys %{ $src } } if reftype($src) eq 'HASH'; + return "$src"; +} + sub dump { my ($self, $level, $name, $variable, %options) = @_; - my $password; - if ($variable && ('Form' eq ref $variable) && defined $variable->{password}) { - $password = $variable->{password}; - $variable->{password} = 'X' x 8; - } - + $variable = _clone_for_dump($variable); my $dumper = Data::Dumper->new([$variable]); $dumper->Sortkeys(1); $dumper->Indent(2); @@ -172,15 +178,6 @@ sub dump { my $output = $dumper->Dump(); $self->message($level, "dumping ${name}:\n" . $output); - $variable->{password} = $password if (defined $password); - - # Data::Dumper does not reset the iterator belonging to this hash - # if 'Sortkeys' is true. Therefore clear the iterator manually. - # See "perldoc -f each". - if ($variable && (('HASH' eq ref $variable) || ('Form' eq ref $variable))) { - keys %{ $variable }; - } - return $output; } @@ -218,17 +215,6 @@ sub dump_sql_result { $self->message($level, $prefix . sprintf('(%d row%s)', scalar @{ $results }, scalar @{ $results } > 1 ? 's' : '')); } -sub dump_object { - my ($self, $level, $text, $object) = @_; - - my $copy; - if ($object) { - $copy->{$_} = $object->$_ for $object->meta->columns; - } - - $self->dump($level, $text, $copy); -} - sub show_diff { my ($self, $level, $item1, $item2, %params) = @_;