root/trunk/grails-app/views/study/show.gsp @ 1244

Revision 1244, 7.8 KB (checked in by work@…, 3 years ago)

- as description is a template field and hence may not exist in a study template, the view is now checking if the field exists or not, and sets a default description if it doesn't
- the like button on the study show page will only show if the study is published

  • Property svn:keywords set to Author Date Rev
Line 
1<%@ page import="dbnp.studycapturing.Study" %>
2<%@ page import="dbnp.studycapturing.EventGroup" %>
3<%@ page import="dbnp.studycapturing.RelTime" %>
4<html>
5<head>
6        <meta name="layout" content="main"/>
7        <g:if test="${studyList.size()}">
8        <meta property="og:title" content="${studyList[0].title}"/>
9        <g:if test="${studyList[0].getField('description')}">
10        <meta property="og:description" content="${(studyList[0].getFieldValue('Description')) ? studyList[0].getFieldValue('Description') : 'A study in the Generic Study Capture Framework'}"/>
11        </g:if><g:else>
12        <meta property="og:description" content="A study in the Generic Study Capture Framework"/>
13        </g:else>
14        </g:if>
15        <g:set var="entityName" value="${message(code: 'study.label', default: 'Study')}"/>
16        <title><g:message code="default.show.label" args="[entityName]"/></title>
17        <script type="text/javascript">
18                // Number of timelines that should be loaded
19                var numTimelines = ${studyList?.size()};
20
21                // This method is called on the event body.onLoad
22                $(function() {
23                        $("#tabs").tabs({
24                                load: function(event, ui) {
25                                        // If the events tab is shown, the timeline should be redrawn
26                                        if (ui.tab.hash == '#Events_timeline') {
27                                                loadTimeline('eventstimeline', 'eventtitles', 0);
28                                        }
29                                },
30                                ajaxOptions: {
31                                        error: function(xhr, status, index, anchor) {
32                                                $(anchor.hash).html(
33                                                        "Couldn't load this tab. We'll try to fix this as soon as possible.");
34                                        }
35                                }
36                        });
37                });
38
39                // Parameters for the SIMILE timeline
40                Timeline_ajax_url = "${resource(dir: 'js', file: 'timeline-simile/timeline_ajax/simile-ajax-api.js')}";
41                Timeline_urlPrefix = '${resource(dir: 'js', file: 'timeline-simile/')}';
42                Timeline_parameters = 'bundle=true';
43
44        </script>
45        <link rel="stylesheet" type="text/css" href="${resource(dir: 'css', file: 'studies.css')}"/>
46
47        <!-- Include scripts for the SIMILE timeline. See http://simile-widgets.org/wiki/ -->
48        <script src="${resource(dir: 'js', file: 'timeline-simile/timeline-api.js')}" type="text/javascript"></script>
49        <script src="${resource(dir: 'js', file: 'timeline-simile/custom-timeline.js')}" type="text/javascript"></script>
50        <script src="${resource(dir: 'js', file: 'timeline-simile/relative-time.js')}" type="text/javascript"></script>
51        <script src="${resource(dir: 'js', file: 'jquery-callback-1.2.js')}" type="text/javascript"></script>
52
53        <!-- Create the JSON objects for the timeline with events -->
54        <script type="text/javascript" src="<g:createLink action="createTimelineBandsJs" id="${studyList.id.join(',')}"/>" type="text/javascript"></script>
55</head>
56<body>
57
58<div class="body" id="studies">
59        <h1><g:message code="default.show.label" args="[entityName]"/></h1>
60        <g:if test="${flash.message}">
61                <div class="message">${flash.message}</div>
62        </g:if>
63        <div class="dialog">
64                <div id="tabs">
65                        <ul>
66                                <li><a href="#study">Study Information</a></li>
67                                <li><a href="<g:createLink action="show_subjects" id="${studyList.id.join(',')}"/>" title="Subjects"><span>Subjects</span></a></li>
68                                <li><a href="<g:createLink action="show_events_timeline" id="${studyList.id.join(',')}"/>" title="Events timeline"><span>Events timeline</span></a></li>
69                                <li><a href="<g:createLink action="show_events_table" id="${studyList.id.join(',')}"/>" title="Events table"><span>Events table</span></a></li>
70                                <li><a href="<g:createLink action="show_assays" id="${studyList.id.join(',')}"/>" title="Assays"><span>Assays</span></a></li>
71                                <li><a href="<g:createLink action="show_samples" id="${studyList.id.join(',')}"/>" title="Samples"><span>Samples</span></a></li>
72                                <li><a href="<g:createLink action="show_persons" id="${studyList.id.join(',')}"/>" title="Persons"><span>Persons</span></a></li>
73                                <li><a href="<g:createLink action="show_publications" id="${studyList.id.join(',')}"/>" title="Publications"><span>Publications</span></a></li>
74                        </ul>
75
76                        <div id="study">
77                                <table>
78                                <!-- only show the head section if there are multiple studies -->
79                                        <g:if test="${multipleStudies}">
80                                                <thead>
81                                                <tr>
82                                                        <th></th>
83                                                        <g:each in="${studyList}" var="studyInstance">
84                                                                <th>${studyInstance.title}</th>
85                                                        </g:each>
86                                                </tr>
87                                                </thead>
88                                        </g:if>
89                                        <%
90                                                // Determine a union of the fields from all studies, in order
91                                                // to show a proper list. We want every field to appear just once,
92                                                // so the list is filtered for unique values
93                                                studyFields = studyList[0].giveDomainFields() + studyList*.giveTemplateFields()?.flatten().unique()
94                                        %>
95                                <!-- Show all template and domain fields, if filled -->
96                                        <g:each in="${studyFields}" var="field">
97                                                <g:if test="${field.isFilledInList( studyList )}">
98                                                        <tr>
99                                                                <td>${field}</td>
100                                                                <g:each in="${studyList}" var="studyInstance">
101                                                                        <td>
102                                                                                <g:if test="${studyInstance.fieldExists(field.name)}">
103                                                                                        <wizard:showTemplateField field="${field}" entity="${studyInstance}"/>
104                                                                                </g:if>
105                                                                                <g:else>
106                                                                                        -
107                                                                                </g:else>
108                                                                        </td>
109                                                                </g:each>
110                                                        </tr>
111                                                </g:if>
112                                        </g:each>
113
114                                <!-- Add some extra fields -->
115                                        <tr>
116                                                <td>Events</td>
117                                                <g:each in="${studyList}" var="studyInstance">
118                                                        <td>
119                                                                <g:if test="${studyInstance.giveEventTemplates()?.size()==0}">
120                                                                        -
121                                                                </g:if>
122                                                                <g:else>
123                                                                        ${studyInstance.giveEventTemplates().name.join(", ")}
124                                                                </g:else>
125                                                        </td>
126                                                </g:each>
127                                        </tr>
128                                        <tr>
129                                                <td>Sampling events</td>
130                                                <g:each in="${studyList}" var="studyInstance">
131                                                        <td>
132                                                                <g:if test="${studyInstance.giveSamplingEventTemplates()?.size()==0}">
133                                                                        -
134                                                                </g:if>
135                                                                <g:else>
136                                                                        ${studyInstance.giveSamplingEventTemplates().name.join(", ")}
137                                                                </g:else>
138                                                        </td>
139                                                </g:each>
140                                        </tr>
141                                        <tr>
142                                                <td>Public</td>
143                                                <g:each in="${studyList}" var="studyInstance">
144                                                        <td>
145                                                                ${studyInstance.publicstudy}
146                                                        </td>
147                                                </g:each>
148                                        </tr>
149                                        <tr>
150                                                <td>Owner</td>
151                                                <g:each in="${studyList}" var="studyInstance">
152                                                        <td>
153                                                                ${studyInstance.owner?.username}
154                                                        </td>
155                                                </g:each>
156                                        </tr>
157                                        <tr>
158                                                <td>Readers</td>
159                                                <g:each in="${studyList}" var="studyInstance">
160                                                        <td>
161                                                                <g:if test="${studyInstance.readers.size() == 0}">
162                                                                        -
163                                                                </g:if>
164                                                                <g:else>
165                                                                        ${studyInstance.readers.username.join(", ")}
166                                                                </g:else>
167                                                        </td>
168                                                </g:each>
169                                        </tr>
170                                        <tr>
171                                                <td>Writers</td>
172                                                <g:each in="${studyList}" var="studyInstance">
173                                                        <td>
174                                                                <g:if test="${studyInstance.writers?.size()==0}">
175                                                                        -
176                                                                </g:if>
177                                                                <g:else>
178                                                                        ${studyInstance.writers.username.join(", ")}
179                                                                </g:else>
180                                                        </td>
181                                                </g:each>
182                                        </tr>
183                                </table>
184                        </div>
185
186                        <% /*
187                  All other tabs are moved to separate views and are loaded using
188                  ajax calls when a tab is opened. See http://jqueryui.com/demos/tabs/#ajax
189                */ %>
190
191                </div>
192        </div>
193        <br>
194        <div class="buttons">
195                <g:form action="delete">
196                        <g:if test="${studyList?.size() == 1}">
197                                <g:set var="studyInstance" value="${studyList[0]}"/>
198                                <g:hiddenField name="id" value="${studyInstance?.id}"/>
199                                <g:if test="${studyInstance.canWrite(loggedInUser)}">
200                                        <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>
201                                </g:if>
202                                <g:if test="${studyInstance.isOwner(loggedInUser)}">
203                                        <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>
204                                </g:if>
205                        </g:if>
206                        <span class="button"><g:link class="backToList" action="list">Back to list</g:link></span>
207                </g:form>
208        </div>
209</div>
210</body>
211</html>
Note: See TracBrowser for help on using the browser.