forked from saurabh/orbit4-5
Update member frontend and fix member import missing fields
This commit is contained in:
parent
8676e06c87
commit
d6287177a2
|
@ -418,148 +418,66 @@ class Admin::ImportController < OrbitAdminController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
role_attributes = member["attributes"]
|
rss2_roles = member["attributes"]
|
||||||
role_attributes.each do |ra|
|
rss2_roles.each do |rss2_role|
|
||||||
fields = ra["fields"]
|
role = Role.find_by(key: rss2_role["name"]["en"]) rescue nil
|
||||||
role = Role.find_by(key: ra["name"]) rescue nil
|
if role.nil?
|
||||||
if role.present?
|
role = Role.new(key: rss2_role["name"]["en"], title_translations: {"en"=>rss2_role["name"]["en"],"zh_tw"=>rss2_role["name"]["zh-tw"]})
|
||||||
fields.each do |f|
|
role.save
|
||||||
type = f["type"]
|
end
|
||||||
key = f["name"]["en"].gsub("/"," ").split(' ').join('_').underscore rescue nil
|
role.member_profiles << new_member
|
||||||
field = AttributeField.find_by(key: key) rescue nil
|
new_member.position = rss2_role["order"] if !rss2_role["order"].blank?
|
||||||
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, role_id: new_role.id) 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
|
rss2_role["fields"].each do |rss2_field|
|
||||||
option = field.typeB["option_list"] = {"#{i+1}" => {"en"=>f["value"]["en"],"zh_tw"=>f["value"]["zh-tw"]}}
|
key = rss2_field["name"]["en"].gsub("/"," ").split(' ').join('_').underscore rescue nil
|
||||||
option.save
|
rss2_field["type"] = rss2_field["type"].eql?("text") ? "text_field" : rss2_field["type"]
|
||||||
value = new_member.attribute_values.build(key: key, attribute_field_id: field.id, value: i+1)
|
if key != "category"
|
||||||
value.save
|
# Role attribute
|
||||||
end
|
field = AttributeField.find_by(key: key, :role=>role) rescue nil
|
||||||
|
|
||||||
|
if field.nil?
|
||||||
|
field = AttributeField.new(key: key, title_translations: {"en"=>rss2_field["name"]["en"],"zh_tw"=>rss2_field["name"]["zh-tw"]})
|
||||||
|
field["markup"] = rss2_field["type"]
|
||||||
|
role.attribute_fields << field
|
||||||
|
field.save
|
||||||
|
end
|
||||||
|
|
||||||
|
case rss2_field["type"]
|
||||||
|
when "text_field"
|
||||||
|
field_value = rss2_field["value"].is_a?(Hash) ? {"en"=>rss2_field["value"]["en"],"zh_tw"=>rss2_field["value"]["zh-tw"]} : {"en"=>rss2_field["value"],"zh_tw"=>rss2_field["value"]} rescue nil
|
||||||
|
value = new_member.attribute_values.build(key: field.key, attribute_field_id: field.id, value: field_value)
|
||||||
|
value.save
|
||||||
|
when "select"
|
||||||
|
if !rss2_field["value"]["en"].nil?
|
||||||
|
option = {"en"=>rss2_field["value"]["en"],"zh_tw"=>rss2_field["value"]["zh-tw"]}
|
||||||
|
|
||||||
|
index = 0
|
||||||
|
if field.typeB["option_list"].nil? or !field.typeB["option_list"].has_value? option
|
||||||
|
field.typeB["option_list"] = {} if field.typeB["option_list"].nil?
|
||||||
|
index = field.typeB["option_list"].count
|
||||||
|
field.typeB["option_list"]["#{index}"] = option
|
||||||
|
field.save
|
||||||
|
else
|
||||||
|
index = field.typeB["option_list"].key(option)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
value = new_member.attribute_values.build(key: key, attribute_field_id: field.id, value: index)
|
||||||
|
value.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
else
|
||||||
|
# Role status
|
||||||
|
status_key = rss2_field["value"]["en"].split(' ').join('_').underscore rescue nil
|
||||||
|
status = RoleStatus.find_by(key: status_key, role_id: role.id) rescue nil
|
||||||
|
if status.nil?
|
||||||
|
status = role.role_statuses.build(key: status_key, title_translations: {"en"=>rss2_field["value"]["en"],"zh_tw"=>rss2_field["value"]["zh-tw"]})
|
||||||
|
end
|
||||||
|
status.member_profiles << new_member
|
||||||
|
status.save
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
new_member.save
|
new_member.save
|
||||||
@@import_stats["current_status"] = @@import_stats["current_status"] + 1
|
@@import_stats["current_status"] = @@import_stats["current_status"] + 1
|
||||||
write_to_file
|
write_to_file
|
||||||
|
|
|
@ -28,7 +28,7 @@ class MembersController < ApplicationController
|
||||||
status_list = []
|
status_list = []
|
||||||
if !role['status'].blank?
|
if !role['status'].blank?
|
||||||
role['status'].each do |status|
|
role['status'].each do |status|
|
||||||
member_profiles = get_members_by_status(status)
|
member_profiles = get_members_by_status(status, role['id'])
|
||||||
status_list << {
|
status_list << {
|
||||||
"status-title" => status.title,
|
"status-title" => status.title,
|
||||||
"members" => member_profiles
|
"members" => member_profiles
|
||||||
|
@ -36,8 +36,8 @@ class MembersController < ApplicationController
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
# Members with status
|
# Members with status
|
||||||
RoleStatus.where(:role_id=>role['id']).each do |status|
|
RoleStatus.order_by(:title=>"desc").where(:role_id=>role['id']).each do |status|
|
||||||
member_profiles = get_members_by_status(status)
|
member_profiles = get_members_by_status(status, role['id'])
|
||||||
status_list << {
|
status_list << {
|
||||||
"status-title" => status.title,
|
"status-title" => status.title,
|
||||||
"members" => member_profiles
|
"members" => member_profiles
|
||||||
|
@ -46,7 +46,7 @@ class MembersController < ApplicationController
|
||||||
# Members without status
|
# Members without status
|
||||||
member_profiles = []
|
member_profiles = []
|
||||||
MemberProfile.where(:role_ids.in=>[role['id']], :role_status_ids.in=>[nil,[]]).collect do |profile|
|
MemberProfile.where(:role_ids.in=>[role['id']], :role_status_ids.in=>[nil,[]]).collect do |profile|
|
||||||
member_profiles << get_member_data(profile)
|
member_profiles << get_member_data(profile, role['id'])
|
||||||
end
|
end
|
||||||
status_list << {
|
status_list << {
|
||||||
"status-title" => "",
|
"status-title" => "",
|
||||||
|
@ -66,18 +66,55 @@ class MembersController < ApplicationController
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_members_by_status(status)
|
def get_members_by_status(status, role_id)
|
||||||
member_profiles = []
|
member_profiles = []
|
||||||
status.member_profiles.each do |profile|
|
status.member_profiles.sort{|a,b|a.position<=>b.position}.each do |profile|
|
||||||
member_profiles<<get_member_data(profile)
|
member_profiles<<get_member_data(profile, role_id)
|
||||||
end
|
end
|
||||||
return member_profiles
|
return member_profiles
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_member_data(profile)
|
def get_member_data(profile, role_id)
|
||||||
|
params = OrbitHelper.params
|
||||||
|
case params['layout_type']
|
||||||
|
when "index_teacher"
|
||||||
|
get_teacher_data(profile, role_id)
|
||||||
|
when "index_staff"
|
||||||
|
get_staff_data(profile, role_id)
|
||||||
|
else
|
||||||
|
{
|
||||||
|
"name"=>profile.name,
|
||||||
|
"email" => profile.email,
|
||||||
|
"image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100",
|
||||||
|
"link_to_show" => OrbitHelper.url_to_show(profile.to_param)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_teacher_data(profile, role_id)
|
||||||
|
job_title_value = profile.attribute_values.where(:key=>'job_title', :attribute_field_id.in=>Role.find(role_id).attribute_field_ids).first
|
||||||
|
job_title = job_title_value.attribute_field.option_list[job_title_value.value.to_s][I18n.locale.to_s] rescue ""
|
||||||
|
|
||||||
|
discipline = profile.attribute_values.where(:key=>'discipline', :attribute_field_id.in=>Role.find(role_id).attribute_field_ids).first.value[I18n.locale]
|
||||||
|
phone_office = profile.attributes.select{|k,v| v if (k.eql?("office_tel") && v.present?)}
|
||||||
{
|
{
|
||||||
"name"=>profile.name,
|
"name"=>profile.name,
|
||||||
"email" => profile.email,
|
"email" => profile.email,
|
||||||
|
"job-title" => job_title,
|
||||||
|
"discipline" => discipline,
|
||||||
|
"phone-office" => phone_office['office_tel'],
|
||||||
|
"image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100",
|
||||||
|
"link_to_show" => OrbitHelper.url_to_show(profile.to_param)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_staff_data(profile, role_id)
|
||||||
|
job_title_value = profile.attribute_values.where(:key=>'job_title', :attribute_field_id.in=>Role.find(role_id).attribute_field_ids).first
|
||||||
|
job_title = job_title_value.attribute_field.option_list[job_title_value.value.to_s][I18n.locale.to_s] rescue ""
|
||||||
|
{
|
||||||
|
"name"=>profile.name,
|
||||||
|
"email" => profile.email,
|
||||||
|
"job-title" => job_title,
|
||||||
"image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100",
|
"image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100",
|
||||||
"link_to_show" => OrbitHelper.url_to_show(profile.to_param)
|
"link_to_show" => OrbitHelper.url_to_show(profile.to_param)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<div class="index-member index1">
|
||||||
|
<div class="index-member-group" data-list="roles" data-level="0">
|
||||||
|
<div class="index-member-group-item">
|
||||||
|
<h3 class="index-title">
|
||||||
|
<span>{{role-title}}</span>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<div class="index-member-status" data-level="1" data-list="status-list">
|
||||||
|
<div class="index-member-list row" data-level="2" data-list="members">
|
||||||
|
<div class="index-member-item clearfix col-sm-6">
|
||||||
|
<div class="index-member-avatar pull-left">
|
||||||
|
<img src="{{image}}" alt="{{name}}" height="80">
|
||||||
|
</div>
|
||||||
|
<div class="index-member-info">
|
||||||
|
<h5 class="index-member-name">
|
||||||
|
<a href="{{link_to_show}}">{{name}}</a>
|
||||||
|
</h5>
|
||||||
|
<p data-level="3" data-list="roles">
|
||||||
|
<span class="index-member-job-title">{{job-title}}</span>
|
||||||
|
</p>
|
||||||
|
<p class="index-member-mail">{{email}}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{pagination_goes_here}}
|
|
@ -0,0 +1,32 @@
|
||||||
|
<div class="index-member index1">
|
||||||
|
<div class="index-member-group" data-list="roles" data-level="0">
|
||||||
|
<div class="index-member-group-item">
|
||||||
|
|
||||||
|
<div class="index-member-status" data-level="1" data-list="status-list">
|
||||||
|
<h3 class="index-title">
|
||||||
|
<span>{{status-title}}</span>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<div class="index-member-list row" data-level="2" data-list="members">
|
||||||
|
<div class="index-member-item clearfix col-sm-6">
|
||||||
|
<table class="table-condensed">
|
||||||
|
<tr>
|
||||||
|
<td rowspan="5" height="120">
|
||||||
|
<img src="{{image}}" alt="{{name}}" height="120">
|
||||||
|
</td>
|
||||||
|
<td><a href="{{link_to_show}}">{{name}}</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>{{job-title}}</td></tr>
|
||||||
|
<tr><td>{{discipline}}</td></tr>
|
||||||
|
<tr><td>{{phone-office}}</td></tr>
|
||||||
|
<tr><td><a href="mailto:{{email}}">{{email}}</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<br/><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{pagination_goes_here}}
|
|
@ -309,7 +309,7 @@
|
||||||
$("#import-progress-text").html("Finished importing Members.<br/>");
|
$("#import-progress-text").html("Finished importing Members.<br/>");
|
||||||
$("#import-progress .bar").css('width', '100%');
|
$("#import-progress .bar").css('width', '100%');
|
||||||
new_members_data = data.members;
|
new_members_data = data.members;
|
||||||
importPlugins(0);
|
// importPlugins(0);
|
||||||
}
|
}
|
||||||
}).fail(function(){
|
}).fail(function(){
|
||||||
$("#import-progress-text").html("Importing failed, click on start to try again.");
|
$("#import-progress-text").html("Importing failed, click on start to try again.");
|
||||||
|
|
Loading…
Reference in New Issue