diff --git a/upload/ajax/edit_group_profile.php b/upload/ajax/edit_group_profile.php index bc9a4f453..5a0ac6912 100644 --- a/upload/ajax/edit_group_profile.php +++ b/upload/ajax/edit_group_profile.php @@ -25,7 +25,7 @@ switch ($mode) case 'group_name': case 'group_signature': case 'group_description': - $value = htmlCHR($value); + $value = htmlCHR($value, false, ENT_NOQUOTES); $this->response['new_value'] = $value; break; diff --git a/upload/groupcp.php b/upload/groupcp.php index 718042fdc..11866e252 100644 --- a/upload/groupcp.php +++ b/upload/groupcp.php @@ -22,7 +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); + $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) { @@ -47,6 +47,7 @@ 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']; +$view_mode = isset($_REQUEST['view']) ? $_REQUEST['view'] : null; $group_info = array(); $is_moderator = false; @@ -380,51 +381,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.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); - - // Pending - if ($is_moderator) - { - $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); - } - // Current user membership $is_group_member = $is_group_pending_member = false; @@ -527,6 +483,9 @@ else 'MOD_TIME' => (!empty($group_info['mod_time'])) ? bb_date($group_info['mod_time']) : $lang['NONE'], 'U_SEARCH_USER' => "search.php?mode=searchuser", + '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, @@ -543,84 +502,189 @@ else 'S_GROUPCP_ACTION' => "groupcp.php?" . POST_GROUPS_URL . "=$group_id", )); - // Dump out the remaining users - foreach ($group_members as $i => $member) - { - $user_id = $member['user_id']; + switch($view_mode) + { + case 'releases': - generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $avatar); + // TODO Correct SQL to posts with attach and limit them, optimization - 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 + "); - $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, - )); + $count_releases = count($all_releases); - if ($is_moderator) - { - $template->assign_block_vars('member.switch_mod_option', array()); - } - } - } + generate_pagination(GROUP_URL . $group_id ."&view=releases", $count_releases, $per_page, $start); - // No group members - if (!$members_count) - { - $template->assign_block_vars('switch_no_members', array()); - } + $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"; - // No group members - if ($group_info['group_type'] == GROUP_HIDDEN && !$is_group_member && !$is_moderator) - { - $template->assign_block_vars('switch_hidden_group', array()); - } + if (!$releases = DB()->fetch_rowset($sql)) + { + bb_die('Could not get releases data'); + } - // - // 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']; + foreach ($releases as $i => $release) + { + $row_class = !($i % 2) ? 'row1' : 'row2'; - generate_user_info($member, $bb_cfg['default_dateformat'], $is_moderator, $from, $posts, $joined, $pm, $email, $www, $user_time, $avatar); + $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'])), + )); + } - $row_class = !($i % 2) ? 'row1' : 'row2'; + $template->assign_vars(array('RELEASES' => true)); - $user_select = ''; + break; + case 'members': + default: - $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, - )); - } + // 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); - $template->assign_vars(array( - 'PENDING_USERS' => true, - )); - } + // 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()); + } + + // + // We've displayed the members who belong to the group, now we + // do that pending memebers... + // + + // Pending + if ($is_moderator) + { + $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)); + } if ($is_moderator) { diff --git a/upload/language/en/main.php b/upload/language/en/main.php index 714b543c1..8b6289bd4 100644 --- a/upload/language/en/main.php +++ b/upload/language/en/main.php @@ -778,6 +778,7 @@ $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'; // // Search diff --git a/upload/language/ru/main.php b/upload/language/ru/main.php index cd140982d..8c6d3f859 100644 --- a/upload/language/ru/main.php +++ b/upload/language/ru/main.php @@ -778,6 +778,7 @@ $lang['POST_RELEASE_FROM_GROUP'] = 'Создать релиз от группы' $lang['CHOOSE_RELEASE_GROUP'] = 'Выбрать релиз группу'; $lang['ATTACH_RG_SIG'] = 'Добавить подпись релиз группы'; $lang['RELEASE_FROM_RG'] = 'Релиз подготовлен'; +$lang['GROUPS_RELEASES'] = 'Релизы группы'; // // Search diff --git a/upload/language/ua/main.php b/upload/language/ua/main.php index fb5b9cd84..f9222b787 100644 --- a/upload/language/ua/main.php +++ b/upload/language/ua/main.php @@ -778,6 +778,7 @@ $lang['POST_RELEASE_FROM_GROUP'] = 'Создать релиз от группы' $lang['CHOOSE_RELEASE_GROUP'] = 'Выбрать релиз группу'; $lang['ATTACH_RG_SIG'] = 'Добавить подпись релиз группы'; $lang['RELEASE_FROM_RG'] = 'Релиз подготовлен'; +$lang['GROUPS_RELEASES'] = 'Релизы групи'; // // Search diff --git a/upload/templates/default/groupcp.tpl b/upload/templates/default/groupcp.tpl index 83760cc52..1732aa940 100644 --- a/upload/templates/default/groupcp.tpl +++ b/upload/templates/default/groupcp.tpl @@ -93,12 +93,15 @@ {L_GROUP_GOTO_CONFIG} +
+ +
{S_HIDDEN_FIELDS} @@ -241,8 +244,52 @@ - +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#{L_AVATAR}{L_USERNAME}{L_TOPIC}{L_FORUM}{L_BT_CREATED}
{L_GROUPS_RELEASES}
{releases.ROW_NUMBER}{releases.AVATAR_IMG}{releases.RELEASER}{releases.RELEASE_NAME}{releases.RELEASE_FORUM}{releases.RELEASE_TIME}
 
+ +
+ + + +
+