Browse Source

Merge pull request #56 from emanuele45/master

A couple of fixes here and there
emanuele45 12 years ago
parent
commit
8161ba2205

+ 0 - 4
Sources/Load.php

@@ -1618,10 +1618,6 @@ function loadTheme($id_theme = 0, $initialize = true)
 	// Initialize the theme.
 	loadSubTemplate('init', 'ignore');
 
-	// Load the compatibility stylesheet if the theme hasn't been updated for 2.0 RC2 (yet).
-	if (isset($settings['theme_version']) && (version_compare($settings['theme_version'], '2.0 RC2', '<') || strpos($settings['theme_version'], '2.0 Beta') !== false))
-		loadTemplate(false, 'compat');
-
 	// Guests may still need a name.
 	if ($context['user']['is_guest'] && empty($context['user']['name']))
 		$context['user']['name'] = $txt['guest_title'];

+ 1 - 0
Sources/ManageBoards.php

@@ -624,6 +624,7 @@ function EditBoard2()
 		$boardOptions['override_theme'] = isset($_POST['override_theme']);
 		$boardOptions['board_theme'] = (int) $_POST['boardtheme'];
 		$boardOptions['access_groups'] = array();
+		$boardOptions['deny_groups'] = array();
 
 		if (!empty($_POST['groups']))
 			foreach ($_POST['groups'] as $group => $action)

+ 11 - 0
Sources/ManagePermissions.php

@@ -1119,6 +1119,7 @@ function setPermissionLevel($level, $group, $profile = 'null')
 		'karma_edit',
 		'pm_read',
 		'pm_send',
+		'send_email_to_members',
 		'profile_view_any',
 		'profile_extra_own',
 		'profile_server_avatar',
@@ -1462,6 +1463,7 @@ function loadAllPermissions($loadType = 'classic')
 			'disable_censor' => array(false, 'general', 'disable_censor'),
 			'pm_read' => array(false, 'pm', 'use_pm_system'),
 			'pm_send' => array(false, 'pm', 'use_pm_system'),
+			'send_email_to_members' => array(false, 'pm', 'use_pm_system'),
 			'calendar_view' => array(false, 'calendar', 'view_basic_info'),
 			'calendar_post' => array(false, 'calendar', 'post_calendar'),
 			'calendar_edit' => array(true, 'calendar', 'post_calendar', 'moderate_general'),
@@ -1570,6 +1572,15 @@ function loadAllPermissions($loadType = 'classic')
 		$relabelPermissions['post_attachment'] = 'auto_approve_attachments';
 	}
 
+	// Are attachments enabled?
+	if (empty($modSettings['attachmentEnable']))
+	{
+		$hiddenPermissions[] = 'manage_attachments';
+		$hiddenPermissions[] = 'view_attachments';
+		$hiddenPermissions[] = 'post_unapproved_attachments';
+		$hiddenPermissions[] = 'post_attachment';
+	}
+
 	// Provide a practical way to modify permissions.
 	call_integration_hook('integrate_load_permissions', array(&$permissionGroups, &$permissionList, &$leftPermissionGroups, &$hiddenPermissions, &$relabelPermissions));
 

+ 6 - 0
Sources/Packages.php

@@ -338,7 +338,13 @@ function PackageInstallTest()
 		elseif ($action['type'] == 'redirect')
 			continue;
 		elseif ($action['type'] == 'error')
+		{
 			$context['has_failure'] = true;
+			if (isset($action['error_msg']) && isset($action['error_var']))
+				$context['failure_details'] = sprintf($txt['package_will_fail_' . $action['error_msg']], $action['error_var']);
+			elseif (isset($action['error_msg']))
+				$context['failure_details'] = isset($txt['package_will_fail_' . $action['error_msg']]) ? $txt['package_will_fail_' . $action['error_msg']] : $action['error_msg'];
+		}
 		elseif ($action['type'] == 'modification')
 		{
 			if (!file_exists($boarddir . '/Packages/temp/' . $context['base_path'] . $action['filename']))

+ 3 - 0
Sources/PostModeration.php

@@ -274,6 +274,7 @@ function UnapprovedPosts()
 			'alternate' => $i % 2,
 			'counter' => $context['start'] + $i,
 			'href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . '#msg' . $row['id_msg'],
+			'link' => '<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . '#msg' . $row['id_msg'] . '">' . $row['subject'] . '</a>',
 			'subject' => $row['subject'],
 			'body' => parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']),
 			'time' => timeformat($row['poster_time']),
@@ -289,10 +290,12 @@ function UnapprovedPosts()
 			'board' => array(
 				'id' => $row['id_board'],
 				'name' => $row['board_name'],
+				'link' => '<a href="' . $scripturl . '?board=' . $row['id_board'] . '.0">' . $row['board_name'] . '</a>',
 			),
 			'category' => array(
 				'id' => $row['id_cat'],
 				'name' => $row['cat_name'],
+				'link' => '<a href="', $scripturl, '#c', $row['id_cat'], '">', $row['cat_name'], '</a>',
 			),
 			'can_delete' => $can_delete,
 		);

+ 3 - 3
Sources/Security.php

@@ -1035,7 +1035,7 @@ function boardsAllowedTo($permissions, $check_access = true, $simple = true)
 	$groups = array_diff($user_info['groups'], array(3));
 
 	$request = $smcFunc['db_query']('', '
-		SELECT b.id_board, bp.add_deny
+		SELECT b.id_board, bp.add_deny' . ($simple ? '' : ', bp.permission') . '
 		FROM {db_prefix}board_permissions AS bp
 			INNER JOIN {db_prefix}boards AS b ON (b.id_profile = bp.id_profile)
 			LEFT JOIN {db_prefix}moderators AS mods ON (mods.id_board = b.id_board AND mods.id_member = {int:current_member})
@@ -1056,9 +1056,9 @@ function boardsAllowedTo($permissions, $check_access = true, $simple = true)
 		if ($simple)
 		{
 			if (empty($row['add_deny']))
-				$deny_boards[$row['permission']][] = $row['id_board'];
+				$deny_boards[] = $row['id_board'];
 			else
-				$boards[$row['permission']][] = $row['id_board'];
+				$boards[] = $row['id_board'];
 		}
 		else
 		{

+ 125 - 115
Sources/Subs-Package.php

@@ -1179,142 +1179,152 @@ function parsePackageInfo(&$packageXML, $testing_only = true, $method = 'install
 				'type' => 'error',
 			);
 		}
-
-		$this_action = &$return[];
-		$this_action = array(
-			'type' => $actionType,
-			'filename' => $action->fetch('@name'),
-			'description' => $action->fetch('.')
-		);
-
-		// If there is a destination, make sure it makes sense.
-		if (substr($actionType, 0, 6) != 'remove')
-		{
-			$this_action['unparsed_destination'] = $action->fetch('@destination');
-			$this_action['destination'] = parse_path($action->fetch('@destination')) . '/' . basename($this_action['filename']);
-		}
-		else
+		elseif (in_array($actionType, array('require-file', 'remove-file', 'require-dir', 'remove-dir', 'move-file', 'move-dir', 'create-file', 'create-dir')))
 		{
-			$this_action['unparsed_filename'] = $this_action['filename'];
-			$this_action['filename'] = parse_path($this_action['filename']);
-		}
-
-		// If we're moving or requiring (copying) a file.
-		if (substr($actionType, 0, 4) == 'move' || substr($actionType, 0, 7) == 'require')
-		{
-			if ($action->exists('@from'))
-				$this_action['source'] = parse_path($action->fetch('@from'));
-			else
-				$this_action['source'] = $temp_path . $this_action['filename'];
-		}
+			$this_action = &$return[];
+			$this_action = array(
+				'type' => $actionType,
+				'filename' => $action->fetch('@name'),
+				'description' => $action->fetch('.')
+			);
 
-		// Check if these things can be done. (chmod's etc.)
-		if ($actionType == 'create-dir')
-		{
-			if (!mktree($this_action['destination'], false))
+			// If there is a destination, make sure it makes sense.
+			if (substr($actionType, 0, 6) != 'remove')
 			{
-				$temp = $this_action['destination'];
-				while (!file_exists($temp) && strlen($temp) > 1)
-					$temp = dirname($temp);
-
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $temp
-				);
+				$this_action['unparsed_destination'] = $action->fetch('@destination');
+				$this_action['destination'] = parse_path($action->fetch('@destination')) . '/' . basename($this_action['filename']);
 			}
-		}
-		elseif ($actionType == 'create-file')
-		{
-			if (!mktree(dirname($this_action['destination']), false))
+			else
 			{
-				$temp = dirname($this_action['destination']);
-				while (!file_exists($temp) && strlen($temp) > 1)
-					$temp = dirname($temp);
+				$this_action['unparsed_filename'] = $this_action['filename'];
+				$this_action['filename'] = parse_path($this_action['filename']);
+			}
 
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $temp
-				);
+			// If we're moving or requiring (copying) a file.
+			if (substr($actionType, 0, 4) == 'move' || substr($actionType, 0, 7) == 'require')
+			{
+				if ($action->exists('@from'))
+					$this_action['source'] = parse_path($action->fetch('@from'));
+				else
+					$this_action['source'] = $temp_path . $this_action['filename'];
 			}
 
