Вход Регистрация
Файл: apwa/medals.php
Строк: 699
<?php
/***************************************************************************
*
* @package Medals Mod for phpBB3
* @version $Id: medals.php,v 0.8.5 2008/02/06 Gremlinn$
* @copyright (c) 2008 Nathan DuPra (mods@dupra.net)
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
***************************************************************************/
define('IN_PHPBB'true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH './';
$phpEx substr(strrchr(__FILE__'.'), 1);
include(
$phpbb_root_path 'common.' $phpEx);

if ( !
$config['medals_active'] )
{
    
$url     append_sid($phpbb_root_path 'index.' $phpEx);
    
$message "This mod is not active. <br /><br />Click <a href="$url">here</a> to return to the index.<br />";
    
trigger_error($message);    
}

// Gather post and get variables
$mode        request_var('m''');
$from        request_var('f''');
$user_id    request_var('u'0);
$usernames    request_var('add'''true);
$medal_id    request_var('mid'0);
$med_id        request_var('med'0);
$submit        request_var('submit','');
$catchoice    request_var('cat'getfirstcat());

// Dynamic Medal Image creation
if ( $mode == "mi" )
{
    
$medal        request_var('med''');
    
$device        request_var('d''');

    include_once(
$phpbb_root_path 'includes/dynamic_image.' $phpEx);
    
create_dynamic_image($medal,$device);
    exit;
}

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('common'); 

include(
$phpbb_root_path 'includes/functions_posting.' $phpEx);
include(
$phpbb_root_path 'includes/functions_display.' $phpEx);
include(
$phpbb_root_path 'includes/message_parser.' $phpEx);

$user->add_lang('mods/info_medals_mod');
$user->add_lang('posting');

$uid            $bitfield            '';    // will be modified by generate_text_for_storage
$allow_bbcode    $allow_smilies    true;
$allow_urls        false;
$m_flags '3';  // 1 is bbcode, 2 is smiles, 4 is urls (add together to turn on more than one)

$config['points_enable'] = isset($config['points_enable']) ? $config['points_enable'] : 0;

//$start    = request_var('start', 0);
//$pagination_url =append_sid("{$phpbb_root_path}medals.php?cat=".$catchoice);

$sql "SELECT *
    FROM " 
MEDALS_TABLE "
    ORDER BY order_id ASC"
;
$result $db->sql_query($sql);
$medals = array();
while (
$row $db->sql_fetchrow($result))
{
    
$medals[$row['id']] = array( 
        
'name'             => $row['name'], 
        
'image'             => $phpbb_root_path 'images/medals/' $row['image'],
        
'device'         => $phpbb_root_path 'images/medals/devices/' $row['device'],
        
'dynamic'        => $row['dynamic'],
        
'parent'         => $row['parent'], 
        
'id'            => $row['id'],
        
'number'        => $row['number'],
        
'nominated'        => $row['nominated'],
        
'order_id'        => $row['order_id'],
        
'description'    => $row['description'],
        
'points'        => $row['points'],
    );
}
$db->sql_freeresult($result);

$sql "SELECT *
    FROM " 
MEDALS_CATS_TABLE "
    ORDER BY order_id ASC"
;
$result $db->sql_query($sql);
$cats = array();
while (
$row $db->sql_fetchrow($result))
{
    
$cats[$row['id']] = array( 
        
'name'         => $row['name'], 
        
'id'        => $row['id'],
        
'order_id'    => $row['order_id'],
    );
    
$template->assign_block_vars('catlinkrow', array(
                                
'U_CATPAGE'        => append_sid('medals.php?cat=' $row['id']),
                                
'MEDAL_CAT'        => $row['name'],
                        ));
}
$db->sql_freeresult($result);

generate_smilies('inline'0);
$template->assign_vars(array(
    
'S_CAN_AWARD_MEDALS'    => ($user->data['user_type'] == USER_FOUNDER || $auth->acl_get('u_award_medals') ) ? true false,
    
'S_CAN_NOMINATE_MEDALS'    => ($auth->acl_get('u_nominate_medals') && $user_id != $user->data['user_id'] ) ? true false,
    
'U_NOMINATE_PANEL'        => append_sid('medals.php?m=nominate&u=' $user_id),
    
'U_AWARD_PANEL'            => append_sid('medals.php?m=award&u=' $user_id),
    
'U_VALIDATE_PANEL'        => append_sid('medals.php?m=validate&u=' $user_id),
    
'U_AWARDED_PANEL'         => append_sid('medals.php?m=awarded&u=' $user_id),
));

switch (
$mode)
{
    case 
'nominate':
        if ( 
$user->data['user_id'] == ANONYMOUS || !$auth->acl_get('u_nominate_medals') )
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        if ( 
$user_id == || $user_id == ANONYMOUS )
        {
            
trigger_error('NO_USER_ID');
        }
        if ( 
$user_id == $user->data['user_id'] )
        {
            
trigger_error('NOT_SELF');
        }
        
$sql "SELECT *
                FROM " 
MEDALS_AWARDED_TABLE "
                WHERE user_id = 
{$user_id}
                ORDER BY medal_id AND nominated"
;
        
$result $db->sql_query($sql);
        
$my_medals = array();
        while (
$row $db->sql_fetchrow($result))
        {
            
$awarded_by_me = (isset($my_medals[$row['medal_id']]['awarded_by_me']) && $row['nominated'] == 1) ? $my_medals[$row['medal_id']]['awarded_by_me'] : 0;
            
$row['awarded_by_me'] = ($user->data['user_id'] == $row['awarder_id'] && $awarded_by_me == && $row['nominated'] == 1) ? $awarded_by_me;
            
$my_medals[$row['medal_id']] = $row;
        }
        
$db->sql_freeresult($result);
        
        
$sql "SELECT user_id, username, user_colour
            FROM " 
USERS_TABLE "
            WHERE user_id = 
{$user_id}";
        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);
        
        
$username get_username_string('full'$row['user_id'], $row['username'], $row['user_colour'], $row['username']);
        
        
$medals_options '<option value=""></option>';
        
$temp_string '';
        
$i 0;
        foreach (
$cats as $key => $value)
        {
            
$at_least_one false;
            foreach (
$medals as $key2 => $value2)
            {
                if (
$value2['parent'] == $value['id'])
                {
                    
$can_award false;

                    
$my_medals[$value2['id']]['awarded_by_me'] = isset($my_medals[$value2['id']]['awarded_by_me']) ? $my_medals[$value2['id']]['awarded_by_me'] : 0;
                    if ( 
$value2['nominated'] == && $my_medals[$value2['id']]['awarded_by_me'] == )
                    {
                        
$temp_string .= '<option value="' $value2['id'] . '">&bull;&nbsp;' $value2['name'] . '</option>';
                        
$at_least_one true;
                    }
                }
            }
            if (
$at_least_one)
            {
                
$medals_options .= '<option value="">' $value['name'] . '</option>';
                
$medals_options .= $temp_string;
                
$at_least_one false;
                
$temp_string '';
                
$i++;
            }
        }
        if (
$i == 0)
        {
            
trigger_error(sprintf($user->lang['NO_MEDALS_TO_NOMINATE'], append_sid('memberlist.php?mode=viewprofile&u=' $user_id)));
        }
        
        
$medals_arr       'var medals = new Array();';
        
$medals_desc_arr  'var medals_desc = new Array();' ;
        foreach (
$medals as $key => $value)
        {
            
$medals_arr .= 'medals[' $value['id'] . '] = "' $value['image'] . '";';
            
$medals_desc_arr .= 'medals_desc[' $value['id'] . '] = "' $value['description'] . '";';
        }
        
$medals_arr .= "n" $medals_desc_arr "n" ;
        
        
$bbcode_status    = ($config['allow_bbcode']) ? true false;
        
$smilies_status    = ($bbcode_status && $config['allow_smilies']) ? true false;
        
$img_status        = ($bbcode_status) ? true false;
        
$url_status        = ($bbcode_status && $config['allow_post_links']) ? true false;
        
$flash_status    = ($bbcode_status) ? true false;
        
$quote_status    = ($bbcode_status) ? true false;
        
display_custom_bbcodes();
        
        
$template->assign_vars(array(
            
'USERNAME'                => $username,
            
'MEDALS'                => $medals_options,
            
'JS'                    => $medals_arr,
            
'U_MEDALS_ACTION'        => append_sid('medals.php?m=submit_nomination&u=' $user_id),
            
'S_BBCODE_ALLOWED'        => $bbcode_status,
            
'S_BBCODE_IMG'            => $img_status,
            
'S_BBCODE_URL'            => $url_status,
            
'S_BBCODE_FLASH'        => $flash_status,
            
'S_BBCODE_QUOTE'        => $quote_status,
        ));
        
        
page_header($user->lang['NOMINATE']);
        
$template->set_filenames(array(
            
'body' => 'medals/medalcp_nominate.html')
        );
        
page_footer();
    break;
    
    case 
'submit_nomination':
        if ( 
$user->data['user_id'] == ANONYMOUS || !$auth->acl_get('u_nominate_medals') )
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        
$medal_id request_var('medal'0);
        if (!
$medal_id)
        {
            
$redirect append_sid('medals.php?m=nominate&u=' $user_id);
            
meta_refresh(3$redirect);
            
trigger_error('NO_MEDAL_ID');
        }
        
        include_once(
$phpbb_root_path 'includes/functions_privmsgs.' $phpEx);
    
        
$user->add_lang('ucp');
        
        
$message    utf8_normalize_nfc(request_var('message'''true));
        if (!
strlen($message))
        {
            
trigger_error(sprintf($user->lang['NO_MEDAL_MSG'], append_sid('medals.php?m=nominate&u=' $user_id)));
        }
        
$sql "SELECT *
                FROM " 
MEDALS_AWARDED_TABLE "
                WHERE user_id = 
{$user_id} 
                AND medal_id = 
{$medal_id}";
        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);
        
        if (!
$medals[$medal_id]['number'] > && !empty($row))
        {
            
trigger_error(sprintf($user->lang['CANNOT_AWARD_MULTIPLE'], append_sid('memberlist.php?mode=viewprofile&u=' $user_id)));
        }
        
        
generate_text_for_storage($message$uid$bitfield$m_flags$allow_bbcode$allow_urls$allow_smilies);

        
$sql_ary = array(
            
'medal_id'            => $medal_id,
            
'user_id'            => $user_id,
            
'awarder_id'        => $user->data['user_id'],
            
'awarder_un'        => $user->data['username'],
            
'awarder_color'        => $user->data['user_colour'],
            
'nominated'            => 1,
            
'nominated_reason'    => $message,
            
'time'                => time(),
            
'bbuid'                => $uid,
            
'bitfield'            => $bitfield,
        );
        
        
$sql 'INSERT INTO ' $table_prefix 'medals_awarded ' $db->sql_build_array('INSERT'$sql_ary) ;
        
$db->sql_query($sql);

        
$redirect append_sid('memberlist.php?mode=viewprofile&u=' $user_id);
        
meta_refresh(3$redirect);
        
trigger_error(sprintf($user->lang['MEDAL_NOMINATE_GOOD']));
    break;
        
    case 
'award':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        if (
$user_id == || $user_id == ANONYMOUS)
        {
            
trigger_error('NO_USER_ID');
        }
        
$sql "SELECT *
                FROM " 
MEDALS_AWARDED_TABLE "
                WHERE user_id = 
{$user_id}
                ORDER BY medal_id AND nominated"
