orbit4-5/app/controllers/members_controller.rb

268 lines
10 KiB
Ruby
Raw Normal View History

2014-06-18 12:24:26 +00:00
class MembersController < ApplicationController
def index
page_roles = OrbitHelper.page_categories
page_role_status = OrbitHelper.page_role_status
fields_to_show = [
2014-11-13 03:56:50 +00:00
{"key"=>"name", "type"=>"profile","sort_order"=>2,"link_to_show"=>true},
{"key"=>"discipline", "type"=>"role", "max_length"=>12},
{"key"=>"email", "type"=>"profile"},
{"key"=>"office_tel", "type"=>"profile"}
]
if OrbitHelper.member_sort_position
sort = "data['list_order']"
else
sort = fields_to_show
.collect.with_index{|field,idx| {'sort_order'=>field['sort_order'], 'index'=>idx}}
.select{|field|!field['sort_order'].blank?}
.sort_by{|field|field['sort_order']}
.collect.with_index{|field| "data['profile_data'][#{field['index']}]['sort_value'] rescue 0"}
sort = '[('+sort.join('),(')+')]'
end
if page_roles.include?("all")
roles = Role.all.collect do |role|
2014-07-25 02:50:50 +00:00
{ "title" => role.title, "id" => role.id }
end
else
page_role_status.each do |status_id|
page_roles << RoleStatus.find(status_id).role.id.to_s
end
2014-10-09 10:02:42 +00:00
roles = Role.find(page_roles.uniq).collect do |role|
2014-10-09 10:02:42 +00:00
{ "title" => role.title, "id" => role.id, "status" => RoleStatus.where(:role_id=>role, :_id.in=>page_role_status).to_a }
end
end
role_list = []
roles.each do |role|
2014-11-13 03:56:50 +00:00
attribute_field = AttributeField.where(:key => 'job_title', :role_id => role['id']).first
role_fields_to_show = [{"id"=> attribute_field.id.to_s, "key"=>"job_title", "type"=>"role","sort_order"=>1}] + fields_to_show if !attribute_field.blank?
status_list = []
if !role['status'].blank?
role['status'].each do |status|
2014-11-13 03:56:50 +00:00
member_profiles = get_members_by_status(status, sort, role_fields_to_show)
status_list << { "status-title" => status.title, "members" => member_profiles } if !member_profiles.blank?
end
else
# Members with status
role_status = RoleStatus.order_by(:id=>"asc").where(:role_id=>role['id'])
2014-07-25 02:50:50 +00:00
role_status_ids = role_status.collect{|status| status.id.to_s}
2014-10-09 10:02:42 +00:00
2014-07-25 02:50:50 +00:00
role_status.each do |status|
2014-11-13 03:56:50 +00:00
member_profiles = get_members_by_status(status, sort, role_fields_to_show)
next if member_profiles.blank?
2014-07-25 02:50:50 +00:00
status_list << { "status-title" => status.title, "members" => member_profiles }
end
2014-10-09 10:02:42 +00:00
# Members without status
member_profiles = []
2014-07-25 02:50:50 +00:00
MemberProfile.not_in(:role_status_ids.in=>role_status_ids).where(:role_ids.in=>[role['id']]).collect do |profile|
member_profiles << get_member_data(profile, fields_to_show)
end
2014-10-09 10:02:42 +00:00
member_profiles = member_profiles.sort_by{|data| eval(sort)} rescue member_profiles
status_list << { "status-title" => role['title'], "members" => member_profiles } if !member_profiles.blank?
end
2014-07-25 02:50:50 +00:00
role_list << { "role-title" => role['title'], "status-list" => status_list }
end
{
"roles" => role_list,
"extras" => {
"widget-title"=>t(:member_)
}
}
end
def get_members_by_status(status, sort, fields_to_show)
member_profiles = []
2014-10-09 10:02:42 +00:00
status.member_profiles.each do |member|
member_profiles<<get_member_data(member, fields_to_show)
end
2014-10-09 10:02:42 +00:00
return member_profiles.sort_by{|data| eval(sort)} rescue member_profiles
end
def get_member_data(member, fields_to_show)
image = member.avatar.present? ? member.avatar.thumb.url : ActionController::Base.helpers.asset_path('member-pic.png')
{
'profile_data'=>member_data(member, fields_to_show),
'list_order' => member.position,
'name' => member.name,
'image'=>image,
"link_to_show" => OrbitHelper.url_to_show(member.to_param)
}
2014-06-18 12:24:26 +00:00
end
def show
params = OrbitHelper.params
member = MemberProfile.find_by(uid: params[:uid])
2014-11-13 03:56:50 +00:00
profile_data = []
#role status
member.roles.where(:disabled => false).asc("_id").collect do |role|
role_status = member.role_statuses.where(role_id: role.id).map{|t|t.title.to_s}.join(',') rescue ''
profile_data = profile_data.push({"key"=>"role_status", "title"=>"", "value"=> role_status, "title_class"=>"member-data-title-role-status", "value_class"=>"member-data-value-role-status"}) if !role_status.blank?
attribute_field = role.attribute_fields.where(:key => 'job_title').first
profile_data = profile_data + member_data(member, [{"id"=> attribute_field.id.to_s, "key"=> attribute_field.key, "type"=>"role"}]) if !attribute_field.blank? and !attribute_field.to_show.blank?
end
fields_to_show = [
2014-11-13 03:56:50 +00:00
{"key"=>"name", "type"=>"profile"},
{"key"=>"office_tel", "type"=>"profile"},
{"key"=>"email", "type"=>"profile"}
]
profile_data = profile_data + member_data(member, fields_to_show)
profile_fields_to_show = []
# member info
infos = MemberInfo.order('created_at DESC')
infos.each do |info|
info.member_profile_fields.each do |member_profile_field|
profile_fields_to_show << {"id"=> member_profile_field.id.to_s, "key"=> member_profile_field.key, "type"=>"custom"} if !member_profile_field.to_show.blank?
end
end
profile_data = profile_data + member_data(member, profile_fields_to_show)
2014-11-13 03:56:50 +00:00
# member role
role_fields_to_show = []
member.roles.where(:disabled => false).asc("_id").collect do |role|
role.attribute_fields.where(:key.ne => 'job_title').asc("_id").each do |attribute_field|
role_fields_to_show << {"id"=> attribute_field.id.to_s, "key"=> attribute_field.key, "type"=>"role"} if !attribute_field.to_show.blank?
end
end
profile_data = profile_data + member_data(member, role_fields_to_show)
# member plugin
plugins = OrbitApp::Plugin::Registration.all rescue nil
plugin_list = plugins.collect.with_index do |plugin, idx|
2015-01-09 08:13:17 +00:00
intro = PersonalPluginIntro.find_by(member_profile_id: member.id, _type: "#{plugin.app_name}Intro") rescue nil
2015-01-09 08:13:17 +00:00
if intro.nil? or intro.complete_list
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
pd = plugin_data.collect do |p|
slug_title = ["JournalPaper","WritingConference"].include?(plugin.app_name) ? p.create_link : p.slug_title
{
"data_title" => slug_title,
"link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore)
}
end
if plugin.app_name == 'JournalPaper' or plugin.app_name == 'WritingConference' or plugin.app_name == 'Book'
pd_title = {}
plugin_datas = plugin_data.where(:is_hidden=>false).desc(:year).collect do |p|
{
2015-01-20 07:27:43 +00:00
"pd_datas" => [{ "data_title" => "<a href='#{OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore)}' target='_blank'>#{p.create_link}" }]
}
end
2015-01-09 08:13:17 +00:00
else
datas = plugin.app_name.constantize.get_plugin_datas_to_member(plugin_data)
pd_title = datas[0] rescue {}
plugin_datas = datas[1] rescue {}
end
2015-01-09 08:13:17 +00:00
end
if !intro.blank?
if !intro.brief_intro.blank?
pdi = []
pdi << {"data_intro_title" => intro.text.html_safe}
end
if intro.complete_list.blank?
complete_display = "hide"
2015-01-09 08:13:17 +00:00
pd_title = {}
plugin_datas = {}
end
if intro.brief_intro.blank?
brief_display = "hide"
2015-01-09 08:13:17 +00:00
pdi = {}
end
2015-01-09 08:13:17 +00:00
else
pdi = [{"data_intro_title" => ''}] if !plugin_datas.blank?
end
2015-01-09 08:13:17 +00:00
{
"plugin_data" => pd,
2015-01-09 08:13:17 +00:00
"pd_title" => pd_title,
"plugin_datas" => plugin_datas,
"plugin_data_intro" => pdi,
"complete_display" => complete_display,
"brief_display" => brief_display,
"plugin_name" => plugin.module_app_name.underscore,
"plugin_title" => t('module_name.'+plugin.module_app_name.underscore),
"plugin_class" => idx==0 ? "active" : ""
2015-01-09 08:13:17 +00:00
}
end
2015-01-09 08:13:17 +00:00
plugin_list = plugin_list.reject{|plugin| plugin['plugin_datas'].blank? and plugin['plugin_data_intro'].blank?}
{
"plugins" => plugin_list,
"profile_data" => profile_data,
"data" => {
"image" => member.avatar.present? ? member.avatar.thumb.url : ActionController::Base.helpers.asset_path('member-pic.png'),
"name" => member.name
}
}
end
def member_data(member, fields_to_show)
profile_data = []
fields_to_show.each do |field|
case field['type']
when 'profile'
field_data = member.get_attribute_data(field) rescue {}
when 'custom'
2014-11-13 03:56:50 +00:00
if !field['id'].blank?
field_data = member.member_profile_field_values.find_by(:member_profile_field_id=>field['id'],:key=>field['key']).get_field_value rescue {}
else
field_data = member.member_profile_field_values.find_by(:key=>field['key']).get_field_value rescue {}
end
when 'role'
2014-11-13 03:56:50 +00:00
if !field['id'].blank?
field_data = member.attribute_values.find_by(:attribute_field_id=>field['id'],:key=>field['key']).get_field_value rescue {}
else
field_data = member.attribute_values.find_by(:key=>field['key']).get_field_value rescue {}
end
end
next if field_data.blank? or field_data['value'].blank?
2014-10-29 13:27:53 +00:00
if field['sort_order']
field_data['sort_value'] = field_data['val'].blank? ? field_data['value'] : field_data['val']
2014-10-09 10:02:42 +00:00
field_data['sort_value'] = (field_data['sort_value'].is_i? ? field_data['sort_value'].to_i : field_data['sort_value'] rescue field_data['sort_value'])
end
if field['link_to_show']
field_data['value'] = "<a href='#{OrbitHelper.url_to_show(member.to_param)}'>#{field_data['value']}</a>"
end
if field['max_length']
field_data['value'] = (field_data['value'].length > field['max_length']) ? field_data['value'][0..field['max_length']]+'...' : field_data['value']
end
field_data['title_class'] = "member-data-title-"+field['key'].underscore.gsub('_','-')
field_data['value_class'] = "member-data-value-"+field['key'].underscore.gsub('_','-')
profile_data.push(field_data)
end
return profile_data
end
2014-06-18 12:24:26 +00:00
end