Your IP : 3.17.77.29
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php");
$APPLICATION->SetTitle('Экспорт/импорт пользователей');
use Bitrix\Main\UserGroupTable;
use Bitrix\Main\UserTable;
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php");
switch($_REQUEST['action']){
case('export'):
$json = exportUsers($_REQUEST['getGroups']);
echo CAdminMessage::ShowNote('Данные получены');
break;
case('import'):
if(isset($_REQUEST['data'])){
$count = importUsers($_REQUEST['data']);
echo CAdminMessage::ShowNote('Добавлено пользователей ' . $count);
}
break;
}
?>
<p>
Выгрузка с группами: режим при котором будут сохранены id-групп пользователя<br>
Сейчас простая связка - которая предполагает, что id групп на обоих сайтах совпадает<br>
TODO: Сделать полную выгрузку типов групп и добавление несуществующих групп<br>
TODO: Кастомные поля
<br>
Старый id будет записан в пользовательское поле UF_CODE
</p>
<form action="<?= $_SERVER["PHP_SELF"] ?>" method="POST">
<div style="margin-bottom: 20px;">
<label>
<input type="checkbox" name="getGroups">
Выгрузить с группами
</label>
<input type="submit" name="action" value="export"/></div>
<div>JSON с данными формы:<br/>
<textarea name="data" cols="80" rows="20"><?= isset($json) ? $json : '' ?></textarea><br/>
<input type="submit" name="action" value="import"/>
</div>
</form>
<?php
function exportUsers($getGroups = false){
$data['users'] = UserTable::getList(array())->fetchAll();
if($getGroups){
$dbGroup = UserGroupTable::getList(array());
$groups = [];
while($group = $dbGroup->fetch()){
$userId = $group['USER_ID'];
unset($group['USER_ID']);
$groups[$userId][] = $group;
}
$data['groups'] = $groups;
}
return json_encode($data);
}
function importUsers($data){
global $DB;
$arData = json_decode($data, true);
$users = $arData['users'];
$groups = $arData['groups'];
$count = 0;
foreach($users as $userFields){
if($groups[$userFields['ID']]){
$userFields['GROUP_ID'] = $groups[$userFields['ID']];
}
if(!$userFields['DATE_REGISTER']){
unset($userFields['DATE_REGISTER']);
}
$userFields['UF_CODE'] = $userFields['ID'];
unset($userFields['ID']);
$user = new CUser();
//Добавление пользователя и полей
$ID = $user->Add($userFields);
if($ID){
$count++;
$arPass = [];
if($userFields['PASSWORD']){
$arPass['PASSWORD'] = "'".trim($userFields['PASSWORD'])."'";
}
if($userFields['CHECKWORD']){
$arPass['CHECKWORD'] = "'".trim($userFields['CHECKWORD'])."'";
}
if(!empty($arPass)){
//Обновление пользователя, запишем в базу пароли и проверочное слово
$DB->Update("b_user", $arPass, "WHERE ID='".$ID."'", false, false);
}
}
}
return $count;
}