Browse Source

Replaced all the remaining inserts directly in {db_prefix}log_actions with calls to logAction + changed a bit logAction to fully support logs from profile pages [Bug 4886]

emanuele 13 years ago
parent
commit
20d00675bb

+ 10 - 5
Sources/Logging.php

@@ -421,6 +421,10 @@ function logAction($action, $extra = array(), $log_type = 'moderate')
 		'admin' => 3,
 	);
 
+	// No point in doing anything, if the log isn't even enabled.
+	if (empty($modSettings['modlog_enabled']) || !isset($log_types[$log_type]))
+		return false;
+
 	if (!is_array($extra))
 		trigger_error('logAction(): data is not an array with action \'' . $action . '\'', E_USER_NOTICE);
 
@@ -469,10 +473,6 @@ function logAction($action, $extra = array(), $log_type = 'moderate')
 		$smcFunc['db_free_result']($request);
 	}
 
-	// No point in doing anything else, if the log isn't even enabled.
-	if (empty($modSettings['modlog_enabled']) || !isset($log_types[$log_type]))
-		return false;
-
 	if (isset($extra['member']) && !is_numeric($extra['member']))
 		trigger_error('logAction(): data\'s member is not a number', E_USER_NOTICE);
 
@@ -497,6 +497,11 @@ function logAction($action, $extra = array(), $log_type = 'moderate')
 		}
 	}
 
