Forráskód Böngészése

Merge branch 'release-2.1' of https://github.com/SimpleMachines/SMF2.1 into release-2.1

Signed-off-by: Peter Spicer <[email protected]>
Peter Spicer 11 éve
szülő
commit
0b8b8e6ffc

+ 1 - 1
Sources/Load.php

@@ -2425,7 +2425,7 @@ function censorText(&$text, $force = false)
 	global $modSettings, $options, $settings, $txt;
 	static $censor_vulgar = null, $censor_proper;
 
-	if ((!empty($options['show_no_censored']) && $modSettings['allow_no_censored'] && !$force) || empty($modSettings['censor_vulgar']) || trim($text) === '')
+	if ((!empty($options['show_no_censored']) && !empty($modSettings['allow_no_censored']) && !$force) || empty($modSettings['censor_vulgar']) || trim($text) === '')
 		return $text;
 
 	// If they haven't yet been loaded, load them.

+ 1 - 1
Themes/default/Admin.template.php

@@ -848,7 +848,7 @@ function template_show_settings()
 				// Text area?
 				elseif ($config_var['type'] == 'large_text')
 					echo '
-							<textarea rows="', ($config_var['size'] ? $config_var['size'] : 4), '" cols="30" ', $javascript, $disabled, ' name="', $config_var['name'], '" id="', $config_var['name'], '">', $config_var['value'], '</textarea>';
+							<textarea rows="', ($config_var['size'] ? $config_var['size'] : ($config_vars['rows'] ? $config_vars['rows'] : 4)), '" cols="', ($config_var['cols'] ? $config_var['cols'] : 30), '" ', $javascript, $disabled, ' name="', $config_var['name'], '" id="', $config_var['name'], '">', $config_var['value'], '</textarea>';
 				// Permission group?
 				elseif ($config_var['type'] == 'permissions')
 					theme_inline_permissions($config_var['name']);

+ 58 - 74
Themes/default/Display.template.php

@@ -219,7 +219,7 @@ function template_main()
 		// Show information about the poster of this message.
 		echo '
 						<div class="poster">
-							<ul class="dropmenu">
+							<ul>
 								<li>
 									<h4>';
 
@@ -228,11 +228,30 @@ function template_main()
 										<a href="', $scripturl, '?action=profile;u=', $message['member']['id'], '">
 											<span style="padding: 6px; display: block;">', $message['member']['name'], '</span>
 										</a>
-									</h4>';
+									</h4>
+								</li>';
+
+		// Show the user's avatar.
+		if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image']))
+			echo '
+								<li class="avatar">
+									<a href="', $scripturl, '?action=profile;u=', $message['member']['id'], '">', $message['member']['avatar']['image'], '</a>
+								</li>';
 
-		// [WIP] The new member info dropdown starts here. Note that conditionals have not been fully checked yet.
+		// Show the post group icons, but not for guests.
+		if (!$message['member']['is_guest'])
 			echo '
-									<ul class="smalltext" id="msg_', $message['id'], '_extra_info"', $ignoring ? ' style="display:none;"' : '', '>';
+								<li class="icons">', $message['member']['group_icons'], '</li>';
+
+		// Show the member's primary group (like 'Administrator') if they have one.
+		if (!empty($message['member']['group']))
+			echo '
+								<li class="membergroup">', $message['member']['group'], '</li>';
+
+		// Show the member's custom title, if they have one.
+		if (!empty($message['member']['title']))
+			echo '
+								<li class="title">', $message['member']['title'], '</li>';
 
 		// Don't show these things for guests.
 		if (!$message['member']['is_guest'])
@@ -241,38 +260,38 @@ function template_main()
 			// 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.
 			if ((empty($settings['hide_post_group']) || $message['member']['group'] == '') && $message['member']['post_group'] != '')
 				echo '
-										<li class="postgroup">', $message['member']['post_group'], '</li>';
+								<li class="postgroup">', $message['member']['post_group'], '</li>';
 
 			// Show how many posts they have made.
 			if (!isset($context['disabled_fields']['posts']))
 				echo '
-										<li class="postcount">', $txt['member_postcount'], ': ', $message['member']['posts'], '</li>';
+								<li class="postcount">', $txt['member_postcount'], ': ', $message['member']['posts'], '</li>';
 
 			// Is karma display enabled?  Total or +/-?
 			if ($modSettings['karmaMode'] == '1')
 				echo '
-										<li class="karma">', $modSettings['karmaLabel'], ' ', $message['member']['karma']['good'] - $message['member']['karma']['bad'], '</li>';
+								<li class="karma">', $modSettings['karmaLabel'], ' ', $message['member']['karma']['good'] - $message['member']['karma']['bad'], '</li>';
 			elseif ($modSettings['karmaMode'] == '2')
 				echo '
-										<li class="karma">', $modSettings['karmaLabel'], ' +', $message['member']['karma']['good'], '/-', $message['member']['karma']['bad'], '</li>';
+								<li class="karma">', $modSettings['karmaLabel'], ' +', $message['member']['karma']['good'], '/-', $message['member']['karma']['bad'], '</li>';
 
 			// Is this user allowed to modify this member's karma?
 			if ($message['member']['karma']['allow'])
 				echo '
-										<li class="karma_allow">
-											<a href="', $scripturl, '?action=modifykarma;sa=applaud;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.' . $context['start'], ';m=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaApplaudLabel'], '</a>
-											<a href="', $scripturl, '?action=modifykarma;sa=smite;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';m=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaSmiteLabel'], '</a>
-										</li>';
+								<li class="karma_allow">
+									<a href="', $scripturl, '?action=modifykarma;sa=applaud;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.' . $context['start'], ';m=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaApplaudLabel'], '</a>
+									<a href="', $scripturl, '?action=modifykarma;sa=smite;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';m=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaSmiteLabel'], '</a>
+								</li>';
 
 			// Show the member's gender icon?
 			if (!empty($settings['show_gender']) && $message['member']['gender']['image'] != '' && !isset($context['disabled_fields']['gender']))
 				echo '
