Changeset 1494

Show
Ignore:
Timestamp:
04-02-11 12:04:10 (3 years ago)
Author:
robert@…
Message:

Implemented pagination on study list pages

Location:
trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/studycapturing/StudyController.groovy

    r1456 r1494  
    2626        def user = AuthenticationService.getLoggedInUser() 
    2727        def max = Math.min(params.max ? params.int('max') : 10, 100) 
    28  
    29         def studies = Study.giveReadableStudies( user, max ); 
    30  
    31         [studyInstanceList: studies, studyInstanceTotal: studies.count(), loggedInUser: user] 
     28                def offset = params.offset ? params.int( 'offset' ) : 0 
     29        def studies = Study.giveReadableStudies( user, max, offset ); 
     30 
     31        [studyInstanceList: studies, studyInstanceTotal: Study.countReadableStudies( user ), loggedInUser: user] 
    3232    } 
    3333 
     
    3939        def user = AuthenticationService.getLoggedInUser() 
    4040        def max = Math.min(params.max ? params.int('max') : 10, 100) 
    41  
    42         def studies = Study.findAllByOwner(user); 
    43         render( view: "list", model: [studyInstanceList: studies, studyInstanceTotal: studies.count(), loggedInUser: user] ) 
     41                def offset = params.offset ? params.int( 'offset' ) : 0 
     42                 
     43        def studies = Study.findAllByOwner(user, [max:max,offset: offset]); 
     44        render( view: "list", model: [studyInstanceList: studies, studyInstanceTotal: Study.countByOwner(user), loggedInUser: user] ) 
    4445    } 
    4546 
  • trunk/grails-app/domain/dbnp/studycapturing/Study.groovy

    r1488 r1494  
    1414class Study extends TemplateEntity { 
    1515        static searchable = true 
    16          
     16 
    1717        def moduleNotificationService 
    1818 
     
    3434 
    3535        /** 
    36         * UUID of this study 
    37         */ 
     36         * UUID of this study 
     37         */ 
    3838        String studyUUID 
    3939 
    40          
     40 
    4141        static hasMany = [ 
    4242                subjects: Subject, 
     
    8585        static final List<TemplateField> domainFields = [ 
    8686                new TemplateField( 
    87                         name: 'title', 
    88                         type: TemplateFieldType.STRING, 
    89                         required: true), 
     87                name: 'title', 
     88                type: TemplateFieldType.STRING, 
     89                required: true), 
    9090                new TemplateField( 
    91                         name: 'description', 
    92                         type: TemplateFieldType.TEXT, 
    93                         comment:'Give a brief synopsis of what your study is about', 
    94                         required: true), 
     91                name: 'description', 
     92                type: TemplateFieldType.TEXT, 
     93                comment:'Give a brief synopsis of what your study is about', 
     94                required: true), 
    9595                new TemplateField( 
    96                         name: 'code', 
    97                         type: TemplateFieldType.STRING, 
    98                         preferredIdentifier: true, 
    99                         comment: 'Fill out the code by which many people will recognize your study', 
    100                         required: true), 
     96                name: 'code', 
     97                type: TemplateFieldType.STRING, 
     98                preferredIdentifier: true, 
     99                comment: 'Fill out the code by which many people will recognize your study', 
     100                required: true), 
    101101                new TemplateField( 
    102                         name: 'startDate', 
    103                         type: TemplateFieldType.DATE, 
    104                         comment: 'Fill out the official start date or date of first action', 
    105                         required: true), 
     102                name: 'startDate', 
     103                type: TemplateFieldType.DATE, 
     104                comment: 'Fill out the official start date or date of first action', 
     105                required: true), 
    106106                new TemplateField( 
    107                         name: 'published', 
    108                         type: TemplateFieldType.BOOLEAN, 
    109                         comment: 'Determines whether this study is published (accessible for the study readers and, if the study is public, for anonymous users). A study can only be published if it meets certain quality criteria, which will be checked upon save.', 
    110                         required: false) 
     107                name: 'published', 
     108                type: TemplateFieldType.BOOLEAN, 
     109                comment: 'Determines whether this study is published (accessible for the study readers and, if the study is public, for anonymous users). A study can only be published if it meets certain quality criteria, which will be checked upon save.', 
     110                required: false) 
    111111        ] 
    112112 
     
    123123        def List<Event> getOrphanEvents() { 
    124124                def orphans = events.findAll { event -> !event.belongsToGroup(eventGroups) } + 
    125                         samplingEvents.findAll { event -> !event.belongsToGroup(eventGroups) } 
     125                samplingEvents.findAll { event -> !event.belongsToGroup(eventGroups) } 
    126126 
    127127                return orphans 
     
    349349                                this.samples.findAll { sample -> 
    350350                                        ( 
    351                                         (eventGroup.subjects.findAll { 
    352                                                 it.equals(sample.parentSubject) 
    353                                         }) 
    354                                                 && 
    355                                                 (eventGroup.samplingEvents.findAll { 
    356                                                         ( 
    357                                                         (it.id && sample.parentEvent.id && it.id == sample.parentEvent.id) 
    358                                                                 || 
    359                                                                 (it.getIdentifier() == sample.parentEvent.getIdentifier()) 
    360                                                                 || 
    361                                                                 it.equals(sample.parentEvent) 
     351                                                        (eventGroup.subjects.findAll { 
     352                                                                it.equals(sample.parentSubject) 
     353                                                        }) 
     354                                                        && 
     355                                                        (eventGroup.samplingEvents.findAll { 
     356                                                                ( 
     357                                                                                (it.id && sample.parentEvent.id && it.id == sample.parentEvent.id) 
     358                                                                                || 
     359                                                                                (it.getIdentifier() == sample.parentEvent.getIdentifier()) 
     360                                                                                || 
     361                                                                                it.equals(sample.parentEvent) 
     362                                                                                ) 
     363                                                        }) 
    362364                                                        ) 
    363                                                 }) 
    364                                         ) 
    365365                                }.each() { sample -> 
    366366                                        // remove sample from study 
     
    458458                        return c.list { 
    459459                                maxResults(max) 
     460                                order("title", "asc") 
     461                                 
    460462                        } 
    461463                } 
     
    463465                return c.list { 
    464466                        maxResults(max) 
     467                        order("title", "asc") 
    465468                        or { 
    466469                                eq("owner", user) 
     
    475478         * Returns a list of studies that are readable by the given user 
    476479         */ 
    477         public static giveReadableStudies(SecUser user, int max) { 
     480        public static giveReadableStudies(SecUser user, int max, int offset = 0) { 
    478481                def c = Study.createCriteria() 
    479482 
     
    482485                        return c.list { 
    483486                                maxResults(max) 
     487                                firstResult(offset) 
     488                                order("title", "asc") 
    484489                                and { 
    485490                                        eq("published", true) 
     
    490495                        return c.list { 
    491496                                maxResults(max) 
     497                                firstResult(offset) 
     498                                order("title", "asc") 
    492499                        } 
    493500                } else { 
    494501                        return c.list { 
    495502                                maxResults(max) 
     503                                firstResult(offset) 
     504                                order("title", "asc") 
    496505                                or { 
    497506                                        eq("owner", user) 
     
    509518                } 
    510519        } 
    511          
     520 
     521        /** 
     522         * Returns the number of studies that are readable by the given user 
     523         */ 
     524        public static countReadableStudies(SecUser user) { 
     525                def c = Study.createCriteria() 
     526 
     527                // Administrators are allowed to read everything 
     528                if (user == null) { 
     529                        return c.count { 
     530                                and { 
     531                                        eq("published", true) 
     532                                        eq("publicstudy", true) 
     533                                } 
     534                        } 
     535                } else if (user.hasAdminRights()) { 
     536                        return Study.count(); 
     537                } else { 
     538                        return c.count { 
     539                                or { 
     540                                        eq("owner", user) 
     541                                        writers { 
     542                                                eq("id", user.id) 
     543                                        } 
     544                                        and { 
     545                                                readers { 
     546                                                        eq("id", user.id) 
     547                                                } 
     548                                                eq("published", true) 
     549                                        } 
     550                                } 
     551                        } 
     552                } 
     553        } 
     554 
    512555        /** 
    513556         * Returns the UUID of this study and generates one if needed 
     
    520563                        } 
    521564                } 
    522                  
     565 
    523566                return this.studyUUID; 
    524567        } 
    525          
     568 
    526569        /** 
    527570         * Basic equals method to check whether objects are equals, by comparing the ids 
     
    532575                if( o == null ) 
    533576                        return false; 
    534                          
     577 
    535578                if( !( o instanceof Study ) ) 
    536579                        return false 
    537                  
     580 
    538581                Study s = (Study) o; 
    539                  
     582 
    540583                return this.id == s.id 
    541584        } 
  • trunk/grails-app/views/study/list.gsp

    r1430 r1494  
    99<body> 
    1010 
    11 <g:form action="list_extended"> 
     11<g:form action="list_extended" name="list_extended"> 
    1212        <div class="body"> 
    1313                <h1><g:message code="default.list.label" args="[entityName]"/></h1> 
     
    7878                        <sec:ifLoggedIn> 
    7979                                <span class="button"><g:link class="create" controller="studyWizard" params="[jump:'create']"><g:message code="default.new.label" args="[entityName]"/></g:link></span> 
     80                                <span class="button"><a class="compare" href="#" onClick="$( 'form#list_extended' ).first().submit(); return false;">Compare selected studies</a></span> 
    8081                        </sec:ifLoggedIn> 
     82                         
    8183                </div> 
    8284                <div class="paginateButtons"> 
    83                         <g:paginate total="${studyInstanceTotal}" prev="&laquo; Previous" next="&raquo; Next"/> 
    84                         <br> 
    85                         <INPUT TYPE=submit name=submit Value="Compare selected studies"> 
     85                        <g:paginate max="10" total="${studyInstanceTotal}" prev="&laquo; Previous" next="&raquo; Next"/> 
    8686                </div> 
    8787        </div> 
  • trunk/web-app/css/default_style.css

    r1487 r1494  
    355355} 
    356356 
     357.buttons input.compare, .buttons a.compare { 
     358        background: transparent url(../plugins/famfamfam-1.0.1/images/icons/application_double.png) 5px 50% no-repeat; 
     359        padding-left: 28px; 
     360} 
     361 
    357362.buttons input.backToList, .buttons a.backToList { 
    358363        background: transparent url(../plugins/famfamfam-1.0.1/images/icons/application.png) 5px 50% no-repeat;