diff --git a/install/sql/mysql.sql b/install/sql/mysql.sql index fe0a74fb6..77e1f10d9 100644 --- a/install/sql/mysql.sql +++ b/install/sql/mysql.sql @@ -790,13 +790,14 @@ CREATE TABLE IF NOT EXISTS `bb_groups` ( `group_id` mediumint(8) NOT NULL AUTO_INCREMENT, `group_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_moderator` mediumint(8) NOT NULL DEFAULT '0', `group_single_user` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`group_id`), KEY `group_single_user` (`group_single_user`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- diff --git a/upload/ajax.php b/upload/ajax.php index 58539d0c8..49a2b37b5 100644 --- a/upload/ajax.php +++ b/upload/ajax.php @@ -52,9 +52,11 @@ switch ($ajax->action) require(INC_DIR . 'functions_admin.php'); break; + case 'manage_group': case 'group_membership': require(INC_DIR . 'functions_group.php'); break; + } // position in $ajax->valid_actions['xxx'] @@ -78,6 +80,7 @@ class ajax_common 'change_user_opt' => array('admin'), 'manage_user' => array('admin'), 'manage_admin' => array('admin'), + 'manage_group' => array('user'), 'mod_action' => array('mod'), 'topic_tpl' => array('mod'), @@ -336,7 +339,10 @@ 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..7affe0a48 --- /dev/null +++ b/upload/ajax/edit_group_profile.php @@ -0,0 +1,47 @@ +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; + +// TODO Check for permissions + +switch ($mode) +{ + case 'group_name': + case 'group_description': + $value = htmlCHR($value); + $this->response['new_value'] = $value; + break; + case 'group_type': + $this->response['new_value'] = $value; + break; + case 'release_group': + $this->response['new_value'] = $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"); + +// Just for debug +/* +$this->response['new_value'] = $value; +$this->response['group_id'] = $group_id; +$this->response['mode'] = $mode; +*/ + diff --git a/upload/group-config.php b/upload/group-config.php new file mode 100644 index 000000000..70632b1c7 --- /dev/null +++ b/upload/group-config.php @@ -0,0 +1,91 @@ +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; + +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 Creation Date, Admin panel, Avatar, Some tasty features + + $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']), + + '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_GROUPCP_ACTION' => "groupcp.php?" . POST_GROUPS_URL . "=$group_id", + 'RELEASE_GROUP' => ($group_info['release_group']) ? true : false, + )); + + $template->set_filenames(array('body' => 'group-config.tpl')); + + $template->assign_vars(array('PAGE_TITLE' => 'Настройка группы')); + + 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 a8a91c5f6..9fb3f6950 100644 --- a/upload/groupcp.php +++ b/upload/groupcp.php @@ -4,14 +4,16 @@ define('IN_FORUM', true); define('BB_SCRIPT', 'groupcp'); define('BB_ROOT', './'); require(BB_ROOT ."common.php"); +require(INC_DIR .'bbcode.php'); require(INC_DIR .'functions_group.php'); +$page_cfg['include_bbcode_js'] = true; $page_cfg['use_tablesorter'] = true; $s_member_groups = $s_pending_groups = $s_member_groups_opt = $s_pending_groups_opt = ''; $select_sort_mode = $select_sort_order = ''; -function generate_user_info(&$row, $date_format, $group_mod, &$from, &$posts, &$joined, &$pm, &$email, &$www, &$user_time) +function generate_user_info(&$row, $date_format, $group_mod, &$from, &$posts, &$joined, &$pm, &$email, &$www, &$user_time, &$avatar) { global $lang, $images, $bb_cfg; @@ -20,6 +22,7 @@ function generate_user_info(&$row, $date_format, $group_mod, &$from, &$posts, &$ $user_time = ( !empty($row['user_time']) ) ? bb_date($row['user_time']) : $lang['NONE']; $posts = ( $row['user_posts'] ) ? $row['user_posts'] : 0; $pm = ($bb_cfg['text_buttons']) ? ''. $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'), true, 50, 50); if (bf($row['user_opt'], 'user_opt', 'user_viewemail') || $group_mod) { @@ -184,34 +187,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) @@ -420,7 +395,7 @@ else // 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 + 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 @@ -513,7 +488,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,9 +510,10 @@ else 'GROUP_INFO' => true, 'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'], 'GROUP_NAME' => htmlCHR($group_info['group_name']), - 'GROUP_DESCRIPTION' => $group_info['group_description'], - 'GROUP_DETAILS' => $group_details, + 'GROUP_DESCRIPTION' => bbcode2html($group_info['group_description']), + 'GROUP_DETAILS' => $group_details, 'MOD_USER' => profile_url($group_moderator), + 'MOD_AVATAR' => $avatar, 'MOD_FROM' => $from, 'MOD_JOINED' => $joined, 'MOD_POSTS' => $posts, @@ -546,6 +522,7 @@ else 'MOD_WWW' => $www, 'MOD_TIME' => (!empty($group_info['group_time'])) ? bb_date($group_info['group_time']) : $lang['NONE'], 'U_SEARCH_USER' => "search.php?mode=searchuser", + 'U_GROUP_CONFIG' => "group-config.php?g=$group_id", 'GROUP_TYPE' => $group_type, 'S_GROUP_OPEN_TYPE' => GROUP_OPEN, 'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED, @@ -564,7 +541,7 @@ else { $user_id = $member['user_id']; - generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time); + generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $avatar); if ($group_info['group_type'] != GROUP_HIDDEN || $is_group_member || $is_moderator) { @@ -574,6 +551,7 @@ else 'ROW_NUMBER' => $i + ( $start + 1 ), 'ROW_CLASS' => $row_class, 'USER' => profile_url($member), + 'AVATAR_IMG' => $avatar, 'FROM' => $from, 'JOINED' => $joined, 'POSTS' => $posts, diff --git a/upload/language/en/main.php b/upload/language/en/main.php index 35a93c165..c3384aafc 100644 --- a/upload/language/en/main.php +++ b/upload/language/en/main.php @@ -699,6 +699,7 @@ $lang['ORDER'] = 'Order'; // Group control panel // $lang['GROUP_CONTROL_PANEL'] = 'User Groups'; +$lang['GROUP_RETURN'] = 'Return to User Group page'; $lang['MEMBERSHIP_DETAILS'] = 'Group Membership Details'; $lang['JOIN_A_GROUP'] = 'Join a Group'; @@ -710,6 +711,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'; @@ -724,6 +728,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'; diff --git a/upload/language/ru/main.php b/upload/language/ru/main.php index f8d7d76c0..d34a09425 100644 --- a/upload/language/ru/main.php +++ b/upload/language/ru/main.php @@ -699,6 +699,7 @@ $lang['ORDER'] = ''; // не нужно, в английском использ // Group control panel // $lang['GROUP_CONTROL_PANEL'] = 'Группы'; +$lang['GROUP_RETURN'] = 'Вернуться на страницу группы'; $lang['MEMBERSHIP_DETAILS'] = 'Информация о членстве в группах'; $lang['JOIN_A_GROUP'] = 'Вступить в группу'; @@ -710,6 +711,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'] = 'Группа с закрытым членством'; @@ -724,6 +728,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'] = 'Эта группа скрыта, вы не можете посмотреть ее состав'; diff --git a/upload/language/ua/main.php b/upload/language/ua/main.php index 49594376b..610b1d48b 100644 --- a/upload/language/ua/main.php +++ b/upload/language/ua/main.php @@ -699,6 +699,7 @@ $lang['ORDER'] = ''; // не потрібно, в англійській вик // Group control panel // $lang['GROUP_CONTROL_PANEL'] = 'Групи'; +$lang['GROUP_RETURN'] = 'Вернуться на страницу группы'; $lang['MEMBERSHIP_DETAILS'] = 'Інформація про членство в групах'; $lang['JOIN_A_GROUP'] = 'Вступити в групу'; @@ -715,6 +716,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'] = 'Кандидат у члени груп'; @@ -724,6 +728,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'] = 'Ця група прихована, ви не можете побачити її складу'; diff --git a/upload/templates/default/group-config.tpl b/upload/templates/default/group-config.tpl new file mode 100644 index 000000000..36d31f753 --- /dev/null +++ b/upload/templates/default/group-config.tpl @@ -0,0 +1,63 @@ + +

