--- trunk/lib/WebPAC/Validate.pm 2006/09/11 11:57:30 665 +++ trunk/lib/WebPAC/Validate.pm 2006/09/11 12:32:51 666 @@ -145,13 +145,13 @@ $fields->{$f}++; if ( ! defined($r->{$f}) ) { - $errors->{field}->{ $f }->{unexpected} = "this field is not expected"; + $errors->{ $f }->{unexpected} = "this field is not expected"; next; } if (ref($rec->{$f}) ne 'ARRAY') { - $errors->{field}->{ $f }->{not_repeatable} = "probably bug in parsing input data"; + $errors->{ $f }->{not_repeatable} = "probably bug in parsing input data"; next; } @@ -160,10 +160,10 @@ if (ref($r->{$f}) eq 'ARRAY') { # are values hashes? (has subfields) if (! defined($v)) { -# $errors->{field}->{$f}->{empty} = undef; +# $errors->{$f}->{empty} = undef; # $errors->{dump} = $rec_dump if ($rec_dump); } elsif (ref($v) ne 'HASH') { - $errors->{field}->{$f}->{missing_subfield} = join(",", @{ $r->{$f} }) . " required"; + $errors->{$f}->{missing_subfield} = join(",", @{ $r->{$f} }) . " required"; next; } else { @@ -185,7 +185,7 @@ $sf_repeatable->{$sf}++; }; if (! first { $_ eq $sf } @{ $r->{$f} }) { - $errors->{field}->{ $f }->{subfield}->{extra}->{$sf}++; + $errors->{ $f }->{subfield}->{extra}->{$sf}++; } } @@ -193,8 +193,8 @@ if (my @r_sf = sort keys( %$sf_repeatable )) { foreach my $sf (@r_sf) { - $errors->{field}->{$f}->{subfield}->{extra_repeatable}->{$sf}++; - $errors->{field}->{$f}->{dump} = + $errors->{$f}->{subfield}->{extra_repeatable}->{$sf}++; + $errors->{$f}->{dump} = join('', _pack_subfields_hash( $h, 1 ) ); } @@ -203,15 +203,15 @@ if ( defined( $self->{must_exist_sf}->{$f} ) ) { foreach my $sf (sort keys %{ $self->{must_exist_sf}->{$f} }) { #warn "====> $f $sf must exist\n"; - $errors->{field}->{$f}->{subfield}->{missing}->{$sf}++ + $errors->{$f}->{subfield}->{missing}->{$sf}++ unless defined( $subfields->{$sf} ); } } } } elsif (ref($v) eq 'HASH') { - $errors->{field}->{$f}->{unexpected_subfields}++; - $errors->{field}->{$f}->{dump} = + $errors->{$f}->{unexpected_subfields}++; + $errors->{$f}->{dump} = join('', _pack_subfields_hash( $v, 1 ) ); } } @@ -219,7 +219,7 @@ foreach my $must (sort keys %{ $self->{must_exist} }) { next if ($fields->{$must}); - $errors->{field}->{$must}->{missing}++; + $errors->{$must}->{missing}++; $errors->{dump} = $rec_dump if ($rec_dump); } @@ -272,10 +272,10 @@ sub report { my $self = shift; - my $log = $self->_get_logger(); - sub unroll { - my ($tree, $accumulated) = @_; + my ($self, $tree, $accumulated) = @_; + + my $log = $self->_get_logger(); $log->debug("# ", ( $tree ? "tree: $tree " : '' ), @@ -294,13 +294,13 @@ if ($k eq 'dump') { $dump = $tree->{dump}; - warn "## dump: $dump\n"; + warn "## dump: ",dump($dump),"\n"; next; } $log->debug("current: $k"); - my ($new_results, $new_dump) = unroll($tree->{$k}, + my ($new_results, $new_dump) = $self->unroll($tree->{$k}, $accumulated ? "$accumulated\t$k" : $k ); @@ -324,12 +324,34 @@ } } + my $log = $self->_get_logger(); + my $out = ''; my $e = $self->{errors} || return; + sub reformat { + my $l = shift; + $l =~ s/\t/ /g; + $l =~ s/_/ /; + return $l; + } + foreach my $mfn (sort keys %$e) { - my ($r, $d) = unroll( $e->{$mfn} ); - $out .= "MFN $mfn\n", dump($r), "\t$d\n\n"; + $out .= "MFN $mfn\n"; + + for my $f (sort keys %{ $e->{$mfn} }) { + my ($r, $d) = $self->unroll( $e->{$mfn}->{$f} ); + my $e = $f . ': '; + if (ref($r) eq 'ARRAY') { + $e .= join(", ", map { reformat( $_ ) } @$r); + } else { + $e .= reformat( $r ); + } + $e .= "\n\t$d" if ($d); + $e .= "\n"; + $log->debug("MFN $mfn | $e"); + $out .= $e; + } } return $out;