Медали 1.0.0

Добавляет систему наград для пользователей в виде виртуальных медалей.

  1. Exile
    Совместимость:
    проверялся на совместимость
    Изменения в БД:
    требуются
    Автор:
    Wertos
    Общественное достояние:
    да
    Описание: добавляет систему наград для пользователей в виде виртуальных медалей.
    Инструкция по установке:
    Код:
    SQL
    
    CREATE TABLE IF NOT EXISTS `bb_medal` (
      `medal_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `cat_id` mediumint(8) unsigned NOT NULL DEFAULT '1',
      `medal_name` varchar(40) NOT NULL,
      `medal_description` varchar(255) NOT NULL,
      `medal_image` varchar(40) DEFAULT NULL,
      PRIMARY KEY (`medal_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `bb_medal_cat` (
      `cat_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `cat_title` varchar(100) NOT NULL,
      `cat_order` mediumint(8) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (`cat_id`),
      KEY `cat_order` (`cat_order`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `bb_medal_mod` (
      `mod_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `medal_id` mediumint(8) unsigned NOT NULL,
      `user_id` mediumint(8) unsigned NOT NULL,
      PRIMARY KEY (`mod_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `bb_medal_user` (
      `issue_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `medal_id` mediumint(8) unsigned NOT NULL,
      `user_id` mediumint(8) unsigned NOT NULL,
      `issue_reason` varchar(255) NOT NULL,
      `issue_time` int(11) NOT NULL,
      PRIMARY KEY (`issue_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    INSERT INTO `bb_config` VALUES('dis_medal_display', '1');
    INSERT INTO `bb_config` VALUES('medal_display_row', '1');
    INSERT INTO `bb_config` VALUES('medal_display_col', '3');
    INSERT INTO `bb_config` VALUES('medal_display_width', '');
    INSERT INTO `bb_config` VALUES('medal_display_height', '');
    INSERT INTO `bb_config` VALUES('medal_display_order', '0');
    
    
    init_bb.php
    
    найти
    
    define('BB_WORDS',                'bb_words');
    
    добавить
    
    //Medal MOD
    define('POST_MEDAL_URL', 'm');    // Medal MOD
    define('MEDAL_CAT_URL', 'mc');    // Medal MOD
    define('PAGE_MEDALS', -2115);    // Medal MOD
    
    define('BB_MEDAL', 'bb_medal');        // Medal MOD
    define('BB_MEDAL_MOD', 'bb_medal_mod');    // Medal MOD
    define('BB_MEDAL_USER', 'bb_medal_user');    // Medal MOD
    define('BB_MEDAL_CAT', 'bb_medal_cat');    // Medal MOD
    
    functions.php
    
    добавить в конец
    
    // Medals
    function check_medal_mod($medal_id)
    {
        global $userdata;
    
        $sql = "SELECT *
        FROM " . BB_MEDAL_MOD . "
        WHERE medal_id =" . $medal_id;
    
        if ( !($result = DB()->sql_query($sql)) )
        {
            bb_die('Could not obtain user and medal information');
        }
    
        $medal_info = array();
        $found = FALSE;
        while ( $medal_info = DB()->sql_fetchrow($result) )
        {
    
            $medal_moderator = $medal_info['user_id'];
    
            if ( $medal_moderator == $userdata['user_id'] )
            {
                $found = TRUE;
            }
        }
        DB()->sql_freeresult($result);
    
        return $found;
    }
    main.php
    
    // Medal MOD
    $lang['Medals'] = 'Администраторы медали';
    $lang['Medal_Config'] = 'Настройка мода наград';
    $lang['Medal_Config_explain'] = 'Эта форма позволит вам настроить общие параметры наград';
    $lang['Medal_setting'] = 'Настройки наград';
    $lang['Allow_medal'] = 'Показывать медали в темах';
    $lang['Medal_rand'] = 'Разрешить случайное изображение наград в темах';
    $lang['Medal_rand_explain'] = 'Изображение будет отображаться в случайном порядке, только если вы позволите показывать награды в теме';
    $lang['Medal_display'] = 'Таблица наград (строки х столбцы)';
    $lang['Medal_display_explain'] = 'Определить, сколько строк и столбцов таблицы должно быть в теме.<br /> Лучше всего поставить значение <b>1х3</b>.';
    $lang['Medal_size'] = 'Максимальный размер награды в теме';
    $lang['Medal_size_explain'] = '(Высота x ширина в пикселах)<br />Если оставить поля пустыми, награда будет в оригинальном размере';
    $lang['Click_return_medalcfg'] = '%sВернуться%s к настройке мода наград';
    $lang['Medal_admin'] = 'Управление наградами';
    $lang['Medal_admin_explain'] = 'Из этой панели можно управлять всеми вашими наградами. Вы можете удалять, создавать и редактировать существующие награды.';
    $lang['Updated_medal'] = 'Медаль была успешно обновлена';
    $lang['Updated_medal_category'] = 'Категория успешно обновлена';
    $lang['Added_new_medal'] = 'Новая медаль была успешно создана';
    $lang['Added_new_category'] = 'Новая категория была успешно создана';
    $lang['Deleted_medal'] = 'Награда успешно удалена';
    $lang['Deleted_medal_category'] = 'Категория успешно удалена';
    $lang['New_medal'] = 'Новая награда';
    $lang['medal_name'] = 'Название награды';
    $lang['medal_description'] = 'Описание награды';
    $lang['medal_image'] = 'Изображение награды';
    $lang['medal_image_explain'] = 'Используйте это, чтобы определить изображение, связанное с медалью <br /> (Относительно phpBB2 корневой каталог)';
    $lang['No_medal_name'] = 'Вы должны указать имя для этой медали';
    $lang['No_medal_description'] = 'Вы должны указать описание для этой медали';
    $lang['No_medal_image'] = 'Вы должны указать изображения для этой медали';
    $lang['Must_select_medal'] = 'Необходимо указать медаль';
    $lang['Click_return_medaladmin'] = '%sВернуться к управлению наградами%s';
    $lang['Medal_mod'] = 'Модератор награды';
    $lang['Medal_mod_admin'] = 'Администрация медали';
    $lang['Medal_mod_admin_explain'] = 'Из этой панели можно назначить модератора медали.';
    $lang['Medal_mod_username'] = 'Назначить одного или нескольких пользователей модераторами награды';
    $lang['Medal_unmod_username'] = 'Удалить одного или нескольких модераторов';
    $lang['Medal_unmod_username_explain'] = 'Выделите модератора(ов) которых нужно удалить';
    $lang['No_medal_mod'] = 'Модератор не назначен';
    $lang['No_medal_in_cat'] = 'Нет медали в этой категории';
    $lang['Must_delete_medal'] = 'Вы должны удалить все медали, прежде чем удалить эту категорию';
    $lang['Category_delete'] = 'Delete Medal Category';
    $lang['Category_delete_explain'] = 'Форма позволит вам удалить категорию и решить, куда вы хотите поместить все медали, которые в ней содержатся.';
    $lang['Move_medals'] = 'Перемещение медали';
    $lang['Category_name'] = 'Название категории';
    $lang['Medal_mod_update_sucessful'] = 'Модератор медали был успешно обновлен';
    $lang['Click_return_medal_mod_admin'] = '%sВернуться к администрированию медалей.%s';
    //Medal MOD [END]
    
    // Medal MOD
    $lang['Medal_Control_Panel'] = 'Панель управления наградой';
    $lang['Medals'] = 'Награды';
    $lang['View_More'] = 'Подробнее';
    $lang['Medal_amount'] = 'Количество: ';
    $lang['Medal_Information'] = 'Информация о награде';
    $lang['Medal_name'] = 'Название';
    $lang['Medal_description'] = 'Описание награды';
    $lang['Medal_image'] = 'Изображение';
    $lang['Medal_details'] = 'Подробнее';
    $lang['Medal_reason'] = 'Причина награждения';
    $lang['Medal_reason_explain'] = 'Вы можете написать причину награждения<br />Это поле не обязательно для заполнения';
    $lang['Medal_no_reason'] = '<i>Не указана</i>';
    $lang['Medal_time'] = 'Время награждения';
    $lang['Medal_moderator'] = 'Модератор награды';
    $lang['No_medal_mod'] = 'Модератор еще не назначен';
    $lang['Medal_userlist'] = 'У кого есть?';
    $lang['Medal_Members'] = 'Награжденные пользователи';
    $lang['Medal_Members_explain'] = 'Нажмите на никнейм, чтобы отредактировать причину вручения';
    $lang['No_medal_members'] = 'Никто еще не награжден';
    $lang['No_medals_exist'] = 'Нет Медалей';
    $lang['Medal_not_exist'] = 'Это медаль не существует';
    $lang['No_username_specified'] = 'Не задано имя пользователя';
    $lang['No_medal_id_specified'] = 'Медаль не указана';
    $lang['Medal_user_username'] = 'Наградить пользователя';
    $lang['Medal_unmedal_username'] = 'Удалить эту награду у одного или нескольких пользователей';
    $lang['Medal_unmedal_username_explain'] = 'Выделите пользователей у которых нужно убрать награду';
    $lang['Medal_added'] = 'Вы были награждены этой медалью.';
    $lang['Medal_update_sucessful'] = 'Изменения внесены успешно';
    $lang['Could_not_anonymous_user'] = 'Нельзя давать награду Anonymous';
    $lang['Not_medal_moderator'] = 'Вы не модератор этой награды';
    $lang['Link_to_cp'] = 'Управление наградой';
    $lang['Click_return_medal'] = '%sВернуться к управлению наградой%s';
    $lang['No_medal'] = 'Нет медали в наличии';
    //Medal MOD [END]
    
    
    viewtopic.php
    
    найти
    
    $template->assign_block_vars('postrow', array(
    
    перед добавить
    
        // Medal MOD
        $medal ='';
        $sql = "SELECT m.medal_id, m.medal_name
            FROM " . BB_MEDAL . " m, " . BB_MEDAL_USER . " mu
            WHERE mu.user_id = '" . $postrow[$i]['user_id'] . "'
            AND m.medal_id = mu.medal_id
            ORDER BY m.medal_name";
    
        if(!$result = DB()->sql_query($sql))
        {
            bb_die("Error getting medal information");
        }
    
        $medal_list = DB()->sql_fetchrowset($result);
        $medal_count = count($medal_list);
    
        if ( $postrow[$i]['user_id'] == GUEST_UID )
        {
            $medal_count = '';
        }
        else
        {
            $medal_count = ($medal_count) ? $lang['Medals'] . ': <b>' . $medal_count . '</b>' . '  (<a href="profile.php?mode=viewprofile&amp;'. POST_USERS_URL .'='. $postrow[$i]['user_id'] . '#medal" class="gensmall">' . $lang['View_More'] . '</a>)' : $lang['Medals'] . ': ' . $lang['NONE'];
        }
        //Medal [END]
       
       
        найти
       
        'POSTER_AVATAR'      => $poster_avatar,
       
        добавить
       
        'POSTER_MEDAL_COUNT' => $medal_count,
    
        найти
       
            'RG_SIG_ATTACH'      => $postrow[$i]['attach_rg_sig'],
        ));
       
        добавить
       
       
        //Medal MOD
        if ( $bb_cfg['dis_medal_display'] )
        {
            $order = ( $bb_cfg['medal_display_order'] ) ? "RAND()" : "m.medal_name";
    
            $template->assign_block_vars('postrow.medal', array());
    
            $sql = "SELECT m.medal_id, m.medal_name, m.medal_image
                FROM " . BB_MEDAL . " m, " . BB_MEDAL_USER . " mu
                WHERE mu.user_id = '" . $poster_id . "'
                AND m.medal_id = mu.medal_id
                ORDER BY " . $order;
    
            if ($result = DB()->sql_query($sql))
            {
                $rowset = array();
                while ($row = DB()->sql_fetchrow($result))
                {
                    $rowset[$row['medal_image']]['medal_name'] = $row['medal_name'];
                    if ($rowset[$row['medal_image']]['medal_name'] == $row['medal_name'])
                    $rowset[$row['medal_image']]['medal_count'] = 1;
                }
    
                // Check Medal config in ACP
                $medal_rows = $bb_cfg['medal_display_row'];
                $medal_cols = $bb_cfg['medal_display_col'];
                $medal_width = ( $bb_cfg['medal_display_width'] ) ? 'width="'.$bb_cfg['medal_display_width'].'"' : '';
                $medal_height = ( $bb_cfg['medal_display_height'] ) ? 'height="'.$bb_cfg['medal_display_height'].'"' : '';
    
                if ($medal_list)
                {
                    $split_row = $medal_cols - 1;
    
                    $s_colspan = 0;
                    $row = 0;
                    $col = 0;
    
                    while (list($medal_image, $medal) = @each($rowset))
                    {
                        if (!$col)
                               {
                            $template->assign_block_vars('postrow.medal.medal_row', array());
                        }
    
                        $template->assign_block_vars('postrow.medal.medal_row.medal_col', array(
                            'MEDAL_IMAGE' => BB_ROOT . $medal_image,
                            'MEDAL_WIDTH' => $medal_width,
                            'MEDAL_HEIGHT' => $medal_height,
                            'MEDAL_NAME' => $medal['medal_name'],
                            'MEDAL_COUNT' => '('. $lang['Medal_amount'] . $medal['medal_count']. ')')
                        );
    
                        $s_colspan = max($s_colspan, $col + 1);
    
                        if ($col == $split_row)
                        {
                            if ($row == $medal_rows - 1)
                            {
                                break;
                            }
                            $col = 0;
                            $row++;
                        }
                        else
                        {
                            $col++;
                        }
                    }
                }
            }
            DB()->sql_freeresult($result);
        }
        //Medal MOD [END]
       
       
        viewtopic.tpl
       
        найти
       
        <!-- IF postrow.POSTER_FROM --><p class="from"><em>{L_LOCATION}:</em> {postrow.POSTER_FROM}</p><!-- ENDIF -->
       
        добавить
       
            <br /><br />{postrow.POSTER_MEDAL_COUNT}<br />
            <hr>
            <center>
            <!-- BEGIN medal -->
            <table border="0" cellspacing="0" cellpadding="5">
            <!-- BEGIN medal_row -->
            <tr align="left" valign="middle">
            <!-- BEGIN medal_col -->
            <td><img src="{postrow.medal.medal_row.medal_col.MEDAL_IMAGE}" border="0" alt="{postrow.medal.medal_row.medal_col.MEDAL_NAME} {postrow.medal.medal_row.medal_col.MEDAL_COUNT}" title="{postrow.medal.medal_row.medal_col.MEDAL_NAME} {postrow.medal.medal_row.medal_col.MEDAL_COUNT}" {postrow.medal.medal_row.medal_col.MEDAL_WIDTH} {postrow.medal.medal_row.medal_col.MEDAL_HEIGHT} /></td>
            <!-- END medal_col -->
            </tr>
            <!-- END medal_row -->
        </table>
        <!-- END medal -->
        </center>
       
       
        usercp_viewprofile.tpl
       
        найти
       
        <h4 class="cat border bw_TB" id="username">{L_CONTACT} <span class="editable bold">{USERNAME}</span></h4>
       
        перед добавить
       
            <!-- BEGIN switch_display_medal -->
            <!-- BEGIN details -->
            &nbsp;{switch_display_medal.details.MEDAL_IMAGE_SMALL}&nbsp;
            <!-- END details -->
            <!-- END switch_display_medal -->
           
    usercp_viewprofile.php
    найти
           
    else
    {
        $email = '';
    }
    
    добавить
    
    // Medal MOD
    
    //
    // Category
    //
    
    $sql = "SELECT cat_id, cat_title
        FROM " . BB_MEDAL_CAT . "
        ORDER BY cat_order";
    if( !($result = DB()->sql_query($sql)) )
    {
        bb_die('Could not query medal categories list);
    }
    
    $category_rows = array();
    while ( $row = DB()->sql_fetchrow($result) )
    {
        $category_rows[] = $row;
    }
    DB()->sql_freeresult($result);
    
    $sql = "SELECT m.medal_id, mu.user_id
        FROM " . BB_MEDAL . " m, " . BB_MEDAL_USER . " mu
        WHERE mu.user_id = '" . $profiledata['user_id'] . "'
        AND m.medal_id = mu.medal_id
        ORDER BY m.medal_name";
    
    if($result = DB()->sql_query($sql))
    {
        $medal_list = DB()->sql_fetchrowset($result);
        $medal_count = count($medal_list);
    
        if ( $medal_count )
        {
            $medal_count = '<b>' . $medal_count . '</b>';
    
            $template->assign_block_vars('switch_display_medal', array());
    
            $template->assign_block_vars('switch_display_medal.medal', array(
                'MEDAL_BUTTON' => '<button onclick="ToggleBox(\'toggle_medal\')">'.$lang['Medal_details'].'</button>')
            );
        }
    }
    
    for ($i = 0; $i < count($category_rows); $i++)
    {
        $cat_id = $category_rows[$i]['cat_id'];
    
        $sql = "SELECT m.medal_id, m.medal_name,m.medal_description, m.medal_image, m.cat_id, mu.issue_reason, mu.issue_time, c.cat_id, c.cat_title
            FROM " . BB_MEDAL . " m, " . BB_MEDAL_USER . " mu, " . BB_MEDAL_CAT . " c
            WHERE mu.user_id = '" . $profiledata['user_id'] . "'
            AND m.cat_id = c.cat_id
            AND m.medal_id = mu.medal_id
            ORDER BY c.cat_order, m.medal_name, mu.issue_time";
    
        if ($result = DB()->sql_query($sql))
        {
            $row = $rowset = array();
            $medal_time = $lang['Medal_time'] . ':&nbsp;';
            $medal_reason = $lang['Medal_reason'] . ':&nbsp;';
            while ($row = DB()->sql_fetchrow($result))
            {
                if (empty($rowset[$row['medal_name']]))
                {
                    $rowset[$row['medal_name']]['cat_id'] = $row['cat_id'];
                    $rowset[$row['medal_name']]['cat_title'] = $row['cat_title'];
                    $rowset[$row['medal_name']]['medal_description'] = $row['medal_description'];
                    $rowset[$row['medal_name']]['medal_image'] = $row['medal_image'];
                    $row['issue_reason'] = ( $row['issue_reason'] ) ? $row['issue_reason'] : $lang['Medal_no_reason'];
                    $rowset[$row['medal_name']]['medal_issue'] = '<tr><td><span class="genmed">' . $medal_time . bb_date($row['issue_time']) . '</span></td></tr><tr><td><span class="genmed">' . $medal_reason . $row['issue_reason']  . '</span><hr></td></tr>';
                    $rowset[$row['medal_name']]['medal_count'] = '1';
                }
                else
                {
                    $row['issue_reason'] = ( $row['issue_reason'] ) ? $row['issue_reason'] : $lang['Medal_no_reason'];
                    $rowset[$row['medal_name']]['medal_issue'] .= '<tr><td><span class="genmed">' . $medal_time . bb_date($row['issue_time']) . '</span></td></tr><tr><td><span class="genmed">' . $medal_reason . $row['issue_reason'] . '</span><hr /></td></tr>';
                    $rowset[$row['medal_name']]['medal_count'] += '1';
                }
            }
    
            $medal_width = ( $bb_cfg['medal_display_width'] ) ? 'width="'.$bb_cfg['medal_display_width'].'"' : '';
            $medal_height = ( $bb_cfg['medal_display_height'] ) ? 'height="'.$bb_cfg['medal_display_height'].'"' : '';
    
            $medal_name = array();
            $data = array();
    
            //
            // Should we display this category/medal set?
            //
            $display_medal = 0;
    
            while (list($medal_name, $data) = @each($rowset))
            {
                if ( $cat_id == $data['cat_id'] ) { $display_medal = 1; }
    
                if ( !empty($display_medal) )
                {
                    $template->assign_block_vars('switch_display_medal.details', array(
                        'MEDAL_CAT' => $data['cat_title'],
                        'MEDAL_NAME' => $medal_name,
                        'MEDAL_DESCRIPTION' => $data['medal_description'],
                        'MEDAL_IMAGE' => '<img src="'. BB_ROOT . $data['medal_image'] . '" border="0" alt="' . $medal_name . '" title="' . $medal_name . '" />',
                        'MEDAL_IMAGE_SMALL' => '<img src="'. BB_ROOT . $data['medal_image'] . '" border="0" alt="' . $medal_name . '" title="' . $medal_name . '"' . $medal_width . $medal_height . ' />',
                        'MEDAL_ISSUE' => $data['medal_issue'],
                        'MEDAL_COUNT' => $lang['Medal_amount'] . $data['medal_count'],
    
                        'L_MEDAL_DESCRIPTION' => $lang['Medal_description'])
                    );
                    $display_medal = 0;
                }
            }
        }
    }
    //Medal MOD [END]
    
    найти
    
    'TRAF_STATS'           => !(IS_AM || $profile_user_id),
    
    добавить
    
        'L_USER_MEDAL' => $lang['Medals'],    // Medal MOD
        'USER_MEDAL_COUNT' => $medal_count,    // Medal MOD
        'L_MEDAL_INFORMATION' => $lang['Medal_Information'], // Medal MOD
        'L_MEDAL_NAME' => $lang['Medal_name'],        // Medal MOD
        'L_MEDAL_DETAIL' => $lang['Medal_details'],    // Medal MOD

    Изображения

    1. 2B91F91D.jpg
    2. 78dCc8fe.jpg
    3. 7473F6e6.jpg
    4. 79109aE1.jpg
    5. a0104626.jpg
    6. Eec2e44f.jpg
    7. f43e9852.jpg