Ignore:
Timestamp:
2017-11-21T14:42:25+13:00 (6 years ago)
Author:
kjdon
Message:

Bugfix (with debugging left in). The set-archive-metadata would overwrite the very first metadata value for the specified tag if metapos not provided even if prevmetavalue was provided. Changed the logic for handling metapos, prevmetavalue when setting archive metadata to fix this.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/perllib/cgiactions/modmetadataaction.pm

    r32061 r32076  
    840840
    841841    my $curr_secnum = $parser->{'parameters'}->{'curr_section_num'};
    842 ##    print STDERR "**** checking $opt_doc_secnum <=> $curr_secnum\n";
    843 ##    print STDERR "**** metamode = $metamode\n";
     842    print STDERR "**** checking $opt_doc_secnum <=> $curr_secnum\n" if (defined $opt_doc_secnum);
     843   print STDERR "**** metamode = $metamode\n";
    844844   
    845845    if ((!defined $opt_doc_secnum) || ($opt_doc_secnum eq $curr_secnum))
    846846    {
    847847        my $name_attr = $attrHash->{'name'};
    848         # print STDOUT "*** testing: $name_attr eq $metaname ?   and  $metamode eq override ?\n";
     848        print STDOUT "*** testing: $name_attr eq $metaname ?   and  $metamode eq override ?\n";
    849849        if (($name_attr eq $metaname) && ($metamode eq "override"))
    850850        {
     
    858858            }
    859859           
    860             if ((defined $parser->{'parameters'}->{'metapos'} && $parser->{'parameters'}->{'poscount'} == $parser->{'parameters'}->{'metapos'})
    861                 || (!defined $parser->{'parameters'}->{'metapos'} && $parser->{'parameters'}->{'poscount'} == 0))
    862                
    863             {
    864                 ##print STDERR "#### got match!!\n";
     860            if (defined $parser->{'parameters'}->{'metapos'}) {
     861
     862                if ($parser->{'parameters'}->{'poscount'} == $parser->{'parameters'}->{'metapos'}) {
     863                print STDERR "#### got pos match!!\n";
    865864                # Get the value and override the current value
    866865                my $metavalue = $parser->{'parameters'}->{'metavalue'};
     
    868867               
    869868                # Don't want it to wipe out any other pieces of metadata
    870                 $parser->{'parameters'}->{'metamode'} = "done";
     869                $parser->{'parameters'}->{'metamode'} = "done";
     870                }
    871871            }
    872             elsif (defined $parser->{'parameters'}->{'prevmetavalue'} && $parser->{'parameters'}->{'prevmetavalue'} eq $attrHash->{'_content'})
    873             {
     872            elsif (defined $parser->{'parameters'}->{'prevmetavalue'}) {
     873                if ($parser->{'parameters'}->{'prevmetavalue'} eq $attrHash->{'_content'}) {
     874                print STDERR "### prev meta value matches\n";
    874875                my $metavalue = $parser->{'parameters'}->{'metavalue'};
    875876                $attrHash->{'_content'} = $metavalue;
    876877                $parser->{'parameters'}->{'metamode'} = "done";
     878
     879                }
    877880            }
     881            elsif ($parser->{'parameters'}->{'poscount'} == 0) { # explicit catch all
     882                print STDERR "#### got pos match!!\n";
     883                # Get the value and override the current value
     884                my $metavalue = $parser->{'parameters'}->{'metavalue'};
     885                $attrHash->{'_content'} = $metavalue;
     886               
     887                # Don't want it to wipe out any other pieces of metadata
     888                $parser->{'parameters'}->{'metamode'} = "done";
     889
     890               
     891            }
     892
     893           
     894           
    878895        }
    879     }
     896    }
    880897
    881898    # RAW is [$tagname => $attrHash] not $tagname => $attrHash!!
Note: See TracChangeset for help on using the changeset viewer.