orbit4-5/app/controllers/admin/import_controller.rb

760 lines
32 KiB
Ruby
Raw Normal View History

2014-05-30 11:32:51 +00:00
# encoding: utf-8
require "net/http"
require "uri"
require 'json'
require 'yaml'
2014-05-30 11:32:51 +00:00
class Admin::ImportController < OrbitAdminController
2014-06-06 04:22:55 +00:00
layout "structure"
2014-06-11 07:16:32 +00:00
before_filter :get_user
2014-06-06 04:22:55 +00:00
2014-06-11 07:16:32 +00:00
@@import_stats = {}
@@thread = nil
2014-06-06 04:22:55 +00:00
def check_url
params['url'] = params['url']+"/" if params['url'].last!="/"
uri = URI.parse(params['url'])
begin
@host = uri.host
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
msg = data['status']
rescue
msg = "Failed to connect to RSS2 (#{uri.to_s})"
end
render :json=>{"status"=>msg}
end
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
def module_categories
module_app = ModuleApp.find_by(:key=>params['module'])
uri = URI.parse(params['url'])
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
categories = JSON.parse(data)
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
I18n.locale = :zh_tw
categories.each do |id, category|
old_cate = module_app.categories.where(:title => category["zh_tw"]).first
if old_cate.nil?
2014-05-30 11:32:51 +00:00
cat = Category.new
2014-06-06 04:22:55 +00:00
cat.title_translations = category
cat.save!
module_app.categories << cat
categories[id]['id'] = cat.id.to_s
2014-05-30 11:32:51 +00:00
else
2014-06-06 04:22:55 +00:00
categories[id]['id'] = old_cate.id.to_s
2014-05-30 11:32:51 +00:00
end
end
2014-06-06 04:22:55 +00:00
render :json=>categories
end
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
def module_data_list
uri = URI.parse(params['url'])
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
render :json=>data
end
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
def module_data
uri = URI.parse(params['url'])
2014-06-19 08:50:11 +00:00
@host = uri.host
2014-06-06 04:22:55 +00:00
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
case params['module']
when 'archive'
import_archive(data)
when 'announcement'
import_announcement(data)
end
render :json=>['status'=>'ok']
end
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
def import_archive(file)
archive_file = ArchiveFile.where(:rss2_sn=>file['Sn']).first
if archive_file.nil?
archive_file = ArchiveFile.new
archive_file.rss2_sn = file['Sn']
2014-06-17 03:45:08 +00:00
else
archive_file.archive_file_multiples.destroy_all
2014-06-06 04:22:55 +00:00
end
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
archive_file.title_translations = file['title']
archive_file.sort_number = file['sort_number']
archive_file.category = Category.find(params["category"])
archive_file.create_user_id = current_user.id
archive_file.update_user_id = current_user.id
archive_file.save
if(file['url'])
archive = ArchiveFileMultiple.new({
:file_title_translations=>file['title'],
:choose_lang => @site_valid_locales,
:remote_file_url => file['url'],
:sort_number=>file['sort_number']
})
archive.save
archive_file.archive_file_multiples << archive
end
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
if(file['url2'])
archive = ArchiveFileMultiple.new({
:file_title_translations=>file['title'],
:choose_lang => @site_valid_locales,
:remote_file_url => file['url2'],
:sort_number=>file['sort_number']
})
archive.save
archive_file.archive_file_multiples << archive
end
end
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
def import_announcement(news)
bulletin = Bulletin.where(:rss2_sn=>news['Sn']).first
if bulletin.nil?
bulletin = Bulletin.new
bulletin.rss2_sn = news['Sn']
2014-06-17 03:45:08 +00:00
else
bulletin.bulletin_links.destroy_all
bulletin.bulletin_files.destroy_all
2014-06-06 04:22:55 +00:00
end
bulletin.update_user = current_user
bulletin.title_translations = news['Title']
bulletin.subtitle_translations = news['Summary']
@site_valid_locales.each do |locale|
locale = locale.to_s
if news['Content'][locale]=="" and news['Summary'][locale]!=""
news['Content'][locale] = news['Summary'][locale]
news['Summary'][locale] = " "
2014-05-30 11:32:51 +00:00
end
2014-06-06 04:22:55 +00:00
temp = news['Content'][locale]
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
urls = Nokogiri::HTML(temp).css("img").map do |link|
2014-05-30 11:32:51 +00:00
2014-06-06 04:22:55 +00:00
if URI.parse(link.attr("src")).host == @host
link.attr("src")
2014-05-30 11:32:51 +00:00
end
end
2014-06-06 04:22:55 +00:00
urls.each do |url|
next if url.nil?
a = Asset.new
a.remote_data_url = url
a.title_translations = {"en" => a.data.filename, "zh_tw" => a.data.filename}
2014-07-03 10:20:45 +00:00
if(a.save! rescue false)
temp.gsub!(CGI::escapeHTML(url), "#")
else
@user.assets << a
temp.gsub!(CGI::escapeHTML(url), a.data.to_s)
end
end
2014-06-06 04:22:55 +00:00
news['Content'][locale] = temp
end
2014-06-06 04:22:55 +00:00
bulletin.text_translations = news['Content']
bulletin.category = Category.find(params["category"])
bulletin.view_count = news["Visits"].blank? ? 0 : news["Visits"]
bulletin.postdate = news["PostDate"]
bulletin.deadline = news['Deadline']
bulletin.remote_image_url = news["Pic"] if news["Pic"]
if news["URL"] && news['URL'] != ""
bl = BulletinLink.new
bl.url = news["URL"]
bl.title_translations = {"en" => "Link", "zh_tw" => "Link"}
2014-07-03 10:20:45 +00:00
if (bl.save! rescue false)
bulletin.bulletin_links << bl
end
end
2014-06-06 04:22:55 +00:00
news['files'].each do |f|
bf = BulletinFile.new
if f['url'].split('title=').size == 1
f['url'] = f['url']+"檔案下載"
end
2014-06-06 04:22:55 +00:00
f['title'] = "檔案下載" if f['title'].blank?
2014-06-06 04:22:55 +00:00
bf.remote_file_url = f['url']
bf.title_translations = {"en" => f['title'], "zh_tw" => f['title']}
bf.save!
2014-06-06 04:22:55 +00:00
# Rename uploaded file
file_ext = File.extname(f['url'].split('&')[0])
file = File.new("tmp/uploads/#{bf.title}#{file_ext}","w+b")
file.write(bf.file.read)
bf.file.cache!(file)
2014-07-03 10:20:45 +00:00
if (bf.save! rescue false)
bulletin.bulletin_files << bf
end
2014-06-06 04:22:55 +00:00
File.delete(file)
end
2014-06-06 04:22:55 +00:00
bulletin.save!
end
2014-06-11 07:16:32 +00:00
def rss2_pages
delete_import_file
2014-06-11 07:16:32 +00:00
uri = URI.parse(params['url'])
# @@thread = Thread.new do
2014-06-11 07:16:32 +00:00
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
pages = data["pages"]
@@import_stats["total_pages"] = data["total_pages"].to_i
@@import_stats["current_status"] = 0
@@import_stats["success"] = true
write_to_file
2014-06-11 07:16:32 +00:00
pages.each do |page|
@@import_stats["current_page"] = page["page_id"]
@@import_stats["current_page_name"] = page["title"]["zh_tw"]
write_to_file
2014-06-11 07:16:32 +00:00
if Page.where(:rss2_id => page["page_id"]).count == 0
page_id = page["page_id"]
number = 0
while page_present?page_id
page_id = page_id + "_" + (number + 1).to_s
end
p = Page.new(:page_id => page_id, :parent_page_id => Page.root.id, :page_type => "page", :url => "/#{page_id}", :module => "page_content", :enabled_for => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>page["title"]["en"], "zh_tw" => page["title"]["zh_tw"]},:rss2_id => page["page_id"])
p.save
en = smart_downloader(page["content"]["en"],data["site_url"])
zh_tw = smart_downloader(page["content"]["zh_tw"],data["site_url"])
page_context = PageContext.new(:content_translations => {"en" => en,"zh_tw" => zh_tw}, :version => 1, :update_user_id => current_user.id, :page_id => p.id)
page_context.save
else
p = Page.find_by(:rss2_id => page["page_id"])
page_id = p.page_id
end
@@import_stats["current_status"] = @@import_stats["current_status"] + 1
write_to_file
2014-06-11 07:16:32 +00:00
if !page["childpages"].blank?
childpages = page["childpages"]
childpages.each_with_index do |childpage,i|
@@import_stats["current_page"] = childpage["page_id"]
@@import_stats["current_page_name"] = page["title"]["zh_tw"]
write_to_file
2014-06-11 07:16:32 +00:00
if Page.where(:rss2_id => childpage["page_id"]).count == 0
p_id = page_id + "_" + i.to_s
case childpage["type"]
when "page"
cp = Page.new(:page_id => p_id, :parent_page_id => p.id, :page_type => "page", :url => "/#{p.page_id}/#{p_id}", :module => "page_content", "enabled_for" => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>childpage["title"]["en"], "zh_tw" => childpage["title"]["zh_tw"]},:rss2_id => childpage["page_id"])
2014-06-11 07:16:32 +00:00
cp.save
en = smart_downloader(childpage["content"]["en"],data["site_url"])
zh_tw = smart_downloader(childpage["content"]["zh_tw"],data["site_url"])
page_context = PageContext.new(:content_translations => {"en" => en,"zh_tw" => zh_tw}, :version => 1, :update_user_id => current_user.id, :page_id => cp.id)
page_context.save
when "exturl"
cp = Page.new(:page_id => p_id, :parent_page_id => p.id, :page_type => "link", "url" => "/#{p.page_id}/#{p_id}", :enabled_for => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>childpage["title"]["en"], "zh_tw" => childpage["title"]["zh_tw"]}, :external_url_translations => {"en" => childpage["url"], "zh_tw" => childpage["url"]},:rss2_id => childpage["page_id"])
2014-06-11 07:16:32 +00:00
cp.save
when "file"
asset = Asset.new
asset.remote_data_url = childpage["filename"]
asset.title_translations = {"en" => childpage["file_title"], "zh_tw" =>childpage["file_title"]}
asset.save!
@user.assets << asset
@user.save
external_url = asset.data.url
cp = Page.new(:page_id => p_id, :parent_page_id => p.id, :page_type => "link", "url" => "/#{p.page_id}/#{p_id}", :enabled_for => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>childpage["title"]["en"], "zh_tw" => childpage["title"]["zh_tw"]}, :external_url_translations => {"en" => external_url, "zh_tw" => external_url},:rss2_id => childpage["page_id"])
2014-06-11 07:16:32 +00:00
cp.save
end
end
@@import_stats["current_status"] = @@import_stats["current_status"] + 1
write_to_file
2014-06-11 07:16:32 +00:00
end
end
end
# end
# @@thread.join
# @@thread.abort_on_exception = true
2014-06-11 07:16:32 +00:00
render :json => {"success"=>true}.to_json
end
def get_import_status
settings = get_settings_from_import_file
render :json => settings.to_json
2014-06-13 08:16:07 +00:00
end
def rss2_members
uri = URI.parse(params['url'])
# @@thread = Thread.new do
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
@@import_stats["total_members"] = data["users"].count
@@import_stats["current_status"] = 0
@@import_stats["success"] = true
write_to_file
members = data["users"]
members.each do |member|
@@import_stats["current_member"] = member["user_id"]
@@import_stats["current_member_name"] = member["primary_email"]
write_to_file
check_member = MemberProfile.find_by(rss2_id: member["rss2_id"]) rescue nil
if check_member.nil?
new_member = MemberProfile.new(email: member["primary_email"], rss2_id: member["rss2_id"], sid: member["sid"], office_tel: member["phone_office"],)
new_member.autobiography_translations = {"en"=>member["bio"]["en"],"zh_tw"=>member["bio"]["zh-tw"]}
new_member.address_translations = {"en"=>member["address_office"]["en"],"zh_tw"=>member["address_office"]["zh-tw"]}
new_member.first_name_translations = {"en"=>member["name"]["en"],"zh_tw"=>member["name"]["zh-tw"]}
if member["gender"] == "M"
new_member.sex = "male"
elsif member["gender"] == "F"
new_member.sex = "female"
elsif member["gender"].nil?
new_member.sex = "unknown"
end
if member["profile_pic"].present?
image_url = member["profile_pic"]
new_member.remote_avatar_url = image_url
end
2014-07-09 08:53:12 +00:00
info = MemberInfo.find_by(key: "basic_info") rescue nil
if info.nil?
info = MemberInfo.new(key: "basic_info", title_translations: {"en"=>"Basic Info","zh_tw"=>"Basic Info"})
info.save
end
if member.include?("website")
member_profile_field = info.member_profile_fields.find_by(key: "website") rescue nil
if member_profile_field.nil?
field = info.member_profile_fields.build(key: "website",markup: "text_field",title_translations:{"en"=>"website","zh_tw"=>"網站"})
field.save
value = field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["website"],"zh_tw"=>member["website"]}
value.save
elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?)
value = member_profile_field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["website"],"zh_tw"=>member["website"]}
value.save
end
end
if member.include?("address_home")
member_profile_field = info.member_profile_fields.find_by(key: "address_home") rescue nil
if member_profile_field.nil?
field = info.member_profile_fields.build(key: "address_home",markup: "text_area",title_translations:{"en"=>"Home Address","zh_tw"=>"家庭住址"})
field.save
value = field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["address_home"]["en"],"zh_tw"=>member["address_home"]["zh-tw"]}
value.save
elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?)
value = member_profile_field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["address_home"]["en"],"zh_tw"=>member["address_home"]["zh-tw"]}
value.save
end
end
if member.include?("fax")
member_profile_field = info.member_profile_fields.find_by(key: "fax") rescue nil
if member_profile_field.nil?
field = info.member_profile_fields.build(key: "fax",markup: "text_field",title_translations:{"en"=>"Fax","zh_tw"=>"傳真"})
field.save
value = field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["fax"],"zh_tw"=>member["fax"]}
value.save
elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?)
value = member_profile_field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["fax"],"zh_tw"=>member["fax"]}
value.save
end
end
if member.include?("experience")
member_profile_field = info.member_profile_fields.find_by(key: "experience") rescue nil
if member_profile_field.nil?
field = info.member_profile_fields.build(key: "experience",markup: "text_area",title_translations:{"en"=>"Experience","zh_tw"=>"經驗"})
field.save
value = field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["experience"]["en"],"zh_tw"=>member["experience"]["zh-tw"]}
value.save
elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?)
value = member_profile_field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["experience"]["en"],"zh_tw"=>member["experience"]["zh-tw"]}
value.save
end
end
if member.include?("mobile")
member_profile_field = info.member_profile_fields.find_by(key: "mobile") rescue nil
if member_profile_field.nil?
field = info.member_profile_fields.build(key: "mobile",markup: "text_field",title_translations:{"en"=>"Mobile Phone Number","zh_tw"=>"手機號碼"})
field.save
value = field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["mobile"],"zh_tw"=>member["mobile"]}
value.save
elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?)
value = member_profile_field.member_profile_field_values.build
value.member_profile_id = new_member.id
value.value = {"en"=>member["mobile"],"zh_tw"=>member["mobile"]}
value.save
end
end
role_attributes = member["attributes"]
role_attributes.each do |ra|
fields = ra["fields"]
role = Role.find_by(key: ra["name"]) rescue nil
if role.present?
fields.each do |f|
type = f["type"]
key = f["name"]["en"].gsub("/"," ").split(' ').join('_').underscore rescue nil
field = AttributeField.find_by(key: key) rescue nil
if (field.nil? && key != "category" && key != "academic_status")
if type == "text"
attribute = role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]})
attribute["markup"] = "text_field"
attribute.save
if !f["value"].nil?
if (f["value"].is_a?(Hash) && f["value"].has_key?("en"))
field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil
value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: field_value)
value.save
else
value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]})
value.save
end
end
elsif type == "select"
attribute = role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]})
attribute["markup"] = type
first_index = 0
attribute.typeB["option_list"] = {"#{first_index}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}}
attribute.save
value = new_member.attribute_values.build(key: key, attribute_field_id: attribute.id, value: first_index)
value.save
end
new_member.roles << role
elsif (field.nil? && (["category","academic_status"].include? key))
status_key = f["value"]["en"].split(' ').join('_').underscore rescue nil
status = RoleStatus.find_by(key: status_key, role_id: role.id) rescue nil
if status.nil?
role_status = role.role_statuses.build(key: status_key, title_translations: {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]})
role_status.member_profiles = [new_member]
role_status.save
else
status.member_profiles = [new_member]
status.save
end
elsif field.present?
if field.markup = "text_field"
if !f["value"].nil?
if (f["value"].is_a?(Hash) && f["value"].has_key?("en"))
field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil
value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: field_value)
value.save
else
value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]})
value.save
end
end
elsif field.markup = "select"
field.typeB["option_list"].each_with_index do |v,i|
if v.last["en"] != f["value"]["en"]
option = field.typeB["option_list"] = {"#{i+1}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}}
option.save
end
@index = (field.typeB["option_list"].count - 1)
end
value = new_member.attribute_values.build(key: key, attribute_field_id: field.id, value: @index)
value.save
end
new_member.roles << role
end
end
elsif role.nil?
new_role = new_member.roles.build(key: ra["name"], title_translations: {"en"=>ra["name"].titleize,"zh_tw"=>ra["name"].titleize})
new_role.save
fields.each do |f|
type = f["type"]
key = f["name"]["en"].gsub("/"," ").split(' ').join('_').underscore rescue nil
field = AttributeField.find_by(key: key) rescue nil
if (field.nil? && key != "category" && key != "academic_status")
if type == "text"
attribute = new_role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]})
attribute["markup"] = "text_field"
attribute.save
if !f["value"].nil?
if (f["value"].is_a?(Hash) && f["value"].has_key?("en"))
field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil
value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: field_value)
value.save
else
value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]})
value.save
end
end
elsif type == "select"
attribute = new_role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]})
attribute["markup"] = type
first_index = 0
attribute.typeB["option_list"] = {"#{first_index}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}}
attribute.save
value = new_member.attribute_values.build(key: key, attribute_field_id: attribute.id, value: first_index)
value.save
end
elsif (field.nil? && (["category","academic_status"].include? key))
status_key = f["value"]["en"].split(' ').join('_').underscore rescue nil
status = RoleStatus.find_by(key: status_key, role_id: new_role.id) rescue nil
if status.nil?
role_status = new_role.role_statuses.build(key: status_key, title_translations: {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]})
role_status.member_profiles = [new_member]
role_status.save
else
status.member_profiles = [new_member]
status.save
end
elsif (!field.nil? && key != "category")
if field.markup = "text_field"
if !f["value"].nil?
if (f["value"].is_a?(Hash) && f["value"].has_key?("en"))
field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil
value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: field_value)
value.save
else
value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]})
value.save
end
end
elsif field.markup = "select"
field.typeB["option_list"].each_with_index do |v,i|
if v.last["en"] == f["value"]["en"]
else
option = field.typeB["option_list"] = {"#{i+1}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}}
option.save
value = new_member.attribute_values.build(key: key, attribute_field_id: field.id, value: i+1)
value.save
end
end
end
end
end
end
end
new_member.save
@@import_stats["current_status"] = @@import_stats["current_status"] + 1
write_to_file
if member["user_id"].present?
user = User.new
user.user_name = member["user_id"]
user.password = "newpassword"
user.password_confirmation = "newpassword"
if member["group_id"] == 40
w = Workgroup.find_by(key: "admin") rescue nil
user.workgroup = w
end
user.member_profile = new_member
user.approved = true
user.save
end
end
end
render :json => {"success" => true}.to_json
end
2014-06-13 08:16:07 +00:00
def rss2_galleries
delete_import_file
2014-06-13 08:16:07 +00:00
uri = URI.parse(params['url'])
# @@thread = Thread.new do
2014-06-13 08:16:07 +00:00
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
@@import_stats["total_images"] = data["total_images"].to_i
@@import_stats["current_status"] = 0
@@import_stats["success"] = true
write_to_file
2014-06-13 08:16:07 +00:00
albums = data["albums"]
current_locale = I18n.locale
I18n.locale = :en
category = Category.where(:title => "RSS2 Gallery").first
I18n.locale = current_locale
if category.nil?
module_app = ModuleApp.find_by_key("gallery")
category = Category.new
category.title_translations = {"en" => "RSS2 Gallery", "zh_tw" => "RSS2畫廊"}
category.save
module_app.categories << category
end
albums.each do |album|
@@import_stats["current_album_id"] = album["albumid"]
write_to_file
2014-06-13 08:16:07 +00:00
if Album.where(:rss2_id => album["albumid"]).count == 0
@@import_stats["current_album_name"] = album["name"]["zh_tw"]
write_to_file
2014-06-13 08:16:07 +00:00
newalbum = Album.new(:name_translations => {"en" => album["name"]["en"], "zh_tw" => album["name"]["zh_tw"]}, :description_translations => {"en" => album["description"]["en"], "zh_tw" => album["description"]["zh_tw"]},"rss2_id" => album["albumid"])
newalbum.category_id = category.id
newalbum.save
images = album["images"]
if !images.blank?
images.each do |image|
if AlbumImage.where(:rss2_id => image["photoid"]).count == 0
img = newalbum.album_images.new
img.description_translations = {"en" => image["description"]["en"], "zh_tw" => image["description"]["zh_tw"]}
img.remote_file_url = image["image"]
img.save
end
@@import_stats["current_status"] = @@import_stats["current_status"] + 1
write_to_file
2014-06-13 08:16:07 +00:00
end
end
end
end
# end
# @@thread.join
# @@thread.abort_on_exception = true
2014-06-13 08:16:07 +00:00
render :json => {"success" => true}.to_json
2014-06-11 07:16:32 +00:00
end
2014-06-16 09:16:45 +00:00
def rss2_links
delete_import_file
2014-06-16 09:16:45 +00:00
uri = URI.parse(params['url'])
# @@thread = Thread.new do
2014-06-16 09:16:45 +00:00
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
@@import_stats["total_links"] = data["total_links"].to_i
@@import_stats["current_import"] = "categories"
@@import_stats["current_status"] = 0
@@import_stats["success"] = true
write_to_file
2014-06-16 09:16:45 +00:00
categories = data["categories"]
current_locale = I18n.locale
I18n.locale = :zh_tw
module_app = ModuleApp.find_by_key("web_resource")
categories.each do |category|
cat = Category.where(:title => category[1]["zh_tw"], :module_app_id => module_app.id).first
if cat.nil?
cat = Category.new
cat.title_translations = {"en" => category[1]["en"], "zh_tw" => category[1]["zh_tw"]}
cat.save
module_app.categories << cat
end
end
@@import_stats["current_import"] = "links"
write_to_file
2014-06-16 09:16:45 +00:00
links = data["links"]
links.each do |link|
l = WebLink.where(:rss2_id => link["link_id"]).first
if l.nil?
@@import_stats["current_link_id"] = link["link_id"]
@@import_stats["current_link_name"] = link["title"]["zh_tw"]
write_to_file
2014-06-16 09:16:45 +00:00
weblink = WebLink.new(:title_translations => {"en" => link["title"]["en"], "zh_tw" => link["title"]["zh_tw"]}, :context_translations => {:en => link["description"]["en"], :zh_tw => link["description"]["zh_tw"]}, :url_translations => {"en" => link["url"], "zh_tw" => link["url"]}, :rss2_id => link["link_id"])
category = Category.where(:title => link["category_name"], :module_app_id => module_app).first
weblink.category_id = category.id
weblink.save
end
@@import_stats["current_status"] = @@import_stats["current_status"] + 1
write_to_file
2014-06-16 09:16:45 +00:00
end
I18n.locale = current_locale
# end
# @@thread.join
# @@thread.abort_on_exception = true
2014-06-16 09:16:45 +00:00
render :json => {"success" => true}.to_json
end
2014-06-11 07:16:32 +00:00
private
def page_present?(page)
Page.where(:page_id => page).count > 0
end
def smart_downloader(data,url)
@data = data
excluded_extensions = ["php","/"]
@links = URI.extract(@data)
@links.each do |link|
if link.include?url
temp = link.gsub(url,"")
extension = temp.split(".").last rescue nil
if extension.nil? || excluded_extensions.include?(extension)
@data = @data.sub(link,"#")
else
a = Asset.new
a.remote_data_url = link
a.title_translations = {"en" => a.data.filename, "zh_tw" => a.data.filename}
a.save!
@user.assets << a
@user.save
@data = @data.sub(link, a.data.url)
end
end
end
@data
end
def write_to_file
File.open("#{Rails.root.to_s}/public/import_status.yml", "w") do |file|
file.write @@import_stats.to_yaml
end
end
def delete_import_file
@@import_stats = {}
f = File.join(Rails.root,"public","import_status")
if File.exists?f
File.delete(f)
end
end
def get_settings_from_import_file
YAML::load_file "#{Rails.root.to_s}/public/import_status.yml"
end
2014-06-11 07:16:32 +00:00
def get_user
@user = User.find(current_user.id)
end
end