Blame Identity/Models/Html/phpBB/3.0.4/includes/acp/acp_reasons.php

d6e8d8
d6e8d8
/**
d6e8d8
*
d6e8d8
* @package acp
d6e8d8
* @version $Id: acp_reasons.php 8479 2008-03-29 00:22:48Z naderman $
d6e8d8
* @copyright (c) 2005 phpBB Group
d6e8d8
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
d6e8d8
*
d6e8d8
*/
d6e8d8
d6e8d8
/**
d6e8d8
* @ignore
d6e8d8
*/
d6e8d8
if (!defined('IN_PHPBB'))
d6e8d8
{
d6e8d8
	exit;
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* @package acp
d6e8d8
*/
d6e8d8
class acp_reasons
d6e8d8
{
d6e8d8
	var $u_action;
d6e8d8
d6e8d8
	function main($id, $mode)
d6e8d8
	{
d6e8d8
		global $db, $user, $auth, $template, $cache;
d6e8d8
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
d6e8d8
d6e8d8
		$user->add_lang(array('mcp', 'acp/posting'));
d6e8d8
d6e8d8
		// Set up general vars
d6e8d8
		$action = request_var('action', '');
d6e8d8
		$submit = (isset($_POST['submit'])) ? true : false;
d6e8d8
		$reason_id = request_var('id', 0);
d6e8d8
d6e8d8
		$this->tpl_name = 'acp_reasons';
d6e8d8
		$this->page_title = 'ACP_REASONS';
d6e8d8
d6e8d8
		$form_name = 'acp_reason';
d6e8d8
		add_form_key('acp_reason');
d6e8d8
d6e8d8
		$error = array();
d6e8d8
d6e8d8
		switch ($action)
d6e8d8
		{
d6e8d8
			case 'add':
d6e8d8
			case 'edit':
d6e8d8
d6e8d8
				$reason_row = array(
d6e8d8
					'reason_title'			=> utf8_normalize_nfc(request_var('reason_title', '', true)),
d6e8d8
					'reason_description'	=> utf8_normalize_nfc(request_var('reason_description', '', true)),
d6e8d8
				);
d6e8d8
d6e8d8
				if ($submit)
d6e8d8
				{
d6e8d8
					if (!check_form_key($form_name))
d6e8d8
					{
d6e8d8
						$error[] = $user->lang['FORM_INVALID'];
d6e8d8
					}
d6e8d8
					// Reason specified?
d6e8d8
					if (!$reason_row['reason_title'] || !$reason_row['reason_description'])
d6e8d8
					{
d6e8d8
						$error[] = $user->lang['NO_REASON_INFO'];
d6e8d8
					}
d6e8d8
d6e8d8
					$check_double = ($action == 'add') ? true : false;
d6e8d8
d6e8d8
					if ($action == 'edit')
d6e8d8
					{
d6e8d8
						$sql = 'SELECT reason_title
d6e8d8
							FROM ' . REPORTS_REASONS_TABLE . "
d6e8d8
							WHERE reason_id = $reason_id";
d6e8d8
						$result = $db->sql_query($sql);
d6e8d8
						$row = $db->sql_fetchrow($result);
d6e8d8
						$db->sql_freeresult($result);
d6e8d8
d6e8d8
						if (strtolower($row['reason_title']) == 'other' || strtolower($reason_row['reason_title']) == 'other')
d6e8d8
						{
d6e8d8
							$reason_row['reason_title'] = 'other';
d6e8d8
						}
d6e8d8
d6e8d8
						if ($row['reason_title'] != $reason_row['reason_title'])
d6e8d8
						{
d6e8d8
							$check_double = true;
d6e8d8
						}
d6e8d8
					}
d6e8d8
d6e8d8
					// Check for same reason if adding it...
d6e8d8
					if ($check_double)
d6e8d8
					{
d6e8d8
						$sql = 'SELECT reason_id
d6e8d8
							FROM ' . REPORTS_REASONS_TABLE . "
d6e8d8
							WHERE reason_title = '" . $db->sql_escape($reason_row['reason_title']) . "'";
d6e8d8
						$result = $db->sql_query($sql);
d6e8d8
						$row = $db->sql_fetchrow($result);
d6e8d8
						$db->sql_freeresult($result);
d6e8d8
d6e8d8
						if ($row || ($action == 'add' && strtolower($reason_row['reason_title']) == 'other'))
d6e8d8
						{
d6e8d8
							$error[] = $user->lang['REASON_ALREADY_EXIST'];
d6e8d8
						}
d6e8d8
					}
d6e8d8
d6e8d8
					if (!sizeof($error))
d6e8d8
					{
d6e8d8
						// New reason?
d6e8d8
						if ($action == 'add')
d6e8d8
						{
d6e8d8
							// Get new order...
d6e8d8
							$sql = 'SELECT MAX(reason_order) as max_reason_order
d6e8d8
								FROM ' . REPORTS_REASONS_TABLE;
d6e8d8
							$result = $db->sql_query($sql);
d6e8d8
							$max_order = (int) $db->sql_fetchfield('max_reason_order');
d6e8d8
							$db->sql_freeresult($result);
d6e8d8
							
d6e8d8
							$sql_ary = array(
d6e8d8
								'reason_title'			=> (string) $reason_row['reason_title'],
d6e8d8
								'reason_description'	=> (string) $reason_row['reason_description'],
d6e8d8
								'reason_order'			=> $max_order + 1
d6e8d8
							);
d6e8d8
d6e8d8
							$db->sql_query('INSERT INTO ' . REPORTS_REASONS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
d6e8d8
d6e8d8
							$log = 'ADDED';
d6e8d8
						}
d6e8d8
						else if ($reason_id)
d6e8d8
						{
d6e8d8
							$sql_ary = array(
d6e8d8
								'reason_title'			=> (string) $reason_row['reason_title'],
d6e8d8
								'reason_description'	=> (string) $reason_row['reason_description'],
d6e8d8
							);
d6e8d8
d6e8d8
							$db->sql_query('UPDATE ' . REPORTS_REASONS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
d6e8d8
								WHERE reason_id = ' . $reason_id);
d6e8d8
d6e8d8
							$log = 'UPDATED';
d6e8d8
						}
d6e8d8
d6e8d8
						add_log('admin', 'LOG_REASON_' . $log, $reason_row['reason_title']);
d6e8d8
						trigger_error($user->lang['REASON_' . $log] . adm_back_link($this->u_action));
d6e8d8
					}
d6e8d8
				}
d6e8d8
				else if ($reason_id)
d6e8d8
				{
d6e8d8
					$sql = 'SELECT *
d6e8d8
						FROM ' . REPORTS_REASONS_TABLE . '
d6e8d8
						WHERE reason_id = ' . $reason_id;
d6e8d8
					$result = $db->sql_query($sql);
d6e8d8
					$reason_row = $db->sql_fetchrow($result);
d6e8d8
					$db->sql_freeresult($result);
d6e8d8
d6e8d8
					if (!$reason_row)
d6e8d8
					{
d6e8d8
						trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
					}
d6e8d8
				}
d6e8d8
d6e8d8
				$l_title = ($action == 'edit') ? 'EDIT' : 'ADD';
d6e8d8
d6e8d8
				$translated = false;
d6e8d8
d6e8d8
				// If the reason is defined within the language file, we will use the localized version, else just use the database entry...
d6e8d8
				if (isset($user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])]))
d6e8d8
				{
d6e8d8
					$translated = true;
d6e8d8
				}
d6e8d8
d6e8d8
				$template->assign_vars(array(
d6e8d8
					'L_TITLE'		=> $user->lang['REASON_' . $l_title],
d6e8d8
					'U_ACTION'		=> $this->u_action . "&id=$reason_id&action=$action",
d6e8d8
					'U_BACK'		=> $this->u_action,
d6e8d8
					'ERROR_MSG'		=> (sizeof($error)) ? implode('
', $error) : '',
d6e8d8
					
d6e8d8
					'REASON_TITLE'			=> $reason_row['reason_title'],
d6e8d8
					'REASON_DESCRIPTION'	=> $reason_row['reason_description'],
d6e8d8
d6e8d8
					'TRANSLATED_TITLE'		=> ($translated) ? $user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])] : '',
d6e8d8
					'TRANSLATED_DESCRIPTION'=> ($translated) ? $user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])] : '',
