Browse Source

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

Michael Eshom 11 years ago
parent
commit
e8a1f1abff
52 changed files with 348 additions and 310 deletions
  1. 2 2
      SSI.php
  2. 1 1
      Sources/BoardIndex.php
  3. 1 1
      Sources/Display.php
  4. 8 0
      Sources/Load.php
  5. 1 0
      Sources/ManageBoards.php
  6. 5 2
      Sources/ManageNews.php
  7. 2 4
      Sources/ManagePermissions.php
  8. 1 1
      Sources/MessageIndex.php
  9. 1 1
      Sources/News.php
  10. 13 3
      Sources/PersonalMessage.php
  11. 0 22
      Sources/Profile-Modify.php
  12. 37 29
      Sources/Profile.php
  13. 2 2
      Sources/Recent.php
  14. 7 4
      Sources/Subs-Editor.php
  15. 1 1
      Sources/Subs-Members.php
  16. 44 26
      Sources/Subs.php
  17. 5 3
      Sources/Who.php
  18. 29 36
      Themes/default/Admin.template.php
  19. 5 2
      Themes/default/ManageBoards.template.php
  20. 4 4
      Themes/default/ManageMaintenance.template.php
  21. 1 1
      Themes/default/ManageScheduledTasks.template.php
  22. 31 9
      Themes/default/Packages.template.php
  23. 1 1
      Themes/default/Profile.template.php
  24. 3 13
      Themes/default/css/admin.css
  25. 20 16
      Themes/default/css/index.css
  26. BIN
      Themes/default/images/admin/drafts.png
  27. BIN
      Themes/default/images/admin/frenemy.png
  28. BIN
      Themes/default/images/admin/members_delete.png
  29. BIN
      Themes/default/images/admin/openid.png
  30. BIN
      Themes/default/images/admin/personal_message.png
  31. BIN
      Themes/default/images/admin/stats.png
  32. BIN
      Themes/default/images/icons/stats_info_hd.png
  33. 30 10
      Themes/default/index.template.php
  34. 1 2
      Themes/default/languages/Errors.english.php
  35. 0 1
      Themes/default/languages/Help.english.php
  36. 1 0
      Themes/default/languages/ManageBoards.english.php
  37. 3 6
      Themes/default/languages/ManagePermissions.english.php
  38. 0 1
      Themes/default/languages/ManageSettings.english.php
  39. 2 2
      Themes/default/languages/Packages.english.php
  40. 1 53
      Themes/default/languages/Post.english.php
  41. 0 1
      Themes/default/languages/Profile.english.php
  42. 6 3
      Themes/default/languages/Reports.english.php
  43. 1 1
      Themes/default/languages/index.english.php
  44. 1 8
      Themes/default/scripts/admin.js
  45. 0 9
      Themes/default/scripts/script.js
  46. 4 7
      other/install_2-1_mysql.sql
  47. 4 7
      other/install_2-1_postgresql.sql
  48. 4 7
      other/install_2-1_sqlite.sql
  49. 4 7
      other/install_2-1_sqlite3.sql
  50. 20 0
      other/upgrade_2-1_mysql.sql
  51. 20 0
      other/upgrade_2-1_postgresql.sql
  52. 21 1
      other/upgrade_2-1_sqlite.sql

+ 2 - 2
SSI.php

@@ -1521,7 +1521,7 @@ function ssi_todaysBirthdays($output_method = 'echo')
 {
 	global $scripturl, $modSettings, $user_info;
 
-	if (empty($modSettings['cal_enabled']) || !allowedTo('calendar_view') || !allowedTo('profile_view_any'))
+	if (empty($modSettings['cal_enabled']) || !allowedTo('calendar_view') || !allowedTo('profile_view'))
 		return;
 
 	$eventOptions = array(
@@ -1595,7 +1595,7 @@ function ssi_todaysCalendar($output_method = 'echo')
 		return;
 
 	$eventOptions = array(
-		'include_birthdays' => allowedTo('profile_view_any'),
+		'include_birthdays' => allowedTo('profile_view'),
 		'include_holidays' => true,
 		'include_events' => true,
 		'num_days_shown' => empty($modSettings['cal_days_for_index']) || $modSettings['cal_days_for_index'] < 1 ? 1 : $modSettings['cal_days_for_index'],

+ 1 - 1
Sources/BoardIndex.php

@@ -114,7 +114,7 @@ function BoardIndex()
 
 	// Mark read button
 	$context['mark_read_button'] = array(
-		'markread' => array('text' => 'mark_as_read', 'image' => 'markread.png', 'lang' => true, 'url' => $scripturl . '?action=markasread;sa=all;' . $context['session_var'] . '=' . $context['session_id']),
+		'markread' => array('text' => 'mark_as_read', 'image' => 'markread.png', 'lang' => true, 'custom' => 'onclick="return confirm(\'' . $txt['are_sure_mark_read'] . '\');"', 'url' => $scripturl . '?action=markasread;sa=all;' . $context['session_var'] . '=' . $context['session_id']),
 	);
 
 	// Allow mods to add additional buttons here

+ 1 - 1
Sources/Display.php

@@ -1273,7 +1273,7 @@ function prepareDisplayContext($reset = false)
 	}
 	else
 	{
-		$memberContext[$message['id_member']]['can_view_profile'] = allowedTo('profile_view_any') || ($message['id_member'] == $user_info['id'] && allowedTo('profile_view_own'));
+		$memberContext[$message['id_member']]['can_view_profile'] = allowedTo('profile_view') || ($message['id_member'] == $user_info['id'] && !$user_info['is_guest']);
 		$memberContext[$message['id_member']]['is_topic_starter'] = $message['id_member'] == $context['topic_starter_id'];
 		$memberContext[$message['id_member']]['can_see_warning'] = !isset($context['disabled_fields']['warning_status']) && $memberContext[$message['id_member']]['warning_status'] && ($context['user']['can_mod'] || (!$user_info['is_guest'] && !empty($modSettings['warning_show']) && ($modSettings['warning_show'] > 1 || $message['id_member'] == $user_info['id'])));
 	}

+ 8 - 0
Sources/Load.php

@@ -879,6 +879,14 @@ function loadPermissions()
 		}
 		else
 			$user_info['mod_cache'] = $_SESSION['mc'];
+
+		// This is a useful phantom permission added to the current user, and only the current user while they are logged in.
+		// For example this drastically simplifies certain changes to the profile area.
+		$user_info['permissions'][] = 'is_not_guest';
+		// And now some backwards compatibility stuff for mods and whatnot that aren't expecting the new permissions.
+		$user_info['permissions'][] = 'profile_view_own';
+		if (in_array('profile_view', $user_info['permissions']))
+			$user_info['permissions'][] = 'profile_view_any';
 	}
 }
 

+ 1 - 0
Sources/ManageBoards.php

@@ -129,6 +129,7 @@ function ManageBoardsMain()
 				'child_level' => &$boards[$boardid]['level'],
 				'move' => $move_cat && ($boardid == $context['move_board'] || isChildOf($boardid, $context['move_board'])),
 				'permission_profile' => &$boards[$boardid]['profile'],
+				'is_redirect' => !empty($boards[$boardid]['redirect']),
 			);
 		}
 	}

+ 5 - 2
Sources/ManageNews.php

@@ -711,7 +711,8 @@ function SendMailing($clean_only = false)
 	$context['parse_html'] = !empty($_POST['parse_html']) ? '1' : '0';
 
 	//One can't simply nullify things around
-	if(empty($_REQUEST['total_members'])) {
+	if (empty($_REQUEST['total_members']))
+	{
 		$request = $smcFunc['db_query']('', '
 			SELECT COUNT(*)
 			FROM {db_prefix}members',
@@ -720,7 +721,9 @@ function SendMailing($clean_only = false)
 		);
 		list ($context['total_members']) = $smcFunc['db_fetch_row']($request);
 		$smcFunc['db_free_result']($request);
-	} else {
+	}
+	else
+	{
 		$context['total_members'] = (int) $_REQUEST['total_members'];
 	}
 

+ 2 - 4
Sources/ManagePermissions.php

@@ -1101,7 +1101,6 @@ function setPermissionLevel($level, $group, $profile = 'null')
 		'calendar_view',
 		'view_stats',
 		'who_view',
-		'profile_view_own',
 		'profile_identity_own',
 	);
 	$groupLevels['board']['restrict'] = array(
@@ -1124,7 +1123,7 @@ function setPermissionLevel($level, $group, $profile = 'null')
 		'pm_read',
 		'pm_send',
 		'send_email_to_members',
-		'profile_view_any',
+		'profile_view',
 		'profile_extra_own',
 		'profile_signature_own',
 		'profile_forum_own',
@@ -1493,7 +1492,7 @@ function loadAllPermissions($loadType = 'classic')
 			'manage_bans' => array(false, 'member_admin', 'administrate'),
 			'send_mail' => array(false, 'member_admin', 'administrate'),
 			'issue_warning' => array(false, 'member_admin', 'moderate_general'),
-			'profile_view' => array(true, 'profile', 'view_basic_info', 'view_basic_info'),
+			'profile_view' => array(false, 'profile', 'view_basic_info'),
 			'profile_identity' => array(true, 'profile', 'edit_profile', 'moderate_general'),
 			'profile_forum' => array(true, 'profile', 'edit_profile', 'moderate_general'),
 			'profile_password' => array(true, 'profile', 'edit_profile', 'moderate_general'),
@@ -2259,7 +2258,6 @@ function loadIllegalGuestPermissions()
 		'profile_server_avatar',
 		'profile_upload_avatar',
 		'profile_remote_avatar',
-		'profile_view_own',
 		'mark_any_notify',
 		'mark_notify',
 		'admin_forum',

+ 1 - 1
Sources/MessageIndex.php

@@ -668,7 +668,7 @@ function MessageIndex()
 		'new_topic' => array('test' => 'can_post_new', 'text' => 'new_topic', 'image' => 'new_topic.png', 'lang' => true, 'url' => $scripturl . '?action=post;board=' . $context['current_board'] . '.0', 'active' => true),
 		'post_poll' => array('test' => 'can_post_poll', 'text' => 'new_poll', 'image' => 'new_poll.png', 'lang' => true, 'url' => $scripturl . '?action=post;board=' . $context['current_board'] . '.0;poll'),
 		'notify' => array('test' => 'can_mark_notify', 'text' => $context['is_marked_notify'] ? 'unnotify' : 'notify', 'image' => ($context['is_marked_notify'] ? 'un' : ''). 'notify.png', 'lang' => true, 'custom' => 'onclick="return confirm(\'' . ($context['is_marked_notify'] ? $txt['notification_disable_board'] : $txt['notification_enable_board']) . '\');"', 'url' => $scripturl . '?action=notifyboard;sa=' . ($context['is_marked_notify'] ? 'off' : 'on') . ';board=' . $context['current_board'] . '.' . $context['start'] . ';' . $context['session_var'] . '=' . $context['session_id']),
-		'markread' => array('text' => 'mark_read_short', 'image' => 'markread.png', 'lang' => true, 'url' => $scripturl . '?action=markasread;sa=board;board=' . $context['current_board'] . '.0;' . $context['session_var'] . '=' . $context['session_id']),
+		'markread' => array('text' => 'mark_read_short', 'image' => 'markread.png', 'lang' => true, 'custom' => 'onclick="return confirm(\'' . $txt['are_sure_mark_read'] . '\');"', 'url' => $scripturl . '?action=markasread;sa=board;board=' . $context['current_board'] . '.0;' . $context['session_var'] . '=' . $context['session_id']),
 	);
 
 	// Allow adding new buttons easily.

