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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.