<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 5.0.0 Beta 10
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2012 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/

/**
* Fetches the integer value associated with a moderator log action string
*
* @param	string	The moderator log action
*
* @return	integer
*/
function fetch_modlogtypes($logtype)
{
	static $modlogtypes = array(
		'closed_thread'								=> 1,
		'opened_thread'								=> 2,
		'thread_moved_to_x'							=> 3,
		'thread_moved_with_redirect_to_a'			=> 4,
		'thread_copied_to_x'						=> 5,
		'thread_edited_visible_x_open_y_sticky_z'	=> 6,
		'thread_merged_with_x'						=> 7,
		'thread_split_to_x'							=> 8,
		'unstuck_thread'							=> 9,
		'stuck_thread'								=> 10,
		'attachment_removed'						=> 11,
		'attachment_uploaded'						=> 12,
		'poll_edited'								=> 13,
		'thread_softdeleted'						=> 14,
		'thread_removed'							=> 15,
		'thread_undeleted'							=> 16,
		'post_x_by_y_softdeleted'					=> 17,
		'post_x_by_y_removed'						=> 18,
		'post_y_by_x_undeleted'						=> 19,
		'post_x_edited'								=> 20,
		'approved_thread'							=> 21,
		'unapproved_thread'							=> 22,
		'thread_merged_from_multiple_threads'		=> 23,
		'unapproved_post'							=> 24,
		'approved_post'								=> 25,
		'post_merged_from_multiple_posts'			=> 26,
		'approved_attachment'						=> 27,
		'unapproved_attachment'						=> 28,
		'thread_title_x_changed'					=> 29,
		'thread_redirect_removed'					=> 30,
		'posts_copied_to_x'							=> 31,

		'album_x_by_y_edited'						=> 32,
		'album_x_by_y_deleted'						=> 33,
		'picture_x_in_y_by_z_edited'				=> 34,
		'picture_x_in_y_by_z_deleted'				=> 35,
		// see 46 below as well

		'social_group_x_edited'						=> 36,
		'social_group_x_deleted'					=> 37,
		'social_group_x_members_managed'			=> 38,
		'social_group_picture_x_in_y_removed'		=> 39,

		'pc_by_x_on_y_edited'						=> 40,
		'pc_by_x_on_y_soft_deleted'					=> 41,
		'pc_by_x_on_y_removed'						=> 42,
		'pc_by_x_on_y_undeleted'					=> 43,
		'pc_by_x_on_y_unapproved'					=> 44,
		'pc_by_x_on_y_approved'						=> 45,

		'picture_x_in_y_by_z_approved'				=> 46,

		'gm_by_x_in_y_for_z_edited'					=> 47,
		'gm_by_x_in_y_for_z_soft_deleted'			=> 48,
		'gm_by_x_in_y_for_z_removed'				=> 49,
		'gm_by_x_in_y_for_z_undeleted'				=> 50,
		'gm_by_x_in_y_for_z_unapproved'				=> 51,
		'gm_by_x_in_y_for_z_approved'				=> 52,

		'vm_by_x_for_y_edited'						=> 53,
		'vm_by_x_for_y_soft_deleted'				=> 54,
		'vm_by_x_for_y_removed'						=> 55,
		'vm_by_x_for_y_undeleted'					=> 56,
		'vm_by_x_for_y_unapproved'					=> 57,
		'vm_by_x_for_y_approved'					=> 58,

		'discussion_by_x_for_y_edited'				=> 59,
		'discussion_by_x_for_y_soft_deleted'		=> 60,
		'discussion_by_x_for_y_removed'				=> 61,
		'discussion_by_x_for_y_undeleted'			=> 62,
		'discussion_by_x_for_y_unapproved'			=> 63,
		'discussion_by_x_for_y_approved'			=> 64,

		'node_moved_to_x'							=> 65,
		'node_x_by_y_removed'						=> 66,
		'node_x_by_y_softdeleted'					=> 67,
		'node_y_by_x_undeleted'						=> 68,
		'node_x_edited'								=> 69,
		'node_x_by_y_note_z_added'					=> 70,

	);

	// Legacy Hook 'fetch_modlogtypes' Removed //

	return !empty($modlogtypes["$logtype"]) ? $modlogtypes["$logtype"] : 0;
}

