Как стать автором
Обновить

Экспорт пользователей из Drupal 6 в Drupal 7

Сегодня пришлось переносить около 2000 пользователей со старого сайта на drupal 6 в drupal 7.
Конечно, можно было бы воспользоваться модулем feeds, но заказчик дал только дамп базы данных.

Итак:

1. Делаем дамп базы данных старого сайта и поднимаает локально:
>mysql -u username -p

create database 'old';

Так-же поднимаем локально drupal 7 и в sites/default/settings.php настраиваем дрооступы к локальному серверу mysql.

2. Поднимаем старую базу данных:
>mysql -u username -p old < old_dump.sql


3. теперь пишем модуль миграции:

создаем папку sites/all/modules/custom/uimport

создаем файл uimport.info
name = User import
description = User import.
core = 7.x


создаем файл uimport.module
<?php

function uimport_menu() {
$items['uimport'] = array(
'title' => 'Uimport',
'page callback' => '_uimport_process',
'access callback' => TRUE
);
return $items;
}

function _uimport_process() {
set_time_limit(3600);
$mysql_server = 'localhost'; // Server name
$mysql_userName = 'root';
$mysql_password = 'al20eX09';
$connection = mysql_connect($mysql_server, $mysql_userName, $mysql_password);
mysql_select_db('old', $connection);
// query

$query = 'SELECT * FROM users';
$count = 0;
$result = mysql_query('old', $query, $connection) or die(mysql_error() . '
' . $query);
while ($row = mysql_fetch_array($result)) {
//if($count++ > 10) break;

if ($row['uid'] == 0 || $row['uid'] == 1)
continue;

require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
$new_password_hash = user_hash_password($row['pass'], 11);
//return '1';
if ($new_password_hash) {
$new_password_hash = 'U' . $new_password_hash;
}
$data = array(
'uid' => $row['uid'], //db_next_id(db_query('SELECT MAX(uid) FROM {users}')->fetchField()),
'name' => $row['name'],
'pass' => $new_password_hash,
'mail' => $row['mail'],
'theme' => $row['theme'],
'signature' => $row['signature'],
'signature_format' => $row['signature_format'],
'created' => $row['created'],
'access' => $row['access'],
'login' => $row['login'],
'status' => $row['status'],
'timezone' => $row['timezone'],
'language' => $row['language'],
'picture' => !empty($row['picture']) ? 1 : 0,
'init' => $row['init'],
'data' => $row['data'],
);

drupal_write_record('users', $data);
}
}


4. Включаем модуль в админке, запускаем mysyte.com/uimport

5. Экспортируем таблицу users из старой базы и импортируем в новую.

Если не важны id юзера, то меняем
'uid' => $row['uid'],
на
'uid' => db_next_id(db_query('SELECT MAX(uid) FROM {users}')->fetchField()),

Также могут возникнуть проблемы, если у вас на новом сайте заведены пользователи, напримепр — тестовые. Предварительно удалите всех кроме uid=0 и uid=1
delete from `users` where uid>1;


Скрипт был найден на alimozzaman.wordpress.com/2011/04/23/drupal-6-to-drupal-7-user-migration, оформлен в виде модула под друпал 7 и изменен под php 5.3
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.