+ 1 - 1
Sources/News.php

@@ -897,7 +897,7 @@ function getXmlProfile($xml_format)
 	// Make sure the id is a number and not "I like trying to hack the database".
 	$_GET['u'] = (int) $_GET['u'];
 	// Load the member's contextual information!
-	if (!loadMemberContext($_GET['u']) || !allowedTo('profile_view_any'))
+	if (!loadMemberContext($_GET['u']) || !allowedTo('profile_view'))
 		return array();
 
 	// Okay, I admit it, I'm lazy.  Stupid $_GET['u'] is long and hard to type.

+ 13 - 3
Sources/PersonalMessage.php

@@ -1014,7 +1014,7 @@ function prepareMessageContext($type = 'subject', $reset = false)
 	}
 	else
 	{
-		$memberContext[$message['id_member_from']]['can_view_profile'] = allowedTo('profile_view_any') || ($message['id_member_from'] == $user_info['id'] && allowedTo('profile_view_own'));
+		$memberContext[$message['id_member_from']]['can_view_profile'] = allowedTo('profile_view') || ($message['id_member_from'] == $user_info['id'] && !$user_info['is_guest']);
 		$memberContext[$message['id_member_from']]['can_see_warning'] = !isset($context['disabled_fields']['warning_status']) && $memberContext[$message['id_member_from']]['warning_status'] && ($context['user']['can_mod'] || (!empty($modSettings['warning_show']) && ($modSettings['warning_show'] > 1 || $message['id_member_from'] == $user_info['id'])));
 	}
 
@@ -3359,6 +3359,8 @@ function MessageSettings()
 	loadLanguage('Profile');
 	loadTemplate('Profile');
 
+	// Since this is internally handled with the profile code because that's how it was done ages ago
+	// we have to set everything up for handling this...
 	$context['page_title'] = $txt['pm_settings'];
 	$context['user']['is_owner'] = true;
 	$context['id_member'] = $user_info['id'];
@@ -3366,6 +3368,11 @@ function MessageSettings()
 	$context['menu_item_selected'] = 'settings';
 	$context['submit_button_text'] = $txt['pm_settings'];
 	$context['profile_header_text'] = $txt['personal_messages'];
+	$context['sub_template'] = 'edit_options';
+	$context['page_desc'] = $txt['pm_settings_desc'];
+
+	loadThemeOptions($user_info['id']);
+	loadCustomFields($user_info['id'], 'pmprefs');
 
 	// Add our position to the linktree.
 	$context['linktree'][] = array(
@@ -3389,8 +3396,11 @@ function MessageSettings()
 			updateMemberData($user_info['id'], $profile_vars);
 	}
 
