# encoding: utf-8 require 'net/http' require 'open-uri' class Admin::ImportDataController < OrbitBackendController helper Admin::PagePartsHelper include Admin::FrontendWidgetInterface def get_teacher_data uri = URI("https://localhost:8000/teachers.xml") #params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} #uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) @teacher_data = Hash.from_xml(res.body) @teachers = @teacher_data["objects"] @i = 5000 @teachers.each do |hash| # @roles = Role.skip(1).first @roles = Role.all @teacher = User.new I18n.locale = :zh_tw if !hash['teacher_zh_tw'].blank? @teacher.first_name = hash['teacher_zh_tw'] elsif hash['teacher_zh_tw'].blank? && !hash['teacher_en'].blank? @teacher.first_name = hash['teacher_en'] elsif hash['teacher_zh_tw'].blank? && hash['teacher_en'].blank? @teacher.first_name = "Please Fill the Name" end I18n.locale = :en if !hash['teacher_en'].blank? @teacher.first_name = hash['teacher_en'] elsif hash['teacher_en'].blank? && !hash['teacher_zh_tw'].blank? @teacher.first_name = hash['teacher_zh_tw'] elsif hash['teacher_en'].blank? && hash['teacher_zh_tw'].blank? @teacher.first_name = "Please Fill the Name" end #@teacher.first_name = hash['teacher_en'] @teacher.ntu_seq = hash['ntu_seq'] @teacher.sid = hash['ntu_seq'] @teacher.role_ids = ["#{@roles.skip(1).first.id}"] @teacher.password = "testpass" @i += 10 if !hash['email'].blank? @user = User.where(email: "#{hash['email']}") if @user.length == 0 @teacher.email = hash['email'] elsif @user.length > 0 @teacher.email = "#{@i}duplicate@ntu.edu.tw" end else @teacher.email = "#{@i}@ntu.edu.tw" end if hash['teacher_zh_tw'].blank? && hash['teacher_en'].blank? @teacher.user_id = "defaultuser" elsif hash['teacher_en'].blank? @teacher.user_id = hash['teacher_zh_tw'] elsif hash['teacher_zh_tw'] @teacher.user_id = hash['teacher_en'] end @teacher.save! end end def get_book_data uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp") params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) teachers = User.all teachers.each do |hash| if hash.ntu_seq.present? ntu_seq = hash.ntu_seq books_xml = Nokogiri::XML( \ open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}")) @books = books_xml.xpath("//Book").map do |book_node| { author: (book_node>"Authors").text, year: (book_node>"PublishYear").text, title: (book_node>"DocTitle").text, remarks: (book_node>"Remarks").text, publisher: (book_node>"Publisher").text, book_title: (book_node>"BookTitle").text } end if @books.present? @books.each do |b| @book = WritingBook.new I18n.locale = :zh_tw @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] I18n.locale = :en @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] @book.year = b[:year] @book.create_user_id = hash.id @book.save end else puts "No books by Teacher" end end end end def get_conference_data uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp") params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) teachers = User.all teachers.each do |hash| if hash.ntu_seq.present? ntu_seq = hash.ntu_seq conference_xml = Nokogiri::XML( \ open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C")) #open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml")) @conference_papers = conference_xml.xpath("//Paper").map do |cp_node| { author: (cp_node>"Authors").text, year: (cp_node>"PublishYear").text, title: (cp_node>"PaperTitle").text, conference: (cp_node>"PublishOn").text, date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i], location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}", conference_title: (cp_node>"PublishOn").text, remarks: (cp_node>"Remarks").text } end if @conference_papers.present? @conference_papers.each do |b| @conference_paper = WritingConference.new I18n.locale = :zh_tw @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] I18n.locale = :en @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] @conference_paper.location = b[:location] @conference_paper.year = b[:year] @conference_paper.create_user_id = hash.id @conference_paper.save! end else puts "No conference by Teacher" end end end end def get_journal_paper_data uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp") params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) teachers = User.all teachers.each do |hash| if hash.ntu_seq.present? ntu_seq = hash.ntu_seq paper_xml = Nokogiri::XML( \ #open("http://versatile.management.ntu.edu.tw/publication1/journal/#{ntuseq}.xml")) open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=J")) @journal_papers = paper_xml.xpath("//Paper").map do |paper_node| { author: (paper_node>"Authors").text, year: (paper_node>"PublishYear").text, title: (paper_node>"PaperTitle").text, journal: (paper_node>"PublishOn").text, volume:(paper_node>"Volume").text, volumeno:(paper_node>"VolumeNo").text, beginpage:(paper_node>"BeginPage").text, endpage:(paper_node>"EndPage").text, subgroup:(paper_node>"subgroup").text, remarks: (paper_node>"Remarks").text, cate: ((paper_node>"subgroup")>"Group").text } end if @journal_papers.present? @journal_papers.each do |b| @journal_paper = WritingJournal.new I18n.locale = :zh_tw @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] I18n.locale = :en @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] @journal_paper.year = b[:year] @journal_paper.vol_no = b[:volumeno] @journal_paper.form_to_start = b[:beginpage] @journal_paper.form_to_end = b[:endpage] if !b[:cate].blank? @level_type = JournalLevelType.where(:key => b[:cate]) if @level_type.present? @journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"] end end @journal_paper.create_user_id = hash.id @journal_paper.save! end else puts "No journal paper by Teacher" end end end end def sync_conference_data @conference_data = WritingConference.where(create_user_id: "#{params[:user_id]}") @conference_data.delete_all @user = User.find("#{params[:user_id]}") # teachers.each do |hash| if @user.sid.present? ntu_seq = @user.sid conference_xml = Nokogiri::XML( \ open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C")) #open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml")) @conference_papers = conference_xml.xpath("//Paper").map do |cp_node| { author: (cp_node>"Authors").text, year: (cp_node>"PublishYear").text, title: (cp_node>"PaperTitle").text, conference: (cp_node>"PublishOn").text, date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i], location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}", conference_title: (cp_node>"PublishOn").text, remarks: (cp_node>"Remarks").text } end if @conference_papers.present? @conference_papers.each do |b| @conference_paper = WritingConference.new I18n.locale = :zh_tw @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] I18n.locale = :en @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] @conference_paper.location = b[:location] @conference_paper.year = b[:year] @conference_paper.create_user_id = @user.id @conference_paper.save! end else puts "No conference by Teacher" end end end def sync_journal_paper_data @journal_data = WritingJournal.where(create_user_id: "#{params[:user_id]}") @journal_data.delete_all @user = User.find("#{params[:user_id]}") # teachers.each do |hash| if @user.sid.present? ntu_seq = @user.sid paper_xml = Nokogiri::XML( \ #open("http://versatile.management.ntu.edu.tw/publication1/journal/#{ntuseq}.xml")) open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=J")) @journal_papers = paper_xml.xpath("//Paper").map do |paper_node| { author: (paper_node>"Authors").text, year: (paper_node>"PublishYear").text, title: (paper_node>"PaperTitle").text, journal: (paper_node>"PublishOn").text, volume:(paper_node>"Volume").text, volumeno:(paper_node>"VolumeNo").text, beginpage:(paper_node>"BeginPage").text, endpage:(paper_node>"EndPage").text, subgroup:(paper_node>"subgroup").text, remarks: (paper_node>"Remarks").text, cate: ((paper_node>"subgroup")>"Group").text } end if @journal_papers.present? @journal_papers.each do |b| @journal_paper = WritingJournal.new I18n.locale = :zh_tw @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] I18n.locale = :en @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] @journal_paper.year = b[:year] @journal_paper.vol_no = b[:volumeno] @journal_paper.form_to_start = b[:beginpage] @journal_paper.form_to_end = b[:endpage] if !b[:cate].blank? @level_type = JournalLevelType.where(:key => b[:cate]) if @level_type.present? @journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"] end end @journal_paper.create_user_id = @user.id @journal_paper.save! end else puts "No journal paper by Teacher" end end end def sync_book_data @books_data = WritingBook.where(create_user_id: "#{params[:user_id]}") @books_data.delete_all @user = User.find("#{params[:user_id]}") # teachers.each do |hash| if @user.sid.present? ntu_seq = @user.sid books_xml = Nokogiri::XML( \ open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}")) @books = books_xml.xpath("//Book").map do |book_node| { author: (book_node>"Authors").text, year: (book_node>"PublishYear").text, title: (book_node>"DocTitle").text, remarks: (book_node>"Remarks").text, publisher: (book_node>"Publisher").text, book_title: (book_node>"BookTitle").text } end if @books.present? @books.each do |b| @book = WritingBook.new I18n.locale = :zh_tw @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] I18n.locale = :en @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] @book.year = b[:year] @book.create_user_id = @user.id @book.save end else puts "No books by Teacher" end end end def get_announcement_data uri = URI("https://localhost:8000/announcements.xml") #params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} #uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) @announcement_data = Hash.from_xml(res.body) @announcements = @announcement_data["objects"] @announcements.each do |hash| @bulletin = Bulletin.new I18n.locale = :zh_tw if hash['announcement_title_zh_tw'].blank? @bulletin.title = hash['announcement_title_en'] @bulletin.text = hash['announcement_content_zh_tw'] elsif hash['announcement_title_zh_tw'].blank? && hash['announcement_title_en'].blank? @bulletin.title = "Please Fill the Name" @bulletin.text = hash['announcement_content_zh_tw'] else @bulletin.title = hash['announcement_title_zh_tw'] @bulletin.text = hash['announcement_content_zh_tw'] end I18n.locale = :en if hash['announcement_title_zh_tw'].blank? && hash['announcement_title_en'].blank? @bulletin.title = "Please Fill the Name" @bulletin.text = hash['announcement_content_en'] elsif hash['announcement_title_en'].blank? @bulletin.title = hash['announcement_zh_tw'] @bulletin.text = hash['announcement_content_en'] elsif hash['announcement_title_zh_tw'].blank? @bulletin.title = hash['announcement_title_en'] @bulletin.text = hash['announcement_content_en'] end @bulletin.category_id = "51d2a16438178423c2000001" @bulletin.is_pending = true @bulletin.save! end end def get_page_data f = File.open("/home/rwub/orbit-db/ntu_mb/pages/management_pages.xml") page_xml = Nokogiri::XML(f) #open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml")) @pages = page_xml.xpath("//management-page").map do |cp_node| { menu_title: (cp_node>"menu-title").text, content: (cp_node>"content").text } end if @pages.present? @i=0 @pages.each do |b| get_variables_for_new @page = Page.new @page.parent = "4f45f3b9e9d02c5db900005d" @page.design = "50ac424983e75219d2000021" @page.theme_id = "50ac424a83e75219d2000025" @page.menu_enabled_for= ["en", "zh_tw", ""] @page.enabled_for= ["en", "zh_tw", ""] @page.is_published = false if b[:menu_title].blank? @page.title = 'No Title Present' @i += 1 @page.name = "#{@i}Page" else @i += 1 @page.title = b[:menu_title] @page.name = "#{@i}Page" end if b[:content].blank? @page.content = "No Content Present" else @page.content = b[:content] end @page.save! end else puts "No Page Data" end end def get_variables_for_new @designs = Design.all.entries @themes = Design.first.themes @module_apps = ModuleApp.for_frontend_select @app_frontend_urls = nil @categories = nil @tags = nil @page_frontend_data_counts = nil @frontend_styles = nil @selected={ :design => @designs.first, :theme=> @themes.first, :module_app=>nil,#@module_apps.first :app_frontend_url=> nil, #@module_apps.first :category=>nil, :tag=>nil, :page_frontend_data_count=>nil, :frontend_style => nil } end end