diff --git a/gossamer_forums.rb b/gossamer_forums.rb index eb1d262..7ad39a0 100644 --- a/gossamer_forums.rb +++ b/gossamer_forums.rb @@ -1,5 +1,5 @@ # gossamer threads migration-import code -# v0.25.5 +# v0.25.6 require 'mysql2' require 'open-uri' @@ -872,6 +872,7 @@ class GossamerForumsImporter < ImportScripts::Base puts "#1" # Ensure the title is valid title = ensure_valid_title(row['post_subject']) + unique_title = title # Confirm the number of views the post has had post_views = fetch_post_views(row['post_id']) @@ -880,21 +881,37 @@ class GossamerForumsImporter < ImportScripts::Base unless TopicCustomField.exists?(name: 'original_gossamer_id', value: row['post_id']) # Create the topic begin - puts "#2" - unique_title = generate_unique_title(title, discourse_user_id, Time.at(row['post_time'])) - puts "CREATE TOPIC unique_title #{unique_title} title #{title} discourse_user_id #{discourse_user_id} category_id #{discourse_category_id}" - topic = Topic.create!( - title: unique_title, - user_id: discourse_user_id, - created_at: Time.at(row['post_time']), - updated_at: Time.at(row['post_time']), - category_id: discourse_category_id, - views: post_views || 0, - posts_count: 0 - ) - topic.custom_fields['original_gossamer_id'] = row['post_id'] - topic.save! + suffix = 1 + topic_created = false + while !topic_created + begin + puts "#2" + unique_title = generate_unique_title(title, discourse_user_id, Time.at(row['post_time'])) + puts "CREATE TOPIC unique_title #{unique_title} title #{title} discourse_user_id #{discourse_user_id} category_id #{discourse_category_id}" + topic = Topic.create!( + title: unique_title, + user_id: discourse_user_id, + created_at: Time.at(row['post_time']), + updated_at: Time.at(row['post_time']), + category_id: discourse_category_id, + views: post_views || 0, + posts_count: 0 + ) + topic.custom_fields['original_gossamer_id'] = row['post_id'] + topic.save! + + topic_created = true + + rescue ActiveRecord::RecordInvalid => e + if e.message.include?("Title has already been used") + unique_title = "#{base_title} (#{suffix})" + suffix += 1 + else + raise e + end + end + end # Track last post time and user for the topic # topic_last_post_time[topic.id] = Time.at(row['post_time']) # topic_last_post_user[topic.id] = discourse_user_id