Changeset 38395 for main


Ignore:
Timestamp:
2023-11-19T18:27:57+13:00 (7 months ago)
Author:
anupama
Message:

Finally got a version of editing the usercomments working. There was no feedback when things went wrong in modmetadataaction, so it took a while to realise there was code missing there, besides my own mistakes in the javascript code.

Location:
main/trunk
Files:
2 edited

Legend:

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

    r38251 r38395  
    6060    "set-index-metadata" => {
    6161        'compulsory-args' => [ "d", "metaname", "metavalue" ],
    62         'optional-args'   => [ "metapos", "metamode" ] },
     62        'optional-args'   => [ "metapos", "metamode", "prevmetavalue" ] },
    6363
    6464    "set-archives-metadata" => {
     
    702702        my $metatable = $doc_array_rec->{'metatable'}; # a subarray, or need to generate an error saying JSON structure is wrong
    703703       
    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       
    705705        $metaname  = $metatable_rec->{'metaname'};
    706706        my $metamode  = $metatable_rec->{'metamode'} || $doc_array_rec->{'metamode'} || $self->{'metamode'};
    707707        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            }
    716724            }
    717         }           
     725        }
    718726        }
    719727    }
     
    11691177    $info_mess .= " infodbtype  = $infodbtype\n"  if defined($infodbtype);
    11701178    $info_mess .= " docid       = $docid\n"       if defined($docid);
     1179    $info_mess .= " dv          = $dv\n"          if defined($dv);
    11711180    $info_mess .= " metaname    = $metaname\n"    if defined($metaname);
    11721181    $info_mess .= " metapos     = $metapos\n"     if defined($metapos);
     
    12731282    my $status    = -1;
    12741283    my $docid     = $doc_array_rec->{'docid'};
    1275     my $dv        = $doc_array_rec->{'dv'};
     1284    my $dv        = $doc_array_rec->{'dv'} || undef;
    12761285   
    12771286    push(@all_docids,$docid);
     
    13031312        my $metapos = undef;
    13041313        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
    13101324           
    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            }
    13151334            }
    1316         }           
    1317         }       
     1335        }
     1336        }
    13181337    }
    13191338       
     
    21462165        my $metapos = undef;
    21472166        my $prevmetavalue = undef;
    2148         my $metavals = $metatable_rec->{'metavals'}; # a sub-subarray
    2149        
    2150         foreach my $metavalue ( @$metavals ) {
    2151             $metavalue =~ s/&lt;(.*?)&gt;/<$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/&lt;(.*?)&gt;/<$1>/g;
    21532172            $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/&lt;(.*?)&gt;/<$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            }
    21582186            }
    21592187        }
  • main/trunk/greenstone3/web/interfaces/default/js/documentedit_scripts_util.js

    r38351 r38395  
    345345}
    346346
     347
     348function 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}
    347361
    348362function saveAndRebuild(rebuild)
     
    452466       
    453467        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);
    460469        }
    461470       
     
    520529        // But since our setMeta calls are always synchronous, happening in sequence, if one setArchivesMeta() call fails
    521530        // we'll not attempt subsequent ones or coll building at the end.
    522  
     531
     532    var userCommentsRowsChanged = [];
    523533    for(var i = 0; i < changes.length; i++)
    524534    {
     
    531541            var currentElem = changedElem;
    532542            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);
    534548           
    535549            //Get metadata name
     
    586600        }
    587601    }
    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(/&nbsp;/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   
    589653    // Check for changes to any map editors in the document
    590654    // NOTE: At present, we don't maintain a list of deletions for the map editor:
     
    665729            );         
    666730
     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           
    667759        } else {
    668760          // 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.