-			if (!is_writable($this_action['destination']) && (file_exists($this_action['destination']) || !is_writable(dirname($this_action['destination']))))
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $this_action['destination']
-				);
-		}
-		elseif ($actionType == 'require-dir')
-		{
-			if (!mktree($this_action['destination'], false))
+			// Check if these things can be done. (chmod's etc.)
+			if ($actionType == 'create-dir')
 			{
-				$temp = $this_action['destination'];
-				while (!file_exists($temp) && strlen($temp) > 1)
-					$temp = dirname($temp);
+				if (!mktree($this_action['destination'], false))
+				{
+					$temp = $this_action['destination'];
+					while (!file_exists($temp) && strlen($temp) > 1)
+						$temp = dirname($temp);
 
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $temp
-				);
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $temp
+					);
+				}
 			}
-		}
-		elseif ($actionType == 'require-file')
-		{
-			if ($action->exists('@theme'))
-				$this_action['theme_action'] = $action->fetch('@theme');
-
-			if (!mktree(dirname($this_action['destination']), false))
+			elseif ($actionType == 'create-file')
 			{
-				$temp = dirname($this_action['destination']);
-				while (!file_exists($temp) && strlen($temp) > 1)
-					$temp = dirname($temp);
+				if (!mktree(dirname($this_action['destination']), false))
+				{
+					$temp = dirname($this_action['destination']);
+					while (!file_exists($temp) && strlen($temp) > 1)
+						$temp = dirname($temp);
 
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $temp
-				);
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $temp
+					);
+				}
+
+				if (!is_writable($this_action['destination']) && (file_exists($this_action['destination']) || !is_writable(dirname($this_action['destination']))))
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $this_action['destination']
+					);
 			}
+			elseif ($actionType == 'require-dir')
+			{
+				if (!mktree($this_action['destination'], false))
+				{
+					$temp = $this_action['destination'];
+					while (!file_exists($temp) && strlen($temp) > 1)
+						$temp = dirname($temp);
 
-			if (!is_writable($this_action['destination']) && (file_exists($this_action['destination']) || !is_writable(dirname($this_action['destination']))))
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $this_action['destination']
-				);
-		}
-		elseif ($actionType == 'move-dir' || $actionType == 'move-file')
-		{
-			if (!mktree(dirname($this_action['destination']), false))
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $temp
+					);
+				}
+			}
+			elseif ($actionType == 'require-file')
 			{
-				$temp = dirname($this_action['destination']);
-				while (!file_exists($temp) && strlen($temp) > 1)
-					$temp = dirname($temp);
+				if ($action->exists('@theme'))
+					$this_action['theme_action'] = $action->fetch('@theme');
 
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $temp
-				);
+				if (!mktree(dirname($this_action['destination']), false))
+				{
+					$temp = dirname($this_action['destination']);
+					while (!file_exists($temp) && strlen($temp) > 1)
+						$temp = dirname($temp);
+
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $temp
+					);
+				}
+
+				if (!is_writable($this_action['destination']) && (file_exists($this_action['destination']) || !is_writable(dirname($this_action['destination']))))
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $this_action['destination']
+					);
 			}
+			elseif ($actionType == 'move-dir' || $actionType == 'move-file')
+			{
+				if (!mktree(dirname($this_action['destination']), false))
+				{
+					$temp = dirname($this_action['destination']);
+					while (!file_exists($temp) && strlen($temp) > 1)
+						$temp = dirname($temp);
 
-			if (!is_writable($this_action['destination']) && (file_exists($this_action['destination']) || !is_writable(dirname($this_action['destination']))))
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $this_action['destination']
-				);
-		}
-		elseif ($actionType == 'remove-dir')
-		{
-			if (!is_writable($this_action['filename']) && file_exists($this_action['filename']))
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $this_action['filename']
-				);
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $temp
+					);
+				}
+
+				if (!is_writable($this_action['destination']) && (file_exists($this_action['destination']) || !is_writable(dirname($this_action['destination']))))
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $this_action['destination']
+					);
+			}
+			elseif ($actionType == 'remove-dir')
+			{
+				if (!is_writable($this_action['filename']) && file_exists($this_action['filename']))
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $this_action['filename']
+					);
+			}
+			elseif ($actionType == 'remove-file')
+			{
+				if (!is_writable($this_action['filename']) && file_exists($this_action['filename']))
+					$return[] = array(
+						'type' => 'chmod',
+						'filename' => $this_action['filename']
+					);
+			}
 		}
-		elseif ($actionType == 'remove-file')
+		else
 		{
-			if (!is_writable($this_action['filename']) && file_exists($this_action['filename']))
-				$return[] = array(
-					'type' => 'chmod',
-					'filename' => $this_action['filename']
-				);
+			$return[] = array(
+				'type' => 'error',
+				'error_msg' => 'unknown_action',
+				'error_var' => $actionType
+			);
 		}
 	}
 

+ 45 - 0
Sources/Subs.php

@@ -3223,6 +3223,51 @@ function template_footer()
 
 }
 
