Битрикс простой перенос пользователей с паролями
Последние записи
Если перед вами встала задача по переносу пользователей из одного Битрикс в другой, то сделать это достаточно просто.
Для начала составьте таблицу соответствия групп пользователей, где ключи - 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');
//Получаем список пользователей
$rsUsers = CUser::GetList($by="", $order="",[],array("SELECT"=>array("UF_*")));
while ($user = $rsUsers->Fetch()){
$arUsers[$user['ID']] = $user;
if($user['PERSONAL_PHOTO']){
$arFileTmp = CFile::ResizeImageGet(
$user['PERSONAL_PHOTO'],
array("width" => 1000, "height" => 1000),
BX_RESIZE_IMAGE_PROPORTIONAL,
true
);
$arUsers[$user['ID']]['PERSONAL_PHOTO'] = 'http://' . $_SERVER['SERVER_NAME'] . $arFileTmp["src"];
}
$userGroups = CUser::GetUserGroup($user['ID']);
$arUsers[$user['ID']]['A']['GROUPS'] = $userGroups;
}
echo json_encode($arUsers);
die();
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_after.php');
Листинг файла 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;
}
}
Не забудьте запустить ваш файл importUSERS.php
и дождаться окончания процесса импорта. После окончания импорта удалите оба файла
Решение применялось на редакции Бизнес v20.0.600
Комментарии