Completed
Pull Request — development (#3620)
by Emanuele
07:38 queued 07:38
created

template_load_likes_button_above()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 8
dl 0
loc 22
rs 10
c 1
b 0
f 0
cc 1
nc 1
nop 0
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
}