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
|
||||
|
||||
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)
|
||||
rss2_roles = member["attributes"]
|
||||
rss2_roles.each do |rss2_role|
|
||||
role = Role.find_by(key: rss2_role["name"]["en"]) rescue nil
|
||||
if role.nil?
|
||||
role = Role.new(key: rss2_role["name"]["en"], title_translations: {"en"=>rss2_role["name"]["en"],"zh_tw"=>rss2_role["name"]["zh-tw"]})
|
||||
role.save
|
||||
end
|
||||
role.member_profiles << new_member
|
||||
new_member.position = rss2_role["order"] if !rss2_role["order"].blank?
|
||||
|
||||
rss2_role["fields"].each do |rss2_field|
|
||||
key = rss2_field["name"]["en"].gsub("/"," ").split(' ').join('_').underscore rescue nil
|
||||
rss2_field["type"] = rss2_field["type"].eql?("text") ? "text_field" : rss2_field["type"]
|
||||
if key != "category"
|
||||
# Role attribute
|
||||
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
|
||||
value = new_member.attribute_values.build(key: attribute.key, attribute_field_id: attribute.id, value: {"en"=>f["value"],"zh_tw"=>f["value"]})
|
||||
index = field.typeB["option_list"].key(option)
|
||||
end
|
||||
|
||||
value = new_member.attribute_values.build(key: key, attribute_field_id: field.id, value: index)
|
||||
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
|
||||
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?
|
||||
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 = 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
|
||||
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
|
||||
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
|
||||
|
|
|
@ -28,7 +28,7 @@ class MembersController < ApplicationController
|
|||
status_list = []
|
||||
if !role['status'].blank?
|
||||
role['status'].each do |status|
|
||||
member_profiles = get_members_by_status(status)
|
||||
member_profiles = get_members_by_status(status, role['id'])
|
||||
status_list << {
|
||||
"status-title" => status.title,
|
||||
"members" => member_profiles
|
||||
|
@ -36,8 +36,8 @@ class MembersController < ApplicationController
|
|||
end
|
||||
else
|
||||
# Members with status
|
||||
RoleStatus.where(:role_id=>role['id']).each do |status|
|
||||
member_profiles = get_members_by_status(status)
|
||||
RoleStatus.order_by(:title=>"desc").where(:role_id=>role['id']).each do |status|
|
||||
member_profiles = get_members_by_status(status, role['id'])
|
||||
status_list << {
|
||||
"status-title" => status.title,
|
||||
"members" => member_profiles
|
||||
|
@ -46,7 +46,7 @@ class MembersController < ApplicationController
|
|||
# Members without status
|
||||
member_profiles = []
|
||||
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
|
||||
status_list << {
|
||||
"status-title" => "",
|
||||
|
@ -66,15 +66,22 @@ class MembersController < ApplicationController
|
|||
}
|
||||
end
|
||||
|
||||
def get_members_by_status(status)
|
||||
def get_members_by_status(status, role_id)
|
||||
member_profiles = []
|
||||
status.member_profiles.each do |profile|
|
||||
member_profiles<<get_member_data(profile)
|
||||
status.member_profiles.sort{|a,b|a.position<=>b.position}.each do |profile|
|
||||
member_profiles<<get_member_data(profile, role_id)
|
||||
end
|
||||
return member_profiles
|
||||
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,
|
||||
|
@ -82,6 +89,36 @@ class MembersController < ApplicationController
|
|||
"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,
|
||||
"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",
|
||||
"link_to_show" => OrbitHelper.url_to_show(profile.to_param)
|
||||
}
|
||||
end
|
||||
|
||||
def show
|
||||
params = OrbitHelper.params
|
||||
|
|
|
@ -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 .bar").css('width', '100%');
|
||||
new_members_data = data.members;
|
||||
importPlugins(0);
|
||||
// importPlugins(0);
|
||||
}
|
||||
}).fail(function(){
|
||||
$("#import-progress-text").html("Importing failed, click on start to try again.");
|
||||
|
|
Loading…
Reference in New Issue