/**
* Fetches the string associated with a moderator log action integer value
*
* @param	integer	The moderator log action
*
* @return	string
*/
function fetch_modlogactions($logaction)
{
	static $modlogactions = array(
		1	=>	'closed_thread',
		2	=>	'opened_thread',
		3	=>	'thread_moved_to_x',
		4	=>	'thread_moved_with_redirect_to_a',
		5	=>	'thread_copied_to_x',
		6	=>	'thread_edited_visible_x_open_y_sticky_z',
		7	=>	'thread_merged_with_x',
		8	=>	'thread_split_to_x',
		9	=>	'unstuck_thread',
		10	=>	'stuck_thread',
		11	=>	'attachment_removed',
		12	=>	'attachment_uploaded',
		13	=>	'poll_edited',
		14	=>	'thread_softdeleted',
		15	=>	'thread_removed',
		16	=>	'thread_undeleted',
		17	=>	'post_x_by_y_softdeleted',
		18	=>	'post_x_by_y_removed',
		19	=>	'post_y_by_x_undeleted',
		20	=>	'post_x_edited',
		21 =>	'approved_thread',
		22 =>	'unapproved_thread',
		23 =>	'thread_merged_from_multiple_threads',
		24 =>	'unapproved_post',
		25 =>	'approved_post',
		26 =>	'post_merged_from_multiple_posts',
		27 =>	'approved_attachment',
		28 =>	'unapproved_attachment',
		29 =>	'thread_title_x_changed',
		30 =>	'thread_redirect_removed',
		31 =>	'posts_copied_to_x',

		32 =>	'album_x_by_y_edited',
		33 =>	'album_x_by_y_deleted',
		34 =>	'picture_x_in_y_by_z_edited',
		35 =>	'picture_x_in_y_by_z_deleted',
		// see 46 below as well

		36 =>	'social_group_x_edited',
		37 =>	'social_group_x_deleted',
		38 =>	'social_group_x_members_managed',
		39 =>	'social_group_picture_x_in_y_removed',

		40 =>	'pc_by_x_on_y_edited',
		41 =>	'pc_by_x_on_y_soft_deleted',
		42 =>	'pc_by_x_on_y_removed',
		43 =>	'pc_by_x_on_y_undeleted',
		44 =>	'pc_by_x_on_y_unapproved',
		45 =>	'pc_by_x_on_y_approved',

		46 =>	'picture_x_in_y_by_z_approved',

		47 =>	'gm_by_x_in_y_for_z_edited',
		48 =>	'gm_by_x_in_y_for_z_soft_deleted',
		49 =>	'gm_by_x_in_y_for_z_removed',
		50 =>	'gm_by_x_in_y_for_z_undeleted',
		51 =>	'gm_by_x_in_y_for_z_unapproved',
		52 =>	'gm_by_x_in_y_for_z_approved',

		53 =>	'vm_by_x_for_y_edited',
		54 =>	'vm_by_x_for_y_soft_deleted',
		55 =>	'vm_by_x_for_y_removed',
		56 =>	'vm_by_x_for_y_undeleted',
		57 =>	'vm_by_x_for_y_unapproved',
		58 =>	'vm_by_x_for_y_approved',

		59 =>	'discussion_by_x_for_y_edited',
		60 =>	'discussion_by_x_for_y_soft_deleted',
		61 =>	'discussion_by_x_for_y_removed',
		62 =>	'discussion_by_x_for_y_undeleted',
		63 =>	'discussion_by_x_for_y_unapproved',
		64 =>	'discussion_by_x_for_y_approved',
		65 =>	'node_moved_to_x',
		66 =>	'node_x_by_y_removed',
		67 =>	'node_x_by_y_softdeleted',
		68 =>	'node_y_by_x_undeleted',
		69 =>	'node_x_edited',
		70 =>	'node_x_by_y_note_z_added',

	);

	// Legacy Hook 'fetch_modlogactions' Removed //

	return !empty($modlogactions["$logaction"]) ? $modlogactions["$logaction"] : '';
}

