Changeset 7 for trunk/grails-app/views


Ignore:
Timestamp:
Jan 26, 2011, 5:08:25 PM (11 years ago)
Author:
robert@…
Message:
  • Created tests for the synchronization and trash
  • Improved synchronizationservice and trash
  • Put authorization checks in several pages
Location:
trunk/grails-app/views
Files:
7 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/views/assay/_addFilesDialog.gsp

    r3 r7  
    33       
    44        <g:form name="addFiles" controller="fasta" action="showProcessScreen" id="${assay.id}">
    5                 <p>Select the run these files belong to: <g:select name="selectedRun" from="${assay.runs}" optionKey="id" optionValue="name" /></p>
     5                <input type="hidden" name="entityType" value="assay" />
    66                <p>
    77                        Select sequence and quality files to upload. It is possible to zip the files before upload.
  • trunk/grails-app/views/assay/_addRunDialog.gsp

    r4 r7  
    5151                                                                </td>
    5252                                                                <td>
    53                                                                         <g:if test="${run.sequenceData?.size()}">
     53                                                                        <g:if test="${run.assaySamples?.size()}">
    5454                                                                                <img src="${fam.icon(name: 'delete')}" class="disabled" title="You can't delete this run because samples are associated with this run." />
    5555                                                                        </g:if>
  • trunk/grails-app/views/assay/_enterTagsDialog.gsp

    r2 r7  
    1515                                                <tr>
    1616                                                        <th>Sample</th>
     17                                                        <th>Run</th>
    1718                                                        <th>Tag sequence</th>
    1819                                                        <th>Oligo number</th>
     
    2223                                                <tr>
    2324                                                        <td>${assaySample.sample?.name}</td>
     25                                                        <td><g:select name="assaySample.${assaySample.id}.run" from="${assaySample.assay.runs}" value="${assaySample.run?.id}" optionKey="id" optionValue="name" /></td>
    2426                                                        <td><g:textField name="assaySample.${assaySample.id}.tagSequence" value="${assaySample.tagSequence}" /></td>
    2527                                                        <td><g:textField name="assaySample.${assaySample.id}.oligoNumber" value="${assaySample.oligoNumber}" /></td>
  • trunk/grails-app/views/assay/show.gsp

    r4 r7  
    1111                <g:javascript src="assay.show.enterTagsDialog.js" />
    1212                <g:javascript src="assay.show.runDialogs.js" />
    13                 <g:javascript src="assay.show.showSampleDialog.js" />
     13                <g:javascript src="showSampleDialog.js" />
    1414                <g:javascript src="assay.show.showRunDialog.js" />
    1515
     
    6464                                <tr>
    6565                                        <th nowrap>name</th>
     66                                        <th nowrap>run</th>
    6667                                        <th nowrap>tag sequence</th>
    6768                                        <th nowrap># sequences</th>
    68                                         <th nowrap>avg quality</th>
    6969                                        <th nowrap># unique sequences</th>
    7070                                </tr>
     
    7474                                <g:each in="${assaySamples}" var="assaySample">
    7575                                        <tr>
    76                                                 <td><a href="#" onClick="showSample(${assaySample.id}); return false;">${assaySample.sample.name}</a></td>
     76                                                <td><a href="#" onClick="showSample(${assaySample.id}, 'assay'); return false;">${assaySample.sample.name}</a></td>
     77                                                <td>${assaySample.run?.name}</td>
    7778                                                <td>${assaySample.tagSequence}</td>
    7879                                                <td>${assaySample.numSequences()}</td>
    79                                                 <td>
    80                                                         <g:if test="${assaySample.averageQuality() > 0.0}">
    81                                                                 <g:formatNumber number="${assaySample.averageQuality()}" format="0.0" />
    82                                                         </g:if>
    83                                                         <g:else>
    84                                                                 -
    85                                                         </g:else>
    86                                                 </td>
    8780                                                <td>
    8881                                                        <g:if test="${assaySample.numUniqueSequences > 0}">
     
    129122                                <g:each in="${runs}" var="run">
    130123                                        <tr>
    131                                                 <td><a href="#" onClick="showRun(${run.id}); return false;">${run.name}</a></td>
     124                                                <td><g:link controller="run" action="show" id="${run.id}">${run.name}</g:link></td>
    132125                                                <td><g:formatDate format="dd-MM-yyyy" date="${run.date}"/></td>
    133126                                                <td>${run.supplier}</td>
  • trunk/grails-app/views/assaySample/show.gsp

    r4 r7  
    11<h2>${assaySample.sample.name}</h2>
     2
     3<ul>
     4        <li><label>Study</label><span class="value">${assaySample.assay?.study?.name}</span></li>
     5        <li><label>Assay</label><span class="value">${assaySample.assay?.name}</span></li>
     6        <li><label>Sample</label><span class="value">${assaySample.sample?.name}</span></li>
     7        <li><label>Run</label><span class="value">${assaySample.run?.name}</span></li>
     8</ul>   
    29
    310<h2>Details</h2>
     
    613        <li><label>Tag sequence</label><span class="value">${assaySample.tagSequence}</span></li>
    714        <li><label>Oligo number</label><span class="value">${assaySample.oligoNumber}</span></li>
    8         <li><label>Run(s)</label><span class="value">${assaySample.sequenceData?.run.name.unique().join( ',' )}</span></li>
    915        <li><label># sequences</label><span class="value">${assaySample.numSequences() ?: '-'}</span></li>
    1016        <li><label>Average quality</label><span class="value">${assaySample.averageQuality() ?: '-'}</span></li>
     
    2026                                <th nowrap>Quality file</th>
    2127                                <th nowrap># sequences</th>
    22                                 <th nowrap>avg quality</th>
    2328                                <th class="nonsortable"></th>
    2429                        </tr>
     
    3439                                        </td>
    3540                                        <td>${sequenceData.numSequences}</td>
    36                                         <td>
    37                                                 <g:if test="${sequenceData.averageQuality > 0.0}">
    38                                                         <g:formatNumber number="${sequenceData.averageQuality}" format="0.0" />
    39                                                 </g:if>
    40                                                 <g:else>
    41                                                         -
    42                                                 </g:else>
    43                                         </td>
    44                                         <td class="button"><g:link onClick="return confirm( 'Are you sure you want to remove the selected files from this sample?' );" controller="fasta" action="deleteData" id="${sequenceData.id}"><img src="${fam.icon(name: 'delete')}" /></g:link></td>
     41                                        <td class="button"><g:link onClick="return confirm( 'Are you sure you want to remove the selected files from this sample?' );" controller="fasta" action="deleteData" id="${sequenceData.id}" params="[entityType: entityType]"><img src="${fam.icon(name: 'delete')}" /></g:link></td>
    4542                                </tr>
    4643                        </g:each>
  • trunk/grails-app/views/common/_topnav.gsp

    r2 r7  
    33     <li><g:link controller="study">Home</g:link></li>
    44        <li>
    5       <a href="#">Studies</a>
     5      <a href="#">View</a>
    66      <ul class="subnav">
    7                 <li><g:link controller="study" action="myStudies">My studies</g:link></li>
    8                 <li><g:link controller="study" action="list">All studies</g:link></li>
    9 
    10                 <li><g:link controller="studyWizard" action="index" params="[jump:'create']">Create a new study</g:link></li>
    11                 <li><g:link controller="studyWizard" action="index" params="[jump:'edit']">Edit a study</g:link></li>
    12                 <li><g:link controller="importer" action="index">Import study data</g:link></li>
    13         <li><g:link controller="simpleQuery" action="index">Search study data</g:link></li>
    14         <li><g:link controller="exporter" action="index">Export as SimpleTox</g:link></li>
     7                <li><g:link controller="run">Runs</g:link></li>
     8                <li><g:link controller="assay">Assays</g:link></li>
    159      </ul>
     10    </li>
     11        <li>
     12      <a href="${org.codehaus.groovy.grails.commons.ConfigurationHolder.config.gscf.baseURL}">GSCF</a>
    1613    </li>
    1714        <g:if env="development">
  • trunk/grails-app/views/fasta/showProcessResult.gsp

    r3 r7  
    22        <head>
    33                <meta name="layout" content="main" />
    4                 <title>Processed files for assay ${assay.name} | Metagenomics | dbNP</title>
     4                <title>Processed files| Metagenomics | dbNP</title>
    55               
    66                <script>
    7                         var assayId = ${assay.id};
     7                        var entityId = ${entity.id};
    88                </script>
    99        </head>
    1010<body>
    1111        <h1>
    12                 ${assay.study.name} - ${assay.name}
     12                <g:if test="${entityType == 'assay'}">
     13                        Assay ${entity.study?.name} - ${entity.name}
     14                </g:if>
     15                <g:else>
     16                        Run ${entity.name}
     17                </g:else>
    1318        </h1>
    1419        <g:if test="${matchedFiles.size() > 0}">
    1520                <h2>Match files with samples</h2>
    1621                <%
    17                         def sortedSamples = assay.assaySamples.sort() { a,b -> a.sample.name <=> b.sample.name }
    18                         def sortedRuns = assay.runs.sort() { a,b -> a.name <=> b.name }
     22                        def sortedSamples = entity.assaySamples.findAll { it.assay.study.canWrite( session.user ) }.sort() { a,b -> a.sample.name <=> b.sample.name }
    1923                %>
    20                 <g:form name="saveProcessedFiles" action="saveProcessedFiles" id="${assay.id}">
     24                <g:form name="saveProcessedFiles" action="saveProcessedFiles" id="${entity.id}" params="${[controller: controller]}">
     25                <input type="hidden" name="entityType" value="${entityType}" />
    2126                <table>
    2227                        <thead>
     
    2732                                        <th>Qual file</th>
    2833                                        <th>Sample</th>
    29                                         <th>Run</th>
    3034                                </tr>
    3135                        </thead>
     
    6165                                                <g:else>
    6266                                                        No samples available.
    63                                                 </g:else>
    64                                         </td>
    65                                         <td>
    66                                                 <g:if test="${sortedRuns.size()}">
    67                                                         <select name="file.${i}.run">
    68                                                                 <g:each in="${sortedRuns}" var="run">
    69                                                                         <option
    70                                                                                 <g:if test="${selectedRun?.toLong() == run.id}">
    71                                                                                         selected="selected"
    72                                                                                 </g:if>
    73                                                                                 value="${run.id}">${run.name}</option>
    74                                                                 </g:each>
    75                                                         </select>
    76                                                 </g:if>
    77                                                 <g:else>
    78                                                         No runs available.
    7967                                                </g:else>
    8068                                        </td>
     
    113101       
    114102        <p>
    115                 <g:link controller="assay" action="show" id="${assay.id}">Return to assay</g:link>     
     103                <g:link controller="${entityType}" action="show" id="${entity.id}">Return to ${entityType}</g:link>     
    116104        </p>
    117105</body>
  • trunk/grails-app/views/fasta/showProcessScreen.gsp

    r3 r7  
    22<head>
    33<meta name="layout" content="main" />
    4 <title>Processing files for assay ${assay.name} | Metagenomics |
    5 dbNP</title>
     4<title>Processing files | Metagenomics | dbNP</title>
    65
    76<script type="text/javascript">
    8                         var assayId = ${assay.id};
    97                        $(function() {
    108                                $( "#wait_dialog" ).dialog({
     
    3028                                $.ajax({
    3129                                  type: 'POST',
    32                                   url: "<g:createLink controller="fasta" action="process" id="${assay.id}" />",
     30                                  url: "<g:createLink controller="fasta" action="process" id="${entityId}" />",
     31                                  data: "entityType=${entityType}",
    3332                                  success: function(data) {
    3433                                         
     
    4544
    4645                                          alert( "Error " + xhr.responseCode + ": " + textStatus );
    47                                           window.location.replace( "<g:createLink controller="assay" action="show" id="${assay.id}" />" );
     46                                          window.location.replace( "<g:createLink controller="${entityType}" action="show" id="${entityId}" />" );
    4847                                }
    4948                                });
  • trunk/grails-app/views/layouts/main.gsp

    r3 r7  
    3838                                </g:if>
    3939                                <g:if test="${flash.error}">
    40                                         <p class="error">${flash.error}</p>
     40                                        <p class="error">${flash.error.toString().encodeAsHTML()}</p>
    4141                                </g:if>
    4242                                <g:if test="${flash.message}">
    43                                         <p class="message">${flash.message}</p>
     43                                        <p class="message">${flash.message.toString().encodeAsHTML()}</p>
    4444                                </g:if>
    4545                               
  • trunk/grails-app/views/run/show.gsp

    r4 r7  
    1 <h2>${run.name}</h2>
     1<html>
     2        <head>
     3                <meta name="layout" content="main" />
     4                <title>Show run ${run.name} | Metagenomics | dbNP</title>
     5               
     6                <link rel="stylesheet" href="<g:resource dir="css" file="showAssay.css" />" type="text/css"/>
     7                <link rel="stylesheet" href="<g:resource dir="css" file="fileuploader.new.css" />" type="text/css"/>
     8               
     9                <g:javascript src="jquery.ui.tabbeddialog.js" />
     10                <g:javascript src="assay.show.addFilesDialog.js" />
    211
    3 <h2>Details</h2>
     12                <g:javascript src="run.show.enterTagsDialog.js" />
     13                <g:javascript src="run.show.assayDialog.js" />
     14                <g:javascript src="showSampleDialog.js" />
    415
    5 <ul>
    6         <li><label>Date</label><span class="value"><g:formatDate format="dd-MM-yyyy" date="${run.date}"/></span></li>
    7         <li><label>Supplier</label><span class="value">${run.supplier}</span></li>
    8         <li><label>Machine</label><span class="value">${run.machine}</span></li>
    9         <li><label>Parameter file</label><span class="value"><g:uploadedFile value="${run.parameterFile}" /></span></li>
     16                <g:javascript src="assay.show.showRunDialog.js" />
     17
     18                <g:javascript src="fileuploader.new.js" />
     19                <g:javascript src="fileuploads.new.js" />
     20               
     21                <script>
     22                        var runId = ${run.id};
     23                        var numOtherAssays = ${otherAssays.size()};
     24
     25                        function initializeUploadedFiles( selector ) {
     26                                if( selector == undefined )
     27                                        selector = "";
     28                               
     29                                $( selector + ' .uploadedFile').each( function( idx, el ) {
     30                                        $(el).html( createFileHTML( $(el).text(), 'getPermanent' ) );
     31                                });
     32                        }
     33
     34                        // Initializefiles on load
     35                        $(function() { initializeUploadedFiles(); });
     36                </script>
     37        </head>
     38<body>
     39        <h1>
     40                Run ${run.name}
     41        </h1>
    1042       
    11         <li><label># files</label><span class="value">${run.numFiles()}</span></li>
    12         <li><label># sequences</label><span class="value">${run.numSequences()}</span></li>
    13 </ul>
    14 <% def runSamples = run.samples( assay.id ); %>
    15 <g:if test="${runSamples.size()}">
     43        <label>Run</label>: ${run.name}<br />
     44        <label># samples</label>: ${run.assaySamples?.size()}
     45        <% def numHidden = run.assaySamples?.findAll { !it.assay?.study.canRead( session.user ) }.size() ; %>
     46        <g:if test="${numHidden}">
     47                (${numHidden}
     48                <a href="#" onClick="alert( '${numHidden} samples from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
     49                hidden</a>)
     50        </g:if>
     51        <br />
     52        <label># sequences</label>: ${run.numSequences()}<br />
     53        <label># files</label>: ${run.numFiles()}<br />
     54
     55        <!-- Samples -->
    1656        <h2>Samples</h2>
    17         <table class="paginate">
    18                 <thead>
    19                         <tr>
    20                                 <th nowrap>Sample</th>
    21                                 <th nowrap>Sequence file</th>
    22                                 <th nowrap>Quality file</th>
    23                                 <th nowrap># sequences</th>
    24                                 <th nowrap>avg quality</th>
    25                         </tr>
    26                 </thead>                       
    27                 <tbody>
    28                         <g:each in="${runSamples}" var="assaySample">
    29                                 <% def files = assaySample.sequenceData.findAll { it.sample.assay.id == assay.id }; %>
    30                                 <g:each in="${files}" var="data" status="i">
     57        <g:if test="${run.assaySamples == null || run.assaySamples.size() == 0}">
     58                No samples found in run.
     59        </g:if>
     60        <g:else>
     61                <table class="paginate">
     62                        <thead>
     63                                <tr>
     64                                        <th nowrap>name</th>
     65                                        <th nowrap>assay</th>
     66                                        <th nowrap>tag sequence</th>
     67                                        <th nowrap># sequences</th>
     68                                        <th nowrap># unique sequences</th>
     69                                </tr>
     70                        </thead>                       
     71                        <tbody>
     72                                <% def assaySamples = run.assaySamples.findAll { it.assay?.study.canRead( session.user ) }.toList().sort { it.sample.name }; %>
     73                                <g:each in="${assaySamples}" var="assaySample">
    3174                                        <tr>
    32                                                 <td>${assaySample.sample.name}</td>
    33                                                 <td><g:uploadedFile value="${data.sequenceFile}" /></td>
     75                                                <td><a href="#" onClick="showSample(${assaySample.id}, 'run'); return false;">${assaySample.sample.name}</a></td>
     76                                                <td>${assaySample.assay.study.name} - ${assaySample.assay.name}</td>
     77                                                <td>${assaySample.tagSequence}</td>
     78                                                <td>${assaySample.numSequences()}</td>
    3479                                                <td>
    35                                                         <g:if test="${data.qualityFile}">
    36                                                                 <g:uploadedFile value="${data.qualityFile}" />
    37                                                         </g:if>
    38                                                 </td>
    39                                                 <td>${data.numSequences}</td>
    40                                                 <td>
    41                                                         <g:if test="${data.averageQuality > 0.0}">
    42                                                                 <g:formatNumber number="${data.averageQuality}" format="0.0" />
     80                                                        <g:if test="${assaySample.numUniqueSequences > 0}">
     81                                                                ${assaySample.numUniqueSequences}
    4382                                                        </g:if>
    4483                                                        <g:else>
     
    4887                                        </tr>
    4988                                </g:each>
    50                         </g:each>
    51                 </tbody>
    52         </table>
    53 </g:if>
     89                        </tbody>
     90                </table>
     91                <g:if test="${editable}">
     92                        <% def writableAssaySamples = assaySamples.findAll { it.assay.study.canWrite( session.user ) } %>
     93                        <g:if test="${writableAssaySamples.size() > 0}">
     94                                <input type="button" value="Edit sample data" onClick="showEnterTagsDialog();">
     95                                <input type="button" value="Add sequence files" onClick="showAddFilesDialog();" <g:if test="${run.assays == null || run.assays.size() == 0}">disabled="disabled"</g:if>>
     96                                <g:render template="enterTagsDialog" model="[run: run, writableAssaySamples: writableAssaySamples]" />
     97                                <g:render template="addFilesDialog" model="[run: run]" />
     98                        </g:if>
     99                        <g:else>
     100                                <input type="button" value="Edit sample data" disabled="disabled">
     101                                <input type="button" value="Add sequence files" disabled="disabled">
     102                        </g:else>
    54103
    55 <h2>Delete run</h2>
    56 <g:if test="${run.sequenceData?.size()}">
    57         <p>
    58                 You can't delete this run because samples are associated with this run.
    59         </p>
    60 </g:if>
    61 <g:else>
    62         <g:if test="${run.assays?.size() > 1}">
    63                 <p>If you delete this run, it will also be deleted from the other assays it is associated to!</p>
     104                </g:if>
     105                <div id="showSampleDialog" class="dialog"></div>
     106        </g:else>       
     107
     108        <!-- Runs -->
     109        <h2>Assays</h2>
     110        <g:if test="${run.assays == null || run.assays.size() == 0}">
     111                No assay found for this run
    64112        </g:if>
    65         <p><g:link onClick="return confirm( 'Are you sure you want to delete this run from the system?' );" controller="run" action="delete" id="${run.id}" params="[assayId: assay.id]">Delete this run from the system.</g:link></p>
    66 </g:else>
     113        <g:else>
     114                <table class="paginate">
     115                        <thead>
     116                                <tr>
     117                                        <th nowrap>name</th>
     118                                        <th nowrap>study</th>
     119                                        <th nowrap># samples</th>
     120                                        <th nowrap>other runs</th>
     121                                        <th class="nonsortable"></th>
     122                                </tr>
     123                        </thead>                       
     124                        <tbody>
     125                                <% def assays = run.assays.findAll { it.study.canRead( session.user ) }.toList().sort { it.name }; %>
     126                                <g:each in="${assays}" var="assay">
     127                                        <tr>
     128                                                <td><g:link controller="assay" action="show" id="${assay.id}">${assay.name}</g:link></td>
     129                                                <td>${assay.study?.name}</td>
     130                                                <td>${assay.assaySamples?.size()}</td>
     131                                                <td>
     132                                                        <g:if test="${assay.runs?.size() == 1}">
     133                                                                <% /* If only 1 run is found, then it is the current one */ %>
     134                                                                -
     135                                                        </g:if>
     136                                                        <g:else>
     137                                                                <g:each in="${assay.runs - run}" var="otherRun">
     138                                                                        <g:link action="show" id="${otherRun.id}">${otherRun.name}</g:link><br />
     139                                                                </g:each>
     140                                                        </g:else>
     141                                                </td>
     142                                                <td class="button">
     143                                                        <g:if test="${run.samples(assay.id).size()}">
     144                                                                <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this assay because sequences from this assay are coupled to this run." />
     145                                                        </g:if>
     146                                                        <g:else>
     147                                                                <g:link onClick="return confirm( 'Are you sure you want to remove the selected assay from this run?' );" controller="run" action="removeAssay" id="${run.id}" params="${[assay_id: assay.id]}" ><img src="${fam.icon(name: 'application_delete')}" /></g:link>
     148                                                        </g:else>
     149                                                </td>
     150                                        </tr>
     151                                </g:each>
     152                        </tbody>
     153                </table>
     154        </g:else>
     155        <% def writableAssays = otherAssays.findAll { it.study.canWrite( session.user ) } %>
     156        <g:if test="${editable}">
     157                <g:if test="${writableAssays.size() > 0}">
     158                        <input type="button" value="Add assay" onClick="showAddAssayDialog();" />
     159                        <g:render template="addAssayDialog" model="[run: run, writableAssays: writableAssays]" />
     160                </g:if>
     161                <g:else>
     162                        <input type="button" value="Add assay" disabled="disabled" />
     163                </g:else>
     164        </g:if>
     165        <div id="showRunDialog" class="dialog"></div>
     166</body>
     167</html>
  • trunk/grails-app/views/study/index.gsp

    r2 r7  
    1515                                <thead>
    1616                                        <tr>
     17
     18                                                <th>Assay</th>
    1719                                                <th>Study</th>
    18                                                 <th>Assay</th>
    1920                                                <th># samples</th>
    2021                                        </tr>
     
    2324                                        <g:each in="${studies}" var="study">
    2425                                                <g:if test="${study.assays == null || study.assays.size() == 0}">
     26                                                        <!--
    2527                                                        <tr>
    2628                                                                <td><a href="${study.viewUrl()}">${study.name}</a></td>
     
    2830                                                                <td></td>
    2931                                                        </tr>
     32                                                         -->
    3033                                                </g:if><g:else>
    3134                                                        <g:each in="${study.assays}" var="assay">
    3235                                                                <tr>
     36                                                                        <td><g:link controller="assay" action="show" id="${assay.id}">${assay.name}</g:link></td>
    3337                                                                        <td><a href="${study.viewUrl()}">${study.name}</a></td>
    34                                                                         <td><g:link controller="assay" action="show" id="${assay.id}">${assay.name}</g:link></td>
    3538                                                                        <td>${assay.assaySamples?.size()}</td>
    3639                                                                </tr>
Note: See TracChangeset for help on using the changeset viewer.