d6e8d8
d6e8d8
					'S_AVAILABLE_TITLES'	=> implode(', ', array_map('htmlspecialchars', array_keys($user->lang['report_reasons']['TITLE']))),
d6e8d8
					'S_EDIT_REASON'			=> true,
d6e8d8
					'S_TRANSLATED'			=> $translated,
d6e8d8
					'S_ERROR'				=> (sizeof($error)) ? true : false,
d6e8d8
					)
d6e8d8
				);
d6e8d8
d6e8d8
				return;
d6e8d8
			break;
d6e8d8
d6e8d8
			case 'delete':
d6e8d8
d6e8d8
				$sql = 'SELECT *
d6e8d8
					FROM ' . REPORTS_REASONS_TABLE . '
d6e8d8
					WHERE reason_id = ' . $reason_id;
d6e8d8
				$result = $db->sql_query($sql);
d6e8d8
				$reason_row = $db->sql_fetchrow($result);
d6e8d8
				$db->sql_freeresult($result);
d6e8d8
d6e8d8
				if (!$reason_row)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				if (strtolower($reason_row['reason_title']) == 'other')
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_REMOVE_DEFAULT_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				// Let the deletion be confirmed...
d6e8d8
				if (confirm_box(true))
d6e8d8
				{
d6e8d8
					$sql = 'SELECT reason_id
d6e8d8
						FROM ' . REPORTS_REASONS_TABLE . "
d6e8d8
						WHERE LOWER(reason_title) = 'other'";
d6e8d8
					$result = $db->sql_query($sql);
d6e8d8
					$other_reason_id = (int) $db->sql_fetchfield('reason_id');
d6e8d8
					$db->sql_freeresult($result);
d6e8d8
d6e8d8
					switch ($db->sql_layer)
d6e8d8
					{
d6e8d8
						// The ugly one!
d6e8d8
						case 'mysqli':
d6e8d8
						case 'mysql4':
d6e8d8
						case 'mysql':
d6e8d8
							// Change the reports using this reason to 'other'
d6e8d8
							$sql = 'UPDATE ' . REPORTS_TABLE . '
d6e8d8
								SET reason_id = ' . $other_reason_id . ", report_text = CONCAT('" . $db->sql_escape($reason_row['reason_description']) . "\n\n', report_text)
d6e8d8
								WHERE reason_id = $reason_id";
d6e8d8
						break;
d6e8d8
d6e8d8
						// Standard? What's that?
d6e8d8
						case 'mssql':
d6e8d8
						case 'mssql_odbc':
d6e8d8
							// Change the reports using this reason to 'other'
d6e8d8
							$sql = "DECLARE @ptrval binary(16)
d6e8d8
d6e8d8
									SELECT @ptrval = TEXTPTR(report_text)
d6e8d8
										FROM " . REPORTS_TABLE . "
d6e8d8
									WHERE reason_id = " . $reason_id . "
d6e8d8
d6e8d8
									UPDATETEXT " . REPORTS_TABLE . ".report_text @ptrval 0 0 '" . $db->sql_escape($reason_row['reason_description']) . "\n\n'
d6e8d8
d6e8d8
									UPDATE " . REPORTS_TABLE . '
d6e8d8
										SET reason_id = ' . $other_reason_id . "
d6e8d8
									WHERE reason_id = $reason_id";
d6e8d8
						break;
d6e8d8
d6e8d8
						// Teh standard
d6e8d8
						case 'postgres':
d6e8d8
						case 'oracle':
d6e8d8
						case 'firebird':
d6e8d8
						case 'sqlite':
d6e8d8
							// Change the reports using this reason to 'other'
d6e8d8
							$sql = 'UPDATE ' . REPORTS_TABLE . '
d6e8d8
								SET reason_id = ' . $other_reason_id . ", report_text = '" . $db->sql_escape($reason_row['reason_description']) . "\n\n' || report_text
d6e8d8
								WHERE reason_id = $reason_id";
d6e8d8
						break;
d6e8d8
					}
d6e8d8
					$db->sql_query($sql);
d6e8d8
d6e8d8
					$db->sql_query('DELETE FROM ' . REPORTS_REASONS_TABLE . ' WHERE reason_id = ' . $reason_id);
d6e8d8
d6e8d8
					add_log('admin', 'LOG_REASON_REMOVED', $reason_row['reason_title']);
d6e8d8
					trigger_error($user->lang['REASON_REMOVED'] . adm_back_link($this->u_action));
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
d6e8d8
						'i'			=> $id,
d6e8d8
						'mode'		=> $mode,
d6e8d8
						'action'	=> $action,
d6e8d8
						'id'		=> $reason_id))