/**
* Log errors to a file
*
* @param	string	The error message to be placed within the log
* @param	string	The type of error that occured. php, database, security, etc.
*
* @return	boolean
*/
function log_vbulletin_error($errstring, $type = 'database')
{
	global $vbulletin;
	$options = vB::getDatastore()->getValue('options');

	// do different things depending on the error log type
	switch($type)
	{
		// log PHP E_USER_ERROR, E_USER_WARNING, E_WARNING to file
		case 'php':
			if (!empty($options['errorlogphp']))
			{
				$errfile = $options['errorlogphp'];
				$errstring .= "\r\nDate: " . date('l dS \o\f F Y h:i:s A') . "\r\n";
				$errstring .= "Username: {$vbulletin->userinfo['username']}\r\n";
				$errstring .= 'IP Address: ' . IPADDRESS . "\r\n";
			}
			break;

		// log database error to file
		case 'database':
			if (!empty($options['errorlogdatabase']))
			{
				$errstring = preg_replace("#(\r\n|\r|\n)#s", "\r\n", $errstring);
				$errfile = $vbulletin->options['errorlogdatabase'];
			}
			break;

		// log admin panel login failure to file
		case 'security':
			if (!empty($options['errorlogsecurity']))
			{
				$errfile = $options['errorlogsecurity'];
				$username = $errstring;
				$errstring  = 'Failed admin logon in ' . $vbulletin->db->appname . ' ' . $vbulletin->options['templateversion'] . "\r\n\r\n";
				$errstring .= 'Date: ' . date('l dS \o\f F Y h:i:s A') . "\r\n";
				$errstring .= "Script: http://$_SERVER[HTTP_HOST]" . unhtmlspecialchars($vbulletin->scriptpath) . "\r\n";
				$errstring .= 'Referer: ' . REFERRER . "\r\n";
				$errstring .= "Username: $username\r\n";
				$errstring .= 'IP Address: ' . IPADDRESS . "\r\n";
				$errstring .= "Strikes: $GLOBALS[strikes]/5\r\n";
			}
			break;
	}

	// if no filename is specified, exit this function
	if (!isset($errfile) OR !($errfile = trim($errfile)) OR (defined('DEMO_MODE') AND DEMO_MODE == true))
	{
		return false;
	}

	// rotate the log file if filesize is greater than $vbulletin->options[errorlogmaxsize]
	if ($vbulletin->options['errorlogmaxsize'] != 0 AND $filesize = @filesize("$errfile.log") AND $filesize >= $vbulletin->options['errorlogmaxsize'])
	{
		@copy("$errfile.log", $errfile . TIMENOW . '.log');
		@unlink("$errfile.log");
	}

	// write the log into the appropriate file
	if ($fp = @fopen("$errfile.log", 'a+'))
	{
		@fwrite($fp, "$errstring\r\n=====================================================\r\n\r\n");
		@fclose($fp);
		return true;
	}
	else
	{
		return false;
	}
}

/**
* Performs a check to see if an error email should be sent
*
* @param	mixed	Consistent identifier identifying the error that occured
* @param	string	The type of error that occured. php, database, security, etc.
*
* @return	boolean
*/
function verify_email_vbulletin_error($error = '', $type = 'database')
{
	return true;
}

/**
* Logs the moderation actions that are being performed on the forum
*
* @param	array	Array of information indicating on what data the action was performed
* @param	integer	This value corresponds to the action that was being performed
* @param	string	Other moderator parameters
*/
function log_moderator_action($loginfo, $logtype, $action = '')
{
	if ($result = fetch_modlogtypes($logtype))
	{
		$logtype = $result;
	}

	// Legacy Hook 'log_moderator_action' Removed //

	if (isset($loginfo[0]) AND is_array($loginfo[0]))
	{
		foreach ($loginfo AS $index => $log)
		{
			if (is_array($action))
			{
				$action = serialize($action);
			}
			$modlogsql[] = array(
					intval($logtype) ,
					intval($log['userid']),
					time(),
					intval($log['nodeid']),
					empty($log['nodetitle'])?'':$log['nodetitle'],
					$action,
					IPADDRESS
				);
		}
	}
	else
	{
		if (is_array($action))
		{
			$action = serialize($action);
		}
		$modlogsql[] = array(
				intval($logtype) ,
				vB::getCurrentSession()->get('userid'),
				time(),
				intval($loginfo['nodeid']),
				empty($loginfo['nodetitle'])?'':$loginfo['nodetitle'],
				$action,
				IPADDRESS
			);
	}
	vB::getDbAssertor()->assertQuery('moderatorlog',
			array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_MULTIPLEINSERT,
					vB_dB_Query::FIELDS_KEY => array('type', 'userid', 'dateline', 'nodeid', 'nodetitle', 'action', 'ipaddress'),
					vB_Db_Query::VALUES_KEY => $modlogsql
			)
	);
}

/*======================================================================*\
|| ####################################################################
|| # 
|| # CVS: $RCSfile$ - $Revision: 65184 $
|| ####################################################################
\*======================================================================*/
?>
