Скрипт миграции с quip на tickets (проблемы после WP)
Василий написал скрипт миграции с quip на tickets. С тех пор скрипт был проверен уже сильно больше 3-х раз и доказал свою работоспособность. Но я сейчас пытаюсь перенести блог с Wordpress'а на MODX. Приходится извращаться: ставить articles, импортировать записи из WP в articles и quip, а затем этим скриптом переносить их в tickets (отдельная тема — переделать articles в collections).
В файле экспорта, который сгенерировал WP, комментарии к посту идут в каком-то рандомном порядке. В quip id этих комметариев импортируется в том же порядке. Соотвественно, и в Tickets, после импорта этим скриптом, id старого комментария может оказаться меньше, чем у нового. При вызове TicketComments получаю комментарии разных лет вперемешку.
Если в скрипте Василия заменить $q->sortby('id','ASC'); на $q->sortby('createdon','ASC');, то порядок комментариев получается правильный, но сбивается привязка дочерних/родительских комментариев.
Вопросы.
— Можно ли как-то сильно не напрягаясь починить привязку? Править ручками в базе не очень хочется. Там есть статья с 728 каментами.
— Есть ли ещё какие-то скрипты импорта статей с комментариями из WP в MODX? Или можеть быть это можно реализовать через какие-нибудь сервисы-посредники? Например, WP -> Blogger -> MODX?
— Быть может есть герои, которые прямо сейчас пишут навороченную систему импорта/экспорта для MODX и ждать осталось уже не долго?
Ну, и продублирую тут код скрипта Василия:
В файле экспорта, который сгенерировал WP, комментарии к посту идут в каком-то рандомном порядке. В quip id этих комметариев импортируется в том же порядке. Соотвественно, и в Tickets, после импорта этим скриптом, id старого комментария может оказаться меньше, чем у нового. При вызове TicketComments получаю комментарии разных лет вперемешку.
Если в скрипте Василия заменить $q->sortby('id','ASC'); на $q->sortby('createdon','ASC');, то порядок комментариев получается правильный, но сбивается привязка дочерних/родительских комментариев.
Вопросы.
— Можно ли как-то сильно не напрягаясь починить привязку? Править ручками в базе не очень хочется. Там есть статья с 728 каментами.
— Есть ли ещё какие-то скрипты импорта статей с комментариями из WP в MODX? Или можеть быть это можно реализовать через какие-нибудь сервисы-посредники? Например, WP -> Blogger -> MODX?
— Быть может есть герои, которые прямо сейчас пишут навороченную систему импорта/экспорта для MODX и ждать осталось уже не долго?
Ну, и продублирую тут код скрипта Василия:
// Вывод ошибок
ini_set('display_errors', 1);
ini_set('memory_limit', '512M');
error_reporting(E_ERROR);
// Подключаем
define('MODX_API_MODE', true);
require 'index.php';
// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_FATAL);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$modx->addPackage('tickets',$modx->getOption('tickets.core_path',null,$modx->getOption('core_path').'components/tickets/').'model/');
$modx->addPackage('quip', $modx->getOption('quip.core_path',null,$modx->getOption('core_path').'components/quip/').'model/');
$resources = array();
$q = $modx->newQuery('quipComment');
$q->select('parent,author as createdby,body as text,createdon,editedon,name,email,ip,deleted,deletedby,deletedon,resource');
$q->sortby('id','ASC');
if ($q->prepare() && $q->stmt->execute()) {
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $v) {
if (empty($resources[$v['resource']])) {
if (!$resource = $modx->getObject('TicketThread', array('name' => 'resource-'.$v['resource']))) {
$resource = $modx->newObject('TicketThread', array(
'name' => 'resource-'.$v['resource']
,'createdby' => $v['author']
,'createdon' => date('Y-m-d H:i:s')
,'resource' => $v['resource']
));
$resource->save();
}
$resources[$v['resource']] = $resource->get('id');
}
$comment = $modx->newObject('TicketComment');
$v['thread'] = $resources[$v['resource']];
$comment->fromArray($v, '', true);
$comment->save();
}
}