Changeset 19499 for gsdl/trunk/perllib/cgiactions/metadataaction.pm
- Timestamp:
- 2009-05-18T11:01:40+12:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/perllib/cgiactions/metadataaction.pm
r19293 r19499 30 30 use cgiactions::baseaction; 31 31 32 use GDBMUtils; 33 use ghtml; 32 34 33 35 BEGIN { … … 43 45 my $action_table = 44 46 { 45 "get-live-metadata" => { 'compulsory-args' => [ "d", "metaname" ], 46 'optional-args' => [] }, 47 "set-live-metadata" => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 48 'optional-args' => [] }, 49 "set-import-metadata" => { 'compulsory-args' => [ "metaname", "metavalue" ], 50 'optional-args' => [ "d", "f", "metamode" ] 47 "get-live-metadata" => { 'compulsory-args' => [ "d", "metaname" ], 48 'optional-args' => [] }, 49 50 "get-metadata" => { 'compulsory-args' => [ "d", "metaname" ], 51 'optional-args' => [ "metapos" ] }, 52 53 "set-live-metadata" => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 54 'optional-args' => [ ] }, 55 56 "set-metadata" => { 'compulsory-args' => [ "d", "metaname", "metavalue" ], 57 'optional-args' => [ "metapos" ] }, 58 59 "set-import-metadata" => { 'compulsory-args' => [ "metaname", "metavalue" ], 60 'optional-args' => [ "d", "f", "metamode" ] 51 61 # metamode can be "accumulate", "override", or "unique-id" 52 } 62 }, 63 "remove-live-metadata" => { 'compulsory-args' => [ "d", "metaname" ], 64 'optional-args' => [ ] }, 65 66 "remove-metadata" => { 'compulsory-args' => [ "d", "metaname" ], 67 'optional-args' => [ "metapos" ] } 53 68 }; 54 69 … … 116 131 } 117 132 close(GIN); 118 133 134 chomp($metavalue); 135 119 136 $gsdl_cgi->generate_ok_message("$metavalue"); 120 137 } 121 138 } 139 140 141 142 sub get_metadata 143 { 144 my $self = shift @_; 145 146 my $username = $self->{'username'}; 147 my $collect = $self->{'collect'}; 148 my $gsdl_cgi = $self->{'gsdl_cgi'}; 149 my $gsdlhome = $self->{'gsdlhome'}; 150 151 152 if ($baseaction::authentication_enabled) { 153 # Ensure the user is allowed to edit this collection 154 &authenticate_user($gsdl_cgi, $username, $collect); 155 } 156 157 my $collect_dir = &util::filename_cat($gsdlhome, "collect"); 158 # $gsdl_cgi->checked_chdir($collect_dir); 159 160 161 # Make sure the collection isn't locked by someone else 162 $self->lock_collection($username, $collect); 163 164 # look up additional args 165 166 my $docid = $self->{'d'}; 167 my $metaname = $self->{'metaname'}; 168 my $metapos = $self->{'metapos'}; 169 170 my $collect_tail = $collect; 171 $collect_tail =~ s/^.*[\/\\]//; 172 173 my $gdbm_directory = &util::filename_cat($collect_dir,$collect,"index","text"); 174 my $gdbm_db = &util::filename_cat($gdbm_directory,"$collect_tail.gdb"); 175 176 my $doc_rec = GDBMUtils::gdbmRecordToHash($gdbm_db,$docid); 177 foreach my $k (keys %$doc_rec) { 178 my @escaped_v = (); 179 foreach my $v (@{$doc_rec->{$k}}) { 180 my $ev = &ghtml::unescape_html($v); 181 push(@escaped_v, $ev); 182 } 183 184 $doc_rec->{$k} = \@escaped_v; 185 } 186 187 $metapos = 0 if (!defined $metapos); 188 189 my $metavalue = $doc_rec->{$metaname}->[$metapos]; 190 191 $gsdl_cgi->generate_ok_message("$metavalue"); 122 192 123 193 } … … 175 245 $mess .= "System Error Message: $!\n"; 176 246 177 $gsdl_cgi->generate_error($mess 247 $gsdl_cgi->generate_error($mess); 178 248 } 179 249 else { 180 $gsdl_cgi->generate_ok_message("DB set successful: Key[$metaname]=$metavalue"); 181 } 182 183 } 250 $gsdl_cgi->generate_ok_message("set-live-metadata successful: Key[$metaname]=$metavalue"); 251 } 252 253 } 254 255 256 sub set_metadata 257 { 258 my $self = shift @_; 259 260 my $username = $self->{'username'}; 261 my $collect = $self->{'collect'}; 262 my $gsdl_cgi = $self->{'gsdl_cgi'}; 263 my $gsdlhome = $self->{'gsdlhome'}; 264 265 266 # don't user authenticate for now 267 if ($baseaction::authentication_enabled) { 268 # Ensure the user is allowed to edit this collection 269 &authenticate_user($gsdl_cgi, $username, $collect); 270 } 271 272 my $collect_dir = &util::filename_cat($gsdlhome, "collect"); 273 # $gsdl_cgi->checked_chdir($collect_dir); 274 275 276 # Make sure the collection isn't locked by someone else 277 $self->lock_collection($username, $collect); 278 279 # look up additional args 280 281 my $docid = $self->{'d'}; 282 my $metaname = $self->{'metaname'}; 283 my $metapos = $self->{'metapos'}; 284 my $metavalue = $self->{'metavalue'}; 285 286 my $collect_tail = $collect; 287 $collect_tail =~ s/^.*[\/\\]//; 288 289 my $gdbm_directory = &util::filename_cat($collect_dir,$collect,"index","text"); 290 my $gdbm_db = &util::filename_cat($gdbm_directory,"$collect_tail.gdb"); 291 292 my $doc_rec = GDBMUtils::gdbmRecordToHash($gdbm_db,$docid); 293 foreach my $k (keys %$doc_rec) { 294 my @escaped_v = (); 295 foreach my $v (@{$doc_rec->{$k}}) { 296 if ($k eq "contains") { 297 # protect quotes in ".2;".3 etc 298 $v =~ s/\"/\\\"/g; 299 push(@escaped_v, $v); 300 } 301 else { 302 my $ev = &ghtml::unescape_html($v); 303 $ev =~ s/\"/\\\"/g; 304 push(@escaped_v, $ev); 305 } 306 } 307 308 $doc_rec->{$k} = \@escaped_v; 309 } 310 311 ## print STDERR "**** metavalue = $metavalue\n"; 312 313 $metavalue =~ s/\"/\\\"/g; 314 315 if (defined $metapos) { 316 $doc_rec->{$metaname}->[$metapos] = $metavalue; 317 } 318 else { 319 $doc_rec->{$metaname} = [ $metavalue ]; 320 } 321 322 ## print STDERR "**** metavalue = $metavalue\n"; 323 324 my $serialized_doc_rec = GDBMUtils::serializeHash($doc_rec); 325 326 print STDERR "**** ser dr\n$serialized_doc_rec\n\n\n"; 327 328 my $cmd = "gdbmset \"$gdbm_db\" \"$docid\" \"$serialized_doc_rec\""; 329 330 my $status = system($cmd); 331 332 if ($status != 0) { 333 my $mess = "Failed to set metadata key: $docid\n"; 334 335 $mess .= "PATH: $ENV{'PATH'}\n"; 336 $mess .= "cmd = $cmd\n"; 337 $mess .= "Exit status: $status\n"; 338 $mess .= "System Error Message: $!\n"; 339 340 $gsdl_cgi->generate_error($mess); 341 } 342 else { 343 my $mess = "set-document-metadata successful: Key[$docid]\n"; 344 $mess .= " $metaname"; 345 $mess .= "->[$metapos]" if (defined $metapos); 346 $mess .= " = $metavalue"; 347 348 $gsdl_cgi->generate_ok_message($mess); 349 } 350 351 } 352 184 353 185 354 … … 374 543 375 544 545 546 547 548 sub remove_live_metadata 549 { 550 my $self = shift @_; 551 552 my $username = $self->{'username'}; 553 my $collect = $self->{'collect'}; 554 my $gsdl_cgi = $self->{'gsdl_cgi'}; 555 my $gsdlhome = $self->{'gsdlhome'}; 556 557 558 if ($baseaction::authentication_enabled) { 559 # Ensure the user is allowed to edit this collection 560 &authenticate_user($gsdl_cgi, $username, $collect); 561 } 562 563 my $collect_dir = &util::filename_cat($gsdlhome, "collect"); 564 # $gsdl_cgi->checked_chdir($collect_dir); 565 566 567 # Make sure the collection isn't locked by someone else 568 $self->lock_collection($username, $collect); 569 570 # look up additional args 571 572 my $docid = $self->{'d'}; 573 my $metaname = $self->{'metaname'}; 574 575 my $dbkey = "$docid.$metaname"; 576 577 my $collect_tail = $collect; 578 $collect_tail =~ s/^.*[\/\\]//; 579 580 my $gdbm_directory = &util::filename_cat($collect_dir,$collect,"index","text"); 581 my $gdbm_db = &util::filename_cat($gdbm_directory,"live-$collect_tail.gdb"); 582 583 my $cmd = "gdbmdel \"$gdbm_db\" \"$dbkey\""; 584 585 my $status = system($cmd); 586 587 if ($status != 0) { 588 my $mess = "Failed to set metadata key: $dbkey\n"; 589 590 $mess .= "PATH: $ENV{'PATH'}\n"; 591 $mess .= "cmd = $cmd\n"; 592 $mess .= "Exit status: $status\n"; 593 $mess .= "System Error Message: $!\n"; 594 595 $gsdl_cgi->generate_error($mess); 596 } 597 else { 598 $gsdl_cgi->generate_ok_message("DB remove successful: Key[$metaname]"); 599 } 600 601 } 602 603 604 sub remove_metadata 605 { 606 my $self = shift @_; 607 608 my $username = $self->{'username'}; 609 my $collect = $self->{'collect'}; 610 my $gsdl_cgi = $self->{'gsdl_cgi'}; 611 my $gsdlhome = $self->{'gsdlhome'}; 612 613 614 # don't user authenticate for now 615 if ($baseaction::authentication_enabled) { 616 # Ensure the user is allowed to edit this collection 617 &authenticate_user($gsdl_cgi, $username, $collect); 618 } 619 620 my $collect_dir = &util::filename_cat($gsdlhome, "collect"); 621 # $gsdl_cgi->checked_chdir($collect_dir); 622 623 624 # Make sure the collection isn't locked by someone else 625 $self->lock_collection($username, $collect); 626 627 # look up additional args 628 629 my $docid = $self->{'d'}; 630 my $metaname = $self->{'metaname'}; 631 my $metapos = $self->{'metapos'}; 632 633 my $collect_tail = $collect; 634 $collect_tail =~ s/^.*[\/\\]//; 635 636 my $gdbm_directory = &util::filename_cat($collect_dir,$collect,"index","text"); 637 my $gdbm_db = &util::filename_cat($gdbm_directory,"$collect_tail.gdb"); 638 639 my $doc_rec = GDBMUtils::gdbmRecordToHash($gdbm_db,$docid); 640 foreach my $k (keys %$doc_rec) { 641 my @escaped_v = (); 642 foreach my $v (@{$doc_rec->{$k}}) { 643 if ($k eq "contains") { 644 # protect quotes in ".2;".3 etc 645 $v =~ s/\"/\\\"/g; 646 push(@escaped_v, $v); 647 } 648 else { 649 my $ev = &ghtml::unescape_html($v); 650 $ev =~ s/\"/\\\"/g; 651 push(@escaped_v, $ev); 652 } 653 } 654 655 $doc_rec->{$k} = \@escaped_v; 656 } 657 658 $metapos = 0 if (!defined $metapos); 659 660 # consider check key is defined before deleting? 661 662 my $filtered_metadata = []; 663 my $num_metadata_vals = scalar(@{$doc_rec->{$metaname}}); 664 665 for (my $i=0; $i<$num_metadata_vals; $i++) { 666 my $metavalue = shift(@{$doc_rec->{$metaname}}); 667 668 if ($i != $metapos) { 669 push(@$filtered_metadata,$metavalue) 670 } 671 } 672 673 $doc_rec->{$metaname} = $filtered_metadata; 674 675 my $serialized_doc_rec = GDBMUtils::serializeHash($doc_rec); 676 677 my $cmd = "gdbmset \"$gdbm_db\" \"$docid\" \"$serialized_doc_rec\""; 678 679 my $status = system($cmd); 680 681 if ($status != 0) { 682 my $mess = "Failed to set metadata key: $docid\n"; 683 684 $mess .= "PATH: $ENV{'PATH'}\n"; 685 $mess .= "cmd = $cmd\n"; 686 $mess .= "Exit status: $status\n"; 687 $mess .= "System Error Message: $!\n"; 688 689 $gsdl_cgi->generate_error($mess); 690 } 691 else { 692 my $mess = "DB set (with item deleted) successful: Key[$docid]\n"; 693 $mess .= " $metaname"; 694 $mess .= "->[$metapos]" if (defined $metapos); 695 696 $gsdl_cgi->generate_ok_message($mess); 697 } 698 699 } 700 701 702 703 704 705 376 706 1;
Note:
See TracChangeset
for help on using the changeset viewer.