- Совместимость
- проверялся на совместимость
- Изменения в БД
- требуются
- Автор
- 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&'. 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 --> {switch_display_medal.details.MEDAL_IMAGE_SMALL} <!-- 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'] . ': '; $medal_reason = $lang['Medal_reason'] . ': '; 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