d6e8d8
					);
d6e8d8
				}
d6e8d8
d6e8d8
			break;
d6e8d8
d6e8d8
			case 'move_up':
d6e8d8
			case 'move_down':
d6e8d8
d6e8d8
				$order = request_var('order', 0);
d6e8d8
				$order_total = $order * 2 + (($action == 'move_up') ? -1 : 1);
d6e8d8
d6e8d8
				$sql = 'UPDATE ' . REPORTS_REASONS_TABLE . '
d6e8d8
					SET reason_order = ' . $order_total . ' - reason_order
d6e8d8
					WHERE reason_order IN (' . $order . ', ' . (($action == 'move_up') ? $order - 1 : $order + 1) . ')';
d6e8d8
				$db->sql_query($sql);
d6e8d8
d6e8d8
			break;
d6e8d8
		}
d6e8d8
d6e8d8
		// By default, check that order is valid and fix it if necessary
d6e8d8
		$sql = 'SELECT reason_id, reason_order
d6e8d8
			FROM ' . REPORTS_REASONS_TABLE . '
d6e8d8
			ORDER BY reason_order';
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
d6e8d8
		if ($row = $db->sql_fetchrow($result))
d6e8d8
		{
d6e8d8
			$order = 0;
d6e8d8
			do
d6e8d8
			{
d6e8d8
				++$order;
d6e8d8
				
d6e8d8
				if ($row['reason_order'] != $order)
d6e8d8
				{
d6e8d8
					$sql = 'UPDATE ' . REPORTS_REASONS_TABLE . "
d6e8d8
						SET reason_order = $order
d6e8d8
						WHERE reason_id = {$row['reason_id']}";
d6e8d8
					$db->sql_query($sql);
d6e8d8
				}
d6e8d8
			}
d6e8d8
			while ($row = $db->sql_fetchrow($result));
d6e8d8
		}
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
d6e8d8
		$template->assign_vars(array(
d6e8d8
			'U_ACTION'			=> $this->u_action,
d6e8d8
			)
d6e8d8
		);