-										<li class="gender">', $txt['gender'], ': ', $message['member']['gender']['image'], '</li>';
+								<li class="gender">', $txt['gender'], ': ', $message['member']['gender']['image'], '</li>';
 
 			// Show their personal text?
 			if (!empty($settings['show_blurb']) && $message['member']['blurb'] != '')
 				echo '
-										<li class="blurb">', $message['member']['blurb'], '</li>';
+								<li class="blurb">', $message['member']['blurb'], '</li>';
 
 			// Any custom fields to show as icons?
 			if (!empty($message['member']['custom_fields']))
@@ -286,52 +305,51 @@ function template_main()
 							{
 								$shown = true;
 								echo '
-										<li class="im_icons">
-											<ol>';
+								<li class="im_icons">
+									<ol>';
 							}
 					echo '
-												<li>', $custom['value'], '</li>';
+										<li>', $custom['value'], '</li>';
 				}
 
 			if ($shown)
 				echo '
-											</ol>
-										</li>';
+									</ol>
+								</li>';
 			}
 
 			// This shows the popular messaging icons.
 			if ($message['member']['has_messenger'] && $message['member']['can_view_profile'])
 				echo '
-										<li class="im_icons">
-											<hr />
-											<ol>
-												', !empty($message['member']['icq']['link']) ? '<li>' . $message['member']['icq']['link'] . '</li>' : '', '
-												', !empty($message['member']['skype']['link']) ? '<li>' . $message['member']['skype']['link'] . '</li>' : '', '
-												', !empty($message['member']['aim']['link']) ? '<li>' . $message['member']['aim']['link'] . '</li>' : '', '
-												', !empty($message['member']['yim']['link']) ? '<li>' . $message['member']['yim']['link'] . '</li>' : '', '
-											</ol>
-										</li>';
+								<li class="im_icons">
+									<ol>
+										', !empty($message['member']['icq']['link']) ? '<li>' . $message['member']['icq']['link'] . '</li>' : '', '
+										', !empty($message['member']['skype']['link']) ? '<li>' . $message['member']['skype']['link'] . '</li>' : '', '
+										', !empty($message['member']['aim']['link']) ? '<li>' . $message['member']['aim']['link'] . '</li>' : '', '
+										', !empty($message['member']['yim']['link']) ? '<li>' . $message['member']['yim']['link'] . '</li>' : '', '
+									</ol>
+								</li>';
 
 			// Show the website and email address buttons.
 			if ($message['member']['show_profile_buttons'])
 			{
 				echo '
-										<li class="profile">
-											<ol>';
+								<li class="profile">
+									<ol class="profile_icons">';
 
 				// Don't show an icon if they haven't specified a website.
 				if ($message['member']['website']['url'] != '' && !isset($context['disabled_fields']['website']))
 					echo '
-												<li><a href="', $message['member']['website']['url'], '" title="' . $message['member']['website']['title'] . '" target="_blank" class="new_win">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/www_sm.png" alt="' . $message['member']['website']['title'] . '" />' : $txt['www']), '</a></li>';
+										<li><a href="', $message['member']['website']['url'], '" title="' . $message['member']['website']['title'] . '" target="_blank" class="new_win">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/www_sm.png" alt="' . $message['member']['website']['title'] . '" />' : $txt['www']), '</a></li>';
 
 				// Don't show the email address if they want it hidden.
 				if (in_array($message['member']['show_email'], array('yes', 'yes_permission_override', 'no_through_forum')) && $context['can_send_email'])
 					echo '
-												<li><a href="', $scripturl, '?action=emailuser;sa=email;msg=', $message['id'], '" rel="nofollow">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.png" alt="' . $txt['email'] . '" title="' . $txt['email'] . '" />' : $txt['email']), '</a></li>';
+										<li><a href="', $scripturl, '?action=emailuser;sa=email;msg=', $message['id'], '" rel="nofollow">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.png" alt="' . $txt['email'] . '" title="' . $txt['email'] . '" />' : $txt['email']), '</a></li>';
 
 					echo '
-											</ol>
-										</li>';
+									</ol>
+								</li>';
 			}
 
 			// Any custom fields for standard placement?
@@ -340,7 +358,7 @@ function template_main()
 				foreach ($message['member']['custom_fields'] as $custom)
 					if (empty($custom['placement']) || empty($custom['value']))
 						echo '
-										<li class="custom">', $custom['title'], ': ', $custom['value'], '</li>';
+								<li class="custom">', $custom['title'], ': ', $custom['value'], '</li>';
 			}
 
 		}
@@ -348,61 +366,27 @@ function template_main()
 		// Otherwise, show the guest's email.
 		elseif (!empty($message['member']['email']) && in_array($message['member']['show_email'], array('yes', 'yes_permission_override', 'no_through_forum')) && $context['can_send_email'])
 			echo '
-										<li class="email"><a href="', $scripturl, '?action=emailuser;sa=email;msg=', $message['id'], '" rel="nofollow">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.png" alt="' . $txt['email'] . '" title="' . $txt['email'] . '" />' : $txt['email']), '</a></li>';
-
-		// Stuff for the staff to wallop them with.
-		echo '
-										<li style="height: 2px; background: #ccc; box-shadow: 0 -1px 0 #fff inset;"></li>';
-
-			//echo '
-			//						<img class="centericon" src="', $settings['images_url'], '/ip.png" alt="" />';
+								<li class="email"><a href="', $scripturl, '?action=emailuser;sa=email;msg=', $message['id'], '" rel="nofollow">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.png" alt="' . $txt['email'] . '" title="' . $txt['email'] . '" />' : $txt['email']), '</a></li>';
 
 		// Show the IP to this user for this post - because you can moderate?
 		if (!empty($context['can_moderate_forum']) && !empty($message['member']['ip']))
 			echo '
