diff --git a/app/assets/images/menber-pic.png b/app/assets/images/member-pic.png similarity index 100% rename from app/assets/images/menber-pic.png rename to app/assets/images/member-pic.png diff --git a/app/assets/javascripts/ckeditor/config.js.erb b/app/assets/javascripts/ckeditor/config.js.erb index 3623438..06c2ec9 100644 --- a/app/assets/javascripts/ckeditor/config.js.erb +++ b/app/assets/javascripts/ckeditor/config.js.erb @@ -9,6 +9,7 @@ CKEDITOR.editorConfig = function( config ) { config.height = 400; config.resize_minHeight = 400; config.toolbarCanCollapse = true; + config.allowedContent = true; config.plugins = 'dialogui,dialog,about,a11yhelp,dialogadvtab,basicstyles,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,colordialog,templates,menu,contextmenu,resize,toolbar,elementspath,enterkey,entities,popup,filebrowser,find,image,fakeobjects,floatingspace,listblock,richcombo,font,format,horizontalrule,htmlwriter,iframe,wysiwygarea,indent,indentblock,indentlist,justify,menubutton,link,list,liststyle,magicline,maximize,newpage,pastetext,pastefromword,removeformat,selectall,showblocks,showborders,sourcearea,specialchar,scayt,stylescombo,tab,table,tabletools,undo,wsc,youtube,codemirror'; diff --git a/app/assets/javascripts/lib/items/items.js.erb b/app/assets/javascripts/lib/items/items.js.erb index 7ac8c8d..ba852a3 100755 --- a/app/assets/javascripts/lib/items/items.js.erb +++ b/app/assets/javascripts/lib/items/items.js.erb @@ -148,6 +148,12 @@ var Items = function(){ type : "get", dataType : "json" }).done(function(data){ + if(this_value=="member"){ + $("#member_sort_setting").html("
<%= I18n.t(:sort_by_role_fields) %>
<%= I18n.t(:sort_manually) %> <%= I18n.t(:sort_edit_order) %>
"); + }else{ + $("#member_sort_setting").html(""); + } + var controlDiv = $("
"); if(data.categories.length){ categories_list.parent().find("label.control-label").text("<%= I18n.t(:category) %> :"); diff --git a/app/assets/javascripts/jquery.cycle2.js.map b/app/assets/javascripts/plugin/jquery.cycle2.js.map similarity index 100% rename from app/assets/javascripts/jquery.cycle2.js.map rename to app/assets/javascripts/plugin/jquery.cycle2.js.map diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 4ce0fb1..bc07ad0 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -3,6 +3,26 @@ class MembersController < ApplicationController page_roles = OrbitHelper.page_categories page_role_status = OrbitHelper.page_role_status + fields_to_show = [ + {"key"=>"job_title", "type"=>"role","sort_order"=>1}, + {"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| { "title" => role.title, "id" => role.id } @@ -21,7 +41,7 @@ class MembersController < ApplicationController status_list = [] if !role['status'].blank? role['status'].each do |status| - member_profiles = get_members_by_status(status, role['id']) + member_profiles = get_members_by_status(status, sort, fields_to_show) status_list << { "status-title" => status.title, "members" => member_profiles } if !member_profiles.blank? end else @@ -29,21 +49,20 @@ class MembersController < ApplicationController role_status = RoleStatus.order_by(:id=>"asc").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']) + member_profiles = get_members_by_status(status, sort, fields_to_show) next if member_profiles.blank? 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']) + member_profiles << get_member_data(profile, fields_to_show) end - member_profiles = member_profiles.sort_by{|a|[a["job-title-value"],a["name"]] } + member_profiles = member_profiles.sort_by{|data| eval(sort)} status_list << { "status-title" => role['title'], "members" => member_profiles } if !member_profiles.blank? end role_list << { "role-title" => role['title'], "status-list" => status_list } end - { "roles" => role_list, "extras" => { @@ -52,224 +71,116 @@ class MembersController < ApplicationController } end - def get_members_by_status(status, role_id) + def get_members_by_status(status, sort, fields_to_show) member_profiles = [] - status.member_profiles.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][0..16]+'...' rescue "" - phone_office = profile.attributes.select{|k,v| v if (k.eql?("office_tel") && v.present?)} + def get_member_data(member, fields_to_show) + image = member.avatar.present? ? member.avatar.thumb.url : ActionController::Base.helpers.asset_path('member-pic.png') { - "name"=>profile.name, - "email" => profile.email, - "job-title" => job_title, - "job-title-value" => (job_title_value.value.to_s rescue ""), - "discipline" => discipline, - "phone-office" => (phone_office['office_tel'] rescue ""), - "image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100", - "position" => profile.position, - "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, - "job-title-value" => (job_title_value.value.to_s rescue ""), - "image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100", - "position" => profile.position, - "link_to_show" => OrbitHelper.url_to_show(profile.to_param) + '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) } end def show - params = OrbitHelper.params + params = OrbitHelper.params + member = MemberProfile.find_by(uid: params[:uid]) - member = MemberProfile.find_by(uid: params[:uid]) + fields_to_show = [ + {"key"=>"job_title", "type"=>"role"}, + {"key"=>"name", "type"=>"profile"}, + {"key"=>"office_tel", "type"=>"profile"}, + {"key"=>"fax", "type"=>"custom"}, + {"key"=>"email", "type"=>"profile"}, + {"key"=>"discipline", "type"=>"role"}, + {"key"=>"research_expertise", "type"=>"role"}, + {"key"=>"reference_website_of_individual_publication", "type"=>"role"}, + {"key"=>"reference_website_of_individual_research", "type"=>"role"}, + {"key"=>"autobiography", "type"=>"profile"}, + {"key"=>"website", "type"=>"custom"}, + {"key"=>"experience", "type"=>"custom"}, + {"key"=>"mobile", "type"=>"custom"} + ] - 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 + profile_data = member_data(member, fields_to_show) - 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 + roles = member.roles.collect{|role| {"role" => role.title} } + + plugins = OrbitApp::Plugin::Registration.all rescue nil + plugin_list = plugins.collect.with_index do |plugin, idx| + intro = PersonalPluginIntro.find_by(member_profile_id: member.id, _type: "#{plugin.app_name}Intro") rescue nil + 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 + elsif intro.brief_intro == true pd = [] pd << {"data_title" => intro.text.html_safe} - { - "plugin_data" => pd, - "plugin_title" => plugin.app_name.titleize - } - end - 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?) + "plugin_data" => pd, + "plugin_name" => plugin.module_app_name.underscore, + "plugin_title" => t('module_name.'+plugin.module_app_name.underscore), + "plugin_class" => idx==0 ? "active" : "" + } + end + plugin_list = plugin_list.reject{|plugin| plugin['plugin_data'].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, + { + "roles" => roles, + "plugins" => plugin_list, + "profile_data" => profile_data, "data" => { - "img_src" => image, + "image" => member.avatar.present? ? member.avatar.thumb.url : ActionController::Base.helpers.asset_path('member-pic.png'), "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 + + 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' + field_data = member.member_profile_field_values.find_by(:key=>field['key']).get_field_value rescue {} + when 'role' + field_data = member.attribute_values.find_by(:key=>field['key']).get_field_value rescue {} + end + next if field_data.blank? or field_data['value'].blank? + + if field['sort_order'] + field_data['sort_value'] = field_data['val'].blank? ? field_data['value'] : field_data['val'] + end + + if field['link_to_show'] + field_data['value'] = "#{field_data['value']}" + 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 end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 1665cd6..1d8f0a5 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -82,6 +82,7 @@ class PagesController < ApplicationController OrbitHelper.set_page_categories page.categories || [] OrbitHelper.set_page_tags page.tags || [] OrbitHelper.set_page_role_status page.role_status || [] + OrbitHelper.set_member_sort_position page.member_sort_position OrbitHelper.set_page_data_count page.data_count if params[:layout].kind_of?(String) layout = to_bool(params[:layout]) @@ -367,7 +368,7 @@ class PagesController < ApplicationController page = Page.find(params[:page][:parent_page]) page.url = page.url == "/" ? "" : page.url @url = page.url + "/#{params[:page][:page_id]}" - p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: [:en, :zh_tw],external_url_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, :member_sort_position, enabled_for_sitemap: [], enabled_for: [], menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: [:en, :zh_tw],external_url_translations: [:en, :zh_tw]) p["url"] = @url if p["external_url_translations"] p["external_url_translations"]["en"] = p["external_url_translations"]["en"].sub("http://" + request.host_with_port,"") @@ -377,7 +378,7 @@ class PagesController < ApplicationController end def page_update_params - p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: [:en, :zh_tw], external_url_translations: [:en, :zh_tw]) + p = params.require(:page).permit(:number, :page_type, :page_id, :module, :layout, :parent_page, :data_count, :enabled_for_mobile, :member_sort_position, enabled_for_sitemap: [], enabled_for: [],menu_enabled_for: [], categories: [], tags: [], role_status: [], name_translations: [:en, :zh_tw], external_url_translations: [:en, :zh_tw]) p["role_status"] = p["role_status"] || [] p["categories"] = p["categories"] || [] p["enabled_for"] = p["enabled_for"] || [] diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index 96f5def..7e0c00d 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -15,6 +15,10 @@ module OrbitHelper @role_status = role_status; end + def self.set_member_sort_position(sort_position) + @sort_position = sort_position; + end + def self.set_page_data_count(data_count) @data_count = data_count end @@ -46,6 +50,10 @@ module OrbitHelper @role_status end + def self.member_sort_position + @sort_position + end + def self.page_for_tag(tag) page_for_tag = nil pages = Page.where(:module => @module_app.key) diff --git a/app/models/attribute_value.rb b/app/models/attribute_value.rb index ff67d2d..0cb6e61 100644 --- a/app/models/attribute_value.rb +++ b/app/models/attribute_value.rb @@ -44,6 +44,47 @@ class AttributeValue self[:temp_data] = value end + def get_field_value + if (self.attribute_field.markup.eql?("text_field") || self.attribute_field.markup.eql?("text_area")) + field_value = self.value[I18n.locale] + elsif (self.attribute_field.markup.eql?("select") || self.attribute_field.markup.eql?("radio_button")) + field_value = self.attribute_field.markup_value["#{self.value}"][I18n.locale] rescue nil + elsif self.attribute_field.markup.eql?("address") + field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ') + elsif self.attribute_field.markup.eql?("date") + case self.attribute_field.typeC['format'] + when 'format1' + field_value = self.value.to_date.strftime("%Y/%m/%d") + when 'format2' + field_value = self.value.to_date.strftime("%Y/%m/%d") + when 'format3' + field_value = self.value.to_date.strftime("%Y/%m") + when 'format4' + field_value = self.value.to_date.strftime("%Y") + end + elsif self.attribute_field.markup.eql?("checkbox") + field_value = self.value.map {|v| self.attribute_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil + end + + field_value = (field_value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "#{field_value}" : field_value + field_value = (field_value =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "#{field_value}" : field_value + + if !field_value.blank? + { + "key" => self.attribute_field.key, + "title" => self.attribute_field.title, + "value" => field_value, + "val" => field_value = self.value + } + else + { + "key" => self.attribute_field.key, + "title" => self.attribute_field.title, + "value" => "", + "val" => field_value = self.value + } + end + end def get_value_by_locale(locale,add_more_index=nil) case self.attribute_field.markup diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb index f5d5026..9de02e4 100644 --- a/app/models/member_profile.rb +++ b/app/models/member_profile.rb @@ -123,16 +123,12 @@ class MemberProfile member_data_tmp = member_data.collect {|v| v[1] } end - def values_for_show - attribute_values = self.attributes.select{|k,v| v if (k.in?(["office_tel","sid","email"]) && v.present?)} - name_fields = {"name" => self.name} - - if self.sex.present? - gender_fields = {"gender" => self.sex} - end - - values = [attribute_values, name_fields, gender_fields].delete_if(&:nil?) - values.inject(&:merge) + def get_attribute_data(field) + data = self.send(field["key"]) rescue "" + data = (data =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "#{data}" : data + data = (data =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "#{data}" : data + field_data = data.blank? ? {} : {"key" => field["key"],"title" => I18n.t("users."+field["key"]), "value" =>data} + field_data end def get_image_for_show @@ -145,14 +141,6 @@ class MemberProfile image_fields = {"img_src" => image} end - def get_autobiography_for_show - if autobiography.present? - autobiography = {"autobiography" => self.attributes["autobiography"][I18n.locale]} - else - autobiography = {} - end - end - def delete_personal_plugin_data OrbitApp::Plugin::Registration.all.each do |plugin| class_name = plugin.app_name.constantize diff --git a/app/models/member_profile_field_value.rb b/app/models/member_profile_field_value.rb index 32324c2..5e5874f 100644 --- a/app/models/member_profile_field_value.rb +++ b/app/models/member_profile_field_value.rb @@ -122,11 +122,45 @@ class MemberProfileFieldValue return @attribute_field_value end + def get_field_value + if (self.member_profile_field.markup.eql?("text_field") || self.member_profile_field.markup.eql?("text_area")) + field_value = self.value[I18n.locale] + elsif (self.member_profile_field.markup.eql?("select") || self.member_profile_field.markup.eql?("radio_button")) + field_value = self.member_profile_field.markup_value["#{self.value}"][I18n.locale] rescue nil + elsif self.member_profile_field.markup.eql?("address") + field_value = cf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ') + elsif self.member_profile_field.markup.eql?("date") + + case self.member_profile_field.typeC['format'] + when 'format1' + field_value = self.value.to_date.strftime("%Y/%m/%d") + when 'format2' + field_value = self.value.to_date.strftime("%Y/%m/%d") + when 'format3' + field_value = self.value.to_date.strftime("%Y/%m") + when 'format4' + field_value = self.value.to_date.strftime("%Y") + end + elsif self.member_profile_field.markup.eql?("checkbox") + field_value = self.value.map {|v| self.member_profile_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil + end + + field_value = (field_value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "#{field_value}" : field_value + field_value = (field_value =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "#{field_value}" : field_value + + { + "key" => self.member_profile_field.key, + "title" => self.member_profile_field.title, + "value" => (field_value.blank? ? "" : field_value), + "val" => field_value = self.value + } + end + protected -def unset_all_lang_values - VALID_LOCALES.each{|t| self.unset t} - end + # def unset_all_lang_values + # VALID_LOCALES.each{|t| self.unset t} + # end def data_proc unless self[:temp_data].nil? diff --git a/app/models/page.rb b/app/models/page.rb index b33cb7f..964b34e 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -18,6 +18,7 @@ class Page field :categories, type: Array, :default => [] field :tags, type: Array, :default => [] field :role_status, type: Array, :default => [] + field :member_sort_position, type: Boolean, :default => false field :enabled_for_sitemap, type: Array, :default => [] field :rss2_id, type: String diff --git a/app/templates/orbit_bootstrap/modules/member/index.html.erb b/app/templates/orbit_bootstrap/modules/member/index.html.erb index 24d52ba..0ede1de 100644 --- a/app/templates/orbit_bootstrap/modules/member/index.html.erb +++ b/app/templates/orbit_bootstrap/modules/member/index.html.erb @@ -1,34 +1,28 @@
-

- {{widget-title}} -

-
-

{{role-title}}

-
-
-

{{status-title}}

-
+ +

+ {{status-title}} +

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

- {{role-title}} -

-

{{email}}

+
+ + + + +
{{title}}{{value}}
+
diff --git a/app/templates/orbit_bootstrap/modules/member/index_staff.html.erb b/app/templates/orbit_bootstrap/modules/member/index_staff.html.erb index c4d5ea7..0ede1de 100644 --- a/app/templates/orbit_bootstrap/modules/member/index_staff.html.erb +++ b/app/templates/orbit_bootstrap/modules/member/index_staff.html.erb @@ -1,27 +1,28 @@
-

- {{role-title}} -

+ +

+ {{status-title}} +

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

- {{job-title}} -

-

{{email}}

+
+ + + + +
{{title}}{{value}}
+
diff --git a/app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb b/app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb index d70e011..0ede1de 100644 --- a/app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb +++ b/app/templates/orbit_bootstrap/modules/member/index_teacher.html.erb @@ -3,27 +3,26 @@
+

{{status-title}}

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

+
+
+ {{name}} +
+
+ + + + +
{{title}}{{value}}
+
+
diff --git a/app/templates/orbit_bootstrap/modules/member/show.html.erb b/app/templates/orbit_bootstrap/modules/member/show.html.erb index 8276624..df04c1f 100644 --- a/app/templates/orbit_bootstrap/modules/member/show.html.erb +++ b/app/templates/orbit_bootstrap/modules/member/show.html.erb @@ -1,40 +1,28 @@ -
-
-

{{name}}

+
+
+
+ {{name}} +
+
+ +
+
+ +
{{title}}{{value}}
+
- - - - Roles : - - {{role}} - - - -
-

{{role_field_title}} : {{role_field_value}}

-
- -
-

{{key}} : {{value}}

-
- -
-

{{custom_field_title}} : {{custom_field_value}}

-
-
-

-
-

{{key}}:

-

{{value}}

+
+ +
+
+
+ + + + +
{{data_title}}
+
-
- -
- -
- - -
\ No newline at end of file +
\ No newline at end of file diff --git a/app/views/admin/members/_edit_order_list.html.erb b/app/views/admin/members/_edit_order_list.html.erb index 0fe3d01..08d33b8 100644 --- a/app/views/admin/members/_edit_order_list.html.erb +++ b/app/views/admin/members/_edit_order_list.html.erb @@ -3,7 +3,7 @@ - <%= t(:position) %> + <%= t(:sort_number) %> <%= t(:name) %> <%= t(:role) %> diff --git a/app/views/pages/_form.html.erb b/app/views/pages/_form.html.erb index f00425b..d2c0b34 100644 --- a/app/views/pages/_form.html.erb +++ b/app/views/pages/_form.html.erb @@ -25,6 +25,18 @@ <%= f.hidden_field :page_type, value: "page" %>
+ +
+ <% if @module_app and @module_app.key.eql?("member") %> + +
+ <%= f.radio_button :member_sort_position, false, checked: !@page.member_sort_position? %> <%= t(:sort_by_role_fields) %>
+ <%= f.radio_button :member_sort_position, true, checked: @page.member_sort_position?%> <%= t(:sort_manually) %> + <%= t(:sort_edit_order) %> +
+ <% end %> +
+
diff --git a/config/application.rb b/config/application.rb index 44d2141..126131f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -23,8 +23,9 @@ module Orbit I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')] # set default locale to something other than :en - I18n.default_locale = :en - I18n.available_locales = [:en, :zh_tw] + config.i18n.enforce_available_locales = false + config.i18n.default_locale = :en + config.i18n.available_locales = [:en, :zh_tw] config.autoload_paths += %W(#{config.root}/lib) diff --git a/config/locales/en.yml b/config/locales/en.yml index 5b3c941..9e6e6df 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -648,6 +648,7 @@ en: sid: ID No. sid_note: Faculty ID No. or Student ID No. sex: Gender + gender: Gender user_id: User Account user_id_note: Should be more than 3 characters and less than 50 characters user_id_not_null: User account cannot be null diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index e808994..71e57b8 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -630,11 +630,12 @@ zh_tw: female: 女性 unknown: 未知 last_name: 姓氏 - office_tel: 辦公室電話 + office_tel: 聯絡電話 office_tel_note: 將公開於網頁 sid: 編號 sid_note: 教職員工編號或學生學號 sex: 性別 + gender: 性別 user_id: 使用者帳號 user_id_note: 需介於3個字元至50個字元之間 user_id_not_null: 使用者帳號不能是空值 @@ -657,3 +658,7 @@ zh_tw: visitors_today: 今日造訪人次 yes_: "是" sort_number: 排序數 + sort: 排序 + sort_edit_order: 編輯排序 + sort_manually: 手動排序 + sort_by_role_fields: 依照身份欄位