Show
Ignore:
Timestamp:
16.01.2012 15:12:39 (8 years ago)
Author:
sjm84
Message:

Adding the ability to specify metadata values to use to remove archive and index metadata. The code is untested at this point.

Files:
1 modified

Legend:

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

    r24943 r24949  
    8080                      
    8181    "remove-archives-metadata" => { 'compulsory-args' => [ "d", "metaname" ], #TODO: add f argument 
    82                      'optional-args'   => [ "metapos" ] }, 
     82                     'optional-args'   => [ "metapos", "metavalue" ] }, 
    8383 
    8484    "remove-live-metadata"  => { 'compulsory-args' => [ "d", "metaname" ], 
     
    8686 
    8787    "remove-metadata"       => { 'compulsory-args' => [ "d", "metaname" ], 
    88                      'optional-args'   => [ "metapos" ] }, 
     88                     'optional-args'   => [ "metapos", "metavalue" ] }, 
    8989 
    9090    "insert-metadata"       => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 
     
    878878    my $import_filename = $doc_rec->{'doc-file'}->[0];   
    879879 
    880     my $status = $self->remove_from_doc_xml($gsdl_cgi, &util::filename_cat($archive_dir, $import_filename), $metaname, $metapos, $docid_secnum); 
     880    my $status = $self->remove_from_doc_xml($gsdl_cgi, &util::filename_cat($archive_dir, $import_filename), $metaname, $metapos, null, $docid_secnum); 
    881881     
    882882    # Release the lock once it is done 
     
    905905{ 
    906906    my $self = shift @_; 
    907     my ($gsdl_cgi, $doc_xml_filename, $metaname, $metapos, $secid) = @_; 
     907    my ($gsdl_cgi, $doc_xml_filename, $metaname, $metapos, $metavalue, $secid) = @_; 
    908908     
    909909    my @start_rules = ('Section' => \&dxml_start_section); 
     
    950950        else { 
    951951            binmode($MOUT,":utf8"); 
    952             $parser->filter($xml_in, $MOUT, {metaname => $metaname, metapos => $metapos, secid => $secid}); 
     952            $parser->filter($xml_in, $MOUT, {metaname => $metaname, metapos => $metapos, metavalue => $metavalue, secid => $secid}); 
    953953            close($MOUT);        
    954954        } 
     
    980980     
    981981    if ((defined $parser->{'parameters'}->{'metapos'}) && ($parser->{'parameters'}->{'metaname'} eq $attrHash->{'name'}) && ($parser->{'parameters'}->{'poscount'} == $parser->{'parameters'}->{'metapos'})) 
     982    {    
     983        return []; 
     984    } 
     985     
     986    if ((defined $parser->{'parameters'}->{'metavalue'}) && ($parser->{'parameters'}->{'metaname'} eq $attrHash->{'name'}) && ($parser->{'parameters'}->{'metavalue'} eq $attrHash->{'_content'})) 
    982987    {    
    983988        return []; 
     
    15191524    my $metaname  = $self->{'metaname'}; 
    15201525    my $metapos   = $self->{'metapos'}; 
     1526    my $metavalue = $self->{'metavalue'}; 
    15211527 
    15221528    # To people who know $collect_tail please add some comments 
     
    15611567    my $num_metadata_vals = scalar(@{$doc_rec->{$metaname}});     
    15621568    for (my $i=0; $i<$num_metadata_vals; $i++) { 
    1563     my $metavalue = shift(@{$doc_rec->{$metaname}}); 
    1564  
    1565     if ($i != $metapos) { 
    1566         push(@$filtered_metadata,$metavalue) 
     1569    my $metaval = shift(@{$doc_rec->{$metaname}}); 
     1570 
     1571    if (!defined $metavalue && $i != $metapos) { 
     1572        push(@$filtered_metadata,$metaval) 
     1573    } 
     1574     
     1575    if(defined $metavalue && !($metavalue eq $metaval)) 
     1576    { 
     1577        push(@$filtered_metadata,$metavalue) 
    15671578    } 
    15681579    }