-										<li class="poster_ip"><a href="', $scripturl, '?action=', !empty($message['member']['is_guest']) ? 'trackip' : 'profile;area=tracking;sa=ip;u=' . $message['member']['id'], ';searchip=', $message['member']['ip'], '">', $message['member']['ip'], '</a> <a href="', $scripturl, '?action=helpadmin;help=see_admin_ip" onclick="return reqOverlayDiv(this.href);" class="help">(?)</a></li>';
+								<li class="poster_ip"><a href="', $scripturl, '?action=', !empty($message['member']['is_guest']) ? 'trackip' : 'profile;area=tracking;sa=ip;u=' . $message['member']['id'], ';searchip=', $message['member']['ip'], '">', $message['member']['ip'], '</a> <a href="', $scripturl, '?action=helpadmin;help=see_admin_ip" onclick="return reqOverlayDiv(this.href);" class="help">(?)</a></li>';
 
 		// Or, should we show it because this is you?
 		elseif ($message['can_see_ip'])
 			echo '
-										<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $message['member']['ip'], '</a></li>';
+								<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $message['member']['ip'], '</a></li>';
 
 		// Okay, are you at least logged in?  Then we can show something about why IPs are logged...
 		elseif (!$context['user']['is_guest'])
 			echo '
-										<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $txt['logged'], '</a></li>';
+								<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $txt['logged'], '</a></li>';
 
 		// Otherwise, you see NOTHING!
 		else
 			echo '
-										<li class="poster_ip">', $txt['logged'], '</li>';
-
-		// Done with the popup of information about the poster... on to the post itself.
-			echo '
-									</ul>
-								</li>';
-
-		// Show the user's avatar.
-		if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image']))
-			echo '
-								<li class="avatar">
-									<a href="', $scripturl, '?action=profile;u=', $message['member']['id'], '">', $message['member']['avatar']['image'], '</a>
-								</li>';
-
-		// Show the post group icons, but not for guests.
-		if (!$message['member']['is_guest'])
-			echo '
-								<li class="icons">', $message['member']['group_icons'], '</li>';
-
-		// Show the member's primary group (like 'Administrator') if they have one.
-		if (!empty($message['member']['group']))
-			echo '
-								<li class="membergroup">', $message['member']['group'], '</li>';
-
-		// Show the member's custom title, if they have one.
-		if (!empty($message['member']['title']))
-			echo '
-								<li class="title">', $message['member']['title'], '</li>';
+								<li class="poster_ip">', $txt['logged'], '</li>';
 
 		// Show online and offline buttons? PHP could do with a little bit of cleaning up here for brevity, but it works.
 		// The plan is to make these buttons act sensibly, and link to your own inbox in your own posts (with new PM notification).

+ 4 - 0
Themes/default/Errors.template.php

@@ -58,6 +58,10 @@ function template_error_log()
 				<div class="floatleft">
 					', $context['page_index'], '
 				</div>
+				<div class="floatright" style="margin-top: 1ex">
+					<input type="submit" name="removeSelection" value="' . $txt['remove_selection'] . '" onclick="return confirm(\'' . $txt['remove_selection_confirm'] . '\');" class="button_submit" />
+					<input type="submit" name="delall" value="', $context['has_filter'] ? $txt['remove_filtered_results'] : $txt['remove_all'], '" onclick="return confirm(\'', $context['has_filter'] ? $txt['remove_filtered_results_confirm'] : $txt['sure_about_errorlog_remove'], '\');" class="button_submit" />
+				</div>
 			</div>
 			<table border="0" cellspacing="1" class="table_grid" id="error_log">
 				<tr>

+ 2 - 2
Themes/default/ManageNews.template.php

