diff --git a/app/controllers/admin/import_controller.rb b/app/controllers/admin/import_controller.rb index 6618157..8a0248e 100644 --- a/app/controllers/admin/import_controller.rb +++ b/app/controllers/admin/import_controller.rb @@ -72,7 +72,6 @@ class Admin::ImportController < OrbitAdminController response = http.request(request) data = response.body data = JSON.parse(data) - case params['module'] when 'archive' import_archive(data) @@ -291,6 +290,292 @@ class Admin::ImportController < OrbitAdminController render :json => settings.to_json end + def rss2_members + uri = URI.parse(params['url']) + # @@thread = Thread.new do + 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) + @@import_stats["total_members"] = data["users"].count + @@import_stats["current_status"] = 0 + @@import_stats["success"] = true + write_to_file + members = data["users"] + 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.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"]} + new_member.first_name_translations = {"en"=>member["name"]["en"],"zh_tw"=>member["name"]["zh-tw"]} + if member["gender"] == "M" + new_member.sex = "male" + elsif member["gender"] == "F" + new_member.sex = "female" + elsif member["gender"].nil? + new_member.sex = "unknown" + end + if member["profile_pic"].present? + image_url = member["profile_pic"] + new_member.remote_avatar_url = image_url + end + info = MemberInfo.find_by(key: "basic_info") + + + if member.include?("website") + member_profile_field = info.member_profile_fields.find_by(key: "website") rescue nil + if member_profile_field.nil? + field = info.member_profile_fields.build(key: "website",markup: "text_field",title_translations:{"en"=>"website","zh_tw"=>"網站"}) + field.save + value = field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["website"],"zh_tw"=>member["website"]} + value.save + elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?) + value = member_profile_field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["website"],"zh_tw"=>member["website"]} + value.save + end + end + + if member.include?("address_home") + member_profile_field = info.member_profile_fields.find_by(key: "address_home") rescue nil + if member_profile_field.nil? + field = info.member_profile_fields.build(key: "address_home",markup: "text_area",title_translations:{"en"=>"Home Address","zh_tw"=>"家庭住址"}) + field.save + value = field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["address_home"]["en"],"zh_tw"=>member["address_home"]["zh-tw"]} + value.save + elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?) + value = member_profile_field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["address_home"]["en"],"zh_tw"=>member["address_home"]["zh-tw"]} + value.save + end + end + + if member.include?("fax") + member_profile_field = info.member_profile_fields.find_by(key: "fax") rescue nil + if member_profile_field.nil? + field = info.member_profile_fields.build(key: "fax",markup: "text_field",title_translations:{"en"=>"Fax","zh_tw"=>"傳真"}) + field.save + value = field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["fax"],"zh_tw"=>member["fax"]} + value.save + elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?) + value = member_profile_field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["fax"],"zh_tw"=>member["fax"]} + value.save + end + end + + if member.include?("experience") + member_profile_field = info.member_profile_fields.find_by(key: "experience") rescue nil + if member_profile_field.nil? + field = info.member_profile_fields.build(key: "experience",markup: "text_area",title_translations:{"en"=>"Experience","zh_tw"=>"經驗"}) + field.save + value = field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["experience"]["en"],"zh_tw"=>member["experience"]["zh-tw"]} + value.save + elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?) + value = member_profile_field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["experience"]["en"],"zh_tw"=>member["experience"]["zh-tw"]} + value.save + end + end + + if member.include?("mobile") + member_profile_field = info.member_profile_fields.find_by(key: "mobile") rescue nil + if member_profile_field.nil? + field = info.member_profile_fields.build(key: "mobile",markup: "text_field",title_translations:{"en"=>"Mobile Phone Number","zh_tw"=>"手機號碼"}) + field.save + value = field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["mobile"],"zh_tw"=>member["mobile"]} + value.save + elsif (member_profile_field.present? && member_profile_field.member_profile_field_values.blank?) + value = member_profile_field.member_profile_field_values.build + value.member_profile_id = new_member.id + value.value = {"en"=>member["mobile"],"zh_tw"=>member["mobile"]} + value.save + end + end + + role_attributes = member["attributes"] + role_attributes.each do |ra| + fields = ra["fields"] + role = Role.find_by(key: ra["name"]) rescue nil + if role.present? + fields.each do |f| + type = f["type"] + key = f["name"]["en"].gsub("/"," ").split(' ').join('_').underscore rescue nil + field = AttributeField.find_by(key: key) rescue nil + if (field.nil? && key != "category" && key != "academic_status") + if type == "text" + attribute = role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]}) + attribute["markup"] = "text_field" + attribute.save + if !f["value"].nil? + if (f["value"].is_a?(Hash) && f["value"].has_key?("en")) + field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil + value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: field_value) + value.save + else + value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]}) + value.save + end + end + elsif type == "select" + attribute = role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]}) + attribute["markup"] = type + first_index = 0 + attribute.typeB["option_list"] = {"#{first_index}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}} + attribute.save + value = new_member.attribute_values.build(key: key, attribute_field_id: attribute.id, value: first_index) + value.save + end + new_member.roles << role + elsif (field.nil? && (["category","academic_status"].include? key)) + status_key = f["value"]["en"].split(' ').join('_').underscore rescue nil + status = RoleStatus.find_by(key: status_key, role_id: role.id) rescue nil + if status.nil? + role_status = role.role_statuses.build(key: status_key, title_translations: {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}) + role_status.member_profiles = [new_member] + role_status.save + else + status.member_profiles = [new_member] + status.save + end + elsif field.present? + if field.markup = "text_field" + if !f["value"].nil? + if (f["value"].is_a?(Hash) && f["value"].has_key?("en")) + field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil + value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: field_value) + value.save + else + value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]}) + value.save + end + end + elsif field.markup = "select" + field.typeB["option_list"].each_with_index do |v,i| + if v.last["en"] != f["value"]["en"] + option = field.typeB["option_list"] = {"#{i+1}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}} + option.save + end + @index = (field.typeB["option_list"].count - 1) + end + value = new_member.attribute_values.build(key: key, attribute_field_id: field.id, value: @index) + value.save + end + new_member.roles << role + end + end + elsif role.nil? + new_role = new_member.roles.build(key: ra["name"], title_translations: {"en"=>ra["name"].titleize,"zh_tw"=>ra["name"].titleize}) + new_role.save + fields.each do |f| + type = f["type"] + key = f["name"]["en"].gsub("/"," ").split(' ').join('_').underscore rescue nil + field = AttributeField.find_by(key: key) rescue nil + if (field.nil? && key != "category" && key != "academic_status") + if type == "text" + attribute = new_role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]}) + attribute["markup"] = "text_field" + attribute.save + if !f["value"].nil? + if (f["value"].is_a?(Hash) && f["value"].has_key?("en")) + field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil + value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: field_value) + value.save + else + value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]}) + value.save + end + end + elsif type == "select" + attribute = new_role.attribute_fields.build(key: key, title_translations: {"en"=>f["name"]["en"],"zh_tw"=>f["name"]["zh-tw"]}) + attribute["markup"] = type + first_index = 0 + attribute.typeB["option_list"] = {"#{first_index}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}} + attribute.save + value = new_member.attribute_values.build(key: key, attribute_field_id: attribute.id, value: first_index) + value.save + end + elsif (field.nil? && (["category","academic_status"].include? key)) + status_key = f["value"]["en"].split(' ').join('_').underscore rescue nil + status = RoleStatus.find_by(key: status_key, role_id: new_role.id) rescue nil + if status.nil? + role_status = new_role.role_statuses.build(key: status_key, title_translations: {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}) + role_status.member_profiles = [new_member] + role_status.save + else + status.member_profiles = [new_member] + status.save + end + elsif (!field.nil? && key != "category") + if field.markup = "text_field" + if !f["value"].nil? + if (f["value"].is_a?(Hash) && f["value"].has_key?("en")) + field_value = {"en"=>f["value"]["en"],"zh_tw"=>["value"]["zh-tw"]} rescue nil + value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: field_value) + value.save + else + value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]}) + value.save + end + end + elsif field.markup = "select" + field.typeB["option_list"].each_with_index do |v,i| + if v.last["en"] == f["value"]["en"] + + else + option = field.typeB["option_list"] = {"#{i+1}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}} + option.save + value = new_member.attribute_values.build(key: key, attribute_field_id: field.id, value: i+1) + value.save + end + end + end + end + end + + end + end + new_member.save + @@import_stats["current_status"] = @@import_stats["current_status"] + 1 + write_to_file + 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.save + end + end + end + + render :json => {"success" => true}.to_json + end + def rss2_galleries delete_import_file uri = URI.parse(params['url']) diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb index 4659f77..0d7b8b0 100644 --- a/app/models/member_profile.rb +++ b/app/models/member_profile.rb @@ -19,6 +19,7 @@ class MemberProfile field :autobiography, type: String, localize: true field :email, type: String field :position, type: Integer + field :rss2_id VALID_EMAIL_FORMAT = /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/ validates :email, uniqueness: true, format: { with: VALID_EMAIL_FORMAT }, if: :email_present? @@ -157,4 +158,8 @@ class MemberProfile def email_present? self.email.present? end + + def get_role_statuses(role_id) + RoleStatus.where(role_id: role_id).any_of(member_profile_ids: self.id) + end end diff --git a/app/views/admin/import/index.html.erb b/app/views/admin/import/index.html.erb index 54e5908..eac1d1d 100644 --- a/app/views/admin/import/index.html.erb +++ b/app/views/admin/import/index.html.erb @@ -110,7 +110,7 @@
-
+

