GLOBE Projects

GLOBE Side Navigation

An error occurred while processing the template.
The following has evaluated to null or missing:
==> project_badges  [in template "10132#10165#GLOBE-PROJECT-TEMPLATE" at line 99, column 7]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if (project_badges.getChildren()?has...  [in template "10132#10165#GLOBE-PROJECT-TEMPLATE" at line 99, column 1]
----
1<#assign 
2    orgArray = [] 
3    userArray = [] 
4    badgeArray = [] 
5    languageArray = [] 
6    protocolArray = [] 
7    reportTypesArray = [] 
8    orgLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService") 
9    userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService") 
10    groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") 
11    userGroupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserGroupLocalService") 
12    idLocalService = serviceLocator.findService("gov.globe.util.idlookup.service.IDLookupLocalService") 
13    assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") 
14    globeMemberId = idLocalService.getId("globe.usergroupid.globe_members") 
15    candidateId = idLocalService.getId("globe.usergroupid.candidates") 
16    studentsId = idLocalService.getId("globe.usergroupid.students") 
17    projectDate = getterUtil.getString(project_date.getData()) 
18    reportType = "" 
19    accountType = "" 
20    videoLink = "" 
21    presentationLink = "" 
22/> 
23 
24<#if (project_authororganization.getSiblings()?has_content)> 
25    <#list project_authororganization.getSiblings() as authOrg > 
26        <#assign 
27            accountTypeArr = stringUtil.split(authOrg.getData(), "@@@") 
28            dataArray = stringUtil.split(accountTypeArr[0], "$$$") 
29        /> 
30        <#if (accountTypeArr?size > 1)> 
31            <#assign 
32                accountType = accountTypeArr[1] 
33            /> 
34        <#else> 
35            <#assign 
36                accountType = "regular" 
37            /> 
38        </#if> 
39         
40        <#if (dataArray?has_content && dataArray?size > 0) > 
41            <#assign orgValue = dataArray[0] /> 
42            <#if (orgValue?is_string && !orgValue?eval?is_number)> 
43                <#assign org = orgLocalService.getOrganization(company.getCompanyId(), orgValue) /> 
44            <#else> 
45                <#assign org = orgLocalService.getOrganization(orgValue?eval) /> 
46            </#if> 
47            <#assign 
48                orgName = org.getName() 
49                group = org.getGroup() 
50                orgURL = group.getFriendlyURL() 
51                orgLink = "<a href='/web${orgURL}'>${orgName}</a>" 
52                orgArray = orgArray + [orgLink] 
53            /> 
54            <#if (dataArray?size > 1) > 
55                <#assign 
56                    userData = dataArray[1] 
57                /> 
58                 
59                <#-- check if name has an email --> 
60                <#if (userData?contains("("))> 
61                    <#assign 
62                        emailAddress = stringUtil.extractLast(userData, "(") 
63                        emailAddress = stringUtil.extractFirst(emailAddress, ")") 
64                        user = userLocalService.getUserByEmailAddress(company.getCompanyId(), emailAddress) 
65                    /> 
66                    <#if user.isActive() > 
67                        <#if (userGroupLocalService.hasUserUserGroup(user.getUserId(), globeMemberId) 
68                                || userGroupLocalService.hasUserUserGroup(user.getUserId(), candidateId) 
69                                || userGroupLocalService.hasUserUserGroup(user.getUserId(), studentsId)) > 
70                            <#assign 
71                                groupUser = groupLocalService.getGroup(user.getGroup().getGroupId()) 
72                                userLink = "<a href='/web${groupUser.getFriendlyURL()}'>${user.getFullName()}</a>" 
73                            /> 
74                        <#else> 
75                            <#assign 
76                                userLink = "${user.getFullName()}" 
77                            /> 
78                        </#if> 
79                    <#else> 
80                        <#assign 
81                            userLink = "${user.getFullName()} (inactive)" 
82                        /> 
83                    </#if> 
84                    <#assign 
85                        userArray = userArray + [userLink] 
86                    /> 
87                 
88                <#else> 
89                    <#-- no email - just show name --> 
90                    <#assign 
91                        userArray = userArray + [userData] 
92                    /> 
93                </#if> 
94                 
95            </#if> 
96        </#if> 
97    </#list> 
98</#if> 
99<#if (project_badges.getChildren()?has_content)> 
100    <#list project_badges.getChildren() as badge > 
101        <#if (badge.getData()?has_content && badge.getData()?eval) > 
102            <#assign badgeArray = badgeArray + [languageUtil.get(locale, badge.getName())] /> 
103        </#if> 
104    </#list> 
105</#if> 
106<#if (project_report_type_2?has_content) > 
107    <#-- this is the NEW way of specifying report types --> 
108    <#list project_report_type_2.getChildren() as reportTypeObj > 
109        <#if (reportTypeObj.getData()?has_content && (reportTypeObj.getName() == "ivss_report" || reportTypeObj.getName() == "mission_earth_report")) > 
110            <#assign reportType = reportTypeObj.getName() /> 
111        </#if> 
112        <#if (reportTypeObj.getData()?has_content && reportTypeObj.getData()?eval) > 
113            <#switch reportTypeObj.getName() > 
114                <#case "ivss_report"> 
115                    <#assign reportTypesArray = reportTypesArray + ["International Virtual Science Symposium Report"] /> 
116                <#break > 
117                <#case "standard_research_report"> 
118                    <#assign reportTypesArray = reportTypesArray + ["Standard Research Report"] /> 
119                <#break > 
120                <#case "mission_earth_report"> 
121                    <#assign reportTypesArray = reportTypesArray + ["Mission Earth Report"] /> 
122                <#break > 
123                <#case "mission_mosquito_report"> 
124                    <#assign reportTypesArray = reportTypesArray + ["Mission Mosquito Report"] /> 
125                <#break > 
126                <#case "student_research_symposia_report"> 
127                    <#assign reportTypesArray = reportTypesArray + ["U.S. Student Research Symposia (SRS)"] /> 
128                <#break > 
129            </#switch> 
130        </#if> 
131    </#list> 
132<#elseif (type_student_report?has_content) > 
133    <#-- this is the OLD way of specifying the report type --> 
134    <#assign 
135        project_report_type = type_student_report.getChild("project_report_type") 
136    /> 
137    <#if (project_report_type.getData() == "science_fair_report") > 
138        <#assign  
139            reportType = "ivss_report" 
140            reportTypesArray = reportTypesArray + ["International Virtual Science Symposium Report"] 
141        /> 
142    <#elseif (project_report_type.getData() == "standard_report") > 
143        <#assign 
144            reportType = "standard_research_report" 
145            reportTypesArray = reportTypesArray + ["Standard Research Report"] 
146        /> 
147    <#elseif (project_report_type.getData() == "mission_earth_report") > 
148        <#assign 
149            reportType = "mission_earth_report" 
150            reportTypesArray = reportTypesArray + ["Mission Earth Report"] 
151        /> 
152    </#if> 
153</#if> 
154 
155<#if report_language?has_content > 
156    <#list report_language.getChildren() as language> 
157        <#if (language.getData()?has_content && language.getData()?eval) > 
158            <#if (language.getName() == "other") > 
159                <#assign otherLanguage = language.getChild("other_string") /> 
160                <#if (otherLanguage.getData()?has_content) > 
161                    <#assign languageArray = languageArray +  
162                        [stringUtil.upperCaseFirstLetter(language.getName()) +  
163                            " (" + otherLanguage.getData() + ")"] /> 
164                </#if> 
165            <#else> 
166                <#assign languageArray = languageArray + [stringUtil.upperCaseFirstLetter(language.getName())] /> 
167            </#if> 
168        </#if> 
169    </#list> 
170</#if> 
171<#if protocol_checkboxes.getData()?has_content > 
172    <#assign protocolIds = stringUtil.split(protocol_checkboxes.getData()) /> 
173    <#list protocolIds as protocolId > 
174        <#if (protocolId?has_content) > 
175            <#assign 
176                category = assetCategoryLocalService.getCategory(protocolId?eval) 
177                protocolArray = protocolArray + [category.getName()] 
178            /> 
179        </#if> 
180    </#list> 
181</#if> 
182 
183<#if (proejct_video_url??) > 
184    <#if (proejct_video_url.getData()?has_content) > 
185        <#assign videoLink = proejct_video_url.getData() /> 
186    </#if> 
187</#if> 
188 
189<#if (project_poster_presentation??) > 
190    <#if (project_poster_presentation.getData()?has_content) > 
191        <#assign presentationLink = project_poster_presentation.getData() /> 
192    </#if> 
193</#if> 
194 
195<#if (project_presentation?has_content) > 
196    <#if project_presentation.getChild("proejct_video_url")??> 
197        <#assign  
198            proejct_video_url = project_presentation.getChild("proejct_video_url") 
199            videoLink = proejct_video_url.getData() 
200        /> 
201    </#if> 
202    <#if project_presentation.getChild("project_poster_presentation")??> 
203        <#assign  
204            project_poster_presentation = project_presentation.getChild("project_poster_presentation") 
205            presentationLink = project_poster_presentation.getData() 
206        /> 
207    </#if> 
208</#if> 
209 
210<#assign 
211    organizations = stringUtil.merge(orgArray, ", ") 
212    users = stringUtil.merge(userArray, ", ") 
213    badges = stringUtil.merge(badgeArray, ", ") 
214    languages = stringUtil.merge(languageArray, ", ") 
215    reportTypes = stringUtil.merge(reportTypesArray, ", ") 
216    protocols = stringUtil.merge(protocolArray, ", ") 
217    projectImageUrl = project_thumbnail_image.getData() 
218/> 
219<#if (validator.isNull(projectImageUrl) || projectImageUrl == "") > 
220    <#assign 
221        projectImageUrl = "/o/gov-globe-main-theme/images/GLOBElogo-2015.png" 
222    /> 
223</#if> 
224 
225<style type="text/css" > 
226    #report-container #report-details-container { 
227        display: flex; 
228
229    #report-container #report-details-container #report-details { 
230        flex: 1; 
231
232    #report-container #report-details-container .report-data-row { 
233        padding-bottom: 7px; 
234
235    #report-container #report-details-container .report-data-row .report-data-title { 
236        font-weight: 700; 
237
238    #report-container #report-details-container .report-data-row .report-data-value { 
239        padding:0px 10px; 
240
241    #report-container #report-image { 
242        width: 225px; 
243        vertical-align: top; 
244
245    #report-container #report-image img { 
246        height: 200px; 
247        object-fit: cover; 
248
249    #report-container #report-url-description { 
250        margin: 20px 0 0; 
251
252    #report-container #report-url-description #report-description { 
253        margin-top: 20px; 
254
255</style> 
256 
257<div id="report-container"> 
258    <h2 style="padding-bottom:10px;">${project_title.getData()}</h2> 
259    <div id="report-details-container"> 
260        <div id="report-details"> 
261            <div class="report-data-row" ><span class="report-data-title" >Organization(s):</span><span class="report-data-value" >${organizations}</span></div> 
262            <div class="report-data-row" ><span class="report-data-title" >Student(s):</span><span class="report-data-value" >${project_authors.getData()}</span></div> 
263            <div class="report-data-row" ><span class="report-data-title" >Grade Level:</span><span class="report-data-value" >${languageUtil.get(locale,project_grade.getData())}</span></div> 
264             
265            <div class="report-data-row" ><span class="report-data-title" > 
266            <#if (accountType == 'obs_cs' || accountType == 'obs_school')> 
267                Teacher:</span><span class="report-data-value">${users}</span></div> 
268            <#else> 
269                GLOBE Teacher:</span><span class="report-data-value">${users}</span></div> 
270            </#if> 
271 
272            <div class="report-data-row" ><span class="report-data-title" >Contributors:</span><span class="report-data-value" >${project_additional_authors.getData()}</span></div> 
273            <div class="report-data-row" ><span class="report-data-title" >Report Type(s):</span><span class="report-data-value" >${reportTypes}</span></div> 
274            <div class="report-data-row" ><span class="report-data-title" >Protocols:</span><span class="report-data-value" >${protocols}</span></div> 
275 
276            <#if (reportType == "ivss_report" || reportType == "mission_earth_report") > 
277                <#if (videoLink?has_content && videoLink?length > 0) > 
278                    <#if (!stringUtil.startsWith(videoLink, "http://") && !stringUtil.startsWith(videoLink, "https://")) > 
279                        <#assign videoLink = "http://" + videoLink /> 
280                    </#if> 
281                    <div class="report-data-row"> 
282                        <span class="report-data-title">Presentation Video:</span><span  
283                                class="report-data-value" > 
284                            <a href="${videoLink}" target="_blank">View Video</a> 
285                        </span> 
286                    </div> 
287                </#if> 
288 
289 
290 
291                <#if (presentationLink?has_content && presentationLink?length > 0) > 
292                    <div class="report-data-row"> 
293                        <span class="report-data-title">Presentation Poster:</span><span  
294                                class="report-data-value"> 
295                            <a href="${presentationLink}" target="_blank">View Document</a> 
296                        </span> 
297                    </div> 
298                </#if> 
299            </#if> 
300            <#if (reportType == "ivss_report") > 
301                <div class="report-data-row"> 
302                    <span class="report-data-title">Optional Badges:</span><span  
303                            class="report-data-value" >${badges}</span> 
304                </div> 
305            </#if> 
306            <div class="report-data-row" > 
307                <span class="report-data-title" >Language(s):</span><span  
308                        class="report-data-value" >${languages}</span> 
309            </div> 
310            <div class="report-data-row" > 
311                <span class="report-data-title" >Date Submitted:</span><span  
312                        class="report-data-value" >${projectDate}</span> 
313            </div> 
314        </div> 
315        <div id="report-image" > 
316            <img src="${projectImageUrl}" alt="${project_thumbnail_alt_tag.getData()}"> 
317        </div> 
318    </div> 
319    <div id="report-url-description"> 
320        <#if (project_linkto_document.getData() != "")> 
321            <div > 
322                <a href="${project_linkto_document.getData()}" target="_blank"><b>View Research Report</b></a><br> 
323            </div> 
324        </#if> 
325        <div id="report-description"> 
326            ${project_description.getData()} 
327        </div> 
328    </div> 
329</div> 



Comments

My students would like to know how you collected the macros. Did you use a kick net or leaf packs? Do you think there is a difference in the methods?
Great project!
Thanks.
Interesting project, Surry Village Charter School! What was most surprising to you about your results?
Knowing what you know now, how could you continue your research? Did this project inspire another research project?

If you could do your project over again, what would you do differently?
You criticized the GLOBE specified instrumentation for giving limited values, but you show DO values that are two or three significant figures. This says the measurements are quite precise. Can you explain your comment? Also, you praise the pH kit as giving whole values of pH and report a value of 6.7 in your report. What were you trying to say?
You all did so much work. I hope you will report your data to GLOBE. You referred to leaf packs in the river. How were they used in the macroinvertebrate investigation? Also, your graphs of the data you obtained from other sources were very good and it is great that you identified these sources of information relevant to your project.