forked from saurabh/orbit4-5
member import and some fixes in member backend
This commit is contained in:
parent
1492e6e9e8
commit
c6dd73a98e
|
@ -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'])
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
</div>
|
||||
|
||||
<div id="import-modules" class="hide">
|
||||
<div id="member-module" class="module" onclick="importModule('member')">
|
||||
<div id="members-module" class="module" onclick="importModule('members')">
|
||||
<div class="lead muted">
|
||||
<i class="icons-users"></i><br/>
|
||||
<%= 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..<br/>");
|
||||
$.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 + "<br/>");
|
||||
}
|
||||
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.<br/>");
|
||||
}
|
||||
}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",
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<%= 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) %>
|
||||
<div class="quick-edit">
|
||||
<ul class="nav nav-pills">
|
||||
<%= content_tag(:li, link_to(t(:edit),edit_admin_member_path(member_for_listing))) if current_user.is_admin? %>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<%= image_tag(member_for_summary.avatar) %>
|
||||
</div>
|
||||
<div class="member-info">
|
||||
<h4 class="member-name"><%= 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)%></h4>
|
||||
<h4 class="member-name"><%= link_to (member_for_summary.name != (member_for_summary.email) ? member_for_summary.name : member_for_summary.id),admin_member_path(member_for_summary) %></h4>
|
||||
<div class="member-mail muted"><%= member_for_summary.email%></div>
|
||||
<hr>
|
||||
<ul class="member-roles">
|
||||
|
@ -27,7 +27,7 @@
|
|||
<span class="label label-info"><%= rf.title %></span>
|
||||
<span class="member-staturs muted"><i class="icon-angle-right"></i>
|
||||
<%= 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 ''%>
|
||||
</span>
|
||||
</li>
|
||||
<% end %>
|
||||
|
|
|
@ -17,5 +17,5 @@
|
|||
</div>
|
||||
<%= image_tag(member_for_thumbnail.avatar) %>
|
||||
</div>
|
||||
<h4 class="member-name text-center"><%= 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)%></h4>
|
||||
<h4 class="member-name text-center"><%= link_to (member_for_thumbnail.name != (member_for_thumbnail.email) ? member_for_thumbnail.name : member_for_thumbnail.id),admin_member_path(member_for_thumbnail) %></h4>
|
||||
</li>
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue