orbit4-5/app/controllers/members_controller.rb

286 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
if page_roles.include?("all")
roles = Role.all.collect do |role|
{
"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
roles = Role.find(page_roles.uniq).collect do |role|
{
"title" => role.title,
"id" => role.id,
"status" => RoleStatus.where(:role_id=>role, :_id.in=>page_role_status)
}
end
end
role_list = []
roles.each do |role|
status_list = []
if !role['status'].blank?
role['status'].each do |status|
member_profiles = get_members_by_status(status, role['id'])
status_list << {
"status-title" => status.title,
"members" => member_profiles
}
end
else
# Members with 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
}
end
# 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, role['id'])
end
status_list << {
"status-title" => "",
"members" => member_profiles
}
end
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, role_id)
member_profiles = []
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, 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,
"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)
}
2014-06-18 12:24:26 +00:00
end
def show
params = OrbitHelper.params
member = MemberProfile.find_by(uid: params[:uid])
plugins = OrbitApp::Plugin::Registration.all rescue nil
2014-06-25 13:40:13 +00:00
plugin_list = plugins.collect do |plugin|
2014-07-09 08:53:12 +00:00
intro = PersonalPluginIntro.find_by(member_profile_id: member.id, _type: "#{plugin.app_name}Intro") rescue nil
if intro.nil?
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
pd = plugin_data.collect do |p|
{
"data_title" => p.slug_title,
2014-07-04 03:50:08 +00:00
"link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore)
}
end
{
"plugin_data" => pd,
"plugin_title" => plugin.app_name.titleize
}
elsif intro.complete_list == true
2014-06-25 13:40:13 +00:00
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
pd = plugin_data.collect do |p|
{
"data_title" => p.slug_title,
2014-07-02 09:37:34 +00:00
"link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore)
2014-06-25 13:40:13 +00:00
}
end
{
"plugin_data" => pd,
"plugin_title" => plugin.app_name.titleize
}
# end
elsif intro.brief_intro == true
pd = []
2014-06-26 02:00:55 +00:00
pd << {"data_title" => intro.text.html_safe}
2014-06-25 13:40:13 +00:00
{
"plugin_data" => pd,
"plugin_title" => plugin.app_name.titleize
}
end
end
if member.avatar.present?
image = member.avatar.thumb.url
else
image = "http://placehold.it/100x100"
end
custom_fields = member.member_profile_field_values.collect do |cf|
if (cf.member_profile_field.markup.eql?("text_field") || cf.member_profile_field.markup.eql?("text_area"))
custom_field_value = cf.value[I18n.locale]
elsif (cf.member_profile_field.markup.eql?("select") || cf.member_profile_field.markup.eql?("radio_button"))
custom_field_value = cf.member_profile_field.markup_value["#{cf.value}"][I18n.locale] rescue nil
elsif cf.member_profile_field.markup.eql?("address")
custom_field_value = cf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif cf.member_profile_field.markup.eql?("date")
case cf.member_profile_field.typeC['format']
when 'format1'
custom_field_value = cf.value.to_date.strftime("%Y/%m/%d")
when 'format2'
custom_field_value = cf.value.to_date.strftime("%Y/%m/%d")
when 'format3'
custom_field_value = cf.value.to_date.strftime("%Y/%m")
when 'format4'
custom_field_value = cf.value.to_date.strftime("%Y")
end
elsif cf.member_profile_field.markup.eql?("checkbox")
custom_field_value = cf.value.map {|v| cf.member_profile_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
end
if !custom_field_value.blank?
{
"custom_field_title" => cf.member_profile_field.title,
"custom_field_value" => custom_field_value
}
else
{
"custom_field_title" => "",
"custom_field_value" => ""
}
end
end
custom_fields_final = custom_fields.map {|c| c.delete_if {|k,v| (v.nil? || v.blank?)}}.delete_if(&:blank?)
role_fields = member.attribute_values.collect do |rf|
if (rf.attribute_field.markup.eql?("text_field") || rf.attribute_field.markup.eql?("text_area"))
role_field_value = rf.value[I18n.locale]
elsif (rf.attribute_field.markup.eql?("select") || rf.attribute_field.markup.eql?("radio_button"))
role_field_value = rf.attribute_field.markup_value["#{rf.value}"][I18n.locale] rescue nil
elsif rf.attribute_field.markup.eql?("address")
role_field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif rf.attribute_field.markup.eql?("date")
case rf.attribute_field.typeC['format']
when 'format1'
role_field_value = rf.value.to_date.strftime("%Y/%m/%d")
when 'format2'
role_field_value = rf.value.to_date.strftime("%Y/%m/%d")
when 'format3'
role_field_value = rf.value.to_date.strftime("%Y/%m")
when 'format4'
role_field_value = rf.value.to_date.strftime("%Y")
end
elsif rf.attribute_field.markup.eql?("checkbox")
role_field_value = rf.value.map {|v| rf.attribute_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
end
if !role_field_value.blank?
{
"role_field_title" => rf.attribute_field.title,
"role_field_value" => role_field_value
}
else
{
"role_field_title" => "",
"role_field_value" => ""
}
end
end
role_fields_final = role_fields.map {|r| r.delete_if {|k,v| (v.nil? || v.blank?)}}.delete_if(&:blank?)
roles = member.roles.collect do |role|
{
"role" => role.title
}
end
data = []
member.values_for_show.each do |key,value|
data << {"key" => key.humanize, "value" => value}
end
autobiography = []
if !member.get_autobiography_for_show.blank?
autobiography << {"key" => "#{member.get_autobiography_for_show.first[0].capitalize}", "value" => member.get_autobiography_for_show["autobiography"]}
end
image = member.get_image_for_show["img_src"]
{
"roles" => roles,
"plugins" => plugin_list,
"custom_fields_final" => custom_fields_final,
"role_fields_final" => role_fields_final,
"member_data" => data,
"autobiography_data" => autobiography,
"data" => {
"img_src" => image,
"name" => member.name
}
}
2014-06-18 12:24:26 +00:00
end
def personal_plugin
params = OrbitHelper.params
plugin_class = params[:plugin_name].constantize
plugin_value = plugin_class.find_by(uid: params[:uid])
data = []
plugin_value.values_for_view.each do |key,value|
data << {"key" => key.humanize, "value" => value}
end
{
"plugin_data" => data
}
end
2014-06-18 12:24:26 +00:00
end