+/**
+ * Output the Javascript files
+ */
+function template_javascript($do_defered = false)
+{
+	global $context;
+
+	// Use this hook to minify/optimize Javascript files
+	call_integration_hook('pre_javascript_output');
+
+	foreach ($context['javascript_files'] as $filename => $options)
+		if ((!$do_defered && empty($options['defer'])) || ($do_defered && !empty($options['defer'])))
+			echo '
+		<script type="text/javascript" src="', $filename, '"></script>';
+
+	if (!empty($context['javascript_vars']))
+	{
+		echo '
+		<script type="text/javascript"><!-- // --><![CDATA[';
+
+		foreach ($context['javascript_vars'] as $key => $value)
+			echo '
+			var ', $key, ' = ', $value;
+
+		echo '
+		// ]]></script>';
+
+	}
+}
+
+/**
+ * Output the CSS files
+ */
+function template_css()
+{
+	global $context;
+
+	// Use this hook to minify/optimize CSS files
+	call_integration_hook('pre_css_output');
+
+	foreach ($context['css_files'] as $filename => $options)
+		echo '
+	<link rel="stylesheet" type="text/css" href="', $filename, '" />';
+}
+
 /**
  * Get an attachment's encrypted filename. If $new is true, won't check for file existence.
  * @todo this currently returns the hash if new, and the full filename otherwise.

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

@@ -364,13 +364,13 @@ function template_unapproved_posts()
 	foreach ($context['unapproved_items'] as $item)
 	{
 		echo '
-		<div class="topic">
+		<div class="topic clear">
 			<div class="', $item['alternate'] == 0 ? 'windowbg2' : 'windowbg', ' core_posts">
 				<span class="topslice"><span></span></span>
 				<div class="content">
 					<div class="counter">', $item['counter'], '</div>
 					<div class="topic_details">
-						<h5><strong><a href="', $scripturl, '#c', $item['category']['id'], '">', $item['category']['name'], '</a> / <a href="', $scripturl, '?board=', $item['board']['id'], '.0">', $item['board']['name'], '</a> / <a href="', $scripturl, '?topic=', $item['topic'], '.', $item['start'], '#msg', $item['id'], '">', $item['subject'], '</a></strong></h5>
+						<h5><strong>', $item['category']['link'], ' / ', $item['board']['link'], ' / ', $item['link'], '</strong></h5>
 						<span class="smalltext"><strong>', $txt['mc_unapproved_by'], ' ', $item['poster']['link'], ' ', $txt['on'], ':</strong> ', $item['time'], '</span>
 					</div>
 					<div class="list_posts">

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

@@ -42,7 +42,8 @@ function template_view_package()
 		echo '
 		<div class="errorbox">
 			', $txt['package_will_fail_title'], '<br />
-			', $txt['package_will_fail_warning'], '
+			', $txt['package_will_fail_warning'], 
+			!empty($context['failure_details']) ? '<br /><br /><strong>' . $context['failure_details'] . '</strong>' : '', '
 		</div>';
 	}
 

+ 0 - 2013
Themes/default/css/compat.css

@@ -1,2013 +0,0 @@
-/**************************************************************************************************
-  This file will *attempt* to make themes designed for older versions of SMF usable with SMF 2.0.
-  Unfortunately, the end result will be far from perfect, in most cases. Therefore, we encourage
-  theme designers to rebase their themes on either the default or core theme.
-**************************************************************************************************/
-
-/* Styles for the general looks of things
------------------------------------------- */
-
-/* Help popups require a different styling of the body element. */
-body#help_popup {
-	width: auto;
-	padding: 1em;
-	min-width: 0;
-}
-
-/* The main content area.
-------------------------------------------------------- */
-.content, .roundframe {
-	padding: 0.5em 1.2em;
-	margin: 0;
-	border: 1px solid #adadad;
-	color: #000;
-	background-color: #ecedf3;
-}
-.content p, .roundframe p {
-	margin: 0 0 0.5em 0;
-}
-.content fieldset {
-	border: 2px groove #fff;
-	padding: 1em;
-	margin: 0 0 0.3em 0;
-}
-
-/* Reset header margins. */
-h1, h2, h3, h4, h5, h6 {
-	font-size: 1em;
-	margin: 0;
-	padding: 0;
-}
-
-/* Alternative for u tag */
-.underline {
-	text-decoration: underline;
-}
-
-/* Common classes for easy styling.
-------------------------------------------------------- */
-
-.floatright {
-	float: right;
-}
-.floatleft {
-	float: left;
-}
-
-.flow_auto {
-	overflow: auto;
-}
-.flow_hidden {
-	overflow: hidden;
-}
-.clear {
-	clear: both;
-}
-.clear_left {
-	clear: left;
-}
-.clear_right {
-	clear: right;
-}
-
-/* Default font sizes: small (8pt), normal (10pt), and large (14pt). */
-.smalltext, tr.smalltext th {
-	font-size: 0.85em;
-	font-family: verdana, sans-serif;
-}
-.middletext {
-	font-size: 0.9em;
-	font-family: verdana, sans-serif;
-}
-.normaltext {
-	font-size: 1em;
-	line-height: 1.2em;
-}
-.largetext {
-	font-size: 1.4em;
-}
-.centertext {
-	margin: 0 auto;
-	text-align: center;
-}
-.righttext {
-	margin-left: auto;
-	margin-right: 0;
-	text-align: right;
-}
-.lefttext {
-	margin-left: 0;
-	margin-right: auto;
-	text-align: left;
-}
-/* some common padding styles */
-.padding {
-	padding: 0.7em;
-}
-.main_section, .lower_padding {
-	padding-bottom: 0.5em;
-}
-/* a quick reset list class. */
-ul.reset, ul.reset li {
-	padding: 0;
-	margin: 0;
-	list-style: none;
-}
-
-/* the page navigation area */
-.pagesection {
-	font-size: 0.9em;
-	padding: 0.5em;
-	overflow: hidden;
-}
-.pagesection .pagelinks {
-	padding: 0.5em 0;
-}
-
-/* GenericList */
-table.table_grid thead tr.catbg th.smalltext {
-	white-space: nowrap;
-}
-
-.custom_fields_above_signature {
-	clear: right;
-	padding: 1em 0 3px 0;
-	width: 98%;
-	border-top: 1px solid #666;
-	line-height: 1.4em;
-	font-size: 0.85em;
-}
-
-/* Semantic classes introduced per RC2, used as alternatives for .windowbg and .windowbg2
------------------------------------------------------------------------------------------- */
-.description {
-	padding: 1em;
-	font-size: 0.9em;
-	line-height: 1.5em;
-	border: 1px solid #bbb;
-	background: #f5f5f0;
-	margin: 0 0 1em 0;
-}
-.information {
-	padding: 0.5em 1em;
-	font-size: 0.9em;
-	line-height: 1.5em;
-	border: 1px solid #bbb;
-	background: #f0f6f0;
-	margin: 0 0 1em 0;
-}
-.information p {
-	padding: 1em;
-	margin: 0;
-}
-
-/* Lists with settings use these a lot.
-------------------------------------------------------- */
-dl.settings {
-	clear: right;
-	overflow: auto;
-	margin: 0 0 10px 0;
-	padding: 0;
-}
-dl.settings dt {
-	width: 48%;
-	float: left;
-	margin: 0 0 10px 0;
-	padding: 0;
-	clear: both;
-}
-dl.settings dt.settings_title {
-	width: 100%;
-	float: none;
-	margin: 0 0 10px 0;
-	padding: 5px 0 0 0;
-	font-weight: bold;
-	clear: both;
-}
-dl.settings dt.windowbg {
-	width: 98%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0 0 5px 0;
-	clear: both;
-}
-dl.settings dd {
-	width: 48%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0;
-}
-dl.settings img {
-	margin: 0 10px 0 0;
-}
-
-/* Styles for a very basic dropdown menu implementation.
-------------------------------------------------------- */
-div#admin_menu {
-	margin: 1em 0 0 0;
-}
-
-ul.dropmenu, ul.dropmenu li ul {
-	margin: 0;
-	padding: 0;
-	list-style: none;
-}
-ul.dropmenu {
-	margin: 0 0 0 15px;
-}
-ul.dropmenu li {
-	position: relative;
-	float: left;
-	padding-right: 4px;
-	text-transform: uppercase;
-}
-ul.dropmenu li a.firstlevel {
-	margin: 0;
-	padding: 5px;
-	cursor: default;
-	font-size: x-small;
-	color: #000;
-	background: #f0f0f0;
-	border: 1px solid #818181;
-	text-decoration: none;
-}
-ul.dropmenu li a.active {
-	padding-left: 3px;
-}
-ul.dropmenu li a.active.firstlevel {
-	background: #819db5;
-	color: #fff;
-}
-ul.dropmenu li ul li {
-	background: none;
-	width: 14em;
-	float: none;
-	margin: 0;
-	padding: 0;
-}
-ul.dropmenu li ul {
-	margin: 5px 0 0 0;
-	z-index: 90;
-	display: none;
-	position: absolute;
-	top: 100%;
-	border: 1px solid #808080;
-	background: #f8f8fb;
-}
-ul.dropmenu li ul li ul, ul.dropmenu li ul li.over ul {
-	display: none;
-	position: absolute;
-	left: -999em;
-	top: 0;
-	border: 1px solid #a0a0a0;
-	background: #fff;
-}
-ul.dropmenu li ul li a {
-	display: block;
-	padding: 5px;
-	font-size: x-small;
-	text-decoration: none;
-	background: none;
-	text-transform: none;
-	color: #000;
-}
-ul.dropmenu li ul li a.active {
-	font-weight: bold;
-}
-ul.dropmenu li ul li a:hover, #dropmenu ul li ul li:hover {
-	background: #c8e2fb;
-}
-ul.dropmenu li:hover ul, ul.dropmenu li.over ul {
-	display: block;
-}
-ul.dropmenu li ul li:hover ul, ul.dropmenu li ul li.over ul {
-	display: block;
-	left: 13em;
-}
-
-/* The dropdown menu toggle image */
-#menu_toggle {
-	float: right;
-	margin-right: 10px;
-	padding-top: 3px;
-}
-#menu_toggle span {
-	position: relative;
-	right: 5000px;
-}
-
-.generic_tab_strip {
-	margin: 0 1em 2em;
-}
-.generic_tab_strip .buttonlist {
-	float: left !important;
-}
-
-
-/* The linktree.
------------------ */
-ul.linktree {
-	clear: both;
-	list-style: none;
-	margin: 1.5em 0.5em 0.5em 0.5em;
-	padding: 0;
-}
-ul.linktree li {
-	margin: 0;
-	padding: 0;
-	display: inline;
-	font-size: 0.8em;
-}
-ul.linktree li a {
-	color: #000;
-}
-ul.linktree li a:hover {
-	color: #cc3333;
-}
-ul.linktree li span {
-	font-weight: bold;
-}
-
-/* Styles for a typical table.
-------------------------------------------------------- */
-table.table_list {
-	width: 100%;
-}
-table.table_list p {
-	padding: 0;
-	margin: 0;
-}
-table.table_list td,table.table_list th {
-	padding: 5px;
-}
-table.table_list tbody.header td {
-	padding: 0;
-}
-table.table_list tbody.content td.stats {
-	font-size: 90%;
-	width: 15%;
-	text-align: center;
-}
-table.table_list tbody.content td.lastpost {
-	line-height: 1.2em;
-	font-size: 85%;
-	width: 24%;
-}
-table.table_list tbody.content td.icon {
-	text-align: center;
-	width: 6%;
-}
-
-/* Styles for headers used in Curve templates.
-------------------------------------------------------- */
-h3.catbg, h3.catbg2, h3.titlebg, h4.titlebg, h4.catbg, div.titlebg, .table_list tbody.header td {
-	overflow: hidden;
-	line-height: 2em;
-	font-weight: bold;
-}
-h3.titlebg, h4.titlebg, h3.catbg, h4.catbg {
-	border-left: 1px solid #adadad;
-	border-right: 1px solid #adadad;
-}
-h3.titlebg, h4.catbg {
-	padding: 0 0 0 0.5em;
-}
-h3.catbg img.icon, div.titlebg img.icon, h3.catbg img {
-	float: left;
-	margin: 5px 8px 0 0;
-}
-h4.catbg a.toggle img {
-	vertical-align: middle;
-	margin: -2px 5px 0 5px;
-}
-
-/* Styles for the board index.
-------------------------------------------------- */
-
-p#stats {
-	text-align: right;
-}
-h3#newsfader {
-	font-size: 1em;
-}
-#smfNewsFader {
-	font-weight: bold;
-	line-height: 1.4em;
-	padding: 1em;
-	font-size: 1em;
-	text-align: center;
-}
-#upshrink_ic {
-	margin-right: 2ex;
-	text-align: right;
-}
-.categoryframe {
-	margin-top: 0.4em;
-}
-.categoryframe h3 {
-	margin: 0;
-}
-table.boardsframe {
-	width: 100%;
-}
-table.boardsframe td.icon {
-	text-align: center;
-	padding: 0.5em;
-	width: 6%;
-}
-table.boardsframe td.info {
-	width: 60%;
-	padding: 0;
-}
-table.boardsframe td.info h4 {
-	padding: 0.4em 0.4em 0 0.4em;
-	margin: 0;
-}
-table.boardsframe td.info p {
-	padding: 0 0.4em 0.5em 0.4em;
-	margin: 0;
-}
-table.boardsframe td.info p.moderators {
-	font-size: 0.8em;
-	font-family: verdana, sans-serif;
-}
-table.boardsframe td.stats {
-	width: 8%;
-	vertical-align: middle;
-	text-align: center;
-}
-table.boardsframe td.lastpost {
-	width: 20%;
-	vertical-align: top;
-	padding: 0.5em;
-}
-#posticons {
-	clear: both;
-	width: 100%;
-}
-#posticons .buttonlist {
-	margin-right: 1em;
-	float: right;
-}
-
-/* the newsfader */
-#smfFadeScroller {
-	text-align: center;
-	overflow: auto;
-	color: #000000; /* shouldn't be shorthand style due to JS bug in IE! */
-}
-
-/* Styles for the info center on the board index.
----------------------------------------------------- */
-
-#infocenterframe {
-	margin-top: 2em;
-	clear: both;
-}
-/* each section in infocenter has this class */
-.infocenter_section {
-	clear: both;
-}
-.infocenter_section p.section {
-	display: block;
-	margin: 0;
-	width: 30px;
-	text-align: center;
-	float: left;
-	padding: 0.5em 0 0 0;
-}
-.infocenter_section div.sectionbody {
-	margin-left: 30px;
-	padding: 0.3em;
-	border-left: 1px solid #a0a0a0;
-	min-height: 25px;
-	height: auto !important;
-}
-/* recent posts - or just one recent post */
-dl#infocenter_recentposts {
-	float: left;
-	width: 100%;
-	padding: 0;
-	margin: 0;
-}
-dl#infocenter_recentposts dt {
-	clear: left;
-	float: left;
-	padding: 0.1em;
-	width: 68%;
-	white-space: nowrap;
-	overflow: hidden;
-}
-dl#infocenter_recentposts dd {
-	clear: right;
-	float: right;
-	padding: 0.1em;
-	width: 25%;
-	text-align: right;
-	white-space: nowrap;
-	overflow: hidden;
-}
-/* login form */
-form#infocenter_login ul.horizlist label {
-	white-space: nowrap;
-	font-size: 90%;
-	font-weight: bold;
-}
-
-/* Styles for the message (topic) index.
----------------------------------------------------- */
-
-#childboards table {
-	width: 100%;
-}
-.modbuttons {
-	clear: both;
-	width: 100%;
-}
-.buttonlist, .buttonlist_bottom {
-	margin-right: 1em;
-	float: right;
-}
-#messageindex td.icon1, #messageindex td.icon2 {
-	text-align: center;
-	padding: 0.5em;
-	width: 5%;
-}
-#messageindex td.subject {
-	padding: 0.5em;
-}
-#messageindex td.starter {
-	text-align: center;
-	padding: 0.5em;
-	width: 14%;
-}
-#messageindex td.replies {
-	text-align: center;
-	padding: 0.5em;
-	width: 4%;
-}
-#messageindex td.views {
-	text-align: center;
-	padding: 0.5em;
-	width: 4%;
-}
-#messageindex td.lastpost {
-	padding: 0.5em;
-	width: 22%;
-}
-#messageindex td.moderation {
-	text-align: center;
-	padding: 0.5em;
-	width: 4%;
-}
-#topic_icons p {
-	display: block;
-	padding: 0.5em 0.5em 0.1em 0.5em;
-	margin: 0;
-	border-bottom: none;
-	font-weight: normal !important;
-}
-#topic_icons ul {
-	display: block;
-	padding: 0.5em 1em 0.1em 1em;
-	margin: 0;
-	border-bottom: none;
-	font-weight: normal !important;
-}
-#message_index_jump_to {
-	margin: 2em 4em 0 2em;
-}
-.lastpost img {
-	float: right;
-}
-
-/* Styles for the display template (topic view).
----------------------------------------------------- */
-.linked_events {
-	clear: both;
-	margin: 1em 0;
-}
-.linked_events .edit_event {
-	color: #f00;
-}
-#moderationbuttons {
-	margin-left: 0.5em;
-}
-#postbuttons .nav, #postbuttons_lower .nav {
-	margin: 0.5em 0.5em 0 0;
-	text-align: right;
-}
-#postbuttons_lower .nav {
-	margin: 0 0.5em 0.5em 0;
-}
-#postbuttons, #postbuttons_lower {
-	text-align: right;
-}
-
-/* Poll question */
-h4#pollquestion {
-	padding: 1em 0 1em 2em;
-}
-
-/* Poll vote options */
-#poll_options ul.options {
-	border-top: 1px solid #696969;
-	padding: 1em 2.5em 0 2em;
-	margin: 0 0 1em 0;
-}
-#poll_options div.submitbutton {
-	clear: both;
-	padding: 0 0 1em 2em;
-}
-
-#poll_options div.submitbutton.border {
-	border-bottom: 1px solid #696969;
-	margin: 0 0 1em 0;
-}
-
-/* Poll results */
-#poll_options dl.options {
-	border: solid #696969;
-	border-width: 1px 0;
-	padding: 1em 2.5em 0 2em;
-	margin: 0 0 1em 0;
-}
-#poll_options dl.options dt.voted {
-	font-weight: bold;
-}
-#poll_options dl.options dd {
-	margin: 0.5em 0 1em 0;
-}
-
-/* Poll notices */
-#poll_options p {
-	margin: 0 1.5em 0.2em 1.5em;
-	padding: 0 0.5em 0.5em 0.5em;
-}
-
-div#pollmoderation {
-	margin: -1em 0 0 2em;
-	padding: 0;
-}
-
-.approve_post {
-	margin: 2ex;
-	padding: 1ex;
-	border: 2px dashed #cc3344;
-	color: #000;
-	font-weight: bold;
-}
-#forumposts h3.catbg3 {
-	font-weight: normal;
-	padding: 0.4em;
-	overflow: hidden;
-}
-#forumposts h3.catbg3 img {
-	float: left;
-	vertical-align: middle;
-}
-#forumposts h3.catbg3 span {
-	float: left;
-	padding-left: 2%;
-}
-#forumposts h3.catbg3 span#top_subject {
-	padding-left: 9.5em;
-}
-.poster {
-	width: 15em;
-	float: left;
-}
-.post {
-	clear: right;
-}
-.postarea {
-	margin-left: 16em;
-}
-.messageicon {
-	float: left;
-	margin: 0 0.5em 0.5em 0;
-}
-.messageicon img {
-	padding: 6px 3px;
-}
-.keyinfo {
-	float: left;
-	clear: none;
-	width: 50%;
-	min-height: 3em;
-}
-ul.postingbuttons {
-	float: right;
-	padding: 0 0.5em 0 0;
-}
-ul.postingbuttons li {
-	float: left;
-	margin: 0 0.5em 0 0;
-}
-.modifybutton {
-	float: right;
-	margin: 0 0.5em 0.5em 0;
-}
-.attachments hr {
-	clear: both;
-	margin: 1em 0 1em 0;
-}
-.attachments {
-	padding-top: 1em;
-}
-.postfooter {
-	margin-left: 16em;
-}
-.topborder {
-	border-top: 1px solid #bbb;
-}
-.moderatorbar {
-	clear: right;
-	margin: 1em 0 0 16em;
-}
-#pollmoderation, #moderationbuttons_strip {
-	float: left;
-}
-
-/* Styles for the quick reply area.
----------------------------------------------------- */
-
-#quickReplyOptions #quickReplyWarning {
-	border: none;
-	text-align: left;
-	margin: 0;
-	width: 25%;
-	float: left;
-}
-#quickReplyOptions #quickReplyContent {
-	text-align: right;
-	float: left;
-	width: 67.5%;
-	padding: 1em;
-	border-left: 1px solid #aaa;
-}
-
-#quickReplyOptions #quickReplyContent textarea, #quickReplyOptions #quickReplyContent input {
-	margin-bottom: .5em;
-}
-
-#quickReplyWarning {
-	width: 20%;
-	float: left;
-	padding: 0.5em 1em;
-}
-#quickReplyContent {
-	width: 75%;
-	float: right;
-	padding: 0.5em 0;
-}
-#quickReplyOptions .roundframe {
-	overflow: hidden;
-}
-
-/* The jump to box */
-#display_jump_to {
-	clear: both;
-	padding: 5px;
-}
-
-/* Separator of posts. More useful in the print stylesheet. */
-#forumposts .post_separator {
-	display: none;
-}
-
-/* Styles for edit post section
----------------------------------------------------- */
-form#postmodify .roundframe {
-	padding: 0 12%;
-}
-#post_header {
-	margin-bottom: 0.5em;
-	border-bottom: 1px solid #666;
-	padding: 0.5em;
-	overflow: hidden;
-}
-#post_header dt {
-	float: left;
-	margin: 0;
-	padding: 0;
-	width: 15%;
-	margin: .3em 0;
-	font-weight: bold;
-}
-#post_header dd {
-	float: left;
-	margin: 0;
-	padding: 0;
-	width: 83%;
-	margin: .3em 0;
-}
-#post_header img {
-	vertical-align: middle;
-}
-ul.post_options {
-	margin: 0 0 0 1em;
-	padding: 0;
-	list-style: none;
-	overflow: hidden;
-}
-ul.post_options li {
-	margin: 0.2em 0;
-	width: 49%;
-	float: left;
-}
-#postAdditionalOptionsHeader {
-	margin-top: 1em;
-}
-#postMoreOptions {
-	border-bottom: 1px solid #666;
-	padding: 0.5em;
-}
-#postAttachment, #postAttachment2 {
-	overflow: hidden;
-	margin: .5em 0;
-	padding: 0;
-	border-bottom: 1px solid #666;
-	padding: 0.5em;
-}
-#postAttachment dd, #postAttachment2 dd {
-	margin: .3em 0 .3em 1em;
-}
-#postAttachment dt, #postAttachment2 dt {
-	font-weight: bold;
-}
-#postAttachment3 {
-	margin-left: 1em;
-}
-#post_confirm_strip, #shortcuts {
-	padding: 1em 0 0 0;
-}
-.post_verification {
-	margin-top: .5em;
-}
-.post_verification #verification_control {
-	margin: .3em 0 .3em 1em;
-}
-/* The BBC buttons */
-#bbcBox_message {
-	margin: 1em 0 0.5em 0;
-}
-#bbcBox_message div {
-	margin: 0.2em 0;
-	vertical-align: top;
-}
-#bbcBox_message div img {
-	margin: 0 1px 0 0;
-	vertical-align: top;
-}
-#bbcBox_message select {
-	margin: 0 2px;
-}
-/* The smiley strip */
-#smileyBox_message {
-	margin: 0.75em 0 0.5em 0;
-}
-
-/* Styles for edit event section
----------------------------------------------------- */
-#post_event .roundframe {
-	padding: 1% 12%;
-}
-#post_event fieldset {
-	margin-bottom: 0.5em;
-	border: none;
-	border-bottom: 1px solid #666;
-	padding: 0.5em;
-	clear: both;
-}
-#post_event legend {
-	font-weight: bold;
-	color: #000;
-}
-#post_event div.event_options {
-	width: 49%;
-	float: left;
-}
-#post_event ul.event_main, ul.event_options {
-	padding: 0;
-	overflow: hidden;
-}
-#post_event ul.event_main li {
-	list-style-type: none;
-	margin: 0.2em 0;
-	width: 49%;
-	float: left;
-}
-#post_event ul.event_options {
-	margin: 0;
-	padding: 0 0 .7em .7em;
-}
-#post_event ul.event_options li {
-	list-style-type: none;
-	margin: 0.3em 0 0 0;
-}
-
-/* Styles for edit poll section.
----------------------------------------------------- */
-
-#edit_poll fieldset {
-	margin-bottom: 0.5em;
-	border: none;
-	border-bottom: 1px solid #666;
-	padding: 0.5em;
-	clear: both;
-}
-#edit_poll legend {
-	font-weight: bold;
-	color: #000;
-}
-#edit_poll ul.poll_main, dl.poll_options {
-	overflow: hidden;
-	padding: 0 0 0 .7em;
-	list-style: none;
-}
-#edit_poll ul.poll_main li {
-	margin: 0.2em 0;
-}
-#edit_poll dl.poll_options dt {
-	width: 35%;
-}
-#edit_poll dl.poll_options dd {
-	width: 63%;
-}
-
-/* Styles for the recent messages section.
----------------------------------------------------- */
-
-.readbuttons {
-	clear: both;
-	width: 100%;
-}
-.buttonlist, .buttonlist_bottom {
-	margin-right: 1em;
-	float: right;
-}
-
-/* Styles for the move topic section.
----------------------------------------------------- */
-
-#move_topic dl {
-	margin-bottom: 0;
-}
-.move_topic {
-	width: 710px;
-	margin: auto;
-	text-align: left;
-}
-div.move_topic fieldset {
-	margin: 0.5em 0;
-	border: 1px solid #cacdd3;
-	padding: 0.5em;
-}
-
-/* Styles for the send topic section.
----------------------------------------------------- */
-
-fieldset.send_topic {
-	margin-bottom: 0.5em;
-	border: none;
-	padding: 0.5em;
-}
-dl.send_topic {
-	margin-bottom: 0;
-}
-dl.send_mail dt {
-	width: 35%;
-}
-dl.send_mail dd {
-	width: 64%;
-}
-
-/* Styles for the split topic section.
----------------------------------------------------- */
-
-div#selected, div#not_selected {
-	width: 49%;
-}
-ul.split_messages li.windowbg, ul.split_messages li.windowbg2 {
-	border: 1px solid #adadad;
-	padding: 1em;
-	margin: 1px;
-}
-ul.split_messages li a.split_icon {
-	padding: 0 0.5em;
-}
-ul.split_messages div.post {
-	padding: 1em 0 0 0;
-	border-top: 1px solid #fff;
-}
-
-/* Styles for the merge topic section.
----------------------------------------------------- */
-
-ul.merge_topics li {
-	list-style-type: none;
-}
-dl.merge_topic dt {
-	width: 25%;
-}
-dl.merge_topic dd {
-	width: 74%;
-}
-fieldset.merge_options {
-	margin-bottom: 0.5em;
-}
-fieldset.merge_options legend {
-	font-weight: bold;
-}
-.custom_subject {
-	margin: 0.5em 0;
-}
-
-/* Styles for the login areas.
-------------------------------------------------------- */
-.login {
-	width: 540px;
-	margin: 0 auto;
-}
-.login dl {
-	overflow: auto;
-	clear: right;
-}
-.login dt, .login dd {
-	margin: 0 0 0.4em 0;
-	width: 44%;
-	padding: 0.1em;
-}
-.login dt {
-	float: left;
-	clear: both;
-	text-align: right;
-	font-weight: bold;
-}
-.login dd {
-	width: 54%;
-	float: right;
-	text-align: left;
-}
-.login p {
-	text-align: center;
-}
-.login h3 img {
-	float: left;
-	margin: 4px 0.5em 0 0;
-}
-
-/* Styles for the registration section.
-------------------------------------------------------- */
-.register_error {
-	border: 1px dashed red;
-	padding: 5px;
-	margin: 0 1ex 1ex 1ex;
-}
-.register_error span {
-	text-decoration: underline;
-}
-
-/* Additional profile fields */
-dl.register_form {
-	margin: 0;
-	clear: right;
-	overflow: auto;
-}
-
-dl.register_form dt {
-	font-weight: normal;
-	float: left;
-	clear: both;
-	width: 50%;
-	margin: 0.5em 0 0 0;
-}
-
-dl.register_form dt strong {
-	font-weight: bold;
-}
-
-dl.register_form dt span {
-	display: block;
-}
-
-dl.register_form dd {
-	float: left;
-	width: 49%;
-	margin: 0.5em 0 0 0;
-}
-
-#confirm_buttons {
-	text-align: center;
-	padding: 1em 0;
-}
-
-.coppa_contact {
-	padding: 4px;
-	width: 32ex;
-	background-color: #fff;
-	color: #000;
-	margin-left: 5ex;
-	border: 1px solid #000;
-}
-
-/* Styles for maintenance mode.
-------------------------------------------------------- */
-#maintenance_mode {
-	width: 75%;
-	min-width: 520px;
-	text-align: left;
-}
-#maintenance_mode img.floatleft {
-	margin-right: 1em;
-}
-
-/* common for all admin sections */
-h3.titlebg img {
-	vertical-align: middle;
-	margin-right: 0.5em;
-}
-tr.titlebg td {
-	padding-left: 0.7em;
-}
-#admin_menu {
-	min-height: 2em;
-	padding-left: 0;
-}
-#admin_content {
-	clear: left;
-}
-#admin_login .centertext {
-	padding: 1em;
-}
-#admin_login .centertext .error {
-	padding: 0 0 1em 0;
-}
-
-/* Styles for sidebar menus.
-------------------------------------------------------- */
-.left_admmenu, .left_admmenu ul, .left_admmenu li {
-	padding: 0;
-	margin: 0;
-	list-style: none;
-}
-#left_admsection {
-	background-color: #ecedf3;
-	padding: 1px;
-	border: 1px solid #ADADAD;
-	width: 160px;
-	float: left;
-	margin-right: 10px;
-}
-.adm_section h4.titlebg {
-	font-size: 95%;
-	margin-bottom: 5px;
-}
-.left_admmenu li {
-	padding: 0 0 0 0.5em;
-}
-.left_admmenu {
-	margin-bottom: 1.1em;
-}
-#main_admsection {
-	margin-left: 174px;
-}
-
-tr.windowbg td, tr.windowbg2 td {
-	padding: 0.3em 0.7em;
-}
-#credits p {
-	padding: 0;
-	font-style: italic;
-	margin: 0;
-}
-
-/* Styles for generic tables.
-------------------------------------------------------- */
-.topic_table table {
-	width: 100%;
-}
-.topic_table .icon1, .topic_table .icon2, .topic_table .stats {
-	text-align: center;
-}
-#topic_icons {
-	margin-top: 1em;
-}
-#topic_icons .description {
-	margin: 0;
-}
-.topic_table table thead {
-	border-bottom: 1px solid #fff;
-}
-/* the subject column */
-.topic_table td {
-	font-size: 1em;
-}
-.topic_table td.subject {
-	padding: 4px;
-}
-.topic_table td.subject p, .topic_table td.stats, .topic_table td.lastpost {
-	font-size: 0.85em;
-	padding: 0;
-	margin: 0;
-}
-.topic_table td.lastpost, .topic_table td.lastpost {
-	font-size: 0.9em;
-	line-height: 100%;
-	padding: 4px;
-}
-.topic_table td.stickybg2 {
-	background-image: url(../images/icons/quick_sticky.png);
-	background-repeat: no-repeat;
-	background-position: 98% 4px;
-}
-.topic_table td.lockedbg2 {
-	background-image: url(../images/icons/quick_lock.png);
-	background-repeat: no-repeat;
-	background-position: 98% 4px;
-}
-.topic_table td.lastpost {
-	background-image: none;
-}
-
-/* Styles for (fatal) errors.
-------------------------------------------------- */
-
-#fatal_error {
-	border: 1px solid #aaa;
-}
-
-.errorbox {
-	padding: 1em;
-	border: 1px solid #cc3344;
-	color: #000;
-	background-color: #ffe4e9;
-	margin: 1em 0;
-}
-.errorbox h3 {
-	padding: 0;
-	margin: 0;
-	font-size: 1.1em;
-	text-decoration: underline;
-}
-.errorbox p {
-	margin: 1em 0 0 0;
-}
-.errorbox p.alert {
-	padding: 0;
-	margin: 0;
-	float: left;
-	width: 1em;
-	font-size: 1.5em;
-}
-
-/* Styles for the profile section.
-------------------------------------------------- */
-
-dl {
-	overflow: auto;
-	margin: 0;
-	padding: 0;
-}
-
-/* Fixes for the core theme */
-#profileview {
-	padding: 1px;
-	border: 1px solid #696969;
-	background-color: #ecedf3;
-}
-#profileview .content {
-	border: none;
-}
-#basicinfo .content {
-	padding: 1em;
-}
-#detailedinfo .content {
-	padding: 0.7em 1.2em;
-	border-left: 1px solid #aaa;
-}
-
-/* The basic user info on the left */
-#basicinfo {
-	width: 20%;
-	float: left;
-}
-#detailedinfo {
-	width: 78%;
-	float: right;
-}
-#basicinfo h4 {
-	font-size: 135%;
-	font-weight: 100;
-	line-height: 105%;
-	white-space: pre-wrap; /* css-2.1 */
-	word-wrap: break-word; /* Internet Explorer 5.5+ */
-	overflow: hidden;
-}
-#basicinfo h4 span.position {
-	font-size: 80%;
-	font-weight: 100;
-	display: block;
-}
-#basicinfo img.avatar {
-	display: block;
-	margin: 10px 0 0 0;
-}
-#basicinfo ul {
-	list-style-type: none;
-	margin: 10px 0 0 0;
-}
-#basicinfo ul li {
-	display: block;
-	float: left;
-	margin-right: 5px;
-	height: 20px;
-}
-#basicinfo span#userstatus {
-	display: block;
-	clear: both;
-}
-#basicinfo span#userstatus img {
-	vertical-align: middle;
-}
-#detailedinfo div.content dl, #tracking div.content dl {
-	clear: right;
-	overflow: auto;
-	margin: 0 0 18px 0;
-	padding: 0 0 15px 0;
-	border-bottom: 1px solid #ccc;
-}
-#detailedinfo div.content dt, #tracking div.content dt {
-	width: 30%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0;
-	font-weight: bold;
-	clear: both;
-}
-#detailedinfo div.content dd, #tracking div.content dd {
-	width: 70%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0;
-}
-#detailedinfo div.content dl.noborder {
-	border-bottom: 0;
-}
-#detailedinfo div.content dt.clear {
-	width: 100%;
-}
-.signature, .custom_fields_above_signature, .attachments {
-	width: 98%;
-	overflow: auto;
-	clear: right;
-	border-top: 1px solid #666;
-}
-.signature h5 {
-	font-size: 100%;
-	margin-bottom: 10px;
-}
-#personal_picture {
-	display: block;
-	margin-bottom: 0.3em;
-}
-#avatar_server_stored div {
-	float: left;
-}
-
-#main_admsection #basicinfo, #main_admsection #detailedinfo {
-	width: 100%;
-}
-#main_admsection #detailedinfo .content {
-	border: none !important;
-}
-#main_admsection #basicinfo {
-	border-bottom: 1px solid #ccc;
-}
-#main_admsection #basicinfo h4 {
-	float: left;
-}
-#main_admsection #basicinfo img.avatar {
-	float: right;
-	vertical-align: top;
-}
-#main_admsection #basicinfo ul {
-	clear: left;
-	padding-top: 10px;
-}
-#main_admsection #basicinfo span#userstatus {
-	clear: left;
-}
-#main_admsection #basicinfo p#infolinks {
-	display: none;
-	clear: both;
-}
-#main_admsection #basicinfo .botslice {
-	clear: both;
-}
-
-/* Simple feedback messages */
-div#profile_error, div#profile_success {
-	margin: 0 0 1em 0;
-	padding: 1em 2em;
-	border: 1px solid;
-}
-div#profile_error {
-	border-color: red;
-	color: red;
-	background: #fee;
-}
-
-div#profile_error span {
-	text-decoration: underline;
-}
-
-div#profile_success {
-	border-color: green;
-	color: green;
-	background: #efe;
-}
-
-/* Profile statistics */
-#generalstats div.content dt {
-	width: 50%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0;
-	font-weight: bold;
-	clear: both;
-}
-#generalstats div.content dd {
-	width: 50%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0;
-}
-
-/* Activity by time */
-.activity_stats {
-	margin: 0;
-	padding: 0;
-	list-style: none;
-}
-.activity_stats li {
-	width: 4.16%;
-	float: left;
-}
-.activity_stats li span {
-	display: block;
-	border: solid #000;
-	border-width: 1px 1px 0 0;
-	text-align: center;
-}
-.activity_stats li.last span {
-	border-right: none;
-}
-.activity_stats li div.bar {
-	margin: 0 auto;
-	width: 15px;
-}
-.activity_stats li div.bar div {
-	background: #6294CE;
-}
-.activity_stats li div.bar span {
-	position: absolute;
-	top: -1000em;
-	left: -1000em;
-}
-
-/* Most popular boards by posts and activity */
-#popularposts {
-	width: 50%;
-	float: left;
-}
-#popularactivity {
-	width: 50%;
-	float: right;
-}
-
-#popularposts div.content dt, #popularactivity div.content dt {
-	width: 65%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0;
-	font-weight: bold;
-	clear: both;
-}
-#popularposts div.content dd, #popularactivity div.content dd {
-	width: 35%;
-	float: left;
-	margin: 0 0 3px 0;
-	padding: 0;
-}
-
-.profile_pie {
-	background-image: url(../images/stats_pie.png);
-	float: left;
-	height: 20px;
-	width: 20px;
-	margin: 0 1em 0 0;
-	padding: 0;
-	text-indent: -1000em;
-}
-
-/* View posts */
-.time {
-	float: right;
-}
-.counter {
-	margin: 0 0 0 0;
-	padding: 0.2em 0.5em 0.1em 0.2em;
-	font-size: 2.2em;
-	font-weight: bold;
-	color: #354c5f;
-	float: left;
-}
-.list_posts {
-	border-top: 1px solid #adadad;
-	padding-top: 1em;
-	margin-top: 0.5em;
-}
-div.core_posts {
-	border: 1px solid #adadad;
-	margin-bottom: 3px;
-}
-div.core_posts div.content {
-	background: none;
-	border: none;
-}
-.topic h4 {
-	margin: 3px 0;
-}
-
-.mod_icons {
-	text-align: right;
-	margin-right: 1em;
-}
-
-#permissions dt {
-	width: 48%;
-	float: left;
-	line-height: 1.2em;
-	margin: 0;
-	padding: 1%;
-	clear: both;
-	border-top: 1px solid #fff;
-}
-
-#permissions dd {
-	width: 48%;
-	float: left;
-	margin: 0;
-	padding: 1%;
-	border-top: 1px solid #fff;
-}
-
-#tracking div.content dl {
-	border-bottom: 0;
-	margin: 0;
-	padding: 0;
-}
-
-#creator dl {
-	margin: 0;
-}
-#creator dt {
-	width: 40%;
-	float: left;
-	clear: both;
-	margin: 0 0 10px 0;
-}
-#creator dd {
-	float: left;
-	width: 60%;
-	margin: 0 0 10px 0;
-}
-
-.ignoreboards {
-	margin: 0;
-	padding: 0;
-	width: 49%;
-	overflow: auto;
-}
-.ignoreboards a {
-	text-decoration: underline;
-}
-.ignoreboards ul {
-	overflow: auto;
-	margin: 0 0 0 1em;
-	padding: 0;
-}
-.ignoreboards li {
-	list-style: none;
-	float: left;
-	clear: both;
-}
-
-#theme_settings {
-	overflow: auto;
-	margin: 0;
-	padding: 0;
-}
-
-#theme_settings li {
-	list-style: none;
-	margin: 10px 0;
-	padding: 0;
-}
-/*Paid Subscriptions*/
-#paid_subscription {
-	width: 100%;
-}
-#paid_subscription dl.settings {
-	margin-bottom: 0;
-}
-#paid_subscription dl.settings dd, #paid_subscription dl.settings dt {
-	margin-bottom: 4px;
-}
-/*pick theme*/
-#pick_theme {
-	width: 100%;
-	float: left;
-}
-
-/* Styles for the statistics center.
-------------------------------------------------- */
-#statistics {
-	padding-bottom: 0.5em;
-}
-#statistics h4.titlebg {
-	text-align: center;
-	margin-bottom: 5px;
-}
-#stats_left, #top_posters, #top_topics_replies, #top_topics_starter {
-	float: left;
-	width: 49.5%;
-}
-#stats_right, #top_boards, #top_topics_views, #most_online {
-	float: right;
-	width: 49.5%;
-}
-dl.stats {
-	clear: both;
-	overflow: hidden;
-	margin: 0;
-	padding: 0;
-}
-dl.stats dt {
-	width: 49%;
-	float: left;
-	margin: 0 0 4px 0;
-	line-height: 16px;
-	padding: 0;
-	clear: both;
-	font-size: 1em;
-}
-dl.stats dd {
-	text-align: right;
-	width: 50%;
-	font-size: 1em;
-	float: right;
-	margin: 0 0 4px 0;
-	line-height: 16px;
-	padding: 0;
-}
-.stats_bar {
-	float: left;
-	background-image: url(../images/bar_stats.png);
-	height: 16px;
-	font-size: 0.9em;
-	display: block;
-	text-align: left;
-	color: #fff;
-	font-weight: bold;
-	background-position: top center;
-}
-.stats_bar span {
-	padding-left: 2px;
-}
-
-/* Styles for the personal messages section.
-------------------------------------------------- */
-
-#personal_messages {
-	padding: 1px;
-}
-#personal_messages #top_subject {
-	padding-left: 11.75em !important;
-}
-#personal_messages div.labels {
-	padding: 0 1em 0 0;
-}
-#personal_messages .capacity_bar {
-	background: #fff;
-	border: 1px solid #000;
-	height: 7px;
-	width: 75%;
-	margin: 0 auto;
-}
-#personal_messages .capacity_bar div {
-	border: none;
-	height: 7px;
-}
-#personal_messages .capacity_bar div.empty {
-	background: #468008;
-}
-#personal_messages .capacity_bar div.filled {
-	background: #EEA800;
-}
-#personal_messages .capacity_bar div.full {
-	background: #A53D05;
-}
-#personal_messages .reportlinks {
-	padding: 0.5em 1.3em;
-}
-
-/* Styles for the calendar section.
-------------------------------------------------- */
-.calendar_table {
-	margin-bottom: 0.7em;
-}
-
-/* Used to indicate the current day in the grid. */
-.calendar_today {
-	background-color: #fff;
-}
-
-#month_grid {
-	width: 200px;
-	text-align: center;
-	float: left;
-}
-
-#month_grid table {
-	width: 200px;
-	border-collapse: collapse;
-	border: 1px solid #adadad;
-}
-
-#month_grid table td, #month_grid table th {
-	border: 1px solid #adadad;
-}
-
-#main_grid table {
-	width: 100%;
-	padding-bottom: 4px;
-	border-collapse: collapse;
-	border: 1px solid #adadad;
-}
-
-#main_grid table td, #main_grid table th {
-	border: 1px solid #adadad;
-}
-
-#main_grid table h3.catbg {
-	text-align: center;
-
-	border-top: 1px solid #adadad;
-	border-bottom: none;
-}
-
-#main_grid table h4 {
-	border: none;
-}
-
-#main_grid table.weeklist td.windowbg {
-	text-align: center;
-	height: 49px;
-	width: 25px;
-	font-size: large;
-	padding: 0 7px;
-	border-bottom: 1px solid #adadad;
-}
-
-#main_grid table.weeklist td.weekdays {
-	height: 49px;
-	width: 100%;
-	padding: 4px;
-	text-align: left;
-	vertical-align: middle;
-	border-right: 1px solid #adadad;
-	border-bottom: 1px solid #adadad;
-}
-
-#main_grid h3.weekly {
-	text-align: center;
-	padding-left: 0;
-	font-size: large;
-	height: 29px;
-}
-
-#main_grid h3 span.floatleft, #main_grid h3 span.floatright {
-	display: block;
-
-}
-
-#main_grid table th.days {
-	width: 14%;
-}
-
-#main_grid table td.weeks {
-	vertical-align: middle;
-	text-align: center;
-}
-
-#main_grid table td.days {
-	vertical-align: top;
-
-}
-
-a.modify_event {
-	color: red;
-}
-
-span.hidelink {
-	font-style: italic;
-}
-
-#calendar_navigation {
-	text-align: center;
-}
-
-#calendar .buttonlist_bottom {
-	border-bottom: 1px solid #adadad;
-	padding: 0 0 0 1ex;
-	margin: 0 0 1ex 0;
-}
-
-/* Styles for the memberlist section.
-------------------------------------------------- */
-#mlist_search {
-	margin: auto;
-	width: 500px;
-}
-span.memberstatsbar, span.memberstatsbar span {
-	height: 1.1em;
-	display: block;
-}
-span.memberstatsbar {
-	background: #fff;
-	border: 1px solid #888;
-}
-span.memberstatsbar span {
-	background: #fe9540;
-}
-
-/* Styles for the basic search section.
-------------------------------------------------- */
-#simple_search p {
-	padding: 0.5em;
-}
-#simple_search, #simple_search p, #advanced_search {
-	text-align: center !important;
-	margin: 0;
-}
-#search_error {
-	font-style: italic;
-	padding: 0.3em 1em;
-}
-#search_term_input {
-	font-size: 115%;
-	margin: 0 0 1em;
-}
-
-/* Styles for the advanced search section.
-------------------------------------------------- */
-#searchform fieldset {
-	text-align: left;
-	padding: 0;
-	margin: 0.5em 0;
-	border: none;
-}
-#advanced_search dl#search_options {
-	margin: 0 auto;
-	width: 600px;
-	padding-top: 1em;
-	overflow: hidden;
-}
-#advanced_search dt {
-	clear: both;
-	float: left;
-	padding: 0.2em;
-	text-align: right;
-	width: 20%;
-}
-#advanced_search dd {
-	width: 75%;
-	float: left;
-	padding: 0.2em;
-	margin: 0 0 0 0.5em;
-	text-align: left;
-}
-#searchform p.clear {
-	clear: both;
-}
-
-/* Boards picker */
-#searchform fieldset div#searchBoardsExpand ul {
-	overflow: auto;
-	margin: 0 0 0 1em;
-	padding: 0;
-	width: 48%;
-}
-#searchform fieldset div#searchBoardsExpand ul ul {
-	width: auto;
-}
-#searchform fieldset div#searchBoardsExpand a {
-	text-decoration: underline;
-}
-#searchform fieldset div#searchBoardsExpand li {
-	list-style: none;
-	float: left;
-	clear: both;
-}
-#searchform fieldset p {
-	padding: 4px;
-	text-align: left;
-	margin-top: 5px;
-}
-
-/* Styles for the search results page.
-------------------------------------------------- */
-.pagelinks {
-	padding: 0.5em;
-}
-.topic_table td blockquote, .topic_table td .quoteheader {
-	margin: 0.5em;
-}
-.search_results_posts {
-	overflow: hidden;
-}
-.search_results_posts .inner {
-	padding: 0.5em 1em;
-	overflow: hidden;
-}
-.search_results_posts .windowbg2 {
-	margin-top: 4px;
-}
-.search_results_posts .buttons {
-	padding: 5px 1em 0 0;
-}
-
-/* Styles for the help section.
-------------------------------------------------- */
-
-#helpmain {
-	padding: 1em;
-	border: 1px solid #696969;
-}
-
-/* Samples should be easily distinguishable. */
-#helpmain .help_sample {
-	border: 1px solid #99a;
-	background: #fff;
-	padding: 1em;
-	overflow: auto;
-	margin-bottom: 1em;
-}
-#helpmain .help_sample .linktree {
-	font-weight: bold;
-}
-
-/* We need some air between the lines */
-#helpmain p {
-	margin: 0 0 1.5em 0;
-	line-height: 1.5em;
-}
-
-#helpmain ol {
-	font-weight: bold;
-	list-style-type: disc;
-	margin-bottom: 1em;
-	margin-top: 1em;
-	line-height: 1.5em;
-}
-#helpmain ol.la {
-	font-weight: normal;
-	list-style-type: circle;
-	margin: 0.5em 0 1em 0;
-	padding-left: 1.5em;
-}
-
-ul.basic_helplist {
-	padding: 0.8em 1.5em;
-	line-height: 1.5em;
-}
-#helpmain .boardsframe p {
-	margin: 0;
-}
-#helpmain #messageindex {
-	clear: right;
-}
-
-/* ...but leave the tab strips alone! */
-#helpmain .buttonlist_bottom ul, #helpmain .buttonlist ul {
-	margin: 0 !important;
-	padding: 0 0 0 1em !important;
-}
-
-#helpmain .buttonlist_bottom ul li, #helpmain .buttonlist ul li {
-	margin: 0 0.2em 0 0 !important;
-	padding: 0 !important;
-}