-	// Load up the fields.
-	pmprefs($user_info['id']);
+	setupProfileContext(
+		array(
+			'pm_prefs',
+		)
+	);
 }
 
 /**

+ 0 - 22
Sources/Profile-Modify.php

@@ -1618,28 +1618,6 @@ function forumProfile($memID)
 	);
 }
 
-/**
- * Allow the edit of *someone elses* personal message settings.
- *
- * @param int $memID id_member
- */
-function pmprefs($memID)
-{
-	global $sourcedir, $context, $txt, $scripturl;
-
-	loadThemeOptions($memID);
-	loadCustomFields($memID, 'pmprefs');
-
-	$context['sub_template'] = 'edit_options';
-	$context['page_desc'] = $txt['pm_settings_desc'];
-
-	setupProfileContext(
-		array(
-			'pm_prefs',
-		)
-	);
-}
-
 /**
  * Recursive function to retrieve server-stored avatar files
  *

+ 37 - 29
Sources/Profile.php

@@ -92,42 +92,46 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['summary'],
 					'file' => 'Profile-View.php',
 					'function' => 'summary',
+					'icon' => 'administration.png',
 					'permission' => array(
-						'own' => 'profile_view_own',
-						'any' => 'profile_view_any',
+						'own' => 'is_not_guest',
+						'any' => 'profile_view',
 					),
 				),
 				'statistics' => array(
 					'label' => $txt['statPanel'],
 					'file' => 'Profile-View.php',
 					'function' => 'statPanel',
+					'icon' => 'stats.png',
 					'permission' => array(
-						'own' => 'profile_view_own',
-						'any' => 'profile_view_any',
+						'own' => 'is_not_guest',
+						'any' => 'profile_view',
 					),
 				),
 				'showposts' => array(
 					'label' => $txt['showPosts'],
 					'file' => 'Profile-View.php',
 					'function' => 'showPosts',
+					'icon' => 'posts.png',
 					'subsections' => array(
-						'messages' => array($txt['showMessages'], array('profile_view_own', 'profile_view_any')),
-						'topics' => array($txt['showTopics'], array('profile_view_own', 'profile_view_any')),
-						'unwatchedtopics' => array($txt['showUnwatched'], array('profile_view_own', 'profile_view_any'), 'enabled' => $modSettings['enable_unwatch'] && $context['user']['is_owner']),
-						'attach' => array($txt['showAttachments'], array('profile_view_own', 'profile_view_any')),
+						'messages' => array($txt['showMessages'], array('is_not_guest', 'profile_view')),
+						'topics' => array($txt['showTopics'], array('is_not_guest', 'profile_view')),
+						'unwatchedtopics' => array($txt['showUnwatched'], array('is_not_guest', 'profile_view'), 'enabled' => $modSettings['enable_unwatch'] && $context['user']['is_owner']),
+						'attach' => array($txt['showAttachments'], array('is_not_guest', 'profile_view')),
 					),
 					'permission' => array(
-						'own' => 'profile_view_own',
-						'any' => 'profile_view_any',
+						'own' => 'is_not_guest',
+						'any' => 'profile_view',
 					),
 				),
 				'showdrafts' => array(
 					'label' => $txt['drafts_show'],
 					'file' => 'Drafts.php',
 					'function' => 'showProfileDrafts',
+					'icon' => 'drafts.png',
 					'enabled' => !empty($modSettings['drafts_post_enabled']) && $context['user']['is_owner'],
 					'permission' => array(
-						'own' => 'profile_view_own',
+						'own' => 'is_not_guest',
 						'any' =>  array(),
 					),
 				),
@@ -135,6 +139,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['showPermissions'],
 					'file' => 'Profile-View.php',
 					'function' => 'showPermissions',
+					'icon' => 'permissions.png',
 					'permission' => array(
 						'own' => 'manage_permissions',
 						'any' => 'manage_permissions',
@@ -144,11 +149,12 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['trackUser'],
 					'file' => 'Profile-View.php',
 					'function' => 'tracking',
+					'icon' => 'logs.png',
 					'subsections' => array(
 						'activity' => array($txt['trackActivity'], 'moderate_forum'),
 						'ip' => array($txt['trackIP'], 'moderate_forum'),
 						'edits' => array($txt['trackEdits'], 'moderate_forum', 'enabled' => !empty($modSettings['userlog_enabled'])),
-						'logins' => array($txt['trackLogins'], array('profile_view_own', 'moderate_forum')),
+						'logins' => array($txt['trackLogins'], array('is_not_guest', 'moderate_forum')),
 					),
 					'permission' => array(
 						'own' => 'moderate_forum',
@@ -160,8 +166,9 @@ function ModifyProfile($post_errors = array())
 					'enabled' => $modSettings['warning_settings'][0] == 1 && $cur_profile['warning'] && (!empty($modSettings['warning_show']) && ($context['user']['is_owner'] || $modSettings['warning_show'] == 2)),
 					'file' => 'Profile-View.php',
 					'function' => 'viewWarning',
+					'icon' => 'warning.png',
 					'permission' => array(
-						'own' => 'profile_view_own',
+						'own' => 'is_not_guest', // @todo this needs to be a view-own warning
 						'any' => 'issue_warning',
 					),
 				),
@@ -174,6 +181,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['account'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'account',
+					'icon' => 'maintain.png',
 					'enabled' => $context['user']['is_admin'] || ($cur_profile['id_group'] != 1 && !in_array(1, explode(',', $cur_profile['additional_groups']))),
 					'sc' => 'post',
 					'token' => 'profile-ac%u',
@@ -187,6 +195,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['forumprofile'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'forumProfile',
+					'icon' => 'members.png',
 					'sc' => 'post',
 					'token' => 'profile-fp%u',
 					'permission' => array(
@@ -198,6 +207,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['theme'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'theme',
+					'icon' => 'features.png',
 					'sc' => 'post',
 					'token' => 'profile-th%u',
 					'permission' => array(
@@ -209,6 +219,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['authentication'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'authentication',
+					'icon' => 'openid.png',
 					'enabled' => !empty($modSettings['enableOpenID']) || !empty($cur_profile['openid_uri']),
 					'sc' => 'post',
 					'token' => 'profile-au%u',
@@ -223,6 +234,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['notification'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'notification',
+					'icon' => 'mail.png',
 					'sc' => 'post',
 					'token' => 'profile-nt%u',
 					'permission' => array(
@@ -230,23 +242,11 @@ function ModifyProfile($post_errors = array())
 						'any' => array('profile_extra_any'),
 					),
 				),
-				// Without profile_extra_own, settings are accessible from the PM section.
-				'pmprefs' => array(
-					'label' => $txt['pmprefs'],
-					'file' => 'Profile-Modify.php',
-					'function' => 'pmprefs',
-					'enabled' => allowedTo(array('profile_extra_own', 'profile_extra_any')),
-					'sc' => 'post',
-					'token' => 'profile-pm%u',
-					'permission' => array(
-						'own' => array('pm_read'),
-						'any' => array('profile_extra_any'),
-					),
-				),
 				'ignoreboards' => array(
 					'label' => $txt['ignoreboards'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'ignoreboards',
+					'icon' => 'boards.png',
 					'enabled' => !empty($modSettings['allow_ignore_boards']),
 					'sc' => 'post',
 					'token' => 'profile-ib%u',
@@ -259,6 +259,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['editBuddyIgnoreLists'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'editBuddyIgnoreLists',
+					'icon' => 'frenemy.png',
 					'enabled' => !empty($modSettings['enable_buddylist']) && $context['user']['is_owner'],
 					'sc' => 'post',
 					'token' => 'profile-bl%u',
@@ -275,12 +276,13 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['groupmembership'],
 					'file' => 'Profile-Modify.php',
 					'function' => 'groupMembership',
+					'icon' => 'membergroups.png',
 					'enabled' => !empty($modSettings['show_group_membership']) && $context['user']['is_owner'],
 					'sc' => 'request',
 					'token' => 'profile-gm%u',
 					'token_type' => 'request',
 					'permission' => array(
-						'own' => array('profile_view_own'),
+						'own' => array('is_not_guest'),
 						'any' => array('manage_membergroups'),
 					),
 				),
@@ -292,6 +294,7 @@ function ModifyProfile($post_errors = array())
 				'sendpm' => array(
 					'label' => $txt['profileSendIm'],
 					'custom_url' => $scripturl . '?action=pm;sa=send',
+					'icon' => 'personal_message.png',
 					'permission' => array(
 						'own' => array(),
 						'any' => array('pm_send'),
@@ -302,6 +305,7 @@ function ModifyProfile($post_errors = array())
 					'enabled' => $modSettings['warning_settings'][0] == 1,
 					'file' => 'Profile-Actions.php',
 					'function' => 'issueWarning',
+					'icon' => 'warning.png',
 					'token' => 'profile-iw%u',
 					'permission' => array(
 						'own' => array(),
@@ -311,6 +315,7 @@ function ModifyProfile($post_errors = array())
 				'banuser' => array(
 					'label' => $txt['profileBanUser'],
 					'custom_url' => $scripturl . '?action=admin;area=ban;sa=add',
+					'icon' => 'ban.png',
 					'enabled' => $cur_profile['id_group'] != 1 && !in_array(1, explode(',', $cur_profile['additional_groups'])),
 					'permission' => array(
 						'own' => array(),
@@ -321,9 +326,10 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['subscriptions'],
 					'file' => 'Profile-Actions.php',
 					'function' => 'subscriptions',
+					'icon' => 'paid.png',
 					'enabled' => !empty($modSettings['paid_enabled']),
 					'permission' => array(
-						'own' => array('profile_view_own'),
+						'own' => array('is_not_guest'),
 						'any' => array('moderate_forum'),
 					),
 				),
@@ -331,6 +337,7 @@ function ModifyProfile($post_errors = array())
 					'label' => $txt['deleteAccount'],
 					'file' => 'Profile-Actions.php',
 					'function' => 'deleteAccount',
+					'icon' => 'members_delete.png',
 					'sc' => 'post',
 					'token' => 'profile-da%u',
 					'password' => true,
@@ -342,6 +349,7 @@ function ModifyProfile($post_errors = array())
 				'activateaccount' => array(
 					'file' => 'Profile-Actions.php',
 					'function' => 'activateAccount',
+					'icon' => 'regcenter.png',
 					'sc' => 'get',
 					'token' => 'profile-aa%u',
 					'permission' => array(
@@ -590,7 +598,7 @@ function ModifyProfile($post_errors = array())
 		{
 			authentication($memID, true);
 		}
-		elseif (in_array($current_area, array('account', 'forumprofile', 'theme', 'pmprefs')))
+		elseif (in_array($current_area, array('account', 'forumprofile', 'theme')))
 			saveProfileFields();
 		else
 		{

+ 2 - 2
Sources/Recent.php

@@ -1333,7 +1333,7 @@ function UnreadTopics()
 		if ($is_topics)
 		{
 			$context['recent_buttons'] = array(
-				'markread' => array('text' => !empty($context['no_board_limits']) ? 'mark_as_read' : 'mark_read_short', 'image' => 'markread.png', 'lang' => true, 'url' => $scripturl . '?action=markasread;sa=' . (!empty($context['no_board_limits']) ? 'all' : 'board' . $context['querystring_board_limits']) . ';' . $context['session_var'] . '=' . $context['session_id']),
+				'markread' => array('text' => !empty($context['no_board_limits']) ? 'mark_as_read' : 'mark_read_short', 'image' => 'markread.png', 'lang' => true, 'custom' => 'onclick="return confirm(\'' . $txt['are_sure_mark_read'] . '\');"', 'url' => $scripturl . '?action=markasread;sa=' . (!empty($context['no_board_limits']) ? 'all' : 'board' . $context['querystring_board_limits']) . ';' . $context['session_var'] . '=' . $context['session_id']),
 			);
 
 			if ($context['showCheckboxes'])
@@ -1350,7 +1350,7 @@ function UnreadTopics()
 		elseif (!$is_topics && isset($context['topics_to_mark']))
 		{
 			$context['recent_buttons'] = array(
-				'markread' => array('text' => 'mark_as_read', 'image' => 'markread.png', 'lang' => true, 'url' => $scripturl . '?action=markasread;sa=unreadreplies;topics=' . $context['topics_to_mark'] . ';' . $context['session_var'] . '=' . $context['session_id']),
+				'markread' => array('text' => 'mark_as_read', 'image' => 'markread.png', 'lang' => true, 'custom' => 'onclick="return confirm(\'' . $txt['are_sure_mark_read'] . '\');"', 'url' => $scripturl . '?action=markasread;sa=unreadreplies;topics=' . $context['topics_to_mark'] . ';' . $context['session_var'] . '=' . $context['session_id']),
 			);
 
 			if ($context['showCheckboxes'])

+ 7 - 4
Sources/Subs-Editor.php

@@ -2373,10 +2373,13 @@ function AutoSuggest_Search_SMFVersions()
 		'SMF 2.0 beta 1.2',
 		'SMF 2.0 beta 2',
 		'SMF 2.0 beta 3',
-		'SMF 2.0 RC 1',
-		'SMF 2.0 RC 1.2',
-		'SMF 2.0 RC 2',
-		'SMF 2.0 RC 3',
+		'SMF 2.0 beta 4',
+		'SMF 2.0 RC1',
+		'SMF 2.0 RC1.2',
+		'SMF 2.0 RC2',
+		'SMF 2.0 RC3',
+		'SMF 2.0 RC4',
+		'SMF 2.0 RC5',
 		'SMF 2.0',
 		'SMF 2.0.1',
 		'SMF 2.0.2',

+ 1 - 1
Sources/Subs-Members.php

@@ -998,7 +998,7 @@ function groupsAllowedTo($permission, $board_id = null)
 		'denied' => array(),
 	);
 
-	// Assume we're dealing with regular permissions (like profile_view_own).
+	// Assume we're dealing with regular permissions (like profile_view).
 	if ($board_id === null)
 	{
 		$request = $smcFunc['db_query']('', '

+ 44 - 26
Sources/Subs.php

@@ -3790,7 +3790,7 @@ function setupMenuContext()
 	// Set up the menu privileges.
 	$context['allow_search'] = !empty($modSettings['allow_guestAccess']) ? allowedTo('search_posts') : (!$user_info['is_guest'] && allowedTo('search_posts'));
 	$context['allow_admin'] = allowedTo(array('admin_forum', 'manage_boards', 'manage_permissions', 'moderate_forum', 'manage_membergroups', 'manage_bans', 'send_mail', 'edit_news', 'manage_attachments', 'manage_smileys'));
-	$context['allow_edit_profile'] = !$user_info['is_guest'] && allowedTo(array('profile_view_own', 'profile_view_any', 'profile_identity_own', 'profile_identity_any', 'profile_forum_own', 'profile_forum_any', 'moderate_forum', 'manage_membergroups'));
+
 	$context['allow_memberlist'] = allowedTo('view_mlist');
 	$context['allow_calendar'] = allowedTo('calendar_view') && !empty($modSettings['cal_enabled']);
 	$context['allow_moderation_center'] = $context['user']['can_mod'];
@@ -3798,6 +3798,34 @@ function setupMenuContext()
 
 	$cacheTime = $modSettings['lastActive'] * 60;
 
+	// This is for showing the nice profile menu up top. Sub-menus are not supported.
+	$profile_menu = array(
+		'account' => array(
+			'title' => $txt['account'],
+			'href' => $scripturl . '?action=profile;area=account',
+			'show' => allowedTo(array('profile_forum_any', 'profile_forum_own')),
+		),
+		'profile' => array(
+			'title' => $txt['forumprofile'],
+			'href' => $scripturl . '?action=profile;area=forumprofile',
+			'show' => allowedTo(array('profile_forum_any', 'profile_forum_own')),
+		),
+		'theme' => array(
+			'title' => $txt['theme'],
+			'href' => $scripturl . '?action=profile;area=theme',
+			'show' => allowedTo(array('profile_extra_any', 'profile_extra_own', 'profile_extra_any')),
+		),
+	);
+	call_integration_hook('integrate_profile_buttons', array(&$profile_menu));
+	foreach ($profile_menu as $item => $details)
+	{
+		if ((isset($details['enabled']) && empty($details['enabled'])) || empty($details['show']))
+			unset ($profile_menu[$item]);
+		// OK, so the item's good. Let's push this into $context but save a little memory as we do.
+		unset ($details['show']);
+		$context['profile_menu'][$item] = $details;
+	}
+
 	// All the buttons we can possible want and then some, try pulling the final list of buttons from cache first.
 	if (($menu_buttons = cache_get_data('menu_buttons-' . implode('_', $user_info['groups']) . '-' . $user_info['language'], $cacheTime)) === null || time() - $cacheTime <= $modSettings['settings_updated'])
 	{
@@ -3848,6 +3876,11 @@ function setupMenuContext()
 						'title' => $txt['edit_permissions'],
 						'href' => $scripturl . '?action=admin;area=permissions',
 						'show' => allowedTo('manage_permissions'),
+					),
+					'memberapprove' => array(
+						'title' => $txt['approve_members_waiting'],
+						'href' => $scripturl . '?action=admin;area=viewmembers;sa=browse;type=approve',
+						'show' => !empty($context['unapproved_members']),
 						'is_last' => true,
 					),
 				),
@@ -3880,29 +3913,6 @@ function setupMenuContext()
 					),
 				),
 			),
-			'profile' => array(
-				'title' => $txt['profile'],
-				'href' => $scripturl . '?action=profile',
-				'show' => $context['allow_edit_profile'],
-				'sub_buttons' => array(
-					'account' => array(
-						'title' => $txt['account'],
-						'href' => $scripturl . '?action=profile;area=account',
-						'show' => allowedTo(array('profile_identity_any', 'profile_identity_own', 'manage_membergroups')),
-					),
-					'profile' => array(
-						'title' => $txt['forumprofile'],
-						'href' => $scripturl . '?action=profile;area=forumprofile',
-						'show' => allowedTo(array('profile_forum_any', 'profile_forum_own')),
-						'is_last' => true,
-					),
-					'theme' => array(
-						'title' => $txt['theme'],
-						'href' => $scripturl . '?action=profile;area=theme',
-						'show' => allowedTo(array('profile_extra_any', 'profile_extra_own', 'profile_extra_any')),
-					),
-				),
-			),
 			'pm' => array(
 				'title' => $txt['pm_short'],
 				'href' => $scripturl . '?action=pm',
@@ -4060,13 +4070,21 @@ function setupMenuContext()
 		$context['menu_buttons'][$current_action]['active_button'] = true;
 
 	if (!empty($user_info['mod_cache']) && $user_info['mod_cache']['bq'] != '0=1' && $context['open_mod_reports'] > 0)
-		$context['menu_buttons']['moderate']['title'] .= ' [<strong>' .$context['open_mod_reports'] . '</strong>]';
+	{
+		$context['menu_buttons']['moderate']['title'] .= ' <span class="amt">' . $context['open_mod_reports'] . '</span>';
+		$context['menu_buttons']['moderate']['sub_buttons']['reports']['title'] .= ' <span class="amt">' . $context['open_mod_reports'] . '</span>';
+	}
 
+	if (!empty($context['unapproved_members']))
+	{
+		$context['menu_buttons']['admin']['sub_buttons']['memberapprove']['title'] .= ' <span class="amt">' . $context['unapproved_members'] . '</span>';
+		$context['menu_buttons']['admin']['title'] .= ' <span class="amt">' . $context['unapproved_members'] . '</span>';
+	}
 
 	if (!$user_info['is_guest'] && $context['user']['unread_messages'] > 0 && isset($context['menu_buttons']['pm']))
 	{
 		$context['menu_buttons']['pm']['alttitle'] = $context['menu_buttons']['pm']['title'] . ' [' . $context['user']['unread_messages'] . ']';
-		$context['menu_buttons']['pm']['title'] .= ' [<strong>' . $context['user']['unread_messages'] . '</strong>]';
+		$context['menu_buttons']['pm']['title'] .= ' <span class="amt">' . $context['user']['unread_messages'] . '</span>';
 	}
 }
 

+ 5 - 3
Sources/Who.php

@@ -484,8 +484,10 @@ function determineActions($urls, $preferred_prefix = false)
 		$smcFunc['db_free_result']($result);
 	}
 
-	// Load member names for the profile.
-	if (!empty($profile_ids) && (allowedTo('profile_view_any') || allowedTo('profile_view_own')))
+	// Load member names for the profile. (is_not_guest permission for viewing their own profile)
+	$allow_view_own = allowedTo('is_not_guest');
+	$allow_view_any = allowedTo('profile_view');
+	if (!empty($profile_ids) && ($allow_view_any || $allow_view_own))
 	{
 		$result = $smcFunc['db_query']('', '
 			SELECT id_member, real_name
@@ -499,7 +501,7 @@ function determineActions($urls, $preferred_prefix = false)
 		while ($row = $smcFunc['db_fetch_assoc']($result))
 		{
 			// If they aren't allowed to view this person's profile, skip it.
-			if (!allowedTo('profile_view_any') && $user_info['id'] != $row['id_member'])
+			if (!$allow_view_any && ($user_info['id'] != $row['id_member']))
 				continue;
 
 			// Set their action on each - session/text to sprintf.

+ 29 - 36
Themes/default/Admin.template.php

@@ -116,7 +116,7 @@ function template_admin()
 					<script type="text/javascript"><!-- // --><![CDATA[
 						var oAdminIndex = new smf_AdminIndex({
 							sSelf: \'oAdminCenter\',
-			
+
 							bLoadAnnouncements: true,
 							sAnnouncementTemplate: ', JavaScriptEscape('
 								<dl>
@@ -130,35 +130,28 @@ function template_admin()
 								</dd>
 							'), ',
 							sAnnouncementContainerId: \'smfAnnouncements\',
-			
+
 							bLoadVersions: true,
 							sSmfVersionContainerId: \'smfVersion\',
 							sYourVersionContainerId: \'yourVersion\',
 							sVersionOutdatedTemplate: ', JavaScriptEscape('
 								<span class="alert">%currentVersion%</span>
 							'), ',
-			
+
 							bLoadUpdateNotification: true,
 							sUpdateNotificationContainerId: \'update_section\',
 							sUpdateNotificationDefaultTitle: ', JavaScriptEscape($txt['update_available']), ',
 							sUpdateNotificationDefaultMessage: ', JavaScriptEscape($txt['update_message']), ',
 							sUpdateNotificationTemplate: ', JavaScriptEscape('
-								<div class="cat_bar">
-									<h3 id="update_title" class="catbg">
-										%title%
-									</h3>
-								</div>
-								<div class="windowbg">
-									<span class="topslice"><span></span></span>
-									<div class="content">
-										<div id="update_message" class="smalltext">
-											%message%
-										</div>
-									</div>
+								<h3 id="update_title">
+									%title%
+								</h3>
+								<div id="update_message" class="smalltext">
+									%message%
 								</div>
 							'), ',
 							sUpdateNotificationLink: smf_scripturl + ', JavaScriptEscape('?action=admin;area=packages;pgdownload;auto;package=%package%;' . $context['session_var'] . '=' . $context['session_id']), '
-			
+
 						});
 					// ]]></script>';
 }
@@ -271,7 +264,7 @@ function template_credits()
 	echo '
 						<script type="text/javascript"><!-- // --><![CDATA[
 							var smfSupportVersions = {};
-				
+
 							smfSupportVersions.forum = "', $context['forum_version'], '";';
 
 	// Don't worry, none of this is logged, it's just used to give information that might be of use.
@@ -291,15 +284,15 @@ function template_credits()
 							function smfCurrentVersion()
 							{
 								var smfVer, yourVer;
-				
+
 								if (!window.smfVersion)
 									return;
-				
+
 								smfVer = document.getElementById("smfVersion");
 								yourVer = document.getElementById("yourVersion");
-				
+
 								setInnerHTML(smfVer, window.smfVersion);
-				
+
 								var currentVersion = getInnerHTML(yourVer);
 								if (currentVersion != window.smfVersion)
 									setInnerHTML(yourVer, "<span class=\"alert\">" + currentVersion + "</span>");
@@ -368,7 +361,7 @@ function template_view_versions()
 									</tr>
 								</tbody>
 							</table>
-				
+
 							<table id="Sources" width="100%" class="table_grid">
 							<tbody>';
 
@@ -391,7 +384,7 @@ function template_view_versions()
 	echo '
 							</tbody>
 							</table>
-				
+
 							<table width="100%" class="table_grid">
 								<tbody>
 									<tr>
@@ -407,7 +400,7 @@ function template_view_versions()
 									</tr>
 								</tbody>
 							</table>
-				
+
 							<table id="Default" width="100%" class="table_grid">
 								<tbody>';
 
@@ -429,7 +422,7 @@ function template_view_versions()
 	echo '
 								</tbody>
 							</table>
-				
+
 							<table width="100%" class="table_grid">
 								<tbody>
 									<tr>
@@ -445,7 +438,7 @@ function template_view_versions()
 									</tr>
 								</tbody>
 							</table>
-				
+
 							<table id="Languages" width="100%" class="table_grid">
 								<tbody>';
 
@@ -489,7 +482,7 @@ function template_view_versions()
 									</tr>
 								</tbody>
 							</table>
-				
+
 							<table id="Templates" width="100%" class="table_grid">
 								<tbody>';
 
@@ -619,7 +612,7 @@ function template_edit_censored()
 									</p>
 								</div>
 							</div>
-				
+
 							<input type="hidden" name="', $context['session_var'], '" value="', $context['session_id'], '" />
 							<input type="hidden" name="', $context['admin-censor_token_var'], '" value="', $context['admin-censor_token'], '" />
 						</form>
@@ -667,17 +660,17 @@ function template_not_done()
 					<script type="text/javascript"><!-- // --><![CDATA[
 						var countdown = ', $context['continue_countdown'], ';
 						doAutoSubmit();
-				
+
 						function doAutoSubmit()
 						{
 							if (countdown == 0)
 								document.forms.autoSubmit.submit();
 							else if (countdown == -1)
 								return;
-				
+
 							document.forms.autoSubmit.cont.value = "', $txt['not_done_continue'], ' (" + countdown + ")";
 							countdown--;
-				
+
 							setTimeout("doAutoSubmit();", 1000);
 						}
 					// ]]></script>';
@@ -1033,7 +1026,7 @@ function template_edit_profile_field()
 								<div class="content">
 									<fieldset>
 										<legend>', $txt['custom_edit_general'], '</legend>
-				
+
 										<dl class="settings">
 											<dt>
 												<strong><label for="field_name">', $txt['custom_edit_name'], ':</label></strong>
@@ -1075,7 +1068,7 @@ function template_edit_profile_field()
 											<dd>
 												<input type="checkbox" name="display" id="display"', $context['field']['display'] ? ' checked="checked"' : '', ' class="input_check" />
 											</dd>
-				
+
 											<dt>
 												<strong><label for="placement">', $txt['custom_edit_placement'], ':</label></strong>
 											</dt>
@@ -1425,17 +1418,17 @@ function template_repair_boards()
 					<script type="text/javascript"><!-- // --><![CDATA[
 						var countdown = 5;
 						doAutoSubmit();
-				
+
 						function doAutoSubmit()
 						{
 							if (countdown == 0)
 								document.forms.recount_form.submit();
 							else if (countdown == -1)
 								return;
-				
+
 							document.forms.recount_form.recount_now.value = "', $txt['errors_recount_now'], ' (" + countdown + ")";
 							countdown--;
-				
+
 							setTimeout("doAutoSubmit();", 1000);
 						}
 					// ]]></script>';

+ 5 - 2
Themes/default/ManageBoards.template.php

@@ -61,13 +61,16 @@ function template_main()
 
 		$alternate = false;
 
+		$recycle_board = '<a href="' . $scripturl . '?action=admin;area=manageboards;sa=settings"> <img src="' . $settings['images_url'] . '/post/recycled.png" alt="' . $txt['recycle_board'] . '" title="' . $txt['recycle_board'] . '" /></a>';
+		$redirect_board = '<img src="' . $settings['images_url'] . '/new_redirect.png" alt="' . $txt['redirect_board_desc'] . '" title="' . $txt['redirect_board_desc'] . '" />';
+
 		// List through every board in the category, printing its name and link to modify the board.
 		foreach ($category['boards'] as $board)
 		{
 
 			echo '
-						<li', !empty($modSettings['recycle_board']) && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] == $board['id'] ? ' id="recycle_board"' : ' ', ' class="windowbg', $alternate ? '' : '2', '" style="padding-' . ($context['right_to_left'] ? 'right' : 'left') . ': ', 5 + 30 * $board['child_level'], 'px;">
-							<span class="floatleft"><a', $board['move'] ? ' style="color: red;"' : '', ' href="', $scripturl, '?board=', $board['id'], '">', $board['name'], '</a>', !empty($modSettings['recycle_board']) && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] == $board['id'] ? '<a href="' . $scripturl . '?action=admin;area=manageboards;sa=settings"> <img src="' . $settings['images_url'] . '/post/recycled.png" alt="' . $txt['recycle_board'] . '" /></a></span>' : '</span>', '
+						<li', !empty($modSettings['recycle_board']) && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] == $board['id'] ? ' id="recycle_board"' : ' ', ' class="windowbg', $alternate ? '' : '2', $board['is_redirect'] ? ' redirect_board' : '', '" style="padding-' . ($context['right_to_left'] ? 'right' : 'left') . ': ', 5 + 30 * $board['child_level'], 'px;">
+							<span class="floatleft"><a', $board['move'] ? ' style="color: red;"' : '', ' href="', $scripturl, '?board=', $board['id'], '">', $board['name'], '</a>', !empty($modSettings['recycle_board']) && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] == $board['id'] ? $recycle_board : '', $board['is_redirect'] ? $redirect_board : '', '</span>
 							<span class="floatright">', $context['can_manage_permissions'] ? '<span class="modify_boards"><a href="' . $scripturl . '?action=admin;area=permissions;sa=index;pid=' . $board['permission_profile'] . ';' . $context['session_var'] . '=' . $context['session_id'] . '">' . $txt['mboards_permissions'] . '</a></span>' : '', '
 							<span class="modify_boards"><a href="', $scripturl, '?action=admin;area=manageboards;move=', $board['id'], '">', $txt['mboards_move'], '</a></span>
 							<span class="modify_boards"><a href="', $scripturl, '?action=admin;area=manageboards;sa=board;boardid=', $board['id'], '">', $txt['mboards_modify'], '</a></span></span><br style="clear: right;" />

+ 4 - 4
Themes/default/ManageMaintenance.template.php

@@ -18,7 +18,7 @@ function template_maintain_database()
 	// If maintenance has finished tell the user.
 	if (!empty($context['maintenance_finished']))
 		echo '
-			<div class="maintenance_finished">
+			<div class="infobox">
 				', sprintf($txt['maintain_done'], $context['maintenance_finished']), '
 			</div>';
 
@@ -113,7 +113,7 @@ function template_maintain_routine()
 	// If maintenance has finished tell the user.
 	if (!empty($context['maintenance_finished']))
 		echo '
-			<div class="maintenance_finished">
+			<div class="infobox">
 				', sprintf($txt['maintain_done'], $context['maintenance_finished']), '
 			</div>';
 
@@ -252,7 +252,7 @@ function template_maintain_members()
 	// If maintenance has finished tell the user.
 	if (!empty($context['maintenance_finished']))
 	echo '
-		<div class="maintenance_finished">
+		<div class="infobox">
 			', sprintf($txt['maintain_done'], $context['maintenance_finished']), '
 		</div>';
 
@@ -365,7 +365,7 @@ function template_maintain_topics()
 	// If maintenance has finished tell the user.
 	if (!empty($context['maintenance_finished']))
 		echo '
-			<div class="maintenance_finished">
+			<div class="infobox">
 				', sprintf($txt['maintain_done'], $context['maintenance_finished']), '
 			</div>';
 

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

@@ -20,7 +20,7 @@ function template_view_scheduled_tasks()
 	{
 		if (empty($context['scheduled_errors']))
 			echo '
-	<div id="task_completed">
+	<div class="infobox">
 		', $txt['scheduled_tasks_were_run'], '
 	</div>';
 		else

+ 31 - 9
Themes/default/Packages.template.php

@@ -530,16 +530,15 @@ function template_browse()
 	if ($context['sub_action'] == 'browse')
 	{
 		echo '
+		<div id="update_section"></div>
 		<div id="admin_form_wrapper">
 			<div class="cat_bar">
 				<h3 class="catbg">
-					<a href="', $scripturl, '?action=helpadmin;help=latest_packages" onclick="return reqOverlayDiv(this.href);" class="help"><img class="icon" src="', $settings['images_url'], '/helptopics_hd.png" alt="', $txt['help'], '" /></a> ', $txt['packages_latest'], '
+					', $txt['packages_adding_title'], '
 				</h3>
 			</div>
 			<div class="windowbg2">
-				<div class="content">
-					<div id="packagesLatest">', $txt['packages_latest_fetch'], '</div>
-				</div>
+				', $txt['packages_adding'], '
 			</div>
 
 			<script type="text/javascript"><!-- // --><![CDATA[
@@ -551,18 +550,38 @@ function template_browse()
 		echo '
 				window.smfInstalledPackages = ["', implode('", "', $context['installed_mods']), '"];
 				window.smfVersion = "', $context['forum_version'], '";
-			// ]]></script>';
+			// ]]></script>
+			<div id="yourVersion" style="display:none">', $context['forum_version'], '</div>';
 
 		if (empty($modSettings['disable_smf_js']))
 			echo '
-			<script type="text/javascript" src="', $scripturl, '?action=viewsmfile;filename=latest-packages.js"></script>';
+			<script type="text/javascript" src="', $scripturl, '?action=viewsmfile;filename=latest-news.js"></script>';
 
+		// This sets the announcements and current versions themselves ;).
 		echo '
 			<script type="text/javascript"><!-- // --><![CDATA[
-				var tempOldOnload;
-				smfSetLatestPackages();
-			// ]]></script>
+				var oAdminIndex = new smf_AdminIndex({
+					sSelf: \'oAdminCenter\',
+					bLoadAnnouncements: false,
+					bLoadVersions: false,
+					bLoadUpdateNotification: true,
+					sUpdateNotificationContainerId: \'update_section\',
+					sUpdateNotificationDefaultTitle: ', JavaScriptEscape($txt['update_available']), ',
+					sUpdateNotificationDefaultMessage: ', JavaScriptEscape($txt['update_message']), ',
+					sUpdateNotificationTemplate: ', JavaScriptEscape('
+						<h3 id="update_title">
+							%title%
+						</h3>
+						<div id="update_message" class="smalltext">
+							%message%
+						</div>
+					'), ',
+					sUpdateNotificationLink: smf_scripturl + ', JavaScriptEscape('?action=admin;area=packages;pgdownload;auto;package=%package%;' . $context['session_var'] . '=' . $context['session_id']), '
+	
+				});
+			// ]]></script>';
 
+		echo '
 		</div>';
 	}
 
@@ -579,6 +598,9 @@ function template_browse()
 	if (!$mods_available)
 		echo '
 		<div class="descbox">', $context['sub_action'] == 'browse' ? $txt['no_packages'] : $txt['no_mods_installed'], '</div>';
+	else
+		echo '
+		<br />';
 
 	// the advanced (emulation) box, collapsed by default
 	echo '

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

@@ -727,7 +727,7 @@ function template_trackActivity()
 	echo '
 		<div class="generic_list_wrapper">
 			<div class="cat_bar">
-				<h3 class="catbg"><strong>', $txt['view_ips_by'], ' ', $context['member']['name'], '</strong></h3>
+				<h3 class="catbg">', $txt['view_ips_by'], ' ', $context['member']['name'], '</h3>
 			</div>';
 
 	// The last IP the user used.

+ 3 - 13
Themes/default/css/admin.css

@@ -774,6 +774,9 @@ pre.file_content {
 #manage_boards li#recycle_board {
 	background-color: #dee;
 }
+#manage_boards li.redirect_board {
+	background-color: #eed;
+}
 .move_links {
 	padding: 0 13px 0 0;
 }
@@ -876,19 +879,6 @@ dl.right dt {
 #manage_maintenance .settings {
 	margin: 16px 0 0 0;
 }
-.maintenance_finished, #task_completed {
-	background: #B7FCA7 url(../images/warning_watch.png) 8px 50% no-repeat;
-	border: 1px solid green;
-	padding: 6px 30px;
-	margin-bottom: 1em;
-}
-#manage_maintenance .maintenance_finished {
-	background: #B7FCA7 url(../images/warning_watch.png) 8px 50% no-repeat;
-	border: 1px solid green;
-	border-radius: 4px 4px 0 0;
-	padding: 6px 30px;
-	margin: 0 0 6px 0;
-}
 
 /* Styles for the question and answers
 ------------------------------------------------- */