@@ -131,9 +131,9 @@ function template_email_members()
 				{
 					sId: \'advanced_panel_toggle\',
 					srcExpanded: smf_images_url + \'/collapse.png\',
-					altExpanded: ', JavaScriptEscape($txt['upshrink_description']), ',
+					altExpanded: ', JavaScriptEscape($txt['hide']), ',
 					srcCollapsed: smf_images_url + \'/expand.png\',
-					altCollapsed: ', JavaScriptEscape($txt['upshrink_description']), '
+					altCollapsed: ', JavaScriptEscape($txt['show']), '
 				}
 			],
 			aSwapLinks: [

+ 2 - 2
Themes/default/ManagePermissions.template.php

@@ -206,9 +206,9 @@ function template_permission_index()
 				{
 					sId: \'permissions_panel_toggle\',
 					srcExpanded: smf_images_url + \'/collapse.png\',
-					altExpanded: ', JavaScriptEscape($txt['upshrink_description']), ',
+					altExpanded: ', JavaScriptEscape($txt['hide']), ',
 					srcCollapsed: smf_images_url + \'/expand.png\',
-					altCollapsed: ', JavaScriptEscape($txt['upshrink_description']), '
+					altCollapsed: ', JavaScriptEscape($txt['show']), '
 				}
 			],
 			aSwapLinks: [

+ 2 - 2
Themes/default/Packages.template.php

@@ -630,9 +630,9 @@ function template_browse()
 				{
 					sId: \'advanced_panel_toggle\',
 					srcExpanded: smf_images_url + \'/collapse.png\',
-					altExpanded: ', JavaScriptEscape($txt['upshrink_description']), ',
+					altExpanded: ', JavaScriptEscape($txt['hide']), ',
 					srcCollapsed: smf_images_url + \'/expand.png\',
-					altCollapsed: ', JavaScriptEscape($txt['upshrink_description']), '
+					altCollapsed: ', JavaScriptEscape($txt['show']), '
 				}
 			],
 			aSwapLinks: [

+ 57 - 60
Themes/default/PersonalMessage.template.php

@@ -175,7 +175,7 @@ function template_folder()
 			echo '
 	<div class="', $window_class, '">
 		<div class="poster">
-			<ul class="dropmenu">
+			<ul>
 				<li>
 					<h4>
 						<a id="msg', $message['id'], '"></a>';
@@ -195,12 +195,27 @@ function template_folder()
 
 		echo '
 					</h4>
-					<ul class="smalltext" id="msg_', $message['id'], '_extra_info">';
+				</li>';
+
+			// Show the user's avatar.
+			if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image']))
+				echo '
+				<li class="avatar">
+					<a href="', $scripturl, '?action=profile;u=', $message['member']['id'], '">', $message['member']['avatar']['image'], '</a>
+				</li>';
+
+			if (!$message['member']['is_guest'])
+				echo '
+				<li class="icons">', $message['member']['group_icons'], '</li>';
+			// Show the member's primary group (like 'Administrator') if they have one.
+			if (isset($message['member']['group']) && $message['member']['group'] != '')
+				echo '
+				<li class="membergroup">', $message['member']['group'], '</li>';
 
 			// Show the member's custom title, if they have one.
 			if (isset($message['member']['title']) && $message['member']['title'] != '')
 				echo '
-						<li class="title">', $message['member']['title'], '</li>';
+				<li class="title">', $message['member']['title'], '</li>';
 
 			// Don't show these things for guests.
 			if (!$message['member']['is_guest'])
@@ -208,37 +223,37 @@ function template_folder()
 				// 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.
 				if ((empty($settings['hide_post_group']) || $message['member']['group'] == '') && $message['member']['post_group'] != '')
 					echo '
-						<li class="postgroup">', $message['member']['post_group'], '</li>';
+				<li class="postgroup">', $message['member']['post_group'], '</li>';
 
 				// Show how many posts they have made.
 				if (!isset($context['disabled_fields']['posts']))
 					echo '
-						<li class="postcount">', $txt['member_postcount'], ': ', $message['member']['posts'], '</li>';
+				<li class="postcount">', $txt['member_postcount'], ': ', $message['member']['posts'], '</li>';
 
 				// Is karma display enabled?  Total or +/-?
 				if ($modSettings['karmaMode'] == '1')
 					echo '
-						<li class="karma">', $modSettings['karmaLabel'], ' ', $message['member']['karma']['good'] - $message['member']['karma']['bad'], '</li>';
+				<li class="karma">', $modSettings['karmaLabel'], ' ', $message['member']['karma']['good'] - $message['member']['karma']['bad'], '</li>';
 				elseif ($modSettings['karmaMode'] == '2')
 					echo '
-						<li class="karma">', $modSettings['karmaLabel'], ' +', $message['member']['karma']['good'], '/-', $message['member']['karma']['bad'], '</li>';
+				<li class="karma">', $modSettings['karmaLabel'], ' +', $message['member']['karma']['good'], '/-', $message['member']['karma']['bad'], '</li>';
 
 				// Is this user allowed to modify this member's karma?
 				if ($message['member']['karma']['allow'])
 					echo '
-						<li class="karma_allow">
-							<a href="', $scripturl, '?action=modifykarma;sa=applaud;uid=', $message['member']['id'], ';f=', $context['folder'], ';start=', $context['start'], $context['current_label_id'] != -1 ? ';l=' . $context['current_label_id'] : '', ';pm=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaApplaudLabel'], '</a> <a href="', $scripturl, '?action=modifykarma;sa=smite;uid=', $message['member']['id'], ';f=', $context['folder'], ';start=', $context['start'], $context['current_label_id'] != -1 ? ';l=' . $context['current_label_id'] : '', ';pm=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaSmiteLabel'], '</a>
-						</li>';
+				<li class="karma_allow">
+					<a href="', $scripturl, '?action=modifykarma;sa=applaud;uid=', $message['member']['id'], ';f=', $context['folder'], ';start=', $context['start'], $context['current_label_id'] != -1 ? ';l=' . $context['current_label_id'] : '', ';pm=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaApplaudLabel'], '</a> <a href="', $scripturl, '?action=modifykarma;sa=smite;uid=', $message['member']['id'], ';f=', $context['folder'], ';start=', $context['start'], $context['current_label_id'] != -1 ? ';l=' . $context['current_label_id'] : '', ';pm=', $message['id'], ';', $context['session_var'], '=', $context['session_id'], '">', $modSettings['karmaSmiteLabel'], '</a>
+				</li>';
 
 				// Show the member's gender icon?
 				if (!empty($settings['show_gender']) && $message['member']['gender']['image'] != '' && !isset($context['disabled_fields']['gender']))
 					echo '
-						<li class="gender">', $txt['gender'], ': ', $message['member']['gender']['image'], '</li>';
+				<li class="gender">', $txt['gender'], ': ', $message['member']['gender']['image'], '</li>';
 
 				// Show their personal text?
 				if (!empty($settings['show_blurb']) && $message['member']['blurb'] != '')
 					echo '
-						<li class="blurb">', $message['member']['blurb'], '</li>';
+				<li class="blurb">', $message['member']['blurb'], '</li>';
 
 				// Any custom fields to show as icons?
 				if (!empty($message['member']['custom_fields']))
@@ -252,83 +267,83 @@ function template_folder()
 						{
 							$shown = true;
 							echo '
-						<li class="im_icons">
-							<ul>';
+				<li class="im_icons">
+					<ul>';
 						}
 						echo '
-								<li>', $custom['value'], '</li>';
+						<li>', $custom['value'], '</li>';
 					}
 					if ($shown)
 					echo '
