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'] .'' : '' . $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 .= '