+	if (isset($extra['member_affected']))
+		$memID = $extra['member_affected'];
+	else
+		$memID = $user_info['id'];
+
 	$smcFunc['db_insert']('',
 		'{db_prefix}log_actions',
 		array(
@@ -504,7 +509,7 @@ function logAction($action, $extra = array(), $log_type = 'moderate')
 			'id_board' => 'int', 'id_topic' => 'int', 'id_msg' => 'int', 'extra' => 'string-65534',
 		),
 		array(
-			time(), $log_types[$log_type], $user_info['id'], $user_info['ip'], $action,
+			time(), $log_types[$log_type], $memID, $user_info['ip'], $action,
 			$board_id, $topic_id, $msg_id, serialize($extra),
 		),
 		array('id_action')

+ 3 - 15
Sources/ManageMembers.php

@@ -1257,22 +1257,10 @@ function AdminApprove()
 	{
 		$log_action = $_POST['todo'] == 'remind' ? 'remind_member' : 'approve_member';
 		$log_inserts = array();
+
+		require_once($sourcedir . '/Logging.php');
 		foreach ($member_info as $member)
-		{
-			$log_inserts[] = array(
-				time(), 3, $user_info['id'], $user_info['ip'], $log_action,
-				0, 0, 0, serialize(array('member' => $member['id'])),
-			);
-		}
-		$smcFunc['db_insert']('',
-			'{db_prefix}log_actions',
-			array(
-				'log_time' => 'int', 'id_log' => 'int', 'id_member' => 'int', 'ip' => 'string-16', 'action' => 'string',
-				'id_board' => 'int', 'id_topic' => 'int', 'id_msg' => 'int', 'extra' => 'string-65534',
-			),
-			$log_inserts,
-			array('id_action')
-		);
+			logAction($log_action, array('member' => $member['id']), 'admin');
 	}
 
 	// Although updateStats *may* catch this, best to do it manually just in case (Doesn't always sort out unapprovedMembers).

+ 5 - 1
Sources/Profile-Actions.php

@@ -23,7 +23,7 @@ if (!defined('SMF'))
  */
 function activateAccount($memID)
 {
-	global $sourcedir, $context, $user_profile, $modSettings;
+	global $sourcedir, $context, $user_profile, $modSettings, $user_info;
 
 	isAllowedTo('moderate_forum');
 
@@ -43,6 +43,10 @@ function activateAccount($memID)
 		// Actually update this member now, as it guarantees the unapproved count can't get corrupted.
 		updateMemberData($context['id_member'], array('is_activated' => $user_profile[$memID]['is_activated'] >= 10 ? 11 : 1, 'validation_code' => ''));
 
+		// Log what we did?
+		require_once($sourcedir . '/Logging.php');
+		logAction('approve_member', array('member' => $memID), 'admin');
+
 		// If we are doing approval, update the stats for the member just in case.
 		if (in_array($user_profile[$memID]['is_activated'], array(3, 4, 13, 14)))
 			updateSettings(array('unapprovedMembers' => ($modSettings['unapprovedMembers'] > 1 ? $modSettings['unapprovedMembers'] - 1 : 0)));

+ 13 - 15
Sources/Profile-Modify.php

@@ -1175,7 +1175,7 @@ function makeNotificationChanges($memID)
  */
 function makeCustomFieldChanges($memID, $area, $sanitize = true)
 {
-	global $context, $smcFunc, $user_profile, $user_info, $modSettings;
+	global $context, $smcFunc, $user_profile, $user_info, $modSettings, $sourcedir;
 
 	if ($sanitize && isset($_POST['customfield']))
 		$_POST['customfield'] = htmlspecialchars__recursive($_POST['customfield']);
@@ -1243,11 +1243,13 @@ function makeCustomFieldChanges($memID, $area, $sanitize = true)
 		{
 			$log_changes[] = array(
 				'action' => 'customfield_' . $row['col_name'],
-				'id_log' => 2,
-				'log_time' => time(),
-				'id_member' => $memID,
-				'ip' => $user_info['ip'],
-				'extra' => serialize(array('previous' => !empty($user_profile[$memID]['options'][$row['col_name']]) ? $user_profile[$memID]['options'][$row['col_name']] : '', 'new' => $value, 'applicator' => $user_info['id'])),
+				'log_type' => 'user',
+				'extra' => array(
+					'previous' => !empty($user_profile[$memID]['options'][$row['col_name']]) ? $user_profile[$memID]['options'][$row['col_name']] : '',
+					'new' => $value,
+					'applicator' => $user_info['id'],
+					'member_affected' => $memID,
+				),
 			);
 			$changes[] = array(1, $row['col_name'], $value, $memID);
 			$user_profile[$memID]['options'][$row['col_name']] = $value;
@@ -1265,15 +1267,11 @@ function makeCustomFieldChanges($memID, $area, $sanitize = true)
 			array('id_theme', 'variable', 'id_member')
 		);
 		if (!empty($log_changes) && !empty($modSettings['modlog_enabled']))
-			$smcFunc['db_insert']('',
-				'{db_prefix}log_actions',
-				array(
-					'action' => 'string', 'id_log' => 'int', 'log_time' => 'int', 'id_member' => 'int', 'ip' => 'string-16',
-					'extra' => 'string-65534',
-				),
-				$log_changes,
-				array('id_action')
-			);
+		{
+			require_once($sourcedir . '/Logging.php');
+			foreach ($log_changes as $log_change)
+				logAction($log_change['action'], $log_change['extra'], $log_change['log_type']);
+		}
 	}
 }
 

+ 2 - 17
Sources/Profile.php

@@ -619,24 +619,9 @@ function ModifyProfile($post_errors = array())
 			if (!empty($context['log_changes']) && !empty($modSettings['modlog_enabled']))
 			{
 				$log_changes = array();
+				require_once($sourcedir . '/Logging.php');
 				foreach ($context['log_changes'] as $k => $v)
-					$log_changes[] = array(
-						'action' => $k,
-						'id_log' => 2,
-						'log_time' => time(),
-						'id_member' => $memID,
-						'ip' => $user_info['ip'],
-						'extra' => serialize(array_merge($v, array('applicator' => $user_info['id']))),
-					);
-				$smcFunc['db_insert']('',
-					'{db_prefix}log_actions',
-					array(
-						'action' => 'string', 'id_log' => 'int', 'log_time' => 'int', 'id_member' => 'int', 'ip' => 'string-16',
-						'extra' => 'string-65534',
-					),
-					$log_changes,
-					array('id_action')
-				);
+					logAction($k, array_merge($v, array('applicator' => $user_info['id'], 'member_affected' => $memID)), 'user');
 			}
 
 			// Have we got any post save functions to execute?

+ 11 - 34
Sources/Subs-Membergroups.php

@@ -213,7 +213,7 @@ function deleteMembergroups($groups)
  */
 function removeMembersFromGroups($members, $groups = null, $permissionCheckDone = false)
 {
-	global $smcFunc, $user_info, $modSettings;
+	global $smcFunc, $user_info, $modSettings, $sourcedir;
 
 	// You're getting nowhere without this permission, unless of course you are the group's moderator.
 	if (!$permissionCheckDone)
@@ -348,10 +348,7 @@ function removeMembersFromGroups($members, $groups = null, $permissionCheckDone
 		)
 	);
 	while ($row = $smcFunc['db_fetch_assoc']($request))
-		$log_inserts[] = array(
-			time(), 3, $user_info['id'], $user_info['ip'], 'removed_from_group',
-			0, 0, 0, serialize(array('group' => $group_names[$row['id_group']], 'member' => $row['id_member'])),
-		);
+		$log_inserts[] = array('group' => $group_names[$row['id_group']], 'member' => $row['id_member']);
 	$smcFunc['db_free_result']($request);
 
 	$smcFunc['db_query']('', '
@@ -384,10 +381,7 @@ function removeMembersFromGroups($members, $groups = null, $permissionCheckDone
 		// What log entries must we make for this one, eh?
 		foreach (explode(',', $row['additional_groups']) as $group)
 			if (in_array($group, $groups))
-				$log_inserts[] = array(
-					time(), 3, $user_info['id'], $user_info['ip'], 'removed_from_group',
-					0, 0, 0, serialize(array('group' => $group_names[$group], 'member' => $row['id_member'])),
-				);
+				$log_inserts[] = array('group' => $group_names[$group], 'member' => $row['id_member']);
 
 		$updates[$row['additional_groups']][] = $row['id_member'];
 	}
@@ -409,15 +403,11 @@ function removeMembersFromGroups($members, $groups = null, $permissionCheckDone
 
 	// Do the log.
 	if (!empty($log_inserts) && !empty($modSettings['modlog_enabled']))
-		$smcFunc['db_insert']('',
-			'{db_prefix}log_actions',
-			array(
-				'log_time' => 'int', 'id_log' => 'int', 'id_member' => 'int', 'ip' => 'string-16', 'action' => 'string',
-				'id_board' => 'int', 'id_topic' => 'int', 'id_msg' => 'int', 'extra' => 'string-65534',
-			),
-			$log_inserts,
-			array('id_action')
-		);
+	{
+		require_once($sourcedir . 'Logging.php');
+		foreach ($log_inserts as $extra)
+			logAction('removed_from_group', $extra, 'admin');
+	}
 
 	// Mission successful.
 	return true;
@@ -448,7 +438,7 @@ function removeMembersFromGroups($members, $groups = null, $permissionCheckDone
  */
 function addMembersToGroup($members, $group, $type = 'auto', $permissionCheckDone = false)
 {
-	global $smcFunc, $user_info, $modSettings;
+	global $smcFunc, $user_info, $modSettings, $sourcedir;
 
 	// Show your licence, but only if it hasn't been done yet.
 	if (!$permissionCheckDone)
@@ -575,22 +565,9 @@ function addMembersToGroup($members, $group, $type = 'auto', $permissionCheckDon
 
 	// Log the data.
 	$log_inserts = array();
+	require_once($sourcedir . 'Logging.php');
 	foreach ($members as $member)
-		$log_inserts[] = array(
-			time(), 3, $user_info['id'], $user_info['ip'], 'added_to_group',
-			0, 0, 0, serialize(array('group' => $group_names[$group], 'member' => $member)),
-		);
-
-	if (!empty($log_inserts) && !empty($modSettings['modlog_enabled']))
-		$smcFunc['db_insert']('',
-			'{db_prefix}log_actions',
-			array(
-				'log_time' => 'int', 'id_log' => 'int', 'id_member' => 'int', 'ip' => 'string-16', 'action' => 'string',
-				'id_board' => 'int', 'id_topic' => 'int', 'id_msg' => 'int', 'extra' => 'string-65534',
-			),
-			$log_inserts,
-			array('id_action')
-		);
+		logAction('added_to_group', array('group' => $group_names[$group], 'member' => $member), 'admin');
 
 	call_integration_hook('integrate_add_members_to_group', array($log_inserts));
 

+ 2 - 17
Sources/Subs-Members.php

@@ -109,6 +109,7 @@ function deleteMembers($users, $check_not_admin = false)
 	if (empty($users))
 		return;
 
+	require_once($sourcedir . 'Logging.php');
 	// Log the action - regardless of who is deleting it.
 	$log_inserts = array();
 	foreach ($user_log_details as $user)
@@ -116,29 +117,13 @@ function deleteMembers($users, $check_not_admin = false)
 		// Integration rocks!
 		call_integration_hook('integrate_delete_member', array($user[0]));
 
-		// Add it to the administration log for future reference.
-		$log_inserts[] = array(
-			time(), 3, $user_info['id'], $user_info['ip'], 'delete_member',
-			0, 0, 0, serialize(array('member' => $user[0], 'name' => $user[1], 'member_acted' => $user_info['name'])),
-		);
+		logAction('delete_member', array('member' => $user[0], 'name' => $user[1], 'member_acted' => $user_info['name']), 'admin');
 
 		// Remove any cached data if enabled.
 		if (!empty($modSettings['cache_enable']) && $modSettings['cache_enable'] >= 2)
 			cache_put_data('user_settings-' . $user[0], null, 60);
 	}
 
-	// Do the actual logging...
-	if (!empty($log_inserts) && !empty($modSettings['modlog_enabled']))
-		$smcFunc['db_insert']('',
-			'{db_prefix}log_actions',
-			array(
-				'log_time' => 'int', 'id_log' => 'int', 'id_member' => 'int', 'ip' => 'string-16', 'action' => 'string',
-				'id_board' => 'int', 'id_topic' => 'int', 'id_msg' => 'int', 'extra' => 'string-65534',
-			),
-			$log_inserts,
-			array('id_action')
-		);
-
 	// Make these peoples' posts guest posts.
 	$smcFunc['db_query']('', '
 		UPDATE {db_prefix}messages