From a552170766fd9363c55835b3b8af4111cdb75467 Mon Sep 17 00:00:00 2001
From: Dan Dascalescu <ddascalescu+github@gmail.com>
Date: Tue, 22 Sep 2015 05:26:57 -0700
Subject: [PATCH] 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 b76e1e0d9..e3790e69b 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:) --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
     s.gsub!(/<!-- s(\S+) -->(?:.*)<!-- s(?:\S+) -->/, '\1')
 
@@ -187,3 +217,4 @@ class ImportScripts::MyBB < ImportScripts::Base
 end
 
 ImportScripts::MyBB.new.perform
+