From c9a689b12d332f6fed8077b33246c4405b9ba746 Mon Sep 17 00:00:00 2001 From: Manson Wang Date: Mon, 10 Feb 2014 16:05:59 +0800 Subject: [PATCH] ntu_cph sync --- Gemfile | 2 + .../admin/import_data_controller.rb | 734 ++++++++++++++++++ app/controllers/sessions_controller.rb | 40 + .../get_announcement_data.html.erb | 1 + .../admin/import_data/get_book_data.html.erb | 1 + .../import_data/get_conference_data.html.erb | 1 + .../get_journal_paper_data.html.erb | 1 + .../admin/import_data/get_page_data.html.erb | 1 + .../import_data/get_teacher_data.html.erb | 1 + .../admin/import_data/sync_book_data.html.erb | 1 + .../import_data/sync_conference_data.html.erb | 1 + .../sync_journal_paper_data.html.erb | 1 + app/views/devise/sessions/new.html.erb | 73 +- app/views/layouts/_right_menu.html.erb | 7 +- built_in_extensions.rb | 8 +- config/locales/en.yml | 3 +- config/locales/zh_tw.yml | 3 +- config/routes.rb | 18 + config/schedule.rb | 20 + lib/tasks/import_teachers.rake | 58 ++ lib/tasks/synchronize.rake | 12 + 21 files changed, 945 insertions(+), 42 deletions(-) create mode 100644 app/controllers/admin/import_data_controller.rb create mode 100644 app/controllers/sessions_controller.rb create mode 100644 app/views/admin/import_data/get_announcement_data.html.erb create mode 100644 app/views/admin/import_data/get_book_data.html.erb create mode 100644 app/views/admin/import_data/get_conference_data.html.erb create mode 100644 app/views/admin/import_data/get_journal_paper_data.html.erb create mode 100644 app/views/admin/import_data/get_page_data.html.erb create mode 100644 app/views/admin/import_data/get_teacher_data.html.erb create mode 100644 app/views/admin/import_data/sync_book_data.html.erb create mode 100644 app/views/admin/import_data/sync_conference_data.html.erb create mode 100644 app/views/admin/import_data/sync_journal_paper_data.html.erb create mode 100644 config/schedule.rb create mode 100644 lib/tasks/import_teachers.rake create mode 100644 lib/tasks/synchronize.rake diff --git a/Gemfile b/Gemfile index 7dda595..f431bb5 100644 --- a/Gemfile +++ b/Gemfile @@ -21,6 +21,8 @@ gem 'youtube_it' gem 'gotcha' gem "geocoder" gem 'httparty' +gem 'whenever', :require => false + #database gem 'mini_magick' gem 'mongoid', '> 2.1', '< 3.0.0' diff --git a/app/controllers/admin/import_data_controller.rb b/app/controllers/admin/import_data_controller.rb new file mode 100644 index 0000000..d9c75d1 --- /dev/null +++ b/app/controllers/admin/import_data_controller.rb @@ -0,0 +1,734 @@ +# encoding: utf-8 + +require 'net/http' +require 'open-uri' +require 'timeout' + +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? + if hash.user_id.present? + # ntu_seq = hash.ntu_seq + u_account = hash.user_id + books_xml = Nokogiri::XML( \ + # open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}")) + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}")) + @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? + if hash.user_id.present? + # ntu_seq = hash.ntu_seq + u_account = hash.user_id + conference_xml = Nokogiri::XML( \ + # open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C")) + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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? + if hash.user_id.present? + # ntu_seq = hash.ntu_seq + u_account = hash.user_id + 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")) + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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? + if @user.user_id.present? + # ntu_seq = @user.sid + u_account = @user.user_id + conference_xml = Nokogiri::XML( \ + # open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C")) + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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 + respond_to do |format| + + format.html { redirect_to request.referer } + format.json { render json: {"success"=>true}.to_json} + + 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? + if @user.user_id.present? + # ntu_seq = @user.sid + u_account = @user.user_id + 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")) + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&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 + end + + end + + respond_to do |format| + + format.html { redirect_to request.referer } + format.json { render json: {"success"=>true}.to_json} + + 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? + if @user.user_id.present? + # ntu_seq = @user.sid + u_account = @user.user_id + books_xml = Nokogiri::XML( \ + # open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}")) + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}")) + @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 + end + end + + respond_to do |format| + + format.html { redirect_to request.referer } + format.json { render json: {"success"=>true}.to_json} + + end +end + + + def sync_conference_data_auto + @user = User.all + @user.each do |user| + if user.user_id.present? + next if !user.email.include? "ntu.edu.tw" + u_account = user.user_id + @conference_xml = nil + begin + timeout(60) do + @conference_xml = Nokogiri::XML( \ + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=C")) + end + rescue Timeout::Error + next + end + @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? + WritingConference.delete_all(conditions:{create_user_id: user.id}) + + @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 + end + end + end + end + + +def sync_journal_paper_data_auto + @user = User.all + @user.each do |user| + if user.user_id.present? + next if !user.email.include? "ntu.edu.tw" + u_account = user.user_id + @paper_xml = nil + begin + timeout(60) do + @paper_xml = Nokogiri::XML( \ + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=J")) + end + rescue Timeout::Error + next + end + @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? + + WritingJournal.delete_all(conditions:{create_user_id: user.id}) + + @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 + end + puts "Sync "+u_account+"\r\n" + end + end +end + +def sync_book_data_auto + @user = User.all + @user.each do |user| + if user.user_id.present? + next if !user.email.include? "ntu.edu.tw" + u_account = user.user_id + @books_xml = nil + begin + timeout(60) do + @books_xml = Nokogiri::XML( \ + open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}")) + end + rescue Timeout::Error + next + end + + @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? + + WritingBook.delete_all(conditions:{create_user_id: user.id}) + + @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 + end + 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 +end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb new file mode 100644 index 0000000..f5df51b --- /dev/null +++ b/app/controllers/sessions_controller.rb @@ -0,0 +1,40 @@ +# encoding: utf-8 + +class SessionsController < Devise::SessionsController + prepend_before_filter :require_no_authentication, :only => [ :new, :create ] + + + def create + @site = Site.first + + private_key = OpenSSL::PKey::RSA.new(@site.private_key) + wresult = private_key.private_decrypt(request.params['wresult']) + + @ids = wresult.split("@") + + login_uid = @ids[0] + + resource = User.first(conditions:{user_id: login_uid}) + + if !resource.blank? + resource_name = resource.class.to_s.downcase + sign_in(resource_name, resource) + session[:user_id_type] = "myntucoph" + redirect_to after_sign_in_path_for(resource) + else + flash[:error] = "很抱歉,您無此權限或帳號登入本站,請洽本站管理員
Sorry, you don't have the account or authority to login. Please contact the website administrator." + redirect_to :root + end + end + + def destroy + @user_id_type = session[:user_id_type] + sign_out + if @user_id_type == "myntucoph" + redirect_to "https://adfs.ntu.edu.tw/adfs/ls/?wa=wsignout1.0&wreply=https://cophlogin.ntu.edu.tw" + else + redirect_to root_path + end + end + +end \ No newline at end of file diff --git a/app/views/admin/import_data/get_announcement_data.html.erb b/app/views/admin/import_data/get_announcement_data.html.erb new file mode 100644 index 0000000..9751735 --- /dev/null +++ b/app/views/admin/import_data/get_announcement_data.html.erb @@ -0,0 +1 @@ +