;
        
$result $db->sql_query($sql);
        
$my_medals = array();
        while (
$row $db->sql_fetchrow($result))
        {
            if ( isset(
$my_medals[$row['medal_id']]['count']) )
            {
                
$row['count'] = $my_medals[$row['medal_id']]['count'] + '1';
            }
            else
            {
                
$row['count'] = '1';
            }
            
$my_medals[$row['medal_id']] = $row;
        }
        
$db->sql_freeresult($result);
        
        
$sql "SELECT user_id, username, user_colour
            FROM " 
USERS_TABLE "
            WHERE user_id = 
{$user_id}";
        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);
        
        
$username get_username_string('full'$row['user_id'], $row['username'], $row['user_colour'], $row['username']);
        
        
$medals_options '<option value=""></option>';
        
$temp_string '';
        
$no_medals true ;
        foreach (
$cats as $key => $value)
        {
            
$at_least_one false;
            foreach (
$medals as $key2 => $value2)
            {
                if (
$value2['parent'] == $value['id'])
                {
                    
$can_award false;
                    
$my_medals[$value2['id']]['count'] = isset($my_medals[$value2['id']]['count']) ? $my_medals[$value2['id']]['count'] : 0;
                    if ( 
$my_medals[$value2['id']]['count'] < $value2['number'] || $medal_id == $value2['id'] )
                    {
                        
$my_medals[$value2['id']]['nominated'] = isset($my_medals[$value2['id']]['nominated']) ? $my_medals[$value2['id']]['nominated'] : 0;
                        if (isset(
$my_medals[$value2['id']]) && $my_medals[$value2['id']]['nominated'] == 1)
                        {
                            
$value2['name'] .= ' ' sprintf($user->lang['NOMINATED_BY'], $my_medals[$value2['id']]['awarder_un']);
                        }
                        else if ( 
$value2['nominated'] )
                        {
                            
$value2['name'] .= ' ' $user->lang['NOMINATABLE'];
                        }
                        if ( 
$medal_id == $value2['id'] )
                        {
                            
$temp_string .= '<option value="' $value2['id'] . '" selected="selected">&bull;&nbsp;' $value2['name'] . '</option>';
                            
$sql "SELECT *
                                    FROM " 
MEDALS_AWARDED_TABLE "
                                    WHERE id=
{$med_id};
                            
$result $db->sql_query($sql);
                            
$row $db->sql_fetchrow($result);
                            
$db->sql_freeresult($result);
                            
$message generate_text_for_edit($row['nominated_reason'],$row['bbuid'],$m_flags);
                            
$medal_edit "&med=$med_id;
                        }
                        else
                        {
                            
$temp_string .= '<option value="' $value2['id'] . '">&bull;&nbsp;' $value2['name'] . '</option>';
                        }
                        
$at_least_one true;
                    }
                }
            }
            if (
$at_least_one)
            {
                
$medals_options .= '<option value="">' $value['name'] . '</option>';
                
$medals_options .= $temp_string;
                
$at_least_one false;
                
$temp_string '';
                
$no_medals false ;
            }
        }
    
        
$medals_arr       'var medals = new Array();';
        
$medals_desc_arr  'var medals_desc = new Array();' ;
        foreach (
$medals as $key => $value)
        {
            
$medals_arr .= 'medals[' $value['id'] . '] = "' $value['image'] . '";';
            
$medals_desc_arr .= 'medals_desc[' $value['id'] . '] = "' $value['description'] . '";';
        }
        
$medals_arr .= "n" $medals_desc_arr "n" ;
        
        if (
$no_medals)
        {
            
$medals_options '<option value="">' $user->lang['NO_MEDALS'] . '</option>';
        }

        
$bbcode_status    = ($config['allow_bbcode']) ? true false;
        
$smilies_status    = ($bbcode_status && $config['allow_smilies']) ? true false;
        
$img_status        = ($bbcode_status) ? true false;
        
$url_status        = ($bbcode_status && $config['allow_post_links']) ? true false;
        
$flash_status    = ($bbcode_status) ? true false;
        
$quote_status    = ($bbcode_status) ? true false;
        
display_custom_bbcodes();

        
$message = isset($message['text']) ? $message['text'] : '';
        
$template->assign_vars(array(
            
'USERNAME'                => $username,
            
'MEDALS'                => $medals_options,
            
'JS'                    => $medals_arr,

            
'U_MEDALS_ACTION'        => isset($medal_edit) ? append_sid('medals.php?m=submit&u=' $user_id $medal_edit) : append_sid('medals.php?m=submit&u=' $user_id),
            
'MESSAGE'                => $message,

            
'S_BBCODE_ALLOWED'        => $bbcode_status,
            
'S_BBCODE_IMG'            => $img_status,
            
'S_BBCODE_URL'            => $url_status,
            
'S_BBCODE_FLASH'        => $flash_status,
            
'S_BBCODE_QUOTE'        => $quote_status,
        ));
        
        
page_header($user->lang['AWARD_MEDAL']);
        
$template->set_filenames(array(
            
'body' => 'medals/medalcp_award_user.html')
        );
        
page_footer();
    break;
        
    case 
'awarded':
        