+ 20 - 16
Themes/default/css/index.css

@@ -1086,6 +1086,19 @@ img.sort, .sort {
 	line-height: 1.9em;
 	position: relative;
 }
+/* For cases where we want to spotlight something specific to an item, e.g. an amount */
+.dropmenu li .amt
+{
+	padding: 0 4px;
+	color: white;
+	background: #6d90ad;
+	border-radius: 4px;
+}
+.dropmenu li .active .amt
+{
+	background: none;
+	color: inherit;
+}
 /* Needed for new PM notifications. */
 .dropmenu li strong {
 	color: #333;
@@ -1393,32 +1406,23 @@ img.sort, .sort {
 	display: block;
 	clear: both;
 }
-#top_section ul {
+#top_info {
 	margin: 0;
-	padding: 9px 9px 7px 9px;
+	padding: 5px 9px 4px 9px;
 	line-height: 1.3em;
+	width: 50%;
 }
-#top_section ul li {
+/*#top_section ul li {
 	margin-bottom: 2px;
 	margin-right: 7px;
 	display: inline;
 	font-size: 0.9em;
-}
+}*/
 .notice
 {
  font-weight: bold;
 }
-.modnotice
-{
-	padding: 4px;
-}
-.modnotice .amt
-{
-	padding: 0 4px;
-	color: white;
-	background: #6d90ad;
-	border-radius: 4px;
-}
+
 #search_form {
 	padding: 4px 0 0 0;
 	text-align: right;
