Вот нарисовал на досуге и проверил в первом приближении. Запускать под админом, параметры src и dst (id юзеров). Заинтересованные могут проверить (с осторожностью, на неживых юзерах) и облагородить вплоть до создания мода.
Код: Выделить всё
<?php
/**
*
* @package phpBB3
* @version $Id: $
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
* @copyright (c) 2013 Serg c61@yandex.ru http://c61.su
* @mod: clone user permissions
* @version 0.0.1
*
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
if (!$auth->acl_get('a_'))
{
trigger_error($user->lang['NO_ADMIN']);
}
function traccer($message, $exit = true)
{
echo $message . '<br />';
if ($exit) exit;
}
traccer('Clone PHPBB user permissions START...',false);
traccer('Get Parameters',false);
$src_user_id = request_var('src',0);
$dst_user_id = request_var('dst',0);
if ( !$src_user_id )
{
traccer('ERROR ! Src user not defined');
}
traccer('Src user ID = '.$src_user_id,false);
if ( !$dst_user_id )
{
traccer('ERROR ! Dst user not defined');
}
traccer('Dst user ID = '.$dst_user_id,false);
if ( $src_user_id == $dst_user_id )
{
traccer('Src and Dst users are identical');
exit;
}
traccer('Get Src and Dst users permissions',false);
$sql = 'SELECT user_permissions, group_id FROM ' . USERS_TABLE . ' WHERE user_id = ' . $src_user_id . ' AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ( empty($row) )
{
traccer('ERROR ! Cannot get Src user permissions or illegal user id');
}
$src_user_permissions = $row['user_permissions'];
$src_user_group_id = $row['group_id'];
$db->sql_freeresult($result);
$sql = 'SELECT user_permissions FROM ' . USERS_TABLE . ' WHERE user_id = ' . $dst_user_id . ' AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ( empty($row) )
{
traccer('ERROR ! Cannot get Dst user permissions or illegal user id');
}
$dst_user_permissions = $row['user_permissions'];
$db->sql_freeresult($result);
if ( $src_user_permissions == $dst_user_permissions )
{
traccer('Src and Dst user permissions are identical, continue anyway',false);
}
traccer('Set Dst user permissions',false);
$sql = 'UPDATE ' . USERS_TABLE . ' SET user_permissions = "' . $src_user_permissions . '" WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);
traccer('Get Src user ACL',false);
$sql = 'SELECT * FROM ' . ACL_USERS_TABLE . ' WHERE user_id = ' . $src_user_id;
$result = $db->sql_query($sql);
if ( empty($result) )
{
traccer('ERROR ! Cannot get Src user ACL');
}
$src_user_acl = array();
while ($row = $db->sql_fetchrow($result))
{
$src_user_acl[] = $row;
}
$db->sql_freeresult($result);
traccer('Delete Dst user ACL',false);
$sql = 'DELETE FROM ' . ACL_USERS_TABLE . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);
traccer('Set Dst user ACL',false);
if ( !empty($src_user_acl) )
{
foreach($src_user_acl as $dst)
{
$dst['user_id'] = $dst_user_id;
$sql = 'INSERT INTO ' . ACL_USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $dst);
$db->sql_query($sql);
}
}
traccer('Get Src user Group',false);
$sql = 'SELECT * FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $src_user_id;
$result = $db->sql_query($sql);
if ( empty($result) )
{
traccer('ERROR ! Cannot get Src user Group');
}
$src_user_group = array();
while ($row = $db->sql_fetchrow($result))
{
$src_user_group[] = $row;
}
$db->sql_freeresult($result);
traccer('Delete Dst user Group',false);
$sql = 'DELETE FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);
traccer('Set Dst user Group',false);
if ( !empty($src_user_group) )
{
foreach($src_user_group as $dst)
{
$dst['user_id'] = $dst_user_id;
$sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' ' . $db->sql_build_array('INSERT', $dst);
$db->sql_query($sql);
}
}
traccer('Update Dst user Group ID');
$sql = 'UPDATE ' . USERS_TABLE . ' SET group_id = ' . $src_user_group_id . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);
traccer('Done.',false);
?>