1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-31 20:11:54 +02:00

- removed group settings from roles

- added forum icon in front of forums in permissions acp
- added trace permissions in permission masks (thanks naderman for writing the first code and for the idea... :))
- some bugfixes
- PHP6 fix


git-svn-id: file:///svn/phpbb/trunk@5824 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Meik Sievertsen
2006-04-22 16:18:40 +00:00
parent 68c349fdc1
commit 856650861f
45 changed files with 623 additions and 650 deletions

View File

@@ -14,7 +14,6 @@
class acp_permission_roles
{
var $u_action;
var $pre_selection_array;
function main($id, $mode)
{
@@ -36,24 +35,6 @@ class acp_permission_roles
$action = request_var('action', '');
$action = (isset($_POST['add'])) ? 'add' : $action;
// Define pre-selection array
$this->pre_selection_array = array(
1 => array('lang' => 'PRE_ONLY_SPECIAL_GUEST', 'type' => GROUP_SPECIAL, 'name' => array('BOTS', 'GUESTS', 'INACTIVE', 'INACTIVE_COPPA'), 'negate' => false),
2 => array('lang' => 'PRE_ONLY_SPECIAL_REGISTERED', 'type' => GROUP_SPECIAL, 'name' => array('ADMINISTRATORS', 'SUPER_MODERATORS', 'REGISTERED', 'REGISTERED_COPPA'), 'negate' => false),
3 => array('lang' => 'PRE_NOT_SPECIAL_GUEST', 'type' => GROUP_SPECIAL, 'name' => array('BOTS', 'GUESTS', 'INACTIVE', 'INACTIVE_COPPA'), 'negate' => true),
4 => array('lang' => 'PRE_NOT_SPECIAL_REGISTERED', 'type' => GROUP_SPECIAL, 'name' => array('ADMINISTRATORS', 'SUPER_MODERATORS', 'REGISTERED', 'REGISTERED_COPPA'), 'negate' => true),
5 => array('lang' => 'PRE_ALL_SPECIAL', 'type' => GROUP_SPECIAL, 'negate' => false),
6 => array('lang' => 'PRE_NOT_SPECIAL', 'type' => GROUP_SPECIAL, 'negate' => true),
7 => array('lang' => 'PRE_ALL_FREE', 'type' => GROUP_FREE, 'negate' => false),
8 => array('lang' => 'PRE_NOT_FREE', 'type' => GROUP_FREE, 'negate' => true),
9 => array('lang' => 'PRE_ALL_CLOSED', 'type' => GROUP_CLOSED, 'negate' => false),
10 => array('lang' => 'PRE_NOT_CLOSED', 'type' => GROUP_CLOSED, 'negate' => true),
11 => array('lang' => 'PRE_ALL_HIDDEN', 'type' => GROUP_HIDDEN, 'negate' => false),
12 => array('lang' => 'PRE_NOT_HIDDEN', 'type' => GROUP_HIDDEN, 'negate' => true),
13 => array('lang' => 'PRE_ALL_OPEN', 'type' => GROUP_OPEN, 'negate' => false),
14 => array('lang' => 'PRE_NOT_OPEN', 'type' => GROUP_OPEN, 'negate' => true),
);
switch ($mode)
{
case 'admin_roles':
@@ -151,8 +132,6 @@ class acp_permission_roles
$role_name = request_var('role_name', '', true);
$role_description = request_var('role_description', '', true);
$role_group_ids = request_var('role_group_ids', array(0));
$pre_select = request_var('pre_select', 'custom');
$auth_settings = request_var('setting', array('' => 0));
if (!$role_name)
@@ -160,99 +139,6 @@ class acp_permission_roles
trigger_error($user->lang['NO_ROLE_NAME_SPECIFIED'] . adm_back_link($this->u_action));
}
// Adjust group array if we have a pre-selection
if ($pre_select != 'custom')
{
$pre_select = (int) $pre_select;
if (!$pre_select || !isset($this->pre_selection_array[$pre_select]))
{
$role_group_ids = array(0);
}
else
{
$sql = 'SELECT group_id, group_name, group_type
FROM ' . GROUPS_TABLE . '
ORDER BY group_type DESC, group_name ASC';
$result = $db->sql_query($sql);
$groups = array();
while ($row = $db->sql_fetchrow($result))
{
$groups[$row['group_type']][$row['group_id']] = $row['group_name'];
}
$db->sql_freeresult($result);
// Build role_group_ids
$role_group_ids = array();
$row = $this->pre_selection_array[$pre_select];
if (!$row['negate'] && !isset($row['name']))
{
if (isset($groups[$row['type']]))
{
foreach ($groups[$row['type']] as $group_id => $group_name)
{
$role_group_ids[] = $group_id;
}
}
}
else if ($row['negate'] && !isset($row['name']))
{
$group_types = array(GROUP_OPEN, GROUP_CLOSED, GROUP_HIDDEN, GROUP_SPECIAL, GROUP_FREE);
unset($group_types[array_search($row['type'], $group_types)]);
foreach ($group_types as $type)
{
if (!isset($groups[$type]))
{
continue;
}
foreach ($groups[$type] as $group_id => $group_name)
{
$role_group_ids[] = $group_id;
}
}
}
else if (!$row['negate'] && isset($row['name']))
{
foreach ($groups[$row['type']] as $group_id => $group_name)
{
if (in_array($group_name, $row['name']))
{
$role_group_ids[] = $group_id;
}
}
}
else if ($row['negate'] && isset($row['name']))
{
$group_types = array(GROUP_OPEN, GROUP_CLOSED, GROUP_HIDDEN, GROUP_SPECIAL, GROUP_FREE);
foreach ($group_types as $type)
{
if (!isset($groups[$type]))
{
continue;
}
foreach ($groups[$type] as $group_id => $group_name)
{
if ($type != $row['type'])
{
$role_group_ids[] = $group_id;
}
else if (!in_array($group_name, $row['name']))
{
$role_group_ids[] = $group_id;
}
}
}
}
}
}
// if we add/edit a role we check the name to be unique among the settings...
$sql = 'SELECT role_id
FROM ' . ACL_ROLES_TABLE . "
@@ -268,17 +154,10 @@ class acp_permission_roles
trigger_error(sprintf($user->lang['ROLE_NAME_ALREADY_EXIST'], $role_name) . adm_back_link($this->u_action));
}
// If role_group_ids include "every user/group" we do not need to set it...
if (in_array(0, $role_group_ids))
{
$role_group_ids = array(0);
}
$sql_ary = array(
'role_name' => (string) $role_name,
'role_description' => (string) $role_description,
'role_type' => (string) $permission_type,
'role_group_ids' => (string) implode(':', $role_group_ids),
);
if ($action == 'edit')
@@ -329,7 +208,6 @@ class acp_permission_roles
'role_name' => request_var('role_name', '', true),
'role_description' => request_var('role_description', '', true),
'role_type' => $permission_type,
'role_group_ids' => implode(':', request_var('role_group_ids', array(0))),
);
if ($options_from)
@@ -401,14 +279,8 @@ class acp_permission_roles
trigger_error($user->lang['NO_PRESET_SELECTED'] . adm_back_link($this->u_action));
}
// Build group options array (with pre-selection)
$s_preselect_options = $s_group_options = array();
$this->build_group_options($role_row['role_group_ids'], $s_preselect_options, $s_group_options);
$template->assign_vars(array(
'S_EDIT' => true,
'S_PRESELECT_OPTIONS' => $s_preselect_options,
'S_GROUP_OPTIONS' => $s_group_options,
'S_EDIT' => true,
'U_ACTION' => $this->u_action . "&action={$action}&role_id={$role_id}",
'U_BACK' => $this->u_action,
@@ -418,7 +290,7 @@ class acp_permission_roles
'L_ACL_TYPE' => $user->lang['ACL_TYPE_' . strtoupper($permission_type)],
)
);
// We need to fill the auth options array with ACL_UNSET options ;)
$sql = 'SELECT auth_option_id, auth_option
FROM ' . ACL_OPTIONS_TABLE . "
@@ -480,7 +352,7 @@ class acp_permission_roles
$sql = 'SELECT role_id, role_order
FROM ' . ACL_ROLES_TABLE . "
WHERE role_type = '" . $db->sql_escape($permission_type) . "'
ORDER BY role_order";
ORDER BY role_order ASC";
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result))
@@ -498,6 +370,9 @@ class acp_permission_roles
}
$db->sql_freeresult($result);
// Display assigned items?
$display_item = request_var('display_item', 0);
// Select existing roles
$sql = 'SELECT *
FROM ' . ACL_ROLES_TABLE . "
@@ -505,47 +380,13 @@ class acp_permission_roles
ORDER BY role_order ASC";
$result = $db->sql_query($sql);
$roles = $groups = $group_ids = $group_info = array();
while ($row = $db->sql_fetchrow($result))
{
$roles[] = $row;
if ($row['role_group_ids'])
{
$groups[$row['role_id']] = explode(':', $row['role_group_ids']);
$group_ids = array_merge($group_ids, $groups[$row['role_id']]);
}
}
$db->sql_freeresult($result);
if (sizeof($group_ids))
{
$sql = 'SELECT group_id, group_type, group_name
FROM ' . GROUPS_TABLE . '
WHERE group_id IN (' . implode(', ', array_map('intval', $group_ids)) . ')';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$group_info[$row['group_id']] = array(
'group_name' => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'],
'group_special' => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
);
}
$db->sql_freeresult($result);
}
// Display assigned items?
$display_item = request_var('display_item', 0);
$s_role_options = '';
foreach ($roles as $row)
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('roles', array(
'ROLE_NAME' => $row['role_name'],
'ROLE_DESCRIPTION' => nl2br($row['role_description']),
'S_GROUP' => ($row['role_group_ids']) ? true : false,
'U_EDIT' => $this->u_action . '&action=edit&role_id=' . $row['role_id'],
'U_REMOVE' => $this->u_action . '&action=remove&role_id=' . $row['role_id'],
'U_MOVE_UP' => $this->u_action . '&action=move_up&order=' . $row['role_order'],
@@ -553,18 +394,6 @@ class acp_permission_roles
'U_DISPLAY_ITEMS' => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&display_item=' . $row['role_id'] . '#assigned_to')
);
if (isset($groups[$row['role_id']]) && sizeof($groups[$row['role_id']]))
{
foreach ($groups[$row['role_id']] as $group_id)
{
$template->assign_block_vars('roles.groups', array(
'S_SPECIAL_GROUP' => $group_info[$group_id]['group_special'],
'GROUP_NAME' => $group_info[$group_id]['group_name'],
'U_GROUP' => $phpbb_root_path . "memberlist.$phpEx$SID&mode=group&g=$group_id")
);
}
}
$s_role_options .= '<option value="' . $row['role_id'] . '">' . $row['role_name'] . '</option>';
if ($display_item == $row['role_id'])
@@ -574,6 +403,7 @@ class acp_permission_roles
);
}
}
$db->sql_freeresult($result);
$template->assign_vars(array(
'S_ROLE_OPTIONS' => $s_role_options)
@@ -633,146 +463,6 @@ class acp_permission_roles
}
}
/**
* Build user-friendly group options
*/
function build_group_options($role_group_ids, &$s_preselect_options, &$s_group_options)
{
global $db, $user, $template;
$groups = $selected_groups = array();
$sql = 'SELECT group_id, group_name, group_type
FROM ' . GROUPS_TABLE . '
ORDER BY group_type DESC, group_name ASC';
$result = $db->sql_query($sql);
$groups = array();
while ($row = $db->sql_fetchrow($result))
{
$groups[$row['group_type']][$row['group_id']] = $row['group_name'];
}
$db->sql_freeresult($result);
$selected_group_ids = explode(':', $role_group_ids);
// First of all, build the group options for the custom interface...
$s_group_options = '';
foreach ($groups as $group_type => $group_row)
{
foreach ($group_row as $group_id => $group_name)
{
if (in_array($group_id, $selected_group_ids))
{
$selected_groups[$group_type][$group_id] = $group_name;
}
$s_group_options .= '<option value="' . $group_id . '"' . ((in_array($group_id, $selected_group_ids)) ? ' selected="selected"' : '') . (($group_type == GROUP_SPECIAL) ? ' class="sep"' : '') . '>' . (($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name) . '</option>';
}
}
// Build preselect array...
$one_selected_item = false;
$s_preselect_options = '<option value="0"' . ((!$role_group_ids) ? ' selected="selected"' : '') . '>' . $user->lang['EVERY_USER_GROUP'] . '</option>';
if (!$role_group_ids)
{
$one_selected_item = true;
}
// Build pre-selection dropdown field
foreach ($this->pre_selection_array as $option_id => $row)
{
if (!$row['negate'] && !isset($row['name']))
{
$s_selected = false;
if (sizeof($selected_groups) == 1 && isset($selected_groups[$row['type']]) && sizeof($selected_groups[$row['type']]) == sizeof($groups[$row['type']]))
{
$s_selected = true;
}
}
else if ($row['negate'] && !isset($row['name']))
{
$group_types = array(GROUP_OPEN, GROUP_CLOSED, GROUP_HIDDEN, GROUP_SPECIAL, GROUP_FREE);
unset($group_types[array_search($row['type'], $group_types)]);
$s_selected = true;
if (isset($selected_groups[$row['type']]))
{
$s_selected = false;
}
foreach ($group_types as $type)
{
if (!isset($selected_groups[$type]) || sizeof($selected_groups[$type]) != sizeof($groups[$type]))
{
$s_selected = false;
}
}
}
else if (!$row['negate'] && isset($row['name']))
{
$s_selected = false;
if (sizeof($selected_groups) == 1 && isset($selected_groups[$row['type']]) && sizeof($selected_groups[$row['type']]) == sizeof($row['name']))
{
$s_selected = true;
foreach ($row['name'] as $name)
{
if (!in_array($name, $selected_groups[$row['type']]))
{
$s_selected = false;
}
}
}
}
else if ($row['negate'] && isset($row['name']))
{
$group_types = array(GROUP_OPEN, GROUP_CLOSED, GROUP_HIDDEN, GROUP_SPECIAL, GROUP_FREE);
unset($group_types[array_search($row['type'], $group_types)]);
$s_selected = true;
if (isset($selected_groups[$row['type']]))
{
foreach ($row['name'] as $name)
{
if (in_array($name, $selected_groups[$row['type']]))
{
$s_selected = false;
}
}
}
if ($s_selected)
{
foreach ($group_types as $type)
{
if (!isset($groups[$type]))
{
continue;
}
if (!isset($selected_groups[$type]) || sizeof($selected_groups[$type]) != sizeof($groups[$type]))
{
$s_selected = false;
}
}
}
}
if ($s_selected)
{
$one_selected_item = true;
}
$s_preselect_options .= '<option value="' . $option_id . '"' . (($s_selected) ? ' selected="selected"' : '') . '>' . $user->lang[$row['lang']] . '</option>';
}
$s_preselect_options .= '<option value="custom"' . ((!$one_selected_item) ? ' selected="selected"' : '') . '>' . $user->lang['CUSTOM'] . '</option>';
$template->assign_var('S_CUSTOM_GROUP_IDS', ($one_selected_item) ? false : true);
}
/**
* Remove role
*/
@@ -811,7 +501,7 @@ class acp_permission_roles
// Get role assignments
$hold_ary = $auth_admin->get_role_mask($role_id);
// Re-assign permisisons
// Re-assign permissions
foreach ($hold_ary as $forum_id => $forum_ary)
{
if (isset($forum_ary['users']))