mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 15:48:43 -05:00
Merge pull request #4442 from pfaffman/kunena3-improvements
KUNENA3 importer: parameterize database and fields, link to attachments
This commit is contained in:
commit
262297965f
1 changed files with 18 additions and 10 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue