Единственный путь — автоматизация: Конвертер базы из форума vBulletin в DLE форум

Еще в начале года попал мне в руки заказ на небольшую работку. Нужно было написать скрипт, который бы перегнал посты и пользователей из одного форума (vBulletin) в другой, новый (DLE Forum).

Ниже в архиве, в конце статьи представлен код конвертера который я тогда написал. Не нужно меня сильно пинать за качество кода, свою работу он выполнил (и судя по всему заказчик остался доволен). Закомментированные куски в конечном задании не учавствовали, а расчитывались на то, что в целевой базе уже будут существовать пользователи. Следовательно при совпадении id-шек нужно было менять не только id новых пользователей, но и сохранять связи с новыми id в таблицах категорий, форумов и постов.

В самой статье я привожу то, что мне пришлось додумывать самому — соответствие полей базы vBulletin к базе DLE Forum

// Группы юзеров 
$DLE_FORUM[‘id’]=$usergroup[$key][‘usergroupid’];
$DLE_FORUM[‘group_name’]=$usergroup[$key][‘title’];
// юзеры 
$DLE_FORUM[’email’]=$user[$key][’email’]; 
$DLE_FORUM[‘password’]=md5($user[$key][‘password’]); // пароль в dle и vbulletin различается одним md5
$DLE_FORUM[‘name’]=$user[$key][‘username’];
$DLE_FORUM[‘user_id’]=$user[$key][‘userid’];
//$DLE_FORUM[‘user_group’]=$usergroup_id[$user[$key][‘usergroupid’]]; // id был изменен возможно, страхуемся
$DLE_FORUM[‘user_group’]=$user[$key][‘usergroupid’];
$DLE_FORUM[‘lastdate’]=$user[$key][‘lastvisit’];
$DLE_FORUM[‘reg_date’]=$user[$key][‘joindate’];
$DLE_FORUM[‘allow_mail’]=1; // разрешить отправку юзеру писем
$DLE_FORUM[‘fullname’]=$user[$key][‘usertitle’];
$DLE_FORUM[‘icq’]=$user[$key][‘icq’];
$DLE_FORUM[‘forum_post’]=$user[$key][‘lastpostid’];
$DLE_FORUM[‘forum_warn’]=$user[$key][‘warnings’];
$DLE_FORUM[‘forum_update’]=$user[$key][‘lastpos’];
$DLE_FORUM[‘forum_reputation’]=$user[$key][‘reputation’];
$DLE_FORUM[‘forum_last’]=$user[$key][‘lastactivity’];
$DLE_FORUM[‘forum_time’]=$user[$key][‘lastvisit’];
// Форум
$DLE_FORUM[‘id’]=$forum[$key][‘forumid’];
$DLE_FORUM[‘parentid’]=$forum[$key][‘parentid’]; // форумы могут быть родителями друг друга
$DLE_FORUM[‘topics’]=$forum[$key][‘threadcount’]; // счетчик топиков
$DLE_FORUM[‘name’]=$forum[$key][‘title’];
$DLE_FORUM[‘description’]=$forum[$key][‘description’];
$DLE_FORUM[‘status’]=‘1’; // форум закрыт/открыт
$DLE_FORUM[‘access_read’]=‘1:2:3:4:5:6:7:8’; // это права доступа для групп, номера которых указаны
$DLE_FORUM[‘access_write’]=‘1:2:3:4:5:6:7:8’;
$DLE_FORUM[‘access_mod’]=‘1:2’;
$DLE_FORUM[‘access_topic’]=‘1:2:3:4:5:6:7:8’;
$DLE_FORUM[‘access_upload’]=‘1:2:3:4:5:6:7:8’;
$DLE_FORUM[‘access_download’]=‘1:2:3:4:5:6:7:8’;
$DLE_FORUM[‘f_last_tid’]=$forum[$key][‘lastthreadid’]; // последний топик, id
$DLE_FORUM[‘f_last_date’]=$forum[$key][‘lastpost’];
$DLE_FORUM[‘f_last_poster_name’]=$forum[$key][‘lastposter’];
$DLE_FORUM[‘password’]=$forum[$key][‘password’];
$DLE_FORUM[‘postcount’]=$forum[$key][‘replycount’];
$DLE_FORUM[‘last_post_id’]=$forum[$key][‘lastpostid’];
$DLE_FORUM[‘q_reply’]=1;
// Темы
$DLE_FORUM[‘tid’]=$thread[$key][‘threadid’];
$DLE_FORUM[‘forum_id’]=$thread[$key][‘forumid’];// id родительского форума
$DLE_FORUM[‘title’]=$thread[$key][‘title’];
$DLE_FORUM[‘post’]=$thread[$key][‘replycount’];
$DLE_FORUM[‘views’]=$thread[$key][‘views’];
$DLE_FORUM[‘author_topic’]=$thread[$key][‘postusername’];
$DLE_FORUM[‘last_date’]=date(‘Y-m-d H:i:s’,$thread[$key][‘lastpost’]); // форматы даты в форумах различны
$DLE_FORUM[‘last_poster_name’]=$thread[$key][‘lastposter’];
$DLE_FORUM[‘topic_status’]=(($thread[$key][‘visible’])?‘0’:‘1’); // видимый / невидимый топик
$DLE_FORUM[‘fixed’]=(($thread[$key][‘sticky’])?‘0’:‘1’); // чтобы закрепить топик сверху
$DLE_FORUM[‘first_post’]=$thread[$key][‘firstpostid’];  // id поста который первый отпостили
$DLE_FORUM[‘last_post_id’]=$thread[$key][‘lastpostid’]; // id последнего поста
// Посты
$DLE_FORUM[‘pid’]=$post[$key][‘postid’];
$DLE_FORUM[‘topic_id’]=$post[$key][‘threadid’];
$DLE_FORUM[‘post_date’]=date(‘Y-m-d H:i:s’,$post[$key][‘dateline’]);
//$DLE_FORUM[‘user_id’]=$user_id[$post[$key][‘postuserid’]];
$DLE_FORUM[‘post_author’]=$post[$key][‘username’];
$DLE_FORUM[‘post_text’]=addslashes($DleForumParse->BB_Parse($post[$key][‘pagetext’])); // здесь проишлось парсить bbcode. Я использовал класс, встроенный в DLE, только немного подправил, чтобы он был автономным. Лежит в архиве в конце статьи.
$DLE_FORUM[‘post_ip’]=$post[$key][‘ipaddress’];
$DLE_FORUM[‘is_register’]=1;

Сам конвертер, вместе со всеми прилигающимися скриптами можно достать из этого архива -> http://www.nadvoe.org.ua/files/vb_dle.zip

Внутри находится:

— index.php — собственно сам конвертер

— set.php — объектов работы с БД, указание настроек соединения

— fm_func_sql.php — прослойка работы с БД

— parse.class.php — подточеный класс из DLE для обработки bb-code

Дампы баз были большие, поэтому восстановление из бекапа я делал через syphex dumper lite. В состав архива не включал.

Полезно(0)Бесполезно(0)

Добавить комментарий