v0.2 Address where due to import issues there are some stray PostCustomField records for Posts that do not exist.
This commit is contained in:
parent
a85d33d1e3
commit
e18a7602a8
@ -1,7 +1,7 @@
|
|||||||
# Federated Computer, Inc.
|
# Federated Computer, Inc.
|
||||||
# David Sainty <saint@federated.computer> 2024 A.D.
|
# David Sainty <saint@federated.computer> 2024 A.D.
|
||||||
# Gossamer Threads to Discourse -- Soft Deletion of Marked-As-Deleted Posts
|
# Gossamer Threads to Discourse -- Soft Deletion of Marked-As-Deleted Posts
|
||||||
# v0.1 Move from destroy to soft deletion.
|
# v0.2 Address where due to import issues there are some stray PostCustomField records for Posts that do not exist.
|
||||||
|
|
||||||
require 'mysql2'
|
require 'mysql2'
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
@ -46,20 +46,21 @@ class GossamerForumsSoftDelDeletedPosts < ImportScripts::Base
|
|||||||
# Soft delete the post, whether topic post (OP) or reply post
|
# Soft delete the post, whether topic post (OP) or reply post
|
||||||
def soft_delete_post(post, deleted_by_id)
|
def soft_delete_post(post, deleted_by_id)
|
||||||
if post.deleted_at.nil?
|
if post.deleted_at.nil?
|
||||||
# Get the post's owner and topic information
|
# # Get the post's owner and topic information
|
||||||
user = User.find_by(id: post.user_id) # Fetch user details
|
# user = User.find_by(id: post.user_id) # Fetch user details
|
||||||
topic = Topic.find_by(id: post.topic_id) # Fetch topic details
|
# topic = Topic.find_by(id: post.topic_id) # Fetch topic details
|
||||||
|
|
||||||
# Display post, user, and topic information
|
# # Display post, user, and topic information
|
||||||
puts "DELETING POST: SoftDelDeletedPosts: Soft deleting post with id: #{post.id}"
|
# puts "DELETING POST: SoftDelDeletedPosts: Soft deleting post with id: #{post.id}"
|
||||||
puts " - Post owner: #{user.username} (ID: #{user.id})"
|
# puts " - Post owner: #{user.username} (ID: #{user.id})"
|
||||||
puts " - Topic title: '#{topic.title}' (Topic ID: #{topic.id})"
|
# puts " - Topic title: '#{topic.title}' (Topic ID: #{topic.id})"
|
||||||
|
|
||||||
# Perform the soft delete by updating the fields
|
# Perform the soft delete by updating the fields
|
||||||
## post.deleted_at = Time.now
|
## post.deleted_at = Time.now
|
||||||
## post.deleted_by_id = deleted_by_id
|
## post.deleted_by_id = deleted_by_id
|
||||||
## post.save
|
## post.save
|
||||||
### post.update(deleted_at: Time.now, deleted_by_id: deleted_by_id)
|
puts "... actual deleted_at step"
|
||||||
|
### post.update(deleted_at: Time.now, deleted_by_id: deleted_by_id)
|
||||||
else
|
else
|
||||||
puts "SoftDelDeletedPosts: Post with id: #{post.id} is already soft deleted."
|
puts "SoftDelDeletedPosts: Post with id: #{post.id} is already soft deleted."
|
||||||
end
|
end
|
||||||
@ -96,8 +97,8 @@ class GossamerForumsSoftDelDeletedPosts < ImportScripts::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Define the method to reverse (soft undelete) the soft deletion
|
# Define the method to reverse (soft undelete) the soft deletion
|
||||||
def soft_undelete_post(post)
|
def soft_undelete_post(post)
|
||||||
if post.deleted_at.present?
|
if post.deleted_at.present?
|
||||||
# Get the post's owner and topic information
|
# Get the post's owner and topic information
|
||||||
user = User.find_by(id: post.user_id) # Fetch user details
|
user = User.find_by(id: post.user_id) # Fetch user details
|
||||||
@ -113,10 +114,10 @@ def soft_undelete_post(post)
|
|||||||
else
|
else
|
||||||
puts "SoftDelDeletedPosts: Post with id: #{post.id} is not soft deleted."
|
puts "SoftDelDeletedPosts: Post with id: #{post.id} is not soft deleted."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Define the method to reverse the soft deletion for all legacy posts
|
# Define the method to reverse the soft deletion for all legacy posts
|
||||||
def soft_undelete_all_deleted_posts
|
def soft_undelete_all_deleted_posts
|
||||||
# Query the legacy database for posts marked as deleted
|
# Query the legacy database for posts marked as deleted
|
||||||
posts_result = @mysql_client.query("SELECT post_id FROM gforum_Post WHERE post_deleted = 1")
|
posts_result = @mysql_client.query("SELECT post_id FROM gforum_Post WHERE post_deleted = 1")
|
||||||
|
|
||||||
@ -131,7 +132,7 @@ def soft_undelete_all_deleted_posts
|
|||||||
soft_undelete_post(post)
|
soft_undelete_post(post)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Define the method to delete posts based on the Gossamer Forums flag
|
# Define the method to delete posts based on the Gossamer Forums flag
|
||||||
def soft_del_all_deleted_posts
|
def soft_del_all_deleted_posts
|
||||||
@ -145,14 +146,47 @@ end
|
|||||||
posts_result.each do |legacy_post|
|
posts_result.each do |legacy_post|
|
||||||
post_id = legacy_post['post_id']
|
post_id = legacy_post['post_id']
|
||||||
|
|
||||||
# Look for the post in Discourse by custom field
|
# # Look for the post in Discourse by custom field
|
||||||
post = find_post_by_custom_field(post_id)
|
# post = find_post_by_custom_field(post_id)
|
||||||
|
#
|
||||||
|
# if post
|
||||||
|
# # Soft delete only the individual post (whether topic post / OP or a reply post)
|
||||||
|
# soft_delete_post(post, deleted_by_id)
|
||||||
|
# end
|
||||||
|
soft_del_all_deleted_posts_by_custom_field(post_id, deleted_by_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Define a method to find all posts by the original Gossamer Forums post ID and soft delete them
|
||||||
|
def soft_del_all_deleted_posts_by_custom_field(post_id, deleted_by_id)
|
||||||
|
puts "SoftDelDeletedPosts: Searching for all posts with original_gossamer_id: #{post_id}"
|
||||||
|
|
||||||
|
# Find all PostCustomField records with the given Gossamer Forums post_id
|
||||||
|
post_custom_fields = PostCustomField.where(name: 'original_gossamer_id', value: post_id.to_s)
|
||||||
|
|
||||||
|
if post_custom_fields.any?
|
||||||
|
post_custom_fields.each do |post_custom_field|
|
||||||
|
post = post_custom_field.post
|
||||||
|
|
||||||
if post
|
if post
|
||||||
# Soft delete only the individual post (whether topic post / OP or a reply post)
|
# Get the post's owner and topic information
|
||||||
|
user = User.find_by(id: post.user_id) # Fetch user details
|
||||||
|
topic = Topic.find_by(id: post.topic_id) # Fetch topic details
|
||||||
|
|
||||||
|
# Display post, user, and topic information
|
||||||
|
puts "DELETING POST: SoftDelDeletedPosts: Soft deleting post with id: #{post.id}"
|
||||||
|
puts " - Post owner: #{user.username} (ID: #{user.id})"
|
||||||
|
puts " - Topic title: '#{topic.title}' (Topic ID: #{topic.id})"
|
||||||
|
|
||||||
|
# Soft delete the post if not already deleted
|
||||||
soft_delete_post(post, deleted_by_id)
|
soft_delete_post(post, deleted_by_id)
|
||||||
|
else
|
||||||
|
puts "SoftDelDeletedPosts: Found PostCustomField with no corresponding post (ID: #{post_custom_field.id})"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
puts "SoftDelDeletedPosts: No PostCustomField records found with original_gossamer_id: #{post_id}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user