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

118 lines
3.6 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Helpers\MigrationHelpers;
use Illuminate\Console\Attributes\Signature;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
#[Signature('migrate:reviews:execute {--limit=}')]
class MigrateReviewsExecute extends Command
{
private function migrateReview( $post, array &$stats ): void
{
$exists = DB::table('migrations_logs')
->where('source_system', 'wp')
->where('source_table', 'wp_posts__reviews')
->where('source_id', $post->ID )
->exists();
if( $exists )
return;
$meta = DB::connection('old_wp')
->table('postmeta')
->where('post_id', $post->ID)
->whereIn('meta_key', ['reviews_post_link', 'review_rating'])
->pluck('meta_value', 'meta_key')
;
$linkedWpPostId = $meta['reviews_post_link'] ?? null;
if( !$linkedWpPostId ){
$stats['missing_entry']++;
return;
}
$entryId = DB::table('migrations_logs')
->where('source_system', 'wp')
->where('source_table', 'wp_posts')
->where('source_id', (int) $linkedWpPostId )
->where('target_table', 'entries')
->value('target_id');
if( !$entryId ){
$stats['missing_entry']++;
return;
}
$userId = DB::table('migration_user_plan')
->where('wp_user_id', $post->post_author )
->value('user_id');
if( !$userId ){
$stats['missing_author']++;
return;
}
$rating = $meta['review_rating'] ?? null;
if( $rating === null || $rating === '' ){
$stats['missing_rating']++;
return;
}
$description = trim($post->post_content) === '' ? '' : MigrationHelpers::htmlToMarkdown($post->post_content);
$reviewId = DB::table('entry_reviews')->insertGetId([
'entry_id' => $entryId,
'title' => $post->post_title,
'rating' => (int) $rating,
'description' => $description,
'user_id' => $userId,
'created_at' => $post->post_date,
'updated_at' => $post->post_modified,
]);
DB::table('migrations_logs')->insert([
'source_system' => 'wp',
'source_table' => 'wp_posts__reviews',
'source_id' => $post->ID,
'target_table' => 'entry_reviews',
'target_id' => $reviewId,
'status' => 'done',
'migrated_at' => now(),
'created_at' => now(),
'updated_at' => now(),
]);
$stats['created']++;
}
public function handle(): int
{
$query = DB::connection('old_wp')
->table('posts')
->where('post_type', 'reviews')
->where('post_status', 'publish')
;
if( $limit = $this->option('limit') ) {
$query->limit((int) $limit);
}
$posts = $query->select('ID', 'post_title', 'post_content', 'post_author', 'post_date', 'post_modified' )->get();
$this->info("{$posts->count()} reviews found.");
$stats = ['created' => 0, 'missing_entry' => 0, 'missing_author' => 0, 'missing_rating' => 0 ];
$this->withProgressBar($posts, function($post) use (&$stats){
$this->migrateReview($post, $stats);
});
$this->newLine();
$this->info("{$stats['created']} reviews created. {$stats['missing_entry']} missing entry. {$stats['missing_author']} missing author. {$stats['missing_rating']} missing rating.");
return self::SUCCESS;
}
}