1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* @package ElkArte Forum |
5
|
|
|
* @copyright ElkArte Forum contributors |
6
|
|
|
* @license BSD http://opensource.org/licenses/BSD-3-Clause (see accompanying LICENSE.txt file) |
7
|
|
|
* |
8
|
|
|
* This file contains code covered by: |
9
|
|
|
* copyright: 2011 Simple Machines (http://www.simplemachines.org) |
10
|
|
|
* |
11
|
|
|
* @version 2.0 dev |
12
|
|
|
* |
13
|
|
|
*/ |
14
|
|
|
|
15
|
|
|
use ElkArte\Languages\Txt; |
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* Builds the poster area, avatar, group icons, pulldown information menu, etc |
19
|
|
|
* |
20
|
|
|
* @param mixed[] $message |
21
|
|
|
* @param bool $ignoring |
22
|
|
|
* |
23
|
|
|
* @return string |
24
|
|
|
*/ |
25
|
|
|
function template_build_poster_div($message, $ignoring = false) |
26
|
|
|
{ |
27
|
|
|
global $context, $settings, $options, $txt, $scripturl, $modSettings; |
28
|
|
|
|
29
|
|
|
$poster_div = ''; |
30
|
|
|
|
31
|
|
|
// Show information about the poster of this message. |
32
|
|
|
$poster_div .= ' |
33
|
|
|
<li class="' . ($ignoring ? 'subsections"' : 'listlevel1 subsections"') . ' aria-haspopup="true">'; |
34
|
|
|
|
35
|
|
|
// Show a link to the member's profile. |
36
|
|
|
if (!empty($message['member']['id'])) |
37
|
|
|
{ |
38
|
|
|
$poster_div .= ' |
39
|
|
|
<a class="linklevel1 name" href="' . $message['member']['href'] . '"> |
40
|
|
|
' . $message['member']['name'] . ' |
41
|
|
|
</a>'; |
42
|
|
|
} |
43
|
|
|
else |
44
|
|
|
{ |
45
|
|
|
$poster_div .= ' |
46
|
|
|
<a class="linklevel1 name"> |
47
|
|
|
' . $message['member']['name'] . ' |
48
|
|
|
</a>'; |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
// The member info dropdown starts here. |
52
|
|
|
$poster_div .= ' |
53
|
|
|
<ul id="msg_' . $message['id'] . '_extra_info" class="menulevel2' . ($ignoring ? ' hide"' : '" aria-haspopup="true"') . '>'; |
54
|
|
|
|
55
|
|
|
// Don't show these things for guests. |
56
|
|
|
if (!$message['member']['is_guest']) |
57
|
|
|
{ |
58
|
|
|
// Show the post group if and only if they have no other group or the option is on, and they are in a post group. |
59
|
|
|
if ((empty($settings['hide_post_group']) || $message['member']['group'] == '') && $message['member']['post_group'] != '') |
60
|
|
|
{ |
61
|
|
|
$poster_div .= ' |
62
|
|
|
<li class="listlevel2 postgroup">' . $message['member']['post_group'] . '</li>'; |
63
|
|
|
} |
64
|
|
|
|
65
|
|
|
// Show how many posts they have made. |
66
|
|
|
if (!isset($context['disabled_fields']['posts'])) |
67
|
|
|
{ |
68
|
|
|
$poster_div .= ' |
69
|
|
|
<li class="listlevel2 postcount">' . $txt['member_postcount'] . ': ' . $message['member']['posts'] . '</li>'; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
if (!isset($context['disabled_fields']['date_registered'])) |
73
|
|
|
{ |
74
|
|
|
$poster_div .= ' |
75
|
|
|
<li class="listlevel2 registered">' . $txt['date_joined'] . ': ' . standardTime($message['member']['registered_raw'], $txt['date_joined_format']) . '</li>'; |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
// Is karma display enabled? Total or +/-? |
79
|
|
|
if ($modSettings['karmaMode'] == '1' && !empty($message['member']['karma'])) |
80
|
|
|
{ |
81
|
|
|
$poster_div .= ' |
82
|
|
|
<li class="listlevel2 karma">' . $modSettings['karmaLabel'] . ' ' . ($message['member']['karma']['good'] - $message['member']['karma']['bad']) . '</li>'; |
83
|
|
|
} |
84
|
|
|
elseif ($modSettings['karmaMode'] == '2' && !empty($message['member']['karma'])) |
85
|
|
|
{ |
86
|
|
|
$poster_div .= ' |
87
|
|
|
<li class="listlevel2 karma">' . $modSettings['karmaLabel'] . ' +' . $message['member']['karma']['good'] . '/-' . $message['member']['karma']['bad'] . '</li>'; |
88
|
|
|
} |
89
|
|
|
|
90
|
|
|
// Is this user allowed to modify this member's karma? |
91
|
|
|
if (!empty($message['member']['karma']['allow'])) |
92
|
|
|
{ |
93
|
|
|
$poster_div .= ' |
94
|
|
|
<li class="listlevel2 karma_allow"> |
95
|
|
|
<a class="linklevel2" href="' . $message['member']['karma']['applaud_url'] . '">' . $modSettings['karmaApplaudLabel'] . '</a>' . |
96
|
|
|
(empty($modSettings['karmaDisableSmite']) ? '<a class="linklevel2" href="' . $message['member']['karma']['smite_url'] . '">' . $modSettings['karmaSmiteLabel'] . '</a>' : '') . ' |
97
|
|
|
</li>'; |
98
|
|
|
} |
99
|
|
|
|
100
|
|
|
// Any custom fields to show as or above icons? |
101
|
|
|
if (!empty($message['member']['custom_fields'])) |
102
|
|
|
{ |
103
|
|
|
// Show above-icon placement (replacing personal text and gender) |
104
|
|
|
foreach ($message['member']['custom_fields'] as $custom) |
105
|
|
|
{ |
106
|
|
|
if ($custom['placement'] == 3 && !empty($custom['value'])) |
107
|
|
|
{ |
108
|
|
|
$poster_div .= ' |
109
|
|
|
<li class="listlevel2 cf_aboveicons">' . $custom['value'] . '</li>'; |
110
|
|
|
} |
111
|
|
|
} |
112
|
|
|
|
113
|
|
|
// Icon placement. |
114
|
|
|
$shown = false; |
115
|
|
|
foreach ($message['member']['custom_fields'] as $custom) |
116
|
|
|
{ |
117
|
|
|
if ($custom['placement'] != 1 || empty($custom['value'])) |
118
|
|
|
{ |
119
|
|
|
continue; |
120
|
|
|
} |
121
|
|
|
|
122
|
|
|
if (empty($shown)) |
123
|
|
|
{ |
124
|
|
|
$shown = true; |
125
|
|
|
$poster_div .= ' |
126
|
|
|
<li class="listlevel2 cf_icons"> |
127
|
|
|
<ol>'; |
128
|
|
|
} |
129
|
|
|
|
130
|
|
|
$poster_div .= ' |
131
|
|
|
<li class="cf_icon">' . $custom['value'] . '</li>'; |
132
|
|
|
} |
133
|
|
|
|
134
|
|
|
if ($shown) |
135
|
|
|
{ |
136
|
|
|
$poster_div .= ' |
137
|
|
|
</ol> |
138
|
|
|
</li>'; |
139
|
|
|
} |
140
|
|
|
} |
141
|
|
|
|
142
|
|
|
// Show the website and email address buttons. |
143
|
|
|
if (!empty($message['member']['show_profile_buttons'])) |
144
|
|
|
{ |
145
|
|
|
$poster_div .= ' |
146
|
|
|
<li class="listlevel2 profile"> |
147
|
|
|
<ol>'; |
148
|
|
|
|
149
|
|
|
// Don't show an icon if they haven't specified a website. |
150
|
|
|
if ($message['member']['website']['url'] != '' && !isset($context['disabled_fields']['website'])) |
151
|
|
|
{ |
152
|
|
|
$poster_div .= ' |
153
|
|
|
<li class="cf_icon"><a href="' . $message['member']['website']['url'] . '" title="' . $message['member']['website']['title'] . '" target="_blank" rel="noopener noreferrer" class="new_win">' . ($settings['use_image_buttons'] ? '<i class="icon i-website" title="' . $message['member']['website']['title'] . '"></i>' : $txt['www']) . '</a></li>'; |
154
|
|
|
} |
155
|
|
|
|
156
|
|
|
// Don't show the email address if they want it hidden. |
157
|
|
|
if ($context['can_send_email']) |
158
|
|
|
{ |
159
|
|
|
$poster_div .= ' |
160
|
|
|
<li>' . template_msg_email($message['id'], $message['member']) . '</li>'; |
161
|
|
|
} |
162
|
|
|
|
163
|
|
|
$poster_div .= ' |
164
|
|
|
</ol> |
165
|
|
|
</li>'; |
166
|
|
|
} |
167
|
|
|
|
168
|
|
|
// Any custom fields for standard placement? |
169
|
|
|
if (!empty($message['member']['custom_fields'])) |
170
|
|
|
{ |
171
|
|
|
foreach ($message['member']['custom_fields'] as $custom) |
172
|
|
|
{ |
173
|
|
|
if (empty($custom['placement']) || empty($custom['value'])) |
174
|
|
|
{ |
175
|
|
|
$poster_div .= ' |
176
|
|
|
<li class="listlevel2 custom">' . $custom['title'] . ': ' . $custom['value'] . '</li>'; |
177
|
|
|
} |
178
|
|
|
} |
179
|
|
|
} |
180
|
|
|
} |
181
|
|
|
// Otherwise, show the guest's email. |
182
|
|
|
elseif (!empty($message['member']['email']) && $context['can_send_email']) |
183
|
|
|
{ |
184
|
|
|
$poster_div .= ' |
185
|
|
|
<li class="listlevel2 email">' . template_msg_email($message['id']) . '</li>'; |
186
|
|
|
} |
187
|
|
|
|
188
|
|
|
// Stuff for the staff to wallop them with. |
189
|
|
|
$poster_div .= ' |
190
|
|
|
<li class="listlevel2 report_separator"></li>'; |
191
|
|
|
|
192
|
|
|
// Can we issue a warning because of this post? Remember, we can't give guests warnings. |
193
|
|
|
if ($context['can_issue_warning'] && !$message['is_message_author'] && !$message['member']['is_guest']) |
194
|
|
|
{ |
195
|
|
|
$poster_div .= ' |
196
|
|
|
<li class="listlevel2 warning"> |
197
|
|
|
<a class="linklevel2" href="' . $scripturl . '?action=profile;area=issuewarning;u=' . $message['member']['id'] . ';msg=' . $message['id'] . '"> |
198
|
|
|
<i class="warnicon i-warning " title="' . $txt['issue_warning_post'] . '"></i>' . $txt['warning_issue'] . ' |
199
|
|
|
</a>'; |
200
|
|
|
|
201
|
|
|
// Do they have a warning in place? |
202
|
|
|
if ($message['member']['can_see_warning'] && !empty($options['hide_poster_area'])) |
203
|
|
|
{ |
204
|
|
|
$iconClass = 'warnicon i-warning-' . $message['member']['warning_status']; |
205
|
|
|
$poster_div .= ' |
206
|
|
|
<a class="linklevel2" href="' . $scripturl . '?action=profile;area=issuewarning;u=' . $message['member']['id'] . '"> |
207
|
|
|
<i class="' . $iconClass . '" title="' . $txt['user_warn_' . $message['member']['warning_status']] . '"></i> |
208
|
|
|
<span class="warn_' . $message['member']['warning_status'] . '">' . $txt['warn_' . $message['member']['warning_status']] . '</span> |
209
|
|
|
</a>'; |
210
|
|
|
} |
211
|
|
|
|
212
|
|
|
$poster_div .= ' |
213
|
|
|
</li>'; |
214
|
|
|
} |
215
|
|
|
|
216
|
|
|
// Show the IP to this user for this post - because you can moderate? |
217
|
|
|
if (!empty($context['can_moderate_forum']) && !empty($message['member']['ip'])) |
218
|
|
|
{ |
219
|
|
|
$poster_div .= ' |
220
|
|
|
<li class="listlevel2 poster_ip"> |
221
|
|
|
<a class="helpicon i-help" href="' . $scripturl . '?action=quickhelp;help=see_admin_ip" onclick="return reqOverlayDiv(this.href);"></a> |
222
|
|
|
<a class="linklevel2 help" title="' . $message['member']['ip'] . '" href="' . $scripturl . '?action=' . (!empty($message['member']['is_guest']) ? 'trackip' : 'profile;area=history;sa=ip;u=' . $message['member']['id'] . ';searchip=' . $message['member']['ip']) . '">' . $message['member']['ip'] . '</a> |
223
|
|
|
</li>'; |
224
|
|
|
} |
225
|
|
|
// Or, should we show it because this is you? |
226
|
|
|
elseif (!empty($message['can_see_ip']) && !empty($message['member']['ip'])) |
227
|
|
|
{ |
228
|
|
|
$poster_div .= ' |
229
|
|
|
<li class="listlevel2 poster_ip"> |
230
|
|
|
<a class="linklevel2 helpicon i-help" title="' . $message['member']['ip'] . '" href="' . $scripturl . '?action=quickhelp;help=see_member_ip" onclick="return reqOverlayDiv(this.href);"><s>' . $txt['help'] . '</s></a> |
231
|
|
|
<a class="linklevel2 help" title="' . $message['member']['ip'] . '" href="#" onclick="return false;">' . $message['member']['ip'] . '</a> |
232
|
|
|
</li>'; |
233
|
|
|
} |
234
|
|
|
// Okay, are you at least logged in? Then we can show something about why IPs are logged... |
235
|
|
|
elseif (!$context['user']['is_guest']) |
236
|
|
|
{ |
237
|
|
|
$poster_div .= ' |
238
|
|
|
<li class="listlevel2 poster_ip"> |
239
|
|
|
<a class="linklevel2 helpicon i-help" href="' . $scripturl . '?action=quickhelp;help=see_member_ip" onclick="return reqOverlayDiv(this.href);"><s>' . $txt['help'] . '</s></a>' . $txt['logged'] . ' |
240
|
|
|
</li>'; |
241
|
|
|
} |
242
|
|
|
// Otherwise, you see NOTHING! |
243
|
|
|
else |
244
|
|
|
{ |
245
|
|
|
$poster_div .= ' |
246
|
|
|
<li class="listlevel2 poster_ip">' . $txt['logged'] . '</li>'; |
247
|
|
|
} |
248
|
|
|
|
249
|
|
|
// Done with the detail information about the poster. |
250
|
|
|
$poster_div .= ' |
251
|
|
|
</ul> |
252
|
|
|
</li>'; |
253
|
|
|
|
254
|
|
|
// Show avatars, images, etc.? |
255
|
|
|
if (empty($options['hide_poster_area']) && !$ignoring) |
256
|
|
|
{ |
257
|
|
|
if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image'])) |
258
|
|
|
{ |
259
|
|
|
$poster_div .= ' |
260
|
|
|
<li class="listlevel1 poster_avatar"> |
261
|
|
|
<a class="linklevel1" href="' . $message['member']['href'] . '"> |
262
|
|
|
' . $message['member']['avatar']['image'] . ' |
263
|
|
|
</a> |
264
|
|
|
</li>'; |
265
|
|
|
} |
266
|
|
|
|
267
|
|
|
// Show the post group icons, but not for guests. |
268
|
|
|
if (!$message['member']['is_guest']) |
269
|
|
|
{ |
270
|
|
|
$poster_div .= ' |
271
|
|
|
<li class="listlevel1 icons">' . $message['member']['group_icons'] . '</li>'; |
272
|
|
|
} |
273
|
|
|
|
274
|
|
|
// Show the member's primary group (like 'Administrator') if they have one. |
275
|
|
|
if (!empty($message['member']['group'])) |
276
|
|
|
{ |
277
|
|
|
$poster_div .= ' |
278
|
|
|
<li class="listlevel1 membergroup">' . $message['member']['group'] . '</li>'; |
279
|
|
|
} |
280
|
|
|
|
281
|
|
|
// Show the member's custom title, if they have one. |
282
|
|
|
if (!empty($message['member']['title'])) |
283
|
|
|
{ |
284
|
|
|
$poster_div .= ' |
285
|
|
|
<li class="listlevel1 title">' . $message['member']['title'] . '</li>'; |
286
|
|
|
} |
287
|
|
|
|
288
|
|
|
// Show online and offline buttons? PHP could do with a little bit of cleaning up here for brevity, but it works. |
289
|
|
|
// The plan is to make these buttons act sensibly, and link to your own inbox in your own posts (with new PM notification). |
290
|
|
|
// Still has a little bit of hard-coded text. This may be a place where translators should be able to write inclusive strings, |
291
|
|
|
// instead of dealing with $txt['by'] etc in the markup. Must be brief to work, anyway. Cannot ramble on at all. |
292
|
|
|
|
293
|
|
|
// We start with their own.. |
294
|
|
|
if ($context['can_send_pm'] && $message['is_message_author']) |
295
|
|
|
{ |
296
|
|
|
$poster_div .= ' |
297
|
|
|
<li class="listlevel1 poster_online"> |
298
|
|
|
<a class="linklevel1' . ($context['user']['unread_messages'] > 0 ? ' new_pm' : '') . '" href="' . $scripturl . '?action=pm">' . $txt['pm_short'] . ' ' . ($context['user']['unread_messages'] > 0 ? '<span class="pm_indicator">' . $context['user']['unread_messages'] . '</span>' : '') . '</a> |
299
|
|
|
</li>'; |
300
|
|
|
} |
301
|
|
|
// Allowed to send PMs and the message is not their own and not from a guest. |
302
|
|
|
elseif ($context['can_send_pm'] && !$message['is_message_author'] && !$message['member']['is_guest']) |
303
|
|
|
{ |
304
|
|
|
if (!empty($modSettings['onlineEnable'])) |
305
|
|
|
{ |
306
|
|
|
$poster_div .= ' |
307
|
|
|
<li class="listlevel1 poster_online"> |
308
|
|
|
<a class="linklevel1" href="' . $scripturl . '?action=pm;sa=send;u=' . $message['member']['id'] . '" title="' . $message['member']['online']['member_online_text'] . '">' . $txt['send_message'] . ' ' . template_member_online($message['member'], false) . '</a> |
309
|
|
|
</li>'; |
310
|
|
|
} |
311
|
|
|
else |
312
|
|
|
{ |
313
|
|
|
$poster_div .= ' |
314
|
|
|
<li class="listlevel1 poster_online"> |
315
|
|
|
<a class="linklevel1" href="' . $scripturl . '?action=pm;sa=send;u=' . $message['member']['id'] . '">' . $txt['send_message'] . ' </a> |
316
|
|
|
</li>'; |
317
|
|
|
} |
318
|
|
|
} |
319
|
|
|
// Not allowed to send a PM, online status disabled and not from a guest. |
320
|
|
|
elseif (!$context['can_send_pm'] && !empty($modSettings['onlineEnable']) && !$message['member']['is_guest']) |
321
|
|
|
{ |
322
|
|
|
// Are we showing the warning status? |
323
|
|
|
if (!$message['member']['is_guest'] && $message['member']['can_see_warning']) |
324
|
|
|
{ |
325
|
|
|
$iconClass = 'warnicon i-warning-' . $message['member']['warning_status']; |
326
|
|
|
$poster_div .= ' |
327
|
|
|
<li class="listlevel1 warning">' . |
328
|
|
|
($context['can_issue_warning'] ? '<a class="linklevel1" href="' . $scripturl . '?action=profile;area=issuewarning;u=' . $message['member']['id'] . '">' : '') . ' |
329
|
|
|
<i class="' . $iconClass . '" title="' . $txt['user_warn_' . $message['member']['warning_status']] . '"></i>' . |
330
|
|
|
($context['can_issue_warning'] ? '</a>' : '') . ' |
331
|
|
|
<span class="warn_' . $message['member']['warning_status'] . '">' . $txt['warn_' . $message['member']['warning_status']] . '</span> |
332
|
|
|
</li>'; |
333
|
|
|
} |
334
|
|
|
} |
335
|
|
|
} |
336
|
|
|
|
337
|
|
|
return $poster_div; |
338
|
|
|
} |
339
|
|
|
|
340
|
|
|
/** |
341
|
|
|
* Formats a very simple message view (for example search results, list of |
342
|
|
|
* posts and topics in profile, unapproved, etc.) |
343
|
|
|
* |
344
|
|
|
* @param mixed[] $msg associative array containing the data to output: |
345
|
|
|
* - class => a class name (mandatory) |
346
|
|
|
* - counter => Usually a number used as counter next to the subject |
347
|
|
|
* - title => Usually the subject of the topic (mandatory) |
348
|
|
|
* - date => frequently the "posted on", but can be anything |
349
|
|
|
* - body => message body (mandatory) |
350
|
|
|
* - buttons => an associative array that allows to create a "quickbutton" strip |
351
|
|
|
* (see template_quickbutton_strip for details on the parameters) |
352
|
|
|
*/ |
353
|
|
|
function template_simple_message($msg) |
354
|
|
|
{ |
355
|
|
|
// @todo find a better name for $msg['date'] |
356
|
|
|
echo ' |
357
|
|
|
<article class="', $msg['class'], ' forumposts"> |
358
|
|
|
<header class="topic_details">', !empty($msg['counter']) ? ' |
359
|
|
|
<div class="counter">' . $msg['counter'] . '</div>' : '', ' |
360
|
|
|
<h5> |
361
|
|
|
', $msg['title'], ' |
362
|
|
|
</h5>', !empty($msg['date']) ? ' |
363
|
|
|
<span class="smalltext">' . $msg['date'] . '</span>' : '', ' |
364
|
|
|
</header> |
365
|
|
|
<section class="messageContent"> |
366
|
|
|
', $msg['body'], ' |
367
|
|
|
</section> |
368
|
|
|
<nav>'; |
369
|
|
|
|
370
|
|
|
if (!empty($msg['buttons'])) |
371
|
|
|
{ |
372
|
|
|
template_quickbutton_strip($msg['buttons'], !empty($msg['tests']) ? $msg['tests'] : array()); |
373
|
|
|
} |
374
|
|
|
|
375
|
|
|
echo ' |
376
|
|
|
</nav> |
377
|
|
|
</article>'; |
378
|
|
|
} |
379
|
|
|
|
380
|
|
|
|
381
|
|
|
function template_load_likes_button_above() |
382
|
|
|
{ |
383
|
|
|
global $txt; |
384
|
|
|
// ajax controller for likes |
385
|
|
|
loadJavascriptFile('like_posts.js', array('defer' => true)); |
386
|
|
|
|
387
|
|
|
// This one is needed to load have some strings handy for likes errors |
388
|
|
|
Txt::load('Errors'); |
389
|
|
|
|
390
|
|
|
// Initiate likes and the tooltips for likes |
391
|
|
|
theme()->addInlineJavascript(' |
392
|
|
|
$(function() { |
393
|
|
|
var likePostInstance = likePosts.prototype.init({ |
394
|
|
|
oTxt: ({ |
395
|
|
|
likeHeadingError : ' . JavaScriptEscape($txt['like_heading_error']) . ', |
396
|
|
|
error_occurred : ' . JavaScriptEscape($txt['error_occurred']) . ', |
397
|
|
|
are_you_sure: ' . JavaScriptEscape($txt['likemsg_are_you_sure']) . ' |
398
|
|
|
}), |
399
|
|
|
}); |
400
|
|
|
|
401
|
|
|
$(".react_button, .unreact_button, .reacts_button").SiteTooltip(); |
402
|
|
|
});', true); |
403
|
|
|
} |