From a552170766fd9363c55835b3b8af4111cdb75467 Mon Sep 17 00:00:00 2001 From: Dan Dascalescu Date: Tue, 22 Sep 2015 05:26:57 -0700 Subject: [PATCH 1/2] Correct processing of quote line in MyBB import --- script/import_scripts/mybb.rb | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/script/import_scripts/mybb.rb b/script/import_scripts/mybb.rb index b76e1e0d919..e3790e69bd7 100644 --- a/script/import_scripts/mybb.rb +++ b/script/import_scripts/mybb.rb @@ -2,7 +2,7 @@ require "mysql2" require File.expand_path(File.dirname(__FILE__) + "/base.rb") # Call it like this: -# RAILS_ENV=production bundle exec ruby script/import_scripts/mybb.rb +# RAILS_ENV=production ruby script/import_scripts/mybb.rb class ImportScripts::MyBB < ImportScripts::Base MYBB_DB = "mybb_db" @@ -153,9 +153,39 @@ class ImportScripts::MyBB < ImportScripts::Base puts '', "banned users are not implemented" end + def convert_username(username, post_id) + count = 0 + username.gsub!(' ') { |a| count += 1; ' ' } + if count > 5 + puts "Warning: probably incorrect quote in post #{post_id}" + end + return username + end + + def post_id_to_post_num_and_topic(quoted_post_id, post_id) + quoted_post_id_from_imported = post_id_from_imported_post_id(quoted_post_id.to_i) + if quoted_post_id_from_imported + begin + post = Post.find(quoted_post_id_from_imported) + return "post:#{post.post_number}, topic:#{post.topic_id}" + rescue + puts "Could not find migrated post #{quoted_post_id_from_imported} quoted by original post #{post_id} as #{quoted_post_id}" + return "" + end + else + puts "Original post #{post_id} quotes nonexistent post #{quoted_post_id}" + return "" + end + end + def process_mybb_post(raw, import_id) s = raw.dup + # convert the quote line + s.gsub!(/\[quote='([^']+)'.*?pid='(\d+).*?\]/) { + "[quote=\"#{convert_username($1, import_id)}, " + post_id_to_post_num_and_topic($2, import_id) + '"]' + } + # :) is encoded as :) s.gsub!(/(?:.*)/, '\1') @@ -187,3 +217,4 @@ class ImportScripts::MyBB < ImportScripts::Base end ImportScripts::MyBB.new.perform + From 7c2927f8ab0a51bdf68b3b7d7cedf2d921d94d22 Mon Sep 17 00:00:00 2001 From: Dan Dascalescu Date: Tue, 22 Sep 2015 22:31:42 -0700 Subject: [PATCH 2/2] Fix username conversion. Add comments. --- script/import_scripts/mybb.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/script/import_scripts/mybb.rb b/script/import_scripts/mybb.rb index e3790e69bd7..19c5bd1d4e2 100644 --- a/script/import_scripts/mybb.rb +++ b/script/import_scripts/mybb.rb @@ -153,15 +153,18 @@ class ImportScripts::MyBB < ImportScripts::Base puts '', "banned users are not implemented" end + # Discourse usernames don't allow spaces def convert_username(username, post_id) count = 0 - username.gsub!(' ') { |a| count += 1; ' ' } + username.gsub!(' ') { |a| count += 1; '_' } + # Warn on MyBB bug that places post text in the quote line - http://community.mybb.com/thread-180526.html if count > 5 puts "Warning: probably incorrect quote in post #{post_id}" end return username end + # Take an original post id and return the migrated topic id and post number for it def post_id_to_post_num_and_topic(quoted_post_id, post_id) quoted_post_id_from_imported = post_id_from_imported_post_id(quoted_post_id.to_i) if quoted_post_id_from_imported