|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/** |
|
4
|
|
|
* @name ElkArte Forum |
|
5
|
|
|
* @copyright ElkArte Forum contributors |
|
6
|
|
|
* @license BSD http://opensource.org/licenses/BSD-3-Clause |
|
7
|
|
|
* |
|
8
|
|
|
* This file contains code covered by: |
|
9
|
|
|
* copyright: 2011 Simple Machines (http://www.simplemachines.org) |
|
10
|
|
|
* license: BSD, See included LICENSE.TXT for terms and conditions. |
|
11
|
|
|
* |
|
12
|
|
|
* @version 1.1.4 |
|
13
|
|
|
* |
|
14
|
|
|
*/ |
|
15
|
|
|
|
|
16
|
|
|
/** |
|
17
|
|
|
* Loads the template used to display boards |
|
18
|
|
|
*/ |
|
19
|
|
|
function template_BoardIndex_init() |
|
20
|
|
|
{ |
|
21
|
|
|
loadTemplate('GenericBoards'); |
|
22
|
|
|
} |
|
23
|
|
|
|
|
24
|
|
|
/** |
|
25
|
|
|
* Main template for displaying the list of boards |
|
26
|
|
|
*/ |
|
27
|
|
|
function template_boards_list() |
|
28
|
|
|
{ |
|
29
|
|
|
global $context, $txt; |
|
30
|
|
|
|
|
31
|
|
|
// Each category in categories is made up of: |
|
32
|
|
|
// id, href, link, name, is_collapsed (is it collapsed?), can_collapse (is it okay if it is?), |
|
33
|
|
|
// new (is it new?), collapse_href (href to collapse/expand), collapse_image (up/down image), |
|
34
|
|
|
// and boards. (see below.) |
|
35
|
|
|
foreach ($context['categories'] as $category) |
|
36
|
|
|
{ |
|
37
|
|
|
// If there are no parent boards we can see, avoid showing an empty category (unless its collapsed). |
|
38
|
|
|
if (empty($category['boards']) && !$category['is_collapsed']) |
|
39
|
|
|
continue; |
|
40
|
|
|
|
|
41
|
|
|
// @todo - Invent nifty class name for boardindex header bars. |
|
42
|
|
|
echo ' |
|
43
|
|
|
|
|
44
|
|
|
<header class="category_header">'; |
|
45
|
|
|
|
|
46
|
|
|
// If this category even can collapse, show a link to collapse it. |
|
47
|
|
|
if ($category['can_collapse']) |
|
48
|
|
|
echo ' |
|
49
|
|
|
<a class="chevricon i-chevron-', $category['is_collapsed'] ? 'down' : 'up', '" href="', $category['collapse_href'], '" title="', $category['is_collapsed'] ? $txt['show'] : $txt['hide'], '"></a>'; |
|
50
|
|
|
|
|
51
|
|
|
// The "category link" is only a link for logged in members. Guests just get the name. |
|
52
|
|
|
echo ' |
|
53
|
|
|
', $category['link'], ' |
|
54
|
|
|
</header> |
|
55
|
|
|
<section class="forum_category" id="category_', $category['id'], '">'; |
|
56
|
|
|
|
|
57
|
|
|
// Assuming the category hasn't been collapsed... |
|
58
|
|
|
if (!$category['is_collapsed']) |
|
59
|
|
|
template_list_boards($category['boards'], 'category_' . $category['id'] . '_boards'); |
|
60
|
|
|
|
|
61
|
|
|
echo ' |
|
62
|
|
|
</section>'; |
|
63
|
|
|
} |
|
64
|
|
|
} |
|
65
|
|
|
|
|
66
|
|
|
/** |
|
67
|
|
|
* Show information above the boardindex, like the newsfader |
|
68
|
|
|
*/ |
|
69
|
|
|
function template_boardindex_outer_above() |
|
70
|
|
|
{ |
|
71
|
|
|
global $context, $settings, $txt; |
|
72
|
|
|
|
|
73
|
|
|
// Show some statistics if info centre stats is off. |
|
74
|
|
|
if (!$settings['show_stats_index']) |
|
75
|
|
|
{ |
|
76
|
|
|
echo ' |
|
77
|
|
|
<div id="index_common_stats"> |
|
78
|
|
|
', $txt['members'], ': ', $context['common_stats']['total_members'], ' • ', $txt['posts_made'], ': ', $context['common_stats']['total_posts'], ' • ', $txt['topics_made'], ': ', $context['common_stats']['total_topics'], '<br /> |
|
79
|
|
|
', $settings['show_latest_member'] ? ' ' . sprintf($txt['welcome_newest_member'], ' <strong>' . $context['common_stats']['latest_member']['link'] . '</strong>') : '', ' |
|
80
|
|
|
</div>'; |
|
81
|
|
|
} |
|
82
|
|
|
|
|
83
|
|
|
echo ' |
|
84
|
|
|
<main>'; |
|
85
|
|
|
} |
|
86
|
|
|
|
|
87
|
|
|
/** |
|
88
|
|
|
* Show information below the boardindex, like stats, infocenter |
|
89
|
|
|
*/ |
|
90
|
|
|
function template_boardindex_outer_below() |
|
91
|
|
|
{ |
|
92
|
|
|
global $context, $settings, $txt; |
|
93
|
|
|
|
|
94
|
|
|
// @todo - Just <div> for the parent, <p>'s for the icon stuffz, and the buttonlist <ul> for "Mark read". |
|
95
|
|
|
// Sort the floats in the CSS file, as other tricks will be needed as well (media queries, for instance). |
|
96
|
|
|
echo ' |
|
97
|
|
|
</main> |
|
98
|
|
|
<aside id="posting_icons">'; |
|
99
|
|
|
|
|
100
|
|
|
// Show the mark all as read button? |
|
101
|
|
|
if ($settings['show_mark_read'] && !$context['user']['is_guest'] && !empty($context['categories'])) |
|
102
|
|
|
echo ' |
|
103
|
|
|
', template_button_strip($context['mark_read_button'], 'right'); |
|
104
|
|
|
|
|
105
|
|
|
if ($context['user']['is_logged']) |
|
106
|
|
|
echo ' |
|
107
|
|
|
<p title="', $txt['new_posts'], '"><i class="icon i-board-new"></i>', $txt['new_posts'], '</p>'; |
|
108
|
|
|
|
|
109
|
|
|
echo ' |
|
110
|
|
|
<p title="', $txt['old_posts'], '"><i class="icon i-board-off"></i>', $txt['old_posts'], '</p> |
|
111
|
|
|
<p title="', $txt['redirect_board'], '"><i class="icon i-board-redirect"></i>', $txt['redirect_board'], '</p> |
|
112
|
|
|
</aside>'; |
|
113
|
|
|
} |
|
114
|
|
|
|
|
115
|
|
|
/** |
|
116
|
|
|
* The infocenter ... stats, recent topics, other important information that never gets seen :P |
|
117
|
|
|
*/ |
|
118
|
|
|
function template_info_center_below() |
|
119
|
|
|
{ |
|
120
|
|
|
global $context, $txt; |
|
121
|
|
|
|
|
122
|
|
|
if (empty($context['info_center_callbacks'])) |
|
123
|
|
|
{ |
|
124
|
|
|
return; |
|
125
|
|
|
} |
|
126
|
|
|
|
|
127
|
|
|
// Here's where the "Info Center" starts... |
|
128
|
|
|
echo ' |
|
129
|
|
|
<aside id="info_center" class="forum_category"> |
|
130
|
|
|
<h2 class="category_header panel_toggle"> |
|
131
|
|
|
<i id="upshrink_ic" class="hide chevricon i-chevron-', empty($context['minmax_preferences']['info']) ? 'up' : 'down', '" title="', $txt['hide'], '"></i> |
|
132
|
|
|
<a href="#" id="upshrink_link">', sprintf($txt['info_center_title'], $context['forum_name_html_safe']), '</a> |
|
133
|
|
|
</h2> |
|
134
|
|
|
<ul id="upshrinkHeaderIC" class="category_boards', empty($context['minmax_preferences']['info']) ? '' : ' hide', '">'; |
|
135
|
|
|
|
|
136
|
|
|
call_template_callbacks('ic', $context['info_center_callbacks']); |
|
137
|
|
|
|
|
138
|
|
|
echo ' |
|
139
|
|
|
</ul> |
|
140
|
|
|
</aside>'; |
|
141
|
|
|
|
|
142
|
|
|
// Info center collapse object. |
|
143
|
|
|
addInlineJavascript(' |
|
144
|
|
|
var oInfoCenterToggle = new elk_Toggle({ |
|
145
|
|
|
bToggleEnabled: true, |
|
146
|
|
|
bCurrentlyCollapsed: ' . (empty($context['minmax_preferences']['info']) ? 'false' : 'true') . ', |
|
147
|
|
|
aSwappableContainers: [ |
|
148
|
|
|
\'upshrinkHeaderIC\' |
|
149
|
|
|
], |
|
150
|
|
|
aSwapClasses: [ |
|
151
|
|
|
{ |
|
152
|
|
|
sId: \'upshrink_ic\', |
|
153
|
|
|
classExpanded: \'chevricon i-chevron-up\', |
|
154
|
|
|
titleExpanded: ' . JavaScriptEscape($txt['hide']) . ', |
|
155
|
|
|
classCollapsed: \'chevricon i-chevron-down\', |
|
156
|
|
|
titleCollapsed: ' . JavaScriptEscape($txt['show']) . ' |
|
157
|
|
|
} |
|
158
|
|
|
], |
|
159
|
|
|
aSwapLinks: [ |
|
160
|
|
|
{ |
|
161
|
|
|
sId: \'upshrink_link\', |
|
162
|
|
|
msgExpanded: ' . JavaScriptEscape(sprintf($txt['info_center_title'], $context['forum_name_html_safe'])) . ', |
|
163
|
|
|
msgCollapsed: ' . JavaScriptEscape(sprintf($txt['info_center_title'], $context['forum_name_html_safe'])) . ' |
|
164
|
|
|
} |
|
165
|
|
|
], |
|
166
|
|
|
oThemeOptions: { |
|
167
|
|
|
bUseThemeSettings: ' . ($context['user']['is_guest'] ? 'false' : 'true') . ', |
|
168
|
|
|
sOptionName: \'minmax_preferences\', |
|
169
|
|
|
sSessionId: elk_session_id, |
|
170
|
|
|
sSessionVar: elk_session_var, |
|
171
|
|
|
sAdditionalVars: \';minmax_key=info\' |
|
172
|
|
|
}, |
|
173
|
|
|
oCookieOptions: { |
|
174
|
|
|
bUseCookie: ' . ($context['user']['is_guest'] ? 'true' : 'false') . ', |
|
175
|
|
|
sCookieName: \'upshrinkIC\' |
|
176
|
|
|
} |
|
177
|
|
|
}); |
|
178
|
|
|
', true); |
|
179
|
|
|
} |
|
180
|
|
|
|
|
181
|
|
|
/** |
|
182
|
|
|
* This is the "Recent Posts" bar. |
|
183
|
|
|
*/ |
|
184
|
|
|
function template_ic_recent_posts() |
|
185
|
|
|
{ |
|
186
|
|
|
global $context, $txt, $scripturl, $settings; |
|
187
|
|
|
|
|
188
|
|
|
// Show the Recent Posts title |
|
189
|
|
|
// hslice class is a left over from webslice support. |
|
190
|
|
|
echo ' |
|
191
|
|
|
<li class="board_row hslice" id="recent_posts_content"> |
|
192
|
|
|
<h3 class="ic_section_header"> |
|
193
|
|
|
<a href="', $scripturl, '?action=recent"><i class="icon i-post-text"></i>', $txt['recent_posts'], '</a> |
|
194
|
|
|
</h3>'; |
|
195
|
|
|
|
|
196
|
|
|
// Only show one post. |
|
197
|
|
|
if ($settings['number_recent_posts'] == 1) |
|
198
|
|
|
{ |
|
199
|
|
|
// latest_post has link, href, time, subject, short_subject (shortened with...), and topic. (its id.) |
|
200
|
|
|
echo ' |
|
201
|
|
|
<p id="infocenter_onepost" class="inline"> |
|
202
|
|
|
<a href="', $scripturl, '?action=recent">', $txt['recent_view'], '</a> ', sprintf($txt['is_recent_updated'], '"' . $context['latest_post']['link'] . '"'), ' (', $context['latest_post']['html_time'], ') |
|
203
|
|
|
</p>'; |
|
204
|
|
|
} |
|
205
|
|
|
// Show lots of posts. @todo - Although data here is actually tabular, perhaps use faux table for greater responsiveness. |
|
206
|
|
|
elseif (!empty($context['latest_posts'])) |
|
207
|
|
|
{ |
|
208
|
|
|
echo ' |
|
209
|
|
|
<table id="ic_recentposts"> |
|
210
|
|
|
<tr> |
|
211
|
|
|
<th class="recentpost">', $txt['message'], '</th> |
|
212
|
|
|
<th class="recentposter">', $txt['author'], '</th> |
|
213
|
|
|
<th class="recentboard">', $txt['board'], '</th> |
|
214
|
|
|
<th class="recenttime">', $txt['date'], '</th> |
|
215
|
|
|
</tr>'; |
|
216
|
|
|
|
|
217
|
|
|
// Each post in latest_posts has: |
|
218
|
|
|
// board (with an id, name, and link.), topic (the topic's id.), poster (with id, name, and link.), |
|
219
|
|
|
// subject, short_subject (shortened with...), time, link, and href. |
|
220
|
|
|
foreach ($context['latest_posts'] as $post) |
|
221
|
|
|
{ |
|
222
|
|
|
echo ' |
|
223
|
|
|
<tr> |
|
224
|
|
|
<td class="recentpost"><strong>', $post['link'], '</strong></td> |
|
225
|
|
|
<td class="recentposter">', $post['poster']['link'], '</td> |
|
226
|
|
|
<td class="recentboard">', $post['board']['link'], '</td> |
|
227
|
|
|
<td class="recenttime">', $post['html_time'], '</td> |
|
228
|
|
|
</tr>'; |
|
229
|
|
|
} |
|
230
|
|
|
|
|
231
|
|
|
echo ' |
|
232
|
|
|
</table>'; |
|
233
|
|
|
} |
|
234
|
|
|
echo ' |
|
235
|
|
|
</li>'; |
|
236
|
|
|
} |
|
237
|
|
|
|
|
238
|
|
|
/** |
|
239
|
|
|
* Show information about events, birthdays, and holidays on the calendar in the info center |
|
240
|
|
|
*/ |
|
241
|
|
|
function template_ic_show_events() |
|
242
|
|
|
{ |
|
243
|
|
|
global $context, $txt, $scripturl; |
|
244
|
|
|
|
|
245
|
|
|
echo ' |
|
246
|
|
|
<li class="board_row"> |
|
247
|
|
|
<h3 class="ic_section_header"> |
|
248
|
|
|
<a href="', $scripturl, '?action=calendar"> |
|
249
|
|
|
<i class="icon i-calendar"></i> ', $context['calendar_only_today'] ? $txt['calendar_today'] : $txt['calendar_upcoming'], ' |
|
250
|
|
|
</a> |
|
251
|
|
|
</h3>'; |
|
252
|
|
|
|
|
253
|
|
|
// Holidays like "Christmas", "Hanukkah", and "We Love [Unknown] Day" :P. |
|
254
|
|
|
if (!empty($context['calendar_holidays'])) |
|
255
|
|
|
echo ' |
|
256
|
|
|
<p class="inline holiday">', $txt['calendar_prompt'], ' ', implode(', ', $context['calendar_holidays']), '</p>'; |
|
257
|
|
|
|
|
258
|
|
|
// People's birthdays. Like mine. And yours, I guess. Kidding. |
|
259
|
|
|
if (!empty($context['calendar_birthdays'])) |
|
260
|
|
|
{ |
|
261
|
|
|
echo ' |
|
262
|
|
|
<p class="inline"> |
|
263
|
|
|
<span class="birthday">', $context['calendar_only_today'] ? $txt['birthdays'] : $txt['birthdays_upcoming'], '</span>'; |
|
264
|
|
|
|
|
265
|
|
|
// Each member in calendar_birthdays has: id, name (person), age (if they have one set?), is_last. (last in list?), and is_today (birthday is today?) |
|
266
|
|
|
foreach ($context['calendar_birthdays'] as $member) |
|
267
|
|
|
echo ' |
|
268
|
|
|
<a href="', $scripturl, '?action=profile;u=', $member['id'], '">', $member['is_today'] ? '<strong>' : '', $member['name'], $member['is_today'] ? '</strong>' : '', isset($member['age']) ? ' (' . $member['age'] . ')' : '', '</a>', $member['is_last'] ? '' : ', '; |
|
269
|
|
|
|
|
270
|
|
|
echo ' |
|
271
|
|
|
</p>'; |
|
272
|
|
|
} |
|
273
|
|
|
|
|
274
|
|
|
// Events like community get-togethers. |
|
275
|
|
|
if (!empty($context['calendar_events'])) |
|
276
|
|
|
{ |
|
277
|
|
|
echo ' |
|
278
|
|
|
<p class="inline"> |
|
279
|
|
|
<span class="event">', $context['calendar_only_today'] ? $txt['events'] : $txt['events_upcoming'], '</span> '; |
|
280
|
|
|
|
|
281
|
|
|
// Each event in calendar_events should have: |
|
282
|
|
|
// title, href, is_last, can_edit (are they allowed?), modify_href, and is_today. |
|
283
|
|
|
foreach ($context['calendar_events'] as $event) |
|
284
|
|
|
echo ' |
|
285
|
|
|
', $event['can_edit'] ? '<a href="' . $event['modify_href'] . '" title="' . $txt['calendar_edit'] . '" class="icon i-modify"></a> ' : '', $event['href'] == '' ? '' : '<a href="' . $event['href'] . '">', $event['is_today'] ? '<strong>' . $event['title'] . '</strong>' : $event['title'], $event['href'] == '' ? '' : '</a>', $event['is_last'] ? '<br />' : ', '; |
|
286
|
|
|
|
|
287
|
|
|
echo ' |
|
288
|
|
|
</p>'; |
|
289
|
|
|
} |
|
290
|
|
|
|
|
291
|
|
|
echo ' |
|
292
|
|
|
</li>'; |
|
293
|
|
|
} |
|
294
|
|
|
|
|
295
|
|
|
/** |
|
296
|
|
|
* Show statistical style information in the info center |
|
297
|
|
|
*/ |
|
298
|
|
|
function template_ic_show_stats() |
|
299
|
|
|
{ |
|
300
|
|
|
global $txt, $scripturl, $context, $settings, $modSettings; |
|
301
|
|
|
|
|
302
|
|
|
echo ' |
|
303
|
|
|
<li class="board_row"> |
|
304
|
|
|
<h3 class="ic_section_header"> |
|
305
|
|
|
', $context['show_stats'] ? '<a href="' . $scripturl . '?action=stats" title="' . $txt['more_stats'] . '"><i class="icon i-pie-chart"></i>' . $txt['forum_stats'] . '</a>' : $txt['forum_stats'], ' |
|
306
|
|
|
</h3> |
|
307
|
|
|
<p class="inline"> |
|
308
|
|
|
', $context['common_stats']['boardindex_total_posts'], '', !empty($settings['show_latest_member']) ? ' - ' . $txt['latest_member'] . ': <strong> ' . $context['common_stats']['latest_member']['link'] . '</strong>' : '', ' - ', $txt['most_online_today'], ': ', comma_format($modSettings['mostOnlineToday']), '<br /> |
|
309
|
|
|
', (!empty($context['latest_post']) ? $txt['latest_post'] . ': <strong>"' . $context['latest_post']['link'] . '"</strong> ( ' . $context['latest_post']['time'] . ' )' : ''), ' - <a href="', $scripturl, '?action=recent">', $txt['recent_view'], '</a> |
|
310
|
|
|
</p> |
|
311
|
|
|
</li>'; |
|
312
|
|
|
} |
|
313
|
|
|
|
|
314
|
|
|
/** |
|
315
|
|
|
* Show the online users in the info center |
|
316
|
|
|
*/ |
|
317
|
|
|
function template_ic_show_users() |
|
318
|
|
|
{ |
|
319
|
|
|
global $context, $txt, $scripturl, $settings, $modSettings; |
|
320
|
|
|
|
|
321
|
|
|
// "Users online" - in order of activity. |
|
322
|
|
|
echo ' |
|
323
|
|
|
<li class="board_row"> |
|
324
|
|
|
<h3 class="ic_section_header"> |
|
325
|
|
|
', $context['show_who'] ? '<a href="' . $scripturl . '?action=who">' : '', '<i class="icon i-users"></i>', $txt['online_now'], ': |
|
326
|
|
|
', comma_format($context['num_users_online']), ' ', $context['num_users_online'] == 1 ? $txt['user'] : $txt['users'], ', ', comma_format($context['num_guests']), ' ', $context['num_guests'] == 1 ? $txt['guest'] : $txt['guests']; |
|
327
|
|
|
|
|
328
|
|
|
// Handle hidden users and buddies. |
|
329
|
|
|
$bracketList = array(); |
|
330
|
|
View Code Duplication |
if ($context['show_buddies']) |
|
331
|
|
|
$bracketList[] = comma_format($context['num_buddies']) . ' ' . ($context['num_buddies'] == 1 ? $txt['buddy'] : $txt['buddies']); |
|
332
|
|
|
|
|
333
|
|
View Code Duplication |
if (!empty($context['num_spiders'])) |
|
334
|
|
|
$bracketList[] = comma_format($context['num_spiders']) . ' ' . ($context['num_spiders'] == 1 ? $txt['spider'] : $txt['spiders']); |
|
335
|
|
|
|
|
336
|
|
|
if (!empty($context['num_users_hidden'])) |
|
337
|
|
|
$bracketList[] = comma_format($context['num_users_hidden']) . ' ' . ($context['num_users_hidden'] == 1 ? $txt['hidden'] : $txt['hidden_s']); |
|
338
|
|
|
|
|
339
|
|
|
if (!empty($bracketList)) |
|
340
|
|
|
echo ' (' . implode(', ', $bracketList) . ')'; |
|
341
|
|
|
|
|
342
|
|
|
echo $context['show_who'] ? '</a>' : '', ' |
|
343
|
|
|
</h3>'; |
|
344
|
|
|
|
|
345
|
|
|
// Assuming there ARE users online... each user in users_online has an id, username, name, group, href, and link. |
|
346
|
|
|
if (!empty($context['users_online'])) |
|
347
|
|
|
{ |
|
348
|
|
|
echo ' |
|
349
|
|
|
<p class="inline">', sprintf($txt['users_active'], $modSettings['lastActive']), ': ', implode(', ', $context['list_users_online']), '</p>'; |
|
350
|
|
|
|
|
351
|
|
|
// Showing membergroups? |
|
352
|
|
View Code Duplication |
if (!empty($settings['show_group_key']) && !empty($context['membergroups'])) |
|
353
|
|
|
echo ' |
|
354
|
|
|
<p class="inline membergroups">[' . implode(', ', $context['membergroups']) . ']</p>'; |
|
355
|
|
|
} |
|
356
|
|
|
echo ' |
|
357
|
|
|
</li>'; |
|
358
|
|
|
} |
|
359
|
|
|
|