Files
RomhackPlaza/app/Console/Commands/MigrateEntriesComments.php
2026-06-23 19:24:38 +02:00

81 lines
2.5 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Attributes\Signature;
use Illuminate\Console\Command;
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\DB;
#[Signature('migrate:entries:comments {--import-log-table=} {--limit=}')]
class MigrateEntriesComments extends Command
{
public function handle()
{
$logTable = $this->option('import-log-table');
if( !$logTable ){
$this->error( 'XenForo import log table required' );
return self::FAILURE;
}
$this->commentsThread( 'entries', 'wp_posts', $logTable );
$this->commentsThread( 'news', 'wp_posts__news', $logTable );
$this->info( "Done" );
return self::SUCCESS;
}
private function commentsThread( string $table, string $sourceTable, string $logTable ): void
{
$query = DB::table('migrations_logs')
->where('source_system', 'wp' )
->where('source_table', $sourceTable )
->where('target_table', $table );
if( $limit = $this->option('limit') ){
$query->limit((int)$limit);
}
$rows = $query->get(['source_id', 'target_id']);
$this->info( "{$rows->count()} need migration logs" );
$stats = [ 'updated' => 0, 'no_meta' => 0, 'no_new_thread' => 0 ];
$this->withProgressBar( $rows, function ( $row ) use( $table, $logTable, &$stats ) {
$oldThreadId = DB::connection('old_wp')
->table('postmeta')
->where('post_id', $row->source_id )
->where('meta_key', 'xf_thread_id')
->value('meta_value');
if( !$oldThreadId ){
$stats['no_meta']++;
return;
}
$newThreadId = DB::connection('xenforo')
->withoutTablePrefix( function( Connection $db ) use( $logTable, $oldThreadId ){
return $db->table( $logTable )
->where('content_type', 'thread')
->where('old_id', (string) $oldThreadId )
->value('new_id');
});
if( !$newThreadId ){
$stats['no_new_thread']++;
return;
}
DB::table( $table )->where('id', $row->target_id )->update([
'comments_thread_id' => (int) $newThreadId
]);
$stats['updated']++;
});
$this->newLine();
$this->info( "Updated: {$stats['updated']}, No new thread: {$stats['no_new_thread']}, No meta: {$stats['no_meta']}" );
}
}