Skip to content

Instantly share code, notes, and snippets.

@SeRGei93
Last active April 16, 2024 08:12
Show Gist options
  • Save SeRGei93/842cf844280ee58a8910687d7c7af644 to your computer and use it in GitHub Desktop.
Save SeRGei93/842cf844280ee58a8910687d7c7af644 to your computer and use it in GitHub Desktop.
перенос пользователей битрикс
Если перед вами встала задача по переносу пользователей из одного Битрикс в другой, то сделать это достаточно просто.
Для начала составьте таблицу соответствия групп пользователей, где ключи - id группы пользователей на первом сайте, а значения id соответствующей ему группы пользователей на втором. Примерно так:
$tableOfGroups = [
'1' => 1,
'2' => 2,
'3' => 3,
'4' => 4,
'5' => 9,
'6' => 10,
'7' => 11,
];
Затем вам потребуется вручную внести на второй сайт Доп. поля (если они есть) с теми же самыми кодами. После чего разместите на первом сайте файл exportUSERS.php, а во втором importUSERS.php и пропишите соответствующие пути.
Листинг файла exportUSERS.php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$arrID = [460, 458, 450, 448, 447, 446, 443, 441, 440, 438, 437, 436, 433, 429, 410, 407, 406, 398, 396, 395, 394, 390, 389, 386, 385, 384, 383, 379, 378, 347, 341, 233, 85, 83, 80, 78, 66, 63, 62, 56, 51, 47, 46, 41, 11];
//Получаем список пользователей
$rsUsers = CUser::GetList($by="", $order="",[],array("SELECT"=>array("UF_*")));
while ($user = $rsUsers->Fetch()){
if (in_array($user['ID'], $arrID)){
$arUsers[$user['ID']] = $user;
$userGroups = CUser::GetUserGroup($user['ID']);
$arUsers[$user['ID']]['A']['GROUPS'] = $userGroups;
}
}
//echo '<pre>';
//print_r($arUsers);
//echo '</pre>';
echo json_encode($arUsers);
die();
Листинг файла importUSERS.php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$arTotal = array();
$url = 'https://your_site.ru/exportUSERS.php';
$postdata = array();
$post = http_build_query($postdata);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
curl_close($ch);
//Преобразовываем std в массив
$response = json_decode($response, True);
$arTotal['Получено пользователей'] = count($response);
$arTotal['Занесено'] = 0;
if(!CModule::IncludeModule("iblock")){die();}
$tableOfGroups = [
'1' => 1,
'2' => 2,
'3' => 3,
'4' => 4,
'5' => 9,
'6' => 10,
'7' => 11,
];
$connection = Bitrix\Main\Application::getConnection('default');
$sqlHelper = $connection->getSqlHelper();
foreach ($response as $key => $value){
$arFields = [];
foreach ($value as $k => $v){
switch ($k) {
case 'PERSONAL_PHOTO':
if($v){
$arIMAGE = CFile::MakeFileArray($value['PERSONAL_PHOTO']);
$arIMAGE["MODULE_ID"] = "main";
$arFields[$k] = $arIMAGE;
}
break;
case 'A':
$groupIDS = [];
//По таблице соответствия групп проставляем требуемые уровни доступа
foreach ($v['GROUPS'] as $name => $val){
array_push($groupIDS,$tableOfGroups[$val]);
}
$arFields['GROUP_ID'] = $groupIDS;
break;
case 'LID':
break;
case 'IS_ONLINE':
break;
case 'PASSWORD':
break;
case 'CHECKWORD':
break;
default:
if($v){
$arFields[$k] = $v;
}
break;
}
}
$arFields['PASSWORD'] = 'blabla';
$arFields['CHECKWORD'] = 'blabla';
$user = new CUser;
$ID = $user->Add($arFields);
if (intval($ID) > 0){
$arTotal['Занесено'] += 1;
$connection->queryExecute("UPDATE b_user SET PASSWORD='".$sqlHelper->forSql ($value["PASSWORD"])."', CHECKWORD='".$sqlHelper->forSql ($value["CHECKWORD"])."' WHERE ID='".$ID."'");
}else{
$arTotal['Ошибки'] = $arTotal['Ошибки'].'
'.$user->LAST_ERROR;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment