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'] .'' : '';
+ $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 @@
+
+
{GROUP_DETAILS} @@ -78,15 +83,8 @@
- - - - -
-