Вход Регистрация
Файл: phpBB3/includes/acp/acp_reasons.php
Строк: 320
<?php
/**
*
* @package acp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
    exit;
}

/**
* @package acp
*/
class acp_reasons
{
    var 
$u_action;

    function 
main($id$mode)
    {
        global 
$db$user$auth$template$cache;
        global 
$config$phpbb_root_path$phpbb_admin_path$phpEx;

        
$user->add_lang(array('mcp''acp/posting'));

        
// Set up general vars
        
$action request_var('action''');
        
$submit = (isset($_POST['submit'])) ? true false;
        
$reason_id request_var('id'0);

        
$this->tpl_name 'acp_reasons';
        
$this->page_title 'ACP_REASONS';

        
$form_name 'acp_reason';
        
add_form_key('acp_reason');

        
$error = array();

        switch (
$action)
        {
            case 
'add':
            case 
'edit':

                
$reason_row = array(
                    
'reason_title'            => utf8_normalize_nfc(request_var('reason_title'''true)),
                    
'reason_description'    => utf8_normalize_nfc(request_var('reason_description'''true)),
                );

                if (
$submit)
                {
                    if (!
check_form_key($form_name))
                    {
                        
$error[] = $user->lang['FORM_INVALID'];
                    }
                    
// Reason specified?
                    
if (!$reason_row['reason_title'] || !$reason_row['reason_description'])
                    {
                        
$error[] = $user->lang['NO_REASON_INFO'];
                    }

                    
$check_double = ($action == 'add') ? true false;

                    if (
$action == 'edit')
                    {
                        
$sql 'SELECT reason_title
                            FROM ' 
REPORTS_REASONS_TABLE "
                            WHERE reason_id = 
$reason_id";
                        
$result $db->sql_query($sql);
                        
$row $db->sql_fetchrow($result);
                        
$db->sql_freeresult($result);

                        if (
strtolower($row['reason_title']) == 'other' || strtolower($reason_row['reason_title']) == 'other')
                        {
                            
$reason_row['reason_title'] = 'other';
                        }

                        if (
$row['reason_title'] != $reason_row['reason_title'])
                        {
                            
$check_double true;
                        }
                    }

                    
// Check for same reason if adding it...
                    
if ($check_double)
                    {
                        
$sql 'SELECT reason_id
                            FROM ' 
REPORTS_REASONS_TABLE "
                            WHERE reason_title = '" 
$db->sql_escape($reason_row['reason_title']) . "'";
                        
$result $db->sql_query($sql);
                        
$row $db->sql_fetchrow($result);
                        
$db->sql_freeresult($result);

                        if (
$row || ($action == 'add' && strtolower($reason_row['reason_title']) == 'other'))
                        {
                            
$error[] = $user->lang['REASON_ALREADY_EXIST'];
                        }
                    }

                    if (!
sizeof($error))
                    {
                        
// New reason?
                        
if ($action == 'add')
                        {
                            
// Get new order...
                            
$sql 'SELECT MAX(reason_order) as max_reason_order
                                FROM ' 
REPORTS_REASONS_TABLE;
                            
$result $db->sql_query($sql);
                            
$max_order = (int) $db->sql_fetchfield('max_reason_order');
                            
$db->sql_freeresult($result);
                            
                            
$sql_ary = array(
                                
'reason_title'            => (string) $reason_row['reason_title'],
                                
'reason_description'    => (string) $reason_row['reason_description'],
                                
'reason_order'            => $max_order 1
                            
);

                            
$db->sql_query('INSERT INTO ' REPORTS_REASONS_TABLE ' ' $db->sql_build_array('INSERT'$sql_ary));

                            
$log 'ADDED';
                        }
                        else if (
$reason_id)
                        {
                            
$sql_ary = array(
                                
'reason_title'            => (string) $reason_row['reason_title'],
                                
'reason_description'    => (string) $reason_row['reason_description'],
                            );

                            
$db->sql_query('UPDATE ' REPORTS_REASONS_TABLE ' SET ' $db->sql_build_array('UPDATE'$sql_ary) . '
                                WHERE reason_id = ' 
$reason_id);

                            
$log 'UPDATED';
                        }

                        
add_log('admin''LOG_REASON_' $log$reason_row['reason_title']);
                        
trigger_error($user->lang['REASON_' $log] . adm_back_link($this->u_action));
                    }
                }
                else if (
$reason_id)
                {
                    
$sql 'SELECT *
                        FROM ' 
REPORTS_REASONS_TABLE '
                        WHERE reason_id = ' 
$reason_id;
                    
$result $db->sql_query($sql);
                    
$reason_row $db->sql_fetchrow($result);
                    
$db->sql_freeresult($result);

                    if (!
$reason_row)
                    {
                        
trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
                    }
                }

                
$l_title = ($action == 'edit') ? 'EDIT' 'ADD';

                
$translated false;

                
// If the reason is defined within the language file, we will use the localized version, else just use the database entry...
                
if (isset($user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])]))
                {
                    
$translated true;
                }

                
$template->assign_vars(array(
                    
'L_TITLE'        => $user->lang['REASON_' $l_title],
                    
'U_ACTION'        => $this->u_action "&amp;id=$reason_id&amp;action=$action",
                    
'U_BACK'        => $this->u_action,
                    
'ERROR_MSG'        => (sizeof($error)) ? implode('<br />'$error) : '',
                    
                    
'REASON_TITLE'            => $reason_row['reason_title'],
                    
'REASON_DESCRIPTION'    => $reason_row['reason_description'],

                    
'TRANSLATED_TITLE'        => ($translated) ? $user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])] : '',
                    
'TRANSLATED_DESCRIPTION'=> ($translated) ? $user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])] : '',

                    
'S_AVAILABLE_TITLES'    => implode(', 'array_map('htmlspecialchars'array_keys($user->lang['report_reasons']['TITLE']))),
                    
'S_EDIT_REASON'            => true,
                    
'S_TRANSLATED'            => $translated,
                    
'S_ERROR'                => (sizeof($error)) ? true false,
                    )
                );

                return;
            break;

            case 
'delete':

                
$sql 'SELECT *
                    FROM ' 
REPORTS_REASONS_TABLE '
                    WHERE reason_id = ' 
$reason_id;
                
$result $db->sql_query($sql);
                
$reason_row $db->sql_fetchrow($result);
                
$db->sql_freeresult($result);

                if (!
$reason_row)
                {
                    
trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
                }

                if (
strtolower($reason_row['reason_title']) == 'other')
                {
                    
trigger_error($user->lang['NO_REMOVE_DEFAULT_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
                }

                
// Let the deletion be confirmed...
                
if (confirm_box(true))
                {
                    
$sql 'SELECT reason_id
                        FROM ' 
REPORTS_REASONS_TABLE "
                        WHERE LOWER(reason_title) = 'other'"
;
                    
$result $db->sql_query($sql);
                    
$other_reason_id = (int) $db->sql_fetchfield('reason_id');
                    
$db->sql_freeresult($result);

                    switch (
$db->sql_layer)
                    {
                        
// The ugly one!
                        
case 'mysqli':
                        case 
'mysql4':
                        case 
'mysql':
                            
// Change the reports using this reason to 'other'
                            
$sql 'UPDATE ' REPORTS_TABLE '
                                SET reason_id = ' 
$other_reason_id ", report_text = CONCAT('" $db->sql_escape($reason_row['reason_description']) . "nn', report_text)
                                WHERE reason_id = 
$reason_id";
                        break;

                        
// Standard? What's that?
                        
case 'mssql':
                        case 
'mssql_odbc':
                        case 
'mssqlnative':
                            
// Change the reports using this reason to 'other'
                            
$sql "DECLARE @ptrval binary(16)

                                    SELECT @ptrval = TEXTPTR(report_text)
                                        FROM " 
REPORTS_TABLE "
                                    WHERE reason_id = " 
$reason_id "

                                    UPDATETEXT " 
REPORTS_TABLE ".report_text @ptrval 0 0 '" $db->sql_escape($reason_row['reason_description']) . "nn'

                                    UPDATE " 
REPORTS_TABLE '
                                        SET reason_id = ' 
$other_reason_id "
                                    WHERE reason_id = 
$reason_id";
                        break;

                        
// Teh standard
                        
case 'postgres':
                        case 
'oracle':
                        case 
'firebird':
                        case 
'sqlite':
                            
// Change the reports using this reason to 'other'
                            
$sql 'UPDATE ' REPORTS_TABLE '
                                SET reason_id = ' 
$other_reason_id ", report_text = '" $db->sql_escape($reason_row['reason_description']) . "nn' || report_text
                                WHERE reason_id = 
$reason_id";
                        break;
                    }
                    
$db->sql_query($sql);

                    
$db->sql_query('DELETE FROM ' REPORTS_REASONS_TABLE ' WHERE reason_id = ' $reason_id);

                    
add_log('admin''LOG_REASON_REMOVED'$reason_row['reason_title']);
                    
trigger_error($user->lang['REASON_REMOVED'] . adm_back_link($this->u_action));
                }
                else
                {
                    
confirm_box(false$user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
                        
'i'            => $id,
                        
'mode'        => $mode,
                        
'action'    => $action,
                        
'id'        => $reason_id))
                    );
                }

            break;

            case 
