- Timestamp:
- 2023-11-19T18:27:57+13:00 (7 months ago)
- Location:
- main/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/cgiactions/modmetadataaction.pm
r38251 r38395 60 60 "set-index-metadata" => { 61 61 'compulsory-args' => [ "d", "metaname", "metavalue" ], 62 'optional-args' => [ "metapos", "metamode" ] },62 'optional-args' => [ "metapos", "metamode", "prevmetavalue" ] }, 63 63 64 64 "set-archives-metadata" => { … … 702 702 my $metatable = $doc_array_rec->{'metatable'}; # a subarray, or need to generate an error saying JSON structure is wrong 703 703 704 foreach my $metatable_rec ( @$metatable ) { # the subarray metatable is an array of hashmaps 704 foreach my $metatable_rec ( @$metatable ) { # the subarray metatable is an array of hashmaps 705 705 $metaname = $metatable_rec->{'metaname'}; 706 706 my $metamode = $metatable_rec->{'metamode'} || $doc_array_rec->{'metamode'} || $self->{'metamode'}; 707 707 my $metapos = undef; 708 my $metavals = $metatable_rec->{'metavals'}; # a sub-subarray 709 710 foreach my $metavalue ( @$metavals ) { # metavals is an array 711 $status = $self->set_index_metadata_entry($collect_dir,$collect,$infodbtype,$docid,$metaname,$metapos,$metavalue,$metamode); # how do we use metamode in set_meta_entry? 712 if($metamode eq "override") { # now, having overridden the metavalue for the first, 713 # need to accumulate subsequent metavals for this metaname, else the just-assigned 714 # metavalue for this metaname will be lost 715 $metamode = "accumulate"; 708 my $prevmetaval = undef; 709 if(defined $metatable_rec->{'metapos'}) { 710 $metapos = $metatable_rec->{'metapos'}; 711 my $metavalue = $metatable_rec->{'metavalue'}; 712 $prevmetaval = $metatable_rec->{'prevmetavalue'}; 713 $status = $self->set_index_metadata_entry($collect_dir,$collect,$infodbtype,$docid,$metaname,$metapos,$metavalue,$metamode,$prevmetaval); 714 } else { 715 my $metavals = $metatable_rec->{'metavals'}; # a sub-subarray 716 717 foreach my $metavalue ( @$metavals ) { # metavals is an array 718 $status = $self->set_index_metadata_entry($collect_dir,$collect,$infodbtype,$docid,$metaname,$metapos,$metavalue,$metamode,$prevmetaval); # how do we use metamode in set_meta_entry? 719 if($metamode eq "override") { # now, having overridden the metavalue for the first, 720 # need to accumulate subsequent metavals for this metaname, else the just-assigned 721 # metavalue for this metaname will be lost 722 $metamode = "accumulate"; 723 } 716 724 } 717 } 725 } 718 726 } 719 727 } … … 1169 1177 $info_mess .= " infodbtype = $infodbtype\n" if defined($infodbtype); 1170 1178 $info_mess .= " docid = $docid\n" if defined($docid); 1179 $info_mess .= " dv = $dv\n" if defined($dv); 1171 1180 $info_mess .= " metaname = $metaname\n" if defined($metaname); 1172 1181 $info_mess .= " metapos = $metapos\n" if defined($metapos); … … 1273 1282 my $status = -1; 1274 1283 my $docid = $doc_array_rec->{'docid'}; 1275 my $dv = $doc_array_rec->{'dv'} ;1284 my $dv = $doc_array_rec->{'dv'} || undef; 1276 1285 1277 1286 push(@all_docids,$docid); … … 1303 1312 my $metapos = undef; 1304 1313 my $prevmetavalue = undef; 1305 my $metavals = $metatable_rec->{'metavals'}; # a sub-subarray 1306 1307 foreach my $metavalue ( @$metavals ) { 1308 $status = $self->set_archives_metadata_entry($gsdl_cgi,$archive_dir, $collect_dir,$collect,$infodbtype, 1309 $docid,$dv, $metaname,$metapos,$metavalue,$metamode,$prevmetavalue); 1314 if(defined $metatable_rec->{'metapos'}) { 1315 $metapos = $metatable_rec->{'metapos'}; 1316 $prevmetavalue = $metatable_rec->{'prevmetavalue'}; # or still undef 1317 my $metavalue = $metatable_rec->{'metavalue'}; 1318 $status = $self->set_archives_metadata_entry($gsdl_cgi,$archive_dir, 1319 $collect_dir,$collect,$infodbtype, 1320 $docid,$dv, $metaname,$metapos, 1321 $metavalue,$metamode,$prevmetavalue); 1322 } else { 1323 my $metavals = $metatable_rec->{'metavals'}; # a sub-subarray 1310 1324 1311 if($metamode eq "override") { # now, having overridden the metavalue for the first, 1312 # need to accumulate subsequent metavals for this metaname, else the just-assigned 1313 # metavalue for this metaname will be lost 1314 $metamode = "accumulate"; 1325 foreach my $metavalue ( @$metavals ) { 1326 $status = $self->set_archives_metadata_entry($gsdl_cgi,$archive_dir, $collect_dir,$collect,$infodbtype, 1327 $docid,$dv, $metaname,$metapos,$metavalue,$metamode,$prevmetavalue); 1328 1329 if($metamode eq "override") { # now, having overridden the metavalue for the first, 1330 # need to accumulate subsequent metavals for this metaname, else the just-assigned 1331 # metavalue for this metaname will be lost 1332 $metamode = "accumulate"; 1333 } 1315 1334 } 1316 } 1317 } 1335 } 1336 } 1318 1337 } 1319 1338 … … 2146 2165 my $metapos = undef; 2147 2166 my $prevmetavalue = undef; 2148 my $metavals = $metatable_rec->{'metavals'}; # a sub-subarray2149 2150 foreach my $metavalue ( @$metavals ) {2151 $metavalue =~ s/<(.*?)>/<$1>/g;2152 2167 if(defined $metatable_rec->{'metapos'}) { 2168 $metapos = $metatable_rec->{'metapos'}; 2169 $prevmetavalue = $metatable_rec->{'prevmetavalue'}; # or still undef 2170 my $metavalue = $metatable_rec->{'metavalue'}; 2171 #$metavalue =~ s/<(.*?)>/<$1>/g; 2153 2172 $self->set_import_metadata_entry($gsdl_cgi, $arcinfo_doc_filename, $infodbtype, $docid_root, $metaname, $metapos, $metavalue, $metamode, $prevmetavalue, $collect, $collect_dir); # at this point, docid_root = docid 2154 if($metamode eq "override") { # now, having overridden the first metavalue of the metaname, 2155 # need to accumulate subsequent metavals for this metaname, else the just-assigned 2156 # metavalue for this metaname will be lost 2157 $metamode = "accumulate"; 2173 } else { 2174 2175 my $metavals = $metatable_rec->{'metavals'}; # a sub-subarray 2176 2177 foreach my $metavalue ( @$metavals ) { 2178 $metavalue =~ s/<(.*?)>/<$1>/g; 2179 2180 $self->set_import_metadata_entry($gsdl_cgi, $arcinfo_doc_filename, $infodbtype, $docid_root, $metaname, $metapos, $metavalue, $metamode, $prevmetavalue, $collect, $collect_dir); # at this point, docid_root = docid 2181 if($metamode eq "override") { # now, having overridden the first metavalue of the metaname, 2182 # need to accumulate subsequent metavals for this metaname, else the just-assigned 2183 # metavalue for this metaname will be lost 2184 $metamode = "accumulate"; 2185 } 2158 2186 } 2159 2187 } -
main/trunk/greenstone3/web/interfaces/default/js/documentedit_scripts_util.js
r38351 r38395 345 345 } 346 346 347 348 function fillUserCommentTableColumnNames(elem, userCommentsMetaFields) { 349 var currentElem = elem; 350 if(currentElem.tagName != "TABLE") { 351 while((currentElem = currentElem.parentNode).tagName != "TABLE"); 352 } 353 354 var headerRow = currentElem.firstElementChild; // tr 355 var headerCells = headerRow.querySelectorAll("th"); 356 for(var th = 1; th < headerCells.length; th++) { // skip th index=0, which is metapos 357 userCommentsMetaFields.push(headerCells[th].textContent); 358 //console.log("userCommentsMetaFields:" + userCommentsMetaFields[th-1]); 359 } 360 } 347 361 348 362 function saveAndRebuild(rebuild) … … 452 466 453 467 if(userCommentsMetaFields.length == 0) { 454 var headerRow = currentElem.firstElementChild; // tr 455 var headerCells = headerRow.querySelectorAll("th"); 456 for(var th = 1; th < headerCells.length; th++) { // skip th index=0, which is metapos 457 userCommentsMetaFields.push(headerCells[th].textContent); 458 //console.log("userCommentsMetaFields:" + userCommentsMetaFields[th-1]); 459 } 468 fillUserCommentTableColumnNames(currentElem, userCommentsMetaFields); 460 469 } 461 470 … … 520 529 // But since our setMeta calls are always synchronous, happening in sequence, if one setArchivesMeta() call fails 521 530 // we'll not attempt subsequent ones or coll building at the end. 522 531 532 var userCommentsRowsChanged = []; 523 533 for(var i = 0; i < changes.length; i++) 524 534 { … … 531 541 var currentElem = changedElem; 532 542 while((currentElem = currentElem.parentNode).tagName != "TABLE"); 533 var docID = currentElem.getAttribute("id").substring(4); 543 if(currentElem.getAttribute("id").startsWith("usercomments-")) { 544 userCommentsRowsChanged.push(changedElem); 545 continue; 546 } 547 var docID = currentElem.getAttribute("id").substring(4); 534 548 535 549 //Get metadata name … … 586 600 } 587 601 } 588 602 603 if(userCommentsRowsChanged.length > 0) { 604 var docArray = []; 605 //var metatable = []; 606 if(userCommentsMetaFields.length == 0) { 607 fillUserCommentTableColumnNames(userCommentsRowsChanged[0], userCommentsMetaFields); 608 } 609 //alert("Usercomments colnames: " + userCommentsMetaFields); 610 611 var i = 0; 612 for (i = 0; i < userCommentsRowsChanged.length; i++) { 613 // need docID, metaname, metaval, metapos, and set metamode to override 614 615 var changedElem = userCommentsRowsChanged[i]; 616 //console.dir(changedElem); 617 618 var metaval = changedElem.value; //changedElem.textContent; // gets orig value 619 //metaval = metaval.replace(/ /g, " "); 620 621 var currentElem = changedElem; 622 while((currentElem = currentElem.parentNode).tagName != "TABLE"); 623 var docID = currentElem.getAttribute("id").substring("usercomments-".length); 624 625 currentElem = changedElem; 626 while((currentElem = currentElem.parentNode).tagName != "TR"); 627 var metapos = currentElem.firstElementChild.textContent; 628 629 //currentElem = changedElem.parentNode; //TD 630 currentElem = changedElem; 631 while((currentElem = currentElem.parentNode).tagName != "TD"); 632 // count number of previous siblings 633 var th = 0; 634 while((currentElem = currentElem.previousSibling) != null) { 635 th++; 636 } 637 var metaname = userCommentsMetaFields[th-1]; // first column is invisible metapos col 638 639 //alert("docid: " + docID + " metaname: " + metaname + " metaval: " + metaval + " metapos: " + metapos); 640 641 //metatable.push({metaname:metaname,metavalue:metaval,metapos:metapos}); 642 643 docArray.push({ 644 docid:docID, 645 metatable:[{metaname:metaname,metavalue:metaval,metapos:metapos}], 646 metamode:"override" 647 }); 648 } 649 metadataChanges.push({type:'editUserComments',collection:collection,docArray:docArray}); 650 addCollectionToBuild(collection); 651 } 652 589 653 // Check for changes to any map editors in the document 590 654 // NOTE: At present, we don't maintain a list of deletions for the map editor: … … 665 729 ); 666 730 731 } else if (change.type === "editUserComments") { 732 var edit_locations = "import|archives|index"; 733 //alert("editUserComments: " + JSON.stringify(change.docArray)); 734 gs.functions.setMetadataArray( 735 collection, 736 gs.xsltParams.site_name, 737 change.docArray, 738 "override", //metamode 739 edit_locations, 740 function(ajaxResult) { 741 console.log("Edited comments in "+edit_locations); 742 //callbackFunction(); 743 if(!hadErrorResponseOnSave(ajaxResult)) { 744 callbackFunction(); // move on to processing next & eventually rebuild 745 } 746 }, 747 false, // false for asynchronous, see comment in gs.usercomments.addUserComment() 748 function(ajaxError) { 749 console.log("Set usercomments meta FAILED!"); 750 751 var errData = (ajaxError.responseText) ? ajaxError.responseText : ajaxError; 752 //alert(gs.text.dse.setmeta_server_error + ". Set meta failed. Got: " + errData); 753 console.log("A server side error occurred during setMetadataArray. (Is the server running?)\nNot proceeding further with saving and rebuilding. Got error: " + JSON.stringify(errData)); 754 755 alert("A server side error occurred during setMetadataArray. (Is the server running?)\nNot proceeding further with saving and rebuilding. Got error: " + JSON.stringify(errData)); 756 } 757 ); 758 667 759 } else { 668 760 // Checking "if(change.metapos)" doesn't work for us as it becomes false when the property doesn't exist AND when the property is 0. But metapos IS 0 for us.
Note:
See TracChangeset
for help on using the changeset viewer.