d6e8d8
d6e8d8
		// Reason count
d6e8d8
		$sql = 'SELECT reason_id, COUNT(reason_id) AS reason_count
d6e8d8
			FROM ' . REPORTS_TABLE . '
d6e8d8
			GROUP BY reason_id';
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
d6e8d8
		$reason_count = array();
d6e8d8
		while ($row = $db->sql_fetchrow($result))
d6e8d8
		{
d6e8d8
			$reason_count[$row['reason_id']] = $row['reason_count'];
d6e8d8
		}
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
d6e8d8
		$sql = 'SELECT *
d6e8d8
			FROM ' . REPORTS_REASONS_TABLE . '
d6e8d8
			ORDER BY reason_order ASC';
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
d6e8d8
		while ($row = $db->sql_fetchrow($result))
d6e8d8
		{
d6e8d8
			$translated = false;
d6e8d8
			$other_reason = ($row['reason_title'] == 'other') ? true : false;
d6e8d8
d6e8d8
			// If the reason is defined within the language file, we will use the localized version, else just use the database entry...
d6e8d8
			if (isset($user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])]))
d6e8d8
			{
d6e8d8
				$row['reason_description'] = $user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])];
d6e8d8
				$row['reason_title'] = $user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])];
d6e8d8
d6e8d8
				$translated = true;
d6e8d8
			}
d6e8d8
d6e8d8
			$template->assign_block_vars('reasons', array(
d6e8d8
				'REASON_TITLE'			=> $row['reason_title'],
d6e8d8
				'REASON_DESCRIPTION'	=> $row['reason_description'],
d6e8d8
				'REASON_COUNT'			=> (isset($reason_count[$row['reason_id']])) ? $reason_count[$row['reason_id']] : 0,
d6e8d8
d6e8d8
				'S_TRANSLATED'		=> $translated,
d6e8d8
				'S_OTHER_REASON'	=> $other_reason,
d6e8d8
d6e8d8
				'U_EDIT'		=> $this->u_action . '&action=edit&id=' . $row['reason_id'],
d6e8d8
				'U_DELETE'		=> (!$other_reason) ? $this->u_action . '&action=delete&id=' . $row['reason_id'] : '',
d6e8d8
				'U_MOVE_UP'		=> $this->u_action . '&action=move_up&order=' . $row['reason_order'],
d6e8d8
				'U_MOVE_DOWN'	=> $this->u_action . '&action=move_down&order=' . $row['reason_order'])
d6e8d8
			);
d6e8d8
		}
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
	}
d6e8d8
}
d6e8d8
d6e8d8
?>