@@ -3095,7 +3099,7 @@ tr.windowbg td, tr.windowbg2 td, tr.approvebg td, tr.highlight2 td {
 }
 .infobox  {
 	color: #222;
-	background: #efe;
+	background: #cfc url(../images/warning_watch.png) 8px 50% no-repeat;
 	text-align: left;
 	border-top: 1px solid green;
 	border-bottom: 1px solid green;

BIN
Themes/default/images/admin/drafts.png


BIN
Themes/default/images/admin/frenemy.png


BIN
Themes/default/images/admin/members_delete.png


BIN
Themes/default/images/admin/openid.png


BIN
Themes/default/images/admin/personal_message.png


BIN
Themes/default/images/admin/stats.png


BIN
Themes/default/images/icons/stats_info_hd.png


+ 30 - 10
Themes/default/index.template.php

@@ -178,29 +178,49 @@ function template_body_above()
 	// Wrapper div now echoes permanently for better layout options. h1 a is now target for "Go up" links.
 	echo '
 	<div id="top_section">
-		<div class="frame">
-			<ul class="floatleft">';
+		<div class="frame">';
 
 	// If the user is logged in, display some things that might be useful.
 	if ($context['user']['is_logged'])
 	{
-		// @todo There needs to be something else here.
-
-		if (!empty($context['open_mod_reports']) && $context['show_open_reports'])
+		// Firstly, the user's menu
+		$is_current_user = $context['current_action'] == 'profile' && !empty($context['user']['is_owner']);
+		echo '
+			<ul class="floatleft dropmenu" id="top_info">
+				<li>
+					<a href="', $scripturl, '?action=profile"', $is_current_user ? ' class="active"' : '', '>', $context['user']['name'], !empty($context['profile_menu']) ? ' &#9660;' : '', '</a>';
+		if (!empty($context['profile_menu']))
+		{
 			echo '
-				<li class="modnotice"><a href="', $scripturl, '?action=moderate;area=reports">', $txt['mod_reports_waiting'], '</a>: <span class="amt">', $context['open_mod_reports'], '</span></li>';
+					<ul>';
+			foreach ($context['profile_menu'] as $key => $item)
+				echo '
+						<li>', !empty($item['href']) ? '<a href="' . $item['href'] . '">' . $item['title'] . '</a>' : $item['title'], '</li>';
+			echo '
+					</ul>';
+		}
+
+		echo '
+				</li>';
 
 		// Are there any members waiting for approval?
 		if (!empty($context['unapproved_members']))
 			echo '
-				<li class="modnotice"><a href="', $scripturl, '?action=admin;area=viewmembers;sa=browse;type=approve">', $txt['approve_members_waiting'], '</a>: <span class="amt">', $context['unapproved_members'], '</span></li>';
+				<li><a href="', $scripturl, '?action=admin;area=viewmembers;sa=browse;type=approve">', $txt['approve_members_waiting'], ' <span class="amt">', $context['unapproved_members'], '</span></a></li>';
+
+		// This will only apply if we're powerful and can actually see reports.
+		if (!empty($context['open_mod_reports']) && $context['show_open_reports'])
+			echo '
+				<li><a href="', $scripturl, '?action=moderate;area=reports">', $txt['mod_reports_waiting'], ' <span class="amt">', $context['open_mod_reports'], '</span></a></li>';
+
+		echo '
+			</ul>';
 	}
 	// Otherwise they're a guest. Ask them to either register or login.
 	else
 		echo '
-				<li>', sprintf($txt[$context['can_register'] ? 'welcome_guest_register' : 'welcome_guest'], $txt['guest_title'], $scripturl . '?action=login'), '</li>';
-
-	echo '
+			<ul class="floatleft" id="top_info">
+				<li>', sprintf($txt[$context['can_register'] ? 'welcome_guest_register' : 'welcome_guest'], $txt['guest_title'], $scripturl . '?action=login'), '</li>
 			</ul>';
 
 	if ($context['allow_search'])

+ 1 - 2
Themes/default/languages/Errors.english.php

@@ -121,8 +121,7 @@ $txt['cannot_profile_title_own'] = 'You are not allowed to change your custom ti
 $txt['cannot_profile_server_avatar'] = 'You are not permitted to use a server stored avatar.';
 $txt['cannot_profile_upload_avatar'] = 'You do not have permission to upload an avatar.';
 $txt['cannot_profile_remote_avatar'] = 'You don\'t have the privilege of using a remote avatar.';
-$txt['cannot_profile_view_own'] = 'Many apologies, but you can\'t view your own profile.';
-$txt['cannot_profile_view_any'] = 'Many apologies, but you can\'t view just any profile.';
+$txt['cannot_profile_view'] = 'Many apologies, but you can\'t view just any profile.';
 $txt['cannot_delete_own'] = 'You are not, on this board, allowed to delete your own posts.';
 $txt['cannot_delete_replies'] = 'Sorry, but you cannot remove these posts, even though they are replies to your topic.';
 $txt['cannot_delete_any'] = 'Deleting just any posts in this board is not allowed.';

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

@@ -507,7 +507,6 @@ $helptxt['coppaPost'] = 'The contact boxes are required so that forms granting p
 $helptxt['allow_hideOnline'] = 'With this option enabled all members will be able to hide their online status from other users (except administrators). If disabled only users who can moderate the forum can hide their presence. Note that disabling this option will not change any existing member\'s status - it just stops them from hiding themselves in the future.';
 $helptxt['meta_keywords'] = 'These keywords are sent in the output of every page to indicate to search engines (etc) the key content of your site. They should be a comma separated list of words, and should not use HTML.';
 
-$helptxt['latest_packages'] = 'Here you can see some of the most popular and some random packages or mods, with quick and easy installations.<br /><br />If this section doesn\'t show up, your computer probably cannot connect to <a href="http://www.simplemachines.org/" target="_blank" class="new_win">www.simplemachines.org</a>.';
 $helptxt['latest_themes'] = 'This area shows a few of the latest and most popular themes from <a href="http://www.simplemachines.org/" target="_blank" class="new_win">www.simplemachines.org</a>.  It may not show up properly if your computer can\'t find <a href="http://www.simplemachines.org/" target="_blank" class="new_win">www.simplemachines.org</a>, though.';
 
 $helptxt['secret_why_blank'] = 'For your security, your password and the answer to your secret question are encrypted so that the SMF software will never tell you, or anyone else, what they are.';

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

@@ -87,6 +87,7 @@ $txt['groups_manage_boards'] = 'Membergroups allowed to manage boards and catego
 $txt['mboards_settings_submit'] = 'Save';
 $txt['recycle_enable'] = 'Enable recycling of deleted topics';
 $txt['recycle_board'] = 'Board for recycled topics';
+$txt['redirect_board_desc'] = 'A board that redirects users if they visit it';
 $txt['recycle_board_unselected_notice'] = 'You have enabled the recycling of topics without specifying a board to place them in.  This feature will not be enabled until you specify a board to place recycled topics into.';
 $txt['countChildPosts'] = 'Count child\'s posts in parent\'s totals';
 $txt['allow_ignore_boards'] = 'Allow boards to be ignored';

+ 3 - 6
Themes/default/languages/ManagePermissions.english.php

@@ -160,10 +160,8 @@ $txt['permissionname_issue_warning'] = 'Issue warnings to members';
 $txt['permissionhelp_issue_warning'] = 'Issue a warning to members of the forum and change that members\' warning level. Requires the warning system to be enabled.';
 
 $txt['permissiongroup_profile'] = 'Member Profiles';
-$txt['permissionname_profile_view'] = 'View profile summary and stats';
-$txt['permissionhelp_profile_view'] = 'This permission allows users clicking on a username to see a summary of profile settings, some statistics and all posts of the user.';
-$txt['permissionname_profile_view_own'] = 'Own profile';
-$txt['permissionname_profile_view_any'] = 'Any profile';
+$txt['permissionname_profile_view'] = 'View other members\' profile summary and stats pages';
+$txt['permissionhelp_profile_view'] = 'This permission allows users clicking on a username to see a summary of other users\' profile settings, some statistics and their posts.';
 $txt['permissionname_profile_identity'] = 'Edit account settings';
 $txt['permissionhelp_profile_identity'] = 'Account settings are the basic settings of a profile, like password, email address, membergroup and preferred language.';
 $txt['permissionname_profile_identity_own'] = 'Own profile';
@@ -314,8 +312,7 @@ $txt['permissiongroup_simple_administrate'] = 'Carry out administrative duties';
 
 $txt['permissionname_simple_calendar_edit_own'] = 'Edit their own calendar events';
 $txt['permissionname_simple_calendar_edit_any'] = 'Edit other people\'s calendar events';
-$txt['permissionname_simple_profile_view_own'] = 'View their own profile';
-$txt['permissionname_simple_profile_view_any'] = 'View other people\'s profiles';
+$txt['permissionname_simple_profile_view'] = 'View other people\'s profiles';
 $txt['permissionname_simple_profile_identity_own'] = 'Edit their account settings';
 $txt['permissionname_simple_profile_identity_any'] = 'Edit other people\'s account settings';
 $txt['permissionname_simple_profile_extra_own'] = 'Edit their additional profile options';

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

@@ -158,7 +158,6 @@ $txt['posts_require_captcha_desc'] = '(0 for no limit, moderators are exempt)';
 $txt['search_enable_captcha'] = 'Require verification on all guest searches';
 $txt['setting_guests_require_captcha'] = 'Guests must pass verification when making a post';
 $txt['setting_guests_require_captcha_desc'] = '(Automatically set if you specify a minimum post count below)';
-$txt['guests_report_require_captcha'] = 'Guests must pass verification when reporting a post'; // Deprecated
 
 $txt['configure_verification_means'] = 'Configure Verification Methods';
 $txt['setting_qa_verification_number'] = 'Number of verification questions user must answer';

+ 2 - 2
Themes/default/languages/Packages.english.php

@@ -75,8 +75,8 @@ $txt['package_installed_redirecting'] = 'Redirecting...';
 $txt['package_installed_redirect_go_now'] = 'Redirect Now';
 $txt['package_installed_redirect_cancel'] = 'Return to Package Manager';
 
-$txt['packages_latest'] = 'Latest Packages';
-$txt['packages_latest_fetch'] = 'Attempting to fetch the most popular and recent packages from www.simplemachines.org...';
+$txt['packages_adding_title'] = 'Obtaining Packages';
+$txt['packages_adding'] = 'You can always find new packages for your forum from the SMF modifications area - <strong><a href="http://custom.simplemachines.org/mods/" target="_blank">http://custom.simplemachines.org/mods/</a></strong>. You can browse them on the website, read the comments, and download them to your computer and then upload them to your forum from there.<br /><br />If you run into any questions with modifications, each modification published on simplemachines.org has a dedicated topic about it where support and comments should be directed to.';
 
 $txt['package_upgrade'] = 'Upgrade';
 $txt['package_uninstall_readme'] = 'Uninstallation Readme';

+ 1 - 53
Themes/default/languages/Post.english.php

@@ -9,35 +9,7 @@ $txt['subject_not_filled'] = 'The subject field was not filled out. It is requir
 $txt['message_body_not_filled'] = 'The message body was not filled out. It is required.';
 // Use numeric entities in the below string.
 $txt['add_bbc'] = 'Add BBC tags';
-$txt['bold'] = 'Bold'; // deprecated
-$txt['italic'] = 'Italicized'; // deprecated
-$txt['underline'] = 'Underline'; // deprecated
-$txt['center'] = 'Centered'; // deprecated
-$txt['hyperlink'] = 'Insert Hyperlink'; // deprecated
-$txt['insert_email'] = 'Insert Email'; // deprecated
-$txt['bbc_code'] = 'Insert Code'; // deprecated
-// Escape any single quotes in here twice.. 'it\'s' -> 'it\\\'s'.
-$txt['bbc_quote'] = 'Insert Quote'; // deprecated
-$txt['list'] = 'Insert List'; // deprecated
-$txt['list_unordered'] = 'Insert unordered list'; // deprecated
-$txt['list_ordered'] = 'Insert ordered list'; // deprecated
-
-$txt['change_color'] = 'Change color'; // deprecated
-$txt['black'] = 'Black'; // deprecated
-$txt['red'] = 'Red'; // deprecated
-$txt['yellow'] = 'Yellow'; // deprecated
-$txt['pink'] = 'Pink'; // deprecated
-$txt['green'] = 'Green'; // deprecated
-$txt['orange'] = 'Orange'; // deprecated
-$txt['purple'] = 'Purple'; // deprecated
-$txt['blue'] = 'Blue'; // deprecated
-$txt['beige'] = 'Beige'; // deprecated
-$txt['brown'] = 'Brown'; // deprecated
-$txt['teal'] = 'Teal'; // deprecated
-$txt['navy'] = 'Navy'; // deprecated
-$txt['maroon'] = 'Maroon'; // deprecated
-$txt['lime_green'] = 'Lime Green'; // deprecated
-$txt['white'] = 'White'; // deprecated
+
 $txt['disable_smileys'] = 'Disable smileys';
 $txt['dont_use_smileys'] = 'Don\'t use smileys.';
 // Escape any single quotes in here twice.. 'it\'s' -> 'it\\\'s'.
@@ -50,33 +22,9 @@ $txt['question_mark'] = 'Question mark';
 $txt['icon_poll'] = 'Poll';
 $txt['lamp'] = 'Lamp';
 $txt['add_smileys'] = 'Add smileys';
-$txt['flash'] = 'Insert Flash'; // deprecated
-$txt['ftp'] = 'Insert FTP Link'; // deprecated
-$txt['image'] = 'Insert image'; // deprecated
-$txt['table'] = 'Insert table'; // deprecated
-$txt['table_td'] = 'Insert table column'; // deprecated
 $txt['topic_notify_no'] = 'There are no topics with notification.';
-$txt['marquee'] = 'Marquee'; // deprecated
-$txt['teletype'] = 'Teletype'; // deprecated
-$txt['strike'] = 'Strikethrough'; // deprecated
-$txt['glow'] = 'Glow'; // deprecated
-$txt['shadow'] = 'Shadow'; // deprecated
-$txt['preformatted'] = 'Preformatted text'; // deprecated
-$txt['left_align'] = 'Left align'; // deprecated
-$txt['right_align'] = 'Right align'; // deprecated
-$txt['superscript'] = 'Superscript'; // deprecated
-$txt['subscript'] = 'Subscript'; // deprecated
-$txt['table_tr'] = 'Insert table row'; // deprecated
 // post_too_long seems unused (duplicate in Errors: error_post_too_long
 $txt['post_too_long'] = 'Your message is too long. Please go back and shorten it, then try again.';
-$txt['horizontal_rule'] = 'Horizontal Rule'; // deprecated
-$txt['font_size'] = 'Font size'; // deprecated
-$txt['font_face'] = 'Font face'; // deprecated
-$txt['toggle_view'] = 'Toggle view'; // deprecated
-$txt['unformat_text'] = 'Remove formatting'; // deprecated
-
-$txt['rich_edit_wont_work'] = 'Your browser does not support Rich Text editing.'; // deprecated
-$txt['rich_edit_function_disabled'] = 'Your browser does not support this function.'; // deprecated
 
 // Use numeric entities in the below five strings.
 $txt['notifyUnsubscribe'] = 'Unsubscribe to this topic by clicking here';

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

@@ -178,7 +178,6 @@ $txt['groupmembership'] = 'Group Membership';
 $txt['groupMembership_info'] = 'In this section of your profile you can change which groups you belong to.';
 $txt['ignoreboards'] = 'Ignore Boards Options';
 $txt['ignoreboards_info'] = 'This page lets you ignore particular boards.  When a board is ignored, the new post indicator will not show up on the board index.  New posts will not show up using the "unread post" search link (when searching it will not look in those boards) however, ignored boards will still appear on the board index and upon entering will show which topics have new posts.  When using the "unread replies" link, new posts in an ignored board will still be shown.';
-$txt['pmprefs'] = 'Personal Messaging';
 
 $txt['profileAction'] = 'Actions';
 $txt['deleteAccount'] = 'Delete this account';

+ 6 - 3
Themes/default/languages/Reports.english.php

@@ -59,6 +59,8 @@ $txt['board_perms_name_post_unapproved_attachments'] = 'Post unapproved attachme
 $txt['board_perms_name_post_unapproved_topics'] = 'Post unapproved topics';
 $txt['board_perms_name_post_unapproved_replies_any'] = 'Post unapproved replies in any topic';
 $txt['board_perms_name_post_unapproved_replies_own'] = 'Post unapproved replies in own topic';
+$txt['board_perms_name_post_draft'] = 'Save drafts of posts';
+$txt['board_perms_name_post_autosave_draft'] = 'Automatically save drafts of posts';
 $txt['board_perms_name_remove_any'] = 'Remove any topic';
 $txt['board_perms_name_remove_own'] = 'Remove own topics';
 $txt['board_perms_name_report_any'] = 'Report any post';
@@ -112,6 +114,8 @@ $txt['group_perms_name_manage_smileys'] = 'Manage smileys and message icons';
 $txt['group_perms_name_moderate_forum'] = 'Moderate the forum';
 $txt['group_perms_name_pm_read'] = 'Read personal messages';
 $txt['group_perms_name_pm_send'] = 'Send personal messages';
+$txt['group_perms_name_pm_draft'] = 'Save draft personal messages';
+$txt['group_perms_name_pm_autosave_draft'] = 'Automatically save draft personal messages';
 $txt['group_perms_name_profile_extra_any'] = 'Edit any additional options';
 $txt['group_perms_name_profile_extra_own'] = 'Edit own additional options';
 $txt['group_perms_name_profile_identity_any'] = 'Edit any account settings';
@@ -123,10 +127,9 @@ $txt['group_perms_name_profile_remove_any'] = 'Delete any account';
 $txt['group_perms_name_profile_remove_own'] = 'Delete own account';
 $txt['group_perms_name_profile_title_any'] = 'Edit any custom title';
 $txt['group_perms_name_profile_title_own'] = 'Edit own custom title';
-$txt['group_perms_name_profile_view_any'] = 'View any profile';
-$txt['group_perms_name_profile_view_own'] = 'View  own profile';
+$txt['group_perms_name_profile_view'] = 'View any user\'s profile';
 $txt['group_perms_name_search_posts'] = 'Search for posts';
-$txt['group_perms_name_send_mail'] = 'Send a forum email to members';
+$txt['group_perms_name_send_email_to_members'] = 'Send a forum email to members';
 $txt['group_perms_name_view_mlist'] = 'View the memberlist';
 $txt['group_perms_name_view_stats'] = 'View forum stats';
 $txt['group_perms_name_who_view'] = 'See who\'s online';

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

@@ -827,5 +827,5 @@ $txt['debug_hide_queries'] = '[Hide Queries]';
 $txt['debug_tokens'] = 'Tokens: ';
 $txt['debug_browser'] = 'Browser ID: ';
 $txt['debug_hooks'] = 'Hooks called: ';
-
+$txt['are_sure_mark_read'] = 'Are you sure you want to mark messages as read?';
 ?>

+ 1 - 8
Themes/default/scripts/admin.js

@@ -95,14 +95,7 @@ smf_AdminIndex.prototype.checkUpdateAvailable = function ()
 	// Parse in the package download URL if it exists in the string.
 	document.getElementById('update-link').href = this.opt.sUpdateNotificationLink.replace('%package%', window.smfUpdatePackage);
 
-	// If we decide to override life into "red" mode, do it.
-	if ('smfUpdateCritical' in window)
-	{
-		document.getElementById('update_title').style.backgroundColor = '#dd2222';
-		document.getElementById('update_title').style.color = 'white';
-		document.getElementById('update_message').style.backgroundColor = '#eebbbb';
-		document.getElementById('update_message').style.color = 'black';
-	}
+	oContainer.className = ('smfUpdateCritical' in window) ? 'errorbox' : 'noticebox';
 }
 
 