{PAGE_TITLE} :: {GROUP_NAME}

+ +
+ {S_HIDDEN_FIELDS} + + + + + + + + + + + + + + + + + + + + + + + + + + +
{L_GROUP_INFORMATION}
{L_GROUP_NAME}:
{L_GROUP_DESCRIPTION}:
+

+ +

+

+ + +

+
{L_GROUP_TYPE}: +

+    +    + +

+
{L_RELEASE_GROUP} +    + +
{L_AVATAR} 
+
\ No newline at end of file diff --git a/upload/templates/default/groupcp.tpl b/upload/templates/default/groupcp.tpl index 710ba98e7..216ab9481 100644 --- a/upload/templates/default/groupcp.tpl +++ b/upload/templates/default/groupcp.tpl @@ -54,16 +54,21 @@ {L_GROUP_INFORMATION} +

{GROUP_NAME}

- {L_GROUP_NAME}: - {GROUP_NAME} + +
 
+ + + + {GROUP_DESCRIPTION} + + - - {L_GROUP_DESCRIPTION}: - {GROUP_DESCRIPTION} + {L_GROUP_TIME} + {MOD_TIME} - {L_GROUP_MEMBERSHIP}:

{GROUP_DETAILS} @@ -78,15 +83,8 @@ - {L_GROUP_TYPE}: - -

-    -    - -   -

- + Настройка группы: + Перейти в панель управления группой @@ -102,6 +100,7 @@ # + {L_AVATAR} {L_USERNAME} {L_PM} {L_EMAIL} @@ -113,10 +112,11 @@ # - {L_GROUP_MODERATOR} + {L_GROUP_MODERATOR} {ROW_NUMBER} + {MOD_AVATAR} {MOD_USER} {MOD_PM} {MOD_EMAIL} @@ -128,13 +128,14 @@   - {L_GROUP_MEMBERS} + {L_GROUP_MEMBERS} {member.ROW_NUMBER} + {member.AVATAR_IMG} {member.USER} {member.PM} {member.EMAIL} @@ -166,7 +167,7 @@ - +