Merge branch 'feature/groups-dev' into develop

Заливаем новую систему групп (релиз-группы, аватарки пользователей, подготовленные релизы с подписями группы). Попутное исправление некоторых ошибок. Требуется обновить схему обновления базы данных и подготовить запросы пользователям для обновления. Инкримент версии движка, начало подготовки к релизу.
This commit is contained in:
Exile 2014-08-27 14:32:54 +04:00
commit 99e89c4860
26 changed files with 842 additions and 292 deletions

View file

@ -1,12 +1,3 @@
-- phpMyAdmin SQL Dump
-- version 3.4.10.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Мар 08 2012 г., 16:00
-- Версия сервера: 5.5.20
-- Версия PHP: 5.3.10
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
@ -792,10 +783,14 @@ INSERT INTO `bb_forums` VALUES (1, 1, 'Ваш первый форум', 'Опи
CREATE TABLE IF NOT EXISTS `bb_groups` (
`group_id` mediumint(8) NOT NULL AUTO_INCREMENT,
`group_time` int(11) NOT NULL DEFAULT '0',
`avatar_ext_id` int(15) NOT NULL DEFAULT '0',
`group_time` INT(11) NOT NULL DEFAULT '0',
`mod_time` INT(11) NOT NULL DEFAULT '0',
`group_type` tinyint(4) NOT NULL DEFAULT '1',
`release_group` tinyint(4) NOT NULL DEFAULT '0',
`group_name` varchar(40) NOT NULL DEFAULT '',
`group_description` varchar(255) NOT NULL DEFAULT '',
`group_description` text NOT NULL DEFAULT '',
`group_signature` text NOT NULL DEFAULT '',
`group_moderator` mediumint(8) NOT NULL DEFAULT '0',
`group_single_user` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`group_id`),
@ -866,6 +861,8 @@ CREATE TABLE IF NOT EXISTS `bb_posts` (
`poster_id` mediumint(8) NOT NULL DEFAULT '0',
`post_time` int(11) NOT NULL DEFAULT '0',
`poster_ip` char(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`poster_rg_id` mediumint(8) NOT NULL DEFAULT '0',
`attach_rg_sig` tinyint(4) NOT NULL DEFAULT '0',
`post_username` varchar(25) NOT NULL DEFAULT '',
`post_edit_time` int(11) NOT NULL DEFAULT '0',
`post_edit_count` smallint(5) unsigned NOT NULL DEFAULT '0',
@ -886,7 +883,7 @@ CREATE TABLE IF NOT EXISTS `bb_posts` (
-- Дамп данных таблицы `bb_posts`
--
INSERT INTO `bb_posts` VALUES (1, 1, 1, 2, UNIX_TIMESTAMP(), '', '', 0, 0, 0, 0, 1, '', 0, 0);
INSERT INTO `bb_posts` VALUES (1, 1, 1, 2, UNIX_TIMESTAMP(), '', 0, 0, '', 0, 0, 0, 0, 1, '', 0, 0);
-- --------------------------------------------------------

View file

@ -16,4 +16,3 @@ define('C_COMMENTS_PER_ONCE', 400); // Number of comments converting per once
//Mybb forums & topics
define('CONVERT_MYBB_FORUMS', false); // Converting forums is enabled?
define('C_FORUMS_PER_ONCE', 100); // Number of forums converting per once

View file

@ -16,4 +16,3 @@ define('C_COMMENTS_PER_ONCE', 400); // Number of comments converting per once
//Mybb forums & topics
define('CONVERT_MYBB_FORUMS', false); // Converting forums is enabled?
define('C_FORUMS_PER_ONCE', 100); // Number of forums converting per once

View file

@ -28,6 +28,7 @@ if (!empty($_POST['edit']) || !empty($_POST['new']))
'group_moderator' => $row['group_moderator'],
'group_mod_name' => $row['moderator_name'],
'group_type' => $row['group_type'],
'release_group' => $row['release_group'],
);
$mode = 'editgroup';
$template->assign_block_vars('group_edit', array());
@ -40,6 +41,7 @@ if (!empty($_POST['edit']) || !empty($_POST['new']))
'group_moderator' => '',
'group_mod_name' => '',
'group_type' => GROUP_OPEN,
'release_group' => 0,
);
$mode = 'newgroup';
}
@ -64,6 +66,7 @@ if (!empty($_POST['edit']) || !empty($_POST['new']))
'S_GROUP_OPEN_CHECKED' => ($group_info['group_type'] == GROUP_OPEN) ? HTML_CHECKED : '',
'S_GROUP_CLOSED_CHECKED' => ($group_info['group_type'] == GROUP_CLOSED) ? HTML_CHECKED : '',
'S_GROUP_HIDDEN_CHECKED' => ($group_info['group_type'] == GROUP_HIDDEN ) ? HTML_CHECKED : '',
'RELEASE_GROUP' => ($group_info['release_group']) ? true : false,
'S_GROUP_ACTION' => "admin_groups.php",
'S_HIDDEN_FIELDS' => $s_hidden_fields,
));
@ -88,9 +91,9 @@ else if (!empty($_POST['group_update']))
else
{
$group_type = isset($_POST['group_type']) ? intval($_POST['group_type']) : GROUP_OPEN;
$release_group = isset($_POST['release_group']) ? intval($_POST['release_group']) : 0;
$group_name = isset($_POST['group_name']) ? trim($_POST['group_name']) : '';
$group_desc = isset($_POST['group_description']) ? trim($_POST['group_description']) : '';
$group_moderator = isset($_POST['username']) ? $_POST['username'] : '';
if ($group_name === '')
@ -110,6 +113,7 @@ else if (!empty($_POST['group_update']))
$sql_ary = array(
'group_type' => (int) $group_type,
'release_group' => (int) $release_group,
'group_name' => (string) $group_name,
'group_description' => (string) $group_desc,
'group_moderator' => (int) $group_moderator,
@ -127,7 +131,7 @@ else if (!empty($_POST['group_update']))
{
// Create user_group for new group's moderator
add_user_into_group($group_id, $group_moderator);
$sql_ary['group_time'] = TIMENOW;
$sql_ary['mod_time'] = TIMENOW;
// Delete old moderator's user_group
if (isset($_POST['delete_old_moderator']))
@ -149,7 +153,7 @@ else if (!empty($_POST['group_update']))
}
else if ($mode == 'newgroup')
{
$sql_ary['group_time'] = TIMENOW;
$sql_ary['group_time'] = $sql_ary['mod_time'] = TIMENOW;
$sql_args = DB()->build_array('INSERT', $sql_ary);
// Create new group

View file

@ -62,6 +62,7 @@ switch ($ajax->action)
break;
case 'group_membership':
case 'manage_group':
require(INC_DIR . 'functions_group.php');
break;
@ -101,6 +102,7 @@ class ajax_common
'gen_passkey' => array('user'),
'change_torrent' => array('user'),
'change_tor_status' => array('user'),
'manage_group' => array('user'),
'view_post' => array('guest'),
'view_torrent' => array('guest'),
@ -349,6 +351,11 @@ class ajax_common
require(AJAX_DIR . 'group_membership.php');
}
function manage_group()
{
require(AJAX_DIR . 'edit_group_profile.php');
}
function post_mod_comment()
{
require(AJAX_DIR . 'post_mod_comment.php');

View file

@ -0,0 +1,52 @@
<?php
if (!defined('IN_AJAX')) die(basename(__FILE__));
global $bb_cfg, $userdata, $lang;
if (!$group_id = intval($this->request['group_id']) OR !$group_info = get_group_data($group_id))
{
$this->ajax_die($lang['NO_GROUP_ID_SPECIFIED']);
}
if (!$mode = (string) $this->request['mode'])
{
$this->ajax_die('No mode specified');
}
$value = $this->request['value'] = (string) (isset($this->request['value'])) ? $this->request['value'] : 0;
if (!IS_ADMIN && $userdata['user_id'] != $group_info['group_moderator'])
{
$this->ajax_die($lang['ONLY_FOR_MOD']);
}
switch ($mode)
{
case 'group_name':
case 'group_signature':
case 'group_description':
$value = htmlCHR($value, false, ENT_NOQUOTES);
$this->response['new_value'] = $value;
break;
case 'group_type':
$this->response['new_value'] = $value;
break;
case 'release_group':
$this->response['new_value'] = $value;
break;
case 'delete_avatar':
delete_avatar(GROUP_AVATAR_MASK . $group_id, $group_info['avatar_ext_id']);
$value = 0;
$mode = 'avatar_ext_id';
$this->response['act'] = $value;
break;
default:
$this->ajax_die('Unknown mode');
}
$value_sql = DB()->escape($value, true);
DB()->query("UPDATE ". BB_GROUPS ." SET $mode = $value_sql WHERE group_id = $group_id LIMIT 1");

View file

@ -54,6 +54,7 @@
* Ads
* Attachments
* Avatars
* Group avatars
* Misc
* Captcha
* Atom feed
@ -69,9 +70,9 @@ $domain_name = 'torrentpier.me'; // enter here your primary domain name of your
$domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $domain_name;
// Version info
$bb_cfg['tp_version'] = '2.0.9 (RC)';
$bb_cfg['tp_release_date'] = '24-08-2014';
$bb_cfg['tp_release_state'] = 'R597';
$bb_cfg['tp_version'] = '2.1 (RC)';
$bb_cfg['tp_release_date'] = '27-08-2014';
$bb_cfg['tp_release_state'] = 'R598';
// Database
$charset = 'utf8';
@ -502,7 +503,7 @@ $bb_cfg['user_not_activated_days_keep'] = 7; // "not activated" == "not fi
$bb_cfg['user_not_active_days_keep'] = 180; // inactive users but only with no posts
// GroupCP
$bb_cfg['groupcp_members_per_page'] = 300;
$bb_cfg['groupcp_members_per_page'] = 50;
// Tidy
$bb_cfg['tidy_post'] = (!extension_loaded('tidy')) ? false : true;
@ -557,6 +558,17 @@ $bb_cfg['avatars'] = array(
'up_allowed' => true, // разрешить загрузку аватар
);
// Group avatars
$bb_cfg['group_avatars'] = array(
'allowed_ext' => array('gif','jpg','jpeg','png'), // разрешенные форматы файлов
'max_size' => 50*1024, // размер аватары в байтах
'max_height' => 300, // высота аватара в px
'max_width' => 300, // ширина аватара в px
'no_avatar' => 'gallery/noavatar.png', // дефолтная аватара
'upload_path' => BB_ROOT . 'images/avatars/', // путь к директории с аватарами
'up_allowed' => true, // разрешить загрузку аватар
);
// Misc
define('MEM_USAGE', function_exists('memory_get_usage'));

115
upload/group_config.php Normal file
View file

@ -0,0 +1,115 @@
<?php
define('IN_FORUM', true);
define('BB_SCRIPT', 'group_config');
define('BB_ROOT', './');
require(BB_ROOT .'common.php');
require(INC_DIR .'functions_group.php');
$page_cfg['include_bbcode_js'] = true;
// Start session management
$user->session_start(array('req_login' => true));
$group_id = isset($_REQUEST[POST_GROUPS_URL]) ? intval($_REQUEST[POST_GROUPS_URL]) : null;
$group_info = array();
$is_moderator = false;
$submit = !empty($_POST['submit']);
if ($group_id)
{
if (!$group_info = get_group_data($group_id))
{
bb_die($lang['GROUP_NOT_EXIST']);
}
if (!$group_info['group_id'] || !$group_info['group_moderator'] || !$group_info['moderator_name'])
{
bb_die("Invalid group data [group_id: $group_id]");
}
$is_moderator = ($userdata['user_id'] == $group_info['group_moderator'] || IS_ADMIN);
}
if ($is_moderator)
{
// TODO Admin panel, some tasty features
// Avatar
if ($submit)
{
if (!empty($_FILES['avatar']['name']) && $bb_cfg['group_avatars']['up_allowed'])
{
require(INC_DIR .'functions_upload.php');
$upload = new upload_common();
if ($upload->init($bb_cfg['group_avatars'], $_FILES['avatar']) AND $upload->store('avatar', array("user_id" => GROUP_AVATAR_MASK . $group_id, "avatar_ext_id" => $group_info['avatar_ext_id'])))
{
$avatar_ext_id = (int) $upload->file_ext_id;
}
else
{
bb_die(implode($upload->errors));
}
DB()->query("UPDATE ". BB_GROUPS ." SET avatar_ext_id = $avatar_ext_id WHERE group_id = $group_id LIMIT 1");
}
}
$group_type = '';
if ($group_info['group_type'] == GROUP_OPEN)
{
$group_type = $lang['GROUP_OPEN'];
}
elseif ($group_info['group_type'] == GROUP_CLOSED)
{
$group_type = $lang['GROUP_CLOSED'];
}
elseif ($group_info['group_type'] == GROUP_HIDDEN)
{
$group_type = $lang['GROUP_HIDDEN'];
}
$s_hidden_fields = '<input type="hidden" name="'. POST_GROUPS_URL .'" value="'. $group_id .'" />';
$template->assign_vars(array(
'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'],
'GROUP_NAME' => htmlCHR($group_info['group_name']),
'GROUP_ID' => $group_id,
'GROUP_DESCRIPTION' => htmlCHR($group_info['group_description']),
'GROUP_SIGNATURE' => htmlCHR($group_info['group_signature']),
'U_GROUP_URL' => GROUP_URL . $group_id,
'GROUP_TYPE' => $group_type,
'S_GROUP_OPEN_TYPE' => GROUP_OPEN,
'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED,
'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN,
'S_GROUP_OPEN_CHECKED' => ($group_info['group_type'] == GROUP_OPEN) ? ' checked="checked"' : '',
'S_GROUP_CLOSED_CHECKED' => ($group_info['group_type'] == GROUP_CLOSED) ? ' checked="checked"' : '',
'S_GROUP_HIDDEN_CHECKED' => ($group_info['group_type'] == GROUP_HIDDEN) ? ' checked="checked"' : '',
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_GROUP_CONFIG_ACTION' => "group_config.php?" . POST_GROUPS_URL . "=$group_id",
'AVATAR_EXPLAIN' => sprintf($lang['AVATAR_EXPLAIN'], $bb_cfg['group_avatars']['max_width'], $bb_cfg['group_avatars']['max_height'], (round($bb_cfg['group_avatars']['max_size'] / 1024))),
'AVATAR_URL_PATH' => ($group_info['avatar_ext_id']) ? get_avatar_path(GROUP_AVATAR_MASK . $group_id, $group_info['avatar_ext_id']) : '',
'RELEASE_GROUP' => ($group_info['release_group']) ? true : false,
));
$template->set_filenames(array('body' => 'group_config.tpl'));
$template->assign_vars(array('PAGE_TITLE' => $lang['GROUP_CONFIGURATION']));
require(PAGE_HEADER);
$template->pparse('body');
require(PAGE_FOOTER);
}
else
{
$redirect = 'index.php';
if ($group_id)
{
$redirect = GROUP_URL . $group_id;
}
redirect($redirect);
}

View file

@ -3,7 +3,8 @@
define('IN_FORUM', true);
define('BB_SCRIPT', 'groupcp');
define('BB_ROOT', './');
require(BB_ROOT ."common.php");
require(BB_ROOT .'common.php');
require(INC_DIR .'bbcode.php');
require(INC_DIR .'functions_group.php');
$page_cfg['use_tablesorter'] = true;
@ -11,7 +12,7 @@ $page_cfg['use_tablesorter'] = true;
$s_member_groups = $s_pending_groups = $s_member_groups_opt = $s_pending_groups_opt = '';
$select_sort_mode = $select_sort_order = '';
function generate_user_info(&$row, $date_format, $group_mod, &$from, &$posts, &$joined, &$pm, &$email, &$www, &$user_time)
function generate_user_info(&$row, $date_format, $group_mod, &$from, &$posts, &$joined, &$pm, &$email, &$www, &$user_time, &$avatar)
{
global $lang, $images, $bb_cfg;
@ -20,6 +21,7 @@ function generate_user_info(&$row, $date_format, $group_mod, &$from, &$posts, &$
$user_time = (!empty($row['user_time'])) ? bb_date($row['user_time']) : $lang['NONE'];
$posts = ($row['user_posts']) ? $row['user_posts'] : 0;
$pm = ($bb_cfg['text_buttons']) ? '<a class="txtb" href="'. (PM_URL . "?mode=post&amp;". POST_USERS_URL ."=".$row['user_id']) .'">'. $lang['SEND_PM_TXTB'] .'</a>' : '<a href="' . (PM_URL . "?mode=post&amp;". POST_USERS_URL ."=".$row['user_id']) .'"><img src="' . $images['icon_pm'] . '" alt="' . $lang['SEND_PRIVATE_MESSAGE'] . '" title="' . $lang['SEND_PRIVATE_MESSAGE'] . '" border="0" /></a>';
$avatar = get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt', 'dis_avatar'), 50, 50);
if (bf($row['user_opt'], 'user_opt', 'user_viewemail') || $group_mod)
{
@ -44,6 +46,8 @@ set_die_append_msg();
$group_id = isset($_REQUEST[POST_GROUPS_URL]) ? intval($_REQUEST[POST_GROUPS_URL]) : null;
$start = isset($_REQUEST['start']) ? abs(intval($_REQUEST['start'])) : 0;
$per_page = $bb_cfg['groupcp_members_per_page'];
$view_mode = isset($_REQUEST['view']) ? (string) $_REQUEST['view'] : null;
$rel_limit = 50;
$group_info = array();
$is_moderator = false;
@ -70,7 +74,7 @@ if (!$group_id)
$sql = "
SELECT
g.group_name, g.group_description, g.group_id, g.group_type,
g.group_name, g.group_description, g.group_id, g.group_type, g.release_group,
IF(ug.user_id IS NOT NULL, IF(ug.user_pending = 1, $pending, $member), 0) AS membership,
g.group_moderator, u.username AS moderator_name,
IF(g.group_moderator = ug.user_id, 1, 0) AS is_group_mod,
@ -127,7 +131,7 @@ if (!$group_id)
continue;
}
$data = array('id' => $row['group_id'], 'm' => ($row['members'] - $row['candidates']), 'c' => $row['candidates']);
$data = array('id' => $row['group_id'], 'm' => ($row['members'] - $row['candidates']), 'c' => $row['candidates'], 'rg' => $row['release_group']);
$groups[$type][$row['group_name']] = $data;
}
@ -145,13 +149,13 @@ if (!$group_id)
$candidates = ($data['c']) ? $lang['PENDING_MEMBERS'] .': '. $data['c'] : $lang['NO_PENDING_GROUP_MEMBERS'];
$options .= '<li class="pad_2"><a href="'. GROUP_URL . $data['id'] .'" class="med bold">'. $text .'</a></li>';
$options .= '<ul><li class="seedmed">'. $members .'</li>';
$options .= ($data['rg']) ? '<ul><li class="med">'. $lang['RELEASE_GROUP'] .'</li>' : '';
$options .= '<li class="seedmed">'. $members .'</li>';
if (IS_AM)
{
$options .= '<li class="leechmed">'. $candidates .'</li>';
}
$options .= '</ul>';
}
return $options;
}
@ -184,34 +188,6 @@ if (!$group_id)
else bb_die($lang['NO_GROUPS_EXIST']);
}
}
else if (!empty($_POST['groupstatus']))
{
if (!$is_moderator)
{
bb_die($lang['NOT_GROUP_MODERATOR']);
}
$new_group_type = (int) $_POST['group_type'];
if (!in_array($new_group_type, array(GROUP_OPEN, GROUP_CLOSED, GROUP_HIDDEN), true))
{
bb_die("Invalid group type: $new_group_type");
}
DB()->query("
UPDATE ". BB_GROUPS ." SET
group_type = $new_group_type
WHERE group_id = $group_id
AND group_single_user = 0
LIMIT 1
");
$message = $lang['GROUP_TYPE_UPDATED'] .'<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_GROUP'], '<a href="'. GROUP_URL ."$group_id" .'">', '</a>') .'<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_INDEX'], '<a href="'. "index.php" .'">', '</a>');
bb_die($message);
}
else if (@$_POST['joingroup'])
{
if ($group_info['group_type'] != GROUP_OPEN)
@ -403,51 +379,6 @@ else
WHERE user_id = ". $group_info['group_moderator'] ."
");
// Members
$count_members = DB()->fetch_rowset("
SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM ". BB_USER_GROUP ." ug, ". BB_USERS ." u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> ". $group_moderator['user_id'] ."
AND u.user_id = ug.user_id
ORDER BY u.username
");
$count_members = count($count_members);
// Get user information for this group
$modgroup_pending_count = 0;
// Members
$group_members = DB()->fetch_rowset("
SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM ". BB_USER_GROUP ." ug, ". BB_USERS ." u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> ". $group_moderator['user_id'] ."
AND u.user_id = ug.user_id
ORDER BY u.username
LIMIT $start, $per_page
");
$members_count = count($group_members);
generate_pagination(GROUP_URL . $group_id, $count_members, $per_page, $start);
// Pending
if ($is_moderator)
{
$modgroup_pending_list = DB()->fetch_rowset("
SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email
FROM ". BB_USER_GROUP ." ug, ". BB_USERS ." u
WHERE ug.group_id = $group_id
AND ug.user_pending = 1
AND u.user_id = ug.user_id
ORDER BY u.username
LIMIT 200
");
$modgroup_pending_count = count($modgroup_pending_list);
}
// Current user membership
$is_group_member = $is_group_pending_member = false;
@ -513,7 +444,7 @@ else
$username = $group_moderator['username'];
$user_id = $group_moderator['user_id'];
generate_user_info($group_moderator, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time);
generate_user_info($group_moderator, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $avatar);
$group_type = '';
if ($group_info['group_type'] == GROUP_OPEN)
@ -535,18 +466,27 @@ else
'GROUP_INFO' => true,
'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'],
'GROUP_NAME' => htmlCHR($group_info['group_name']),
'GROUP_DESCRIPTION' => $group_info['group_description'],
'GROUP_DESCRIPTION' => bbcode2html($group_info['group_description']),
'GROUP_AVATAR' => get_avatar(GROUP_AVATAR_MASK . $group_id, $group_info['avatar_ext_id'], true),
'GROUP_DETAILS' => $group_details,
'GROUP_TIME' => (!empty($group_info['group_time'])) ? sprintf('%s <span class="posted_since">(%s)</span>', bb_date($group_info['group_time']), delta_time($group_info['group_time'])) : $lang['NONE'],
'MOD_USER' => profile_url($group_moderator),
'MOD_AVATAR' => $avatar,
'MOD_FROM' => $from,
'MOD_JOINED' => $joined,
'MOD_POSTS' => $posts,
'MOD_PM' => $pm,
'MOD_EMAIL' => $email,
'MOD_WWW' => $www,
'MOD_TIME' => (!empty($group_info['group_time'])) ? bb_date($group_info['group_time']) : $lang['NONE'],
'MOD_TIME' => (!empty($group_info['mod_time'])) ? bb_date($group_info['mod_time']) : $lang['NONE'],
'U_SEARCH_USER' => "search.php?mode=searchuser",
'U_SEARCH_RELEASES' => "tracker.php?srg=$group_id",
'U_GROUP_RELEASES' => "groupcp.php?view=releases&amp;". POST_GROUPS_URL ."=$group_id",
'U_GROUP_MEMBERS' => "groupcp.php?view=members&amp;". POST_GROUPS_URL ."=$group_id",
'U_GROUP_CONFIG' => "group_config.php?g=$group_id",
'RELEASE_GROUP' => ($group_info['release_group']) ? true : false,
'GROUP_TYPE' => $group_type,
'S_GROUP_OPEN_TYPE' => GROUP_OPEN,
'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED,
'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN,
@ -556,15 +496,108 @@ else
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_MODE_SELECT' => $select_sort_mode,
'S_ORDER_SELECT' => $select_sort_order,
'S_GROUPCP_ACTION' => GROUP_URL . $group_id,
'S_GROUPCP_ACTION' => "groupcp.php?" . POST_GROUPS_URL . "=$group_id",
));
switch ($view_mode)
{
case 'releases':
// TODO Correct SQL to posts with attach and limit them, optimization
if (!$group_info['release_group']) bb_die($lang['NOT_A_RELEASE_GROUP']);
// Count releases for pagination
$all_releases = DB()->fetch_rowset("
SELECT p.topic_id, p.forum_id, p.poster_id, t.topic_title, t.topic_time, f.forum_name, u.username, u.avatar_ext_id, u.user_opt, u.user_rank
FROM ". BB_POSTS ." p
LEFT JOIN ". BB_TOPICS ." t ON(p.topic_id = t.topic_id)
LEFT JOIN ". BB_FORUMS ." f ON(p.forum_id= f.forum_id)
LEFT JOIN ". BB_USERS ." u ON(p.poster_id = u.user_id)
WHERE p.poster_rg_id = $group_id
ORDER BY t.topic_time DESC
LIMIT $rel_limit
");
$count_releases = count($all_releases);
generate_pagination(GROUP_URL . $group_id ."&amp;view=releases", $count_releases, $per_page, $start);
$sql = "
SELECT p.topic_id, p.forum_id, p.poster_id, t.topic_title, t.topic_time, f.forum_name, u.username, u.avatar_ext_id, u.user_opt, u.user_rank
FROM ". BB_POSTS ." p
LEFT JOIN ". BB_TOPICS ." t ON(p.topic_id = t.topic_id)
LEFT JOIN ". BB_FORUMS ." f ON(p.forum_id= f.forum_id)
LEFT JOIN ". BB_USERS ." u ON(p.poster_id = u.user_id)
WHERE p.poster_rg_id = $group_id
ORDER BY t.topic_time DESC
LIMIT $start, $per_page
";
if (!$releases = DB()->fetch_rowset($sql))
{
bb_die('Could not get releases data');
}
foreach ($releases as $i => $release)
{
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('releases', array(
'ROW_NUMBER' => $i + ( $start + 1 ),
'ROW_CLASS' => $row_class,
'RELEASER' => profile_url(array('user_id' => $release['poster_id'], 'username' => $release['username'], 'user_rank' => $release['user_rank'])),
'AVATAR_IMG' => get_avatar($release['poster_id'], $release['avatar_ext_id'], !bf($release['user_opt'], 'user_opt', 'dis_avatar'), 50, 50),
'RELEASE_NAME' => sprintf('<a href="%s">%s</a>', TOPIC_URL . $release['topic_id'], htmlCHR($release['topic_title'])),
'RELEASE_TIME' => bb_date($release['topic_time']),
'RELEASE_FORUM' => sprintf('<a href="%s">%s</a>', FORUM_URL . $release['forum_id'], htmlCHR($release['forum_name'])),
));
}
$template->assign_vars(array(
'RELEASES' => true,
));
break;
case 'members':
default:
// Members
$count_members = DB()->fetch_rowset("
SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM ". BB_USER_GROUP ." ug, ". BB_USERS ." u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> ". $group_moderator['user_id'] ."
AND u.user_id = ug.user_id
ORDER BY u.username
");
$count_members = count($count_members);
// Get user information for this group
$modgroup_pending_count = 0;
// Members
$group_members = DB()->fetch_rowset("
SELECT u.username, u.avatar_ext_id, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM ". BB_USER_GROUP ." ug, ". BB_USERS ." u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> ". $group_moderator['user_id'] ."
AND u.user_id = ug.user_id
ORDER BY u.username
LIMIT $start, $per_page
");
$members_count = count($group_members);
generate_pagination(GROUP_URL . $group_id, $count_members, $per_page, $start);
// Dump out the remaining users
foreach ($group_members as $i => $member)
{
$user_id = $member['user_id'];
generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time);
generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $avatar);
if ($group_info['group_type'] != GROUP_HIDDEN || $is_group_member || $is_moderator)
{
@ -574,6 +607,7 @@ else
'ROW_NUMBER' => $i + ( $start + 1 ),
'ROW_CLASS' => $row_class,
'USER' => profile_url($member),
'AVATAR_IMG' => $avatar,
'FROM' => $from,
'JOINED' => $joined,
'POSTS' => $posts,
@ -603,17 +637,28 @@ else
$template->assign_block_vars('switch_hidden_group', array());
}
//
// We've displayed the members who belong to the group, now we
// do that pending memebers...
//
// Pending
if ($is_moderator)
{
$modgroup_pending_list = DB()->fetch_rowset("
SELECT u.username, u.avatar_ext_id, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email
FROM ". BB_USER_GROUP ." ug, ". BB_USERS ." u
WHERE ug.group_id = $group_id
AND ug.user_pending = 1
AND u.user_id = ug.user_id
ORDER BY u.username
LIMIT 200
");
$modgroup_pending_count = count($modgroup_pending_list);
}
if ($is_moderator && $modgroup_pending_list)
{
foreach ($modgroup_pending_list as $i => $member)
{
$user_id = $member['user_id'];
generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time);
generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $avatar);
$row_class = !($i % 2) ? 'row1' : 'row2';
@ -621,6 +666,7 @@ else
$template->assign_block_vars('pending', array(
'ROW_CLASS' => $row_class,
'AVATAR_IMG'=> $avatar,
'USER' => profile_url($member),
'FROM' => $from,
'JOINED' => $joined,
@ -636,6 +682,9 @@ else
));
}
$template->assign_vars(array('MEMBERS' => true));
}
if ($is_moderator)
{
$template->assign_block_vars('switch_mod_option', array());

View file

@ -72,6 +72,8 @@ function delete_group ($group_id)
WHERE ug.group_id = $group_id
");
DB()->query("UPDATE " . BB_POSTS . " SET attach_rg_sig = 0, poster_rg_id = 0 WHERE poster_rg_id = ". $group_id);
update_user_level('all');
}

View file

@ -69,7 +69,7 @@ function prepare_post(&$mode, &$post_data, &$error_msg, &$username, &$subject, &
//
// Post a new topic/reply or edit existing post/poll
//
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$topic_type, $post_username, $post_subject, $post_message, $update_post_time)
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$topic_type, $post_username, $post_subject, $post_message, $update_post_time, $poster_rg_id, $attach_rg_sig)
{
global $userdata, $post_info, $is_auth, $bb_cfg, $lang, $datastore;
@ -163,7 +163,7 @@ function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_
DB()->sql_query("UPDATE ". BB_TOPICS ." SET topic_last_post_time = $current_time WHERE topic_id = $topic_id LIMIT 1");
}
$sql = ($mode != "editpost") ? "INSERT INTO " . BB_POSTS . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '". USER_IP ."')" : "UPDATE " . BB_POSTS . " SET post_username = '$post_username'" . $edited_sql . " WHERE post_id = $post_id";
$sql = ($mode != "editpost") ? "INSERT INTO " . BB_POSTS . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, poster_rg_id, attach_rg_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '". USER_IP ."', $poster_rg_id, $attach_rg_sig)" : "UPDATE " . BB_POSTS . " SET post_username = '$post_username'" . $edited_sql . ", poster_rg_id = $poster_rg_id, attach_rg_sig = $attach_rg_sig WHERE post_id = $post_id";
if (!DB()->sql_query($sql))
{
bb_die('Error in posting #2');

View file

@ -197,6 +197,9 @@ define('NOGENDER', 0);
# 1 - обычный опрос
define('POLL_FINISHED', 2);
// Group avatars
define('GROUP_AVATAR_MASK', 999000);
// Torrents (reserved: -1)
define('TOR_NOT_APPROVED', 0); // не проверено
define('TOR_CLOSED', 1); // закрыто

View file

@ -708,6 +708,9 @@ $lang['ORDER'] = 'Order';
// Group control panel
//
$lang['GROUP_CONTROL_PANEL'] = 'User Groups';
$lang['GROUP_CONFIGURATION'] = 'Group Configuration';
$lang['GROUP_GOTO_CONFIG'] = 'Go to Group Configuration panel';
$lang['GROUP_RETURN'] = 'Return to User Group page';
$lang['MEMBERSHIP_DETAILS'] = 'Group Membership Details';
$lang['JOIN_A_GROUP'] = 'Join a Group';
@ -719,6 +722,9 @@ $lang['GROUP_MEMBERS'] = 'Group Members';
$lang['GROUP_MODERATOR'] = 'Group Moderator';
$lang['PENDING_MEMBERS'] = 'Pending Members';
$lang['GROUP_TIME'] = 'Created';
$lang['RELEASE_GROUP'] = 'Release Group';
$lang['GROUP_TYPE'] = 'Group type';
$lang['GROUP_OPEN'] = 'Open group';
$lang['GROUP_CLOSED'] = 'Closed group';
@ -733,6 +739,7 @@ $lang['GROUP_MEMBER_HIDDEN'] = 'Hidden groups';
$lang['NO_GROUPS_EXIST'] = 'No Groups Exist';
$lang['GROUP_NOT_EXIST'] = 'That user group does not exist';
$lang['NO_GROUP_ID_SPECIFIED'] = 'Group ID is not specified';
$lang['NO_GROUP_MEMBERS'] = 'This group has no members';
$lang['HIDDEN_GROUP_MEMBERS'] = 'This group is hidden; you cannot view its membership';
@ -775,6 +782,15 @@ $lang['UNSUBSCRIBE_GROUP'] = 'Unsubscribe';
$lang['VIEW_INFORMATION'] = 'View Information';
$lang['MEMBERS_IN_GROUP'] = 'Members in group';
// Release Groups
$lang['POST_RELEASE_FROM_GROUP'] = 'Post release from group';
$lang['CHOOSE_RELEASE_GROUP'] = 'Select release group';
$lang['ATTACH_RG_SIG'] = 'Attach release group signature';
$lang['RELEASE_FROM_RG'] = 'Release was prepared by';
$lang['GROUPS_RELEASES'] = 'Group\'s releases';
$lang['MORE_RELEASES'] = 'All releases';
$lang['NOT_A_RELEASE_GROUP'] = 'This group is not a release group';
//
// Search
//

View file

@ -708,6 +708,9 @@ $lang['ORDER'] = ''; // не нужно, в английском использ
// Group control panel
//
$lang['GROUP_CONTROL_PANEL'] = 'Группы';
$lang['GROUP_CONFIGURATION'] = 'Настройка группы';
$lang['GROUP_GOTO_CONFIG'] = 'Перейти в панель управления группой';
$lang['GROUP_RETURN'] = 'Вернуться на страницу группы';
$lang['MEMBERSHIP_DETAILS'] = 'Информация о членстве в группах';
$lang['JOIN_A_GROUP'] = 'Вступить в группу';
@ -719,6 +722,9 @@ $lang['GROUP_MEMBERS'] = 'Члены группы';
$lang['GROUP_MODERATOR'] = 'Модератор группы';
$lang['PENDING_MEMBERS'] = 'Кандидаты в члены группы';
$lang['GROUP_TIME'] = 'Дата создания';
$lang['RELEASE_GROUP'] = 'Релиз группа';
$lang['GROUP_TYPE'] = 'Тип группы';
$lang['GROUP_OPEN'] = 'Группа с открытым членством';
$lang['GROUP_CLOSED'] = 'Группа с закрытым членством';
@ -733,6 +739,7 @@ $lang['GROUP_MEMBER_HIDDEN'] = 'Скрытые группы';
$lang['NO_GROUPS_EXIST'] = 'Нет ни одной группы';
$lang['GROUP_NOT_EXIST'] = 'Такой группы не существует';
$lang['NO_GROUP_ID_SPECIFIED'] = 'Не указан ID группы';
$lang['NO_GROUP_MEMBERS'] = 'В этой группе нет ни одного члена';
$lang['HIDDEN_GROUP_MEMBERS'] = 'Эта группа скрыта, вы не можете посмотреть ее состав';
@ -775,6 +782,15 @@ $lang['UNSUBSCRIBE_GROUP'] = 'Выйти из группы';
$lang['VIEW_INFORMATION'] = 'Просмотреть информацию';
$lang['MEMBERS_IN_GROUP'] = 'Кол-во участников';
// Release Groups
$lang['POST_RELEASE_FROM_GROUP'] = 'Создать релиз от группы';
$lang['CHOOSE_RELEASE_GROUP'] = 'Выбрать релиз группу';
$lang['ATTACH_RG_SIG'] = 'Добавить подпись релиз группы';
$lang['RELEASE_FROM_RG'] = 'Релиз подготовлен';
$lang['GROUPS_RELEASES'] = 'Релизы группы';
$lang['MORE_RELEASES'] = 'Все релизы';
$lang['NOT_A_RELEASE_GROUP'] = 'Эта группа не является релиз группой';
//
// Search
//

View file

@ -708,6 +708,9 @@ $lang['ORDER'] = ''; // не потрібно, в англійській вик
// Group control panel
//
$lang['GROUP_CONTROL_PANEL'] = 'Групи';
$lang['GROUP_CONFIGURATION'] = 'Налаштування групи';
$lang['GROUP_GOTO_CONFIG'] = 'Перейти в панель управління групою';
$lang['GROUP_RETURN'] = 'Повернутися на сторінку групи';
$lang['MEMBERSHIP_DETAILS'] = 'Інформація про членство в групах';
$lang['JOIN_A_GROUP'] = 'Вступити в групу';
@ -724,6 +727,9 @@ $lang['GROUP_OPEN'] = 'Група з відкритим членством';
$lang['GROUP_CLOSED'] = 'Група з закритим членством';
$lang['GROUP_HIDDEN'] = 'Прихована група';
$lang['GROUP_TIME'] = 'Дата створення';
$lang['RELEASE_GROUP'] = 'Реліз група';
$lang['GROUP_MEMBER_MOD'] = 'Є модератором груп';
$lang['GROUP_MEMBER_MEMBER'] = 'Є членом груп';
$lang['GROUP_MEMBER_PENDING'] = 'Кандидат у члени груп';
@ -733,6 +739,7 @@ $lang['GROUP_MEMBER_HIDDEN'] = 'Приховані групи';
$lang['NO_GROUPS_EXIST'] = 'Немає ні однієї групи';
$lang['GROUP_NOT_EXIST'] = 'Такої групи не існує';
$lang['NO_GROUP_ID_SPECIFIED'] = 'Не вказаний ID групи';
$lang['NO_GROUP_MEMBERS'] = 'В цій групі немає жодного члена';
$lang['HIDDEN_GROUP_MEMBERS'] = 'Ця група прихована, ви не можете побачити її складу';
@ -775,6 +782,15 @@ $lang['UNSUBSCRIBE_GROUP'] = 'Вийти з групи';
$lang['VIEW_INFORMATION'] = 'Переглянути інформацію';
$lang['MEMBERS_IN_GROUP'] = 'Кількість учасників';
// Release Groups
$lang['POST_RELEASE_FROM_GROUP'] = 'Створити реліз від групи';
$lang['CHOOSE_RELEASE_GROUP'] = 'Вибрати реліз групи';
$lang['ATTACH_RG_SIG'] = 'Додати підпис реліз групи';
$lang['RELEASE_FROM_RG'] = 'Реліз підготовлений';
$lang['GROUPS_RELEASES'] = 'Релізи групи';
$lang['MORE_RELEASES'] = 'Всі релізи';
$lang['NOT_A_RELEASE_GROUP'] = 'Ця група не є реліз групою';
//
// Search
//

View file

@ -29,6 +29,9 @@ $orig_word = $replacement_word = array();
$topic_type = (@$_POST['topictype']) ? (int) $_POST['topictype'] : POST_NORMAL;
$topic_type = in_array($topic_type, array(POST_NORMAL, POST_STICKY, POST_ANNOUNCE)) ? $topic_type : POST_NORMAL;
$selected_rg = 0;
$switch_poster_rg_sig = 0;
if ($mode == 'smilies')
{
generate_smilies('window');
@ -178,6 +181,9 @@ if ($post_info = DB()->fetch_row($sql))
$post_data['topic_type'] = $post_info['topic_type'];
$post_data['poster_id'] = $post_info['poster_id'];
$selected_rg = $post_info['poster_rg_id'];
$switch_rg_sig = ($post_info['attach_rg_sig']) ? true : false;
// Can this user edit/delete the post?
if ($post_info['poster_id'] != $userdata['user_id'] && !$is_auth['auth_mod'])
{
@ -360,6 +366,8 @@ elseif ( ($submit || $confirm) && !$topic_has_new_posts )
$username = ( !empty($_POST['username']) ) ? clean_username($_POST['username']) : '';
$subject = ( !empty($_POST['subject']) ) ? clean_title($_POST['subject']) : '';
$message = ( !empty($_POST['message']) ) ? prepare_message($_POST['message']) : '';
$attach_rg_sig = (isset($_POST['attach_rg_sig']) && isset($_POST['poster_rg']) && $_POST['poster_rg'] != -1) ? 1 : 0;
$poster_rg_id = (isset($_POST['poster_rg']) && $_POST['poster_rg'] != -1) ? (int) $_POST['poster_rg'] : 0;
prepare_post($mode, $post_data, $error_msg, $username, $subject, $message);
@ -367,7 +375,7 @@ elseif ( ($submit || $confirm) && !$topic_has_new_posts )
{
$topic_type = ( isset($post_data['topic_type']) && $topic_type != $post_data['topic_type'] && !$is_auth['auth_sticky'] && !$is_auth['auth_announce'] ) ? $post_data['topic_type'] : $topic_type;
submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $topic_type, DB()->escape($username), DB()->escape($subject), DB()->escape($message), $update_post_time);
submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $topic_type, DB()->escape($username), DB()->escape($subject), DB()->escape($message), $update_post_time, $poster_rg_id, $attach_rg_sig);
$post_url = POST_URL ."$post_id#$post_id";
$post_msg = ($mode == 'editpost') ? $lang['EDITED']: $lang['STORED'];
@ -631,6 +639,25 @@ if ($post_info['allow_reg_tracker'] && $post_data['first_post'] && ($topic_dl_ty
}
//bt end
// Get poster release group data
if ($userdata['user_level'] == GROUP_MEMBER || IS_AM)
{
$poster_rgroups = '';
$sql = "SELECT ug.group_id, g.group_name, g.release_group
FROM ". BB_USER_GROUP ." ug
INNER JOIN ". BB_GROUPS ." g ON(g.group_id = ug.group_id)
WHERE ug.user_id = {$userdata['user_id']}
AND g.release_group = 1
ORDER BY g.group_name";
foreach (DB()->fetch_rowset($sql) as $row)
{
$selected_opt = ($row['group_id'] == $selected_rg) ? 'selected' : '';
$poster_rgroups .= '<option value="'. $row['group_id'] .'" '. $selected_opt .'>'. $row['group_name'] .'</option>';
}
}
$hidden_form_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
switch( $mode )
@ -672,7 +699,10 @@ $template->assign_vars(array(
'SUBJECT' => $subject,
'MESSAGE' => $message,
'U_VIEWTOPIC' => ( $mode == 'reply' ) ? TOPIC_URL . $topic_id . "&amp;postorder=desc" : '',
'POSTER_RGROUPS' => isset($poster_rgroups) && !empty($poster_rgroups) ? $poster_rgroups : '',
'ATTACH_RG_SIG' => ($switch_rg_sig) ? $switch_rg_sig : false,
'U_VIEWTOPIC' => ($mode == 'reply') ? "viewtopic.php?" . POST_TOPIC_URL . "=$topic_id&amp;postorder=desc" : '',
'S_NOTIFY_CHECKED' => ($notify_user) ? 'checked="checked"' : '',
'S_TYPE_TOGGLE' => $topic_type_toggle,

View file

@ -1,4 +1,3 @@
<!-- IF TPL_EDIT_GROUP -->
<!--========================================================================-->
@ -33,6 +32,13 @@
<div><input type="radio" name="group_type" value="{S_GROUP_HIDDEN_TYPE}" {S_GROUP_HIDDEN_CHECKED} /> {L_GROUP_HIDDEN}</div>
</td>
</tr>
<tr>
<td>{L_RELEASE_GROUP}</td>
<td>
<label><input type="radio" name="release_group" value="1" <!-- IF RELEASE_GROUP -->checked="checked"<!-- ENDIF --> />{L_YES}</label>
<label><input type="radio" name="release_group" value="0" <!-- IF not RELEASE_GROUP -->checked="checked"<!-- ENDIF --> />{L_NO}</label>
</td>
</tr>
<!-- BEGIN group_edit -->
<tr>
<td>{L_DELETE_OLD_GROUP_MOD}</td>
@ -100,4 +106,3 @@
<!--========================================================================-->
<!-- ENDIF / TPL_GROUP_SELECT -->

View file

@ -0,0 +1,95 @@
<script type="text/javascript">
function manage_group(mode, value) {
ajax.exec({
action : 'manage_group',
mode : mode,
group_id : {GROUP_ID},
value : value
});
ajax.callback.manage_group = function(data) {
if (data.act == 0) $('div#avatar').hide(100);
console.log(data);
}
}
</script>
<h1 class="pagetitle">{PAGE_TITLE}<!-- IF GROUP_NAME --> :: {GROUP_NAME}<!-- ENDIF --></h1>
<p class="nav"><a href="{U_GROUP_URL}">{L_GROUP_RETURN}</a></p>
<table class="forumline pad_4">
<col class="row1" width="20%">
<col class="row2" width="100%">
<tr>
<th colspan="2">{L_GROUP_INFORMATION}</th>
</tr>
<tr>
<td>{L_GROUP_NAME}:</td>
<td><input type="text" id="group_name" size="80" value="{GROUP_NAME}" onblur="javascript:manage_group(this.id, this.value, this.id);" /></td>
</tr>
<tr>
<td>{L_GROUP_DESCRIPTION}:</td>
<td><div id="preview_description"></div>
<p>
<textarea cols="80" id="group_description" rows="6" >{GROUP_DESCRIPTION}</textarea>
</p>
<p>
<input type="button" value="{L_AJAX_PREVIEW}" onclick="ajax.exec({ action: 'posts', type: 'view_message', message: $('textarea#group_description').val()});ajax.callback.posts=function(data){$('div#preview_description').html(data.message_html);initPostBBCode('div#preview_description')}">
<input type="button" value="{L_SAVE}" onclick="javascript:manage_group('group_description',$('textarea#group_description').val())">
</p>
</td>
</tr>
<tr>
<td>{L_SIGNATURE}:</td>
<td><div id="preview_signature"></div>
<p>
<textarea cols="80" id="group_signature" rows="3" >{GROUP_SIGNATURE}</textarea>
</p>
<p>
<input type="button" value="{L_AJAX_PREVIEW}" onclick="ajax.exec({ action: 'posts', type: 'view_message', message: $('textarea#group_signature').val()});ajax.callback.posts=function(data){$('div#preview_signature').html(data.message_html);initPostBBCode('div#preview_signature')}">
<input type="button" value="{L_SAVE}" onclick="javascript:manage_group('group_signature',$('textarea#group_signature').val())">
</p>
</td>
</tr>
<tr>
<td>{L_GROUP_TYPE}:</td>
<td>
<p>
<label><input type="radio" name="group_type" onchange="javascript:manage_group(this.name,this.value)" value="{S_GROUP_OPEN_TYPE}" {S_GROUP_OPEN_CHECKED} />{L_GROUP_OPEN}</label> &nbsp;&nbsp;
<label><input type="radio" name="group_type" onchange="javascript:manage_group(this.name,this.value)" value="{S_GROUP_CLOSED_TYPE}" {S_GROUP_CLOSED_CHECKED} />{L_GROUP_CLOSED}</label> &nbsp;&nbsp;
<label><input type="radio" name="group_type" onchange="javascript:manage_group(this.name,this.value)" value="{S_GROUP_HIDDEN_TYPE}" {S_GROUP_HIDDEN_CHECKED} />{L_GROUP_HIDDEN}</label>
</p>
</td>
</tr>
<tr>
<td>{L_RELEASE_GROUP}</td>
<td>
<label><input type="radio" name="release_group" value="1" onclick="javascript:manage_group(this.name,this.value)" <!-- IF RELEASE_GROUP -->checked="checked"<!-- ENDIF --> />{L_YES}</label>&nbsp;&nbsp;
<label><input type="radio" name="release_group" value="0" onclick="javascript:manage_group(this.name,this.value)" <!-- IF not RELEASE_GROUP -->checked="checked"<!-- ENDIF --> />{L_NO}</label>
</td>
</tr>
<tr>
<td>
{L_AVATAR}
<!-- IF AVATAR_URL_PATH -->
<div id="avatar" align="center">
<p>
<img src="{AVATARS_URL}/{AVATAR_URL_PATH}" alt="avatar" />
</p>
<p>
<input type="button" name="delete_avatar" value="{L_DELETE_IMAGE}" onclick="javascript:manage_group(this.name,this.value)" />
</p>
</div>
<!-- ENDIF -->
</td>
<td valign="top">
<div id="avatar_explain" class="med">{AVATAR_EXPLAIN}</div><br/>
<!-- IF $bb_cfg['group_avatars']['up_allowed'] -->
<form action="{S_GROUP_CONFIG_ACTION}" method="post" enctype="multipart/form-data">
{S_HIDDEN_FIELDS}
<input type="hidden" name="MAX_FILE_SIZE" value="{$bb_cfg['avatars']['max_size']}" />
<input type="file" name="avatar" />
<input class="mainoption" type="submit" name="submit" value="{L_UPLOAD_AVATAR_FILE}" />
</form>
<!-- ENDIF -->
</td>
</tr>
</table>

View file

@ -55,15 +55,28 @@
<th colspan="2">{L_GROUP_INFORMATION}</th>
</tr>
<tr>
<td>{L_GROUP_NAME}:</td>
<td><b>{GROUP_NAME}</b></td>
<td colspan="2"><h2>{GROUP_NAME}</h2></td>
</tr>
<!-- IF GROUP_DESCRIPTION -->
<tr>
<td>{L_GROUP_DESCRIPTION}:</td>
<td>{GROUP_DESCRIPTION}</td>
</tr>
<td align="center" valign="top">
{GROUP_AVATAR}
</td>
<td valign="top">
<!-- IF GROUP_DESCRIPTION -->
<div class="post_wrap">{GROUP_DESCRIPTION}</div>
<!-- ENDIF / GROUP_DESCRIPTION -->
</td>
</tr>
<!-- IF RELEASE_GROUP -->
<tr>
<td>{L_GROUP_TYPE}</td>
<td>{L_RELEASE_GROUP}</td>
</tr>
<!-- ENDIF -->
<tr>
<td>{L_GROUP_TIME}</td>
<td>{GROUP_TIME}</td>
</tr>
<tr>
<td>{L_GROUP_MEMBERSHIP}:</td>
<td><p>{GROUP_DETAILS}
@ -78,23 +91,21 @@
</tr>
<!-- BEGIN switch_mod_option -->
<tr>
<td>{L_GROUP_TYPE}:</td>
<td>{L_GROUP_CONFIGURATION}:</td>
<td>
<p>
<label><input type="radio" name="group_type" value="{S_GROUP_OPEN_TYPE}" {S_GROUP_OPEN_CHECKED} />{L_GROUP_OPEN}</label> &nbsp;&nbsp;
<label><input type="radio" name="group_type" value="{S_GROUP_CLOSED_TYPE}" {S_GROUP_CLOSED_CHECKED} />{L_GROUP_CLOSED}</label> &nbsp;&nbsp;
<label><input type="radio" name="group_type" value="{S_GROUP_HIDDEN_TYPE}" {S_GROUP_HIDDEN_CHECKED} />{L_GROUP_HIDDEN}</label>
&nbsp; <input class="mainoption" type="submit" name="groupstatus" value="{L_UPDATE}" />
</p>
<a href="{U_GROUP_CONFIG}">{L_GROUP_GOTO_CONFIG}</a>
</td>
</tr>
<!-- END switch_mod_option -->
</table>
</form>
<div class="spacer_10"></div>
<p class="nav"><a href="{U_GROUP_MEMBERS}" name="members">{L_GROUP_MEMBERS}</a>&nbsp; <!-- IF RELEASE_GROUP -->::&nbsp;<a href="{U_GROUP_RELEASES}" name="releases">{L_GROUPS_RELEASES}</a><!-- ENDIF --></p>
<!-- IF MEMBERS -->
<form action="{S_GROUPCP_ACTION}" method="post" name="post">
{S_HIDDEN_FIELDS}
@ -102,6 +113,7 @@
<thead>
<tr>
<th class="{sorter: 'digit'}" ><b class="tbs-text">#</b></th>
<th class="{sorter: false}" ><b class="tbs-text">{L_AVATAR}</b></th>
<th class="{sorter: 'text'}" ><b class="tbs-text">{L_USERNAME}</b></th>
<th class="{sorter: false}" ><b class="tbs-text">{L_PM}</b></th>
<th class="{sorter: 'text'}" ><b class="tbs-text">{L_EMAIL}</b></th>
@ -113,10 +125,11 @@
<th class="{sorter: false}" ><b class="tbs-text">#</b></th>
</tr>
<tr>
<td colspan="10" class="catTitle">{L_GROUP_MODERATOR}</td>
<td colspan="11" class="catTitle">{L_GROUP_MODERATOR}</td>
</tr>
<tr class="row1 tCenter">
<td width="3%">{ROW_NUMBER}</td>
<td width="3%" align="center">{MOD_AVATAR}</td>
<td><b>{MOD_USER}</b></td>
<td>{MOD_PM}</td>
<td>{MOD_EMAIL}</td>
@ -128,13 +141,14 @@
<td width="3%">&nbsp;</td>
</tr>
<tr>
<td colspan="10" class="catTitle">{L_GROUP_MEMBERS}</td>
<td colspan="11" class="catTitle">{L_GROUP_MEMBERS}</td>
</tr>
</thead>
<!-- BEGIN member -->
<tr class="{member.ROW_CLASS} tCenter">
<td width="3%">{member.ROW_NUMBER}</td>
<td width="3%" align="center">{member.AVATAR_IMG}</td>
<td>{member.USER}</td>
<td>{member.PM}</td>
<td>{member.EMAIL}</td>
@ -153,20 +167,20 @@
<!-- BEGIN switch_no_members -->
<tr>
<td colspan="10" class="row1 tCenter pad_10">{L_NO_GROUP_MEMBERS}</td>
<td colspan="11" class="row1 tCenter pad_10">{L_NO_GROUP_MEMBERS}</td>
</tr>
<!-- END switch_no_members -->
<!-- BEGIN switch_hidden_group -->
<tr>
<td colspan="10" class="row1 tCenter">{L_HIDDEN_GROUP_MEMBERS}</td>
<td colspan="11" class="row1 tCenter">{L_HIDDEN_GROUP_MEMBERS}</td>
</tr>
<!-- END switch_hidden_group -->
<!-- BEGIN switch_mod_option -->
<tfoot>
<tr>
<td colspan="10" class="cat" style="padding: 2px 12px;">
<td colspan="11" class="cat" style="padding: 2px 12px;">
<p id="add_group_member" class="floatL">
<input type="text" name="username" maxlength="50" size="20" />
<input type="submit" name="add" value="{L_ADD_MEMBER}" class="mainoption" />
@ -196,7 +210,8 @@
<table class="forumline">
<thead>
<tr>
<th class="{sorter: false}" ><b class="tbs-text">{L_SELECT}</b></th>
<th class="{sorter: false}" ><b class="tbs-text">#</b></th>
<th class="{sorter: false}" ><b class="tbs-text">{L_AVATAR}</b></th>
<th class="{sorter: 'text'}" ><b class="tbs-text">{L_USERNAME}</b></th>
<th class="{sorter: false}" ><b class="tbs-text">{L_PM}</b></th>
<th class="{sorter: 'text'}" ><b class="tbs-text">{L_EMAIL}</b></th>
@ -206,12 +221,13 @@
<th class="{sorter: false}" ><b class="tbs-text">{L_WEBSITE}</b></th>
</tr>
<tr>
<td class="catTitle" colspan="8">{L_PENDING_MEMBERS}</td>
<td class="catTitle" colspan="9">{L_PENDING_MEMBERS}</td>
</tr>
</thead>
<!-- BEGIN pending -->
<tr class="{pending.ROW_CLASS} tCenter">
<td><input type="checkbox" name="pending_members[]" value="{pending.USER_ID}"/></td>
<td width="3%"><input type="checkbox" name="pending_members[]" value="{pending.USER_ID}"/></td>
<td width="3%">{pending.AVATAR_IMG}</td>
<td>{pending.USER}</td>
<td>{pending.PM}</td>
<td>{pending.EMAIL}</td>
@ -223,7 +239,7 @@
<!-- END pending -->
<tfoot>
<tr>
<td class="cat" colspan="8">
<td class="cat" colspan="9">
<input type="submit" name="approve" value="{L_APPROVE_SELECTED}" onclick="return confirm('{L_APPROVE_SELECTED}?');" class="mainoption" />
&nbsp;
<input type="submit" name="deny" value="{L_DENY_SELECTED}" onclick="return confirm('{L_DENY_SELECTED}?');" class="liteoption" />
@ -232,21 +248,59 @@
</tfoot>
</table>
<!-- ENDIF / PENDING_USERS -->
</form>
<!-- ENDIF / MEMBERS -->
<!-- IF RELEASES -->
<table class="forumline tablesorter">
<thead>
<tr>
<th class="{sorter: false}" ><b class="tbs-text">#</b></th>
<th class="{sorter: false}" ><b class="tbs-text">{L_AVATAR}</b></th>
<th class="{sorter: 'text'}" ><b class="tbs-text">{L_USERNAME}</b></th>
<th class="{sorter: 'text'}" ><b class="tbs-text">{L_TOPIC}</b></th>
<th class="{sorter: 'text'}" ><b class="tbs-text">{L_FORUM}</b></th>
<th class="{sorter: 'digit'}" width="3%"><b class="tbs-text">{L_BT_CREATED}</b></th>
</tr>
<tr>
<td class="catTitle" colspan="9">{L_GROUPS_RELEASES}</td>
</tr>
</thead>
<!-- BEGIN releases -->
<tr class="{releases.ROW_CLASS} tCenter">
<td width="3%">{releases.ROW_NUMBER}</td>
<td width="3%">{releases.AVATAR_IMG}</td>
<td><b>{releases.RELEASER}</b></td>
<td>{releases.RELEASE_NAME}</td>
<td>{releases.RELEASE_FORUM}</td>
<td>{releases.RELEASE_TIME}</td>
</tr>
<!-- END releases -->
<tfoot>
<tr>
<td class="cat" colspan="9" align="center"><b><a href="{U_SEARCH_RELEASES}">{L_MORE_RELEASES}</a></b></td>
</tr>
</tfoot>
</table>
<div class="bottom_info">
<div class="nav">
<p style="float: left">{PAGE_NUMBER}</p>
<p style="float: right">{PAGINATION}</p>
<div class="clear"></div>
</div>
</div>
<!-- ENDIF / RELEASES -->
<!--========================================================================-->
<!-- ENDIF / GROUP_INFO -->
<!--bottom_info-->
<div class="bottom_info">
<div class="spacer_4"></div>
<div id="timezone">
<p>{CURRENT_TIME}</p>
<p>{S_TIMEZONE}</p>
</div>
<div class="clear"></div>
</div><!--/bottom_info-->

View file

@ -138,14 +138,24 @@
</td>
</tr>
<!-- ENDIF / LOGGED_IN -->
<!-- IF ATTACHBOX && POSTER_RGROUPS -->
<tr>
<td><b>{L_POST_RELEASE_FROM_GROUP}:</b></td>
<td>
<select name="poster_rg">
<option value="-1">{L_CHOOSE_RELEASE_GROUP}</option>
{POSTER_RGROUPS}
</select>
<label><input type="checkbox" name="attach_rg_sig" <!-- IF ATTACH_RG_SIG -->checked<!-- ENDIF -->/> {L_ATTACH_RG_SIG}</label>
</td>
</tr>
<!-- ENDIF -->
<!-- BEGIN switch_type_toggle -->
<tr>
<td colspan="2" class="row2 tCenter pad_6">{S_TYPE_TOGGLE}</td>
</tr>
<!-- END switch_type_toggle -->
<!-- IF ATTACHBOX --><!-- INCLUDE posting_attach.tpl --><!-- ENDIF -->
</table>
</form>

View file

@ -267,6 +267,12 @@ $(function(){
</div>
</fieldset>
<fieldset>
<legend>{L_GROUPS_RELEASES}</legend>
<div>
<p class="select">{S_RG_SELECT}</p>
</div>
</fieldset>
<fieldset>
<legend><span class="a-hash bold" onclick="$(this).addClass('bold').next().removeClass('bold'); $('#title_search').attr('name','{TITLE_MATCH_NAME}');">{L_TITLE_MATCH}</span>&nbsp;&middot;&nbsp;<span class="a-hash" onclick="$(this).addClass('bold').prev().removeClass('bold'); $('#title_search').attr('name','hash');">{L_HASH_S}</span></legend>
<div>
<p class="input">

View file

@ -405,6 +405,18 @@ function build_poll_add_form (src_el)
<div class="post_wrap">
<span id="pe_{postrow.POST_ID}"></span>
<span id="pp_{postrow.POST_ID}">{postrow.MESSAGE}</span>
<!-- IF postrow.RG_NAME -->
<div align="center">
<table id="pg_{postrow.POST_ID}" style="border-left:4px solid #DEDEDE;">
<tr><td colspan="2" align="left" valign="middle" style="border-bottom:1px solid #DEDEDE;padding:5px;" class="genmed bold">{L_RELEASE_FROM_RG}:</td></tr>
<tr>
<td style="padding:5px;">{postrow.RG_AVATAR}</td>
<td align="left" style="padding:5px;" width="350px"><a href="{postrow.RG_URL}" class="med bold"><h1>{postrow.RG_NAME}</h1></a></td>
</tr>
</table>
</div>
<!-- ENDIF -->
<!-- IF postrow.RG_SIG --><div id="rg_sig">{postrow.RG_SIG}</div><!-- ENDIF -->
<div id="pc_{postrow.POST_ID}" <!-- IF not postrow.MC_COMMENT -->style="display: none;"<!-- ENDIF -->>
<div id="mc_class_{postrow.POST_ID}" class="alert alert-{postrow.MC_CLASS}" style="width: 92%;">
<h4 class="alert-heading">{postrow.MC_TITLE}</h4><hr />

View file

@ -7,6 +7,7 @@ require(BB_ROOT .'common.php');
require(INC_DIR .'class.utf8.php');
require(INC_DIR .'class.correct.php');
require(INC_DIR .'class.reflection.php');
require(INC_DIR .'functions_group.php');
// Page config
$page_cfg['include_bbcode_js'] = true;
@ -21,7 +22,7 @@ $user->session_start(array('req_login' => $bb_cfg['bt_tor_browse_only_reg']));
set_die_append_msg();
$tor_search_limit = (IS_AM) ? 2000 : 500;
$forum_select_size = 24; // forum select box max rows
$forum_select_size = 26; // forum select box max rows
$max_forum_name_len = 60; // inside forum select box
$max_forums_selected = 50;
$title_match_max_len = 60;
@ -51,6 +52,7 @@ $row_num = $tor_count = 0;
$torrents_tbl = BB_BT_TORRENTS .' tor';
$cat_tbl = BB_CATEGORIES .' c';
$forums_tbl = BB_FORUMS .' f';
$posts_tbl = BB_POSTS .' p';
$topics_tbl = BB_TOPICS .' t';
$users_tbl = BB_USERS .' u';
$tracker_tbl = BB_BT_TRACKER .' tr';
@ -219,6 +221,29 @@ foreach ($s_not_seen_opt as $val => $opt)
$s_not_seen_select[$opt['lang']] = $val;
}
if ($release_groups = get_group_data('all'))
{
$s_rg_opt = array(
$search_all => array(
'lang' => $lang['GROUPS_RELEASES'],
'sql' => 0,
));
foreach ($release_groups as $rg)
{
if ($rg['release_group'])
{
$s_rg_opt[$rg['group_id']] = array(
'lang' => $rg['group_name'],
'sql' => $rg['group_id'],
);
}
}
foreach ($s_rg_opt as $val => $opt)
{
$s_release_group_select[$opt['lang']] = $val;
}
}
$GPC = array(
# var_name key_name def_value GPC type
'all_words' => array('allw', 1, CHBOX),
@ -242,6 +267,7 @@ $GPC = array(
'show_cat' => array('dc', 0, CHBOX),
'show_forum' => array('df', 1, CHBOX),
'show_speed' => array('ds', 0, CHBOX),
's_rg' => array('srg', $search_all, SELECT),
's_not_seen' => array('sns', $search_all, SELECT),
'time' => array('tm', $search_all, SELECT),
'tor_type' => array('tor_type', 0, CHBOX),
@ -452,14 +478,16 @@ $dl_status_csv = join(',', $dl_status);
// Switches
$only_new = ($new_val && !IS_GUEST);
$seed_exist = (bool) $seed_exist_val;
$only_active = ($active_val || $seed_exist);
$dl_search = ($dl_status && !IS_GUEST);
$only_my = ($my_val && !IS_GUEST && !$dl_search);
$prev_days = ($time_val != $search_all);
$s_release_group = ($s_rg_val != $search_all);
$s_not_seen = ($s_not_seen_val != $search_all);
$seed_exist = (bool) $seed_exist_val;
$poster_id = (bool) $poster_id_val;
$title_match = (bool) $title_match_sql;
$s_not_seen = ($s_not_seen_val != $search_all);
$tor_type = (bool) $tor_type_val;
$hide_cat = intval(!$show_cat_val);
@ -497,6 +525,7 @@ if ($allowed_forums)
'poster_id',
'poster_name',
's_not_seen',
's_rg',
'seed_exist',
'show_author',
'show_cat',
@ -534,6 +563,7 @@ if ($allowed_forums)
{
$reg_time = $time_opt[$time_val]['sql'];
$poster_id_sql = (int) $poster_id_val;
$rg_id_sql = (int) $s_rg_val;
$s_seen_time = $s_not_seen_opt[$s_not_seen_val]['sql'];
$s_seen_sign = ($s_not_seen_val == $never) ? '=' : '<';
$s_seen_exclude = ($s_not_seen_val == $never) ? '' : "AND tor.seeder_last_seen != 0";
@ -569,6 +599,10 @@ if ($allowed_forums)
AND dl.user_status IN($dl_status_csv)
)";
}
if ($s_release_group)
{
$SQL['LEFT JOIN'][] = "$posts_tbl ON(p.topic_id = tor.topic_id)";
}
// WHERE
$title_match_notfound_flag = false;
@ -588,6 +622,10 @@ if ($allowed_forums)
{
$SQL['WHERE'][] = "tor.poster_id = $poster_id_sql";
}
if ($s_release_group)
{
$SQL['WHERE'][] = "p.poster_rg_id = $rg_id_sql";
}
if ($only_new)
{
$SQL['WHERE'][] = "tor.reg_time > $lastvisit";
@ -917,6 +955,7 @@ $template->assign_vars(array(
'ORDER_SELECT' => build_select($order_key, $order_select, $order_val),
'TIME_SELECT' => build_select($time_key, $time_select, $time_val),
'S_NOT_SEEN_SELECT' => build_select($s_not_seen_key, $s_not_seen_select, $s_not_seen_val),
'S_RG_SELECT' => build_select($s_rg_key, $s_release_group_select, $s_rg_val),
'TOR_SEARCH_ACTION' => $tracker_url,
'TOR_COLSPAN' => $tor_colspan,
'TITLE_MATCH_MAX' => $title_match_max_len,

View file

@ -363,7 +363,7 @@ if ($t_data['topic_show_first_post'] && $start)
u.user_regdate, u.user_sig,
u.avatar_ext_id,
u.user_opt, u.user_gender, u.user_birthday,
p.*,
p.*, g.group_name, g.group_id, g.group_signature, g.avatar_ext_id as rg_avatar_id,
u2.username as mc_username, u2.user_rank as mc_user_rank,
h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text
FROM ". BB_POSTS ." p
@ -371,6 +371,7 @@ if ($t_data['topic_show_first_post'] && $start)
LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = p.post_id)
LEFT JOIN ". BB_POSTS_HTML ." h ON(h.post_id = p.post_id)
LEFT JOIN ". BB_USERS ." u2 ON(u2.user_id = p.mc_user_id)
LEFT JOIN ". BB_GROUPS ." g ON(g.group_id = p.poster_rg_id)
WHERE
p.post_id = {$t_data['topic_first_post_id']}
LIMIT 1
@ -383,7 +384,7 @@ $sql = "
u.user_regdate, u.user_sig,
u.avatar_ext_id,
u.user_opt, u.user_gender, u.user_birthday,
p.*,
p.*, g.group_name, g.group_id, g.group_signature, g.avatar_ext_id as rg_avatar_id,
u2.username as mc_username, u2.user_rank as mc_user_rank,
h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text
FROM ". BB_POSTS ." p
@ -391,6 +392,7 @@ $sql = "
LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = p.post_id)
LEFT JOIN ". BB_POSTS_HTML ." h ON(h.post_id = p.post_id)
LEFT JOIN ". BB_USERS ." u2 ON(u2.user_id = p.mc_user_id)
LEFT JOIN ". BB_GROUPS ." g ON(g.group_id = p.poster_rg_id)
WHERE p.topic_id = $topic_id
$limit_posts_time
GROUP BY p.post_id
@ -690,6 +692,11 @@ for($i = 0; $i < $total_posts; $i++)
$mc_comment = $postrow[$i]['mc_comment'];
$mc_user_id = profile_url(array('username' => $postrow[$i]['mc_username'], 'user_id' => $postrow[$i]['mc_user_id'], 'user_rank' => $postrow[$i]['mc_user_rank']));
$rg_id = ($postrow[$i]['poster_rg_id']) ? $postrow[$i]['poster_rg_id'] : 0;
$rg_avatar = get_avatar(GROUP_AVATAR_MASK . $rg_id, $postrow[$i]['rg_avatar_id'], true, 100, 100);
$rg_name = ($postrow[$i]['group_name']) ? htmlCHR($postrow[$i]['group_name']) : '';
$rg_signature = ($postrow[$i]['group_signature']) ? bbcode2html(htmlCHR($postrow[$i]['group_signature'])) : '';
$poster_avatar = '';
if ( !$user->opt_js['h_av'] && $poster_id != GUEST_UID )
{
@ -872,6 +879,11 @@ for($i = 0; $i < $total_posts; $i++)
'MC_CLASS' => $mc_class,
'MC_TITLE' => sprintf($lang['MC_COMMENT'][$mc_type]['title'], $mc_user_id),
'MC_SELECT_TYPE' => build_select("mc_type_$post_id", array_flip($mc_select_type), $mc_type),
'RG_AVATAR' => $rg_avatar,
'RG_NAME' => $rg_name,
'RG_URL' => GROUP_URL . $rg_id,
'RG_SIG' => $rg_signature,
));
if ($postrow[$i]['post_attachment'] && $is_auth['auth_download'] && function_exists('display_post_attachments'))