$sql "SELECT user_id, username, user_colour
            FROM " 
USERS_TABLE "
            WHERE user_id = 
{$user_id}";
        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);
        
        
$username get_username_string('full'$row['user_id'], $row['username'], $row['user_colour'], $row['username']);
            
        
$sql3 "SELECT *
                FROM " 
MEDALS_AWARDED_TABLE "
                WHERE user_id = 
{$user_id}
                    AND nominated <> 1" 
;
        
$result3 $db->sql_query($sql3);
        
$s_medals false;
        
$users_medals = array();
        while (
$row3 $db->sql_fetchrow($result3))
        {
            
$awarder_name get_username_string('full'$row3['awarder_id'], $row3['awarder_un'], $row3['awarder_color'], $row3['awarder_un']) ;
            
$nom_message sprintf($user->lang['NOMINATE_MESSAGE'], $awarder_name$medals[$row3['medal_id']]['name']);

            
// Parse the message and subject
            
$reason generate_text_for_display($row3['nominated_reason'], $row3['bbuid'], $row3['bitfield'], $m_flags);
            
$message $user->lang['AWARDED_BY'] . ' ' $awarder_name ' ' $user->format_date($row3['time']) . '<br >' $reason ;

            
$this_cat $cats[$medals[$row3['medal_id']]['parent']];
            
$users_medals[$this_cat['order_id']]['name'] = $this_cat['name'];
            
$users_medals[$this_cat['order_id']][$medals[$row3['medal_id']]['order_id']][] = array(
                
'MEDAL_NAME'        => $medals[$row3['medal_id']]['name'],
                
'MEDAL_IMAGE'        => '<img src="' $phpbb_root_path $medals[$row3['medal_id']]['image'] . '" title="' $medals[$row3['medal_id']]['name'] . '" alt="' $medals[$row3['medal_id']]['name'] . '" />',
                
'MEDAL_REASON'        => $message,
                
'ID'                => $row3['id'],
            );
            
$s_medals true;
        }
        
$db->sql_freeresult($result3);
        
        
$my_medals_arr = array();
        
ksort($users_medals);
        foreach (
$users_medals as $key => $value)
        {
            
ksort($value);
            foreach (
$value as $key2 => $value2)
            {
                if (
$key2 != 'name')
                {
                    foreach (
$value2 as $key3 => $value3)
                    {
                        
$my_medals_arr[] = array($value3false);
                    }
                }
                else
                {
                    
$my_medals_arr[] = array($value2true);
                }
            }
        }

        foreach (
$my_medals_arr as $key => $value)
        {
            if (
$value[1])
            {
                
$template->assign_block_vars('medals', array(
                    
'MEDAL_NAME'        => $value[0],
                    
'IS_CAT'            => true,
                ));
            }
            else
            {
                
$template->assign_block_vars('medals', array(
                    
'MEDAL_NAME'        => $value[0]['MEDAL_NAME'],
                    
'MEDAL_IMAGE'        => $value[0]['MEDAL_IMAGE'],
                    
'MEDAL_REASON'        => $value[0]['MEDAL_REASON'],
                    
'U_DELETE'            => append_sid('medals.php?m=delete&u=' $user_id '&med=' $value[0]['ID']),

                    
'IS_CAT'            => false,
                ));
            }
        }
            
        
$template->assign_vars(array(
            
'USERNAME'                => $username,
            
            
'U_MEDALS_ACTION'        => append_sid('medals.php?m=submit&u=' $user_id),
        ));

        
page_header($user->lang['AWARDED_MEDAL_TO']);
        
$template->set_filenames(array(
            
'body' => 'medals/medalcp_awarded_user.html')
        );
        
page_footer();
    break;

    case 
'submit':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        if (!
$medal_id)
        {
            
$redirect append_sid('medals.php?m=award&u=' $user_id);
            
meta_refresh(3$redirect);
            
trigger_error('NO_MEDAL_ID');
        }
        
        include_once(
$phpbb_root_path 'includes/functions_privmsgs.' $phpEx);
    
        
$message    utf8_normalize_nfc(request_var('message'''true));
        if (!
strlen($message))
        {
            
trigger_error(sprintf($user->lang['NO_MEDAL_MSG'], append_sid('medals.php?m=award&u=' $user_id)));
        }

        
$username = array();
        if ( 
sizeof($user_id) > )
        {
            foreach (
$uid as $user_id)
            {
                
// Change usernames to ids
                
$sql "SELECT user_id
                        FROM " 
USERS_TABLE "
                        WHERE username = 
{$uid};
                
$result $db->sql_query($sql);
                
$row $db->sql_fetchrow($result);
                
$db->sql_freeresult($result);
                
                
$username[] = $row['user_id'] ;
            }
        }
        else
        {
            
$username[] = $user_id ;
        }
        
        foreach (
$username as $user_id)
        {
            
$sql "SELECT count(*) as count
                    FROM " 
MEDALS_AWARDED_TABLE "
                    WHERE medal_id = 
{$medal_id}
                      AND user_id = 
{$user_id}
                      AND nominated = 0" 
;
            
$result $db->sql_query($sql);
            
$row $db->sql_fetchrow($result);
            
$db->sql_freeresult($result);

            if ( 
$row['count'] >= $medals[$medal_id]['number'] )
            {
                
trigger_error(sprintf($user->lang['CANNOT_AWARD_MULTIPLE'], append_sid('memberlist.php?mode=viewprofile&u=' $user_id)));
            }
            
            
// Call award_medal function
            
if (isset($med_id))
            {
                
award_medal($medal_id$user_id$messagetime(), $medals[$medal_id]['points'], $med_id) ;
            }
            else
            {
                
award_medal($medal_id$user_id$messagetime(), $medals[$medal_id]['points']) ;
            }
        }
        
