diff --git a/config/xnat-conf.properties b/config/xnat-conf.properties new file mode 100644 index 0000000000000000000000000000000000000000..3d085758fe8eed9d412fdeba97aed87e7f1d3d99 --- /dev/null +++ b/config/xnat-conf.properties @@ -0,0 +1,22 @@ +# +# xnat-conf.properties +# XNAT http://www.xnat.org +# Copyright (c) 2016, Washington University School of Medicine +# All Rights Reserved +# +# Released under the Simplified BSD. +# +datasource.driver=org.postgresql.Driver +datasource.url=jdbc:postgresql://localhost/xnat +datasource.username=xnat +datasource.password=xnat + +hibernate.dialect=org.hibernate.dialect.PostgreSQL9Dialect +hibernate.hbm2ddl.auto=update +hibernate.show_sql=false +hibernate.cache.use_second_level_cache=true +hibernate.cache.use_query_cache=true + +amq.usage.temp=128mb +amq.usage.mem=512mb +amq.usage.store=1gb diff --git a/src/main/java/org/nrg/xnat/helpers/prearchive/DatabaseSession.java b/src/main/java/org/nrg/xnat/helpers/prearchive/DatabaseSession.java index c0ce5946557e792f6068d5640afd7ded78012c50..a0fa40e71f4c78debae9e58ab63eb169be947d17 100644 --- a/src/main/java/org/nrg/xnat/helpers/prearchive/DatabaseSession.java +++ b/src/main/java/org/nrg/xnat/helpers/prearchive/DatabaseSession.java @@ -18,6 +18,7 @@ import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.List; public enum DatabaseSession { @@ -657,6 +658,17 @@ public enum DatabaseSession { public static String findSessionSql (String session, String timestamp, String project) { return "SELECT * FROM " + PrearcDatabase.tableWithSchema + " WHERE " + DatabaseSession.sessionSql(session,timestamp,project); } + + /** + * Generate SQL to find a row where that matches the given session and project + * @param patientName The patient name on which to search + * @param patientID The patient ID on which to search + * @param studyDate The timestamp on which to search + * @return A complete SQL statement constructed from the submitted criteria. + */ + public static String findMyStudySql () { + return "SELECT * FROM " + PrearcDatabase.tableWithSchema + " WHERE project IS NULL AND (name = ? OR subject = ? OR scan_date = ?)"; + } /** * Count the number of sessions that match the given arguments. diff --git a/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java b/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java index 2bf635d245578acb394ce4fc6e5848bf9646a9c6..1d039b5c5ea34fd3addc4e1ddb547df62f91af13 100644 --- a/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java +++ b/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java @@ -2211,6 +2211,31 @@ public final class PrearcDatabase { return PrearcDatabase.buildRows(projects.toArray(_proj)); } + public static ArrayList<ArrayList<Object>> findMyStudy(final String patientName, final String patientID, final Date studyDate) throws Exception, SQLException, SessionException { + return new SessionOp<ArrayList<ArrayList<Object>>>() { + public ArrayList<ArrayList<Object>> op() throws Exception { + PreparedStatement statement = this.pdb.getPreparedStatement(null, DatabaseSession.findMyStudySql());//patientID, patientName, studyDate + statement.setString(1,patientID); + statement.setString(2,patientName); + if(studyDate!=null) { + statement.setDate(3, new java.sql.Date(studyDate.getTime())); + } + else{ + statement.setDate(3, new java.sql.Date(0L)); + } + ResultSet rs = statement.executeQuery(); + return convertRStoList(rs); + } + }.run(); + +// return new SessionOp<ArrayList<ArrayList<Object>>>() { +// public ArrayList<ArrayList<Object>> op() throws SQLException, SessionException, Exception { +// ResultSet rs = this.pdb.executeQuery(null, DatabaseSession.findStudySql(patientName, patientID, studyDate), null); +// return convertRStoList(rs); +// } +// }.run(); + } + private static ArrayList<ArrayList<Object>> convertRStoList(ResultSet rs) throws SQLException { ArrayList<ArrayList<Object>> ao = new ArrayList<ArrayList<Object>>(); while (rs.next()) { diff --git a/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcUtils.java b/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcUtils.java index 61a3cf53f572f187e54adeefd51a2c1677aea71e..a260cf1889c6896bbf666cf23b49bf07aa6498af 100644 --- a/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcUtils.java +++ b/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcUtils.java @@ -149,10 +149,16 @@ public class PrearcUtils { if (requestedProject.contains(",")) { String[] projectIds = StringUtils.split(requestedProject, ','); for (final String projectId : projectIds) { - projects.add(cleanProject(projectId)); + String cleanProject = cleanProject(projectId); + if(cleanProject!=null || Roles.isSiteAdmin(user)) { + projects.add(cleanProject); + } } } else { - projects.add(cleanProject(requestedProject)); + String cleanProject = cleanProject(requestedProject); + if(cleanProject!=null || Roles.isSiteAdmin(user)) { + projects.add(cleanProject); + } } } else { final UserHelperServiceI userHelperService = UserHelper.getUserHelperService(user); diff --git a/src/main/java/org/nrg/xnat/restlet/resources/prearchive/PrearcSessionResource.java b/src/main/java/org/nrg/xnat/restlet/resources/prearchive/PrearcSessionResource.java index f45fc030f16f6e8e9b9c6486b4921f4e2a6f0581..28761e00d3004b6be0c9ebb062309262751bed0c 100644 --- a/src/main/java/org/nrg/xnat/restlet/resources/prearchive/PrearcSessionResource.java +++ b/src/main/java/org/nrg/xnat/restlet/resources/prearchive/PrearcSessionResource.java @@ -12,7 +12,6 @@ package org.nrg.xnat.restlet.resources.prearchive; import com.google.common.base.Strings; import com.google.common.collect.Maps; - import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.turbine.util.TurbineException; @@ -22,7 +21,6 @@ import org.nrg.framework.constants.PrearchiveCode; import org.nrg.xdat.om.XnatProjectdata; import org.nrg.xft.XFTTable; import org.nrg.xft.exception.InvalidPermissionException; -import org.nrg.xft.utils.DateUtils; import org.nrg.xnat.archive.FinishImageUpload; import org.nrg.xnat.helpers.prearchive.*; import org.nrg.xnat.helpers.prearchive.PrearcDatabase.SyncFailedException; @@ -130,7 +128,7 @@ public final class PrearcSessionResource extends SecureResource { final File sessionDir; try { - sessionDir = PrearcUtils.getPrearcSessionDir(user, project, timestamp, session,false); + sessionDir = PrearcUtils.getPrearcSessionDir(user, project, timestamp, session,true); } catch (InvalidPermissionException e) { logger.error("",e); this.getResponse().setStatus(Status.CLIENT_ERROR_FORBIDDEN, e.getMessage()); diff --git a/src/main/java/org/nrg/xnat/turbine/modules/actions/FindStudy.java b/src/main/java/org/nrg/xnat/turbine/modules/actions/FindStudy.java new file mode 100644 index 0000000000000000000000000000000000000000..ed4baf1fe80a16d7a5de9820984eedfde985b78e --- /dev/null +++ b/src/main/java/org/nrg/xnat/turbine/modules/actions/FindStudy.java @@ -0,0 +1,54 @@ +/* + * org.nrg.xnat.turbine.modules.actions.XMLUpload + * XNAT http://www.xnat.org + * Copyright (c) 2014, Washington University School of Medicine + * All Rights Reserved + * + * Released under the Simplified BSD. + * + * Last modified 7/10/13 9:04 PM + */ +package org.nrg.xnat.turbine.modules.actions; + +import org.apache.turbine.util.RunData; +import org.apache.velocity.context.Context; +import org.nrg.xdat.display.DisplayManager; +import org.nrg.xdat.turbine.modules.actions.SecureAction; +import org.nrg.xnat.helpers.prearchive.PrearcDatabase; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Date; + +/** + * @author Mike McKay + */ +public class FindStudy extends SecureAction { + private static final Logger logger = LoggerFactory.getLogger(FindStudy.class); + + /* + * (non-Javadoc) + * + * @see + * org.apache.turbine.modules.actions.VelocityAction#doPerform(org.apache + * .turbine.util.RunData, org.apache.velocity.context.Context) + */ + public void doPerform(RunData data, Context context) throws Exception { + + String patientName = data.getParameters().getString("patientName"); + String patientID = data.getParameters().getString("patientID"); + Date studyDate = data.getParameters().getDate("studyDate"); + //XFTTable table = null; + try { + //table = PrearcUtils.convertArrayLtoTable(PrearcDatabase.findMyStudy(patientName, patientID, studyDate)); + ArrayList<ArrayList<Object>> results = PrearcDatabase.findMyStudy(patientName, patientID, studyDate); + context.put("results",results); + context.put("resultsSize",results.size()); + context.put("displayManager", DisplayManager.GetInstance()); + } catch (Exception e) { + logger.error(""+e); + } + data.setScreenTemplate("FindStudyMatch.vm"); + } +} diff --git a/src/main/java/org/nrg/xnat/turbine/modules/actions/XDATForgotLogin.java b/src/main/java/org/nrg/xnat/turbine/modules/actions/XDATForgotLogin.java index f9da05543396d95efc2d64a7e2b107d50327016f..06593cd8f5004b752b95b0054fef9e6d926e57ec 100644 --- a/src/main/java/org/nrg/xnat/turbine/modules/actions/XDATForgotLogin.java +++ b/src/main/java/org/nrg/xnat/turbine/modules/actions/XDATForgotLogin.java @@ -27,6 +27,7 @@ public class XDATForgotLogin extends org.nrg.xdat.turbine.modules.actions.XDATFo context.put("user", user); action.doPerform(data, context); } - + context.put("turbineUtils",TurbineUtils.GetInstance()); + } } diff --git a/src/main/java/org/nrg/xnat/turbine/modules/screens/FindStudyMatch.java b/src/main/java/org/nrg/xnat/turbine/modules/screens/FindStudyMatch.java new file mode 100644 index 0000000000000000000000000000000000000000..2538779a6f6d9e7520a1bdc105df4911c2cccfad --- /dev/null +++ b/src/main/java/org/nrg/xnat/turbine/modules/screens/FindStudyMatch.java @@ -0,0 +1,22 @@ +/* + * org.nrg.xnat.turbine.modules.screens.QuickSearchMatch + * XNAT http://www.xnat.org + * Copyright (c) 2014, Washington University School of Medicine + * All Rights Reserved + * + * Released under the Simplified BSD. + * + * Last modified 7/10/13 9:04 PM + */ +package org.nrg.xnat.turbine.modules.screens; + +import org.apache.turbine.util.RunData; +import org.apache.velocity.context.Context; +import org.nrg.xdat.turbine.modules.screens.SecureScreen; + +public class FindStudyMatch extends SecureScreen { + @Override + protected void doBuildTemplate(RunData data, Context context) throws Exception { + } + +} diff --git a/src/main/java/org/nrg/xnat/turbine/modules/screens/ForgotLogin.java b/src/main/java/org/nrg/xnat/turbine/modules/screens/ForgotLogin.java new file mode 100644 index 0000000000000000000000000000000000000000..f9e6d8ad3cf0f60078c914189312cb6a902d67dc --- /dev/null +++ b/src/main/java/org/nrg/xnat/turbine/modules/screens/ForgotLogin.java @@ -0,0 +1,23 @@ +/* + * org.nrg.xnat.turbine.modules.screens.Index + * XNAT http://www.xnat.org + * Copyright (c) 2014, Washington University School of Medicine + * All Rights Reserved + * + * Released under the Simplified BSD. + * + * Last modified 7/10/13 9:04 PM + */ +package org.nrg.xnat.turbine.modules.screens; + +import org.apache.turbine.util.RunData; +import org.apache.velocity.context.Context; +import org.nrg.xdat.turbine.modules.screens.SecureScreen; + +public class ForgotLogin extends SecureScreen { + + @Override + protected void doBuildTemplate(RunData data, Context c) throws Exception { + + } +} diff --git a/src/main/java/org/nrg/xnat/turbine/modules/screens/XDATScreen_email.java b/src/main/java/org/nrg/xnat/turbine/modules/screens/XDATScreen_email.java new file mode 100644 index 0000000000000000000000000000000000000000..ce30922e86b704524f1e9193c5ee5bbb7690d08f --- /dev/null +++ b/src/main/java/org/nrg/xnat/turbine/modules/screens/XDATScreen_email.java @@ -0,0 +1,67 @@ +/* + * org.nrg.xnat.turbine.modules.screens.XDATScreen_edit_xnat_projectData + * XNAT http://www.xnat.org + * Copyright (c) 2014, Washington University School of Medicine + * All Rights Reserved + * + * Released under the Simplified BSD. + * + * Last modified 7/10/13 9:04 PM + */ +package org.nrg.xnat.turbine.modules.screens; + +import org.apache.turbine.util.RunData; +import org.apache.velocity.context.Context; +import org.nrg.xdat.turbine.modules.screens.SecureScreen; +import org.nrg.xdat.turbine.utils.TurbineUtils; +import org.nrg.xft.XFTItem; +import org.nrg.xft.search.ItemSearch; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +/** + * @author XDAT + * + */ +public class XDATScreen_email extends SecureScreen { + + /* (non-Javadoc) + * @see org.apache.turbine.modules.screens.VelocityScreen#doBuildTemplate(org.apache.turbine.util.RunData, org.apache.velocity.context.Context) + */ + protected void doBuildTemplate(RunData data, Context context) + throws Exception { + ArrayList al = ItemSearch.GetAllItems("xdat:user",null,false).items(); + Collections.sort(al, new nameComparator()); + context.put("users",al); + + String s= (String) TurbineUtils.GetPassedParameter("emailTo",data,""); + context.put("emailTo",s); + } + public class nameComparator implements Comparator<XFTItem> { + public int compare(XFTItem object1, XFTItem object2) { + String fn1 = (String) object1.getField("firstname"); + String ln1 = (String) object1.getField("lastname"); + String fn2 = (String) object2.getField("firstname"); + String ln2 = (String) object2.getField("lastname"); + if(fn1==null){ + return 1; + } + if(fn2==null){ + return -1; + } + int c = fn1.toUpperCase().compareTo(fn2.toUpperCase()); + if(c!=0){ + return c; + } + if(ln1==null){ + return 1; + } + if(ln2==null){ + return -1; + } + return ln1.toUpperCase().compareTo(ln2.toUpperCase()); + } + } +} diff --git a/src/main/webapp/scripts/prearchive/PrearchiveFound_actions.js b/src/main/webapp/scripts/prearchive/PrearchiveFound_actions.js new file mode 100644 index 0000000000000000000000000000000000000000..9954bf0e37a7c87667a09d3e25725ca4b0047ee2 --- /dev/null +++ b/src/main/webapp/scripts/prearchive/PrearchiveFound_actions.js @@ -0,0 +1,197 @@ +/* + * D:/Development/XNAT/1.6/xnat_builder_1_6dev/plugin-resources/webapp/xnat/scripts/prearchive/PrearchiveDetails_actions.js + * XNAT http://www.xnat.org + * Copyright (c) 2014, Washington University School of Medicine + * All Rights Reserved + * + * Released under the Simplified BSD. + * + * Last modified 1/6/14 3:48 PM + */ +XNAT.app.prearchiveActions={ + requestDelete:function(){ + xModalConfirm({ + content: "Are you sure you want to permanently delete this session?", + okAction: function(){ + XNAT.app.prearchiveActions.doDelete(); + }, + cancelAction: function(){ + } + }); + }, + doDelete:function(){ + this.delCallback={ + success:this.handleDelSuccess, + failure:this.handleDelFailure, + cache:false, // Turn off caching for IE + scope:this + }; + + openModalPanel("delete_scan","Deleting session"); + + YAHOO.util.Connect.asyncRequest('DELETE',serverRoot+"/REST" + this.url+"?XNAT_CSRF=" + csrfToken,this.delCallback,null,this); + }, + handleDelSuccess:function(o){ + closeModalPanel("delete_scan"); + window.close(); + }, + handleDelFailure:function(o){ + closeModalPanel("delete_scan"); + showMessage("page_body", "Error", "Failed to delete session. ("+ o.message + ")"); + }, + requestMoveDialog:function(oldProj, timestamp, folder){ + $('#oldProjString').val(oldProj); + var formattedTimestamp = timestamp.replace(" ","_").replace("-","").replace("-","").replace(":","").replace(":","").replace(".",""); + while(formattedTimestamp.length<18){ + formattedTimestamp+="0" + } + $('#timestampString').val(formattedTimestamp); + $('#folderString').val(folder); + if(this.projects==undefined){ + this.projCallback={ + success:this.handleProjectsLoad, + failure:function(o){ + closeModalPanel("load_projects"); + showMessage("page_body", "Error", "Failed to load projects. ("+ o.message + ")");}, + cache:false, // Turn off caching for IE + scope:this + }; + + openModalPanel("load_projects","Loading projects"); + + YAHOO.util.Connect.asyncRequest('GET',serverRoot+"/REST/projects?format=json&restrict=edit&columns=ID&XNAT_CSRF=" + csrfToken,this.projCallback,null,this); + }else{ + this.showMoveDialog(); + } + }, + handleProjectsLoad:function(o){ + this.projects=[]; + var projectResults= eval("(" + o.responseText +")"); + for(var pC=0;pC<projectResults.ResultSet.Result.length;pC++){ + this.projects.push(projectResults.ResultSet.Result[pC]); + } + + var options = $("#proj_move_select"); + $.each(this.projects, function() { + options.append($("<option />").val(this.ID).text(this.ID)); + }); + + closeModalPanel("load_projects"); + this.showMoveDialog(); + }, + showMoveDialog:function(){ + XNAT.app.move_project_dialog.render(document.body);//need to pre-render it for the height change to take effect. + XNAT.app.move_project_dialog.show(); + }, + move:function(proj){ + this.newProj=proj; + this.moveCallback={ + success:function(o){ + closeModalPanel("move_p"); + window.location=o.responseText; + }, + failure:function(o){ + closeModalPanel("move_p"); + if(o.status==301 || o.status==0){ + window.location=serverRoot+"/REST/prearchive/projects/"+ proj + "/"+ $('#timestampString').val() +"/" + $('#folderString').val()+"?format=html&screen=PrearchiveDetails.vm&popup=false"; + }else{ + showMessage("page_body", "Error", "Failed to move session. ("+ o.message + ")"); + } + }, + cache:false, // Turn off caching for IE + scope:this + }; + + openModalPanel("move_p","Moving session"); + + YAHOO.util.Connect.asyncRequest('POST',serverRoot+"/REST/prearchive/projects/"+$('#oldProjString').val()+"/"+ $('#timestampString').val() +"/" + $('#folderString').val()+"?action=move&newProject=" + proj +"&XNAT_CSRF=" + csrfToken,this.moveCallback,null,this); + }, + loadLogs:function(){ + var logsCallback={ + success:function(o){ + $('#prearcLogs').html("<h3>History</h3>"+o.responseText); + }, + failure:function(o){}, + cache:false // Turn off caching for IE + }; + YAHOO.util.Connect.asyncRequest('GET',serverRoot+"/REST" + this.url+"/logs?template=details&format=html&requested_screen=PrearchiveDetailsLogs.vm&popup=true",logsCallback,null,this); + } +}; + +//validator is used to simply validate if archiving would work (not to actually archive). +XNAT.app.validator={ + validate:function(){ //issues the REST call to see if this would be archivable + var callback={ + success:function(o){ + this.handleValidation(o); + }, + failure:function(o){ + }, + cache:false, // Turn off caching for IE + scope:this + }; + var validate_service=serverRoot+"/REST/services/validate-archive?format=json&XNAT_CSRF=" + csrfToken; + + YAHOO.util.Connect.setForm(document.getElementById("form1"),false); + YAHOO.util.Connect.asyncRequest('POST',validate_service,callback); + }, + indexOf:function(_list,_obj){ + for (var i = 0;i < _list.length; i++) { + if (_list[i] === _obj) { return i; } + } + return -1; + }, + handleValidation:function(o){ + var validation= eval("(" + o.responseText +")"); + this.show=[]; + var matched=false; + var failed=false; + //iterate over the list of reasons why the archive might fail. + for(var valC=0;valC<validation.ResultSet.Result.length;valC++){ + var val=validation.ResultSet.Result[valC]; + if(val.code=="1"){ + //this just means it matched an existing session, which would have been echoed to the page elsewhere + matched=true; + }else if(this.indexOf(this.fail_merge_on,val.code)>-1){ + failed=true; + val.type="FAIL";//these events are standardly conflicts, but this server is configured for them to fail + this.show.push(val); + }else if(val.type=="FAIL"){ + failed=true; + this.show.push(val); + }else{ + this.show.push(val); + } + } + + if(this.show.length>0){ + //show conflicts, ask approval to override + XNAT.app.validator.warnings="<h3>Current Warnings</h3>"; + for(var valC=0;valC<this.show.length;valC++){ + XNAT.app.validator.warnings+="<div>"+this.show[valC].type+"-"+this.show[valC].code+": "+this.show[valC].message+"</div>" + } + + $("#validationAlerts").html(XNAT.app.validator.warnings); + + if(failed){ + $("#archiveLink").hide(); + }else{ + $("#archiveLink").show(); + } + + this.requiresOverwrite=true; + }else{ + $("#validationAlerts").html(""); + } + } +}; + +//project selector dialog +XNAT.app.move_project_dialog = new YAHOO.widget.Dialog("move_project_dialog", { fixedcenter:true, visible:false, width:"400px", height:"150px", modal:true, close:true, draggable:true,resizable:true}); +XNAT.app.move_project_dialog.cfg.queueProperty("buttons", [ + { text:"Cancel", handler:{fn:function(){ + XNAT.app.move_project_dialog.hide(); + }}},{ text:"Move",id:'move_project_continue', handler:{fn:function(){ + XNAT.app.move_project_dialog.hide(); + XNAT.app.prearchiveActions.move($("#proj_move_select").val()); + }, isDefault:true}}]); diff --git a/src/main/webapp/xnat-templates/screens/FindStudyMatch.vm b/src/main/webapp/xnat-templates/screens/FindStudyMatch.vm new file mode 100644 index 0000000000000000000000000000000000000000..f61071ea6e127fdea2cdab834efbe2cbeababca2 --- /dev/null +++ b/src/main/webapp/xnat-templates/screens/FindStudyMatch.vm @@ -0,0 +1,39 @@ +$page.setTitle("Find Study") +$page.setLinkColor($ui.alink) +$page.setVlinkColor($ui.vlink) +## used to create Change Project modal dialog +<div id='move_project_dialog' style='visibility:hidden'> + <div class='hd'>Change project</div> + <div class='bd' style=''> + <div id='move_projec_desc'>Select the project to move this session to.</div> + <div id='move_projec_div'> + <select id="proj_move_select"></select> + </div> + </div> + <input type="hidden" name="oldProjString" id="oldProjString" value=""/> + <input type="hidden" name="timestampString" id="timestampString" value=""/> + <input type="hidden" name="folderString" id="folderString" value=""/> +</div> + +<script type="text/javascript" src="$content.getURI("scripts/prearchive/PrearchiveFound_actions.js")"></script> + +<h2>Matching Unassigned Studies</h2> +$resultsSize matching studies were found: +<br><br> +#foreach( $result in $results ) + <h3>Study $velocityCount</h3> + <table clsss=""> + <tr><th align="left">$displayManager.getSingularDisplayNameForProject():</th><td>$!result[0]</td></tr> + <tr><th align="left">Session:</th><td>$!result[7]</td></tr> + <tr><th align="left">$displayManager.getSingularDisplayNameForSubject():</th><td>$!result[6]</td></tr> + <tr><th align="left">Patient ID:</th><td>$!result[8]</td></tr> + <tr><th align="left">Study Date:</th><td>$!result[4]</td></tr> + <tr><th align="left">Upload Date:</th><td>$!result[3]</td></tr> + <tr><th align="left"></th><td><button onclick='XNAT.app.prearchiveActions.requestMoveDialog("$result[0]", "$result[3]", "$result[7]")'>Change Project</button></td></tr> + </table> +<br> +#end +<form action="$link.setPage("XDATScreen_prearchives.vm")"> + <input type="submit" value="Return to Prearchive"> +</form> + diff --git a/src/main/webapp/xnat-templates/screens/XDATScreen_prearchives.vm b/src/main/webapp/xnat-templates/screens/XDATScreen_prearchives.vm index 9d71bc7ede8440724bfe92afce21a3959e932f5d..0adf61cc2c1133bb8f4af4eb2ae3a34a6645de9f 100644 --- a/src/main/webapp/xnat-templates/screens/XDATScreen_prearchives.vm +++ b/src/main/webapp/xnat-templates/screens/XDATScreen_prearchives.vm @@ -21,6 +21,26 @@ $!template.setLayoutTemplate("DefaultExptList.vm") <div id="prearchive_table"></div> <div id="progress-bar"></div> <div id="col_table"></div> + +<br> +<h3>Find my study</h3><br> +<div>If you do not see your data in the prearchive, you may have uploaded it without associating it with a project. If you want to find your data and move it to the appropriate project, please enter the Patient Name, Patient ID, or Study Date in the fields below and click the "Find" button:</div> +<form method="post" action="$link.setAction("FindStudy")"> + <table> + <tr><td>Patient Name:</td> + <td><input type="text" name="patientName"></td></tr> + <tr><td>Patient ID:</td> + <td><input type="text" name="patientID"></td></tr> + <tr><td>Study Date:</td> + <td><span id="upload-datepicker" class="single us today" data-value="" data-validate="onblur" data-input-id="studyDate" data-input-name="studyDate"></span> + <script type="text/javascript"> + jQuery('#upload-datepicker').data('value',XNAT.data.todaysDate.us); + XNAT.app.datePicker.init(jQuery('#upload-datepicker')) + </script></td></tr> + <tr><td><input type="submit" value="Find"></td></tr> + </table> +</form> + <div id="prearcs" class="prearcs"></div> <div id="serverRoot" title="$content.getURI('')"></div> <div id="project" title="$!project"></div> @@ -31,6 +51,7 @@ $!template.setLayoutTemplate("DefaultExptList.vm") <div id="match-op" class="match-op"></div> + ##<!-- <script type="text/javascript" src="$content.getURI('scripts/xstypes.js')"></script> --> ##<!-- <script type="text/javascript" src="$content.getURI('scripts/HtmlAlert.js')"></script> --> ##<!-- <script type="text/javascript" src="$content.getURI('scripts/inbox.js')"></script> -->