From 7d6164eef20c3d2c25467f9ab1b01469766019ab Mon Sep 17 00:00:00 2001 From: Aidan Cornelius-Bell Date: Sat, 2 Nov 2024 13:57:47 +1030 Subject: [PATCH] Fixed the import function so it imports exported data; removed legacy import from deprecated php app --- app/controllers/posts_controller.rb | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 1b8b569..1c6685c 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -71,17 +71,42 @@ class PostsController < ApplicationController import_results = { success: 0, failed: 0, errors: [] } ActiveRecord::Base.transaction do - import_posts(data['posts'], import_results) if data['posts'].is_a?(Array) - import_bookmarks(data['bookmarks'], import_results) if data['bookmarks'].is_a?(Array) + data.each do |post_data| + next unless post_data.is_a?(Hash) + + # Convert string IDs to integers + post_data['id'] = post_data['id'].to_i if post_data['id'].present? + + post = Post.new( + id: post_data['id'], + title: post_data['title'], + slug: post_data['slug'], + content: post_data['content'], + excerpt: post_data['excerpt'], + tags: post_data['tags'], + url: post_data['url'], + post_type: post_data['post_type'], + published_at: post_data['published_at'] + ) + + if post.save + import_results[:success] += 1 + else + import_results[:failed] += 1 + import_results[:errors] << "Error saving post #{post_data['id']}: #{post.errors.full_messages.join(', ')}" + end + end end if import_results[:failed] > 0 flash[:warning] = "Import partially succeeded. Successful: #{import_results[:success]}, Failed: #{import_results[:failed]}. Check the logs for detailed errors." + logger.error "Import Errors: #{import_results[:errors].join("\n")}" else flash[:notice] = "Data imported successfully. Total items: #{import_results[:success]}" end rescue JSON::ParserError flash[:alert] = "Invalid JSON file." + logger.error "JSON Parse Error" rescue => e flash[:alert] = "Error importing data: #{e.message}" logger.error "Import Error: #{e.message}\n#{e.backtrace.join("\n")}" -- 2.39.5