2014-06-18 12:24:26 +00:00
|
|
|
class MembersController < ApplicationController
|
|
|
|
def index
|
2014-07-23 16:04:10 +00:00
|
|
|
page_roles = OrbitHelper.page_categories
|
|
|
|
page_role_status = OrbitHelper.page_role_status
|
|
|
|
|
|
|
|
if page_roles.include?("all")
|
|
|
|
roles = Role.all.collect do |role|
|
2014-06-27 03:38:06 +00:00
|
|
|
{
|
2014-07-23 16:04:10 +00:00
|
|
|
"title" => role.title,
|
|
|
|
"id" => role.id
|
2014-06-27 03:38:06 +00:00
|
|
|
}
|
|
|
|
end
|
|
|
|
else
|
2014-07-23 16:04:10 +00:00
|
|
|
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)
|
|
|
|
}
|
2014-06-27 03:38:06 +00:00
|
|
|
end
|
|
|
|
end
|
2014-07-23 16:04:10 +00:00
|
|
|
|
|
|
|
role_list = []
|
|
|
|
roles.each do |role|
|
|
|
|
status_list = []
|
|
|
|
if !role['status'].blank?
|
|
|
|
role['status'].each do |status|
|
2014-07-24 12:12:35 +00:00
|
|
|
member_profiles = get_members_by_status(status, role['id'])
|
2014-07-23 16:04:10 +00:00
|
|
|
status_list << {
|
|
|
|
"status-title" => status.title,
|
|
|
|
"members" => member_profiles
|
|
|
|
}
|
2014-06-27 03:38:06 +00:00
|
|
|
end
|
2014-07-23 16:04:10 +00:00
|
|
|
else
|
|
|
|
# Members with status
|
2014-07-24 12:12:35 +00:00
|
|
|
RoleStatus.order_by(:title=>"desc").where(:role_id=>role['id']).each do |status|
|
|
|
|
member_profiles = get_members_by_status(status, role['id'])
|
2014-07-23 16:04:10 +00:00
|
|
|
status_list << {
|
|
|
|
"status-title" => status.title,
|
|
|
|
"members" => member_profiles
|
2014-06-27 03:38:06 +00:00
|
|
|
}
|
|
|
|
end
|
2014-07-23 16:04:10 +00:00
|
|
|
# Members without status
|
|
|
|
member_profiles = []
|
|
|
|
MemberProfile.where(:role_ids.in=>[role['id']], :role_status_ids.in=>[nil,[]]).collect do |profile|
|
2014-07-24 12:12:35 +00:00
|
|
|
member_profiles << get_member_data(profile, role['id'])
|
2014-07-23 16:04:10 +00:00
|
|
|
end
|
|
|
|
status_list << {
|
|
|
|
"status-title" => "",
|
|
|
|
"members" => member_profiles
|
2014-06-27 03:38:06 +00:00
|
|
|
}
|
|
|
|
end
|
2014-07-23 16:04:10 +00:00
|
|
|
role_list << {
|
|
|
|
"role-title" => role['title'],
|
|
|
|
"status-list" => status_list
|
2014-06-27 03:38:06 +00:00
|
|
|
}
|
|
|
|
end
|
2014-07-23 16:04:10 +00:00
|
|
|
{
|
|
|
|
"roles" => role_list,
|
|
|
|
"extras" => {
|
|
|
|
"widget-title"=>t(:member_)
|
2014-06-27 03:38:06 +00:00
|
|
|
}
|
2014-07-23 16:04:10 +00:00
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2014-07-24 12:12:35 +00:00
|
|
|
def get_members_by_status(status, role_id)
|
2014-07-23 16:04:10 +00:00
|
|
|
member_profiles = []
|
2014-07-24 12:12:35 +00:00
|
|
|
status.member_profiles.sort{|a,b|a.position<=>b.position}.each do |profile|
|
|
|
|
member_profiles<<get_member_data(profile, role_id)
|
2014-07-23 16:04:10 +00:00
|
|
|
end
|
|
|
|
return member_profiles
|
|
|
|
end
|
|
|
|
|
2014-07-24 12:12:35 +00:00
|
|
|
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 ""
|
2014-07-23 16:04:10 +00:00
|
|
|
{
|
|
|
|
"name"=>profile.name,
|
|
|
|
"email" => profile.email,
|
2014-07-24 12:12:35 +00:00
|
|
|
"job-title" => job_title,
|
2014-07-23 16:04:10 +00:00
|
|
|
"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
|
2014-06-24 06:07:59 +00:00
|
|
|
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
|
2014-06-24 06:07:59 +00:00
|
|
|
|
2014-06-27 03:38:06 +00:00
|
|
|
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)
|
2014-06-27 03:38:06 +00:00
|
|
|
}
|
|
|
|
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
|
2014-06-24 06:07:59 +00:00
|
|
|
|
|
|
|
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"))
|
2014-06-29 12:42:15 +00:00
|
|
|
custom_field_value = cf.member_profile_field.markup_value["#{cf.value}"][I18n.locale] rescue nil
|
2014-06-24 06:07:59 +00:00
|
|
|
elsif cf.member_profile_field.markup.eql?("address")
|
2014-06-29 12:42:15 +00:00
|
|
|
custom_field_value = cf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
|
2014-06-24 06:07:59 +00:00
|
|
|
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")
|
2014-06-29 12:42:15 +00:00
|
|
|
custom_field_value = cf.value.map {|v| cf.member_profile_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
|
2014-06-24 06:07:59 +00:00
|
|
|
end
|
2014-06-29 12:42:15 +00:00
|
|
|
if !custom_field_value.blank?
|
2014-06-24 06:07:59 +00:00
|
|
|
{
|
|
|
|
"custom_field_title" => cf.member_profile_field.title,
|
|
|
|
"custom_field_value" => custom_field_value
|
|
|
|
}
|
2014-06-29 12:42:15 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
"custom_field_title" => "",
|
|
|
|
"custom_field_value" => ""
|
|
|
|
}
|
|
|
|
end
|
2014-06-24 06:07:59 +00:00
|
|
|
end
|
2014-06-29 12:42:15 +00:00
|
|
|
custom_fields_final = custom_fields.map {|c| c.delete_if {|k,v| (v.nil? || v.blank?)}}.delete_if(&:blank?)
|
2014-06-24 06:07:59 +00:00
|
|
|
|
|
|
|
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"))
|
2014-06-27 03:38:06 +00:00
|
|
|
role_field_value = rf.attribute_field.markup_value["#{rf.value}"][I18n.locale] rescue nil
|
2014-06-24 06:07:59 +00:00
|
|
|
elsif rf.attribute_field.markup.eql?("address")
|
2014-06-29 12:42:15 +00:00
|
|
|
role_field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
|
2014-06-24 06:07:59 +00:00
|
|
|
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")
|
2014-06-27 03:38:06 +00:00
|
|
|
role_field_value = rf.value.map {|v| rf.attribute_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
|
2014-06-24 06:07:59 +00:00
|
|
|
end
|
2014-06-29 12:42:15 +00:00
|
|
|
if !role_field_value.blank?
|
2014-06-24 06:07:59 +00:00
|
|
|
{
|
|
|
|
"role_field_title" => rf.attribute_field.title,
|
|
|
|
"role_field_value" => role_field_value
|
|
|
|
}
|
2014-06-29 12:42:15 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
"role_field_title" => "",
|
|
|
|
"role_field_value" => ""
|
|
|
|
}
|
|
|
|
end
|
2014-06-24 06:07:59 +00:00
|
|
|
end
|
2014-06-29 12:42:15 +00:00
|
|
|
role_fields_final = role_fields.map {|r| r.delete_if {|k,v| (v.nil? || v.blank?)}}.delete_if(&:blank?)
|
2014-06-24 06:07:59 +00:00
|
|
|
|
|
|
|
roles = member.roles.collect do |role|
|
|
|
|
{
|
|
|
|
"role" => role.title
|
|
|
|
}
|
|
|
|
end
|
2014-06-29 12:42:15 +00:00
|
|
|
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"]
|
2014-06-24 06:07:59 +00:00
|
|
|
{
|
|
|
|
"roles" => roles,
|
|
|
|
"plugins" => plugin_list,
|
2014-06-29 12:42:15 +00:00
|
|
|
"custom_fields_final" => custom_fields_final,
|
|
|
|
"role_fields_final" => role_fields_final,
|
|
|
|
"member_data" => data,
|
|
|
|
"autobiography_data" => autobiography,
|
|
|
|
"data" => {
|
2014-06-24 06:07:59 +00:00
|
|
|
"img_src" => image,
|
2014-06-29 12:42:15 +00:00
|
|
|
"name" => member.name
|
2014-06-24 06:07:59 +00:00
|
|
|
}
|
|
|
|
}
|
2014-06-18 12:24:26 +00:00
|
|
|
end
|
2014-06-25 05:27:34 +00:00
|
|
|
|
|
|
|
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
|