diff options
author | Paul S. Owen <psotfx@users.sourceforge.net> | 2002-02-28 23:50:15 +0000 |
---|---|---|
committer | Paul S. Owen <psotfx@users.sourceforge.net> | 2002-02-28 23:50:15 +0000 |
commit | cbc1e854b540977ae21e942e657a38ea9fb3c6c6 (patch) | |
tree | 54f14f534b3940745ff27d12f8cdefe7f050ee10 | |
parent | 155f3beff06fc08b9a2641d4564608feb5c24355 (diff) | |
download | forums-cbc1e854b540977ae21e942e657a38ea9fb3c6c6.tar forums-cbc1e854b540977ae21e942e657a38ea9fb3c6c6.tar.gz forums-cbc1e854b540977ae21e942e657a38ea9fb3c6c6.tar.bz2 forums-cbc1e854b540977ae21e942e657a38ea9fb3c6c6.tar.xz forums-cbc1e854b540977ae21e942e657a38ea9fb3c6c6.zip |
Right, let's see what I broke during the re-write ... this should be 'all singing - all dancing', handles updating moderator for user and group changes, switches to advanced mode appropriately, reduces numbers of queries done for multiple updates, etc.
git-svn-id: file:///svn/phpbb/trunk@2225 89ea8834-ac86-4346-8a33-228a782c2dd0
-rw-r--r-- | phpBB/admin/admin_ug_auth.php | 892 |
1 files changed, 892 insertions, 0 deletions
diff --git a/phpBB/admin/admin_ug_auth.php b/phpBB/admin/admin_ug_auth.php new file mode 100644 index 0000000000..05e151e576 --- /dev/null +++ b/phpBB/admin/admin_ug_auth.php @@ -0,0 +1,892 @@ +<?php +/*************************************************************************** + * admin_userauth.php + * ------------------- + * begin : Saturday, Feb 13, 2001 + * copyright : (C) 2001 The phpBB Group + * email : support@phpbb.com + * + * $Id$ + * + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +if( !empty($setmodules) ) +{ + $filename = basename(__FILE__); + $module['Users']['Permissions'] = $filename . "?mode=user"; + $module['Groups']['Permissions'] = $filename . "?mode=group"; + + return; +} + +// +// Load default header +// +$phpbb_root_dir = "./../"; +$no_page_header = TRUE; +require('pagestart.inc'); + +$params = array('mode' => 'mode', 'user_id' => POST_USERS_URL, 'group_id' => POST_GROUPS_URL, 'adv' => 'adv'); + +while( list($var, $param) = @each($params) ) +{ + if ( !empty($HTTP_POST_VARS[$param]) || !empty($HTTP_GET_VARS[$param]) ) + { + $$var = ( !empty($HTTP_POST_VARS[$param]) ) ? $HTTP_POST_VARS[$param] : $HTTP_GET_VARS[$param]; + } + else + { + $$var = ""; + } +} + +// +// Start program - define vars +// +$forum_auth_fields = array("auth_view", "auth_read", "auth_post", "auth_reply", "auth_edit", "auth_delete", "auth_sticky", "auth_announce", "auth_vote", "auth_pollcreate"); + +$auth_field_match = array( + "auth_view" => AUTH_VIEW, + "auth_read" => AUTH_READ, + "auth_post" => AUTH_POST, + "auth_reply" => AUTH_REPLY, + "auth_edit" => AUTH_EDIT, + "auth_delete" => AUTH_DELETE, + "auth_sticky" => AUTH_STICKY, + "auth_announce" => AUTH_ANNOUNCE, + "auth_vote" => AUTH_VOTE, + "auth_pollcreate" => AUTH_POLLCREATE); + +$field_names = array( + "auth_view" => $lang['View'], + "auth_read" => $lang['Read'], + "auth_post" => $lang['Post'], + "auth_reply" => $lang['Reply'], + "auth_edit" => $lang['Edit'], + "auth_delete" => $lang['Delete'], + "auth_sticky" => $lang['Sticky'], + "auth_announce" => $lang['Announce'], + "auth_vote" => $lang['Vote'], + "auth_pollcreate" => $lang['Pollcreate']); + +// --------------- +// Start Functions +// +function check_auth($type, $key, $u_access, $is_admin) +{ + $auth_user = 0; + + if( count($u_access) ) + { + for($j = 0; $j < count($u_access); $j++) + { + $result = 0; + switch($type) + { + case AUTH_ACL: + $result = $u_access[$j][$key]; + + case AUTH_MOD: + $result = $result || $u_access[$j]['auth_mod']; + + case AUTH_ADMIN: + $result = $result || $is_admin; + break; + } + + $auth_user = $auth_user || $result; + } + } + else + { + $auth_user = $is_admin; + } + + return $auth_user; +} +// +// End Functions +// ------------- + +if ( isset($HTTP_POST_VARS['submit']) && ( ( $mode == "user" && $user_id ) || ( $mode == "group" && $group_id ) ) ) +{ + $user_level = ""; + if ( $mode == "user" ) + { + // + // Get group_id for this user_id + // + $sql = "SELECT g.group_id, u.user_level + FROM " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u, " . GROUPS_TABLE . " g + WHERE u.user_id = $user_id + AND ug.user_id = u.user_id + AND g.group_id = ug.group_id + AND g.group_single_user = " . TRUE; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't select info from user/user_group table", "", __LINE__, __FILE__, $sql); + } + + $row = $db->sql_fetchrow($result); + + $group_id = $row['group_id']; + $user_level = $row['user_level']; + + $db->sql_freeresult($result); + } + + // + // Carry out requests + // + if ( $mode == "user" && $HTTP_POST_VARS['userlevel'] == "user" && $user_level == ADMIN ) + { + // + // Make admin a user (if already admin) ... ignore if you're trying + // to change yourself from an admin to user! + // + if ( $userdata['user_id'] != $user_id ) + { + $sql = "UPDATE " . AUTH_ACCESS_TABLE . " + SET auth_view = 0, auth_read = 0, auth_post = 0, auth_reply = 0, auth_edit = 0, auth_delete = 0, auth_sticky = 0, auth_announce = 0 + WHERE group_id = $group_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update auth access", "", __LINE__, __FILE__, $sql); + } + + // + // Update users level, reset to USER + // + $sql = "UPDATE " . USERS_TABLE . " + SET user_level = " . USER . " + WHERE user_id = $user_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql); + } + } + + header("Location: " . append_sid("admin_ug_auth?" . POST_USERS_URL . "=$user_id", true)); + exit; + } + else if ( $mode == "user" && $HTTP_POST_VARS['userlevel'] == "admin" && $user_level != ADMIN ) + { + // + // Make user an admin (if already user) + // + if ( $userdata['user_id'] != $user_id ) + { + $sql = "UPDATE " . USERS_TABLE . " + SET user_level = " . ADMIN . " + WHERE user_id = $user_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql); + } + + $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . " + WHERE group_id = $group_id + AND auth_mod = 0"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't delete auth access info", "", __LINE__, __FILE__, $sql); + } + + // + // Delete any entries in auth_access, they are not required if user is becoming an + // admin + // + $sql = "UPDATE " . AUTH_ACCESS_TABLE . " + SET auth_view = 0, auth_read = 0, auth_post = 0, auth_reply = 0, auth_edit = 0, auth_delete = 0, auth_sticky = 0, auth_announce = 0 + WHERE group_id = $group_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update auth access", "", __LINE__, __FILE__, $sql); + } + } + + header("Location: " . append_sid("admin_ug_auth?" . POST_USERS_URL . "=$user_id", true)); + exit; + } + else + { + $change_mod_list = ( isset($HTTP_POST_VARS['moderator']) ) ? $HTTP_POST_VARS['moderator'] : false; + + if ( empty($adv) ) + { + $change_acl_list = ( isset($HTTP_POST_VARS['private']) ) ? $HTTP_POST_VARS['private'] : false; + } + else + { + $change_acl_list = array(); + for($j = 0; $j < count($forum_auth_fields); $j++) + { + $auth_field = $forum_auth_fields[$j]; + + while( list($forum_id, $value) = @each($HTTP_POST_VARS['private_' . $auth_field]) ) + { + $change_acl_list[$forum_id][$auth_field] = $value; + } + } + } + + $sql = "SELECT * + FROM " . FORUMS_TABLE . " f + ORDER BY forum_order"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql); + } + + $forum_access = array(); + while( $row = $db->sql_fetchrow($result) ) + { + $forum_access[] = $row; + } + $db->sql_freeresult($result); + + $sql = ( $mode == 'user' ) ? "SELECT aa.* FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE. " g WHERE ug.user_id = $user_id AND g.group_id = ug.group_id AND aa.group_id = ug.group_id AND g.group_single_user = " . TRUE : "SELECT * FROM " . AUTH_ACCESS_TABLE . " WHERE group_id = $group_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql); + } + + $auth_access = array(); + while( $row = $db->sql_fetchrow($result) ) + { + $auth_access[$row['forum_id']] = $row; + } + $db->sql_freeresult($result); + + $forum_auth_action = array(); + $update_acl_status = array(); + $update_mod_status = array(); + + for($i = 0; $i < count($forum_access); $i++) + { + $forum_id = $forum_access[$i]['forum_id']; + + if ( + ( isset($auth_access[$forum_id]['auth_mod']) && $change_mod_list[$forum_id]['auth_mod'] != $auth_access[$forum_id]['auth_mod'] ) || + ( !isset($auth_access[$forum_id]['auth_mod']) && !empty($change_mod_list[$forum_id]['auth_mod']) ) + ) + { + $update_mod_status[$forum_id] = $change_mod_list[$forum_id]['auth_mod']; + + if ( !$update_mod_status[$forum_id] ) + { + $forum_auth_action[$forum_id] = 'delete'; + } + else if ( !isset($auth_access[$forum_id]['auth_mod']) ) + { + $forum_auth_action[$forum_id] = 'insert'; + } + else + { + $forum_auth_action[$forum_id] = 'update'; + } + } + + for($j = 0; $j < count($forum_auth_fields); $j++) + { + $auth_field = $forum_auth_fields[$j]; + + if( $forum_access[$i][$auth_field] == AUTH_ACL && isset($change_acl_list[$forum_id][$auth_field]) ) + { + if ( ( empty($auth_access[$forum_id]['auth_mod']) && + ( isset($auth_access[$forum_id][$auth_field]) && $change_acl_list[$forum_id][$auth_field] != $auth_access[$forum_id][$auth_field] ) || + ( !isset($auth_access[$forum_id][$auth_field]) && !empty($change_acl_list[$forum_id][$auth_field]) ) ) || + !empty($update_mod_status[$forum_id]) + ) + { + $update_acl_status[$forum_id][$auth_field] = ( !empty($update_mod_status[$forum_id]) ) ? 0 : $change_acl_list[$forum_id][$auth_field]; + + if ( isset($auth_access[$forum_id][$auth_field]) && empty($update_acl_status[$forum_id][$auth_field]) && $forum_auth_action[$forum_id] != 'insert' && $forum_auth_action[$forum_id] != 'update' ) + { + $forum_auth_action[$forum_id] = 'delete'; + } + else if ( !isset($auth_access[$forum_id][$auth_field]) && !( $forum_auth_action[$forum_id] == 'delete' && empty($update_acl_status[$forum_id][$auth_field]) ) ) + { + $forum_auth_action[$forum_id] = 'insert'; + } + else if ( isset($auth_access[$forum_id][$auth_field]) && !empty($update_acl_status[$forum_id][$auth_field]) ) + { + $forum_auth_action[$forum_id] = 'update'; + } + } + else if ( ( empty($auth_access[$forum_id]['auth_mod']) && + ( isset($auth_access[$forum_id][$auth_field]) && $change_acl_list[$forum_id][$auth_field] == $auth_access[$forum_id][$auth_field] ) ) && $forum_auth_action[$forum_id] == 'delete' ) + { + $forum_auth_action[$forum_id] = 'update'; + } + } + } + } + + // + // Checks complete, make updates to DB + // + $delete_sql = ""; + while( list($forum_id, $action) = @each($forum_auth_action) ) + { + if ( $action == 'delete' ) + { + $delete_sql .= ( ( $delete_sql != "" ) ? ", " : "" ) . $forum_id; + } + else + { + if ( $action == 'insert' ) + { + $sql_field = ""; + $sql_value = ""; + while ( list($auth_type, $value) = @each($update_acl_status[$forum_id]) ) + { + $sql_field .= ( ( $sql_field != "" ) ? ", " : "" ) . $auth_type; + $sql_value .= ( ( $sql_value != "" ) ? ", " : "" ) . $value; + } + $sql_field .= ( ( $sql_field != "" ) ? ", " : "" ) . 'auth_mod'; + $sql_value .= ( ( $sql_value != "" ) ? ", " : "" ) . ( ( !isset($update_mod_status[$forum_id]) ) ? 0 : $update_mod_status[$forum_id]); + + $sql = "INSERT INTO " . AUTH_ACCESS_TABLE . " (forum_id, group_id, $sql_field) + VALUES ($forum_id, $group_id, $sql_value)"; + } + else + { + $sql_values = ""; + while ( list($auth_type, $value) = @each($update_acl_status[$forum_id]) ) + { + $sql_values .= ( ( $sql_values != "" ) ? ", " : "" ) . $auth_type . " = " . $value; + } + $sql_values .= ( ( $sql_values != "" ) ? ", " : "" ) . "auth_mod = " . ( ( !isset($update_mod_status[$forum_id]) ) ? 0 : $update_mod_status[$forum_id]); + + $sql = "UPDATE " . AUTH_ACCESS_TABLE . " + SET $sql_values + WHERE group_id = $group_id + AND forum_id = $forum_id"; + } + if( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update private forum permissions", "", __LINE__, __FILE__, $sql); + } + } + } + + if ( $delete_sql != "" ) + { + $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . " + WHERE group_id = $group_id + AND forum_id IN ($delete_sql)"; + if( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't delete permission entries", "", __LINE__, __FILE__, $sql); + } + } + + // + // Update user level to mod for appropriate users + // + $sql = "SELECT u.user_id, SUM(aa.auth_mod) AS mod + FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u + WHERE ug.group_id = aa.group_id + AND u.user_id = ug.user_id + AND u.user_level NOT IN (" . MOD . ", " . ADMIN . ") + GROUP BY u.user_id + HAVING mod > 0"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql); + } + + $set_mod = ""; + while( $row = $db->sql_fetchrow($result) ) + { + $set_mod .= ( ( $set_mod != "" ) ? ", " : "" ) . $row['user_id']; + } + $db->sql_freeresult($result); + + // + // Update user level to user for appropriate users + // + $sql = "SELECT u.user_id, SUM(aa.auth_mod) AS mod + FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u + WHERE ug.group_id = aa.group_id + AND u.user_id = ug.user_id + AND u.user_level NOT IN (" . USER . ", " . ADMIN . ") + GROUP BY u.user_id + HAVING mod = 0"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql); + } + + $unset_mod = ""; + while( $row = $db->sql_fetchrow($result) ) + { + $unset_mod .= ( ( $unset_mod != "" ) ? ", " : "" ) . $row['user_id']; + } + $db->sql_freeresult($result); + + if ( $set_mod != "" ) + { + $sql = "UPDATE " . USERS_TABLE . " + SET user_level = " . MOD . " + WHERE user_id IN ($set_mod)"; + if( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql); + } + } + + if ( $unset_mod != "" ) + { + $sql = "UPDATE " . USERS_TABLE . " + SET user_level = " . USER . " + WHERE user_id IN ($unset_mod)"; + if( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql); + } + } + + $l_auth_return = ( $mode == 'user' ) ? $lang['Click_return_userauth'] : $lang['Click_return_groupauth']; + $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($l_auth_return, '<a href="' . append_sid("admin_ug_auth?mode=$mode") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>'); + message_die(GENERAL_MESSAGE, $message); + } +} +else if ( ( $mode == 'user' && ( isset($HTTP_POST_VARS['username']) || $user_id ) ) || ( $mode == 'group' && $group_id ) ) +{ + if ( isset($HTTP_POST_VARS['username']) ) + { + $this_userdata = get_userdata($HTTP_POST_VARS['username']); + if ( !is_array($this_userdata) ) + { + message_die(GENERAL_MESSAGE, $lang['No_such_user']); + } + $user_id = $this_userdata['user_id']; + } + + // + // Front end + // + $sql = "SELECT * + FROM " . FORUMS_TABLE . " f + ORDER BY forum_order"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql); + } + + $forum_access = array(); + while( $row = $db->sql_fetchrow($result) ) + { + $forum_access[] = $row; + } + $db->sql_freeresult($result); + + if( empty($adv) ) + { + for($i = 0; $i < count($forum_access); $i++) + { + $forum_id = $forum_access[$i]['forum_id']; + + $forum_auth_level[$forum_id] = AUTH_ALL; + + for($j = 0; $j < count($forum_auth_fields); $j++) + { + $forum_access[$i][$forum_auth_fields[$j]] . " :: "; + if ( $forum_access[$i][$forum_auth_fields[$j]] == AUTH_ACL ) + { + $forum_auth_level[$forum_id] = AUTH_ACL; + $forum_auth_level_fields[$forum_id][] = $forum_auth_fields[$j]; + } + } + } + } + + $sql = "SELECT u.user_id, u.username, u.user_level, g.group_id, g.group_name, g.group_single_user FROM " . USERS_TABLE . " u, " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug WHERE "; + $sql .= ( $mode == 'user' ) ? "u.user_id = $user_id AND ug.user_id = u.user_id AND g.group_id = ug.group_id" : "g.group_id = $group_id AND ug.group_id = g.group_id AND u.user_id = ug.user_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain user/group information", "", __LINE__, __FILE__, $sql); + } + $ug_info = array(); + while( $row = $db->sql_fetchrow($result) ) + { + $ug_info[] = $row; + } + $db->sql_freeresult($result); + + $sql = ( $mode == 'user' ) ? "SELECT aa.*, g.group_single_user FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE. " g WHERE ug.user_id = $user_id AND g.group_id = ug.group_id AND aa.group_id = ug.group_id AND g.group_single_user = 1" : "SELECT * FROM " . AUTH_ACCESS_TABLE . " WHERE group_id = $group_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql); + } + + $auth_access = array(); + $auth_access_count = array(); + while( $row = $db->sql_fetchrow($result) ) + { + $auth_access[$row['forum_id']][] = $row; + $auth_access_count[$row['forum_id']]++; + } + $db->sql_freeresult($result); + + $is_admin = ( $mode == 'user' ) ? ( ( $ug_info[0]['user_level'] == ADMIN && $ug_info[0]['user_id'] != ANONYMOUS ) ? 1 : 0 ) : 0; + + for($i = 0; $i < count($forum_access); $i++) + { + $forum_id = $forum_access[$i]['forum_id']; + + unset($prev_acl_setting); + for($j = 0; $j < count($forum_auth_fields); $j++) + { + $key = $forum_auth_fields[$j]; + $value = $forum_access[$i][$key]; + + switch( $value ) + { + case AUTH_ALL: + case AUTH_REG: + $auth_ug[$forum_id][$key] = 1; + break; + + case AUTH_ACL: + $auth_ug[$forum_id][$key] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_ACL, $key, $auth_access[$forum_id], $is_admin) : 0; + $auth_field_acl[$forum_id][$key] = $auth_ug[$forum_id][$key]; + + if ( isset($prev_acl_setting) ) + { + if ( $prev_acl_setting != $auth_ug[$forum_id][$key] && empty($adv) ) + { + $adv = 1; + } + } + + $prev_acl_setting = $auth_ug[$forum_id][$key]; + + break; + + case AUTH_MOD: + $auth_ug[$forum_id][$key] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_MOD, $key, $auth_access[$forum_id], $is_admin) : 0; + break; + + case AUTH_ADMIN: + $auth_ug[$forum_id][$key] = $is_admin; + break; + + default: + $auth_ug[$forum_id][$key] = 0; + break; + } + } + + // + // Is user a moderator? + // + $auth_ug[$forum_id]['auth_mod'] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_MOD, 'auth_mod', $auth_access[$forum_id], 0) : 0; + } + + $i = 0; + @reset($auth_ug); + while( list($forum_id, $user_ary) = @each($auth_ug) ) + { + if ( empty($adv) ) + { + if ( $forum_auth_level[$forum_id] == AUTH_ACL ) + { + $allowed = 1; + + for($j = 0; $j < count($forum_auth_level_fields[$forum_id]); $j++) + { + if ( !$auth_ug[$forum_id][$forum_auth_level_fields[$forum_id][$j]] ) + { + $allowed = 0; + } + } + + $optionlist_acl = '<select name="private[' . $forum_id . ']">'; + + if ( $is_admin || $user_ary['auth_mod'] ) + { + $optionlist_acl .= '<option value="1">' . $lang['Allowed_Access'] . '</option>'; + } + else if ( $allowed ) + { + $optionlist_acl .= '<option value="1" selected="selected">' . $lang['Allowed_Access'] . '</option><option value="0">'. $lang['Disallowed_Access'] . '</option>'; + } + else + { + $optionlist_acl .= '<option value="1">' . $lang['Allowed_Access'] . '</option><option value="0" selected="selected">' . $lang['Disallowed_Access'] . '</option>'; + } + + $optionlist_acl .= '</select>'; + } + else + { + $optionlist_acl = ' '; + } + } + else + { + for($j = 0; $j < count($forum_access); $j++) + { + if ( $forum_access[$j]['forum_id'] == $forum_id ) + { + for($k = 0; $k < count($forum_auth_fields); $k++) + { + $field_name = $forum_auth_fields[$k]; + + if( $forum_access[$j][$field_name] == AUTH_ACL ) + { + $optionlist_acl_adv[$forum_id][$k] = '<select name="private_' . $field_name . '[' . $forum_id . ']">'; + + if( isset($auth_field_acl[$forum_id][$field_name]) && !($is_admin || $user_ary['auth_mod']) ) + { + if( !$auth_field_acl[$forum_id][$field_name] ) + { + $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option><option value="0" selected="selected">' . $lang['OFF'] . '</option>'; + } + else + { + $optionlist_acl_adv[$forum_id][$k] .= '<option value="1" selected="selected">' . $lang['ON'] . '</option><option value="0">' . $lang['OFF'] . '</option>'; + } + } + else + { + if( $is_admin || $user_ary['auth_mod'] ) + { + $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option>'; + } + else + { + $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option><option value="0" selected="selected">' . $lang['OFF'] . '</option>'; + } + } + + $optionlist_acl_adv[$forum_id][$k] .= '</select>'; + + } + } + } + } + } + + $optionlist_mod = '<select name="moderator[' . $forum_id . ']">'; + $optionlist_mod .= ( $user_ary['auth_mod'] ) ? '<option value="1" selected="selected">' . $lang['Is_Moderator'] . '</option><option value="0">' . $lang['Not_Moderator'] . '</option>' : '<option value="1">' . $lang['Is_Moderator'] . '</option><option value="0" selected="selected">' . $lang['Not_Moderator'] . '</option>'; + $optionlist_mod .= '</select>'; + + $row_class = ( !( $i % 2 ) ) ? "row2" : "row1"; + $row_color = ( !( $i % 2 ) ) ? $theme['td_color1'] : $theme['td_color2']; + + $template->assign_block_vars("forums", array( + "ROW_COLOR" => "#" . $row_color, + "ROW_CLASS" => $row_class, + "FORUM_NAME" => $forum_access[$i]['forum_name'], + + "U_FORUM_AUTH" => append_sid("admin_forumauth.$phpEx?f=" . $forum_access[$i]['forum_id']), + + "S_MOD_SELECT" => $optionlist_mod) + ); + + if( !$adv ) + { + $template->assign_block_vars("forums.aclvalues", array( + "S_ACL_SELECT" => $optionlist_acl) + ); + } + else + { + for($j = 0; $j < count($forum_auth_fields); $j++) + { + $template->assign_block_vars("forums.aclvalues", array( + "S_ACL_SELECT" => $optionlist_acl_adv[$forum_id][$j]) + ); + } + } + + $i++; + } + @reset($auth_user); + + if ( $mode == 'user' ) + { + $t_username = $ug_info[0]['username']; + $s_user_type = ( $is_admin ) ? '<select name="userlevel"><option value="admin" selected="selected">' . $lang['Auth_Admin'] . '</option><option value="user">' . $lang['Auth_User'] . '</option></select>' : '<select name="userlevel"><option value="admin">' . $lang['Auth_Admin'] . '</option><option value="user" selected="selected">' . $lang['Auth_User'] . '</option></select>'; + } + + for($i = 0; $i < count($ug_info); $i++) + { + if( ( $mode == 'user' && !$ug_info[$i]['group_single_user'] ) || $mode == 'group' ) + { + $name[] = ( $mode == 'user' ) ? $ug_info[$i]['group_name'] : $ug_info[$i]['username']; + $id[] = ( $mode == 'user' ) ? $ug_info[$i]['group_id'] : $ug_info[$i]['user_id']; + } + } + + if( count($name) ) + { + $t_usergroup_list = ""; + for($i = 0; $i < count($ug_info); $i++) + { + $t_usergroup_list .= ( ( $t_usergroup_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$mode&" . POST_GROUPS_URL . "=" . $id[$i]) . '">' . $name[$i] . '</a>'; + } + } + else + { + $t_usergroup_list = $lang['None']; + } + + $s_column_span = 2; // Two columns always present + if( !$adv ) + { + $template->assign_block_vars("acltype", array( + "L_UG_ACL_TYPE" => $lang['Simple_Permission']) + ); + $s_column_span++; + } + else + { + for($i = 0; $i < count($forum_auth_fields); $i++) + { + $cell_title = $field_names[$forum_auth_fields[$i]]; + + $template->assign_block_vars("acltype", array( + "L_UG_ACL_TYPE" => $cell_title) + ); + $s_column_span++; + } + } + + // + // Dump in the page header ... + // + include('page_header_admin.'.$phpEx); + + $template->set_filenames(array( + "body" => "admin/auth_ug_body.tpl") + ); + + $adv_switch = ( empty($adv) ) ? 1 : 0; + $u_ug_switch = ( $mode == 'user' ) ? POST_USERS_URL . "=" . $user_id : POST_GROUPS_URL . "=" . $group_id; + $switch_mode = append_sid("admin_ug_auth.$phpEx?mode=$mode&" . $u_ug_switch . "&adv=$adv_switch"); + $switch_mode_text = ( empty($adv) ) ? $lang['Advanced_mode'] : $lang['Simple_mode']; + $u_switch_mode = '<a href="' . $switch_mode . '">' . $switch_mode_text . '</a>'; + + $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="adv" value="' . $adv . '" />'; + $s_hidden_fields .= ( $mode == 'user' ) ? '<input type="hidden" name="' . POST_USERS_URL . '" value="' . $user_id . '" />' : '<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />'; + + if ( $mode == 'user' ) + { + $template->assign_block_vars("switch_user_auth", array()); + + $template->assign_vars(array( + "USERNAME" => $t_username, + "USER_LEVEL" => $lang['User_Level'] . " : " . $s_user_type, + "USER_GROUP_MEMBERSHIPS" => $lang['Group_memberships'] . " : " . $t_usergroup_list) + ); + } + else + { + $template->assign_block_vars("switch_group_auth", array()); + + $template->assign_vars(array( + "USERNAME" => $t_groupname, + "GROUP_MEMBERSHIP" => $lang['Usergroup_members'] . ": " . $t_usergroup_list) + ); + } + + $template->assign_vars(array( + "L_USER_OR_GROUPNAME" => ( $mode == 'user' ) ? $lang['Username'] : $lang['Group_name'], + "L_USER_OR_GROUP" => ( $mode == 'user' ) ? $lang['User'] : $lang['Group'], + + "L_AUTH_TITLE" => ( $mode == 'user' ) ? $lang['Auth_Control_User'] : $lang['Auth_Control_Group'], + "L_AUTH_EXPLAIN" => ( $mode == 'user' ) ? $lang['User_auth_explain'] : $lang['Group_auth_explain'], + "L_MODERATOR_STATUS" => $lang['Moderator_status'], + "L_PERMISSIONS" => $lang['Permissions'], + "L_SUBMIT" => $lang['Submit'], + "L_RESET" => $lang['Reset'], + + "U_USER_OR_GROUP" => append_sid("admin_ug_auth.$phpEx"), + "U_SWITCH_MODE" => $u_switch_mode, + + "S_COLUMN_SPAN" => $s_column_span, + "S_AUTH_ACTION" => append_sid("admin_ug_auth.$phpEx"), + "S_HIDDEN_FIELDS" => $s_hidden_fields) + ); +} +else +{ + // + // Select a user/group + // + include('page_header_admin.'.$phpEx); + + $template->set_filenames(array( + "body" => ( $mode == 'user' ) ? "admin/user_select_body.tpl" : "admin/auth_select_body.tpl") + ); + + if ( $mode == 'user' ) + { + $template->assign_vars(array( + "L_FIND_USERNAME" => $lang['Find_username'], + + "U_SEARCH_USER" => append_sid("../search.$phpEx?mode=searchuser")) + ); + } + else + { + $sql = "SELECT group_id, group_name + FROM " . GROUPS_TABLE . " + WHERE group_single_user <> " . TRUE; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't get group list", "", __LINE__, __FILE__, $sql); + } + + if ( $row = $db->sql_fetchrow($result) ) + { + $select_list = '<select name="' . POST_GROUPS_URL . '">'; + do + { + $select_list .= '<option value="' . $row['group_id'] . '">' . $row['group_name'] . '</option>'; + } + while ( $row = $db->sql_fetchrow($result) ); + $select_list .= '</select>'; + } + + $template->assign_vars(array( + "S_AUTH_SELECT" => $select_list) + ); + } + + $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />'; + + $l_type = ( $mode == 'user' ) ? "USER" : "AUTH"; + + $template->assign_vars(array( + "L_" . $l_type . "_TITLE" => ( $mode == 'user' ) ? $lang['Auth_Control_User'] : $lang['Auth_Control_Group'], + "L_" . $l_type . "_EXPLAIN" => ( $mode == 'user' ) ? $lang['User_auth_explain'] : $lang['Group_auth_explain'], + "L_" . $l_type . "_SELECT" => ( $mode == 'user' ) ? $lang['Select_a_User'] : $lang['Select_a_Group'], + "L_LOOK_UP" => ( $mode == 'user' ) ? $lang['Look_up_User'] : $lang['Look_up_Group'], + + "S_HIDDEN_FIELDS" => $s_hidden_fields, + "S_" . $l_type . "_ACTION" => append_sid("admin_ug_auth.$phpEx")) + ); + +} + +$template->pparse("body"); + +include('page_footer_admin.'.$phpEx); + +?>
\ No newline at end of file |