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"; 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` ( CREATE TABLE IF NOT EXISTS `bb_groups` (
`group_id` mediumint(8) NOT NULL AUTO_INCREMENT, `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', `group_type` tinyint(4) NOT NULL DEFAULT '1',
`release_group` tinyint(4) NOT NULL DEFAULT '0',
`group_name` varchar(40) NOT NULL DEFAULT '', `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_moderator` mediumint(8) NOT NULL DEFAULT '0',
`group_single_user` tinyint(1) NOT NULL DEFAULT '1', `group_single_user` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`group_id`), PRIMARY KEY (`group_id`),
@ -866,6 +861,8 @@ CREATE TABLE IF NOT EXISTS `bb_posts` (
`poster_id` mediumint(8) NOT NULL DEFAULT '0', `poster_id` mediumint(8) NOT NULL DEFAULT '0',
`post_time` int(11) 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_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_username` varchar(25) NOT NULL DEFAULT '',
`post_edit_time` int(11) NOT NULL DEFAULT '0', `post_edit_time` int(11) NOT NULL DEFAULT '0',
`post_edit_count` smallint(5) unsigned 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` -- Дамп данных таблицы `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 //Mybb forums & topics
define('CONVERT_MYBB_FORUMS', false); // Converting forums is enabled? define('CONVERT_MYBB_FORUMS', false); // Converting forums is enabled?
define('C_FORUMS_PER_ONCE', 100); // Number of forums converting per once 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 //Mybb forums & topics
define('CONVERT_MYBB_FORUMS', false); // Converting forums is enabled? define('CONVERT_MYBB_FORUMS', false); // Converting forums is enabled?
define('C_FORUMS_PER_ONCE', 100); // Number of forums converting per once 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_moderator' => $row['group_moderator'],
'group_mod_name' => $row['moderator_name'], 'group_mod_name' => $row['moderator_name'],
'group_type' => $row['group_type'], 'group_type' => $row['group_type'],
'release_group' => $row['release_group'],
); );
$mode = 'editgroup'; $mode = 'editgroup';
$template->assign_block_vars('group_edit', array()); $template->assign_block_vars('group_edit', array());
@ -40,6 +41,7 @@ if (!empty($_POST['edit']) || !empty($_POST['new']))
'group_moderator' => '', 'group_moderator' => '',
'group_mod_name' => '', 'group_mod_name' => '',
'group_type' => GROUP_OPEN, 'group_type' => GROUP_OPEN,
'release_group' => 0,
); );
$mode = 'newgroup'; $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_OPEN_CHECKED' => ($group_info['group_type'] == GROUP_OPEN) ? HTML_CHECKED : '',
'S_GROUP_CLOSED_CHECKED' => ($group_info['group_type'] == GROUP_CLOSED) ? 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 : '', '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_GROUP_ACTION' => "admin_groups.php",
'S_HIDDEN_FIELDS' => $s_hidden_fields, 'S_HIDDEN_FIELDS' => $s_hidden_fields,
)); ));
@ -88,9 +91,9 @@ else if (!empty($_POST['group_update']))
else else
{ {
$group_type = isset($_POST['group_type']) ? intval($_POST['group_type']) : GROUP_OPEN; $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_name = isset($_POST['group_name']) ? trim($_POST['group_name']) : '';
$group_desc = isset($_POST['group_description']) ? trim($_POST['group_description']) : ''; $group_desc = isset($_POST['group_description']) ? trim($_POST['group_description']) : '';
$group_moderator = isset($_POST['username']) ? $_POST['username'] : ''; $group_moderator = isset($_POST['username']) ? $_POST['username'] : '';
if ($group_name === '') if ($group_name === '')
@ -110,6 +113,7 @@ else if (!empty($_POST['group_update']))
$sql_ary = array( $sql_ary = array(
'group_type' => (int) $group_type, 'group_type' => (int) $group_type,
'release_group' => (int) $release_group,
'group_name' => (string) $group_name, 'group_name' => (string) $group_name,
'group_description' => (string) $group_desc, 'group_description' => (string) $group_desc,
'group_moderator' => (int) $group_moderator, 'group_moderator' => (int) $group_moderator,
@ -127,7 +131,7 @@ else if (!empty($_POST['group_update']))
{ {
// Create user_group for new group's moderator // Create user_group for new group's moderator
add_user_into_group($group_id, $group_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 // Delete old moderator's user_group
if (isset($_POST['delete_old_moderator'])) if (isset($_POST['delete_old_moderator']))
@ -149,7 +153,7 @@ else if (!empty($_POST['group_update']))
} }
else if ($mode == 'newgroup') 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); $sql_args = DB()->build_array('INSERT', $sql_ary);
// Create new group // Create new group

View file

@ -62,6 +62,7 @@ switch ($ajax->action)
break; break;
case 'group_membership': case 'group_membership':
case 'manage_group':
require(INC_DIR . 'functions_group.php'); require(INC_DIR . 'functions_group.php');
break; break;
@ -101,6 +102,7 @@ class ajax_common
'gen_passkey' => array('user'), 'gen_passkey' => array('user'),
'change_torrent' => array('user'), 'change_torrent' => array('user'),
'change_tor_status' => array('user'), 'change_tor_status' => array('user'),
'manage_group' => array('user'),
'view_post' => array('guest'), 'view_post' => array('guest'),
'view_torrent' => array('guest'), 'view_torrent' => array('guest'),
@ -349,6 +351,11 @@ class ajax_common
require(AJAX_DIR . 'group_membership.php'); require(AJAX_DIR . 'group_membership.php');
} }
function manage_group()
{
require(AJAX_DIR . 'edit_group_profile.php');
}
function post_mod_comment() function post_mod_comment()
{ {
require(AJAX_DIR . 'post_mod_comment.php'); 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 * Ads
* Attachments * Attachments
* Avatars * Avatars
* Group avatars
* Misc * Misc
* Captcha * Captcha
* Atom feed * 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; $domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $domain_name;
// Version info // Version info
$bb_cfg['tp_version'] = '2.0.9 (RC)'; $bb_cfg['tp_version'] = '2.1 (RC)';
$bb_cfg['tp_release_date'] = '24-08-2014'; $bb_cfg['tp_release_date'] = '27-08-2014';
$bb_cfg['tp_release_state'] = 'R597'; $bb_cfg['tp_release_state'] = 'R598';
// Database // Database
$charset = 'utf8'; $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 $bb_cfg['user_not_active_days_keep'] = 180; // inactive users but only with no posts
// GroupCP // GroupCP
$bb_cfg['groupcp_members_per_page'] = 300; $bb_cfg['groupcp_members_per_page'] = 50;
// Tidy // Tidy
$bb_cfg['tidy_post'] = (!extension_loaded('tidy')) ? false : true; $bb_cfg['tidy_post'] = (!extension_loaded('tidy')) ? false : true;
@ -557,6 +558,17 @@ $bb_cfg['avatars'] = array(
'up_allowed' => true, // разрешить загрузку аватар '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 // Misc
define('MEM_USAGE', function_exists('memory_get_usage')); 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('IN_FORUM', true);
define('BB_SCRIPT', 'groupcp'); define('BB_SCRIPT', 'groupcp');
define('BB_ROOT', './'); define('BB_ROOT', './');
require(BB_ROOT ."common.php"); require(BB_ROOT .'common.php');
require(INC_DIR .'bbcode.php');
require(INC_DIR .'functions_group.php'); require(INC_DIR .'functions_group.php');
$page_cfg['use_tablesorter'] = true; $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 = ''; $s_member_groups = $s_pending_groups = $s_member_groups_opt = $s_pending_groups_opt = '';
$select_sort_mode = $select_sort_order = ''; $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; 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']; $user_time = (!empty($row['user_time'])) ? bb_date($row['user_time']) : $lang['NONE'];
$posts = ($row['user_posts']) ? $row['user_posts'] : 0; $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>'; $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) 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; $group_id = isset($_REQUEST[POST_GROUPS_URL]) ? intval($_REQUEST[POST_GROUPS_URL]) : null;
$start = isset($_REQUEST['start']) ? abs(intval($_REQUEST['start'])) : 0; $start = isset($_REQUEST['start']) ? abs(intval($_REQUEST['start'])) : 0;
$per_page = $bb_cfg['groupcp_members_per_page']; $per_page = $bb_cfg['groupcp_members_per_page'];
$view_mode = isset($_REQUEST['view']) ? (string) $_REQUEST['view'] : null;
$rel_limit = 50;
$group_info = array(); $group_info = array();
$is_moderator = false; $is_moderator = false;
@ -70,7 +74,7 @@ if (!$group_id)
$sql = " $sql = "
SELECT 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, 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, g.group_moderator, u.username AS moderator_name,
IF(g.group_moderator = ug.user_id, 1, 0) AS is_group_mod, IF(g.group_moderator = ug.user_id, 1, 0) AS is_group_mod,
@ -127,7 +131,7 @@ if (!$group_id)
continue; 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; $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']; $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 .= '<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) if (IS_AM)
{ {
$options .= '<li class="leechmed">'. $candidates .'</li>'; $options .= '<li class="leechmed">'. $candidates .'</li>';
} }
$options .= '</ul>'; $options .= '</ul>';
} }
return $options; return $options;
} }
@ -184,34 +188,6 @@ if (!$group_id)
else bb_die($lang['NO_GROUPS_EXIST']); 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']) else if (@$_POST['joingroup'])
{ {
if ($group_info['group_type'] != GROUP_OPEN) if ($group_info['group_type'] != GROUP_OPEN)
@ -403,51 +379,6 @@ else
WHERE user_id = ". $group_info['group_moderator'] ." 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 // Current user membership
$is_group_member = $is_group_pending_member = false; $is_group_member = $is_group_pending_member = false;
@ -513,7 +444,7 @@ else
$username = $group_moderator['username']; $username = $group_moderator['username'];
$user_id = $group_moderator['user_id']; $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 = ''; $group_type = '';
if ($group_info['group_type'] == GROUP_OPEN) if ($group_info['group_type'] == GROUP_OPEN)
@ -535,18 +466,27 @@ else
'GROUP_INFO' => true, 'GROUP_INFO' => true,
'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'], 'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'],
'GROUP_NAME' => htmlCHR($group_info['group_name']), '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_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_USER' => profile_url($group_moderator),
'MOD_AVATAR' => $avatar,
'MOD_FROM' => $from, 'MOD_FROM' => $from,
'MOD_JOINED' => $joined, 'MOD_JOINED' => $joined,
'MOD_POSTS' => $posts, 'MOD_POSTS' => $posts,
'MOD_PM' => $pm, 'MOD_PM' => $pm,
'MOD_EMAIL' => $email, 'MOD_EMAIL' => $email,
'MOD_WWW' => $www, '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_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, 'GROUP_TYPE' => $group_type,
'S_GROUP_OPEN_TYPE' => GROUP_OPEN, 'S_GROUP_OPEN_TYPE' => GROUP_OPEN,
'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED, 'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED,
'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN, 'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN,
@ -556,15 +496,108 @@ else
'S_HIDDEN_FIELDS' => $s_hidden_fields, 'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_MODE_SELECT' => $select_sort_mode, 'S_MODE_SELECT' => $select_sort_mode,
'S_ORDER_SELECT' => $select_sort_order, '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 // Dump out the remaining users
foreach ($group_members as $i => $member) foreach ($group_members as $i => $member)
{ {
$user_id = $member['user_id']; $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) if ($group_info['group_type'] != GROUP_HIDDEN || $is_group_member || $is_moderator)
{ {
@ -574,6 +607,7 @@ else
'ROW_NUMBER' => $i + ( $start + 1 ), 'ROW_NUMBER' => $i + ( $start + 1 ),
'ROW_CLASS' => $row_class, 'ROW_CLASS' => $row_class,
'USER' => profile_url($member), 'USER' => profile_url($member),
'AVATAR_IMG' => $avatar,
'FROM' => $from, 'FROM' => $from,
'JOINED' => $joined, 'JOINED' => $joined,
'POSTS' => $posts, 'POSTS' => $posts,
@ -603,17 +637,28 @@ else
$template->assign_block_vars('switch_hidden_group', array()); $template->assign_block_vars('switch_hidden_group', array());
} }
// // Pending
// We've displayed the members who belong to the group, now we if ($is_moderator)
// do that pending memebers... {
// $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) if ($is_moderator && $modgroup_pending_list)
{ {
foreach ($modgroup_pending_list as $i => $member) foreach ($modgroup_pending_list as $i => $member)
{ {
$user_id = $member['user_id']; $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'; $row_class = !($i % 2) ? 'row1' : 'row2';
@ -621,6 +666,7 @@ else
$template->assign_block_vars('pending', array( $template->assign_block_vars('pending', array(
'ROW_CLASS' => $row_class, 'ROW_CLASS' => $row_class,
'AVATAR_IMG'=> $avatar,
'USER' => profile_url($member), 'USER' => profile_url($member),
'FROM' => $from, 'FROM' => $from,
'JOINED' => $joined, 'JOINED' => $joined,
@ -636,6 +682,9 @@ else
)); ));
} }
$template->assign_vars(array('MEMBERS' => true));
}
if ($is_moderator) if ($is_moderator)
{ {
$template->assign_block_vars('switch_mod_option', array()); $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 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'); 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 // 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; 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"); 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)) if (!DB()->sql_query($sql))
{ {
bb_die('Error in posting #2'); bb_die('Error in posting #2');

View file

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

View file

@ -708,6 +708,9 @@ $lang['ORDER'] = 'Order';
// Group control panel // Group control panel
// //
$lang['GROUP_CONTROL_PANEL'] = 'User Groups'; $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['MEMBERSHIP_DETAILS'] = 'Group Membership Details';
$lang['JOIN_A_GROUP'] = 'Join a Group'; $lang['JOIN_A_GROUP'] = 'Join a Group';
@ -719,6 +722,9 @@ $lang['GROUP_MEMBERS'] = 'Group Members';
$lang['GROUP_MODERATOR'] = 'Group Moderator'; $lang['GROUP_MODERATOR'] = 'Group Moderator';
$lang['PENDING_MEMBERS'] = 'Pending Members'; $lang['PENDING_MEMBERS'] = 'Pending Members';
$lang['GROUP_TIME'] = 'Created';
$lang['RELEASE_GROUP'] = 'Release Group';
$lang['GROUP_TYPE'] = 'Group type'; $lang['GROUP_TYPE'] = 'Group type';
$lang['GROUP_OPEN'] = 'Open group'; $lang['GROUP_OPEN'] = 'Open group';
$lang['GROUP_CLOSED'] = 'Closed group'; $lang['GROUP_CLOSED'] = 'Closed group';
@ -733,6 +739,7 @@ $lang['GROUP_MEMBER_HIDDEN'] = 'Hidden groups';
$lang['NO_GROUPS_EXIST'] = 'No Groups Exist'; $lang['NO_GROUPS_EXIST'] = 'No Groups Exist';
$lang['GROUP_NOT_EXIST'] = 'That user group does not 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['NO_GROUP_MEMBERS'] = 'This group has no members';
$lang['HIDDEN_GROUP_MEMBERS'] = 'This group is hidden; you cannot view its membership'; $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['VIEW_INFORMATION'] = 'View Information';
$lang['MEMBERS_IN_GROUP'] = 'Members in group'; $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 // Search
// //

View file

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

View file

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

View file

@ -29,6 +29,9 @@ $orig_word = $replacement_word = array();
$topic_type = (@$_POST['topictype']) ? (int) $_POST['topictype'] : POST_NORMAL; $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; $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') if ($mode == 'smilies')
{ {
generate_smilies('window'); generate_smilies('window');
@ -178,6 +181,9 @@ if ($post_info = DB()->fetch_row($sql))
$post_data['topic_type'] = $post_info['topic_type']; $post_data['topic_type'] = $post_info['topic_type'];
$post_data['poster_id'] = $post_info['poster_id']; $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? // Can this user edit/delete the post?
if ($post_info['poster_id'] != $userdata['user_id'] && !$is_auth['auth_mod']) 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']) : ''; $username = ( !empty($_POST['username']) ) ? clean_username($_POST['username']) : '';
$subject = ( !empty($_POST['subject']) ) ? clean_title($_POST['subject']) : ''; $subject = ( !empty($_POST['subject']) ) ? clean_title($_POST['subject']) : '';
$message = ( !empty($_POST['message']) ) ? prepare_message($_POST['message']) : ''; $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); 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; $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_url = POST_URL ."$post_id#$post_id";
$post_msg = ($mode == 'editpost') ? $lang['EDITED']: $lang['STORED']; $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 //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 . '" />'; $hidden_form_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
switch( $mode ) switch( $mode )
@ -672,7 +699,10 @@ $template->assign_vars(array(
'SUBJECT' => $subject, 'SUBJECT' => $subject,
'MESSAGE' => $message, '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_NOTIFY_CHECKED' => ($notify_user) ? 'checked="checked"' : '',
'S_TYPE_TOGGLE' => $topic_type_toggle, 'S_TYPE_TOGGLE' => $topic_type_toggle,

View file

@ -1,4 +1,3 @@
<!-- IF TPL_EDIT_GROUP --> <!-- 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> <div><input type="radio" name="group_type" value="{S_GROUP_HIDDEN_TYPE}" {S_GROUP_HIDDEN_CHECKED} /> {L_GROUP_HIDDEN}</div>
</td> </td>
</tr> </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 --> <!-- BEGIN group_edit -->
<tr> <tr>
<td>{L_DELETE_OLD_GROUP_MOD}</td> <td>{L_DELETE_OLD_GROUP_MOD}</td>
@ -100,4 +106,3 @@
<!--========================================================================--> <!--========================================================================-->
<!-- ENDIF / TPL_GROUP_SELECT --> <!-- 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> <th colspan="2">{L_GROUP_INFORMATION}</th>
</tr> </tr>
<tr> <tr>
<td>{L_GROUP_NAME}:</td> <td colspan="2"><h2>{GROUP_NAME}</h2></td>
<td><b>{GROUP_NAME}</b></td>
</tr> </tr>
<!-- IF GROUP_DESCRIPTION -->
<tr> <tr>
<td>{L_GROUP_DESCRIPTION}:</td> <td align="center" valign="top">
<td>{GROUP_DESCRIPTION}</td> {GROUP_AVATAR}
</tr> </td>
<td valign="top">
<!-- IF GROUP_DESCRIPTION -->
<div class="post_wrap">{GROUP_DESCRIPTION}</div>
<!-- ENDIF / GROUP_DESCRIPTION --> <!-- 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> <tr>
<td>{L_GROUP_MEMBERSHIP}:</td> <td>{L_GROUP_MEMBERSHIP}:</td>
<td><p>{GROUP_DETAILS} <td><p>{GROUP_DETAILS}
@ -78,23 +91,21 @@
</tr> </tr>
<!-- BEGIN switch_mod_option --> <!-- BEGIN switch_mod_option -->
<tr> <tr>
<td>{L_GROUP_TYPE}:</td> <td>{L_GROUP_CONFIGURATION}:</td>
<td> <td>
<p> <a href="{U_GROUP_CONFIG}">{L_GROUP_GOTO_CONFIG}</a>
<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>
</td> </td>
</tr> </tr>
<!-- END switch_mod_option --> <!-- END switch_mod_option -->
</table> </table>
</form> </form>
<div class="spacer_10"></div> <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"> <form action="{S_GROUPCP_ACTION}" method="post" name="post">
{S_HIDDEN_FIELDS} {S_HIDDEN_FIELDS}
@ -102,6 +113,7 @@
<thead> <thead>
<tr> <tr>
<th class="{sorter: 'digit'}" ><b class="tbs-text">#</b></th> <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: 'text'}" ><b class="tbs-text">{L_USERNAME}</b></th>
<th class="{sorter: false}" ><b class="tbs-text">{L_PM}</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> <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> <th class="{sorter: false}" ><b class="tbs-text">#</b></th>
</tr> </tr>
<tr> <tr>
<td colspan="10" class="catTitle">{L_GROUP_MODERATOR}</td> <td colspan="11" class="catTitle">{L_GROUP_MODERATOR}</td>
</tr> </tr>
<tr class="row1 tCenter"> <tr class="row1 tCenter">
<td width="3%">{ROW_NUMBER}</td> <td width="3%">{ROW_NUMBER}</td>
<td width="3%" align="center">{MOD_AVATAR}</td>
<td><b>{MOD_USER}</b></td> <td><b>{MOD_USER}</b></td>
<td>{MOD_PM}</td> <td>{MOD_PM}</td>
<td>{MOD_EMAIL}</td> <td>{MOD_EMAIL}</td>
@ -128,13 +141,14 @@
<td width="3%">&nbsp;</td> <td width="3%">&nbsp;</td>
</tr> </tr>
<tr> <tr>
<td colspan="10" class="catTitle">{L_GROUP_MEMBERS}</td> <td colspan="11" class="catTitle">{L_GROUP_MEMBERS}</td>
</tr> </tr>
</thead> </thead>
<!-- BEGIN member --> <!-- BEGIN member -->
<tr class="{member.ROW_CLASS} tCenter"> <tr class="{member.ROW_CLASS} tCenter">
<td width="3%">{member.ROW_NUMBER}</td> <td width="3%">{member.ROW_NUMBER}</td>
<td width="3%" align="center">{member.AVATAR_IMG}</td>
<td>{member.USER}</td> <td>{member.USER}</td>
<td>{member.PM}</td> <td>{member.PM}</td>
<td>{member.EMAIL}</td> <td>{member.EMAIL}</td>
@ -153,20 +167,20 @@
<!-- BEGIN switch_no_members --> <!-- BEGIN switch_no_members -->
<tr> <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> </tr>
<!-- END switch_no_members --> <!-- END switch_no_members -->
<!-- BEGIN switch_hidden_group --> <!-- BEGIN switch_hidden_group -->
<tr> <tr>
<td colspan="10" class="row1 tCenter">{L_HIDDEN_GROUP_MEMBERS}</td> <td colspan="11" class="row1 tCenter">{L_HIDDEN_GROUP_MEMBERS}</td>
</tr> </tr>
<!-- END switch_hidden_group --> <!-- END switch_hidden_group -->
<!-- BEGIN switch_mod_option --> <!-- BEGIN switch_mod_option -->
<tfoot> <tfoot>
<tr> <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"> <p id="add_group_member" class="floatL">
<input type="text" name="username" maxlength="50" size="20" /> <input type="text" name="username" maxlength="50" size="20" />
<input type="submit" name="add" value="{L_ADD_MEMBER}" class="mainoption" /> <input type="submit" name="add" value="{L_ADD_MEMBER}" class="mainoption" />
@ -196,7 +210,8 @@
<table class="forumline"> <table class="forumline">
<thead> <thead>
<tr> <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: 'text'}" ><b class="tbs-text">{L_USERNAME}</b></th>
<th class="{sorter: false}" ><b class="tbs-text">{L_PM}</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> <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> <th class="{sorter: false}" ><b class="tbs-text">{L_WEBSITE}</b></th>
</tr> </tr>
<tr> <tr>
<td class="catTitle" colspan="8">{L_PENDING_MEMBERS}</td> <td class="catTitle" colspan="9">{L_PENDING_MEMBERS}</td>
</tr> </tr>
</thead> </thead>
<!-- BEGIN pending --> <!-- BEGIN pending -->
<tr class="{pending.ROW_CLASS} tCenter"> <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.USER}</td>
<td>{pending.PM}</td> <td>{pending.PM}</td>
<td>{pending.EMAIL}</td> <td>{pending.EMAIL}</td>
@ -223,7 +239,7 @@
<!-- END pending --> <!-- END pending -->
<tfoot> <tfoot>
<tr> <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" /> <input type="submit" name="approve" value="{L_APPROVE_SELECTED}" onclick="return confirm('{L_APPROVE_SELECTED}?');" class="mainoption" />
&nbsp; &nbsp;
<input type="submit" name="deny" value="{L_DENY_SELECTED}" onclick="return confirm('{L_DENY_SELECTED}?');" class="liteoption" /> <input type="submit" name="deny" value="{L_DENY_SELECTED}" onclick="return confirm('{L_DENY_SELECTED}?');" class="liteoption" />
@ -232,21 +248,59 @@
</tfoot> </tfoot>
</table> </table>
<!-- ENDIF / PENDING_USERS --> <!-- ENDIF / PENDING_USERS -->
</form> </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 --> <!-- ENDIF / GROUP_INFO -->
<!--bottom_info--> <!--bottom_info-->
<div class="bottom_info"> <div class="bottom_info">
<div class="spacer_4"></div> <div class="spacer_4"></div>
<div id="timezone"> <div id="timezone">
<p>{CURRENT_TIME}</p> <p>{CURRENT_TIME}</p>
<p>{S_TIMEZONE}</p> <p>{S_TIMEZONE}</p>
</div> </div>
<div class="clear"></div> <div class="clear"></div>
</div><!--/bottom_info--> </div><!--/bottom_info-->

View file

@ -138,14 +138,24 @@
</td> </td>
</tr> </tr>
<!-- ENDIF / LOGGED_IN --> <!-- 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 --> <!-- BEGIN switch_type_toggle -->
<tr> <tr>
<td colspan="2" class="row2 tCenter pad_6">{S_TYPE_TOGGLE}</td> <td colspan="2" class="row2 tCenter pad_6">{S_TYPE_TOGGLE}</td>
</tr> </tr>
<!-- END switch_type_toggle --> <!-- END switch_type_toggle -->
<!-- IF ATTACHBOX --><!-- INCLUDE posting_attach.tpl --><!-- ENDIF --> <!-- IF ATTACHBOX --><!-- INCLUDE posting_attach.tpl --><!-- ENDIF -->
</table> </table>
</form> </form>

View file

@ -267,6 +267,12 @@ $(function(){
</div> </div>
</fieldset> </fieldset>
<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> <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> <div>
<p class="input"> <p class="input">

View file

@ -405,6 +405,18 @@ function build_poll_add_form (src_el)
<div class="post_wrap"> <div class="post_wrap">
<span id="pe_{postrow.POST_ID}"></span> <span id="pe_{postrow.POST_ID}"></span>
<span id="pp_{postrow.POST_ID}">{postrow.MESSAGE}</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="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%;"> <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 /> <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.utf8.php');
require(INC_DIR .'class.correct.php'); require(INC_DIR .'class.correct.php');
require(INC_DIR .'class.reflection.php'); require(INC_DIR .'class.reflection.php');
require(INC_DIR .'functions_group.php');
// Page config // Page config
$page_cfg['include_bbcode_js'] = true; $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(); set_die_append_msg();
$tor_search_limit = (IS_AM) ? 2000 : 500; $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_forum_name_len = 60; // inside forum select box
$max_forums_selected = 50; $max_forums_selected = 50;
$title_match_max_len = 60; $title_match_max_len = 60;
@ -51,6 +52,7 @@ $row_num = $tor_count = 0;
$torrents_tbl = BB_BT_TORRENTS .' tor'; $torrents_tbl = BB_BT_TORRENTS .' tor';
$cat_tbl = BB_CATEGORIES .' c'; $cat_tbl = BB_CATEGORIES .' c';
$forums_tbl = BB_FORUMS .' f'; $forums_tbl = BB_FORUMS .' f';
$posts_tbl = BB_POSTS .' p';
$topics_tbl = BB_TOPICS .' t'; $topics_tbl = BB_TOPICS .' t';
$users_tbl = BB_USERS .' u'; $users_tbl = BB_USERS .' u';
$tracker_tbl = BB_BT_TRACKER .' tr'; $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; $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( $GPC = array(
# var_name key_name def_value GPC type # var_name key_name def_value GPC type
'all_words' => array('allw', 1, CHBOX), 'all_words' => array('allw', 1, CHBOX),
@ -242,6 +267,7 @@ $GPC = array(
'show_cat' => array('dc', 0, CHBOX), 'show_cat' => array('dc', 0, CHBOX),
'show_forum' => array('df', 1, CHBOX), 'show_forum' => array('df', 1, CHBOX),
'show_speed' => array('ds', 0, CHBOX), 'show_speed' => array('ds', 0, CHBOX),
's_rg' => array('srg', $search_all, SELECT),
's_not_seen' => array('sns', $search_all, SELECT), 's_not_seen' => array('sns', $search_all, SELECT),
'time' => array('tm', $search_all, SELECT), 'time' => array('tm', $search_all, SELECT),
'tor_type' => array('tor_type', 0, CHBOX), 'tor_type' => array('tor_type', 0, CHBOX),
@ -452,14 +478,16 @@ $dl_status_csv = join(',', $dl_status);
// Switches // Switches
$only_new = ($new_val && !IS_GUEST); $only_new = ($new_val && !IS_GUEST);
$seed_exist = (bool) $seed_exist_val;
$only_active = ($active_val || $seed_exist); $only_active = ($active_val || $seed_exist);
$dl_search = ($dl_status && !IS_GUEST); $dl_search = ($dl_status && !IS_GUEST);
$only_my = ($my_val && !IS_GUEST && !$dl_search); $only_my = ($my_val && !IS_GUEST && !$dl_search);
$prev_days = ($time_val != $search_all); $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; $poster_id = (bool) $poster_id_val;
$title_match = (bool) $title_match_sql; $title_match = (bool) $title_match_sql;
$s_not_seen = ($s_not_seen_val != $search_all);
$tor_type = (bool) $tor_type_val; $tor_type = (bool) $tor_type_val;
$hide_cat = intval(!$show_cat_val); $hide_cat = intval(!$show_cat_val);
@ -497,6 +525,7 @@ if ($allowed_forums)
'poster_id', 'poster_id',
'poster_name', 'poster_name',
's_not_seen', 's_not_seen',
's_rg',
'seed_exist', 'seed_exist',
'show_author', 'show_author',
'show_cat', 'show_cat',
@ -534,6 +563,7 @@ if ($allowed_forums)
{ {
$reg_time = $time_opt[$time_val]['sql']; $reg_time = $time_opt[$time_val]['sql'];
$poster_id_sql = (int) $poster_id_val; $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_time = $s_not_seen_opt[$s_not_seen_val]['sql'];
$s_seen_sign = ($s_not_seen_val == $never) ? '=' : '<'; $s_seen_sign = ($s_not_seen_val == $never) ? '=' : '<';
$s_seen_exclude = ($s_not_seen_val == $never) ? '' : "AND tor.seeder_last_seen != 0"; $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) 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 // WHERE
$title_match_notfound_flag = false; $title_match_notfound_flag = false;
@ -588,6 +622,10 @@ if ($allowed_forums)
{ {
$SQL['WHERE'][] = "tor.poster_id = $poster_id_sql"; $SQL['WHERE'][] = "tor.poster_id = $poster_id_sql";
} }
if ($s_release_group)
{
$SQL['WHERE'][] = "p.poster_rg_id = $rg_id_sql";
}
if ($only_new) if ($only_new)
{ {
$SQL['WHERE'][] = "tor.reg_time > $lastvisit"; $SQL['WHERE'][] = "tor.reg_time > $lastvisit";
@ -917,6 +955,7 @@ $template->assign_vars(array(
'ORDER_SELECT' => build_select($order_key, $order_select, $order_val), 'ORDER_SELECT' => build_select($order_key, $order_select, $order_val),
'TIME_SELECT' => build_select($time_key, $time_select, $time_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_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_SEARCH_ACTION' => $tracker_url,
'TOR_COLSPAN' => $tor_colspan, 'TOR_COLSPAN' => $tor_colspan,
'TITLE_MATCH_MAX' => $title_match_max_len, '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.user_regdate, u.user_sig,
u.avatar_ext_id, u.avatar_ext_id,
u.user_opt, u.user_gender, u.user_birthday, 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, 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 h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text
FROM ". BB_POSTS ." p 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_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_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_USERS ." u2 ON(u2.user_id = p.mc_user_id)
LEFT JOIN ". BB_GROUPS ." g ON(g.group_id = p.poster_rg_id)
WHERE WHERE
p.post_id = {$t_data['topic_first_post_id']} p.post_id = {$t_data['topic_first_post_id']}
LIMIT 1 LIMIT 1
@ -383,7 +384,7 @@ $sql = "
u.user_regdate, u.user_sig, u.user_regdate, u.user_sig,
u.avatar_ext_id, u.avatar_ext_id,
u.user_opt, u.user_gender, u.user_birthday, 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, 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 h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text
FROM ". BB_POSTS ." p 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_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_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_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 WHERE p.topic_id = $topic_id
$limit_posts_time $limit_posts_time
GROUP BY p.post_id GROUP BY p.post_id
@ -690,6 +692,11 @@ for($i = 0; $i < $total_posts; $i++)
$mc_comment = $postrow[$i]['mc_comment']; $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'])); $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 = ''; $poster_avatar = '';
if ( !$user->opt_js['h_av'] && $poster_id != GUEST_UID ) 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_CLASS' => $mc_class,
'MC_TITLE' => sprintf($lang['MC_COMMENT'][$mc_type]['title'], $mc_user_id), '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), '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')) if ($postrow[$i]['post_attachment'] && $is_auth['auth_download'] && function_exists('display_post_attachments'))