<%= t("member_") %> @@ -197,6 +197,9 @@ case "links": importLinks(); break; + case "members": + importMembers(); + break; default: getModuleCategories(); } @@ -260,6 +263,55 @@ setTimeout("startCheckingGalleryImportStatus()",700); } + var importMembers = function(){ + $("#import-progress .bar").css('width', '0%'); + $("#import-progress-text").html("Importing Member..
"); + $.ajax({ + type: "post", + url: '<%= admin_import_rss2_members_path %>', + data : {"url" : url+'?module='+module} + }).done(function(){ + }).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(); + }) + setTimeout("startCheckingMemberImportStatus()",700); + } + + var startCheckingMemberImportStatus = function(){ + $.ajax({ + type : "get", + dataType : "json", + data : {"module" : module}, + url : "<%= admin_import_get_import_status_path %>" + }).done(function(status){ + if(status.success == true){ + 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 + "
"); + } + if(status.total_members != status.current_status){ + setTimeout("startCheckingMemberImportStatus()",700); + }else{ + if(status.total_members == null){ + 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-danger").removeClass("hide").show(); + } + }).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(); + }) + } + var startCheckinglinksImportStatus = function(){ $.ajax({ type : "get", diff --git a/app/views/admin/members/_member_for_listing.html.erb b/app/views/admin/members/_member_for_listing.html.erb index 4271876..cc5bf64 100644 --- a/app/views/admin/members/_member_for_listing.html.erb +++ b/app/views/admin/members/_member_for_listing.html.erb @@ -18,7 +18,7 @@ <% end %> - <%= link_to (member_for_listing.name && member_for_listing.name != (member_for_listing.email if member_for_listing.user.present?) ? member_for_listing.name : member_for_listing.user.id),admin_member_path(member_for_listing) %> + <%= link_to (member_for_listing.name != (member_for_listing.email) ? member_for_listing.name : member_for_listing.id),admin_member_path(member_for_listing) %>
-

<%= link_to (member_for_summary.name && member_for_summary.name != member_for_summary.email ? member_for_summary.name : member_for_summary.user_id),admin_members_path(member_for_summary)%>

+

<%= link_to (member_for_summary.name != (member_for_summary.email) ? member_for_summary.name : member_for_summary.id),admin_member_path(member_for_summary) %>

<%= member_for_summary.email%>

    @@ -27,7 +27,7 @@ <%= rf.title %> <%= User.get_member_list_attribute_value(member_for_summary.id, rf.key, "job_title").get_value_by_locale(I18n.locale) rescue '' %> - <%= member_for_summary.role_statuses.map{|t|t.title.to_s}.join(',') rescue '' %> + <%= member_for_summary.get_role_statuses(rf.id).map{|t|t.title.to_s}.join(',') rescue ''%> <% end %> diff --git a/app/views/admin/members/_member_for_thumbnail.html.erb b/app/views/admin/members/_member_for_thumbnail.html.erb index da1dddb..08b20bf 100644 --- a/app/views/admin/members/_member_for_thumbnail.html.erb +++ b/app/views/admin/members/_member_for_thumbnail.html.erb @@ -17,5 +17,5 @@
<%= image_tag(member_for_thumbnail.avatar) %>
-

<%= link_to (member_for_thumbnail.name && member_for_thumbnail.name != member_for_thumbnail.email ? member_for_thumbnail.name : member_for_thumbnail.user_id),admin_members_path(member_for_thumbnail)%>

+

<%= link_to (member_for_thumbnail.name != (member_for_thumbnail.email) ? member_for_thumbnail.name : member_for_thumbnail.id),admin_member_path(member_for_thumbnail) %>

\ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 141dd97..eb9e1d2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -221,6 +221,7 @@ Orbit::Application.routes.draw do get "import/get_import_status" => "import#get_import_status" post "import/rss2_galleries" => "import#rss2_galleries" post "import/rss2_links" => "import#rss2_links" + post "import/rss2_members" => "import#rss2_members" end get 'mobile', to: 'pages#home'