There was a problem with a Velocity script
Page/httpd/prestosports/site-public/WEB-INF/themes/generic/bio-career-template
ErrorInvocation of method 'getOverall' in class com.prestosports.content.sport.stats.StatsSplitter threw exception java.lang.NullPointerException at /httpd/prestosports/site-public/WEB-INF/themes/generic/bio-career-template[line 53, column 24]
Page source:
1: ## MOBILE CHECK
2: #if ($browser.getIphone() || $browser.getMobile())
3: 	#set ($isMobile = true)
4: #else
5: 	#set ($isMobile = false)
6: #end
7: 
8: #set ($mobileNS = 'mobile-stats-')
9: #set ($mobileNSP = "#${mobileNS}")
10: 
11: ## PICK UP OPTIONS
12: $website.include("options")
13: #set ($options = $request.getAttribute("options"))
14: #set ($locale = "en_us")
15: #set ($locale = $options.get("locale"))
16: #set ($showCareer = $wiki.valid() && $seasons)
17: #if ("yes" == $options.get("stats_show_career") && $seasons)
18:   #set ($showCareer = "yes")
19: #end
20: 
21: #if ($locale == "en_us")
22:   #set ($defLabel = "Defense")
23: #elseif ($locale == "en_gb")
24:   #set ($defLabel = "Defence")
25: #end
26: 
27: #set ($pos = "")
28: #if($attributes.get("position_stat"))
29:     #set ($pos = $attributes.get("position_stat"))
30: #else
31:     #set ($pos = $attributes.get("position"))
32:     #set ($pos = $statPosition)
33:     #set ($posVec = $pos.split("/"))
34:     #set ($pos = $posVec[0])
35: #end
36: #set ($pos = $pos.toLowerCase())
37: #set ($pos = $positions.get($pos))
38: 
39: #set ($highlights = $highlights.get($pos))
40: #if ($request.getParameter("pos"))
41:   #set ($pos = $request.getParameter("pos"))
42:   #set ($pos = $pos.toLowerCase())
43:   #set ($pos = $positions.get($pos))
44: #end
45: #set ($labels = $labels.get($pos))
46: #set ($briefs = $briefs.get($pos))
47: #set ($gamelogs = $gamelogs.get($pos))
48: #set ($view = $!request.getParameter("view"))
49: #set ($url = ${page.url})
50: 
51: #set ($playerId = $attributes.get("playerId"))
52: 
53: #set ($stats = $splits.overall)
54: 
55: ## CAREER STATS WILL PRINT LIKE THIS
56: #macro (splitBioCareer $label $stats $class)
57:     #set ($url = "${page.url}?view=career")
58:     #if ($request.getParameter("pos"))
59:       #set ($escPos = $request.getParameter("pos"))
60:       #set ($escPos = $tool.esc.url($escPos))
61:       #set ($url = "${url}&pos=$escPos")
62:     #end
63:     <tr class="$!{class}">
64:     <td class="${mobileNS}fixed-column"><a href="${url}">${label}</a></td>
65:     #foreach ($brief in $briefs.keySet())
66:       #set ($value = "-")
67:       #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
68:       <td align="center">
69:       #if ($value.length() > 0)$value#else - #end
70:       </td>
71:     #end
72:   </tr>
73: #end
74: 
75: #set ($name = $request.getParameter("name"))
76: $request.getAttribute("careerTotals").addGames($events)
77: $!request.getAttribute("careerMap").put($name, $stats)
78: 
79: #if ($request.getParameter("print") == 'yes')
80:   #splitBioCareer($name, $splits.overall, '')
81: #end

There was a problem with a Velocity script
Page/bio-template
ErrorInvocation of method 'getOverall' in class com.prestosports.content.sport.stats.StatsSplitter threw exception java.lang.NullPointerException at iefkv9mnat8cqv68/bio-template[line 49, column 24]
Page source:
1: <link rel="stylesheet" type="text/css" href="/info/photo-gallery.css">
2: <script src="/info/klass.min.js"></script>
3: <script src="/info/code.photoswipe.jquery-3.0.5.min.js"></script>
4: <script src="/info/masonry.pkgd.min.js"></script>
5: <script src="/info/imagesloaded.pkgd.min.js"></script>
6: <script src="/info/photogallery/photogallery.js"></script>
7: 
8: ## PICK UP OPTIONS
9: $website.include("options")
10: #set ($options = $request.getAttribute("options"))
11: #set ($locale = "en_us")
12: #set ($locale = $options.get("locale"))
13: 
14: ## HACK TO GET STATS URL FROM RENDERER... NEEDS SERVER CHANGE
15: #set ($bioObject = $page.getDataAsObject())
16: #set ($statsURL = $bioObject.statsURL)
17: 
18: #if ($statsURL.length() > 0)
19:   $website.includeAgain("${statsURL}?tmpl=bio-stats-template")
20:   ## various settings to get the variables set
21:   #set ($events = $request.getAttribute("bio_events"))
22:   #set ($seasons = $request.getAttribute("bio_seasons"))
23:   #set ($career = $request.getAttribute("bio_career"))
24:   #set ($labels = $request.getAttribute("bio_labels"))
25:   #set ($briefs = $request.getAttribute("bio_briefs"))
26:   #set ($gamelogs = $request.getAttribute("bio_gamelogs"))
27:   #set ($splits = $request.getAttribute("bio_splits"))
28:   #set ($statPosition = $request.getAttribute("bio_position"))
29:   #set ($positions = $request.getAttribute("bio_positions"))
30:   #set ($playerId = $request.getAttribute("bio_player_id"))
31:   #set ($highlights = $request.getAttribute("bio_highlights"))
32:   #set ($formats = $request.getAttribute("bio_formats"))
33:   #set ($gamelogsCategoriesLabels = $request.getAttribute("bio_gamelogs_labels"))
34:   #set ($briefsCategoriesLabels = $request.getAttribute("bio_briefs_labels"))
35:   #set ($gamesResults = $request.getAttribute("bio_games_results"))
36:   #set ($monthsPlayed = $request.getAttribute("bio_months_played"))
37: #end
38: 
39: #set ($pos = "")
40: #set ($pos = $attributes.get("position"))
41: #set ($pos = $statPosition)
42: #set ($posVec = $pos.split("/"))
43: #set ($pos = $posVec[0])
44: #set ($pos = $pos.toLowerCase())
45: #set ($statPos = $positions.get($pos))
46: #set ($paramPos = $request.getParameter("pos"))
47: 
48: #set ($playerId = $attributes.get("playerId"))
49: #set ($stats = $splits.overall)
50: #set ($highlights = $highlights.get($statPos))
51: 
52: #set ($showHighlights = true)
53: #if ($options.get("bio_show_highlights") && $options.get("bio_show_highlights") == false)
54: 	#set ($showHighlights = false)
55: #end
56: 
57: #set ($showCareer = $wiki.valid() && $seasons)
58: #if ("yes" == $options.get("stats_show_career") && $seasons)
59:   #set ($showCareer = true)
60: #end
61: 
62: #set ($hasEvents = $events.size() > 0)
63: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1)
64: 
65: 
66: 
67: ###########################################################################################
68: ## START OVERRIDE 
69: ## Always show bio even if it is empty, delete line below to reset normal behavior
70: #set ($hasSynopsis = true)
71: ## END OVERRIDE
72: ###########################################################################################
73: 
74: 
75: 
76: #set ($htmlStatsURL = "${page.url}-stats")
77: #set ($hasHTMLStats = $website.exists($htmlStatsURL))
78: #set ($bioBriefURL = "${page.url}-brief")
79: #set ($hasBioBrief = $website.exists("$bioBriefURL"))
80: #set ($showRoster = ($page.contentType == "loki/bio" && $page.headlinesFeatured.size() > 0) || ($page.contentType == "loki/bio-network" && $page.sectionPage.children.size() > 1))
81: #if ($options.get("bio_hide_roster") == true)
82:   #set ($showRoster = false)
83: #end
84: 
85: #set ($view = "")
86: #if ($hasSynopsis || $hasBioBrief)
87:   #set ($view = "bio")
88: #elseif ($statsURL.length() > 0)
89:   #set ($view = "profile")
90: #elseif ($hasHTMLStats)
91:   #set ($view = "htmlstats")
92: #elseif ($releases.size() > 0)
93:   #set ($view = "news")
94: #elseif ($photoGalleries.size() > 0)
95:   #set ($view = "photos")
96: #elseif ($videoGalleries.size() > 0)
97:   #set ($view = "videos")
98: #end
99: 
100: #if ($options.get("bio_default_view").length() > 0)
101:   #set ($checkView = $options.get("bio_default_view"))
102: #end
103: 
104: #if ($request.getParameter("view"))
105:   #set ($checkView = $request.getParameter("view"))
106: #end
107: 
108: #if ($checkView == "profile" && $statsURL.length() > 0)
109:   #set ($view = "profile")
110: #elseif ($checkView == "bio" && ($hasSynopsis || $hasBioBrief))
111:   #set ($view = "bio")
112: #elseif ($checkView == "gamelog" && $statsURL.length() > 0)
113:   #set ($view = "gamelog")
114: #elseif ($checkView == "career" && $showCareer)
115:   #set ($view = "career")
116: #elseif ($checkView == "splits" && $statsURL.length() > 0)
117:   #set ($view = "splits")
118: #elseif ($checkView == "htmlstats" && $hasHTMLStats)
119:   #set ($view = "htmlstats")
120: #elseif ($checkView == "news" && $releases.size() > 0)
121:   #set ($view = "news")
122: #elseif ($checkView == "photos" && $photoGalleries.size() > 0)
123:   #set ($view = "photos")
124: #elseif ($checkView == "videos" && $videoGalleries.size() > 0)
125:     #set ($view = "videos")
126: #end
127: 
128: #macro (gamelogData $p)
129: 
130: #set ($p = $positions.get($p))
131: #set ($gamelogs = $gamelogs.get($p))
132: 
133: #if ($hasEvents)
134: <div class="stats-box full clearfix">
135: <div class="scrollable">
136: <div>
137: <table>
138:   <tr class="thead">
139:     <th class="text">Date</th>
140:     <th class="pinned-col text">Opponent</th>
141:     <th>Score</th>
142:     #foreach ($gamelog in $gamelogs)
143:       <th>$gamelog</th>
144:     #end
145:   </tr>
146: #foreach ($event in $events)
147:   <tr>
148:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
149:     <td class="pinned-col text">
150:       #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end
151:       $event.event.opponent.name
152:     </td>
153:     <td>
154:     #if ($event.event.statusCode >= 0)
155:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
156:       <a href="../boxscores/${formatter.formatDate($event.event.date, "yyyyMMdd")}_${event.event.eventId.substring(0, 4)}.xml">${event.event.APResult}</a>
157:       #else
158:       ${event.event.APResult}
159:       #end
160:     #else &nbsp; #end
161:     </td>
162:     #foreach ($gamelog in $gamelogs.keySet())
163:       #set ($value = "-")
164:       #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog)))
165:       <td>$value</td>
166:     #end
167:   </tr>
168: #end
169: </table>
170: </div>
171: </div> ## scrollable
172: </div> ## stats-box
173: #end
174: 
175: #end ## macro gamelogData
176: 
177: #macro (split $statPosBriefs $label $stats)
178:   <tr>
179:     <td class="pinned-col text">${label}</td>
180:     #foreach ($brief in $statPosBriefs.keySet())
181:       #set ($value = "-")
182:       #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief)))
183:       <td>#if ($value.length() > 0) $value #else - #end</td>
184:     #end
185:   </tr>
186: #end
187: 
188: #macro (careerData $p)
189: #set ($p = $positions.get($p))
190: #set ($statPosBriefs = $briefs.get($p))
191: 
192: <div class="stats-box full clearfix">
193: <div class="scrollable">
194: <div>
195: <table>
196: <tr class="thead">
197:   <th class="pinned-col">&nbsp;</th>
198:   #foreach ($brief in $statPosBriefs)
199:     <th>$brief</th>
200:   #end
201: </tr>
202: 
203: #set ($careerTotals = $request.getAttribute("careerTotals"))
204: #set ($careerMap = $request.getAttribute("careerMap"))
205: 
206: #foreach ($season in $seasons)
207:   ## Check if we did not get stats for this season
208:   #if ($careerMap.get($season.seasonName))
209:     #split($statPosBriefs, $season.seasonName, $careerMap[$season.seasonName])
210:   #elseif ($wiki.valid())
211:     <tr>
212:       <td class="text">${season.seasonName}</td>
213:       <td colspan="${briefs.size()}">We could not find the "players" page in the ${season.seasonName} section.</td>
214:     </tr>
215:   #end
216: #end
217: 
218: #split($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall)
219: 
220: </table>
221: </div>
222: </div> ## scrollable
223: </div> ## stats-box
224: 
225: #end ## macro careerData
226: 
227: #macro (splitsData $p)
228: 
229: #set ($p = $positions.get($p))
230: #set ($statPosBriefs = $briefs.get($p))
231: #set ($colspan = $tool.math.add($statPosBriefs.size(), 1))
232: 
233: #if ($statPosBriefs.size() > 0)
234: <div class="stats-box full clearfix">
235: <div class="scrollable">
236: <div>
237: <table>
238:   <tr>
239:     <th class="pinned-col">&nbsp;</th>
240:     #foreach ($brief in $statPosBriefs)
241:       <th>$brief</th>
242:     #end
243:   </tr>
244: 
245: #split($statPosBriefs, "Total", $splits.overall)
246: #split($statPosBriefs, "Conference", $splits.conference)
247: #split($statPosBriefs, "Exhibition", $splits.exhibition)
248: 
249: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
250: 
251: #split($statPosBriefs, "Home", $splits.home)
252: #split($statPosBriefs, "Away", $splits.away)
253: #split($statPosBriefs, "Neutral", $splits.neutral)
254: 
255: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
256: 
257: #foreach($gameResult in $gamesResults.entrySet())
258:   #if ($gameResult.key == "wins")
259:     #set ($splitGameResult = $splits.inWins)
260:   #elseif ($gameResult.key == "losses")
261:     #set ($splitGameResult = $splits.inLosses)
262:   #elseif ($gameResult.key == "ties")
263:     #set ($splitGameResult = $splits.inTies)
264:   #end
265: 
266:   #split($statPosBriefs, $gameResult.value, $splitGameResult)
267: #end
268: 
269: <tr class="empty-row"><td colspan="$colspan"><div class="empty-cell">-</div></td></tr>
270: 
271: #if ($monthsPlayed and $monthsPlayed.size() > 0)
272:   #foreach($month in $monthsPlayed)
273:     #if ($month == 'January')
274:       #set ($splitMonth = $splits.january)
275:     #elseif ($month == 'February')
276:       #set ($splitMonth = $splits.february)
277:     #elseif ($month == 'March')
278:       #set($splitMonth = $splits.march)
279:     #elseif ($month == 'April')
280:       #set($splitMonth = $splits.april)
281:     #elseif ($month == 'May')
282:       #set ($splitMonth = $splits.may)
283:     #elseif ($month == 'June')
284:       #set ($splitMonth = $splits.june)
285:     #elseif ($month == 'July')
286:       #set($splitMonth = $splits.july)
287:     #elseif ($month == 'August')
288:       #set ($splitMonth = $splits.august)
289:     #elseif ($month == 'September')
290:       #set($splitMonth = $splits.september)
291:     #elseif ($month == 'October')
292:       #set($splitMonth = $splits.october)
293:     #elseif ($month == 'November')
294:       #set ($splitMonth = $splits.november)
295:     #elseif ($month == 'December')
296:       #set($splitMonth = $splits.december)
297:     #end
298: 
299:     #split($statPosBriefs, $month, $splitMonth)
300:   #end ## foreach
301: #end
302: </table>
303: </div>
304: </div> ## scrollable
305: </div> ## srollable-table
306: #end
307: 
308: #end ## macro splitsData
309: 
310: #macro (printRecentGames)
311: #if ($hasEvents)
312: <table>
313:   <tr class="thead"><th colspan="3">Recent Games</th></tr>
314: 
315: #set ($eventEnd = -1)
316: #foreach ($event in $events)
317:   #if ($event.event.result.resolved)
318:     #set ($eventEnd = $velocityCount)
319:   #end
320: #end
321: 
322: #set ($eventStart = $eventEnd - 5)
323: #if ($eventStart < 0) #set ($eventStart = 0) #end
324: 
325: #foreach ($event in $events)
326: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd)
327:   <tr>
328:     <td class="text">$formatter.formatDate($event.event.date, "MMM d")</td>
329:     <td class="text">
330:       #if ($event.event.neutralSite.length() > 0) vs.
331:       #elseif (!$event.event.home) at
332:       #else ## nothing for a home game
333:       #end
334:       $event.event.opponent.name
335:     </td>
336:     <td class="text">
337:     #if ($event.event.statusCode >= 0)
338:       #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0)
339:       <a href="../boxscores/${formatter.formatDate($event.event.date, "yyyyMMdd")}_${event.event.eventId.substring(0, 4)}.xml">${event.event.APResult}</a>
340:       #else
341:       ${event.event.APResult}
342:       #end
343: 	#end
344: 	</td>
345:   </tr>
346: #end ## if
347: #end
348: </table>
349: #end
350: #end ## macro printRecentGames
351: 
352: #macro (printCategories $briefCategoryLabels $v)
353: 
354: <div class="tab-container secondary clearfix" data-module="stats/tabs">
355: <div class="tab-nav" data-module="jscroll" data-momentum="false">
356: <div>
357: <ul class="clearfix">
358: #foreach($briefCat in $briefCategoryLabels.entrySet())
359:   #set ($briefCatLabel = $briefCat.value)
360:   #set ($briefCatKey = $briefCat.key)
361: 
362:   #if ($locale == "en_gb" && $briefCatLabel == "Defense")
363:     #set ($briefCatLabel = "Defence")
364:   #end
365: 
366:   <li #if ($activePos == $briefCatKey) class="active" #end><a href="${page.url}?view=${v}&pos=${briefCatKey}">$briefCatLabel</a></li>
367: #end
368: </ul>
369: </div>
370: </div>
371: <div class="tab-panels">
372: #foreach ($briefCat in $briefCategoryLabels.entrySet())
373:   #set ($class = "tab-panel clearfix")
374:   #if ($briefCat.key == $activePos)
375:     #set ($class = "tab-panel active clearfix")
376:   #end
377:   <div class="$class">
378:     <div class="stats-wrap clearfix">
379:     #if ($v == "splits")
380:       #splitsData($briefCat.key)
381:     #elseif ($v == "career")
382:       #careerData($briefCat.key)
383:     #end
384:     </div>
385:   </div>
386: #end
387: </div>
388: </div> ## tab-container
389: 
390: #end ## macro printCategories
391: 
392: #macro (printHeadshot)
393: 
394: #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span>#end
395: 
396: #if ($headshot.url)
397:   <img src="$headshot.url?max_width=320" alt="$fullName" title="$fullName" />
398: #else
399:   #if ($website.exists("/images/setup/headshot_default.jpg"))
400:     <img src="/images/setup/headshot_default.jpg?max_width=320" alt="$fullName" title="$fullName" />
401:   #else
402:     <img src="/info/images/default_headshot.jpg?max_width=320" alt="$fullName" title="$fullName" />
403:   #end
404: #end
405: #end ## macro printHeadshot
406: 
407: #macro (printBioInfo)
408: <div class="player-name">
409:   #if ($!attributes.get("number").length() > 0)<span class="number">$!attributes.get("number")</span>#end
410:   <span class="name">$fullName</span>
411: </div>
412: 
413: <table>
414: #foreach ($i in [1..10])
415:   #set ($stickyKey = "bio_custom${i}_sticky")
416:   #if ($options.get($stickyKey).length() > 0 && $attributes.get("custom${i}").length() > 0)
417:     <tr>
418:       <td class="label">$options.get($stickyKey): </td>
419:       <td class="value">$!attributes.get("custom${i}")</td>
420:     </tr>
421:   #end
422: #end
423: 
424: #foreach ($field in $fields)
425:   #if (!$field.key.startsWith("custom"))
426:     #if ($attributes.get($field.key).length() > 0 && ($field.key != "first_name" && $field.key != "last_name" && $field.key != "number" && $field.key != "full_name"))
427:       #if ($field.key == "phone1" || $field.key == "phone2")
428:         <tr>
429:           <td class="label">Phone: </td>
430:           <td class="value">$!attributes.get($field.key)</td>
431:         </tr>
432:       #elseif ($field.key == "email_address")
433:         #set ($emailAdd = $attributes.get($field.key))
434:         <tr>
435:           <td class="label">Email: </td>
436:           <td class="value"><a href="mailto:${emailAdd}">$emailAdd</a></td>
437:         </tr>
438:       #elseif ($field.key == "weight_class")
439:         <tr>
440:           <td class="label">Class: </td>
441:           <td class="value">$!attributes.get($field.key)</td>
442:         </tr>
443:       #else
444:         <tr>
445:           <td class="label">$field.value: </td>
446:           <td class="value">$!attributes.get($field.key)</td>
447:         </tr>
448:       #end
449:     #end
450:   #end
451: #end
452: 
453: #foreach ($i in [1..10])
454:   #set ($customKey = "bio_custom${i}")
455:   #if ($options.get($customKey).length() > 0 && $attributes.get("custom${i}"))
456:     <tr>
457:       <td class="label">$options.get($customKey): </td>
458:       <td class="value">$!attributes.get("custom${i}")</td>
459:     </tr>
460:   #end
461: #end
462: </table>
463:     
464:     
465:     
466:     ## ================================================
467:     ## wubearcats custom name pronunciation
468:     ## ================================================
469:     #set ($tmpName = "${firstName}${lastName}")
470:     #set ($AudioFile = "../pronunciation/${tmpName}.mp3")
471:     #if ($website.exists($AudioFile))
472:         <div class="pronunciation" >Name Pronunciation</div>
473:         <audio controls preload="metadata" style=" width:100%;"><source src="$AudioFile" type="audio/mpeg"></audio>
474:     #else
475:         <!-- $AudioFile Not Found -->
476:     #end
477:     
478:     ## ================================================
479:     
480:     
481:     
482: #end ## macro printBioInfo
483: 
484: #macro (printHighlights)
485: #if ($highlights && $showHighlights)
486:   <div class="highlights highlights-bio clearfix">
487:     #foreach ($highlight in $highlights.keySet())
488:       #set ($value = "-")
489:       #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight)))
490:       <div class="stat clearfix">
491:         <span class="stat-title">$!highlights.get($highlight)</span>
492:         <span class="stat-value">$value</span>
493:       </div>
494:     #end
495:   </div>
496: #end
497: #end ## macro printHighlights
498: #macro (printRoster)
499: #if ($page.contentType == "loki/bio")
500:   #set ($headlinesFeaturedSize = 0)
501:   #foreach ($featuredPage in $page.headlinesFeatured)
502:     #if ($featuredPage.contentType == "loki/headlines")
503:       #set ($headlinesFeaturedSize = $headlinesFeaturedSize + 1)
504:     #end
505:   #end
506:   #if ($headlinesFeaturedSize > 0)
507:     <select class="roster-select-list">
508:       <option selected="selected">Related Bios</option>
509:       #foreach ($featuredPage in $page.headlinesFeatured)
510:         #if ($featuredPage.contentType == "loki/headlines")
511:           $website.includeAgain("${featuredPage.url}?tmpl=roster-list-template&current_url=${page.url}")
512: 		#end
513: 	  #end
514:     </select>
515:   #end
516: #elseif ($page.contentType == "loki/bio-network")
517:   #set ($relatedPlayers = $page.sectionPage.children)
518:   #set ($teamNames = {})
519:   #foreach ($relatedPlayer in $relatedPlayers)
520:     #if ($relatedPlayer.contentType == "loki/bio-network")
521:       #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
522:       #set ($teamName = $relatedPlayerObj.get("team"))
523:       #if ($teamName.length() > 0)
524:         #if (!$teamNames.containsValue($teamName))
525:           $!teamNames.put($tool.math.add($teamNames.size(), 1), $teamName)
526:         #end
527:       #end
528:     #end
529:   #end
530: 
531:   <select class="roster-select-list">
532:   #foreach ($i in [1..$teamNames.size()])
533:     #if ($teamNames.size() > 1)
534:       <optgroup label="$teamNames.get($i)">
535:     #end
536: 
537:     #foreach ($relatedPlayer in $relatedPlayers)
538:       #if ($relatedPlayer.contentType == "loki/bio-network")
539:         #set ($relatedPlayerObj = $relatedPlayer.getDataAsObject().getAttributes())
540:         #set ($teamName = $relatedPlayerObj.get("team"))
541:         #if ($teamName.length() > 0 && $teamName == $teamNames.get($i))
542:           #set ($playerFirstName = $relatedPlayerObj.get("first_name"))
543:           #set ($playerLastName = $relatedPlayerObj.get("last_name"))
544:           #if ($page.url == $relatedPlayer.url)
545:             <option value="$relatedPlayer.url" selected="selected">${playerFirstName} ${playerLastName}</option>
546:           #else
547:             <option value="$relatedPlayer.url">${playerFirstName} ${playerLastName}</option>
548:           #end
549:         #end
550:       #end
551:     #end
552: 
553:     #if ($teamNames.size() > 1)
554:       </optgroup>
555:     #end
556:   #end
557:   </select>
558: #end
559: #end ## macro printRoster
560: 
561: ################################################## END MACROS  #############################################################
562: #set ($firstName = $!attributes.get("first_name"))
563: #set ($lastName = $!attributes.get("last_name"))
564: 
565: #if ($attributes.get("full_name").length() > 0)
566:   #set ($fullName = $attributes.get("full_name"))
567: #else
568:   #set ($fullName = "${firstName} ${lastName}")
569: #end
570: 
571: ## FULL ROSTER
572: <div class="bio-wrap #if ($highlights) bio-wrap-has-highlights #end clearfix" data-module="stats/responsive-container">
573: 
574: ## RELATED BIOS
575: #if ($showRoster)
576:   <div class="related-bios clearfix">#printRoster</div>
577: #end
578: 
579: <div class="head clearfix">
580: <div class="clearfix">
581: 
582: <div class="player-about clearfix">
583:   <div class="player-headshot">#printHeadshot</div>
584:   <div class="player-info">#printBioInfo</div>
585: </div>
586: 
587: #printHighlights
588: 
589: </div>
590: </div> ## head
591: 
592: 
593: 
594: #if ($view.length() > 0)
595: 
596: <div class="body clearfix">
597: 
598: <div class="tab-container primary clearfix" data-module="stats/tabs">
599: <div class="tab-nav" data-module="jscroll" data-momentum="false">
600:   <div>
601:   <ul class="clearfix">
602:   #if ($hasSynopsis || $hasBioBrief)
603:     <li #if ($view == "bio") class="active" #end><a href="${page.url}?view=bio">Info</a></li>
604:   #end
605: 
606:   #if ($statsURL.length() > 0)
607:     <li #if ($view == "profile") class="active" #end><a href="${page.url}?view=profile">Player Profile</a></li>
608:     <li #if ($view == "gamelog") class="active" #end><a href="${page.url}?view=gamelog">Game Log</a></li>
609:     #if ($showCareer)
610:       <li #if ($view == "career") class="active" #end><a href="${page.url}?view=career">Career Stats</a></li>
611:     #end
612:     <li #if ($view == "splits") class="active" #end><a href="${page.url}?view=splits">Split Stats</a></li>
613:   #end
614: 
615:   #if ($hasHTMLStats)
616:     <li #if ($view == "htmlstats") class="active" #end><a href="${page.url}?view=htmlstats">HTML Stats</a></li>
617:   #end
618: 
619:   #if ($releases.size() > 0)
620: 	<li #if ($view == "news") class="active" #end><a href="${page.url}?view=news">News</a></li>
621:   #end
622:   
623:   #if ($photoGalleries.size() > 0)
624: 	<li #if ($view == "photos") class="active" #end><a href="${page.url}?view=photos">Photos</a></li>
625:   #end
626: 
627:   #if ($videoGalleries.size() > 0)
628:     <li #if ($view == "videos") class="active" #end><a href="${page.url}?view=videos">Videos</a></li>
629:   #end
630:   </ul>
631:   </div>
632: </div> ## tab-nav
633: 
634: <div class="tab-panels clearfix">
635: 
636: ## BIO
637: #if ($hasSynopsis || $hasBioBrief)
638: 
639: #set ($class = "tab-panel clearfix")
640: #if ($view == "bio")
641:   #set ($class = "tab-panel active clearfix")
642: #end
643: <div class="${class}">
644: 
645: <div class="synopsis clearfix">
646: #if ($hasSynopsis)
647:   $synopsis
648: #elseif ($hasBioBrief)
649:   $website.include("$bioBriefURL")
650: #end
651: </div>
652: 
653: 
654: 
655: ## *********************************************************************************************************************
656: <!-- START wubearcats custom -->
657: ## *********************************************************************************************************************
658: 
659:     #set ($sportUrl = $page.url.split("/"))
660:     #set ($sport = $sportUrl[2])
661:     #set ($tmp_sport = $sportUrl[2])
662:     
663:     #if ($sport == "mgolf" || $sport == "wgolf")
664:          #set ($tmp_sport = "golf")
665:     #end
666:     
667:     #if ($sport == "mxc" || $sport == "wxc")
668:          #set ($tmp_sport = "xc")
669:     #end
670:     
671:     #if ($sport == "mtrack" || $sport == "wtrack")
672:          #set ($tmp_sport = "track")
673:     #end
674:     
675:     #if ($sport == "mswim" || $sport == "wswim")
676:          #set ($tmp_sport = "swim")
677:     #end
678:     
679:     ## SmugMug Galleries
680:     ## ******************************************************************************
681:     #if ($!attributes.get("custom10").length() > 0)
682:         #set ($smugMugSearch = $!attributes.get("custom10"))
683:     #else
684:         #set ($smugMugSearch = "${firstName}+${lastName}")
685:     #end
686: 
687:     <script>
688:         console.log("${smugMugSearch}")
689:     </script>
690:         
691:     $website.include("/bio-add-ons/smugmug-search?search=${tmp_sport}/${smugMugSearch}")
692:     
693:     
694:     ## Awards List
695:     ## ******************************************************************************
696:     #if ($!attributes.get("custom7").length() > 0)
697:         #set ($sthlete_id = $!attributes.get("custom7"))
698:         $website.include("/bio-add-ons/bioawards?athlete_id=$sthlete_id&sport_id=$sport")
699:         
700:     #else
701:         #set ($search = "fname=${firstName}&lname=${lastName}&sport_id=$sport")
702:         $website.include("/bio-add-ons/bioawards?$search")
703:         
704:     #end
705:     
706:     
707:     ## Records
708:     ## ******************************************************************************
709:      #if ($sport == "wlax" || $sport == "mtrack" || $sport == "wtrack"|| $sport == "sball" || $sport == "bsb" || $sport == "wvball")
710:         #set ($search = "fname=${firstName}&lname=${lastName}&sport_id=$sport")
711:         $website.include("/bio-add-ons/biorecords?$search")
712:     #end
713:     
714:     
715:         
716:     ## Non Sync Sports / Bio Results
717:     ## ******************************************************************************
718:     #if ($tmp_sport == "swim" || $tmp_sport == "track" || $tmp_sport == "xc" || $tmp_sport == "golf" || $tmp_sport == "wtri" || $tmp_sport == "wten" || $tmp_sport == "mten")
719:     
720:         <div id="bio-results">
721:         
722:         #if ($!attributes.get("custom8").length() > 0)
723:             #set ($bioResultsName = $!attributes.get("custom8"))
724:             
725:         #else
726:             #set ($bioResultsName = "${firstName}${lastName}")
727:         #end
728:         
729:     
730:         
731:         $website.include("../bio-results/${bioResultsName}.htm")
732:      
733:             
734:         ## SwimCloud
735:         #if ($tmp_sport == "swim")
736:              #set ($scid = $!attributes.get("custom9"))
737:             $website.include("/bio-add-ons/swimcloudscrape?id=$scid")
738:         #end
739:         
740:         ## Triathlon
741:         #if ($tmp_sport == "wtri")
742:             <!-- Triathlon Bio Results -->
743:             $website.include("/bio-add-ons/triathlon?fname=${firstName}&lname=${lastName}")
744:         #end
745:         
746:          ## Tennis
747:         #if ($tmp_sport == "wten" || $tmp_sport == "mten")
748:             <!-- Tennis Bio Results -->
749:             $website.include("/bio-add-ons/ita?fname=${firstName}&lname=${lastName}&sport_id=$sport")
750:         #end
751:     
752:     
753:         </div>
754:         
755:     #end
756:     
757:     
758: ## *********************************************************************************************************************
759: <!-- END wubearcats custom -->
760: ## *********************************************************************************************************************
761: 
762: 
763: 
764: </div> ## tab-panel
765: #end
766: ## BIO
767: 
768: ## STATS
769: #if ($statsURL.length() > 0)
770: 
771: ## PROFILE
772: #set ($class = "tab-panel clearfix")
773: #if ($view == "profile")
774:   #set ($class = "tab-panel active clearfix")
775: #end
776: <div class="${class}">
777: <div class="stats-wrap clearfix">
778: 
779: ## LAST SIX GAMES
780: <div class="stats-box half">
781: #printRecentGames()
782: </div>
783: 
784: ## RANKING
785: <div class="stats-box half">
786: #if ($statPos.length() > 0)
787:   $website.include("players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}")
788: #end
789: </div>
790: 
791: </div> ## stats-wrap
792: </div> ## tab-content
793: ## PROFILE
794: 
795: ## GAMELOG
796: #set ($class = "tab-panel clearfix")
797: #if ($view == "gamelog")
798:   #set ($class = "tab-panel active clearfix")
799: #end
800: 
801: #set ($activePos = $statPos)
802: #if ($view == "gamelog" && $paramPos.length() > 0)
803:   #if ($positions.get($paramPos).length() > 0)
804:     #set ($activePos = $positions.get($paramPos))
805:   #end
806: #end
807: 
808: <div class="${class}">
809: 
810: #if ($gamelogsCategoriesLabels)
811: <div class="tab-container secondary clearfix" data-module="stats/tabs">
812:   <div class="tab-nav" data-module="jscroll" data-momentum="false">
813:     <div>
814:     <ul class="clearfix">
815:     #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
816:       #set($gamelogsCatLabelVal = $gamelogsCatLabel.value)
817: 
818:       #if ($locale == "en_gb" && $gamelogsCatLabelVal == "Defense")
819:         #set($gamelogsCatLabelVal = "Defence")
820:       #end
821: 
822:       <li #if ($activePos == $gamelogsCatLabel.key) class="active" #end><a href="${page.url}?view=gamelog&pos=${gamelogsCatLabel.key}">$gamelogsCatLabelVal</a></li>
823:     #end
824:     </ul>
825: 	</div>
826:   </div>
827:   <div class="tab-panels">
828:   #foreach($gamelogsCatLabel in $gamelogsCategoriesLabels.entrySet())
829:     #set ($class = "tab-panel clearfix")
830:     #if ($gamelogsCatLabel.key == $activePos)
831:       #set ($class = "tab-panel active clearfix")
832:     #end
833:     <div class="${class}">
834:       <div class="stats-wrap clearfix">#gamelogData($gamelogsCatLabel.key)</div>
835: 	</div>
836:   #end
837:   </div>
838: </div>
839: #else
840:   <div class="stats-wrap clearfix">#gamelogData($pos)</div>
841: #end
842: 
843: </div> ## tab-panel
844: ## GAMELOG
845: 
846: 
847: ## CAREER
848: #if ($showCareer)
849: 
850: #set ($activePos = $statPos)
851: #if ($view == "career" && $paramPos.length() > 0)
852:   #if ($positions.get($paramPos).length() > 0)
853:     #set ($activePos = $positions.get($paramPos))
854:   #end
855: #end
856: 
857: #set ($class = "tab-panel clearfix")
858: #if ($view == "career")
859:   #set ($class = "tab-panel active clearfix")
860: #end
861: 
862: <div class="${class}">
863: 
864: #if ($briefsCategoriesLabels)
865:   #printCategories($briefsCategoriesLabels "career")
866: #else
867:   <div class="stats-wrap clearfix">#careerData($activePos)</div>
868: #end
869: 
870: </div> ## tab-panel
871: #end
872: ## CAREER
873: 
874: ## SPLITS
875: #set ($class = "tab-panel clearfix")
876: #if ($view == "splits")
877: 	#set ($class = "tab-panel active clearfix")
878: #end
879: 
880: #set ($activePos = $statPos)
881: #if ($view == "splits" && $paramPos.length() > 0)
882:   #if ($positions.get($paramPos).length() > 0)
883:     #set ($activePos = $positions.get($paramPos))
884:   #end
885: #end
886: 
887: <div class="${class}">
888: 
889: #if ($briefsCategoriesLabels)
890:   #printCategories($briefsCategoriesLabels "splits")
891: #else
892:   <div class="stats-wrap clearfix">#splitsData($pos)</div>
893: #end
894: 
895: </div> ## tab-panel
896: ## SPLITS
897: 
898: #end
899: ## STATS
900: 
901: ## HTML STATS
902: #if ($hasHTMLStats)
903: 
904: #set ($class = "tab-panel clearfix")
905: #if ($view == "htmlstats")
906:   #set ($class = "tab-panel active clearfix")
907: #end
908: <div class="${class}">
909:   <a href="${htmlStatsURL}" class="bio-htmlstats-identifier">Click to view HTML Stats</a>
910: </div>
911: 
912: #end
913: ## HTML STATS
914: 
915: ## NEWS
916: #if ($releases.size() > 0)
917: #set ($class = "tab-panel clearfix")
918: #if ($view == "news")
919:   #set ($class = "tab-panel active clearfix")
920: #end
921: <div class="bio-news ${class}">
922: 
923: #set ($counter = 0)
924: 
925: #foreach ($article in $releases)
926: #if ($article.title.length() > 0)
927: 
928: #set ($counter = $counter + 1)
929: 
930: #if ($counter == 1)
931:   <div class="row clearfix">
932: #end
933: 
934: <div class="item">
935: <div>
936: #if ($article.thumbnailURL)
937:   <img src="${article.thumbnailURL}?max_width=300" alt="" />
938: #else
939:   <img src="/images/setup/thumbnail_default.jpg" alt="" />
940: #end
941: 
942: <a href="$article.url" class="title">$article.title</a>
943: 
944: </div>
945: </div> ## item
946: 
947: #if ($counter == 3 || $velocityCount == $releases.size())
948:   </div> ## row
949:   #set ($counter = 0)
950: #end
951: 
952: #end
953: #end ## foreach
954: 
955: </div> ## tab-content
956: #end
957: ## NEWS
958: 
959: ## PHOTOS
960: #if ($photoGalleries.size() > 0)
961: #set ($class = "tab-panel clearfix")
962: #if ($view == "photos")
963:   #set ($class = "tab-panel active clearfix")
964: #end
965: <div class="${class}">
966:     $website.include("${page.url}?tmpl=bio-photos-template")
967: </div> ## tab-content
968: #end
969: ## PHOTOS
970: 
971: ## VIDEOS
972: #if ($videoGalleries.size() > 0)
973:   #set ($class = "tab-panel clearfix")
974:   #if ($view == "videos")
975:     #set ($class = "tab-panel active clearfix")
976:   #end
977: <div class="${class}">
978:     $website.includeAgain("${page.url}?tmpl=bio-videos-template")
979: </div> ## tab-content
980: #end
981: ## VIDEOS
982: 
983: </div> ## tab-panels
984: </div> ## tab-container
985: </div> ## body
986: #end
987: 
988: $wiki
989: </div> ## ends bio-wrap