'move_up':
            case 
'move_down':

                
$order request_var('order'0);
                
$order_total $order + (($action == 'move_up') ? -1);

                
$sql 'UPDATE ' REPORTS_REASONS_TABLE '
                    SET reason_order = ' 
$order_total ' - reason_order
                    WHERE reason_order IN (' 
$order ', ' . (($action == 'move_up') ? $order $order 1) . ')';
                
$db->sql_query($sql);

            break;
        }

        
// By default, check that order is valid and fix it if necessary
        
$sql 'SELECT reason_id, reason_order
            FROM ' 
REPORTS_REASONS_TABLE '
            ORDER BY reason_order'
;
        
$result $db->sql_query($sql);

        if (
$row $db->sql_fetchrow($result))
        {
            
$order 0;
            do
            {
                ++
$order;
                
                if (
$row['reason_order'] != $order)
                {
                    
$sql 'UPDATE ' REPORTS_REASONS_TABLE "
                        SET reason_order = 
$order
                        WHERE reason_id = 
{$row['reason_id']}";
                    
$db->sql_query($sql);
                }
            }
            while (
$row $db->sql_fetchrow($result));
        }
        
$db->sql_freeresult($result);

        
$template->assign_vars(array(
            
'U_ACTION'            => $this->u_action,
            )
        );

        
// Reason count
        
$sql 'SELECT reason_id, COUNT(reason_id) AS reason_count
            FROM ' 
REPORTS_TABLE '
            GROUP BY reason_id'
;
        
$result $db->sql_query($sql);

        
$reason_count = array();
        while (
$row $db->sql_fetchrow($result))
        {
            
$reason_count[$row['reason_id']] = $row['reason_count'];
        }
        
$db->sql_freeresult($result);

        
$sql 'SELECT *
            FROM ' 
REPORTS_REASONS_TABLE '
            ORDER BY reason_order ASC'
;
        
$result $db->sql_query($sql);

        while (
$row $db->sql_fetchrow($result))
        {
            
$translated false;
            
$other_reason = ($row['reason_title'] == 'other') ? true false;

            
// If the reason is defined within the language file, we will use the localized version, else just use the database entry...
            
if (isset($user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])]))
            {
                
$row['reason_description'] = $user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])];
                
$row['reason_title'] = $user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])];

                
$translated true;
            }

            
$template->assign_block_vars('reasons', array(
                
'REASON_TITLE'            => $row['reason_title'],
                
'REASON_DESCRIPTION'    => $row['reason_description'],
                
'REASON_COUNT'            => (isset($reason_count[$row['reason_id']])) ? $reason_count[$row['reason_id']] : 0,

                
'S_TRANSLATED'        => $translated,
                
'S_OTHER_REASON'    => $other_reason,

                
'U_EDIT'        => $this->u_action '&amp;action=edit&amp;id=' $row['reason_id'],
                
'U_DELETE'        => (!$other_reason) ? $this->u_action '&amp;action=delete&amp;id=' $row['reason_id'] : '',
                
'U_MOVE_UP'        => $this->u_action '&amp;action=move_up&amp;order=' $row['reason_order'],
                
'U_MOVE_DOWN'    => $this->u_action '&amp;action=move_down&amp;order=' $row['reason_order'])
            );
        }
        
$db->sql_freeresult($result);
    }
}

?>
Онлайн: 0
Реклама