+ 0 - 45
Themes/default/index.template.php

@@ -595,49 +595,4 @@ function template_button_strip($button_strip, $direction = '', $strip_options =
 		</div>';
 }
 
-/**
- * Output the Javascript files
- */
-function template_javascript($do_defered = false)
-{
-	global $context;
-
-	// Use this hook to minify/optimize Javascript files
-	call_integration_hook('pre_javascript_output');
-
-	foreach ($context['javascript_files'] as $filename => $options)
-		if ((!$do_defered && empty($options['defer'])) || ($do_defered && !empty($options['defer'])))
-			echo '
-		<script type="text/javascript" src="', $filename, '"></script>';
-}
-
-/**
- * Output the Javascript vars
- */
-function template_javascript_vars()
-{
-	global $context;
-
-	call_integration_hook('pre_javascript_vars_output');
-
-	foreach ($context['javascript_vars'] as $key => $value)
-		echo '
-		var ', $key, ' = ', $value;
-}
-
-/**
- * Output the CSS files
- */
-function template_css()
-{
-	global $context;
-
-	// Use this hook to minify/optimize CSS files
-	call_integration_hook('pre_css_output');
-
-	foreach ($context['css_files'] as $filename => $options)
-		echo '
-	<link rel="stylesheet" type="text/css" href="', $filename, '" />';
-}
-
 ?>

