From d6287177a20f20f36f26b05918e796f040d303cc Mon Sep 17 00:00:00 2001 From: manson Date: Thu, 24 Jul 2014 20:12:35 +0800 Subject: [PATCH] Update member frontend and fix member import missing fields --- app/controllers/admin/import_controller.rb | 190 +++++------------- app/controllers/members_controller.rb | 53 ++++- .../modules/member/index_staff.html.erb | 30 +++ .../modules/member/index_teacher.html.erb | 32 +++ app/views/admin/import/index.html.erb | 2 +- 5 files changed, 162 insertions(+), 145 deletions(-) create mode 100644 app/templates/orbit_bootstrap/modules/member/index_staff.html.erb create mode 100644 app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb diff --git a/app/controllers/admin/import_controller.rb b/app/controllers/admin/import_controller.rb index 8a508ce..8b705cb 100644 --- a/app/controllers/admin/import_controller.rb +++ b/app/controllers/admin/import_controller.rb @@ -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) - 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 = 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 - 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.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"] + 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? - 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 + 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 + 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 - end - + 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? + 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 end end + new_member.save @@import_stats["current_status"] = @@import_stats["current_status"] + 1 write_to_file diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 2605bda..992eadc 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -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,18 +66,55 @@ 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<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) } diff --git a/app/templates/orbit_bootstrap/modules/member/index_staff.html.erb b/app/templates/orbit_bootstrap/modules/member/index_staff.html.erb new file mode 100644 index 0000000..c4d5ea7 --- /dev/null +++ b/app/templates/orbit_bootstrap/modules/member/index_staff.html.erb @@ -0,0 +1,30 @@ +
+
+
+

+ {{role-title}} +

+ +
+
+
+
+ {{name}} +
+
+
+ {{name}} +
+

+ {{job-title}} +

+

{{email}}

+
+
+
+
+ +
+
+
+{{pagination_goes_here}} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb b/app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb new file mode 100644 index 0000000..21ec0c2 --- /dev/null +++ b/app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb @@ -0,0 +1,32 @@ +
+
+
+ +
+

+ {{status-title}} +

+ +
+
+ + + + + + + + + +
+ {{name}} + {{name}}
{{job-title}}
{{discipline}}
{{phone-office}}
{{email}}
+

+
+
+
+ +
+
+
+{{pagination_goes_here}} \ No newline at end of file diff --git a/app/views/admin/import/index.html.erb b/app/views/admin/import/index.html.erb index e70767f..0209c16 100644 --- a/app/views/admin/import/index.html.erb +++ b/app/views/admin/import/index.html.erb @@ -309,7 +309,7 @@ $("#import-progress-text").html("Finished importing Members.
"); $("#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.");