$redirect append_sid('memberlist.php?mode=viewprofile&u=' $user_id);
        
meta_refresh(3$redirect);
        
trigger_error(sprintf($user->lang['MEDAL_AWARD_GOOD']));
    break;

    case 
'delete':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        if (!
$med_id)
        {
            
trigger_error('NO_MEDAL_ID');
        }
        if (
confirm_box(true))
        {
            if (
$config['points_enable'] == 1)
            {
                
$sql "SELECT points
                    FROM " 
MEDALS_AWARDED_TABLE "
                    WHERE id = 
{$med_id}
                    LIMIT 1"
;
                
$result $db->sql_query($sql);
                
$row $db->sql_fetchrow($result);
                
$db->sql_freeresult($result);

                
$sql "UPDATE " USERS_TABLE 
                    SET medal_user_points = user_points - " 
$row['points'] . "
                    WHERE user_id = 
$user_id;
                
$db->sql_query($sql);
            }

            
$sql "DELETE FROM " MEDALS_AWARDED_TABLE "
                WHERE id = 
{$med_id}
                LIMIT 1"
;
            
$db->sql_query($sql);
            
$redirect append_sid('medals.php?m=awarded&u=' $user_id);
            
meta_refresh(3$redirect);
            
trigger_error(sprintf($user->lang['MEDAL_REMOVE_GOOD']));
        }
        else
        {
            
confirm_box(false$user->lang['MEDAL_REMOVE_CONFIRM'], build_hidden_fields(array(
                
'action'   => 'delete',
            )));
            
$redirect append_sid('medals.php?m=awarded&u=' $user_id);
            
meta_refresh(1$redirect);
            
trigger_error(sprintf($user->lang['MEDAL_REMOVE_NO']));
        }
    break;
        
    case 
'approve':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        if (!
$med_id )
        {
            
trigger_error('NO_MEDAL_ID');
        }

        
$sql "SELECT count(*) as count
                FROM " 
MEDALS_AWARDED_TABLE "
                WHERE medal_id = 
{$medal_id}
                  AND user_id = 
{$user_id}
                  AND nominated = 0" 
;
        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);

        if ( 
$row['count'] >= $medals[$medal_id]['number'] )
        {
            
$redirect append_sid('memberlist.php?mode=viewprofile&u=' $user_id);
            
meta_refresh(3$redirect);
            
trigger_error(sprintf($user->lang['CANNOT_AWARD_MULTIPLE']));
        }

        
$sql "SELECT *
                FROM " 
MEDALS_AWARDED_TABLE "
                WHERE id = 
{$med_id};
        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);
        
        
$message generate_text_for_edit($row['nominated_reason'],$row['bbuid'],$m_flags);
        
award_medal($row['medal_id'], $row['user_id'], $message['text'], $row['time'], $medals[$medal_id]['points'], $row['id']) ;

        
$redirect append_sid('medals.php?m=validate&u=' $user_id);
        
meta_refresh(3$redirect);
        
trigger_error(sprintf($user->lang['MEDAL_AWARD_GOOD']));
    break;

    case 
'validate':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        
$sql 'SELECT user_id, username, user_colour
                FROM ' 
USERS_TABLE "
                WHERE user_id = 
{$user_id}";
            
$result $db->sql_query($sql);
            
$row $db->sql_fetchrow($result);
            
$db->sql_freeresult($result);
        
$username get_username_string('full'$row['user_id'], $row['username'], $row['user_colour'], $row['username']);
        
        
$sql "SELECT ma.*, m.name
                FROM " 
MEDALS_AWARDED_TABLE " as ma, " MEDALS_TABLE " as m
                WHERE ma.user_id = 
{$user_id}
                  AND ma.medal_id = m.id
                  AND ma.nominated <> 0"
;
        
$result $db->sql_query($sql);
        
$i 0;
        while (
$row $db->sql_fetchrow($result))
        {
            
$awarder_name get_username_string('full'$row['awarder_id'], $row['awarder_un'], $row['awarder_color'], $row['awarder_un']) ;
            
$nom_message sprintf($user->lang['NOMINATE_MESSAGE'], $awarder_name$row['name']);

            
// Parse the message and subject
            
$message generate_text_for_display($row['nominated_reason'], $row['bbuid'], $row['bitfield'], $m_flags);
            
$message $nom_message $message ;
            
$message censor_text($message);
        
            
$message str_replace("n"'<br />'$message);

            
$uid $row['bbuid'];
            
$bitfield $row['bitfield'];

            
$template->assign_block_vars('nominations', array(
                
'USERNAME'    => $awarder_name,
                
'REASON'    => $message,
                
'U_DELETE'    => append_sid("medals.php?m=delete&med={$row['id']}&u={$user_id}"),
                
'U_APPROVE'    => append_sid("medals.php?m=approve&med={$row['id']}&mid={$row['medal_id']}&u={$user_id}"),
                
'U_MEDAL_EDIT'    => append_sid("medals.php?m=award&med={$row['id']}&mid={$row['medal_id']}&u={$user_id}"),
            ));
            
$i++;
        }
        
$db->sql_freeresult($result);
        
        
$template->assign_vars(array(
            
'U_MEDALS_ACTION'        => append_sid('medals.php?m=submit&u=' $user_id),
            
'NOMINATE_MEDAL'        => sprintf($user->lang['NOMINATE_USER_LOG'] , $username),
            
'S_ROW_COUNT'            => $i,
        ));
        
        