+ 2 - 0
Themes/default/languages/ManagePermissions.english.php

@@ -94,6 +94,8 @@ $txt['permissionname_pm_read'] = 'Read personal messages';
 $txt['permissionhelp_pm_read'] = 'This permission allows users to access the Personal Messages section and read their Personal Messages. Without this permission a user is unable to send Personal Messages.';
 $txt['permissionname_pm_send'] = 'Send personal messages';
 $txt['permissionhelp_pm_send'] = 'Send personal messages to other registered members. Requires the \'Read personal messages\' permission.';
+$txt['permissionname_send_email_to_members'] = 'Send emails';
+$txt['permissionhelp_send_email_to_members'] = 'Send emails to other registered members.';
 
 $txt['permissiongroup_calendar'] = 'Calendar';
 $txt['permissionname_calendar_view'] = 'View the calendar';

+ 1 - 0
Themes/default/languages/Packages.english.php

@@ -110,6 +110,7 @@ $txt['package_will_fail_title'] = 'Error in Package Installation';
 $txt['package_will_fail_warning'] = 'At least one error was encountered during a test installation of this package.
 	It is <strong>strongly</strong> recommended that you do not continue with installation unless you know what you are doing, and have made a backup very recently.<br />
 	This error may be caused by a conflict between the package you\'re trying to install and another package you have already installed, an error in the package, a package which requires another package that you don\'t have installed yet, or a package designed for another version of SMF.';