-							</ul>
-						</li>';
+					</ul>
+				</li>';
 				}
 
 				// This shows the popular messaging icons.
 				if ($message['member']['has_messenger'] && $message['member']['can_view_profile'])
 					echo '
-						<li class="im_icons">
-							<ul>
-								', !isset($context['disabled_fields']['icq']) && !empty($message['member']['icq']['link']) ? '<li>' . $message['member']['icq']['link'] . '</li>' : '', '
-								', !isset($context['disabled_fields']['skype']) && !empty($message['member']['skype']['link']) ? '<li>' . $message['member']['skype']['link'] . '</li>' : '', '
-								', !isset($context['disabled_fields']['aim']) && !empty($message['member']['aim']['link']) ? '<li>' . $message['member']['aim']['link'] . '</li>' : '', '
-								', !isset($context['disabled_fields']['yim']) && !empty($message['member']['yim']['link']) ? '<li>' . $message['member']['yim']['link'] . '</li>' : '', '
-							</ul>
-						</li>';
+				<li class="im_icons">
+					<ul>
+						', !isset($context['disabled_fields']['icq']) && !empty($message['member']['icq']['link']) ? '<li>' . $message['member']['icq']['link'] . '</li>' : '', '
+						', !isset($context['disabled_fields']['skype']) && !empty($message['member']['skype']['link']) ? '<li>' . $message['member']['skype']['link'] . '</li>' : '', '
+						', !isset($context['disabled_fields']['aim']) && !empty($message['member']['aim']['link']) ? '<li>' . $message['member']['aim']['link'] . '</li>' : '', '
+						', !isset($context['disabled_fields']['yim']) && !empty($message['member']['yim']['link']) ? '<li>' . $message['member']['yim']['link'] . '</li>' : '', '
+					</ul>
+				</li>';
 
 				// Stuff for the staff to wallop them with.
 				echo '
-						<li><hr /></li>';
+				<li>';
 
 				if ($message['can_report'])
 					echo '
-						<li class="report_link"><a href="' . $scripturl . '?action=pm;sa=report;l=' . $context['current_label_id'] . ';pmsg=' . $message['id'] . '">' . $txt['pm_report_to_admin'] . '</a></li>';
+				<li class="report_link"><a href="' . $scripturl . '?action=pm;sa=report;l=' . $context['current_label_id'] . ';pmsg=' . $message['id'] . '">' . $txt['pm_report_to_admin'] . '</a></li>';
 
 		// Show the IP to this user for this post - because you can moderate?
 		if (!empty($context['can_moderate_forum']) && !empty($message['member']['ip']))
 			echo '
-										<li class="poster_ip"><a href="', $scripturl, '?action=', !empty($message['member']['is_guest']) ? 'trackip' : 'profile;area=tracking;sa=ip;u=' . $message['member']['id'], ';searchip=', $message['member']['ip'], '">', $message['member']['ip'], '</a> <a href="', $scripturl, '?action=helpadmin;help=see_admin_ip" onclick="return reqOverlayDiv(this.href);" class="help">(?)</a></li>';
+				<li class="poster_ip"><a href="', $scripturl, '?action=', !empty($message['member']['is_guest']) ? 'trackip' : 'profile;area=tracking;sa=ip;u=' . $message['member']['id'], ';searchip=', $message['member']['ip'], '">', $message['member']['ip'], '</a> <a href="', $scripturl, '?action=helpadmin;help=see_admin_ip" onclick="return reqOverlayDiv(this.href);" class="help">(?)</a></li>';
 
 		// Or, should we show it because this is you?
 		elseif ($message['can_see_ip'])
 			echo '
-										<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $message['member']['ip'], '</a></li>';
+				<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $message['member']['ip'], '</a></li>';
 
 		// Okay, you are logged in, then we can show something about why IPs are logged...
 		else
 			echo '
-										<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $txt['logged'], '</a></li>';
+				<li class="poster_ip"><a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqOverlayDiv(this.href);" class="help">', $txt['logged'], '</a></li>';
 
 				// Show the profile, website, email address, and personal message buttons.
 				if ($message['member']['show_profile_buttons'])
 				{
 					echo '
-						<li class="profile">
-							<ul>';
+				<li class="profile">
+					<ul class="profile_icons">';
 
 					// Show the profile button
 					if ($message['member']['can_view_profile'])
 						echo '
-								<li><a href="', $message['member']['href'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/icons/profile_sm.png" alt="' . $txt['view_profile'] . '" title="' . $txt['view_profile'] . '" />' : $txt['view_profile']), '</a></li>';
+						<li><a href="', $message['member']['href'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/icons/profile_sm.png" alt="' . $txt['view_profile'] . '" title="' . $txt['view_profile'] . '" />' : $txt['view_profile']), '</a></li>';
 
 					// Don't show an icon if they haven't specified a website.
 					if ($message['member']['website']['url'] != '' && !isset($context['disabled_fields']['website']))
 						echo '
-								<li><a href="', $message['member']['website']['url'], '" title="' . $message['member']['website']['title'] . '" target="_blank" class="new_win">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/www_sm.png" alt="' . $message['member']['website']['title'] . '" />' : $txt['www']), '</a></li>';
+						<li><a href="', $message['member']['website']['url'], '" title="' . $message['member']['website']['title'] . '" target="_blank" class="new_win">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/www_sm.png" alt="' . $message['member']['website']['title'] . '" />' : $txt['www']), '</a></li>';
 
 					// Don't show the email address if they want it hidden.
 					if (in_array($message['member']['show_email'], array('yes', 'yes_permission_override', 'no_through_forum')) && $context['can_send_email'])
 						echo '
-								<li><a href="', $scripturl, '?action=emailuser;sa=email;uid=', $message['member']['id'], '" rel="nofollow">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.png" alt="' . $txt['email'] . '" title="' . $txt['email'] . '" />' : $txt['email']), '</a></li>';
+						<li><a href="', $scripturl, '?action=emailuser;sa=email;uid=', $message['member']['id'], '" rel="nofollow">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.png" alt="' . $txt['email'] . '" title="' . $txt['email'] . '" />' : $txt['email']), '</a></li>';
 
 					// Since we know this person isn't a guest, you *can* message them.
 					if ($context['can_send_pm'])
 						echo '
-								<li><a href="', $scripturl, '?action=pm;sa=send;u=', $message['member']['id'], '" title="', $message['member']['online']['is_online'] ? $txt['pm_online'] : $txt['pm_offline'], '">', $settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/im_' . ($message['member']['online']['is_online'] ? 'on' : 'off') . '.png" alt="' . ($message['member']['online']['is_online'] ? $txt['pm_online'] : $txt['pm_offline']) . '" />' : ($message['member']['online']['is_online'] ? $txt['pm_online'] : $txt['pm_offline']), '</a></li>';
+						<li><a href="', $scripturl, '?action=pm;sa=send;u=', $message['member']['id'], '" title="', $message['member']['online']['is_online'] ? $txt['pm_online'] : $txt['pm_offline'], '">', $settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/im_' . ($message['member']['online']['is_online'] ? 'on' : 'off') . '.png" alt="' . ($message['member']['online']['is_online'] ? $txt['pm_online'] : $txt['pm_offline']) . '" />' : ($message['member']['online']['is_online'] ? $txt['pm_online'] : $txt['pm_offline']), '</a></li>';
 
 					echo '
-							</ul>
-						</li>';
+					</ul>
+				</li>';
 				}
 
 				// Any custom fields for standard placement?