page_header($user->lang['NOMINATE_MEDAL']);
        
$template->set_filenames(array(
            
'body' => 'medals/medalcp_nominate_user.html')
        );
        
page_footer();
        
    break;

    case 
'mnd':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        if (!
$med_id)
        {
            
trigger_error('NO_MEDAL_ID');
        }
        
        
$sql "DELETE FROM " MEDALS_AWARDED_TABLE "
                WHERE medal_id = 
{$med_id}
                    AND nominated = 1"
;
        
$db->sql_query($sql);
        
trigger_error(sprintf($user->lang['NOMINATIONS_REMOVE_GOOD'], append_sid('medals.php')));
    
// No break;

    
case 'mn':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }

        
$sql "SELECT u.username, u.user_colour, ma.*
                FROM " 
USERS_TABLE " u, " MEDALS_AWARDED_TABLE " ma
                WHERE u.user_id = ma.user_id
                    AND ma.nominated = 1
                    AND ma.medal_id = 
{$med_id}
                ORDER BY u.username_clean"
;
        
$result $db->sql_query($sql);
        
$users_medals = array();
        
$i 1;
        while (
$row $db->sql_fetchrow($result))
        {
            
$awarder_name get_username_string('full'$row['awarder_id'], $row['awarder_un'], $row['awarder_color'], $row['awarder_un']) ;
            
$users_medals[$i] = array( 
                
'id'             => $row['id'], 
                
'username'         => $row['username'], 
                
'user_colour'     => $row['user_colour'], 
                
'user_id'        => $row['user_id'],
                
'reason'        => $user->lang['MEDAL_NOM_BY'] . ' : ' $awarder_name '<br />' $row['nominated_reason'],
                
'bbuid'            => $row['bbuid'],
                
'bitfield'        => $row['bitfield'],
            );
            
$i++;
        }
        
$db->sql_freeresult($result);

        foreach ( 
$users_medals as $key => $value )
        {
            
$awarded get_username_string('full'$value['user_id'], $value['username'], $value['user_colour']) ;

            
$template->assign_block_vars('nominatedrow', array(
                    
'NOMINATED'            => $awarded,
                    
'REASON'            => generate_text_for_display($value['reason'], $value['bbuid'], $value['bitfield'], $m_flags),
                    
'U_MCP'                => "?m=approve&med={$value['id']}&mid={$med_id}&u={$value['user_id']}",
                    
'U_USER_DELETE'        => "?m=delete&med={$value['id']}&u={$value['user_id']}",
            ));
            
            
$nominated_users[$value['user_id']]['user'] = $awarded;
            
$nominated_users[$value['user_id']]['count'] = isset($nominated_users[$value['user_id']]['count']) ? $nominated_users[$value['user_id']]['count'] + '1' 1;
        }

        if ( isset(
$nominated_users) )
        {
            
$i 0;
            
$nom_users '';
            foreach ( 
$nominated_users as $key => $value )
            {
                if ( 
$i )
                {
                    
$nom_users .= ", ";
                }
                
$nom_users .= "{$value['user']} ({$value['count']})";
                
$i++;
            }
        }

        
$template->assign_vars(array(
                
'S_MEDAL_NOM'        => true,
                
'MEDAL_NAME'        => $medals[$med_id]['name'],
                
'MEDAL_DESC'        => $medals[$med_id]['description'],
                
'MEDAL_IMG'            => '<img src="' $medals[$med_id]['image'] . '">',
                
'MEDAL_AWARDED'        => isset($awarded_users) ? $awarded_users $user->lang['NO_MEDALS_ISSUED'],
                
'NOMINATED_USERS'    => isset($nom_users) ? $nom_users $user->lang['NO_MEDALS_NOMINATED'],
                
'S_DELETE_ALL'        => isset($nom_users) ? true false,
                
'U_MEDALS_ACTION'    => "?m={$mode}d&med=$med_id",
                
'U_FIND_USERNAME'    => append_sid($phpbb_root_path 'memberlist.' $phpEx'mode=searchuser&amp;form=post&amp;field=add'),
        ));

        
page_header($user->lang['MEDALS_VIEW']);
        
$template->set_filenames(array(
            
'body' => 'medals/medals.html')
        );
        
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
        
page_footer();

    break;

    case 
