diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index cb17e1a..f52879e 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -214,11 +214,11 @@ class PagesController < ApplicationController {"key" => "email", "human_readable" => I18n.t("users.email")} ] - custom_attribs = MemberProfileField.all.collect do |mpf| + custom_attribs = MemberProfileField.all.asc(:created_at).collect do |mpf| {"key" => mpf.key, "human_readable" => mpf.title} end - role_attribs = AttributeField.all.collect do |af| + role_attribs = AttributeField.all.asc(:created_at).collect do |af| {"key" => af.key, "human_readable" => af.title} end diff --git a/lib/tasks/sync_personal_plugins.rake b/lib/tasks/sync_personal_plugins.rake new file mode 100644 index 0000000..53addf3 --- /dev/null +++ b/lib/tasks/sync_personal_plugins.rake @@ -0,0 +1,328 @@ +require "uri" +require "net/http" +namespace :sync_personal_plugins do + task :sync,[:arg] => :environment do |task,args| + + MemberProfile.each do |mp| + staff_id = mp.sid rescue nil + if !staff_id.nil? && staff_id != "" + sync_journal_papers(staff_id,mp) + sync_conference_papers(staff_id,mp) + sync_research_papers(staff_id,mp) + sync_books(staff_id,mp) + sync_projects(staff_id,mp) + sync_honors(staff_id,mp) + sync_diplomas(staff_id,mp) + sync_experiences(staff_id,mp) + end + end + end +end + +def sync_journal_papers(staff_id,mp) + params_to_send = {"plugin" => "writing","type" => "journal", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Jounral Paper for staff #{staff_id}." + total = data["journals"].count + data["journals"].each_with_index do |journal,index| + jp = JournalPaper.where(:rss2_id => journal["rss_id"]).first rescue nil + if jp.nil? + jp = JournalPaper.new + jp.vol_no = journal["number"] + jp.publication_date = "#{journal["publication_year"]}/#{journal["publication_month"]}/01" + jp.rss2_id = journal["rss_id"] + jp.year = "#{journal["publication_year"]}" + jp.url = journal["url"] + jp.paper_title_translations = journal["title"] + jp.member_profile = mp + jp.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + jp.vol_no = journal["number"] + jp.year = "#{journal["publication_year"]}" + jp.publication_date = "#{journal["publication_year"]}/#{journal["publication_month"]}/01" + jp.url = journal["url"] + jp.paper_title_translations = journal["title"] + jp.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Jounral Paper for staff #{staff_id} completed." +end + + +def sync_conference_papers(staff_id,mp) + params_to_send = {"plugin" => "writing","type" => "conference", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Conference Paper for staff #{staff_id}." + total = data["conferences"].count + data["conferences"].each_with_index do |conference,index| + wc = WritingConference.where(:rss2_id => conference["rss_id"]).first rescue nil + if wc.nil? + wc = WritingConference.new + wc.isi_number = conference["number"] + wc.publication_date = "#{conference["publication_year"]}/#{conference["publication_month"]}/01" + wc.rss2_id = conference["rss_id"] + w.year = "#{conference["publication_year"]}" + wc.url = conference["url"] + wc.paper_title_translations = conference["title"] + wc.member_profile = mp + wc.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + wc.isi_number = conference["number"] + wc.publication_date = "#{conference["publication_year"]}/#{conference["publication_month"]}/01" + wc.year = "#{conference["publication_year"]}" + wc.url = conference["url"] + wc.paper_title_translations = conference["title"] + wc.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Conference Paper for staff #{staff_id} completed." +end + +def sync_research_papers(staff_id,mp) + params_to_send = {"plugin" => "writing","type" => "research", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Research Paper for staff #{staff_id}." + total = data["researches"].count + data["researches"].each_with_index do |research,index| + res = Research.where(:rss2_id => research["rss_id"]).first rescue nil + if res.nil? + res = Research.new + res.publish_date = "#{research["publication_year"]}/#{research["publication_month"]}/01" + res.rss2_id = research["rss_id"] + res.url = research["url"] + res.year = research["publication_year"] + res.research_title_translations = research["title"] + res.member_profile = mp + res.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + res.publish_date = "#{research["publication_year"]}/#{research["publication_month"]}/01" + res.url = research["url"] + res.year = research["publication_year"] + res.research_title_translations = research["title"] + res.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Research Paper for staff #{staff_id} completed." +end + +def sync_books(staff_id,mp) + params_to_send = {"plugin" => "writing","type" => "book", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Books for staff #{staff_id}." + total = data["books"].count + data["books"].each_with_index do |book,index| + boo = Book.where(:rss2_id => book["rss_id"]).first rescue nil + if boo.nil? + boo = Book.new + boo.publish_date = "#{book["publication_year"]}/#{book["publication_month"]}/01" + boo.rss2_id = book["rss_id"] + boo.url = book["url"] + boo.year = book["publication_year"] + boo.book_title_translations = book["title"] + boo.member_profile = mp + boo.isbn = book["number"] + boo.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + boo.publish_date = "#{book["publication_year"]}/#{book["publication_month"]}/01" + boo.url = book["url"] + boo.year = book["publication_year"] + boo.book_title_translations = book["title"] + boo.isbn = book["number"] + boo.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Books for staff #{staff_id} completed." +end + +def sync_projects(staff_id,mp) + params_to_send = {"plugin" => "project","type" => "xx", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Projects for staff #{staff_id}." + total = data["projects"].count + data["projects"].each_with_index do |project,index| + proj = Project.where(:rss2_id => project["rss_id"]).first rescue nil + if proj.nil? + proj = Project.new + proj.period_start_date = project["start_date"] + proj.period_end_date = project["end_date"] + proj.rss2_id = project["rss_id"] + proj.url = project["url"] + proj.year = project["year"] + proj.project_title_translations = project["title"] + proj.job_title_translations = project["job"] + proj.participator_translations = project["participator"] + proj.unit_translations = project["unit"] + proj.member_profile = mp + proj.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + proj.period_start_date = project["start_date"] + proj.period_end_date = project["end_date"] + proj.url = project["url"] + proj.year = project["year"] + proj.project_title_translations = project["title"] + proj.job_title_translations = project["job"] + proj.participator_translations = project["participator"] + proj.unit_translations = project["unit"] + proj.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Projects for staff #{staff_id} completed." +end + +def sync_honors(staff_id,mp) + params_to_send = {"plugin" => "honor","type" => "xx", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Honors for staff #{staff_id}." + total = data["honors"].count + data["honors"].each_with_index do |honor,index| + hon = Honor.where(:rss2_id => honor["rss_id"]).first rescue nil + ht = HonorType.where(:title => honor["category"]["zh_tw"]).first rescue nil + ht = HonorType.where(:title => honor["category"]["en"]).first rescue nil + if ht.nil? + ht = HonorType.new + ht.title_translations = honor["category"] + ht.save + end + if hon.nil? + hon = Honor.new + hon.rss2_id = honor["rss_id"] + hon.award_name_translations = honor["title"] + hon.awarding_unit_translations = honor["unit"] + hon.year = honor["year"] + hon.honor_type = ht + hon.member_profile = mp + hon.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + hon.award_name_translations = honor["title"] + hon.awarding_unit_translations = honor["unit"] + hon.year = honor["year"] + hon.honor_type = ht + hon.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Honors for staff #{staff_id} completed." +end + +def sync_diplomas(staff_id,mp) + params_to_send = {"plugin" => "diploma","type" => "xx", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Diplomas for staff #{staff_id}." + total = data["diplomas"].count + data["diplomas"].each_with_index do |diploma,index| + dip = Diploma.where(:rss2_id => diploma["rss_id"]).first rescue nil + if dip.nil? + dip = Diploma.new + dip.rss2_id = diploma["rss_id"] + dip.country_translations = diploma["country"] + dip.degree_translations = diploma["degree"] + dip.department_translations = diploma["dept"] + dip.end_date = diploma["end_date"].gsub("-","/").gsub("00","02") + dip.start_date = diploma["start_date"].gsub("-","/").gsub("00","02") + dip.school_name_translations = diploma["school"] + dip.member_profile = mp + dip.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + dip.country_translations = diploma["country"] + dip.degree_translations = diploma["degree"] + dip.department_translations = diploma["dept"] + dip.end_date = diploma["end_date"].gsub("-","/").gsub("00","02") + dip.start_date = diploma["start_date"].gsub("-","/").gsub("00","02") + dip.school_name_translations = diploma["school"] + dip.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Diplomas for staff #{staff_id} completed." +end + +def sync_experiences(staff_id,mp) + params_to_send = {"plugin" => "experience","type" => "xx", "staff" => staff_id} + data = get_data(params_to_send) + return if !data["success"].nil? + puts "Starting Experiences for staff #{staff_id}." + total = data["experiences"].count + data["experiences"].each_with_index do |experience,index| + exp = Experience.where(:rss2_id => experience["rss_id"]).first rescue nil + et = ExperienceType.where(:title => experience["type"]["zh_tw"]).first rescue nil + et = ExperienceType.where(:title => experience["type"]["en"]).first rescue nil + if et.nil? + et = ExperienceType.new + et.title_translations = experience["type"] + et.save + end + if exp.nil? + exp = Experience.new + exp.rss2_id = experience["rss_id"] + exp.department_translations = experience["dept"] + exp.organizationt_title_translations = experience["title"] + exp.end_date = experience["end_date"] + exp.start_date = experience["start_date"] + exp.experience_type = et + exp.member_profile = mp + exp.save + puts "Syncing new : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + else + exp.department_translations = experience["dept"] + exp.organizationt_title_translations = experience["title"] + exp.end_date = experience["end_date"] + exp.start_date = experience["start_date"] + exp.experience_type = et + exp.save + puts "Updating old : " + ((100 * (index +1)) / total).to_s + "%" + sleep 0.5 + end + end + puts "Experiences for staff #{staff_id} completed." +end + +def get_data(params_to_send) + uri = URI.parse("http://140.119.221.39/sync/?plugin=#{params_to_send["plugin"]}&type=#{params_to_send["type"]}&staff=#{params_to_send["staff"]}") + http = Net::HTTP.new(uri.host, uri.port) + request = Net::HTTP::Get.new(uri.request_uri) + response = http.request(request) + data = JSON.parse(response.body) rescue nil + return data +end + + + + + + + +