Перенос пользователей в CMS «1C-Битрикс» из другой системы выполняется довольно быстро и без сложностей. Для этого нужно создать CSV-файл с перечнем пользователей с заполненными полями NAME и LAST_NAME, LOGIN и PASSWORD. Однако имейте в виду: здесь может возникнуть проблема с паролями. Пользовательские данные в большинстве ситуаций находятся в зашифрованном виде и сохранить их в базу Bitrix сразу не получится. Для решения этой задачи нужно учесть несколько важных нюансов.
Этап 1. Экспортируем пользователей в CSV-файл
Первым делом мы экспортируем пользователей из старой системы в CSV-файл. Экспорт не представляет технических сложностей. Нужно лишь перейти в перечень зарегистрированных пользователей в административном разделе. Для этого пройдите по вкладкам «Настройки» => «Пользователи» => «Список».
Далее кликните по значку шестеренки в верхней правой части. В открывшемся меню выбирайте Excel. После этого вам предложат сохранить пользовательский список в формате CSV. Если же вы хотите выгрузить дополнительные поля, то просто включите их в список. В получившемся файле у вас будет примерно такой перечень:
Пример выгрузки пользователей
В четырех ячейках представлены имена, фамилии, логин и пароль.
Этап 2. Вставляем обработчик события
В поле Password (пароль) будет зашифрованное значение. Чтобы пользователь не заметил переезд на другой движок и без проблем продолжил пользоваться функционалом сайта, ему придется авторизоваться заново. Нам потребуется включить оптимальное значение пароля в базу «1C-Битрикс». Здесь и нужно определить пароль путем сравнения зашифрованного значения из CSV-файла со значением, которое пользователь отправил при авторизации. Для этого скопируйте алгоритм из старой системы.
Перед тем, как выполнить импорт, требуется вставить обработчик события OnAfterUserAdd в файл /bitrix/php_interface/init.php. Для этого используем следующий кусок кода:
AddEventHandler("main", "OnAfterUserAdd", "__afterUserAdd"); function __afterUserAdd($arParams) { if(defined("USER_IMPORT_EXECUTION_TIME")) { global $DB; $DB->Ins ert("old_user", array( "LOGIN" => "'".$DB->ForSQL($arParams["LOGIN"])."'", "HASH" => "'".$DB->ForSQL($arParams["PASSWORD"])."'" )); } }
В процессе импорта этот обработчик после включения в него пользователя будет добавлять логин и зашифрованный пароль в отдельную таблицу. Пускай она называется old_user. Сделать ее можно, используя SQL-запрос. Для этого заходим в «Настройки» => «Инструменты» => «SQL-запрос».
Выполняем следующий запрос:
CRE ATE TABLE `old_user` ( `LOGIN` varchar(60) NOT NULL, `HASH` varchar(64) NOT NULL, PRIMARY KEY (`LOGIN`) );
Далее запускаем CSV-импорт и проверяем, что таблица old_user заполнена целиком.
Этап 3. Вставляем новый код
Последний шаг — удалить вставленный код /bitrix/php_interface/init.php из файла и добавить новый. К примеру, переносим пользователей с WordPress на «1C-Битрикс»:
AddEventHandler("main", "OnBeforeUserLogin", "__beforeUserLogin"); function __beforeUserLogin($arParams) { global $DB; $login = $DB->ForSQL($arParams["LOGIN"]); $password = $arParams["PASSWORD"]; $from_old = "FROM old_user wh ere LOGIN='$login';"; // Ищем пользователя с таким логином в "old_user" $rsOLDUser = $DB->Query("SELECT * $from_old"); if(!($arOLDUser = $rsOLDUser->GetNext())) return true; // Ищем пользователя с таким логином в базе Битрикса $rsBXUser = CUser::GetByLogin($login); if(!($arBXUser = $rsBXUser->GetNext())) return true; // Проверяем правильность присланного пароля // алгоритмом старой системы // (в данном случае это worpress 3.3.1) require_once('wp-class-phpass.php'); $wp_hasher = new PasswordHash(8, TRUE); if(!$wp_hasher->CheckPassword($password, $arOLDUser['HASH'])) return true; // Обновляем пароль пользователя в базе Битрикса $USER = new CUser; $bUbdate = $USER->Update($arBXUser["ID"], array("PASSWORD" => $password)); unset($USER); if(!$bUbdate) return true; // А затем удаляем пользователя из "old_user" $DB->Query("DELETE $from_old"); return true; }
Этот код решает самую важную задачу: он сравнивает отправленный пользователем пароль с паролем old_user из таблицы. В случае совпадения код фиксирует отправленный пароль в таблице.
Вы можете регулярно изучать содержимое таблицы old_user. Когда она станет пустой, ее можно удалить, как и большой кусок кода, прописанный выше.
Учитывайте, что пользователи периодически меняют пароли. Запретите это действие для тех, чьи пароли находятся в таблице old_user. Для этого создайте обработчик события OnSendUserInfo.
Использование модуля
Второй способ переноса пользователей с сайта, на котором стоит редакция «1С-Битрикс», — использование специального модуля «Перенос пользователей». С его помощью вы транспортируете все пользовательские данные, выводимые на странице редактирования по следующей ветке: «Пользователи» – «Список пользователей».
Не будут, однако, перенесены файловые поля. Это фотографии («Личные данные») и Логотип компании (вкладка «Работа). При этом модуль переносит значения (в том числе и множественные) из вкладки «Дополнительные поля». Перед началом переноса обязательно нужно выполнить бэкапы.
Для корректной работы модуля требуется установка расширения Curl. В параметрах перед переносом модуль потребует такие данные, как URL сайта, логин и пароль админа, группу пользователей, а также лимит пользователей на этап переноса.