From 8f53289ff27673aee768089f6c4ad50a66f4d2ce Mon Sep 17 00:00:00 2001 From: Mike Hodge <hodgem@wustl.edu> Date: Fri, 19 Aug 2016 20:52:09 -0500 Subject: [PATCH] XNAT-4440, XNAT-4441 and XNAT-4443 file uploader issues plus other minor fixes --- .../scripts/project/projResourceMgmt.js | 3 +- .../uploaders/AutomationBasedUploader.js | 63 ++++++++++++++++--- .../webapp/scripts/uploaders/fileuploader.js | 39 +++++++++++- 3 files changed, 93 insertions(+), 12 deletions(-) diff --git a/src/main/webapp/scripts/project/projResourceMgmt.js b/src/main/webapp/scripts/project/projResourceMgmt.js index d8b71d12..70944351 100644 --- a/src/main/webapp/scripts/project/projResourceMgmt.js +++ b/src/main/webapp/scripts/project/projResourceMgmt.js @@ -157,7 +157,8 @@ XNAT.app.pResources={ scriptId: scriptToRun, eventClass: "org.nrg.xft.event.entities.WorkflowStatusEvent", filters: { "status":["Complete"] }, - description: "Run " + scriptToRun + " upon " + props.name + " upload." }; + //description: "Run " + scriptToRun + " upon " + props.name + " upload." }; + description: props.name + " --> " + scriptToRun }; var eventHandlerAjax = $.ajax({ type : "PUT", url:serverRoot+"/data/projects/" + this.id + "/automation/handlers?XNAT_CSRF=" + window.csrfToken, diff --git a/src/main/webapp/scripts/uploaders/AutomationBasedUploader.js b/src/main/webapp/scripts/uploaders/AutomationBasedUploader.js index c8cad9d7..236e3d3c 100644 --- a/src/main/webapp/scripts/uploaders/AutomationBasedUploader.js +++ b/src/main/webapp/scripts/uploaders/AutomationBasedUploader.js @@ -93,6 +93,25 @@ if(typeof XNAT.app.abu.abuConfigs === 'undefined'){ } } + // NOTE: $.inArray didn't work here + var alreadyContains = function(array, val){ + outer: + for (var i=0; i<array.length; i++) { + if (Object.keys(val).length !== Object.keys(array[i]).length) { + continue; + } + for (var j=0; j<Object.keys(val).length; j++) { + var key = (Object.keys(val))[j]; + var tval = val[key]; + var cval = (array[i])[key]; + if (tval !== cval) { + continue outer; + } + } + return true; + } + return false; + }; var tempConfigs2=new Array(); //allow filtering of links jq.each(tmpConfigs,function(i1,v1){ @@ -106,15 +125,15 @@ if(typeof XNAT.app.abu.abuConfigs === 'undefined'){ } } }); - if(matched){ + if(matched && (!alreadyContains(tempConfigs2,v1))){ tempConfigs2.push(v1); } - }else{ + }else if (!alreadyContains(tempConfigs2,v1)){ tempConfigs2.push(v1); } }); return tempConfigs2; - } + }, } @@ -452,7 +471,15 @@ XNAT.app.abu.populateWhatToDoSelect = function(){ } if (doAssign) { $('#whatToDoSelect').append('<option value="resource- ' + resourceConfigs[h].name + ':launch-' + currEvent.triggerId + '" class="' + currEvent.scope + '">' + - ((typeof resourceConfigs[h].description !== 'undefined' && resourceConfigs[h].description.length>0) ? resourceConfigs[h].description : resourceConfigs[h].name) + " --> " + + ( + (typeof currEvent == 'undefined' || typeof currEvent.description == 'undefined' || currEvent.description.indexOf("-->")<0) + /* + Per XNAT-4333, Use name rather than description + ? (((typeof resourceConfigs[h].description !== 'undefined' && resourceConfigs[h].description.length>0) ? resourceConfigs[h].description : resourceConfigs[h].name) + " --> ") : "" + */ + ? (resourceConfigs[h].name + " --> ") : "" + ) + + ((typeof(currEvent.description) !== 'undefined' && currEvent.description.length>0) ? currEvent.description : currEvent.scriptId) + '</option>'); resourceMatch = true; } @@ -468,7 +495,11 @@ XNAT.app.abu.populateWhatToDoSelect = function(){ } } if (!resourceMatch) { + /* + Per XNAT-4333, Use name rather than description $("#whatToDoSelect").append('<option value="resource-' + resourceConfigs[h].name + '">' + ((typeof resourceConfigs[h].description !== 'undefined' && resourceConfigs[h].description.length>0) ? resourceConfigs[h].description : resourceConfigs[h].name) + '</option>'); + */ + $("#whatToDoSelect").append('<option value="resource-' + resourceConfigs[h].name + '">' + resourceConfigs[h].name + '</option>'); } } } @@ -571,10 +602,15 @@ XNAT.app.abu.initializeAbuUploader = function(usageType){ XNAT.app.abu.sendWorkflowWhenDone(); } } + var isCancel = ($(".abu-done-button-cancel").length>0); + var fileUploaded = ($(".abu-done-button-file-uploaded").length>0); xmodal.close(XNAT.app.abu.abuConfigs.modalOpts.id); - //if (abu._fileUploader.uploadsStarted>0 && abu._fileUploader.uploadsInProgress==0) { - // window.location.reload(true); - //} + if (abu._fileUploader.uploadsStarted>0 && abu._fileUploader.uploadsInProgress==0 && !isCancel && fileUploaded) { + setTimeout(function(){ + window.location.reload(true); + },20); + xmodal.message('Please Wait','Reloading page. Please wait.'); + } }, uploadStartedFunction:function(){ if (abu._fileUploader._currentAction.indexOf("import-handler=" + XNAT.app.abu.importHandler)>=0 && (typeof(XNAT.app.abu.buildPath) == 'undefined' || XNAT.app.abu.buildPath == '')) { @@ -594,11 +630,18 @@ XNAT.app.abu.initializeAbuUploader = function(usageType){ uploadCompletedFunction:function(){ var eventHandler = $('#eventHandlerSelect').val(); if (typeof eventHandler !== 'undefined' && eventHandler != null && eventHandler.length>0) { + if ($(".abu-upload-complete-text").length==0) { + $("#abu-done-button").removeClass("abu-button-disabled"); + } else { + $("#abu-done-button").addClass("abu-button-disabled"); + } $("#abu-process-button").removeClass("abu-button-disabled"); $("#abu-process-button-text").html("Process Files"); $("#abu-process-button").css("visibility","visible"); } else { $("#abu-done-button-text").html("Done"); + $("#abu-done-button-text").addClass("abu-done-button-done"); + $("#abu-done-button-text").removeClass("abu-done-button-cancel"); $("#abu-done-button").removeClass("abu-button-disabled"); } }, @@ -625,6 +668,8 @@ XNAT.app.abu.initializeAbuUploader = function(usageType){ } else { $("#abu-done-button").removeClass("abu-button-disabled"); $("#abu-done-button-text").html("Done"); + $("#abu-done-button-text").addClass("abu-done-button-done"); + $("#abu-done-button-text").removeClass("abu-done-button-cancel"); } $(".upload-area").css("display","none"); $(".whattodo-area").css("display","none"); @@ -633,6 +678,8 @@ XNAT.app.abu.initializeAbuUploader = function(usageType){ $("#abu-upload-button").css("display","none"); $("#abu-process-button-text").html("Run script"); $("#abu-done-button-text").html("Cancel"); + $("#abu-done-button-text").addClass("abu-done-button-cancel"); + $("#abu-done-button-text").removeClass("abu-done-button-done"); if ($('#eventHandlerSelect option').size()>1 && $('#eventHandlerSelect').val()=="") { $("#abu-process-button").addClass("abu-button-disabled"); //$("#abu-process-button-text").html(" "); @@ -797,7 +844,7 @@ XNAT.app.abu.updateResourceStats=function() { if (abu._fileUploader._currentAction.indexOf("import-handler=" + XNAT.app.abu.importHandler)<0) { var updateStatsUrl = "/data/services/refresh/catalog?resource=" + abu._fileUploader._currentAction.replace(/\/files[\/?].*$/i,'').replace(/^\/data\//i,"/archive/").replace(/^\/REST\//i,"/archive/" + - "&options=populateStats") + "&XNAT_CSRF=" + window.csrfToken; + "&options=populateStats") + "&options=populateStats,append,delete,checksum&XNAT_CSRF=" + window.csrfToken; var updateStatsAjax = $.ajax({ type : "POST", url:serverRoot+updateStatsUrl, diff --git a/src/main/webapp/scripts/uploaders/fileuploader.js b/src/main/webapp/scripts/uploaders/fileuploader.js index c00698bc..777a8608 100644 --- a/src/main/webapp/scripts/uploaders/fileuploader.js +++ b/src/main/webapp/scripts/uploaders/fileuploader.js @@ -35,7 +35,7 @@ abu.FileUploader = function(o){ 'Upload files<input multiple="multiple" type="file" id="file-upload-input" class="abu-button-input">' + '</div>' + '<div id="abu-done-button" class="abu-done-button" style="position: relative; overflow: hidden; direction: ltr;">' + - '<span id="abu-done-button-text">Cancel</span><input type="image" name="done" class="abu-button-input" style="width:105px">' + + '<span id="abu-done-button-text" class="abu-done-button-cancel">Cancel</span><input type="image" name="done" class="abu-button-input" style="width:105px">' + '</div>' + '<div id="abu-process-button" class="abu-process-button " style="position: relative; overflow: hidden; direction: ltr;">' + '<span id="abu-process-button-text">Process Files</span>' + @@ -187,6 +187,8 @@ abu.FileUploader = function(o){ this.processingComplete = function() { $("#abu-done-button-text").html("Done"); + $("#abu-done-button-text").addClass("abu-done-button-done"); + $("#abu-done-button-text").removeClass("abu-done-button-cancel"); //$("#abu-upload-button").css("display","None"); $("#abu-process-button").addClass("abu-button-disabled"); //$("#abu-process-button-text").html(" "); @@ -248,6 +250,34 @@ abu.FileUploader = function(o){ $(formSelector).on("submit",function(e, uploader) { $(this).ajaxSubmit({ beforeSend: function(arr, $form, options) { + var formURL = $form.url; + if (typeof formURL !== 'undefined' && formURL.toLowerCase().indexOf("overwrite=true")>=0 && formURL.indexOf("/files")>0) { + // See if file already exists + var dupURL = formURL.substring(0,formURL.indexOf("/files")+6) + "?format=json"; + this.fileName = formURL.substring(formURL.indexOf("/files")+7); + if (this.fileName.indexOf("?")>0) { + this.fileName = this.fileName.substring(0,this.fileName.indexOf("?")) + } + this.isOverwrite = false; + $.ajax({ + type: "GET", + url: dupURL, + async: false, + dataType: 'json', + }).done(function(data, textStatus, jqXHR) { + //console.log(data); + if (typeof data.ResultSet !== 'undefined' && typeof data.ResultSet.Result !== 'undefined' && Array.isArray(data.ResultSet.Result)) { + var resultArr = data.ResultSet.Result; + for (var i=0; i<resultArr.length; i++) { + if (typeof resultArr[i].Name !== 'undefined' && (resultArr[i].Name == this.fileName || + (typeof resultArr[i].URI !== 'undefined' && resultArr[i].URI.endsWith('/' + this.fileName)))) { + this.isOverwrite = true; + break; + } + } + } + }.bind(this)); + } $form.data = formData; $form.processData=false; $form.contentType=false; @@ -288,10 +318,13 @@ abu.FileUploader = function(o){ } if (!isDuplicate) { if (typeof result.status !== 'undefined' || result.length > 150) { - status.html('<a href="javascript:abu._fileUploader.showReturnedText(\'' + $(status).attr('id') + '\')" class="underline abu-upload-complete abu-upload-complete-text">Upload complete</a>'); + status.html('<a href="javascript:abu._fileUploader.showReturnedText(\'' + $(status).attr('id') + '\')" class="underline abu-upload-complete abu-upload-complete-text">Upload complete' + + ((this.isOverwrite) ? ' (Existing file overwritten) ' : '') + '</a>'); } else { - status.html('<span class="abu-upload-complete abu-upload-complete-text">Upload complete</span>'); + status.html('<span class="abu-upload-complete abu-upload-complete-text">Upload complete' + + ((this.isOverwrite) ? ' (Existing file overwritten) ' : '') + '</span>'); } + $("#abu-done-button-text").addClass("abu-done-button-file-uploaded"); } else { status.html('<a href="javascript:abu._fileUploader.showReturnedText(\'' + $(status).attr('id') + '\')" class="underline abu-upload-fail">Duplicate file and overwrite=false. Not uploaded.</a>'); } -- GitLab