Your IP : 3.145.191.235


Current Path : /home/bitrix/ext_www/home-comfort.in.ua/local/admin/
Upload File :
Current File : /home/bitrix/ext_www/home-comfort.in.ua/local/admin/export_users.php

<?
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;
}