Passed
Pull Request — release-2.1 (#5871)
by Jeremy
05:47
created

template_logout()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 19
rs 10
1
<?php
2
/**
3
 * Simple Machines Forum (SMF)
4
 *
5
 * @package SMF
6
 * @author Simple Machines https://www.simplemachines.org
7
 * @copyright 2021 Simple Machines and individual contributors
8
 * @license https://www.simplemachines.org/about/smf/license.php BSD
9
 *
10
 * @version 2.1 RC3
11
 */
12
13
/**
14
 * This is just the basic "login" form.
15
 */
16
function template_login()
17
{
18
	global $context, $settings, $scripturl, $modSettings, $txt;
19
20
	echo '
21
		<div class="login">
22
			<div class="cat_bar">
23
				<h3 class="catbg">
24
					<img src="', $settings['images_url'], '/icons/login_hd.png" alt="" class="icon"> ', $txt['login'], '
25
				</h3>
26
			</div>
27
			<div class="roundframe">
28
				<form class="login" action="', $context['login_url'], '" name="frmLogin" id="frmLogin" method="post" accept-charset="', $context['character_set'], '">';
29
30
	// Did they make a mistake last time?
31
	if (!empty($context['login_errors']))
32
		echo '
33
					<div class="errorbox">', implode('<br>', $context['login_errors']), '</div>
34
					<br>';
35
36
	// Or perhaps there's some special description for this time?
37
	if (isset($context['description']))
38
		echo '
39
					<div class="information">', $context['description'], '</div>';
40
41
	// Now just get the basic information - username, password, etc.
42
	echo '
43
					<dl>
44
						<dt>', $txt['username'], ':</dt>
45
						<dd>
46
							<input type="text" id="', !empty($context['from_ajax']) ? 'ajax_' : '', 'loginuser" name="user" size="20" value="', $context['default_username'], '" required>
47
						</dd>
48
						<dt>', $txt['password'], ':</dt>
49
						<dd>
50
							<input type="password" id="', !empty($context['from_ajax']) ? 'ajax_' : '', 'loginpass" name="passwrd" value="', $context['default_password'], '" size="20" required>
51
						</dd>
52
					</dl>
53
					<dl>
54
						<dt>', $txt['time_logged_in'], ':</dt>
55
						<dd>
56
							<select name="cookielength" id="cookielength">';
57
58
	foreach ($context['login_cookie_times'] as $cookie_time => $cookie_txt)
59
		echo '
60
								<option value="', $cookie_time, '"', $modSettings['cookieTime'] == $cookie_time ? ' selected' : '', '>', $txt[$cookie_txt], '</option>';
61
62
	echo '
63
							</select>
64
						</dd>';
65
66
	// If they have deleted their account, give them a chance to change their mind.
67
	if (isset($context['login_show_undelete']))
68
		echo '
69
						<dt class="alert">', $txt['undelete_account'], ':</dt>
70
						<dd><input type="checkbox" name="undelete"></dd>';
71
72
	echo '
73
					</dl>
74
					<p>
75
						<input type="submit" value="', $txt['login'], '" class="button">
76
					</p>
77
					<p class="smalltext">
78
						<a href="', $scripturl, '?action=reminder">', $txt['forgot_your_password'], '</a>
79
					</p>';
80
	if (!empty($modSettings['registration_method']) && $modSettings['registration_method'] == 1)
81
		echo '
82
					<p class="smalltext">
83
						', sprintf($txt['welcome_guest_activate'], $scripturl), '
84
					</p>';
85
	echo '
86
					<input type="hidden" name="', $context['session_var'], '" value="', $context['session_id'], '">
87
					<input type="hidden" name="', $context['login_token_var'], '" value="', $context['login_token'], '">
88
					<script>
89
						setTimeout(function() {
90
							document.getElementById("', !empty($context['from_ajax']) ? 'ajax_' : '', isset($context['default_username']) && $context['default_username'] != '' ? 'loginpass' : 'loginuser', '").focus();
91
						}, 150);';
92
93
	if (!empty($context['from_ajax']))
94
		echo '
95
						form = $("#frmLogin");
96
						form.submit(function(e) {
97
							e.preventDefault();
98
							e.stopPropagation();
99
100
							$.ajax({
101
								url: form.prop("action"),
102
								method: "POST",
103
								data: form.serialize(),
104
								success: function(data) {
105
									if (data.indexOf("<bo" + "dy") > -1) {
106
										document.open();
107
										document.write(data);
108
										document.close();
109
									}
110
									else
111
										form.parent().html($(data).find(".roundframe").html());
112
								},
113
								error: function(xhr) {
114
									var data = xhr.responseText;
115
									if (data.indexOf("<bo" + "dy") > -1) {
116
										document.open();
117
										document.write(data);
118
										document.close();
119
									}
120
									else
121
										form.parent().html($(data).filter("#fatal_error").html());
122
								}
123
							});
124
125
							return false;
126
						});';
127
128
	echo '
129
					</script>
130
				</form>';
131
132
	// It is a long story as to why we have this when we're clearly not going to use it.
133
	if (!empty($context['from_ajax']))
134
		echo '
135
				<br>
136
				<a href="javascript:self.close();"></a>';
137
138
	echo '
139
			</div><!-- .roundframe -->
140
		</div><!-- .login -->';
141
}
142
143
/**
144
 * TFA authentication form
145
 */
146
function template_login_tfa()
147
{
148
	global $context, $scripturl, $txt;
149
150
	echo '
151
		<div class="login">
152
			<div class="cat_bar">
153
				<h3 class="catbg">
154
					', $txt['tfa_profile_label'], '
155
				</h3>
156
			</div>
157
			<div class="roundframe">';
158
159
	if (!empty($context['tfa_error']) || !empty($context['tfa_backup_error']))
160
		echo '
161
				<div class="error">
162
					', $txt['tfa_' . (!empty($context['tfa_error']) ? 'code_' : 'backup_') . 'invalid'], '
163
				</div>';
164
165
	echo '
166
				<form action="', $context['tfa_url'], '" method="post" id="frmTfa">
167
					<div id="tfaCode">
168
						<p style="margin-bottom: 0.5em">', $txt['tfa_login_desc'], '</p>
169
						<div class="centertext">
170
							<strong>', $txt['tfa_code'], ':</strong>
171
							<input type="text" name="tfa_code" value="', !empty($context['tfa_value']) ? $context['tfa_value'] : '', '">
172
							<input type="submit" class="button" name="submit" value="', $txt['login'], '">
173
						</div>
174
						<hr>
175
						<div class="centertext">
176
							<input type="button" class="button" name="backup" value="', $txt['tfa_backup'], '">
177
						</div>
178
					</div>
179
					<div id="tfaBackup" style="display: none;">
180
						<p style="margin-bottom: 0.5em">', $txt['tfa_backup_desc'], '</p>
181
						<div class="centertext">
182
							<strong>', $txt['tfa_backup_code'], ': </strong>
183
							<input type="text" name="tfa_backup" value="', !empty($context['tfa_backup']) ? $context['tfa_backup'] : '', '">
184
							<input type="submit" class="button" name="submit" value="', $txt['login'], '">
185
						</div>
186
					</div>
187
				</form>
188
				<script>
189
					form = $("#frmTfa");';
190
191
	if (!empty($context['from_ajax']))
192
		echo '
193
					form.submit(function(e) {
194
						// If we are submitting backup code, let normal workflow follow since it redirects a couple times into a different page
195
						if (form.find("input[name=tfa_backup]:first").val().length > 0)
196
							return true;
197
198
						e.preventDefault();
199
						e.stopPropagation();
200
201
						$.post(form.prop("action"), form.serialize(), function(data) {
202
							if (data.indexOf("<bo" + "dy") > -1)
203
								document.location = ', JavaScriptEscape(!empty($_SESSION['login_url']) ? $_SESSION['login_url'] : $scripturl), ';
204
							else {
205
								form.parent().html($(data).find(".roundframe").html());
206
							}
207
						});
208
209
						return false;
210
					});';
211
212
	echo '
213
					form.find("input[name=backup]").click(function(e) {
214
						$("#tfaBackup").show();
215
						$("#tfaCode").hide();
216
					});
217
				</script>
218
			</div><!-- .roundframe -->
219
		</div><!-- .login -->';
220
}
221
222
/**
223
 * Tell a guest to get lost or login!
224
 */
225
function template_kick_guest()
226
{
227
	global $context, $settings, $scripturl, $modSettings, $txt;
228
229
	// This isn't that much... just like normal login but with a message at the top.
230
	echo '
231
	<form action="', $context['login_url'], '" method="post" accept-charset="', $context['character_set'], '" name="frmLogin" id="frmLogin">
232
		<div class="login">
233
			<div class="cat_bar">
234
				<h3 class="catbg">', $txt['warning'], '</h3>
235
			</div>';
236
237
	// Show the message or default message.
238
	echo '
239
			<p class="information centertext">
240
				', empty($context['kick_message']) ? $txt['only_members_can_access'] : $context['kick_message'], '<br>';
241
242
	if ($context['can_register'])
243
		echo sprintf($txt['login_below_or_register'], $scripturl . '?action=signup', $context['forum_name_html_safe']);
244
	else
245
		echo $txt['login_below'];
246
247
	// And now the login information.
248
	echo '
249
			<div class="cat_bar">
250
				<h3 class="catbg">
251
					<img src="', $settings['images_url'], '/icons/login_hd.png" alt="" class="icon"> ', $txt['login'], '
252
				</h3>
253
			</div>
254
			<div class="roundframe">
255
				<dl>
256
					<dt>', $txt['username'], ':</dt>
257
					<dd><input type="text" name="user" size="20"></dd>
258
					<dt>', $txt['password'], ':</dt>
259
					<dd><input type="password" name="passwrd" size="20"></dd>
260
					<dt>', $txt['time_logged_in'], ':</dt>
261
					<dd>
262
							<select name="cookielength" id="cookielength">';
263
264
	foreach ($context['login_cookie_times'] as $cookie_time => $cookie_txt)
265
		echo '
266
								<option value="', $cookie_time, '"', $modSettings['cookieTime'] == $cookie_time ? ' selected' : '', '>', $txt[$cookie_txt], '</option>';
267
268
	echo '
269
							</select>
270
					</dd>
271
				</dl>
272
				<p class="centertext">
273
					<input type="submit" value="', $txt['login'], '" class="button">
274
				</p>
275
				<p class="centertext smalltext">
276
					<a href="', $scripturl, '?action=reminder">', $txt['forgot_your_password'], '</a>
277
				</p>
278
			</div>
279
			<input type="hidden" name="', $context['session_var'], '" value="', $context['session_id'], '">
280
			<input type="hidden" name="', $context['login_token_var'], '" value="', $context['login_token'], '">
281
		</div><!-- .login -->
282
	</form>';
283
284
	// Do the focus thing...
285
	echo '
286
	<script>
287
		document.forms.frmLogin.user.focus();
288
	</script>';
289
}
290
291
/**
292
 * This is for maintenance mode.
293
 */
294
function template_maintenance()
295
{
296
	global $context, $settings, $txt, $modSettings;
297
298
	// Display the administrator's message at the top.
299
	echo '
300
	<form action="', $context['login_url'], '" method="post" accept-charset="', $context['character_set'], '">
301
		<div class="login" id="maintenance_mode">
302
			<div class="cat_bar">
303
				<h3 class="catbg">', $context['title'], '</h3>
304
			</div>
305
			<div class="information">
306
				<img class="floatleft" src="', $settings['images_url'], '/construction.png" width="40" height="40" alt="', $txt['in_maintain_mode'], '">
307
				', $context['description'], '<br class="clear">
308
			</div>
309
			<div class="title_bar">
310
				<h4 class="titlebg">', $txt['admin_login'], '</h4>
311
			</div>
312
			<div class="roundframe">
313
				<dl>
314
					<dt>', $txt['username'], ':</dt>
315
					<dd><input type="text" name="user" size="20"></dd>
316
					<dt>', $txt['password'], ':</dt>
317
					<dd><input type="password" name="passwrd" size="20"></dd>
318
					<dt>', $txt['time_logged_in'], ':</dt>
319
					<dd>
320
							<select name="cookielength" id="cookielength">';
321
322
	foreach ($context['login_cookie_times'] as $cookie_time => $cookie_txt)
323
		echo '
324
								<option value="', $cookie_time, '"', $modSettings['cookieTime'] == $cookie_time ? ' selected' : '', '>', $txt[$cookie_txt], '</option>';
325
326
	echo '
327
							</select>
328
					</dd>
329
				</dl>
330
				<input type="submit" value="', $txt['login'], '" class="button">
331
				<br class="clear">
332
			</div>
333
			<input type="hidden" name="', $context['session_var'], '" value="', $context['session_id'], '">
334
			<input type="hidden" name="', $context['login_token_var'], '" value="', $context['login_token'], '">
335
		</div><!-- #maintenance_mode -->
336
	</form>';
337
}
338
339
/**
340
 * This is for the security stuff - makes administrators login every so often.
341
 */
342
function template_admin_login()
343
{
344
	global $context, $settings, $scripturl, $txt, $modSettings;
345
346
	// Since this should redirect to whatever they were doing, send all the get data.
347
	echo '
348
	<form action="', !empty($modSettings['force_ssl']) ? strtr($scripturl, array('http://' => 'https://')) : $scripturl, $context['get_data'], '" method="post" accept-charset="', $context['character_set'], '" name="frmLogin" id="frmLogin">
349
		<div class="login" id="admin_login">
350
			<div class="cat_bar">
351
				<h3 class="catbg">
352
					<img src="', $settings['images_url'], '/icons/login_hd.png" alt="" class="icon"> ', $txt['login'], '
353
				</h3>
354
			</div>
355
			<div class="roundframe centertext">';
356
357
	if (!empty($context['incorrect_password']))
358
		echo '
359
				<div class="error">', $txt['admin_incorrect_password'], '</div>';
360
361
	echo '
362
				<strong>', $txt['password'], ':</strong>
363
				<input type="password" name="', $context['sessionCheckType'], '_pass" size="24">
364
				<a href="', $scripturl, '?action=helpadmin;help=securityDisable_why" onclick="return reqOverlayDiv(this.href);" class="help"><span class="main_icons help" title="', $txt['help'], '"></span></a><br>
365
				<input type="hidden" name="', $context['session_var'], '" value="', $context['session_id'], '">
366
				<input type="hidden" name="', $context['admin-login_token_var'], '" value="', $context['admin-login_token'], '">
367
				<input type="submit" value="', $txt['login'], '" class="button">';
368
369
	// Make sure to output all the old post data.
370
	echo $context['post_data'], '
371
			</div><!-- .roundframe -->
372
		</div><!-- #admin_login -->
373
		<input type="hidden" name="', $context['sessionCheckType'], '_hash_pass" value="">
374
	</form>';
375
376
	// Focus on the password box.
377
	echo '
378
	<script>
379
		document.forms.frmLogin.', $context['sessionCheckType'], '_pass.focus();
380
	</script>';
381
}
382
383
/**
384
 * Activate your account manually?
385
 */
386
function template_retry_activate()
387
{
388
	global $context, $txt, $scripturl;
389
390
	// Just ask them for their code so they can try it again...
391
	echo '
392
		<form action="', $scripturl, '?action=activate;u=', $context['member_id'], '" method="post" accept-charset="', $context['character_set'], '">
393
			<div class="title_bar">
394
				<h3 class="titlebg">', $context['page_title'], '</h3>
395
			</div>
396
			<div class="roundframe">
397
				<dl>';
398
399
	// You didn't even have an ID?
400
	if (empty($context['member_id']))
401
		echo '
402
					<dt>', $txt['invalid_activation_username'], ':</dt>
403
					<dd><input type="text" name="user" size="30"></dd>';
404
405
	echo '
406
					<dt>', $txt['invalid_activation_retry'], ':</dt>
407
					<dd><input type="text" name="code" size="30"></dd>
408
				</dl>
409
				<p><input type="submit" value="', $txt['invalid_activation_submit'], '" class="button"></p>
410
			</div>
411
		</form>';
412
}
413
414
/**
415
 * The form for resending the activation code.
416
 */
417
function template_resend()
418
{
419
	global $context, $txt, $scripturl;
420
421
	// Just ask them for their code so they can try it again...
422
	echo '
423
		<form action="', $scripturl, '?action=activate;sa=resend" method="post" accept-charset="', $context['character_set'], '">
424
			<div class="title_bar">
425
				<h3 class="titlebg">', $context['page_title'], '</h3>
426
			</div>
427
			<div class="roundframe">
428
				<dl>
429
					<dt>', $txt['invalid_activation_username'], ':</dt>
430
					<dd><input type="text" name="user" size="40" value="', $context['default_username'], '"></dd>
431
				</dl>
432
				<p>', $txt['invalid_activation_new'], '</p>
433
				<dl>
434
					<dt>', $txt['invalid_activation_new_email'], ':</dt>
435
					<dd><input type="text" name="new_email" size="40"></dd>
436
					<dt>', $txt['invalid_activation_password'], ':</dt>
437
					<dd><input type="password" name="passwd" size="30"></dd>
438
				</dl>';
439
440
	if ($context['can_activate'])
441
		echo '
442
				<p>', $txt['invalid_activation_known'], '</p>
443
				<dl>
444
					<dt>', $txt['invalid_activation_retry'], ':</dt>
445
					<dd><input type="text" name="code" size="30"></dd>
446
				</dl>';
447
448
	echo '
449
				<p><input type="submit" value="', $txt['invalid_activation_resend'], '" class="button"></p>
450
			</div><!-- .roundframe -->
451
		</form>';
452
}
453
454
/**
455
 * Confirm a logout.
456
 */
457
function template_logout()
458
{
459
	global $context, $settings, $scripturl, $modSettings, $txt;
460
461
	// This isn't that much... just like normal login but with a message at the top.
462
	echo '
463
	<form action="', $scripturl . '?action=logout;', $context['session_var'], '=', $context['session_id'], '" method="post" accept-charset="', $context['character_set'], '" name="frmLogout" id="frmLogout">
464
		<div class="logout">
465
			<div class="cat_bar">
466
				<h3 class="catbg">', $txt['logout_confirm'], '</h3>
467
			</div>
468
			<div class="roundframe">
469
				<p class="information centertext">
470
					', $txt['logout_notice'], '
471
				</p>
472
473
				<p class="centertext">
474
					<input type="submit" value="', $txt['logout'], '" class="button">
475
					<input type="submit" name="cancel" value="', $txt['logout_return'], '" class="button">
476
				</p>
477
			</div>
478
		</div><!-- .logout -->
479
	</form>';
480
}
481
482
?>