diff --git a/README.md b/README.md index fe6f10d6e..66655eafb 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,10 @@ TorrentPier II - движок торрент-трекера, написанны 2. Создаем базу данных, в которую при помощи phpmyadmin (или любого другого удобного инструмента) импортируем дамп, расположенный в папке **install/sql/mysql.sql** 3. Правим файл конфигурации **config.php**, загруженный на сервер: -> $bb_cfg['db']['db1'] = array('localhost', 'dbase', 'user', 'pass', $charset, $pconnect); -> В данной строке изменяем данные входа в базу данных, остальные правки в файле вносятся по усмотрению, исходя из необходимости из внесения (ориентируйтесь на описания, указанные у полей). +> ***$bb_cfg['db']['db1'] = array('localhost', 'dbase', 'user', 'pass', $charset, $pconnect);*** +В данной строке изменяем данные входа в базу данных +***$domain_name = 'torrentpier.me';*** +В данной строке указываем ваше доменное имя. Остальные правки в файле вносятся по усмотрению, исходя из необходимости из внесения (ориентируйтесь на описания, указанные у полей). 4. Редактируем указанные файлы: + **favicon.ico** (меняем на свою иконку, если есть) @@ -58,4 +60,4 @@ TorrentPier II - движок торрент-трекера, написанны + Наш форум http://torrentpier.me/ + Центр загрузки http://get.torrentpier.me/ + Часто задаваемые вопросы http://faq.torrentpier.me/ -+ Где задать вопрос http://torrentpier.me/forums/10/ \ No newline at end of file ++ Где задать вопрос http://torrentpier.me/forums/10/ diff --git a/install/sql/mysql.sql b/install/sql/mysql.sql index cbc2e9059..96c5cb898 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); -- -------------------------------------------------------- @@ -930,7 +927,7 @@ CREATE TABLE IF NOT EXISTS `bb_posts_text` ( -- Дамп данных таблицы `bb_posts_text` -- -INSERT INTO `bb_posts_text` VALUES (1, '[list]\n[*]Переделан поиск по топикам с выбором типа [none, mysql, sphinx] (только в tracker.php)\n[*]Удалены bbcode_uid и переход на class.bbcode\n[*]Изменен метод и способ кеширования (memcache, sqlite, db_sqlite, redis, eaccelerator, apc, xcache, filecache)\n[*]Изменен способ подключения к БД и отказ от глобальной переменной $db\n[*]Улучшенный дебагер\n[*]Полностью переписан и упрощен файл регистрации\n[*]Переписана капча (в том числе при быстром ответе у гостя)\n[*]Удаление файлов torrent.php и torstatus.php и перенос их функций в ajax\n[*]Ajax цитирование, изменение, редактирование, удаление сообщений\n[/list]'); +INSERT INTO `bb_posts_text` VALUES (1, 'Благодарим вас за установку новой версии TorrentPier II!\n\nЧто делать дальше? Сперва настройте ваш сайт в администраторском разделе. Измените базовые опции: заголовок сайта, число сообщений на страницу, часовой пояс, язык по-умолчанию, настройки сидбонусов, дней рождения и т.д. Создайте несколько форумов, а также не забудьте переименовать или удалить этот. Обязательно настройте возможность создания релизов в созданных вами разделах и добавьте [url=http://torrentpier.me/threads/25867/]шаблоны оформления раздач[/url] для них. Если у вас возникнут вопросы или потребность в дополнительных модификациях, [url=http://torrentpier.me/]посетите наш форум[/url].\n\nТакже напоминаем, что у проекта TorrentPier II есть несколько сайтов, которые могут оказаться полезны для вас:\n[list]\n[*]Форум: http://torrentpier.me/\n[*]Демо-версия: http://get.torrentpier.me/\n[*]Инструкция: http://faq.torrentpier.me/\n[*]Центр загрузки: http://get.torrentpier.me/\n[*]Перевод на другие языки: http://translate.torrentpier.me/\n[/list]\nНе забудьте добавить их себе в закладки и регулярно проверять наличие новых версий движка на нашем форуме, для своевременного обновления.\n\nНе сомневаемся, вам под силу создать самый лучший трекер. Удачи!'); -- -------------------------------------------------------- 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/ajax/posts.php b/upload/ajax/posts.php index 7c6397144..ccfe534a5 100644 --- a/upload/ajax/posts.php +++ b/upload/ajax/posts.php @@ -80,9 +80,9 @@ switch($this->request['type']) $this->ajax_die(sprintf($lang['SORRY_AUTH_REPLY'], strip_tags($is_auth['auth_reply_type']))); } - // Use trim to get rid of spaces placed there by MS-SQL 2000 - $quote_username = (trim($post['post_username']) != '') ? $post['post_username'] : get_username($post['poster_id']); + $quote_username = ($post['post_username'] != '') ? $post['post_username'] : get_username($post['poster_id']); $message = "[quote=\"". $quote_username ."\"][qpost=". $post['post_id'] ."]". $post['post_text'] ."[/quote]\r"; + // hide user passkey $message = preg_replace('#(?<=\?uk=)[a-zA-Z0-9]{10}(?=&)#', 'passkey', $message); // hide sid diff --git a/upload/config.php b/upload/config.php index 2b3c24b48..cacbe6c57 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; @@ -549,7 +550,7 @@ $bb_cfg['gen_forums_allowed_ext'] = array('zip', 'rar'); // для о $bb_cfg['avatars'] = array( 'allowed_ext' => array('gif','jpg','jpeg','png'), // разрешенные форматы файлов 'bot_avatar' => 'gallery/bot.gif', // аватара бота - 'max_size' => 50*1024, // размер аватары в байтах + 'max_size' => 100*1024, // размер аватары в байтах 'max_height' => 100, // высота аватара в px 'max_width' => 100, // ширина аватара в px 'no_avatar' => 'gallery/noavatar.png', // дефолтная аватара @@ -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' => 100*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..6de2c8be1 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'] .'' : '' . $lang['SEND_PRIVATE_MESSAGE'] . ''; + $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'] .'' : '' . $lang['SEND_PRIVATE_MESSAGE'] . ''; + $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 .= '