diff -r e3d7322305bf -r 5e1f1e916419 punbb/admin/groups.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/punbb/admin/groups.php Sat Apr 05 23:56:45 2008 -0400 @@ -0,0 +1,738 @@ + $_ ) +{ + $$key =& $GLOBALS[$key]; +} + +($hook = get_hook('agr_start')) ? eval($hook) : null; + +if ($session->user_level < USER_LEVEL_ADMIN) + message($lang_common['No permission']); + +// Load the admin.php language file +require PUN_ROOT.'lang/'.$pun_user['language'].'/admin.php'; +$GLOBALS['lang_admin'] = $lang_admin; + + +// Add/edit a group (stage 1) +if (isset($_POST['add_group']) || isset($_GET['edit_group'])) +{ + if (isset($_POST['add_group'])) + { + ($hook = get_hook('agr_add_group_form_submitted')) ? eval($hook) : null; + + $base_group = intval($_POST['base_group']); + + $query = array( + 'SELECT' => 'g.*', + 'FROM' => 'groups AS g', + 'WHERE' => 'g.g_id='.$base_group + ); + + ($hook = get_hook('agr_qr_get_base_group')) ? eval($hook) : null; + $result = $pun_db->query_build($query) or error(__FILE__, __LINE__); + $group = $pun_db->fetch_assoc($result); + + $mode = 'add'; + } + else // We are editing a group + { + ($hook = get_hook('agr_edit_group_form_submitted')) ? eval($hook) : null; + + $group_id = intval($_GET['edit_group']); + if ($group_id < 1) + message($lang_common['Bad request']); + + $query = array( + 'SELECT' => 'g.*', + 'FROM' => 'groups AS g', + 'WHERE' => 'g.g_id='.$group_id + ); + + ($hook = get_hook('agr_qr_get_group')) ? eval($hook) : null; + $result = $pun_db->query_build($query) or error(__FILE__, __LINE__); + if (!$pun_db->num_rows($result)) + message($lang_common['Bad request']); + + $group = $pun_db->fetch_assoc($result); + + $mode = 'edit'; + } + + // Setup the form + $pun_page['part_count'] = $pun_page['fld_count'] = $pun_page['set_count'] = 0; + + // Setup breadcrumbs + $pun_page['crumbs'] = array( + array($pun_config['o_board_title'], pun_link($pun_url['index'])), + array($lang_admin['Forum administration'], pun_link($pun_url['admin_index'])), + array($lang_admin['Groups'], pun_link($pun_url['admin_groups'])), + $mode == 'edit' ? $lang_admin['Edit group heading'] : $lang_admin['Add group heading'] + ); + + ($hook = get_hook('agr_add_edit_group_pre_header_load')) ? eval($hook) : null; + + define('PUN_PAGE_SECTION', 'users'); + define('PUN_PAGE', 'admin-groups'); + require PUN_ROOT.'header.php'; + +?> +
+ + + + +
+

{ }

+
+ +
+
+

+
+
+

'.$lang_common['Required'].'') ?>

+
+
+ + +
+

+
+ +
+ +
+
+ +
+ +
+ +
+ +
+

+
+

+
+
+ +
+ +
+
+
+
+
+
+
+ +

+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+

+
+ +
+ +
+
+ +
+
+ +
+ +
+ +
+ +
+
+
+
+ +
+escape($user_title).'\'' : 'NULL'; + + if ($_POST['mode'] == 'add') + { + ($hook = get_hook('agr_add_group_form_submitted2')) ? eval($hook) : null; + + $query = array( + 'SELECT' => '1', + 'FROM' => 'groups AS g', + 'WHERE' => 'g_title=\''.$pun_db->escape($title).'\'' + ); + + ($hook = get_hook('agr_qr_check_group_title_collision')) ? eval($hook) : null; + $result = $pun_db->query_build($query) or error(__FILE__, __LINE__); + if ($pun_db->num_rows($result)) + message(sprintf($lang_admin['Already a group message'], htmlspecialchars($title))); + + // Insert the new group + $query = array( + 'INSERT' => 'g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_edit_subjects_interval, g_post_flood, g_search_flood', + 'INTO' => 'groups', + 'VALUES' => '\''.$pun_db->escape($title).'\', '.$user_title.', '.$moderator.', '.$mod_edit_users.', '.$mod_rename_users.', '.$mod_change_passwords.', '.$mod_ban_users.', '.$read_board.', '.$view_users.', '.$post_replies.', '.$post_topics.', '.$edit_posts.', '.$delete_posts.', '.$delete_topics.', '.$set_title.', '.$search.', '.$search_users.', '.$edit_subjects_interval.', '.$post_flood.', '.$search_flood + ); + + ($hook = get_hook('agr_qy_add_group')) ? eval($hook) : null; + $pun_db->query_build($query) or error(__FILE__, __LINE__); + $new_group_id = $pun_db->insert_id(); + + // Now lets copy the forum specific permissions from the group which this group is based on + $query = array( + 'SELECT' => 'fp.forum_id, fp.read_forum, fp.post_replies, fp.post_topics', + 'FROM' => 'forum_perms AS fp', + 'WHERE' => 'group_id='.intval($_POST['base_group']) + ); + + ($hook = get_hook('agr_qr_get_group_forum_perms')) ? eval($hook) : null; + $result = $pun_db->query_build($query) or error(__FILE__, __LINE__); + while ($cur_forum_perm = $pun_db->fetch_assoc($result)) + { + $query = array( + 'INSERT' => 'group_id, forum_id, read_forum, post_replies, post_topics', + 'INTO' => 'forum_perms', + 'VALUES' => $new_group_id.', '.$cur_forum_perm['forum_id'].', '.$cur_forum_perm['read_forum'].', '.$cur_forum_perm['post_replies'].', '.$cur_forum_perm['post_topics'] + ); + + ($hook = get_hook('agr_qy_add_group_forum_perms')) ? eval($hook) : null; + $pun_db->query_build($query) or error(__FILE__, __LINE__); + } + } + else + { + $group_id = intval($_POST['group_id']); + + ($hook = get_hook('agr_edit_group_form_submitted2')) ? eval($hook) : null; + + // Make sure admins and guests don't get moderator privileges + if ($group_id == PUN_ADMIN || $group_id == PUN_GUEST) + $moderator = '0'; + + // Make sure the default group isn't assigned moderator privileges + if ($moderator == '1' && $pun_config['o_default_user_group'] == $group_id) + message($lang_admin['Moderator default group']); + + $query = array( + 'SELECT' => '1', + 'FROM' => 'groups AS g', + 'WHERE' => 'g_title=\''.$pun_db->escape($title).'\' AND g_id!='.$group_id + ); + + ($hook = get_hook('agr_qr_check_group_title_collision2')) ? eval($hook) : null; + $result = $pun_db->query_build($query) or error(__FILE__, __LINE__); + if ($pun_db->num_rows($result)) + message(sprintf($lang_admin['Already a group message'], htmlspecialchars($title))); + + // Save changes + $query = array( + 'UPDATE' => 'groups', + 'SET' => 'g_title=\''.$pun_db->escape($title).'\', g_user_title='.$user_title.', g_moderator='.$moderator.', g_mod_edit_users='.$mod_edit_users.', g_mod_rename_users='.$mod_rename_users.', g_mod_change_passwords='.$mod_change_passwords.', g_mod_ban_users='.$mod_ban_users.', g_read_board='.$read_board.', g_view_users='.$view_users.', g_post_replies='.$post_replies.', g_post_topics='.$post_topics.', g_edit_posts='.$edit_posts.', g_delete_posts='.$delete_posts.', g_delete_topics='.$delete_topics.', g_set_title='.$set_title.', g_search='.$search.', g_search_users='.$search_users.', g_edit_subjects_interval='.$edit_subjects_interval.', g_post_flood='.$post_flood.', g_search_flood='.$search_flood, + 'WHERE' => 'g_id='.$group_id + ); + + ($hook = get_hook('agr_qy_update_group')) ? eval($hook) : null; + $pun_db->query_build($query) or error(__FILE__, __LINE__); + + // If the group doesn't have moderator privileges (it might have had before), remove its users from the moderator list in all forums + if (!$moderator) + clean_forum_moderators(); + } + + // Regenerate the quickjump cache + require_once PUN_ROOT.'include/cache.php'; + generate_quickjump_cache(); + + pun_redirect(pun_link($pun_url['admin_groups']), (($_POST['mode'] == 'edit') ? $lang_admin['Group edited'] : $lang_admin['Group added']).' '.$lang_admin['Redirect']); +} + + +// Set default group +else if (isset($_POST['set_default_group'])) +{ + $group_id = intval($_POST['default_group']); + + ($hook = get_hook('agr_set_default_group_form_submitted')) ? eval($hook) : null; + + // Make sure it's not the admin or guest groups + if ($group_id == PUN_ADMIN || $group_id == PUN_GUEST) + message($lang_common['Bad request']); + + // Make sure it's not a moderator group + $query = array( + 'SELECT' => 'g.g_id', + 'FROM' => 'groups AS g', + 'WHERE' => 'g.g_id='.$group_id.' AND g.g_moderator=0', + 'LIMIT' => '1' + ); + + ($hook = get_hook('agr_qr_get_group_moderation_status')) ? eval($hook) : null; + $result = $pun_db->query_build($query) or error(__FILE__, __LINE__); + if (!$pun_db->num_rows($result)) + message($lang_common['Bad request']); + + $query = array( + 'UPDATE' => 'config', + 'SET' => 'conf_value='.$group_id, + 'WHERE' => 'conf_name=\'o_default_user_group\'' + ); + + ($hook = get_hook('agr_qy_set_default_group')) ? eval($hook) : null; + $pun_db->query_build($query) or error(__FILE__, __LINE__); + + // Regenerate the config cache + require_once PUN_ROOT.'include/cache.php'; + generate_config_cache(); + + pun_redirect(pun_link($pun_url['admin_groups']), $lang_admin['Default group set'].' '.$lang_admin['Redirect']); +} + + +// Remove a group +else if (isset($_GET['del_group'])) +{ + $group_id = intval($_GET['del_group']); + if ($group_id < 4) + message($lang_common['Bad request']); + + // User pressed the cancel button + if (isset($_POST['del_group_cancel'])) + pun_redirect(pun_link($pun_url['admin_groups']), $lang_admin['Cancel redirect']); + + // Make sure we don't remove the default group + if ($group_id == $pun_config['o_default_user_group']) + message($lang_admin['Cannot remove default group']); + + ($hook = get_hook('agr_del_group_selected')) ? eval($hook) : null; + + + // Check if this group has any members + $query = array( + 'SELECT' => 'g.g_title, COUNT(u.id)', + 'FROM' => 'groups AS g', + 'JOINS' => array( + array( + 'INNER JOIN' => 'users AS u', + 'ON' => 'g.g_id=u.group_id' + ) + ), + 'WHERE' => 'g.g_id='.$group_id, + 'GROUP BY' => 'g.g_id, g.g_title' + ); + + ($hook = get_hook('agr_qr_get_group_member_count')) ? eval($hook) : null; + $result = $pun_db->query_build($query) or error(__FILE__, __LINE__); + + // If the group doesn't have any members or if we've already selected a group to move the members to + if (!$pun_db->num_rows($result) || isset($_POST['del_group'])) + { + ($hook = get_hook('agr_del_group_form_submitted')) ? eval($hook) : null; + + if (isset($_POST['del_group'])) // Move users + { + $query = array( + 'UPDATE' => 'users', + 'SET' => 'group_id='.intval($_POST['move_to_group']), + 'WHERE' => 'group_id='.$group_id + ); + + ($hook = get_hook('agr_qy_move_users')) ? eval($hook) : null; + $pun_db->query_build($query) or error(__FILE__, __LINE__); + } + + // Delete the group and any forum specific permissions + $query = array( + 'DELETE' => 'groups', + 'WHERE' => 'g_id='.$group_id + ); + + ($hook = get_hook('agr_qy_delete_group')) ? eval($hook) : null; + $pun_db->query_build($query) or error(__FILE__, __LINE__); + + $query = array( + 'DELETE' => 'forum_perms', + 'WHERE' => 'group_id='.$group_id + ); + + ($hook = get_hook('agr_qy_delete_group_forum_perms')) ? eval($hook) : null; + $pun_db->query_build($query) or error(__FILE__, __LINE__); + + clean_forum_moderators(); + + // Regenerate the quickjump cache + require_once PUN_ROOT.'include/cache.php'; + generate_quickjump_cache(); + + pun_redirect(pun_link($pun_url['admin_groups']), $lang_admin['Group removed'].' '.$lang_admin['Redirect']); + } + + list($group_title, $num_members) = $pun_db->fetch_row($result); + + + // Setup the form + $pun_page['part_count'] = $pun_page['fld_count'] = $pun_page['set_count'] = 0; + + // Setup breadcrumbs + $pun_page['crumbs'] = array( + array($pun_config['o_board_title'], pun_link($pun_url['index'])), + array($lang_admin['Forum administration'], pun_link($pun_url['admin_index'])), + array($lang_admin['Groups'], pun_link($pun_url['admin_groups'])), + $lang_admin['Remove group'] + ); + + ($hook = get_hook('agr_del_group_pre_header_load')) ? eval($hook) : null; + + define('PUN_PAGE_SECTION', 'users'); + define('PUN_PAGE', 'admin-groups'); + require PUN_ROOT.'header.php'; + +?> +
+ + + +
+

{ }

+
+ +
+
+

+
+
+ +
+ +
+ +
+
+
+ + +
+
+
+ +
+ +
+ + + +
+

{ }

+
+ +
+
+

+
+
+ +
+ +
+ +
+
+
+ +
+
+
+ +
+
+

+
+
+ +
+ +
+ +
+
+
+ +
+
+
+
+
+

+
+
+

+
+
+ 'g.g_id, g.g_title', + 'FROM' => 'groups AS g', + 'ORDER BY' => 'g.g_title' +); + +($hook = get_hook('agr_qr_get_groups4')) ? eval($hook) : null; +$result = $pun_db->query_build($query) or error(__FILE__, __LINE__); +$pun_page['item_num'] = 0; +while ($cur_group = $pun_db->fetch_assoc($result)) +{ + +?> + + +
+
+ +
+