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']}" ); } }