@@ -337,32 +352,14 @@ function template_folder()
 					foreach ($message['member']['custom_fields'] as $custom)
 						if (empty($custom['placement']) || empty($custom['value']))
 							echo '
-						<li class="custom">', $custom['title'], ': ', $custom['value'], '</li>';
+				<li class="custom">', $custom['title'], ': ', $custom['value'], '</li>';
 				}
 
 				// Are we showing the warning status?
 				if ($message['member']['can_see_warning'])
 				echo '
-						<li class="warning">', $context['can_issue_warning'] ? '<a href="' . $scripturl . '?action=profile;area=issuewarning;u=' . $message['member']['id'] . '">' : '', '<img src="', $settings['images_url'], '/warning_', $message['member']['warning_status'], '.png" alt="', $txt['user_warn_' . $message['member']['warning_status']], '" />', $context['can_issue_warning'] ? '</a>' : '', '<span class="warn_', $message['member']['warning_status'], '">', $txt['warn_' . $message['member']['warning_status']], '</span></li>';
+				<li class="warning">', $context['can_issue_warning'] ? '<a href="' . $scripturl . '?action=profile;area=issuewarning;u=' . $message['member']['id'] . '">' : '', '<img src="', $settings['images_url'], '/warning_', $message['member']['warning_status'], '.png" alt="', $txt['user_warn_' . $message['member']['warning_status']], '" />', $context['can_issue_warning'] ? '</a>' : '', '<span class="warn_', $message['member']['warning_status'], '">', $txt['warn_' . $message['member']['warning_status']], '</span></li>';
 			}
-			echo '
-					</ul>
-				</li>';
-
-			// Show the user's avatar.
-			if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image']))
-				echo '
-				<li class="avatar">
-					<a href="', $scripturl, '?action=profile;u=', $message['member']['id'], '">', $message['member']['avatar']['image'], '</a>
-				</li>';
-
-			if (!$message['member']['is_guest'])
-				echo '
-				<li class="icons">', $message['member']['group_icons'], '</li>';
-			// Show the member's primary group (like 'Administrator') if they have one.
-			if (isset($message['member']['group']) && $message['member']['group'] != '')
-				echo '
-				<li class="membergroup">', $message['member']['group'], '</li>';
 
 		// Show online and offline buttons? PHP could do with a little bit of cleaning up here for brevity, but it works.
 		// The plan is to make these buttons act sensibly, and link to your own inbox in your own posts (with new PM notification).
