javaeye3/script/import_html5_group.rb

166 lines
6.5 KiB
Ruby

#!/usr/bin/env ruby
#ENV['RAILS_ENV'] = 'production'
require File.dirname(__FILE__) + '/../config/environment'
#log = Logger.new(File.dirname(__FILE__) + "/../log/html5.log")
KEYWORD = 'html5'
HTML5_GROUP = Group.find_by_domain 'html5'
class ImportHtml5Group
def import_topic
topics = Topic.paginate_search KEYWORD, :per_page => 10000, :min_score => 0.1, :fields => [:title]
process_topics topics
end
def process_topics(topics)
topics = topics.sort_by{|t|t.id}
topics.each do |t|
next if %w[hidden delete].include? t.status_flag
body = t.body
if t.none_image_attachments.size > 0
t.bbcode? ? (body = t.body + %Q(\r\n此文章带有附件,请前往[url]#{topic_link_url t}[/url]下载)) : (body = t.body + %Q(\r\n<p>此文章带有附件,请前往<a href="#{topic_link_url t}">#{topic_link_url t}</a>下载</p>))
end
Group.transaction do
#topic
group_topic = HTML5_GROUP.topics.build(:title => t.title, :body => body, :user => t.user)
group_topic.created_at = t.created_at
group_topic.view_count = t.view_count
group_topic.save!
group_post = group_topic.posts.build(:body => body, :user => t.post.user, :bbcode => t.post.bbcode, :ip => t.post.ip)
group_post.created_at = t.post.created_at
group_post.updated_at = t.post.modified_at || t.post.created_at
group_post.save!
#post
posts = t.posts
posts.each do |p|
next if p.id == t.post_id || %w[hidden delete].include?(p.status_flag)
group_post = group_topic.posts.build(:body => p.body, :user => p.user, :bbcode => p.bbcode, :ip => p.ip)
group_post.created_at = p.created_at
group_post.updated_at = p.modified_at || p.created_at
group_post.save!
end
end
end
end
def import_group_topic
topics = GroupTopic.paginate_search KEYWORD, :per_page => 10000, :min_score => 0.1, :fields => [:title]
process_group_topics topics
end
def process_group_topics(topics)
topics = topics.sort_by{|t|t.id}
topics.each do |t|
Group.transaction do
#topic
group_topic = HTML5_GROUP.topics.build(:title => t.title, :body => t.body, :user => t.user)
group_topic.created_at = t.created_at
group_topic.view_count = t.view_count
group_topic.save!
group_post = group_topic.posts.build(:body => t.post.body, :user => t.post.user, :bbcode => t.post.bbcode, :ip => t.post.ip)
group_post.created_at = t.post.created_at
group_post.updated_at = t.post.updated_at || t.post.created_at
group_post.save!
#post
posts = t.posts.sort_by(&:id)
posts.each do |p|
next if p.id == t.post_id
group_post = group_topic.posts.build(:body => p.body, :user => p.user, :bbcode => p.bbcode, :ip => p.ip)
group_post.created_at = p.created_at
group_post.updated_at = p.updated_at || p.created_at
group_post.save!
end
end
end
end
def import_news
news = News.paginate_search KEYWORD, :per_page => 10000, :min_score => 0.1, :fields => [:title]
process_news news
end
def process_news(news)
news = news.sort_by{|t|t.id}
news.each do |n|
next if n.status != 'approved'
Group.transaction do
#news
body = n.body
if n.none_image_attachments.size > 0
n.bbcode? ? (body = n.body + %Q(\r\n此文章带有附件,请前往[url]#{news_link_url n}[/url]下载)) : (body = n.body + %Q(\r\n<p>此文章带有附件,请前往<a href="#{news_link_url n}">#{news_link_url n}</a>下载</p>))
end
group_page = HTML5_GROUP.pages.build(:name => (n.slug_url.present? ? n.slug_url : 'html5'), :tag_list => n.tag_list, :created_by => n.user, :updated_by => n.user, :category_id => 336)
group_page.created_at = n.created_at
group_page.updated_at = n.created_at
group_card = group_page.cards.build :title => n.title, :body => body, :bbcode => n.bbcode, :created_by => n.user, :updated_by => n.user
group_card.created_at = n.created_at
group_card.updated_at = n.created_at
group_page.save!
#comment
n.news_comments.sort_by(&:id).each do |nc|
group_comment = group_page.comments.create! :body => nc.body, :user => nc.user, :ip => nc.ip
group_comment.created_at = nc.created_at
group_comment.save!
end
end
end
end
def import_blog
news = Blog.paginate_search KEYWORD, :per_page => 10000, :min_score => 0.5, :fields => [:title]
process_blogs news
end
def process_blogs(news)
news = news.sort_by{|t|t.id}
news.each do |n|
next if %w[draft trashed deleted].include? n.status
Group.transaction do
#news
body = n.content
if n.none_image_attachments.size > 0
n.bbcode? ? (body = n.content + %Q(\r\n此文章带有附件,请前往[url]#{blog_link_url n}[/url]下载)) : (body = n.content + %Q(\r\n<p>此文章带有附件,请前往<a href="#{blog_link_url n}">#{blog_link_url n}</a>下载</p>))
end
group_page = HTML5_GROUP.pages.build :name => 'html5', :tag_list => n.tag_list, :created_by => n.user, :updated_by => n.user, :category_id => 337
group_page.created_at = n.created_at
group_page.updated_at = n.body_updated_at || n.created_at
group_card = group_page.cards.build(:title => n.title, :body => body, :bbcode => n.bbcode, :created_by => n.user, :updated_by => n.user)
group_card.created_at = n.created_at
group_card.updated_at = n.body_updated_at || n.created_at
group_page.save!
#comment
n.comments.sort_by(&:id).each do |nc|
next if nc.deleted?
group_comment = group_page.comments.build :body => nc.body, :user => nc.user, :ip => nc.ip
group_comment.created_at = nc.created_at
group_comment.save!
end
end
end
end
private
def blog_link_url(blog, anchor = nil)
"http://#{blog.user.domain}.#{DEFAULT_ROOT_DOMAIN}/blog/#{blog.id}#{"##{anchor}" if anchor}"
end
def topic_link_url(topic)
"http://www.#{DEFAULT_ROOT_DOMAIN}/topic/#{topic.id}"
end
def news_link_url(news)
"http://www.#{DEFAULT_ROOT_DOMAIN}/news/#{news.id}"
end
end
i = ImportHtml5Group.new
#外围事务,用于测试时发生异常回滚全部数据, 正式导入时可去掉
#Group.transaction do
# i.import_topic
# i.import_group_topic
# i.import_news
i.import_blog
#end
#test
#i.process_topics([Topic.last])
#i.process_group_topics([GroupTopic.last])
#i.process_news([News.last])
#i.process_blogs([Blog.last])