Changeset 26 for trunk


Ignore:
Timestamp:
Apr 5, 2011, 12:10:29 PM (8 years ago)
Author:
robert@…
Message:

Small fixes

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/conf/BaseFilters.groovy

    r25 r26  
    9595                                // If a user is already logged in, let him continue
    9696                                if( session.user && session.user != null ) {
    97                                         // If we don't refresh the user object, an old hiberante session could still be attached to the object
     97                                        // If we don't refresh the user object, an old hibernate session could still be attached to the object
    9898                                        // raising errors later on (Lazy loading errors)
    99                                         session.user.refresh();
    100                                        
    101                                         return true;
     99                                        try {
     100                                                session.user.refresh();
     101                                                return true;
     102                                        } catch( Exception ex ) {
     103                                                // If an exception occurs, the user is not correctly refreshed. Send the user back to gscf
     104                                                session.user = null;
     105                                                log.info( "User refresh failed" );
     106                                        }
    102107                                }
    103108                               
  • trunk/grails-app/controllers/nl/tno/metagenomics/RunController.groovy

    r24 r26  
    1212
    1313        def index = {
    14                 [runs: Run.list()]
     14                [runs: Run.list(), user: session.user]
    1515        }
    1616
     
    129129
    130130                // Don't remove runs for which data exists
    131                 if( run.sequenceData?.size() ) {
    132                         flash.message = "Run could not be deleted because samples are associated with it.";
     131                if( run.assaySamples*.sequenceData.flatten().size() ) {
     132                        flash.message = "Run could not be deleted because samples with data are associated with it.";
    133133                        redirect( controller: "assay", action: "show", id: params.assayId )
    134134                }
     
    147147               
    148148                // Remove all associations
    149                 run.assays.each {
     149                def a = [] + run.assays
     150                a.each {
    150151                        run.removeFromAssays( it );
    151152                }
     
    156157
    157158                redirect( controller: "assay", action: "show", id: params.assayId )
     159        }
     160
     161        def deleteRun = {
     162                Run run = getRun( params.id );
     163
     164                if( !run ) {
     165                        redirect(controller: 'run', action: 'index')
     166                        return
     167                }
     168
     169                // Don't remove runs for which data exists
     170                if( run.assaySamples*.sequenceData.flatten().size() ) {
     171                        flash.message = "Run could not be deleted because samples with data are associated with it.";
     172                        redirect(controller: 'run', action: 'index')
     173                }
     174
     175                // Check whether the user has sufficient privileges to remove the run from all assays
     176                def hasPrivileges = true;
     177                run.assays.each {
     178                        if( !it.study.canWrite( session.user ) )
     179                                hasPrivileges = false
     180                }
     181               
     182                if( !hasPrivileges ) {
     183                        flash.message = "Run could not be deleted because you don't have sufficient privileges to remove the run from all assays.";
     184                        redirect(controller: 'run', action: 'index')
     185                }
     186               
     187                // Remove all associations
     188                def a = [] + run.assays
     189                a.each {
     190                        run.removeFromAssays( it );
     191                }
     192
     193                def name = run.name
     194                run.delete();
     195                flash.message = "Run " + name + " has been deleted from the system."
     196
     197                redirect(controller: 'run', action: 'index')
    158198        }
    159199
  • trunk/grails-app/domain/nl/tno/metagenomics/Run.groovy

    r9 r26  
    11package nl.tno.metagenomics
    22
     3import nl.tno.metagenomics.auth.User
    34import org.codehaus.groovy.grails.commons.ConfigurationHolder
    45
     
    112113                return list.unique().toList();
    113114        }
     115       
     116        /**
     117         * Returns true if this run can be deleted
     118         *
     119         * @return
     120         */
     121        public boolean deletable( User u ) {
     122                // Don't remove runs for which data exists
     123                if( this.assaySamples*.sequenceData.flatten().size() ) {
     124                        return false;
     125                }
     126
     127                // Check whether the user has sufficient privileges to remove the run from all assays
     128                def hasPrivileges = true;
     129                assays.each {
     130                        if( !it.study.canWrite( u ) )
     131                                hasPrivileges = false
     132                }
     133               
     134                return hasPrivileges
     135        }
    114136}
  • trunk/grails-app/views/assay/index.gsp

    r14 r26  
    2222                                                <th># samples</th>
    2323                                                <th>avg sequences / sample</th>
     24                                                <th class="nonsortable"></th>
    2425                                        </tr>
    2526                                </thead>
     
    4243                                                                                </g:else>
    4344                                                                        </td>
     45                                                                        <td><g:link controller="assay" action="show" id="${assay.id}"><img src="${fam.icon( name: 'application_form_magnify' )}" alt="view" title="view" /></g:link></td>
     46                                                                       
    4447                                                                </tr>
    4548                                                        </g:each>
  • trunk/grails-app/views/run/index.gsp

    r25 r26  
    2929                                <thead>
    3030                                        <tr>
    31                                                 <th class="nonsortable"><input type="checkbox" id="checkAll" onClick="checkAllPaginated(this);" /></th>
    32                                                 <th>Run</th>
    33                                                 <th># samples</th>
    34                                                 <th># sequences</th>
     31                                                <th width="5" class="nonsortable"><input type="checkbox" id="checkAll" onClick="checkAllPaginated(this);" /></th>
     32                                                <th width="49%" >Run</th>
     33                                                <th width="15%"># samples</th>
     34                                                <th width="15%"># sequences</th>
     35                                                <th width="5" class="nonsortable"></th>
     36                                                <th width="5" class="nonsortable"></th>
    3537                                        </tr>
    3638                                </thead>
     
    4244                                                        <td>${run.assaySamples?.size()}</td>
    4345                                                        <td>${run.numSequences()}</td>
     46                                                        <td><g:link controller="run" action="show" id="${run.id}"><img src="${fam.icon( name: 'application_form_magnify' )}" alt="view" title="view" /></g:link></td>
     47                                                        <td>
     48                                                                <g:if test="${run.deletable(user)}">
     49                                                                        <g:link controller="run" action="deleteRun" id="${run.id}"><img src="${fam.icon( name: 'delete' )}" alt="delete" title="delete" /></g:link>
     50                                                                </g:if>
     51                                                                <g:else>
     52                                                                        <img src="${fam.icon( name: 'delete' )}" class="disabled" alt="Run can not be deleted because data is associated with it." title="Run can not be deleted because data is associated with it." />
     53                                                                </g:else>
     54                                                        </td>
    4455                                                </tr>
    4556                                        </g:each>
  • trunk/web-app/css/buttons.css

    r14 r26  
    1212        background-position: 3px 50%;
    1313}
     14
     15.options .separator { margin-left: 20px; }
    1416
    1517#content .options a.disabled { color: #aaa; cursor: default; }
  • trunk/web-app/css/datatables/demo_table_jui.css

    r14 r26  
    2727 */
    2828
     29/**
     30        This hack is needed to have IE7 position
     31        the headers of the paginated table correctly. See also
     32        www.satzansatz.de/cssd/onhavinglayout.html
     33**/
     34.paginate { position: relative; zoom: 1; }
    2935
    3036/*
  • trunk/web-app/css/metagenomics.css

    r25 r26  
    44        font: 11px normal Arial, Helvetica, sans-serif;
    55        background-color: #fff;
    6 }
     6        text-align: center;
     7}
     8
     9.container { margin: 0 auto; text-align: left; }
    710
    811/*a:link, a:visited, a:hover {
Note: See TracChangeset for help on using the changeset viewer.