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 role_status = RoleStatus.order_by(:title=>"desc").where(:role_id=>role['id']) role_status_ids = role_status.collect{|status| status.id.to_s} role_status.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.not_in(:role_status_ids.in=>role_status_ids).where(:role_ids.in=>[role['id']]).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<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) } end def show params = OrbitHelper.params member = MemberProfile.find_by(uid: params[:uid]) plugins = OrbitApp::Plugin::Registration.all rescue nil plugin_list = plugins.collect do |plugin| 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, "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 plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil pd = plugin_data.collect do |p| { "data_title" => p.slug_title, "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 } # end elsif intro.brief_intro == true pd = [] pd << {"data_title" => intro.text.html_safe} { "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 } } 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 end