Successfully Imported Announcement Data!

\ No newline at end of file diff --git a/app/views/admin/import_data/get_book_data.html.erb b/app/views/admin/import_data/get_book_data.html.erb new file mode 100644 index 0000000..7fbb643 --- /dev/null +++ b/app/views/admin/import_data/get_book_data.html.erb @@ -0,0 +1 @@ +

Successfully Book Data!

diff --git a/app/views/admin/import_data/get_conference_data.html.erb b/app/views/admin/import_data/get_conference_data.html.erb new file mode 100644 index 0000000..bea71d0 --- /dev/null +++ b/app/views/admin/import_data/get_conference_data.html.erb @@ -0,0 +1 @@ +

Successfully Conference Data!

diff --git a/app/views/admin/import_data/get_journal_paper_data.html.erb b/app/views/admin/import_data/get_journal_paper_data.html.erb new file mode 100644 index 0000000..cd34dce --- /dev/null +++ b/app/views/admin/import_data/get_journal_paper_data.html.erb @@ -0,0 +1 @@ +

Successfully Journal Paper Data!

\ No newline at end of file diff --git a/app/views/admin/import_data/get_page_data.html.erb b/app/views/admin/import_data/get_page_data.html.erb new file mode 100644 index 0000000..e3adf77 --- /dev/null +++ b/app/views/admin/import_data/get_page_data.html.erb @@ -0,0 +1 @@ +

Successfully Imported Page Data!

diff --git a/app/views/admin/import_data/get_teacher_data.html.erb b/app/views/admin/import_data/get_teacher_data.html.erb new file mode 100644 index 0000000..980c421 --- /dev/null +++ b/app/views/admin/import_data/get_teacher_data.html.erb @@ -0,0 +1 @@ +

Successfully Imported Teacher Data!

\ No newline at end of file diff --git a/app/views/admin/import_data/sync_book_data.html.erb b/app/views/admin/import_data/sync_book_data.html.erb new file mode 100644 index 0000000..1f99d51 --- /dev/null +++ b/app/views/admin/import_data/sync_book_data.html.erb @@ -0,0 +1 @@ +

Book Data Synced Successfully!

\ No newline at end of file diff --git a/app/views/admin/import_data/sync_conference_data.html.erb b/app/views/admin/import_data/sync_conference_data.html.erb new file mode 100644 index 0000000..f99d613 --- /dev/null +++ b/app/views/admin/import_data/sync_conference_data.html.erb @@ -0,0 +1 @@ +

Conference Paper Data Synced Successfully!

\ No newline at end of file diff --git a/app/views/admin/import_data/sync_journal_paper_data.html.erb b/app/views/admin/import_data/sync_journal_paper_data.html.erb new file mode 100644 index 0000000..3671a45 --- /dev/null +++ b/app/views/admin/import_data/sync_journal_paper_data.html.erb @@ -0,0 +1 @@ +

Journal Paper Data Synced Successfully!

\ No newline at end of file diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 1b77fce..03150e5 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -1,59 +1,62 @@ -
+ + -
\ No newline at end of file diff --git a/app/views/layouts/_right_menu.html.erb b/app/views/layouts/_right_menu.html.erb index e90dab1..506fee9 100644 --- a/app/views/layouts/_right_menu.html.erb +++ b/app/views/layouts/_right_menu.html.erb @@ -50,6 +50,11 @@ <% end %> - \ No newline at end of file + diff --git a/built_in_extensions.rb b/built_in_extensions.rb index 2e13080..fb4f6c5 100644 --- a/built_in_extensions.rb +++ b/built_in_extensions.rb @@ -2,15 +2,15 @@ gem 'archive', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-archive.git' gem 'announcement', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-announcement.git' gem 'gallery', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-gallery.git' -gem 'member', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-member.git' +gem 'member', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-member.git', :branch => 'ntu_cph' gem 'member_staff', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-memberstaff.git' gem 'page_content', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-pagecontent.git' -gem 'personal_book', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalbook.git' -gem 'personal_conference', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalconference.git' +gem 'personal_book', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalbook.git', :branch => 'ntu_cph' +gem 'personal_conference', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalconference.git', :branch => 'ntu_cph' gem 'personal_diploma', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personaldiploma.git' gem 'personal_experience', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalexperience.git' gem 'personal_honor', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalhonor.git' -gem 'personal_journal', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personaljournal.git' +gem 'personal_journal', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personaljournal.git', :branch => 'ntu_cph' gem 'personal_lab', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personallab.git' gem 'personal_patent', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalpatent.git' gem 'personal_project', '0.0.1', :git => 'http://gitlab.tp.rulingcom.com/root/orbit-personalproject.git' diff --git a/config/locales/en.yml b/config/locales/en.yml index 139f1c7..b66d3c8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -369,7 +369,8 @@ en: brief_intro : "Brief Intro." complete_list : "Complete List" frontend_page : "Frontend Page" - phone_number: "Phone Number" + phone_number: "Phone Number" + sync_data: "Synchronize" picture: Picture placeholder: Field Hint please_wait: Please Wait diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index 847de14..28b0343 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -370,7 +370,8 @@ zh_tw: brief_intro : "摘要" complete_list : "完整列表" frontend_page : "前台呈現" - phone_number: "電話" + phone_number: "電話" + sync_data: "同步資料" picture: 圖片 placeholder: 欄位提示文字 please_wait: 請稍候 diff --git a/config/routes.rb b/config/routes.rb index b1c81d0..5e3c9c7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,6 +8,11 @@ Orbit::Application.routes.draw do resources :passwords, :except => [:index, :show, :destroy] match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put end + + devise_scope :user do + get 'user_login' => 'sessions#create' + match 'user_logout' => 'sessions#destroy' + end mount Resque::Server, :at => "/admin/resque" mount Rack::GridFS::Endpoint.new(:db => Mongoid.database,:lookup=>:path), :at => "gridfs" @@ -238,6 +243,19 @@ Orbit::Application.routes.draw do get 'restart_server' end match 'sites/register_site' => "sites#register_site" + + get "import_data/get_teacher_data" + get "import_data/get_book_data" + get "import_data/get_conference_data" + get "import_data/get_journal_paper_data" + get "import_data/get_announcement_data" + get "import_data/get_page_data" + get "import_data/sync_book_data" + get "import_data/sync_journal_paper_data" + get "import_data/sync_conference_data" + get "import_data/sync_book_data_auto" + get "import_data/sync_journal_paper_data_auto" + get "import_data/sync_conference_data_auto" resources :tags do collection do diff --git a/config/schedule.rb b/config/schedule.rb new file mode 100644 index 0000000..bfefe33 --- /dev/null +++ b/config/schedule.rb @@ -0,0 +1,20 @@ +# Use this file to easily define all of your cron jobs. +# +# It's helpful, but not entirely necessary to understand cron before proceeding. +# http://en.wikipedia.org/wiki/Cron + +# Example: +# +# set :output, "/path/to/my/cron_log.log" +# + every 1.day, :at => '11:00 pm' do +# command "/usr/bin/some_great_command" +# runner "MyModel.some_method" + rake "rake synchronize:data" + end +# +# every 4.days do +# runner "AnotherModel.prune_old_records" +# end + +# Learn more: http://github.com/javan/whenever diff --git a/lib/tasks/import_teachers.rake b/lib/tasks/import_teachers.rake new file mode 100644 index 0000000..073e608 --- /dev/null +++ b/lib/tasks/import_teachers.rake @@ -0,0 +1,58 @@ +#encoding: utf-8 +namespace :teacher do + task :import, [:department,:category] => :environment do |t, args| + department = "#{args.department}" + teacher_role = Role.where(:key=>"teacher").first + role_fulltime = RoleStatus.where(:key=>"1.fulltime").first + role_adjunct = RoleStatus.where(:key=>"2.adjunct").first + role_category = RoleCategory.where(:key=>"#{args.category}").first + @teacher = [] + CSV.foreach("#{Rails.root}/#{department}.csv") do |row| + @teacher.push(row) + end + @teacher.each do |teacher| + sex = "unknown" + if teacher[2]=="男" + sex = "male" + elsif teacher[2]=="女" + sex = "female" + end + + role_status = "" + if teacher[3].include? "兼任" + role_status = role_adjunct + else + role_status = role_fulltime + end + + if teacher[1].blank? + teacher[1] = " " + end + + user_data = { + :user_id => teacher[5].split("@")[0], + :password => "password", + :first_name_translations =>{"zh_tw"=>teacher[0].split(teacher[0][0])[1],"en"=>teacher[1].split(" ")[1]}, + :last_name_translations => {"zh_tw"=>teacher[0][0],"en"=>teacher[1].split(" ")[0]}, + :roles => [teacher_role], + :role_statuses => [role_status], + :role_categorys => [role_category], + :office_tel => teacher[4], + :email => teacher[5], + :confirmation_token => nil, + :confirmed_at => Time.now, + :approved => true, + :sex => sex + } + + if User.where(:email=>teacher[5]).count == 0 + user = User.new(user_data) + user.save + else + user = User.where(:email=>teacher[5]).first + user.update_attributes(user_data) + + end + end + end +end \ No newline at end of file diff --git a/lib/tasks/synchronize.rake b/lib/tasks/synchronize.rake new file mode 100644 index 0000000..15df7f6 --- /dev/null +++ b/lib/tasks/synchronize.rake @@ -0,0 +1,12 @@ +# encoding: utf-8 +namespace :synchronize do + desc "synchronize tasks" + task :data => :environment do + p Admin::ImportDataController.new.sync_book_data_auto + puts "Book Data Synchronization Complete" + p Admin::ImportDataController.new.sync_journal_paper_data_auto + puts "Journal Paper Data Synchronization Complete" + p Admin::ImportDataController.new.sync_conference_data_auto + puts "Conference Data Synchronization Complete" + end +end \ No newline at end of file