mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-11 05:48:51 +00:00
fix "copy permissions" as well as shortening the $acl_url for redirecting to the permissions screen.
git-svn-id: file:///svn/phpbb/trunk@5715 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
791b580f43
commit
844aad7ff7
3 changed files with 128 additions and 44 deletions
|
@ -146,28 +146,78 @@ class acp_forums
|
||||||
// Copy permissions?
|
// Copy permissions?
|
||||||
if ($forum_perm_from && $action == 'add')
|
if ($forum_perm_from && $action == 'add')
|
||||||
{
|
{
|
||||||
$sql_ary = array(
|
// From the mysql documentation:
|
||||||
'a.user_id' => array('user_id'),
|
// Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
|
||||||
'a.forum_id' => (int) $forum_data['forum_id'],
|
// Due to this we stay on the safe side if we do the insertion "the manual way"
|
||||||
'a.auth_option_id' => array('auth_option_id'),
|
|
||||||
'a.auth_role_id' => array('auth_role_id'),
|
|
||||||
'a.auth_setting' => array('auth_setting')
|
|
||||||
);
|
|
||||||
|
|
||||||
// We copy the permissions the manual way. ;)
|
|
||||||
$sql = 'INSERT INTO ' . ACL_USERS_TABLE . ' a ' . $db->sql_build_array('INSERT_SELECT', $sql_ary) . '
|
|
||||||
FROM ' . ACL_USERS_TABLE . ' b
|
|
||||||
WHERE b.forum_id = ' . $forum_perm_from;
|
|
||||||
$db->sql_query($sql);
|
|
||||||
|
|
||||||
// Change array for copying settings from the acl groups table
|
// Copy permisisons from/to the acl users table (only forum_id gets changed)
|
||||||
unset($sql_ary['user_id']);
|
$sql = 'SELECT user_id, auth_option_id, auth_role_id, auth_setting
|
||||||
$sql_ary['group_id'] = array('group_id');
|
FROM ' . ACL_USERS_TABLE . '
|
||||||
|
WHERE forum_id = ' . $forum_perm_from;
|
||||||
$sql = 'INSERT INTO ' . ACL_GROUPS_TABLE . ' a ' . $db->sql_build_array('INSERT_SELECT', $sql_ary) . '
|
$result = $db->sql_query($sql);
|
||||||
FROM ' . ACL_GROUPS_TABLE . ' b
|
|
||||||
WHERE b.forum_id = ' . $forum_perm_from;
|
$users_sql_ary = array();
|
||||||
$db->sql_query($sql);
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$users_sql_ary[] = array(
|
||||||
|
'user_id' => (int) $row['user_id'],
|
||||||
|
'forum_id' => (int) $forum_data['forum_id'],
|
||||||
|
'auth_option_id' => (int) $row['auth_option_id'],
|
||||||
|
'auth_role_id' => (int) $row['auth_role_id'],
|
||||||
|
'auth_setting' => (int) $row['auth_setting']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
// Copy permisisons from/to the acl groups table (only forum_id gets changed)
|
||||||
|
$sql = 'SELECT group_id, auth_option_id, auth_role_id, auth_setting
|
||||||
|
FROM ' . ACL_GROUPS_TABLE . '
|
||||||
|
WHERE forum_id = ' . $forum_perm_from;
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
|
$groups_sql_ary = array();
|
||||||
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$groups_sql_ary[] = array(
|
||||||
|
'group_id' => (int) $row['group_id'],
|
||||||
|
'forum_id' => (int) $forum_data['forum_id'],
|
||||||
|
'auth_option_id' => (int) $row['auth_option_id'],
|
||||||
|
'auth_role_id' => (int) $row['auth_role_id'],
|
||||||
|
'auth_setting' => (int) $row['auth_setting']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
// Now insert the data
|
||||||
|
switch (SQL_LAYER)
|
||||||
|
{
|
||||||
|
case 'mysql':
|
||||||
|
case 'mysql4':
|
||||||
|
case 'mysqli':
|
||||||
|
if (sizeof($users_sql_ary))
|
||||||
|
{
|
||||||
|
$db->sql_query('INSERT INTO ' . ACL_USERS_TABLE . ' ' . $db->sql_build_array('MULTI_INSERT', $users_sql_ary));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sizeof($groups_sql_ary))
|
||||||
|
{
|
||||||
|
$db->sql_query('INSERT INTO ' . ACL_GROUPS_TABLE . ' ' . $db->sql_build_array('MULTI_INSERT', $groups_sql_ary));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
foreach ($users_sql_ary as $ary)
|
||||||
|
{
|
||||||
|
$db->sql_query('INSERT INTO ' . ACL_USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $ary));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($groups_sql_ary as $ary)
|
||||||
|
{
|
||||||
|
$db->sql_query('INSERT INTO ' . ACL_GROUPS_TABLE . ' ' . $db->sql_build_array('INSERT', $ary));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$auth->acl_clear_prefetch();
|
$auth->acl_clear_prefetch();
|
||||||
|
@ -175,20 +225,8 @@ class acp_forums
|
||||||
|
|
||||||
recalc_btree('forum_id', FORUMS_TABLE);
|
recalc_btree('forum_id', FORUMS_TABLE);
|
||||||
|
|
||||||
$acl_url = '&mode=setting_forum_local&forum_id[]=' . $forum_data['forum_id'];
|
$acl_url = '&mode=setting_forum_local&forum_id[]=' . $forum_data['forum_id'] . '&select_all_groups=1';
|
||||||
|
|
||||||
// Add default groups to selection
|
|
||||||
$sql = 'SELECT group_id
|
|
||||||
FROM ' . GROUPS_TABLE . '
|
|
||||||
WHERE group_type = ' . GROUP_SPECIAL;
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
$acl_url .= '&group_id[]=' . $row['group_id'];
|
|
||||||
}
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
// Redirect to permissions
|
// Redirect to permissions
|
||||||
$message = ($action == 'add') ? $user->lang['FORUM_CREATED'] : $user->lang['FORUM_UPDATED'];
|
$message = ($action == 'add') ? $user->lang['FORUM_CREATED'] : $user->lang['FORUM_UPDATED'];
|
||||||
$message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . $phpbb_admin_path . "index.$phpEx$SID&i=permissions" . $acl_url . '">', '</a>');
|
$message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . $phpbb_admin_path . "index.$phpEx$SID&i=permissions" . $acl_url . '">', '</a>');
|
||||||
|
|
|
@ -335,19 +335,48 @@ class acp_groups
|
||||||
// Copy permissions?
|
// Copy permissions?
|
||||||
if ($group_perm_from && $action == 'add')
|
if ($group_perm_from && $action == 'add')
|
||||||
{
|
{
|
||||||
$sql_ary = array(
|
// From the mysql documentation:
|
||||||
'group_id' => $group_id,
|
// Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
|
||||||
'forum_id' => array('forum_id'),
|
// Due to this we stay on the safe side if we do the insertion "the manual way"
|
||||||
'auth_option_id' => array('auth_option_id'),
|
|
||||||
'auth_role_id' => array('auth_role_id'),
|
|
||||||
'auth_setting' => array('auth_setting')
|
|
||||||
);
|
|
||||||
|
|
||||||
// We copy the permissions the manual way. ;)
|
// Copy permisisons from/to the acl groups table (only group_id gets changed)
|
||||||
$sql = 'INSERT INTO ' . ACL_GROUPS_TABLE . ' ' . $db->sql_build_array('INSERT_SELECT', $sql_ary) . '
|
$sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
|
||||||
FROM ' . ACL_GROUPS_TABLE . '
|
FROM ' . ACL_GROUPS_TABLE . '
|
||||||
WHERE group_id = ' . $group_perm_from;
|
WHERE group_id = ' . $group_perm_from;
|
||||||
$db->sql_query($sql);
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
|
$groups_sql_ary = array();
|
||||||
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$groups_sql_ary[] = array(
|
||||||
|
'group_id' => (int) $group_id,
|
||||||
|
'forum_id' => (int) $row['forum_id'],
|
||||||
|
'auth_option_id' => (int) $row['auth_option_id'],
|
||||||
|
'auth_role_id' => (int) $row['auth_role_id'],
|
||||||
|
'auth_setting' => (int) $row['auth_setting']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
// Now insert the data
|
||||||
|
if (sizeof($groups_sql_ary))
|
||||||
|
{
|
||||||
|
switch (SQL_LAYER)
|
||||||
|
{
|
||||||
|
case 'mysql':
|
||||||
|
case 'mysql4':
|
||||||
|
case 'mysqli':
|
||||||
|
$db->sql_query('INSERT INTO ' . ACL_GROUPS_TABLE . ' ' . $db->sql_build_array('MULTI_INSERT', $groups_sql_ary));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
foreach ($groups_sql_ary as $ary)
|
||||||
|
{
|
||||||
|
$db->sql_query('INSERT INTO ' . ACL_GROUPS_TABLE . ' ' . $db->sql_build_array('INSERT', $ary));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$auth->acl_clear_prefetch();
|
$auth->acl_clear_prefetch();
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,24 @@ class acp_permissions
|
||||||
$user_id = request_var('user_id', array(0));
|
$user_id = request_var('user_id', array(0));
|
||||||
|
|
||||||
$group_id = request_var('group_id', array(0));
|
$group_id = request_var('group_id', array(0));
|
||||||
|
$select_all_groups = request_var('select_all_groups', 0);
|
||||||
|
|
||||||
|
// If select all groups is set, we pre-build the group id array (this option is used for other screens to link to the permission settings screen)
|
||||||
|
if ($select_all_groups)
|
||||||
|
{
|
||||||
|
// Add default groups to selection
|
||||||
|
$sql = 'SELECT group_id
|
||||||
|
FROM ' . GROUPS_TABLE . '
|
||||||
|
WHERE group_type = ' . GROUP_SPECIAL;
|
||||||
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$group_id[] = $row['group_id'];
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
// Map usernames to ids and vice versa
|
// Map usernames to ids and vice versa
|
||||||
if ($usernames)
|
if ($usernames)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue