20240604
This commit is contained in:
parent
3bb197da4f
commit
286a7956ea
@ -244,7 +244,7 @@ class GossamerForumsImporter < ImportScripts::Base
|
|||||||
# Create category in Discourse
|
# Create category in Discourse
|
||||||
category = create_category(
|
category = create_category(
|
||||||
{
|
{
|
||||||
id: row['forum_id'],
|
id: row['forum_id'] + 10,
|
||||||
name: category_name,
|
name: category_name,
|
||||||
description: category_description,
|
description: category_description,
|
||||||
created_at: row['forum_last'] ? Time.at(row['forum_last']) : Time.now,
|
created_at: row['forum_last'] ? Time.at(row['forum_last']) : Time.now,
|
||||||
@ -264,54 +264,93 @@ class GossamerForumsImporter < ImportScripts::Base
|
|||||||
puts "Importing categories... Done."
|
puts "Importing categories... Done."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Helper function to ensure title meets the minimum length requirement
|
||||||
|
def ensure_valid_title(title, min_length = 5)
|
||||||
|
if title.length < min_length
|
||||||
|
title += "." * (min_length - title.length) # Append dots to make it longer
|
||||||
|
end
|
||||||
|
title
|
||||||
|
end
|
||||||
|
|
||||||
# Import topics and posts from Gossamer Forums to Discourse
|
# Import topics and posts from Gossamer Forums to Discourse
|
||||||
def import_topics_and_posts
|
def import_topics_and_posts
|
||||||
puts "Importing topics and posts..."
|
puts "Importing topics and posts..."
|
||||||
execute_query("SELECT * FROM gforum_Post ORDER BY post_root_id, post_time").each do |row|
|
|
||||||
if row['post_id'] == row['post_root_id']
|
# Execute the query to get all posts ordered by post_id
|
||||||
|
execute_query("SELECT * FROM gforum_Post ORDER BY post_id").each do |row|
|
||||||
|
puts "post_id #{row['post_id']} post_root_id #{row['post_root_id']} post_subject/title #{row['post_subject']} forum_id_fk/category_id #{row['forum_id_fk']}"
|
||||||
|
if row['post_root_id'] == 0
|
||||||
|
# Ensure the title is valid
|
||||||
|
title = ensure_valid_title(row['post_subject'])
|
||||||
|
|
||||||
# Skip if the topic already exists
|
# Skip if the topic already exists
|
||||||
unless TopicCustomField.exists?(name: 'original_gossamer_id', value: row['post_id'])
|
unless TopicCustomField.exists?(name: 'original_gossamer_id', value: row['post_id'])
|
||||||
# Create the topic
|
# Create the topic
|
||||||
topic = Topic.create!(
|
begin
|
||||||
title: row['post_subject'],
|
topic = Topic.create!(
|
||||||
user_id: row['user_id_fk'],
|
title: title,
|
||||||
created_at: Time.at(row['post_time']),
|
user_id: row['user_id_fk'],
|
||||||
updated_at: Time.at(row['post_latest_reply']),
|
created_at: Time.at(row['post_time']),
|
||||||
category_id: row['forum_id_fk']
|
updated_at: Time.at(row['post_latest_reply']),
|
||||||
)
|
category_id: row['forum_id_fk'] + 10
|
||||||
topic.custom_fields['original_gossamer_id'] = row['post_id']
|
)
|
||||||
topic.save!
|
topic.custom_fields['original_gossamer_id'] = row['post_id']
|
||||||
|
topic.save!
|
||||||
|
|
||||||
# Create the initial post in the topic
|
# Create the initial post in the topic
|
||||||
post = Post.create!(
|
post = Post.create!(
|
||||||
topic_id: topic.id,
|
topic_id: topic.id,
|
||||||
user_id: row['user_id_fk'],
|
user_id: row['user_id_fk'],
|
||||||
raw: import_post_attachments(row['post_message'], row['post_id']),
|
raw: import_post_attachments(row['post_message'], row['post_id']),
|
||||||
created_at: Time.at(row['post_time']),
|
created_at: Time.at(row['post_time']),
|
||||||
updated_at: Time.at(row['post_latest_reply'])
|
updated_at: Time.at(row['post_latest_reply'])
|
||||||
)
|
)
|
||||||
post.custom_fields['original_gossamer_id'] = row['post_id']
|
post.custom_fields['original_gossamer_id'] = row['post_id']
|
||||||
post.save!
|
post.save!
|
||||||
|
rescue ActiveRecord::RecordInvalid => e
|
||||||
|
puts "Error importing topic with post_id #{row['post_id']}: #{e.message}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
# Skip if the post already exists
|
# Find the root topic for the post
|
||||||
unless PostCustomField.exists?(name: 'original_gossamer_id', value: row['post_id'])
|
root_topic_field = TopicCustomField.find_by(name: 'original_gossamer_id', value: row['post_root_id'])
|
||||||
|
|
||||||
|
if root_topic_field
|
||||||
|
topic_id = root_topic_field.topic_id
|
||||||
|
|
||||||
|
# Find the parent post for the reply
|
||||||
|
parent_post_field = PostCustomField.find_by(name: 'original_gossamer_id', value: row['post_father_id'])
|
||||||
|
reply_to_post_number = parent_post_field ? Post.find(parent_post_field.post_id).post_number : nil
|
||||||
|
|
||||||
# Create the post in the existing topic
|
# Create the post in the existing topic
|
||||||
post = Post.create!(
|
begin
|
||||||
topic_id: row['post_root_id'],
|
post = Post.create!(
|
||||||
user_id: row['user_id_fk'],
|
topic_id: topic_id,
|
||||||
raw: import_post_attachments(row['post_message'], row['post_id']),
|
user_id: row['user_id_fk'],
|
||||||
created_at: Time.at(row['post_time']),
|
raw: import_post_attachments(row['post_message'], row['post_id']),
|
||||||
updated_at: Time.at(row['post_latest_reply']),
|
created_at: Time.at(row['post_time']),
|
||||||
reply_to_post_number: row['post_father_id']
|
updated_at: Time.at(row['post_latest_reply']),
|
||||||
)
|
reply_to_post_number: reply_to_post_number
|
||||||
post.custom_fields['original_gossamer_id'] = row['post_id']
|
)
|
||||||
post.save!
|
post.custom_fields['original_gossamer_id'] = row['post_id']
|
||||||
|
post.save!
|
||||||
|
rescue ActiveRecord::RecordInvalid => e
|
||||||
|
puts "Error importing post with post_id #{row['post_id']}: #{e.message}"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
puts "Warning: Root topic not found for post_id #{row['post_id']} with post_root_id #{row['post_root_id']}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Import topics and posts from Gossamer Forums to Discourse
|
||||||
|
# def import_topics_and_posts
|
||||||
|
# puts "Importing topics and posts..."
|
||||||
|
# execute_query("SELECT * FROM gforum_Post ORDER BY post_root_id, post_time").each do |row|
|
||||||
|
# puts "post_id #{row['post_id']} post_root_id #{row['post_root_id']} post_subject #{row['post_subject']}"
|
||||||
|
|
||||||
# Import attachments for a post
|
# Import attachments for a post
|
||||||
def import_post_attachments(post_message, post_id)
|
def import_post_attachments(post_message, post_id)
|
||||||
# Fetch attachments related to the post
|
# Fetch attachments related to the post
|
||||||
@ -397,6 +436,7 @@ end
|
|||||||
|
|
||||||
# Main method to perform the import
|
# Main method to perform the import
|
||||||
def perform_import
|
def perform_import
|
||||||
|
RateLimiter.disable
|
||||||
puts "Starting Gossamer Forums import..."
|
puts "Starting Gossamer Forums import..."
|
||||||
# import_users
|
# import_users
|
||||||
import_categories
|
import_categories
|
||||||
|
Loading…
Reference in New Issue
Block a user