'ma':
        if (
$user->data['user_type'] != USER_FOUNDER && !$auth->acl_get('u_award_medals'))
        {
            
trigger_error($user->lang['NO_GOOD_PERMS']);
        }
        if ( 
$submit )
        {
            if (!
$med_id)
            {
                
trigger_error('NO_MEDAL_ID');
            }
            
            
$message    utf8_normalize_nfc(request_var('message'''true));
            if (!
strlen($message))
            {
                
trigger_error(sprintf($user->lang['NO_MEDAL_MSG'], append_sid('medals.php?mode=' $mode '&med=' $med_id)));
            }

            
$usernames explode("n"$usernames) ;
            foreach ( 
$usernames as $value )
            {
                
$username[] = $db->sql_escape(utf8_clean_string($value));
            }
            
            
$award_user $not_award_user $awarded_user $no_such_user = array() ;

            
// Change usernames to ids
            
$sql 'SELECT user_id, username, username_clean
                    FROM ' 
USERS_TABLE '
                    WHERE ' 
$db->sql_in_set('username_clean'$username) ;
            
$result $db->sql_query($sql);
            while (
$row $db->sql_fetchrow($result))
            {
                
$sql "SELECT count(*) as number
                        FROM " 
MEDALS_AWARDED_TABLE "
                        WHERE medal_id = 
{$med_id}
                            AND user_id = 
{$row['user_id']};
                
$result2 $db->sql_query($sql);
                
$row2 $db->sql_fetchrow($result2);
                
$db->sql_freeresult($result2);

                if ( 
$row2['number'] < $medals[$med_id]['number'] )
                {
                    
$award_user[] = $row['user_id'] ;
                    
$awarded_user[] = $row['username_clean'] ;
                }
            }
            
$db->sql_freeresult($result);
            
$not_award_user array_diff($username$awarded_user);
            
// Call award_medal function
            
$time time() ;
            if ( 
sizeof($award_user) )
            {
                foreach ( 
$award_user as $uid )
                {
                    
award_medal($med_id$uid$message$time$medals[$med_id]['points']) ;
                }
            }
            if ( 
sizeof($not_award_user) )
            {
                
$redirect append_sid('medals.php?mode=' $mode '&med=' $med_id);
                
meta_refresh(3$redirect);
                
trigger_error(sprintf($user->lang['NO_USER_SELECTED'], implode(", "$not_award_user)));
            }
            else
            {
                
$redirect append_sid('medals.php?mode=' $mode '&med=' $med_id);
                
meta_refresh(3$redirect);
                
trigger_error($user->lang['MEDAL_AWARD_GOOD']);
            }
        }

        
$sql "SELECT u.username, u.user_colour, ma.user_id
                FROM " 
USERS_TABLE " u, " MEDALS_AWARDED_TABLE " ma
                WHERE u.user_id = ma.user_id
                    AND ma.nominated = 0
                    AND ma.medal_id = 
{$med_id}
                GROUP BY ma.user_id, u.username, ma.medal_id
                ORDER BY u.username"
;
        
$result $db->sql_query($sql);
        
$users_medals = array();
        
$i 1;
        while (
$row $db->sql_fetchrow($result))
        {
            
$users_medals[$i] = array( 
                
'username'         => $row['username'], 
                
'user_colour'     => $row['user_colour'], 
                
'user_id'        => $row['user_id'],
            );
            
$i++;
        }
        
$db->sql_freeresult($result);

        foreach ( 
$users_medals as $key => $value )
        {
            
$awarded get_username_string('full'$value['user_id'], $value['username'], $value['user_colour']) ;
            
$awarded_users = isset($awarded_users) ? $awarded_users ', ' $awarded $awarded ;
        }
        
$template->assign_vars(array(
                
'S_MEDAL_AWARD'        => true,
                
'MEDAL_NAME'        => $medals[$med_id]['name'],
                
'MEDAL_DESC'        => $medals[$med_id]['description'],
                
'MEDAL_IMG'            => '<img src="' $medals[$med_id]['image'] . '">',
                
'MEDAL_AWARDED'        => isset($awarded_users) ? $awarded_users $user->lang['NO_MEDALS_ISSUED'],
                
'U_MEDALS_ACTION'    => "?m=$mode&med=$med_id",
                
'U_FIND_USERNAME'    => append_sid($phpbb_root_path 'memberlist.' $phpEx'mode=searchuser&amp;form=post&amp;field=add'),
        ));
        
        
page_header($user->lang['MEDALS_VIEW']);
        
$template->set_filenames(array(
            
'body' => 'medals/medals.html')
        );
        
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
        
page_footer();

    break;

    default:
        
$sql "SELECT u.username, u.user_colour, ma.user_id, ma.medal_id, ma.nominated
                FROM " 
USERS_TABLE " u, " MEDALS_AWARDED_TABLE " ma
                WHERE u.user_id = ma.user_id
                GROUP BY ma.nominated, ma.user_id, u.username, ma.medal_id
                ORDER BY u.username_clean"
;
        
$result $db->sql_query($sql);
        
$users_medals = array();
        
$i 1;
        while (
$row $db->sql_fetchrow($result))
        {
            
$users_medals[$i] = array( 
                
'username'         => $row['username'], 
                
'user_colour'     => $row['user_colour'], 
                
'medal_id'         => $row['medal_id'], 
                
'user_id'        => $row['user_id'],
                
'nominated'        => $row['nominated'],
            );
            
$i++;
        }
        
$db->sql_freeresult($result);

        
$at_least_one_awarded false;
        foreach (
$cats as $key => $value)
        {
            
$at_least_one true;

            foreach (
$medals as $key2 => $value2)
            {
                if (
$value2['parent'] == $value['id'])
                {
                    if (
$at_least_one)
                    {
                        
$at_least_one_awarded true;
                        
$template->assign_block_vars('medalrow', array(
                                
'IS_CAT'        => 1,
                                
'MEDAL_CAT'        => $value['name'],
                        ));
                        
$at_least_one false;
                    }
                    
$awarded_users '' ;
                    
$nominations ;
                    foreach (
$users_medals as $key3 => $value3)
                    {
                        if (
$value3['medal_id'] == $value2['id'] && $value3['nominated'] == 0)
                        {    
                                
$awarded get_username_string('full'$value3['user_id'], $value3['username'], $value3['user_colour']) ;
                                
$awarded_users $awarded_users $awarded_users ', ' $awarded $awarded ;
                        }
                        elseif (
$value3['medal_id'] == $value2['id'] && $value3['nominated'] == 1)
                        {
                            
$nominations++ ;
                        }
                    }

                    
$template->assign_block_vars('medalrow', array(
                            
'MEDAL_NAME'            => $value2['name'],
                            
'U_MEDAL_AWARD_PANEL'    => 'medals.php?m=ma&med=' $value2['id'],
                            
'MEDAL_IMG'                => '<img src="' $value2['image'] . '">',
                            
'MEDAL_DESC'            => $value2['description'],
                            
'MEDAL_AWARDED'            => $awarded_users $awarded_users $user->lang['NO_MEDALS_ISSUED'],
                            
'NOMINATIONS'            => ($nominations 0) ? true false,
                            
'U_MEDAL_NCP'            => 'medals.php?m=mn&med=' $value2['id'],
                            
'MEDAL_DESC'            => $value2['description'],
                    ));
                }
            }
        }

        