+ 0 - 9
Themes/default/scripts/script.js

@@ -1593,15 +1593,6 @@ function updateActionDef(optNum)
 	}
 }
 
-function smfSetLatestPackages()
-{
-	if (typeof(window.smfLatestPackages) != "undefined")
-		setInnerHTML(document.getElementById("packagesLatest"), window.smfLatestPackages);
-
-	if (tempOldOnload)
-	tempOldOnload();
-}
-
 function updateAuthMethod()
 {
 	// What authentication method is being used?

+ 4 - 7
other/install_2-1_mysql.sql

@@ -26,9 +26,8 @@ VALUES
 	(1, 'current-version.js', '/smf/', 'version=%3$s', '', 'text/javascript'),
 	(2, 'detailed-version.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript'),
 	(3, 'latest-news.js', '/smf/', 'language=%1$s&format=%2$s', '', 'text/javascript'),
-	(4, 'latest-packages.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript'),
-	(5, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript'),
-	(6, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
+	(4, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript'),
+	(5, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
 # --------------------------------------------------------
 
 #
@@ -1489,8 +1488,7 @@ VALUES (-1, 'search_posts'),
 	(-1, 'view_stats'),
 	(0, 'view_mlist'),
 	(0, 'search_posts'),
-	(0, 'profile_view_own'),
-	(0, 'profile_view_any'),
+	(0, 'profile_view'),
 	(0, 'pm_read'),
 	(0, 'pm_send'),
 	(0, 'pm_draft'),
@@ -1514,8 +1512,7 @@ VALUES (-1, 'search_posts'),
 	(0, 'karma_edit'),
 	(2, 'view_mlist'),
 	(2, 'search_posts'),
-	(2, 'profile_view_own'),
-	(2, 'profile_view_any'),
+	(2, 'profile_view'),
 	(2, 'pm_read'),
 	(2, 'pm_send'),
 	(2, 'pm_draft'),

+ 4 - 7
other/install_2-1_postgresql.sql

@@ -172,9 +172,8 @@ CREATE INDEX {$db_prefix}admin_info_files_filename ON {$db_prefix}admin_info_fil
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (1, 'current-version.js', '/smf/', 'version=%3$s', '', 'text/javascript');
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (2, 'detailed-version.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (3, 'latest-news.js', '/smf/', 'language=%1$s&format=%2$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (4, 'latest-packages.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (5, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (6, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
+INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (4, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
+INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (5, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
 # --------------------------------------------------------
 
 #
@@ -1939,8 +1938,7 @@ INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (-1, 'calendar
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (-1, 'view_stats');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'view_mlist');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'search_posts');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view_own');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view_any');
+INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_read');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_send');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_draft');
@@ -1964,8 +1962,7 @@ INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'send_emai
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'karma_edit');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'view_mlist');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'search_posts');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view_own');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view_any');
+INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_read');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_send');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_draft');

+ 4 - 7
other/install_2-1_sqlite.sql

@@ -28,9 +28,8 @@ BEGIN TRANSACTION;
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (1, 'current-version.js', '/smf/', 'version=%3$s', '', 'text/javascript');
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (2, 'detailed-version.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (3, 'latest-news.js', '/smf/', 'language=%1$s&format=%2$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (4, 'latest-packages.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (5, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (6, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
+INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (4, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
+INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (5, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
 COMMIT;
 
 # --------------------------------------------------------
@@ -1615,8 +1614,7 @@ INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (-1, 'calendar
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (-1, 'view_stats');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'view_mlist');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'search_posts');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view_own');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view_any');
+INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_read');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_send');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_draft');
@@ -1640,8 +1638,7 @@ INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'send_emai
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'karma_edit');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'view_mlist');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'search_posts');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view_own');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view_any');
+INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_read');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_send');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_draft');

