Changeset 578


Ignore:
Timestamp:
Jun 17, 2010, 2:57:04 PM (9 years ago)
Author:
duh
Message:
  • added logic to immediately edit or create a study (and hence skip the main wizard page)
  • the final wizard page now allows you to immediately edit the study, create a new study or show the study
  • the show study page's edit button now immediately makes you edit the study in the wizard
Location:
trunk/grails-app
Files:
3 edited

Legend:

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

    r576 r578  
    2828         */
    2929        def index = {
     30                def jump = [:]
     31
     32                // allow quickjumps to:
     33                //      edit a study    : /wizard?jump=edit&id=1
     34                //      create a study  : /wizard?jump=create
     35                if (params.get('jump')) {
     36                        switch (params.get('jump')) {
     37                                case 'create':
     38                                        jump = [
     39                                            action: 'create'
     40                                        ]
     41                                        break
     42                                case 'edit':
     43                                        jump = [
     44                                            action      : 'edit',
     45                                                id              : params.get('id')
     46                                        ]
     47                                        break
     48                                default:
     49                                        break
     50                        }
     51                }
     52
     53                // store in session
     54                session.jump = jump
     55
    3056                /**
    3157                 * Do you believe it in your head?
     
    5985                                [title: 'Done']                                 // finish page
    6086                        ]
     87                        flow.jump = session.jump
    6188                        success()
    6289                }
     
    7299                                success()
    73100                        }
    74                         on("next").to "start"
     101                        on("next").to "handleJump"
     102                }
     103
     104                // handle the jump parameter
     105                //
     106                // I came to get down [2x]
     107                // So get out your seats and jump around
     108                // Jump around [3x]
     109                // Jump up Jump up and get down
     110                // Jump [18x]
     111                handleJump {
     112                        action {
     113                                if (flow.jump && flow.jump.action == 'edit' && flow.jump.id) {
     114                                        // load study
     115                                        if (this.loadStudy(flow, flash, [studyid:flow.jump.id])) {
     116                                                toStudyPage()
     117                                        } else {
     118                                                toStartPage()
     119                                        }
     120                                } else if (flow.jump && flow.jump.action == 'create') {
     121                                        toStudyPage()
     122                                } else {
     123                                        toStartPage()
     124                                }
     125                        }
     126                        on("toStartPage").to "start"
     127                        on("toStudyPage").to "study"
    75128                }
    76129
     
    91144                                flow.remove('eventGroups')
    92145                                flow.remove('eventTemplates')
     146                                println flow
    93147
    94148                                // set 'quicksave' variable
     
    123177                        on("next") {
    124178                                // load study
    125                                 try {
    126                                         // load study
    127                                         flow.study = Study.findByTitle(params.study)
    128 
    129                                         // recreate subjects
    130                                         flow.subjects = [:]
    131                                         flow.subjectTemplates = [:]
    132                                         flow.study.subjects.each() { subject ->
    133                                                 def subjectIncrement = flow.subjects.size()
    134                                                 flow.subjects[ subjectIncrement ] = subject
    135 
    136                                                 // add subject template?
    137                                                 if (!flow.subjectTemplates[ subject.template.name ]) {
    138                                                         flow.subjectTemplates[ subject.template.name ] = [
    139                                                                 name: subject.template.name,
    140                                                                 template: subject.template,
    141                                                                 subjects: [:]
    142                                                         ]
    143                                                 }
    144 
    145                                                 // reference subject in template
    146                                                 flow.subjectTemplates[ subject.template.name ].subjects[ flow.subjectTemplates[ subject.template.name ].subjects.size() ] = subjectIncrement
    147                                         }
    148 
    149                                         // recreate events
    150                                         flow.events = []
    151                                         flow.eventGroups = []
    152                                         flow.eventTemplates     = [:]
    153                                         flow.study.events.each() { event ->
    154                                                 def eventIncrement = flow.events.size()
    155                                                 flow.events[ eventIncrement ] = event
    156 
    157                                                 // add event template?
    158                                                 if (!flow.eventTemplates[ event.template.name ]) {
    159                                                         flow.eventTemplates[ event.template.name ] = [
    160                                                                 name: event.template.name,
    161                                                                 template: event.template,
    162                                                                 events: new ArrayList()
    163                                                         ]
    164                                                 }
    165 
    166                                                 // reference event in template
    167                                                 flow.eventTemplates[ event.template.name ].events[ flow.eventTemplates[ event.template.name ].events.size() ] = eventIncrement
    168 
    169                                                 // set dummy event
    170                                                 flow.event = event
    171                                         }
    172 
    173                                         // recreate sample events
    174                                         flow.study.samplingEvents.each() { event ->
    175                                                 def eventIncrement = flow.events.size()
    176                                                 flow.events[ eventIncrement ] = event
    177 
    178                                                 // add event template?
    179                                                 if (!flow.eventTemplates[ event.template.name ]) {
    180                                                         flow.eventTemplates[ event.template.name ] = [
    181                                                                 name: event.template.name,
    182                                                                 template: event.template,
    183                                                                 events: new ArrayList()
    184                                                         ]
    185                                                 }
    186 
    187                                                 // reference event in template
    188                                                 flow.eventTemplates[ event.template.name ].events[ flow.eventTemplates[ event.template.name ].events.size() ] = eventIncrement
    189 
    190                                                 // set dummy event
    191                                                 flow.event = event
    192                                         }
    193 
    194                                         // recreate eventGroups
    195                                         flow.study.eventGroups.each() { eventGroup ->
    196                                                 flow.eventGroups[ flow.eventGroups.size() ] = eventGroup
    197                                         }
    198 
    199                                         // set 'quicksave' variable
    200                                         flow.quickSave = true
    201 
     179                                if (this.loadStudy(flow, flash, params)) {
    202180                                        success()
    203                                 } catch (Exception e) {
    204                                         // rollback
    205                                         this.appendErrorMap(['exception': e.toString() + ', see log for stacktrace' ], flash.errors)
    206 
     181                                } else {
    207182                                        error()
    208183                                }
     
    784759                                flow.page = 8
    785760                        }
     761                        onEnd {
     762                                // clean flow scope
     763                                flow.clear()
     764                        }
     765                }
     766        }
     767
     768        /**
     769         * load a study
     770         * @param Map LocalAttributeMap (the flow scope)
     771         * @param Map localAttributeMap (the flash scope)
     772         * @param Map GrailsParameterMap (the flow parameters = form data)
     773         * @returns boolean
     774         */
     775        def loadStudy(flow, flash, params) {
     776                // load study
     777                try {
     778                        // load study
     779                        flow.study = (params.studyid) ? Study.findById( params.studyid ) : Study.findByTitle( params.study )
     780
     781                        // recreate subjects
     782                        flow.subjects = [:]
     783                        flow.subjectTemplates = [:]
     784                        flow.study.subjects.each() { subject ->
     785                                def subjectIncrement = flow.subjects.size()
     786                                flow.subjects[subjectIncrement] = subject
     787
     788                                // add subject template?
     789                                if (!flow.subjectTemplates[subject.template.name]) {
     790                                        flow.subjectTemplates[subject.template.name] = [
     791                                                name: subject.template.name,
     792                                                template: subject.template,
     793                                                subjects: [:]
     794                                        ]
     795                                }
     796
     797                                // reference subject in template
     798                                flow.subjectTemplates[subject.template.name].subjects[flow.subjectTemplates[subject.template.name].subjects.size()] = subjectIncrement
     799                        }
     800
     801                        // recreate events
     802                        flow.events = []
     803                        flow.eventGroups = []
     804                        flow.eventTemplates = [:]
     805                        flow.study.events.each() { event ->
     806                                def eventIncrement = flow.events.size()
     807                                flow.events[eventIncrement] = event
     808
     809                                // add event template?
     810                                if (!flow.eventTemplates[event.template.name]) {
     811                                        flow.eventTemplates[event.template.name] = [
     812                                                name: event.template.name,
     813                                                template: event.template,
     814                                                events: new ArrayList()
     815                                        ]
     816                                }
     817
     818                                // reference event in template
     819                                flow.eventTemplates[event.template.name].events[flow.eventTemplates[event.template.name].events.size()] = eventIncrement
     820
     821                                // set dummy event
     822                                flow.event = event
     823                        }
     824
     825                        // recreate sample events
     826                        flow.study.samplingEvents.each() { event ->
     827                                def eventIncrement = flow.events.size()
     828                                flow.events[eventIncrement] = event
     829
     830                                // add event template?
     831                                if (!flow.eventTemplates[event.template.name]) {
     832                                        flow.eventTemplates[event.template.name] = [
     833                                                name: event.template.name,
     834                                                template: event.template,
     835                                                events: new ArrayList()
     836                                        ]
     837                                }
     838
     839                                // reference event in template
     840                                flow.eventTemplates[event.template.name].events[flow.eventTemplates[event.template.name].events.size()] = eventIncrement
     841
     842                                // set dummy event
     843                                flow.event = event
     844                        }
     845
     846                        // recreate eventGroups
     847                        flow.study.eventGroups.each() { eventGroup ->
     848                                flow.eventGroups[flow.eventGroups.size()] = eventGroup
     849                        }
     850
     851                        // set 'quicksave' variable
     852                        flow.quickSave = true
     853
     854                        return true
     855                } catch (Exception e) {
     856                        // rollback
     857                        this.appendErrorMap(['exception': e.toString() + ', see log for stacktrace'], flash.errors)
     858
     859                        return false
    786860                }
    787861        }
  • trunk/grails-app/views/study/show.gsp

    r572 r578  
    841841          <g:set var="studyInstance" value="${studyList[0]}" />
    842842          <g:hiddenField name="id" value="${studyInstance?.id}" />
    843           <span class="button"><g:actionSubmit class="edit" action="edit" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /></span>
     843          <span class="button"><g:link class="edit" controller="wizard" params="[jump:'edit']" id="${studyInstance?.id}">${message(code: 'default.button.edit.label', default: 'Edit')}</g:link></span>
    844844          <span class="button"><g:actionSubmit class="delete" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');" /></span>
    845845        </g:if>
  • trunk/grails-app/views/wizard/pages/_done.gsp

    r359 r578  
    1818
    1919        <span class="info">
    20                 <span class="todo">Finished!</span>
    21                 The study you have just created has been properly saved.
     20                <span class="todo">Done!</span>
     21                <g:if test="${quickSave}">
     22                        Your modifications you have made to this study have been saved.
     23                </g:if>
     24                <g:else>
     25                        The study you just created has been saved.
     26                </g:else>
     27
     28                You can now <g:link controller="study" action="show" id="${study.id}">view the study</g:link>,
     29                <g:link controller="wizard" params="[jump:'edit']" id="${study.id}">edit the study</g:link>
     30                <g:if test="${quickSave}"> again</g:if> or
     31                <g:link controller="wizard" params="[jump:'create']">create a new study</g:link>.
     32
    2233        </span>
    2334
Note: See TracChangeset for help on using the changeset viewer.