Changeset 37249 for main


Ignore:
Timestamp:
2023-02-02T13:24:03+13:00 (15 months ago)
Author:
davidb
Message:

New inc-fldv-nminus action

File:
1 edited

Legend:

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

    r37218 r37249  
    155155    #INSERT METHODS
    156156    "insert-metadata" => {
    157         'compulsory-args' => [ "d", "metaname", "metavalue" ],
    158         'optional-args'   => [ ] }
     157        'compulsory-args' => [ "d", "metaname", "metavalue" ],
     158        'optional-args'   => [ ] },
     159
     160
     161    #INC METHODS
     162    "inc-fldv-nminus1" => {
     163        'compulsory-args' => [ "d" ],
     164        'optional-args'   => [ ] }     
    159165};
    160166
     
    31193125}
    31203126
     3127
     3128
     3129
     3130sub inc_fldv_nminus1
     3131{
     3132    my $self = shift @_;
     3133
     3134    my $username  = $self->{'username'};
     3135    my $collect   = $self->{'collect'};
     3136    my $gsdl_cgi  = $self->{'gsdl_cgi'};
     3137    my $infodbtype = $self->{'infodbtype'};
     3138   
     3139    # Obtain the collect dir
     3140    my $site = $self->{'site'};
     3141    my $collect_dir = $gsdl_cgi->get_collection_dir($site);
     3142   
     3143    my $archive_dir = &util::filename_cat($collect_dir, $collect, "archives");
     3144   
     3145    # look up additional args
     3146    my $docid = $self->{'d'};
     3147   
     3148   
     3149    my $arcinfo_doc_filename = &dbutil::get_infodb_file_path($infodbtype, "archiveinf-doc", $archive_dir);
     3150    my $doc_rec = &dbutil::read_infodb_entry($infodbtype, $arcinfo_doc_filename, $docid);
     3151   
     3152    # This now stores the full pathname [is this still true??]
     3153    my $doc_file = $doc_rec->{'doc-file'}->[0];
     3154
     3155    my ($unused_doc_tailname, $doc_dirname) = File::Basename::fileparse($doc_file);
     3156    my $doc_full_dirname = &util::filename_cat($archive_dir,$doc_dirname);
     3157   
     3158    my $fldv_full_dirname = &util::filename_cat($doc_full_dirname,$FLDV_HISTORY_DIR);
     3159
     3160    my $had_error = 0;
     3161    my $had_error_mess = undef;
     3162   
     3163    if (-d $fldv_full_dirname) {
     3164    my $fldv_filtered_dirs = &FileUtils::readDirectoryFiltered($fldv_full_dirname,undef,"^nminus-\\d+\$");
     3165   
     3166    my @sorted_fldv_filtered_dirs = sort {
     3167        my ($a_num) = ($a =~ m/(\d+)$/);
     3168        my ($b_num) = ($b =~ m/(\d+)$/);
     3169       
     3170        # sort into descending order
     3171        return $b_num <=> $a_num;
     3172    } @$fldv_filtered_dirs;
     3173   
     3174    ## shuffle all the nminus-<n> folders down by one
     3175
     3176   
     3177    foreach my $nminus_n (@sorted_fldv_filtered_dirs) {
     3178       
     3179        my $nminus_n_full_dir = &FileUtils::filenameConcatenate($fldv_full_dirname,$nminus_n);
     3180        if (-d $nminus_n_full_dir) {
     3181       
     3182        my ($n) = ($nminus_n =~ m/(\d+)$/);
     3183        my $new_n = $n + 1;
     3184       
     3185        my $new_full_dir_plus1 = &FileUtils::filenameConcatenate($fldv_full_dirname,"nminus-$new_n");
     3186
     3187        my $move_ok = &FileUtils::renameDirectory($nminus_n_full_dir,$new_full_dir_plus1,
     3188                              { 'strict' => 1 } );
     3189       
     3190        if (!$move_ok) {
     3191            $had_error_mess = "Error: Failed to move '$nminus_n' to nminus-$new_n in $fldv_full_dirname\n";
     3192            $had_error = 1;
     3193            last;
     3194        }
     3195       
     3196        }
     3197        else {
     3198        print STDERR "Warning: skipping $nminus_n_full_dir as it is not a directory\n";
     3199        }
     3200    }
     3201    }
     3202
     3203    if (!$had_error) {
     3204    ### Now need to copy everything top level in doc dir into nminus-1
     3205
     3206    my $nminus_1_full_dir = &FileUtils::filenameConcatenate($fldv_full_dirname,"nminus-1");
     3207   
     3208    my $copy_ok = &FileUtils::copyFilesRefRecursive([$doc_full_dirname],$nminus_1_full_dir,
     3209                            { 'strict' => 1, 'exclude_filter_re' => "^$FLDV_HISTORY_DIR\$" } );
     3210   
     3211    if (!$copy_ok) {
     3212        $had_error_mess = "Error: Failed to clone document $docid to form 'nminus-1' directory in $fldv_full_dirname";
     3213        $had_error = 1;
     3214    }
     3215    }
     3216   
     3217    if ($had_error) {
     3218    $gsdl_cgi->generate_error($had_error_mess);
     3219    }
     3220    else {
     3221    $gsdl_cgi->generate_ok_message("Successfully incremented the File-Level Document-Version History for $docid");
     3222    }
     3223}
     3224
     3225
    31213226# not returning 1; here since this file is conditionally included by metadataction.pm
    31223227# and not otherwise meant to be used on its own
Note: See TracChangeset for help on using the changeset viewer.