$template->assign_vars(array(
                
'S_MEDAL_VIEW'        => true,
                
'NO_MEDAL'            => $at_least_one_awarded 1,
        ));

        
page_header($user->lang['MEDALS_VIEW']);
        
$template->set_filenames(array(
            
'body' => 'medals/medals.html')
        );
        
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
        
page_footer();
        
    break;
}

function 
getfirstcat()
{
    global 
$db;
    
$sql "SELECT *
    FROM " 
MEDALS_CATS_TABLE "
    ORDER BY order_id ASC"
;
    
$result $db->sql_query_limit($sql10);
    while (
$row $db->sql_fetchrow($result))
    {
        
$cat $row['id'];
    }
    return 
$cat;
}

function 
award_medal($medal_id$user_id$message$time$points 0$update 0)
{
    global 
$db$user$config$phpbb_root_path$phpEx$table_prefix$medals ;
    global 
$allow_bbcode$allow_urls$allow_smilies$m_flags ;

    
generate_text_for_storage($message$uid$bitfield$m_flags$allow_bbcode$allow_urls$allow_smilies);
    
    if ( 
$update )
    {
        
$sql_ary = array(
            
'medal_id'        => $medal_id,
            
'user_id'        => $user_id,
            
'nominated'        => 0,
            
'nominated_reason'    => $message,
            
'points'        => $points,
            
'time'            => $time,
            
'bitfield'        => $bitfield,
            
'bbuid'            => $uid,
        );

        
$sql "UPDATE " MEDALS_AWARDED_TABLE " SET " $db->sql_build_array('UPDATE'$sql_ary) . "
                WHERE id = 
{$update}
                LIMIT 1"
;
        
$db->sql_query($sql);

        
$sql "SELECT awarder_id, awarder_un, awarder_color
                FROM " 
MEDALS_AWARDED_TABLE "
                WHERE id = 
{$update}
                LIMIT 1"
;

        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);
        
        
$color $row['awarder_color'] <> "" '[color=#' $row['awarder_color'] . ']' $row['awarder_un'] . '[/color]'$row['awarder_un'] ;
    }
    else
    {
        
$sql_ary = array(
            
'medal_id'        => $medal_id,
            
'user_id'        => $user_id,
            
'awarder_id'    => $user->data['user_id'],
            
'awarder_un'    => $user->data['username'],
            
'awarder_color'    => $user->data['user_colour'],
            
'nominated'        => 0,
            
'nominated_reason'    => $message,
            
'points'        => $points,
            
'time'            => $time,
            
'bitfield'        => $bitfield,
            
'bbuid'            => $uid,
        );

        
$sql "INSERT INTO " MEDALS_AWARDED_TABLE " " $db->sql_build_array('INSERT'$sql_ary);
        
        
$color $user->data['user_colour'] ? '[color=#' $user->data['user_colour'] . ']' $user->data['username'] . '[/color]'$user->data['username'] ;
    }
    
$result $db->sql_query($sql);

    
$message generate_text_for_edit($message,$uid,$m_flags);
    
$message = isset($message['text']) ? $message['text'] : '';

    if (
$result && $config['points_enable'] == 1)
    {
        
$sql "UPDATE " USERS_TABLE 
                    SET medal_user_points = user_points + 
$points
                    WHERE user_id = 
$user_id;
        
$db->sql_query($sql);
    }

    
$message2  sprintf($user->lang['PM_MESSAGE'], '[img]' generate_board_url() . '/' $medals[$medal_id]['image'] . '[/img]'$medals[$medal_id]['name'], $color );
    
$message2  .= $message;
    if ( 
$config['points_enable'] == )
    {
        if ( 
$points )
        {
            
$plural $points < -'s' '';
            
$message2 .= sprintf($user->lang['PM_MESSAGE_POINTS_DEDUCT'], $points * -1$plural);
        }
        else if ( 
$points )
        {
            
$plural $points 's' '';
            
$message2 .= sprintf($user->lang['PM_MESSAGE_POINTS_EARN'], $points$plural);
        }
    }

    
generate_text_for_storage($message2$uid$bitfield$m_flags$allow_bbcode$allow_urls$allow_smilies);

    
$user->add_lang('ucp');

    include_once(
$phpbb_root_path 'includes/functions_privmsgs.' $phpEx);
        
    
$pm_data = array(
        
'address_list'        => array('u' => array($user_id => 'to')),
        
'from_user_id'        => $user->data['user_id'],
        
'from_user_ip'        => $user->data['user_ip'],
        
'from_username'        => $user->data['username'],
        
'enable_sig'        => false,
        
'enable_bbcode'        => $allow_bbcode,
        
'enable_smilies'    => $allow_smilies,
        
'enable_urls'        => $allow_urls,
        
'icon_id'            => 0,
        
'bbcode_bitfield'    => $bitfield,
        
'bbcode_uid'        => $uid,
        
'message'            => $message2,
    );
    
    
$subject sprintf($user->lang['PM_MSG_SUBJECT'], $user->data['username']);

    
submit_pm('post'$subject$pm_datafalse);
    
    return ;
}

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