+ 4 - 7
other/install_2-1_sqlite3.sql

@@ -28,9 +28,8 @@ BEGIN TRANSACTION;
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (1, 'current-version.js', '/smf/', 'version=%3$s', '', 'text/javascript');
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (2, 'detailed-version.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
 INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (3, 'latest-news.js', '/smf/', 'language=%1$s&format=%2$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (4, 'latest-packages.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (5, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
-INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (6, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
+INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (4, 'latest-smileys.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
+INSERT INTO {$db_prefix}admin_info_files (id_file, filename, path, parameters, data, filetype) VALUES (5, 'latest-themes.js', '/smf/', 'language=%1$s&version=%3$s', '', 'text/javascript');
 COMMIT;
 
 # --------------------------------------------------------
@@ -1615,8 +1614,7 @@ INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (-1, 'calendar
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (-1, 'view_stats');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'view_mlist');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'search_posts');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view_own');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view_any');
+INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'profile_view');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_read');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_send');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'pm_draft');
@@ -1639,8 +1637,7 @@ INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'send_emai
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (0, 'karma_edit');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'view_mlist');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'search_posts');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view_own');
-INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view_any');
+INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'profile_view');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_read');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_send');
 INSERT INTO {$db_prefix}permissions (id_group, permission) VALUES (2, 'pm_draft');

+ 20 - 0
other/upgrade_2-1_mysql.sql

@@ -452,6 +452,15 @@ DELETE FROM {$db_prefix}settings
 WHERE variable IN ('enableStickyTopics', 'guest_hideContacts');
 ---#
 
+/******************************************************************************/
+--- Removing old Simple Machines files we do not need to fetch any more
+/******************************************************************************/
+---# We no longer call on the latest packages list.
+DELETE FROM {$db_prefix}admin_info_files
+WHERE filename = 'latest-packages.js'
+	AND path = '/smf/';
+---#
+
 /******************************************************************************/
 --- Upgrading "verification questions" feature
 /******************************************************************************/
@@ -509,6 +518,17 @@ SET install_state = 0;
 /******************************************************************************/
 --- Updating profile permissions...
 /******************************************************************************/
+---# Removing the old "view your own profile" permission
+DELETE FROM {$db_prefix}permissions
+WHERE permission = 'profile_view_own';
+---#
+
+---# Updating the old "view any profile" permission
+UPDATE {$db_prefix}permissions
+SET permission = 'profile_view'
+WHERE permission = 'profile_view_any';
+---#
+
 ---# Adding "profile_password_own"
 ---{
 $inserts = array();

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

@@ -515,6 +515,15 @@ DELETE FROM {$db_prefix}settings
 WHERE variable IN ('enableStickyTopics', 'guest_hideContacts');
 ---#
 
+/******************************************************************************/
+--- Removing old Simple Machines files we do not need to fetch any more
+/******************************************************************************/
+---# We no longer call on the latest packages list.
+DELETE FROM {$db_prefix}admin_info_files
+WHERE filename = 'latest-packages.js'
+	AND path = '/smf/';
+---#
+
 /******************************************************************************/
 --- Upgrading "verification questions" feature
 /******************************************************************************/
@@ -583,6 +592,17 @@ SET install_state = 0;
 /******************************************************************************/
 --- Updating profile permissions...
 /******************************************************************************/
+---# Removing the old "view your own profile" permission
+DELETE FROM {$db_prefix}permissions
+WHERE permission = 'profile_view_own';
+---#
+
+---# Updating the old "view any profile" permission
+UPDATE {$db_prefix}permissions
+SET permission = 'profile_view'
+WHERE permission = 'profile_view_any';
+---#
+
 ---# Adding "profile_password_own"
 ---{
 $inserts = array();

+ 21 - 1
other/upgrade_2-1_sqlite.sql

@@ -505,6 +505,15 @@ DELETE FROM {$db_prefix}settings
 WHERE variable IN ('enableStickyTopics', 'guest_hideContacts');
 ---#
 
+/******************************************************************************/
+--- Removing old Simple Machines files we do not need to fetch any more
+/******************************************************************************/
+---# We no longer call on the latest packages list.
+DELETE FROM {$db_prefix}admin_info_files
+WHERE filename = 'latest-packages.js'
+	AND path = '/smf/';
+---#
+
 /******************************************************************************/
 --- Upgrading "verification questions" feature
 /******************************************************************************/
@@ -566,6 +575,17 @@ SET install_state = 0;
 /******************************************************************************/
 --- Updating profile permissions...
 /******************************************************************************/
+---# Removing the old "view your own profile" permission
+DELETE FROM {$db_prefix}permissions
+WHERE permission = 'profile_view_own';
+---#
+
+---# Updating the old "view any profile" permission
+UPDATE {$db_prefix}permissions
+SET permission = 'profile_view'
+WHERE permission = 'profile_view_any';
+---#
+
 ---# Adding "profile_password_own"
 ---{
 $inserts = array();
@@ -800,7 +820,7 @@ ADD COLUMN in_inbox tinyint(3) NOT NULL default '1';
 	}
 }
 
-/******************************************************************************/
+******************************************************************************/
 --- Adding support for edit reasons
 /******************************************************************************/
 ---# Adding "modified_reason" column to messages