Last active
April 16, 2024 08:12
-
-
Save SeRGei93/842cf844280ee58a8910687d7c7af644 to your computer and use it in GitHub Desktop.
перенос пользователей битрикс
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Если перед вами встала задача по переносу пользователей из одного Битрикс в другой, то сделать это достаточно просто. | |
Для начала составьте таблицу соответствия групп пользователей, где ключи - 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