parameterize database and fields, link to attachments

This commit is contained in:
Jay Pfaffman 2016-09-15 15:24:06 -07:00
parent b9801d2e26
commit 152e5b9b7e
1 changed files with 18 additions and 10 deletions

View File

@ -1,17 +1,23 @@
require "mysql2" require "mysql2"
require File.expand_path(File.dirname(__FILE__) + "/base.rb") require File.expand_path(File.dirname(__FILE__) + "/base.rb")
# HOWTO: https://meta.discourse.org/t/importing-from-kunena-3/43776
class ImportScripts::Kunena < ImportScripts::Base class ImportScripts::Kunena < ImportScripts::Base
KUNENA_DB = "DATABASENAME" KUNENA_DB = "kunena"
KUNENA_PREFIX = "jos_" # "iff_" sometimes
# Path to [attachment]s
IMAGE_PREFIX = "http://EXAMPLE.com/media/kunena/attachments"
PARENT_FIELD = "parent_id" # try "parent" in case of "Unknown column 'parent_id'"
def initialize def initialize
super super
@users = {} @users = {}
@client = Mysql2::Client.new( @client = Mysql2::Client.new(
host: "HOSTNAME.COM", host: "HOSTNAME",
username: "DATABASE_USER_NAME", username: "DATABASE_USER_NAME",
password: "DATABASE_USER_PASSWORD", password: "DATABASE_USER_PASSWORD",
database: KUNENA_DB database: KUNENA_DB
@ -37,7 +43,7 @@ class ImportScripts::Kunena < ImportScripts::Base
@users = nil @users = nil
create_categories(@client.query("SELECT id, parent_id, name, description, ordering FROM jos_kunena_categories ORDER BY parent_id, id;")) do |c| create_categories(@client.query("SELECT id, #{PARENT_FIELD} as parent_id, name, description, ordering FROM #{KUNENA_PREFIX}kunena_categories ORDER BY #{PARENT_FIELD}, id;")) do |c|
h = {id: c['id'], name: c['name'], description: c['description'], position: c['ordering'].to_i} h = {id: c['id'], name: c['name'], description: c['description'], position: c['ordering'].to_i}
if c['parent_id'].to_i > 0 if c['parent_id'].to_i > 0
h[:parent_category_id] = category_id_from_imported_category_id(c['parent_id']) h[:parent_category_id] = category_id_from_imported_category_id(c['parent_id'])
@ -59,7 +65,7 @@ class ImportScripts::Kunena < ImportScripts::Base
# Need to merge data from joomla with kunena # Need to merge data from joomla with kunena
puts "fetching Joomla users data from mysql" puts "fetching Joomla users data from mysql"
results = @client.query("SELECT id, username, email, registerDate FROM jos_users;", cache_rows: false) results = @client.query("SELECT id, username, email, registerDate FROM #{KUNENA_PREFIX}users;", cache_rows: false)
results.each do |u| results.each do |u|
next unless u['id'].to_i > 0 and u['username'].present? and u['email'].present? next unless u['id'].to_i > 0 and u['username'].present? and u['email'].present?
username = u['username'].gsub(' ', '_').gsub(/[^A-Za-z0-9_]/, '')[0,User.username_length.end] username = u['username'].gsub(' ', '_').gsub(/[^A-Za-z0-9_]/, '')[0,User.username_length.end]
@ -70,7 +76,7 @@ class ImportScripts::Kunena < ImportScripts::Base
end end
puts "fetching Kunena user data from mysql" puts "fetching Kunena user data from mysql"
results = @client.query("SELECT userid, signature, moderator, banned FROM jos_kunena_users;", cache_rows: false) results = @client.query("SELECT userid, signature, moderator, banned FROM #{KUNENA_PREFIX}kunena_users;", cache_rows: false)
results.each do |u| results.each do |u|
next unless u['userid'].to_i > 0 next unless u['userid'].to_i > 0
user = @users[u['userid'].to_i] user = @users[u['userid'].to_i]
@ -85,7 +91,7 @@ class ImportScripts::Kunena < ImportScripts::Base
def import_posts def import_posts
puts '', "creating topics and posts" puts '', "creating topics and posts"
total_count = @client.query("SELECT COUNT(*) count FROM jos_kunena_messages m;").first['count'] total_count = @client.query("SELECT COUNT(*) count FROM #{KUNENA_PREFIX}kunena_messages m;").first['count']
batch_size = 1000 batch_size = 1000
@ -99,8 +105,8 @@ class ImportScripts::Kunena < ImportScripts::Base
m.subject subject, m.subject subject,
m.time time, m.time time,
t.message message t.message message
FROM jos_kunena_messages m, FROM #{KUNENA_PREFIX}kunena_messages m,
jos_kunena_messages_text t #{KUNENA_PREFIX}kunena_messages_text t
WHERE m.id = t.mesid WHERE m.id = t.mesid
ORDER BY m.id ORDER BY m.id
LIMIT #{batch_size} LIMIT #{batch_size}
@ -117,7 +123,9 @@ class ImportScripts::Kunena < ImportScripts::Base
mapped[:id] = m['id'] mapped[:id] = m['id']
mapped[:user_id] = user_id_from_imported_user_id(m['userid']) || -1 mapped[:user_id] = user_id_from_imported_user_id(m['userid']) || -1
mapped[:raw] = m["message"]
id = m['userid']
mapped[:raw] = m["message"].gsub(/\[attachment=[0-9]+\](.+?)\[\/attachment\]/, "\n#{IMAGE_PREFIX}/#{id}/\\1")
mapped[:created_at] = Time.zone.at(m['time']) mapped[:created_at] = Time.zone.at(m['time'])
if m['parent'] == 0 if m['parent'] == 0