diff --git a/install/sql/mysql.sql b/install/sql/mysql.sql
index cbc2e9059..7e56d159d 100644
--- a/install/sql/mysql.sql
+++ b/install/sql/mysql.sql
@@ -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);
-- --------------------------------------------------------
diff --git a/other/converter/TBDevYSE_pre6/root/converter/constants.php b/other/converter/TBDevYSE_pre6/root/converter/constants.php
index 5cfd1d00a..106438984 100644
--- a/other/converter/TBDevYSE_pre6/root/converter/constants.php
+++ b/other/converter/TBDevYSE_pre6/root/converter/constants.php
@@ -1,6 +1,6 @@
$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,
));
@@ -87,10 +90,10 @@ else if (!empty($_POST['group_update']))
}
else
{
- $group_type = isset($_POST['group_type']) ? intval($_POST['group_type']) : GROUP_OPEN;
- $group_name = isset($_POST['group_name']) ? trim($_POST['group_name']) : '';
- $group_desc = isset($_POST['group_description']) ? trim($_POST['group_description']) : '';
-
+ $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
diff --git a/upload/ajax.php b/upload/ajax.php
index 8b3d2ba2e..eca31b0bb 100644
--- a/upload/ajax.php
+++ b/upload/ajax.php
@@ -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');
diff --git a/upload/ajax/edit_group_profile.php b/upload/ajax/edit_group_profile.php
new file mode 100644
index 000000000..5c0cc9e54
--- /dev/null
+++ b/upload/ajax/edit_group_profile.php
@@ -0,0 +1,52 @@
+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");
\ No newline at end of file
diff --git a/upload/config.php b/upload/config.php
index 2b3c24b48..8dcba493b 100644
--- a/upload/config.php
+++ b/upload/config.php
@@ -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'));
diff --git a/upload/group_config.php b/upload/group_config.php
new file mode 100644
index 000000000..091dd6043
--- /dev/null
+++ b/upload/group_config.php
@@ -0,0 +1,115 @@
+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 = ' ';
+
+ $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);
+}
\ No newline at end of file
diff --git a/upload/groupcp.php b/upload/groupcp.php
index 0b715176d..d3aa41afc 100644
--- a/upload/groupcp.php
+++ b/upload/groupcp.php
@@ -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,15 +12,16 @@ $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;
- $from = ( !empty($row['user_from']) ) ? $row['user_from'] : '';
- $joined = bb_date($row['user_regdate']);
- $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']) ? ''. $lang['SEND_PM_TXTB'] .' ' : ' ';
+ $from = (!empty($row['user_from'])) ? $row['user_from'] : '';
+ $joined = bb_date($row['user_regdate']);
+ $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']) ? ''. $lang['SEND_PM_TXTB'] .' ' : ' ';
+ $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)
{
@@ -41,9 +43,11 @@ $user->session_start(array('req_login' => true));
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'];
+$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 .= '
'. $text .' ';
- $options .= ''. $members .' ';
+ $options .= ($data['rg']) ? ''. $lang['RELEASE_GROUP'] .' ' : '';
+ $options .= ''. $members .' ';
if (IS_AM)
{
$options .= ''. $candidates .' ';
}
$options .= ' ';
-
}
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'] .' ';
- $message .= sprintf($lang['CLICK_RETURN_GROUP'], '', ' ') .' ';
- $message .= sprintf($lang['CLICK_RETURN_INDEX'], '', ' ');
-
- 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 (%s) ', 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&". POST_GROUPS_URL ."=$group_id",
+ 'U_GROUP_MEMBERS' => "groupcp.php?view=members&". 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,85 +496,194 @@ 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",
));
- // Dump out the remaining users
- foreach ($group_members as $i => $member)
+ switch ($view_mode)
{
- $user_id = $member['user_id'];
+ case 'releases':
+ // TODO Correct SQL to posts with attach and limit them, optimization
- generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time);
+ if (!$group_info['release_group']) bb_die($lang['NOT_A_RELEASE_GROUP']);
- if ($group_info['group_type'] != GROUP_HIDDEN || $is_group_member || $is_moderator)
- {
- $row_class = !($i % 2) ? 'row1' : 'row2';
+ // 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);
- $template->assign_block_vars('member', array(
- 'ROW_NUMBER' => $i + ( $start + 1 ),
- 'ROW_CLASS' => $row_class,
- 'USER' => profile_url($member),
- 'FROM' => $from,
- 'JOINED' => $joined,
- 'POSTS' => $posts,
- 'USER_ID' => $user_id,
- 'PM' => $pm,
- 'EMAIL' => $email,
- 'WWW' => $www,
- 'TIME' => $user_time,
+ generate_pagination(GROUP_URL . $group_id ."&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('%s ', TOPIC_URL . $release['topic_id'], htmlCHR($release['topic_title'])),
+ 'RELEASE_TIME' => bb_date($release['topic_time']),
+ 'RELEASE_FORUM' => sprintf('%s ', 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, $avatar);
+
+ if ($group_info['group_type'] != GROUP_HIDDEN || $is_group_member || $is_moderator)
+ {
+ $row_class = !($i % 2) ? 'row1' : 'row2';
+
+ $template->assign_block_vars('member', array(
+ 'ROW_NUMBER' => $i + ( $start + 1 ),
+ 'ROW_CLASS' => $row_class,
+ 'USER' => profile_url($member),
+ 'AVATAR_IMG' => $avatar,
+ 'FROM' => $from,
+ 'JOINED' => $joined,
+ 'POSTS' => $posts,
+ 'USER_ID' => $user_id,
+ 'PM' => $pm,
+ 'EMAIL' => $email,
+ 'WWW' => $www,
+ 'TIME' => $user_time,
+ ));
+
+ if ($is_moderator)
+ {
+ $template->assign_block_vars('member.switch_mod_option', array());
+ }
+ }
+ }
+
+ // No group members
+ if (!$members_count)
+ {
+ $template->assign_block_vars('switch_no_members', array());
+ }
+
+ // No group members
+ if ($group_info['group_type'] == GROUP_HIDDEN && !$is_group_member && !$is_moderator)
+ {
+ $template->assign_block_vars('switch_hidden_group', array());
+ }
+
+ // Pending
if ($is_moderator)
{
- $template->assign_block_vars('member.switch_mod_option', array());
+ $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, $avatar);
+
+ $row_class = !($i % 2) ? 'row1' : 'row2';
+
+ $user_select = ' ';
+
+ $template->assign_block_vars('pending', array(
+ 'ROW_CLASS' => $row_class,
+ 'AVATAR_IMG'=> $avatar,
+ 'USER' => profile_url($member),
+ 'FROM' => $from,
+ 'JOINED' => $joined,
+ 'POSTS' => $posts,
+ 'USER_ID' => $user_id,
+ 'PM' => $pm,
+ 'EMAIL' => $email,
+ ));
+ }
+
+ $template->assign_vars(array(
+ 'PENDING_USERS' => true,
+ ));
+ }
+
+ $template->assign_vars(array('MEMBERS' => true));
}
- }
-
- // No group members
- if (!$members_count)
- {
- $template->assign_block_vars('switch_no_members', array());
- }
-
- // No group members
- if ($group_info['group_type'] == GROUP_HIDDEN && !$is_group_member && !$is_moderator)
- {
- $template->assign_block_vars('switch_hidden_group', array());
- }
-
- //
- // We've displayed the members who belong to the group, now we
- // do that pending memebers...
- //
- 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);
-
- $row_class = !($i % 2) ? 'row1' : 'row2';
-
- $user_select = ' ';
-
- $template->assign_block_vars('pending', array(
- 'ROW_CLASS' => $row_class,
- 'USER' => profile_url($member),
- 'FROM' => $from,
- 'JOINED' => $joined,
- 'POSTS' => $posts,
- 'USER_ID' => $user_id,
- 'PM' => $pm,
- 'EMAIL' => $email,
- ));
- }
-
- $template->assign_vars(array(
- 'PENDING_USERS' => true,
- ));
- }
if ($is_moderator)
{
diff --git a/upload/includes/functions_group.php b/upload/includes/functions_group.php
index 026fd065e..eb2420842 100644
--- a/upload/includes/functions_group.php
+++ b/upload/includes/functions_group.php
@@ -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');
}
diff --git a/upload/includes/functions_post.php b/upload/includes/functions_post.php
index 04129124c..01df9690b 100644
--- a/upload/includes/functions_post.php
+++ b/upload/includes/functions_post.php
@@ -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;
@@ -154,7 +154,7 @@ function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_
}
}
- $edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
+ $edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1" : "";
if ($update_post_time && $mode == 'editpost' && $post_data['last_post'] && !$post_data['first_post'])
{
@@ -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');
diff --git a/upload/includes/init_bb.php b/upload/includes/init_bb.php
index ad1ee32c9..a49450855 100644
--- a/upload/includes/init_bb.php
+++ b/upload/includes/init_bb.php
@@ -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); // закрыто
diff --git a/upload/language/en/main.php b/upload/language/en/main.php
index a9cdfd1d5..b69b49e89 100644
--- a/upload/language/en/main.php
+++ b/upload/language/en/main.php
@@ -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
//
@@ -1123,17 +1139,17 @@ $lang['TOR_STATUS_SELECT_ACTION'] = 'Select status';
$lang['TOR_STATUS_NOT_SELECT'] = 'You have not selected status.';
$lang['TOR_STATUS_SELECT_ALL'] = 'All statuses';
$lang['TOR_STATUS_NAME'] = array(
- TOR_NOT_APPROVED => 'not checked',
- TOR_CLOSED => 'closed',
- TOR_APPROVED => 'checked',
- TOR_NEED_EDIT => 'not formalized until',
- TOR_NO_DESC => 'not formalized',
- TOR_DUP => 'repeat',
- TOR_CLOSED_CPHOLD => 'closed right',
- TOR_CONSUMED => 'absorbed',
- TOR_DOUBTFUL => 'doubtful',
- TOR_CHECKING => 'verified',
- TOR_TMP => 'temporary',
+ TOR_NOT_APPROVED => 'not checked',
+ TOR_CLOSED => 'closed',
+ TOR_APPROVED => 'checked',
+ TOR_NEED_EDIT => 'not formalized until',
+ TOR_NO_DESC => 'not formalized',
+ TOR_DUP => 'repeat',
+ TOR_CLOSED_CPHOLD => 'closed right',
+ TOR_CONSUMED => 'absorbed',
+ TOR_DOUBTFUL => 'doubtful',
+ TOR_CHECKING => 'verified',
+ TOR_TMP => 'temporary',
TOR_PREMOD => 'pre-moderation',
);
$lang['TOR_STATUS_FAILED'] = 'Such status does not exist!';
diff --git a/upload/language/ru/main.php b/upload/language/ru/main.php
index e21d66baf..d645b060e 100644
--- a/upload/language/ru/main.php
+++ b/upload/language/ru/main.php
@@ -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
//
@@ -1123,18 +1139,18 @@ $lang['TOR_STATUS_SELECT_ACTION'] = 'Выберите статус';
$lang['TOR_STATUS_NOT_SELECT'] = 'Вы не выбрали статус.';
$lang['TOR_STATUS_SELECT_ALL'] = 'Все статусы';
$lang['TOR_STATUS_NAME'] = array(
- TOR_NOT_APPROVED => 'не проверено',
- TOR_CLOSED => 'закрыто',
- TOR_APPROVED => 'проверено',
- TOR_NEED_EDIT => 'недооформлено',
- TOR_NO_DESC => 'неоформлено',
- TOR_DUP => 'повтор',
- TOR_CLOSED_CPHOLD => 'закрыто правообладателем',
- TOR_CONSUMED => 'поглощено',
- TOR_DOUBTFUL => 'сомнительно',
- TOR_CHECKING => 'проверяется',
- TOR_TMP => 'временная',
- TOR_PREMOD => 'премодерация',
+ TOR_NOT_APPROVED => 'не проверено',
+ TOR_CLOSED => 'закрыто',
+ TOR_APPROVED => 'проверено',
+ TOR_NEED_EDIT => 'недооформлено',
+ TOR_NO_DESC => 'неоформлено',
+ TOR_DUP => 'повтор',
+ TOR_CLOSED_CPHOLD => 'закрыто правообладателем',
+ TOR_CONSUMED => 'поглощено',
+ TOR_DOUBTFUL => 'сомнительно',
+ TOR_CHECKING => 'проверяется',
+ TOR_TMP => 'временная',
+ TOR_PREMOD => 'премодерация',
);
$lang['TOR_STATUS_FAILED'] = 'Такого статуса не существует!';
$lang['TORRENT_FAILED'] = 'Раздача не найдена!';
diff --git a/upload/language/uk/main.php b/upload/language/uk/main.php
index 13867632d..53ea7ba7c 100644
--- a/upload/language/uk/main.php
+++ b/upload/language/uk/main.php
@@ -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
//
@@ -1123,18 +1139,18 @@ $lang['TOR_STATUS_SELECT_ACTION'] = 'Виберіть статус';
$lang['TOR_STATUS_NOT_SELECT'] = 'Ви не вибрали статус.';
$lang['TOR_STATUS_SELECT_ALL'] = 'Всі статуси';
$lang['TOR_STATUS_NAME'] = array(
- TOR_NOT_APPROVED => 'не перевірено',
- TOR_CLOSED => 'закрито',
- TOR_APPROVED => 'перевірено',
- TOR_NEED_EDIT => 'недооформлено',
- TOR_NO_DESC => 'неоформлено',
- TOR_DUP => 'повтор',
- TOR_CLOSED_CPHOLD => 'закрито правовласником',
- TOR_CONSUMED => 'поглинена',
- TOR_DOUBTFUL => 'сумнівна',
- TOR_CHECKING => 'перевіряється',
- TOR_TMP => 'тимчасова',
- TOR_PREMOD => 'премодерація',
+ TOR_NOT_APPROVED => 'не перевірено',
+ TOR_CLOSED => 'закрито',
+ TOR_APPROVED => 'перевірено',
+ TOR_NEED_EDIT => 'недооформлено',
+ TOR_NO_DESC => 'неоформлено',
+ TOR_DUP => 'повтор',
+ TOR_CLOSED_CPHOLD => 'закрито правовласником',
+ TOR_CONSUMED => 'поглинена',
+ TOR_DOUBTFUL => 'сумнівна',
+ TOR_CHECKING => 'перевіряється',
+ TOR_TMP => 'тимчасова',
+ TOR_PREMOD => 'премодерація',
);
$lang['TOR_STATUS_FAILED'] = 'Такого статусу не існує!';
$lang['TORRENT_FAILED'] = 'Роздача не знайдено!';
diff --git a/upload/posting.php b/upload/posting.php
index 56155747c..1b20357d1 100644
--- a/upload/posting.php
+++ b/upload/posting.php
@@ -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 .= ''. $row['group_name'] .' ';
+ }
+}
+
$hidden_form_fields = ' ';
switch( $mode )
@@ -660,24 +687,27 @@ $template->set_filenames(array(
// Output the data to the template
$template->assign_vars(array(
- 'FORUM_NAME' => htmlCHR($forum_name),
- 'PAGE_TITLE' => $page_title,
- 'POSTING_TYPE_TITLE' => $page_title,
- 'POSTING_TOPIC_ID' => ($mode != 'newtopic') ? $topic_id : '',
- 'POSTING_TOPIC_TITLE' => ($mode != 'newtopic') ? wbr($post_info['topic_title']) : '',
- 'U_VIEW_FORUM' => "viewforum.php?" . POST_FORUM_URL . "=$forum_id",
+ 'FORUM_NAME' => htmlCHR($forum_name),
+ 'PAGE_TITLE' => $page_title,
+ 'POSTING_TYPE_TITLE' => $page_title,
+ 'POSTING_TOPIC_ID' => ($mode != 'newtopic') ? $topic_id : '',
+ 'POSTING_TOPIC_TITLE' => ($mode != 'newtopic') ? wbr($post_info['topic_title']) : '',
+ 'U_VIEW_FORUM' => "viewforum.php?" . POST_FORUM_URL . "=$forum_id",
- 'USERNAME' => @$username,
- 'CAPTCHA_HTML' => (IS_GUEST) ? CAPTCHA()->get_html() : '',
- 'SUBJECT' => $subject,
- 'MESSAGE' => $message,
+ 'USERNAME' => @$username,
+ 'CAPTCHA_HTML' => (IS_GUEST) ? CAPTCHA()->get_html() : '',
+ 'SUBJECT' => $subject,
+ 'MESSAGE' => $message,
- 'U_VIEWTOPIC' => ( $mode == 'reply' ) ? TOPIC_URL . $topic_id . "&postorder=desc" : '',
+ 'POSTER_RGROUPS' => isset($poster_rgroups) && !empty($poster_rgroups) ? $poster_rgroups : '',
+ 'ATTACH_RG_SIG' => ($switch_rg_sig) ? $switch_rg_sig : false,
- 'S_NOTIFY_CHECKED' => ( $notify_user ) ? 'checked="checked"' : '',
- 'S_TYPE_TOGGLE' => $topic_type_toggle,
- 'S_TOPIC_ID' => $topic_id,
- 'S_POST_ACTION' => POSTING_URL,
+ 'U_VIEWTOPIC' => ($mode == 'reply') ? "viewtopic.php?" . POST_TOPIC_URL . "=$topic_id&postorder=desc" : '',
+
+ 'S_NOTIFY_CHECKED' => ($notify_user) ? 'checked="checked"' : '',
+ 'S_TYPE_TOGGLE' => $topic_type_toggle,
+ 'S_TOPIC_ID' => $topic_id,
+ 'S_POST_ACTION' => POSTING_URL,
'S_HIDDEN_FORM_FIELDS' => $hidden_form_fields,
));
diff --git a/upload/templates/admin/admin_groups.tpl b/upload/templates/admin/admin_groups.tpl
index 076a978b6..01547e363 100644
--- a/upload/templates/admin/admin_groups.tpl
+++ b/upload/templates/admin/admin_groups.tpl
@@ -1,4 +1,3 @@
-
@@ -29,8 +28,15 @@
{L_GROUP_STATUS}:
{L_GROUP_OPEN}
- {L_GROUP_CLOSED}
- {L_GROUP_HIDDEN}
+ {L_GROUP_CLOSED}
+ {L_GROUP_HIDDEN}
+
+
+
+ {L_RELEASE_GROUP}
+
+ checked="checked" />{L_YES}
+ checked="checked" />{L_NO}
@@ -99,5 +105,4 @@
-
-
+
\ No newline at end of file
diff --git a/upload/templates/default/group_config.tpl b/upload/templates/default/group_config.tpl
new file mode 100644
index 000000000..4e0b646f5
--- /dev/null
+++ b/upload/templates/default/group_config.tpl
@@ -0,0 +1,95 @@
+
+
+{PAGE_TITLE} :: {GROUP_NAME}
+{L_GROUP_RETURN}
+
\ No newline at end of file
diff --git a/upload/templates/default/groupcp.tpl b/upload/templates/default/groupcp.tpl
index c6e4cba6a..0cea61b76 100644
--- a/upload/templates/default/groupcp.tpl
+++ b/upload/templates/default/groupcp.tpl
@@ -17,7 +17,7 @@
+{L_GROUP_MEMBERS} :: {L_GROUPS_RELEASES}
+