+$txt['package_will_fail_unknown_action'] = 'The package is trying to perform an unknown action: %1$s';
 // Don't use entities in the below string.
 $txt['package_will_fail_popup'] = 'Are you sure you wish to continue installing this modification, even though it will not install successfully?';
 $txt['package_will_fail_popup_uninstall'] = 'Are you sure you wish to continue uninstalling this modification, even though it will not uninstall successfully?';

+ 8 - 4
index.php

@@ -231,14 +231,18 @@ function smf_main()
 	}
 	elseif (empty($_REQUEST['action']))
 	{
-		// Action and board are both empty... BoardIndex!
+		// Action and board are both empty... BoardIndex! Unless someone else wants to do something different.
 		if (empty($board) && empty($topic))
 		{
-			$call = 'BoardIndex';
+			$call = '';
 			call_integration_hook('integrate_default_action', $call);
-			require_once($sourcedir . '/' . $call . '.php');
+			$call = strpos($call, '::') !== false ? explode('::', $call) : $call;
+			if (!empty($call) && is_callable($call))
+				return $call;
 
-			return $call;
+			require_once($sourcedir . '/BoardIndex.php');
+
+			return 'BoardIndex';
 		}
 		// Topic is empty, and action is empty.... MessageIndex!
 		elseif (empty($topic))

+ 0 - 4
other/install.php

@@ -495,10 +495,6 @@ function CheckFilesWritable()
 		'Settings.php',
 		'Settings_bak.php'
 	);
-	$extra_files = array(
-		'Themes/classic/index.template.php',
-		'Themes/classic/style.css'
-	);
 	foreach ($incontext['detected_languages'] as $lang => $temp)
 		$extra_files[] = 'Themes/default/languages/' . $lang;