# encoding: utf-8 require "net/http" require "uri" require 'json' class Admin::ImportController < OrbitAdminController layout "structure" 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 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) I18n.locale = :zh_tw categories.each do |id, category| old_cate = module_app.categories.where(:title => category["zh_tw"]).first if old_cate.nil? cat = Category.new cat.title_translations = category cat.save! module_app.categories << cat categories[id]['id'] = cat.id.to_s else categories[id]['id'] = old_cate.id.to_s end end render :json=>categories end 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 def module_data 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) case params['module'] when 'archive' import_archive(data) when 'announcement' import_announcement(data) end render :json=>['status'=>'ok'] end 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'] end 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 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 def import_announcement(news) bulletin = Bulletin.where(:rss2_sn=>news['Sn']).first if bulletin.nil? bulletin = Bulletin.new bulletin.rss2_sn = news['Sn'] 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] = " " end temp = news['Content'][locale] urls = Nokogiri::HTML(temp).css("img").map do |link| if URI.parse(link.attr("src")).host == @host link.attr("src") end end 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} a.save! @user.assets << a temp.gsub!(CGI::escapeHTML(url), a.data.to_s) end news['Content'][locale] = temp end 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"} bl.save! bulletin.bulletin_links << bl end news['files'].each do |f| bf = BulletinFile.new if f['url'].split('title=').size == 1 f['url'] = f['url']+"檔案下載" end f['title'] = "檔案下載" if f['title'].blank? bf.remote_file_url = f['url'] bf.title_translations = {"en" => f['title'], "zh_tw" => f['title']} bf.save! # 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) bf.save! bulletin.bulletin_files << bf File.delete(file) end bulletin.save! end end