diff --git a/app/controllers/admin/import_controller.rb b/app/controllers/admin/import_controller.rb index 872c85b..d1aa033 100644 --- a/app/controllers/admin/import_controller.rb +++ b/app/controllers/admin/import_controller.rb @@ -303,13 +303,14 @@ class Admin::ImportController < OrbitAdminController @@import_stats["success"] = true write_to_file members = data["users"] + data_to_send = [] 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.find_by(rss2_id: member["rss2_id"]) rescue nil + if new_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"]} @@ -565,20 +566,19 @@ class Admin::ImportController < OrbitAdminController 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 + user.save(:validate => false) end end + data_to_send << {"name" => new_member.name, "rss2_id" => new_member.rss2_id, "id" => new_member.id.to_s} end - render :json => {"success" => true}.to_json + render :json => {"success" => true, "members" => data_to_send}.to_json end def rss2_galleries @@ -682,11 +682,35 @@ class Admin::ImportController < OrbitAdminController render :json => {"success" => true}.to_json end - def import_books - id = "1" + def import_plugin + id = params["rss2_id"] + url = params["url"] + case params["plugin"] + when "patents" + import_patents(id,url) + when "books" + import_books(id,url) + when "projects" + import_projects(id,url) + when "researches" + import_research(id,url) + when "honors" + import_honors(id,url) + when "diplomas" + import_diplomas(id,url) + when "experiences" + import_experiences(id,url) + when "journalpapers" + import_journals(id,url) + when "conferencespapers" + import_conferences(id,url) + end + end + + def import_books(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=book") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=book") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -728,11 +752,10 @@ class Admin::ImportController < OrbitAdminController render :json => {"succes" => true}.to_json end - def import_projects - id = "1" + def import_projects(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=project") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=project") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -762,11 +785,10 @@ class Admin::ImportController < OrbitAdminController render :json => {"succes" => true}.to_json end - def import_patents - id = "1" + def import_patents(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=patent") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=patent") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -796,11 +818,10 @@ class Admin::ImportController < OrbitAdminController render :json => {"succes" => true}.to_json end - def import_research - id = "1" + def import_research(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=research") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=research") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -824,11 +845,10 @@ class Admin::ImportController < OrbitAdminController render :json => {"succes" => true}.to_json end - def import_diplomas - id = "1" + def import_diplomas(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=diploma") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=diploma") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -849,11 +869,10 @@ class Admin::ImportController < OrbitAdminController render :json => {"succes" => true}.to_json end - def import_experiences - id = "1" + def import_experiences(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=experience") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=experience") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -873,11 +892,10 @@ class Admin::ImportController < OrbitAdminController render :json => {"succes" => true}.to_json end - def import_honors - id = "1" + def import_honors(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=honor") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=honor") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -900,14 +918,13 @@ class Admin::ImportController < OrbitAdminController end end I18n.locale = original_language - render :json => {"succes" => true}.to_json + render :json => {"success" => true}.to_json end - def import_journals - id = "1" + def import_journals(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=journal") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=journal") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) @@ -975,14 +992,13 @@ class Admin::ImportController < OrbitAdminController end I18n.locale = original_language - render :json => {"succes" => true}.to_json + render :json => {"success" => true}.to_json end - def import_conferences - id = "1" + def import_conferences(id,url) original_language = I18n.locale I18n.locale = "zh_tw" - uri = URI.parse("http://192.168.1.5/DEMO24_Manson/R2/export/?module=plugin&id=#{id}&plugin=conference") + uri = URI.parse("#{url}?module=plugin&id=#{id}&plugin=conference") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) diff --git a/app/views/admin/import/index.html.erb b/app/views/admin/import/index.html.erb index b1dc747..e70767f 100644 --- a/app/views/admin/import/index.html.erb +++ b/app/views/admin/import/index.html.erb @@ -294,7 +294,8 @@ } - + var sto = null; + var new_members_data = null; var importMembers = function(){ $("#import-progress .bar").css('width', '0%'); $("#import-progress-text").html("Importing Member..
"); @@ -302,13 +303,90 @@ type: "post", url: '<%= admin_import_rss2_members_path %>', data : {"url" : url+'?module='+module} - }).done(function(){ + }).done(function(data){ + if(data.success == true){ + // clearTimeout(sto); + $("#import-progress-text").html("Finished importing Members.
"); + $("#import-progress .bar").css('width', '100%'); + new_members_data = data.members; + importPlugins(0); + } }).fail(function(){ $("#import-progress-text").html("Importing failed, click on start to try again."); $("#alert-msg").text("There was an unknown error"); $(".alert-danger").removeClass("hide").show(); + clearTimeout(sto); }) - setTimeout("startCheckingMemberImportStatus()",700); + // sto = setTimeout("startCheckingMemberImportStatus()",700); + } + var plugins = ["patents","books", "projects", "researches", "honors", "diplomas", "experiences", "journalpapers", "conferencespapers"]; + var failed_plugins = []; + var importPlugins = function(number){ + var member = new_members_data[number], + member_status = (member.name == null ? "Importing plugins for id " + member.rss2_id : "Importing plugins for member " + member.name); + $("#import-progress .bar").css('width', '0%'); + $("#import-progress-text").html(member_status + "
"); + importplugin(member.rss2_id, 0,number) + } + + var importplugin = function(id,p,number){ + var plugin = plugins[p]; + $("#import-progress-text #plugin_name").html(plugin.charAt(0).toUpperCase() + plugin.slice(1)); + $.ajax({ + url : "/admin/import/import_plugin", + type : "get", + data : {"rss2_id" : id, "plugin" : plugin, "url" : url}, + dataType : "json" + }).done(function(){ + var percent = ((p + 1) * 100) / plugins.length; + $("#import-progress .bar").css('width', percent + '%'); + if(p != plugins.length - 1){ + importplugin(id, p + 1,number); + }else if(p == plugins.length - 1){ + if((number + 1) != new_members_data.length){ + importPlugins(number + 1); + }else{ + $("#import-progress-text").html("Importing members finished."); + } + } + }).fail(function(){ + failed_plugins.push(plugin); + $("#alert-msg").text("There was an unknown error importing " + plugin + "."); + $(".alert-danger").removeClass("hide").show(); + if(p != plugins.length - 1){ + importplugin(id, p + 1, number); + }else if(p == plugins.length - 1){ + if((number + 1) != new_members_data.length){ + importPlugins(number + 1); + }else{ + $("#import-progress-text").html("Importing members finished."); + } + } + }) + } + + var importfailedplugin = function(id,p){ + var plugin = failed_plugins[p]; + $("#import-progress-text").append("Retrying " + plugin); + $.ajax({ + url : "/admin/import_plugin", + type : "get", + data : {"rss2_id" : id, "plugin" : plugin}, + dataType : "json" + }).done(function(){ + var percent = ((p + failed_plugins.length + 1) * 100) / plugins.length; + $("#import-progress .bar").css('width', percent + '%'); + if(p != failed_plugins.length - 1){ + importfailedplugin(id, p + 1); + } + }).fail(function(){ + $("#alert-msg").text("There was an unknown error importing" + plugin + "."); + $(".alert-danger").removeClass("hide").show(); + if(p != failed_plugins.length - 1){ + importfailedplugin(id, p + 1); + } + }) + return true; } var startCheckingMemberImportStatus = function(){ @@ -322,19 +400,19 @@ if(status.total_members != null){ var percent = (status.current_status * 100) / status.total_members; $("#import-progress .bar").css('width',percent + "%"); - $("#import-progress-text").html("Importing Member" + status.current_member_name + " .. " + status.current_status + "/" + status.total_members + "
"); + $("#import-progress-text").html("Importing Member " + status.current_member_name + " .. " + status.current_status + "/" + status.total_members + "
"); } if(status.total_members != status.current_status){ - setTimeout("startCheckingMemberImportStatus()",700); + sto = setTimeout("startCheckingMemberImportStatus()",700); }else{ if(status.total_members == null){ - setTimeout("startCheckingMemberImportStatus()",700); + sto = setTimeout("startCheckingMemberImportStatus()",700); } $("#import-progress-text").html("Finished importing Members.
"); } }else if(status.success == false){ $("#import-progress-text").html("Importing failed, click on start to try again."); - $("#alert-msg").text("Error importing page " + status.current_member_name + " Email : " + status.current_member) + $("#alert-msg").text("Error importing member " + status.current_member_name + " Email : " + status.current_member) $(".alert-danger").removeClass("hide").show(); } }).fail(function(){ diff --git a/config/routes.rb b/config/routes.rb index 38ef605..06c8cf4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -223,7 +223,7 @@ Orbit::Application.routes.draw do post "import/rss2_album_image" => "import#rss2_album_image" post "import/rss2_links" => "import#rss2_links" post "import/rss2_members" => "import#rss2_members" - get "import/import_honors" => "import#import_honors" + get "import/import_plugin" => "import#import_plugin" end get 'mobile', to: 'pages#home'