@@ -816,9 +813,9 @@ function template_search()
 					{
 						sId: \'advanced_panel_toggle\',
 						srcExpanded: smf_images_url + \'/collapse.png\',
-						altExpanded: ', JavaScriptEscape($txt['upshrink_description']), ',
+						altExpanded: ', JavaScriptEscape($txt['hide']), ',
 						srcCollapsed: smf_images_url + \'/expand.png\',
-						altCollapsed: ', JavaScriptEscape($txt['upshrink_description']), '
+						altCollapsed: ', JavaScriptEscape($txt['show']), '
 					}
 				],
 				aSwapLinks: [

+ 16 - 16
Themes/default/Profile.template.php

@@ -511,8 +511,8 @@ function template_editBuddies()
 
 	echo '
 	<div class="generic_list_wrapper" id="edit_buddies">
-		<div class="title_bar">
-			<h3 class="titlebg">
+		<div class="cat_bar">
+			<h3 class="catbg">
 				<img src="', $settings['images_url'], '/icons/online.png" alt="" class="icon" />', $txt['editBuddies'], '
 			</h3>
 		</div>
@@ -578,8 +578,8 @@ function template_editBuddies()
 	echo '
 	<form action="', $scripturl, '?action=profile;u=', $context['id_member'], ';area=lists;sa=buddies" method="post" accept-charset="', $context['character_set'], '">
 		<div class="tborder add_buddy">
-			<div class="title_bar">
-				<h3 class="titlebg">', $txt['buddy_add'], '</h3>
+			<div class="cat_bar">
+				<h3 class="catbg">', $txt['buddy_add'], '</h3>
 			</div>
 			<div class="roundframe">
 				<dl class="settings">
@@ -623,8 +623,8 @@ function template_editIgnoreList()
 
 	echo '
 	<div class="generic_list_wrapper" id="edit_buddies">
-		<div class="title_bar">
-			<h3 class="titlebg">
+		<div class="cat_bar">
+			<h3 class="catbg">
 				<img src="', $settings['images_url'], '/icons/profile_hd.png" alt="" class="icon" />', $txt['editIgnoreList'], '
 			</h3>
 		</div>
@@ -680,8 +680,8 @@ function template_editIgnoreList()
 	echo '
 	<form action="', $scripturl, '?action=profile;u=', $context['id_member'], ';area=lists;sa=ignore" method="post" accept-charset="', $context['character_set'], '">
 		<div class="tborder add_buddy">
-			<div class="title_bar">
-				<h3 class="titlebg">', $txt['ignore_add'], '</h3>
+			<div class="cat_bar">
+				<h3 class="catbg">', $txt['ignore_add'], '</h3>
 			</div>
 			<div class="roundframe">
 				<dl class="settings">
@@ -726,8 +726,8 @@ function template_trackActivity()
 	// The first table shows IP information about the user.
 	echo '
 		<div class="generic_list_wrapper">
-			<div class="title_bar">
-				<h3 class="titlebg"><strong>', $txt['view_ips_by'], ' ', $context['member']['name'], '</strong></h3>
+			<div class="cat_bar">
+				<h3 class="catbg"><strong>', $txt['view_ips_by'], ' ', $context['member']['name'], '</strong></h3>
 			</div>';
 
 	// The last IP the user used.
@@ -810,8 +810,8 @@ function template_trackIP()
 	if ($context['single_ip'])
 	{
 		echo '
-			<div class="title_bar">
-				<h3 class="titlebg">', $txt['whois_title'], ' ', $context['ip'], '</h3>
+			<div class="cat_bar">
+				<h3 class="catbg">', $txt['whois_title'], ' ', $context['ip'], '</h3>
 			</div>
 			<div class="windowbg2">
 				<div class="padding">';
@@ -825,8 +825,8 @@ function template_trackIP()
 
 	// The second table lists all the members who have been logged as using this IP address.
 	echo '
-		<div class="title_bar">
-			<h3 class="titlebg">', $txt['members_from_ip'], ' ', $context['ip'], '</h3>
+		<div class="cat_bar">
+			<h3 class="catbg">', $txt['members_from_ip'], ' ', $context['ip'], '</h3>
 		</div>';
 	if (empty($context['ips']))
 		echo '
@@ -2426,8 +2426,8 @@ function template_deleteAccount()
 	// The main containing header.
 	echo '
 		<form action="', $scripturl, '?action=profile;area=deleteaccount;save" method="post" accept-charset="', $context['character_set'], '" name="creator" id="creator">
-			<div class="title_bar">
-				<h3 class="titlebg">
+			<div class="cat_bar">
+				<h3 class="catbg">
 					<img src="', $settings['images_url'], '/icons/profile_hd.png" alt="" class="icon" />', $txt['deleteAccount'], '
 				</h3>
 			</div>';

+ 4 - 0
Themes/default/css/index.css

@@ -2151,6 +2151,10 @@ div#pollmoderation {
 .poster .dropmenu  li ul li.poster_ip a {
 	display: table-cell;
 }
+.poster .profile .profile_icons li {
+	display: table-cell;
+	padding-left: 5px;
+}
 
 /* The visible stuff below the avatar. */
 .poster>ul>li.icons, .poster li.membergroup, .poster li.title, .poster li.poster_online, .poster li.warning,

+ 1 - 1
Themes/default/languages/ManageSettings.english.php

@@ -178,7 +178,7 @@ $txt['setting_image_verification_extreme'] = 'Extreme - Angled letters, noise, l
 $txt['setting_image_verification_sample'] = 'Sample';
 $txt['setting_image_verification_nogd'] = '<strong>Note:</strong> as this server does not have the GD library installed the different complexity settings will have no effect.';
 $txt['setup_verification_questions'] = 'Verification Questions';
-$txt['setup_verification_questions_desc'] = '<span class="smalltext">If you want users to answer verification questions in order to stop spam bots you should setup a number of questions in the table below. You should pick relatively simple questions; answers are not case sensitive. You may use BBC in the questions for formatting, to remove a question simply delete the contents of that line.</span>';
+$txt['setup_verification_questions_desc'] = '<span class="smalltext">If you want users to answer verification questions in order to stop spam bots, you should setup a number of questions in the table below. You should choose questions which relate to the subject of your forum. Genuine users will be able to answer these questions, while spam bots will not. Answers are not case sensitive. You may use BBC in the questions for formatting. To remove a question simply delete the contents of that line.</span>';
 $txt['setup_verification_question'] = 'Question';
 $txt['setup_verification_answer'] = 'Answer';
 $txt['setup_verification_add_more'] = 'Add another question';

+ 3 - 0
other/upgrade.php

@@ -1126,6 +1126,9 @@ function checkLogin()
 				// Figure out the password using SMF's encryption - if what they typed is right.
 				if (isset($_REQUEST['hash_passwrd']) && strlen($_REQUEST['hash_passwrd']) == 40)
 				{
+					// This is needed for validateToken, but isn't always included for some reason...
+					include_once($sourcedir . '/Security.php');
+
 					// Challenge passed.
 					$tk = validateToken('login');
 					if ($_REQUEST['hash_passwrd'] == sha1($password . $upcontext['rid'] . $tk))

+ 47 - 1
other/upgrade_2-1_mysql.sql

@@ -413,7 +413,7 @@ CREATE TABLE IF NOT EXISTS {$db_prefix}moderator_groups (
   id_board smallint(5) unsigned NOT NULL default '0',
   id_group smallint(5) unsigned NOT NULL default '0',
   PRIMARY KEY (id_board, id_group)
-) ENGINE=MyISAM;
+) ENGINE=MyISAM{$db_collation};
 ---#
 
 /******************************************************************************/
@@ -422,4 +422,50 @@ CREATE TABLE IF NOT EXISTS {$db_prefix}moderator_groups (
 ---# Deleting integration hooks
 DELETE FROM {$db_prefix}settings
 WHERE variable LIKE 'integrate_%';
+---#
+
+/******************************************************************************/
+--- Upgrading "verification questions" feature
+/******************************************************************************/
+---# Creating qanda table
+CREATE TABLE IF NOT EXISTS {$db_prefix}qanda (
+  id_question smallint(5) unsigned NOT NULL auto_increment,
+  lngfile varchar(255) NOT NULL default '',
+  question varchar(255) NOT NULL default '',
+  answers text NOT NULL,
+  PRIMARY KEY (id_question),
+  KEY lngfile (lngfile)
+) ENGINE=MyISAM{$db_collation};
+---#
+
+---# Moving questions and answers to the new table
+---{
+$questions = array();
+$get_questions = upgrade_query("
+	SELECT body AS question, recipient_name AS answer
+	FROM {$db_prefix}log_comments
+	WHERE comment_type = 'ver_test'");
+
+	while ($row = $smcFunc['db_fetch_assoc']($get_questions))
+	{
+		$questions[] = "($language, $row[question], serialize(array($row[answer])))";
+	}
+
+	$smcFunc['db_free_result']($get_questions);
+
+	if (!empty($questions))
+	{
+		upgrade_query("
+			INSERT INTO {$db_prefix}qanda
+				(lngfile, question, answers)
+			VALUES
+				" . implode(',', $questions));
+
+		// Delete the questions from log_comments now
+		upgrade_query("
+			DELETE FROM {$db_prefix}log_comments
+			WHERE comment_type = 'ver_test'
+		");
+	}
+---}
 ---#

+ 50 - 0
other/upgrade_2-1_postgresql.sql

@@ -483,4 +483,54 @@ CREATE TABLE IF NOT EXISTS {$db_prefix}moderator_groups (
 ---#
 DELETE FROM {$db_prefix}settings
 WHERE variable LIKE 'integrate_%';
+---#
+
+/******************************************************************************/
+--- Upgrading "verification questions" feature
+/******************************************************************************/
+---# Creating qanda table
+CREATE TABLE {$db_prefix}qanda (
+  id_question smallint(5) unsigned NOT NULL auto_increment,
+  lngfile varchar(255) NOT NULL default '',
+  question varchar(255) NOT NULL default '',
+  answers text NOT NULL,
+  PRIMARY KEY (id_question),
+  KEY lngfile (lngfile)
+);
+---#
+
+---# Moving questions and answers to the new table
+---{
+	$questions = array();
+
+	$get_questions = upgrade_query("
+		SELECT body AS question, recipient_name AS answer
+		FROM {$db_prefix}log_comments
+		WHERE comment_type = 'ver_test'");
+
+	while ($row = $smcFunc['db_fetch_assoc']($get_questions))
+	{
+		$questions[] = "($language, $row[question], serialize(array($row[answer])))";
+	}
+
+	$smcFunc['db_free_result']($get_questions);
+
+	if (!empty($questions))
+	{
+		foreach ($questions as $question)
+		{
+			upgrade_query("
+				INSERT INTO {$db_prefix}qanda
+					(lngfile, question, answers)
+				VALUES
+					" . $question);
+		}
+
+		// Delete the questions from log_comments now
+		upgrade_query("
+			DELETE FROM {$db_prefix}log_comments
+			WHERE comment_type = 'ver_test'
+		");
+	}
+---}
 ---#

+ 50 - 0
other/upgrade_2-1_sqlite.sql

@@ -473,4 +473,54 @@ CREATE TABLE IF NOT EXISTS {$db_prefix}moderator_groups (
 ---#
 DELETE FROM {$db_prefix}settings
 WHERE variable LIKE 'integrate_%';
+---#
+
+/******************************************************************************/
+--- Upgrading "verification questions" feature
+/******************************************************************************/
+---# Creating qanda table
+CREATE TABLE IF NOT EXISTS {$db_prefix}qanda (
+  id_question smallint(5) unsigned NOT NULL auto_increment,
+  lngfile varchar(255) NOT NULL default '',
+  question varchar(255) NOT NULL default '',
+  answers text NOT NULL,
+  PRIMARY KEY (id_question),
+  KEY lngfile (lngfile)
+);
+---#
+
+---# Moving questions and answers to the new table
+---{
+	$questions = array();
+
+	$get_questions = upgrade_query("
+		SELECT body AS question, recipient_name AS answer
+		FROM {$db_prefix}log_comments
+		WHERE comment_type = 'ver_test'");
+
+	while ($row = $smcFunc['db_fetch_assoc']($get_questions))
+	{
+		$questions[] = "($language, $row[question], serialize(array($row[answer])))";
+	}
+
+	$smcFunc['db_free_result']($get_questions);
+
+	if (!empty($questions))
+	{
+		foreach ($questions as $question)
+		{
+			upgrade_query("
+				INSERT INTO {$db_prefix}qanda
+					(lngfile, question, answers)
+				VALUES
+					" . $question);
+		}
+
+		// Delete the questions from log_comments now
+		upgrade_query("
+			DELETE FROM {$db_prefix}log_comments
+			WHERE comment_type = 'ver_test'
+		");
+	}
+---}
 ---#