Rewrite member frontend, fix I18n.enforce_available_locales, update CKEditor setting

This commit is contained in:
manson 2014-07-31 15:41:28 +08:00
parent 0f4ea70943
commit 69db2e2926
20 changed files with 308 additions and 316 deletions

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -9,6 +9,7 @@ CKEDITOR.editorConfig = function( config ) {
config.height = 400; config.height = 400;
config.resize_minHeight = 400; config.resize_minHeight = 400;
config.toolbarCanCollapse = true; 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'; 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';

View File

@ -148,6 +148,12 @@ var Items = function(){
type : "get", type : "get",
dataType : "json" dataType : "json"
}).done(function(data){ }).done(function(data){
if(this_value=="member"){
$("#member_sort_setting").html("<label class='control-label'><%= I18n.t(:sort) %>:</label><div class='controls'><input checked='checked' id='page_member_sort_position_false' name='page[member_sort_position]' type='radio' value='false'> <%= I18n.t(:sort_by_role_fields) %><br><input id='page_member_sort_position_true' name='page[member_sort_position]' type='radio' value='true'> <%= I18n.t(:sort_manually) %><a href='/admin/members/edit_order_list' target='_blank'> <%= I18n.t(:sort_edit_order) %> </a></div>");
}else{
$("#member_sort_setting").html("");
}
var controlDiv = $("<div class='controls'></div>"); var controlDiv = $("<div class='controls'></div>");
if(data.categories.length){ if(data.categories.length){
categories_list.parent().find("label.control-label").text("<%= I18n.t(:category) %> :"); categories_list.parent().find("label.control-label").text("<%= I18n.t(:category) %> :");

View File

@ -3,6 +3,26 @@ class MembersController < ApplicationController
page_roles = OrbitHelper.page_categories page_roles = OrbitHelper.page_categories
page_role_status = OrbitHelper.page_role_status 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") if page_roles.include?("all")
roles = Role.all.collect do |role| roles = Role.all.collect do |role|
{ "title" => role.title, "id" => role.id } { "title" => role.title, "id" => role.id }
@ -21,7 +41,7 @@ class MembersController < ApplicationController
status_list = [] status_list = []
if !role['status'].blank? if !role['status'].blank?
role['status'].each do |status| 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? status_list << { "status-title" => status.title, "members" => member_profiles } if !member_profiles.blank?
end end
else else
@ -29,21 +49,20 @@ class MembersController < ApplicationController
role_status = RoleStatus.order_by(:id=>"asc").where(:role_id=>role['id']) 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_ids = role_status.collect{|status| status.id.to_s}
role_status.each do |status| 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? next if member_profiles.blank?
status_list << { "status-title" => status.title, "members" => member_profiles } status_list << { "status-title" => status.title, "members" => member_profiles }
end end
# Members without status # Members without status
member_profiles = [] member_profiles = []
MemberProfile.not_in(:role_status_ids.in=>role_status_ids).where(:role_ids.in=>[role['id']]).collect do |profile| 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 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? status_list << { "status-title" => role['title'], "members" => member_profiles } if !member_profiles.blank?
end end
role_list << { "role-title" => role['title'], "status-list" => status_list } role_list << { "role-title" => role['title'], "status-list" => status_list }
end end
{ {
"roles" => role_list, "roles" => role_list,
"extras" => { "extras" => {
@ -52,224 +71,116 @@ class MembersController < ApplicationController
} }
end end
def get_members_by_status(status, role_id) def get_members_by_status(status, sort, fields_to_show)
member_profiles = [] member_profiles = []
status.member_profiles.each do |profile| status.member_profiles.each do |member|
member_profiles<<get_member_data(profile, role_id) member_profiles<<get_member_data(member, fields_to_show)
end end
return member_profiles.sort_by{|a|[a['job-title-value'],a["name"]] } return member_profiles.sort_by{|data| eval(sort)}
end end
def get_member_data(profile, role_id) def get_member_data(member, fields_to_show)
params = OrbitHelper.params image = member.avatar.present? ? member.avatar.thumb.url : ActionController::Base.helpers.asset_path('member-pic.png')
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, 'profile_data'=>member_data(member, fields_to_show),
"email" => profile.email, 'list_order' => member.position,
"image" => profile.avatar.present? ? profile.avatar.thumb.url : "http://placehold.it/100x100", 'name' => member.name,
"link_to_show" => OrbitHelper.url_to_show(profile.to_param) 'image'=>image,
} "link_to_show" => OrbitHelper.url_to_show(member.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?)}
{
"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)
} }
end end
def show def show
params = OrbitHelper.params params = OrbitHelper.params
member = MemberProfile.find_by(uid: params[:uid]) member = MemberProfile.find_by(uid: params[:uid])
plugins = OrbitApp::Plugin::Registration.all rescue nil fields_to_show = [
plugin_list = plugins.collect do |plugin| {"key"=>"job_title", "type"=>"role"},
intro = PersonalPluginIntro.find_by(member_profile_id: member.id, _type: "#{plugin.app_name}Intro") rescue nil {"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"}
]
if intro.nil? profile_data = member_data(member, fields_to_show)
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 plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
pd = plugin_data.collect do |p| pd = plugin_data.collect do |p|
slug_title = ["JournalPaper","WritingConference"].include?(plugin.app_name) ? p.create_link : p.slug_title
{ {
"data_title" => p.slug_title, "data_title" => slug_title,
"link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore) "link_to_show" => OrbitHelper.url_to_plugin_show(p.to_param,plugin.module_app_name.underscore)
} }
end 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 elsif intro.brief_intro == true
pd = [] pd = []
pd << {"data_title" => intro.text.html_safe} pd << {"data_title" => intro.text.html_safe}
end
{ {
"plugin_data" => pd, "plugin_data" => pd,
"plugin_title" => plugin.app_name.titleize "plugin_name" => plugin.module_app_name.underscore,
"plugin_title" => t('module_name.'+plugin.module_app_name.underscore),
"plugin_class" => idx==0 ? "active" : ""
} }
end end
end plugin_list = plugin_list.reject{|plugin| plugin['plugin_data'].blank?}
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, "roles" => roles,
"plugins" => plugin_list, "plugins" => plugin_list,
"custom_fields_final" => custom_fields_final, "profile_data" => profile_data,
"role_fields_final" => role_fields_final,
"member_data" => data,
"autobiography_data" => autobiography,
"data" => { "data" => {
"img_src" => image, "image" => member.avatar.present? ? member.avatar.thumb.url : ActionController::Base.helpers.asset_path('member-pic.png'),
"name" => member.name "name" => member.name
} }
} }
end end
def personal_plugin def member_data(member, fields_to_show)
params = OrbitHelper.params profile_data = []
plugin_class = params[:plugin_name].constantize fields_to_show.each do |field|
plugin_value = plugin_class.find_by(uid: params[:uid]) case field['type']
data = [] when 'profile'
plugin_value.values_for_view.each do |key,value| field_data = member.get_attribute_data(field) rescue {}
data << {"key" => key.humanize, "value" => value} 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 end
{ next if field_data.blank? or field_data['value'].blank?
"plugin_data" => data
} 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'] = "<a href='#{OrbitHelper.url_to_show(member.to_param)}'>#{field_data['value']}</a>"
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
end end

View File

@ -82,6 +82,7 @@ class PagesController < ApplicationController
OrbitHelper.set_page_categories page.categories || [] OrbitHelper.set_page_categories page.categories || []
OrbitHelper.set_page_tags page.tags || [] OrbitHelper.set_page_tags page.tags || []
OrbitHelper.set_page_role_status page.role_status || [] 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 OrbitHelper.set_page_data_count page.data_count
if params[:layout].kind_of?(String) if params[:layout].kind_of?(String)
layout = to_bool(params[:layout]) layout = to_bool(params[:layout])
@ -367,7 +368,7 @@ class PagesController < ApplicationController
page = Page.find(params[:page][:parent_page]) page = Page.find(params[:page][:parent_page])
page.url = page.url == "/" ? "" : page.url page.url = page.url == "/" ? "" : page.url
@url = page.url + "/#{params[:page][:page_id]}" @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 p["url"] = @url
if p["external_url_translations"] if p["external_url_translations"]
p["external_url_translations"]["en"] = p["external_url_translations"]["en"].sub("http://" + request.host_with_port,"") p["external_url_translations"]["en"] = p["external_url_translations"]["en"].sub("http://" + request.host_with_port,"")
@ -377,7 +378,7 @@ class PagesController < ApplicationController
end end
def page_update_params 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["role_status"] = p["role_status"] || []
p["categories"] = p["categories"] || [] p["categories"] = p["categories"] || []
p["enabled_for"] = p["enabled_for"] || [] p["enabled_for"] = p["enabled_for"] || []

View File

@ -15,6 +15,10 @@ module OrbitHelper
@role_status = role_status; @role_status = role_status;
end end
def self.set_member_sort_position(sort_position)
@sort_position = sort_position;
end
def self.set_page_data_count(data_count) def self.set_page_data_count(data_count)
@data_count = data_count @data_count = data_count
end end
@ -46,6 +50,10 @@ module OrbitHelper
@role_status @role_status
end end
def self.member_sort_position
@sort_position
end
def self.page_for_tag(tag) def self.page_for_tag(tag)
page_for_tag = nil page_for_tag = nil
pages = Page.where(:module => @module_app.key) pages = Page.where(:module => @module_app.key)

View File

@ -44,6 +44,47 @@ class AttributeValue
self[:temp_data] = value self[:temp_data] = value
end 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/) ? "<a href='#{field_value}' target='blank'>#{field_value}</a>" : field_value
field_value = (field_value =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "<a href='mailto:#{field_value}'>#{field_value}</a>" : 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) def get_value_by_locale(locale,add_more_index=nil)
case self.attribute_field.markup case self.attribute_field.markup

View File

@ -123,16 +123,12 @@ class MemberProfile
member_data_tmp = member_data.collect {|v| v[1] } member_data_tmp = member_data.collect {|v| v[1] }
end end
def values_for_show def get_attribute_data(field)
attribute_values = self.attributes.select{|k,v| v if (k.in?(["office_tel","sid","email"]) && v.present?)} data = self.send(field["key"]) rescue ""
name_fields = {"name" => self.name} data = (data =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "<a href='#{data}' target='blank'>#{data}</a>" : data
data = (data =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "<a href='mailto:#{data}'>#{data}</a>" : data
if self.sex.present? field_data = data.blank? ? {} : {"key" => field["key"],"title" => I18n.t("users."+field["key"]), "value" =>data}
gender_fields = {"gender" => self.sex} field_data
end
values = [attribute_values, name_fields, gender_fields].delete_if(&:nil?)
values.inject(&:merge)
end end
def get_image_for_show def get_image_for_show
@ -145,14 +141,6 @@ class MemberProfile
image_fields = {"img_src" => image} image_fields = {"img_src" => image}
end 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 def delete_personal_plugin_data
OrbitApp::Plugin::Registration.all.each do |plugin| OrbitApp::Plugin::Registration.all.each do |plugin|
class_name = plugin.app_name.constantize class_name = plugin.app_name.constantize

View File

@ -122,11 +122,45 @@ class MemberProfileFieldValue
return @attribute_field_value return @attribute_field_value
end 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/) ? "<a href='#{field_value}' target='blank'>#{field_value}</a>" : field_value
field_value = (field_value =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "<a href='mailto:#{field_value}'>#{field_value}</a>" : 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 protected
def unset_all_lang_values # def unset_all_lang_values
VALID_LOCALES.each{|t| self.unset t} # VALID_LOCALES.each{|t| self.unset t}
end # end
def data_proc def data_proc
unless self[:temp_data].nil? unless self[:temp_data].nil?

View File

@ -18,6 +18,7 @@ class Page
field :categories, type: Array, :default => [] field :categories, type: Array, :default => []
field :tags, type: Array, :default => [] field :tags, type: Array, :default => []
field :role_status, 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 :enabled_for_sitemap, type: Array, :default => []
field :rss2_id, type: String field :rss2_id, type: String

View File

@ -1,34 +1,28 @@
<div class="index-member index1"> <div class="index-member index1">
<h3 class="index-title">
<span>{{widget-title}}</span>
</h3>
<div class="index-member-group" data-list="roles" data-level="0"> <div class="index-member-group" data-list="roles" data-level="0">
<div class="index-member-group-item"> <div class="index-member-group-item">
<div class="index-member-group-title">
<h4>{{role-title}}</h4>
</div>
<div class="index-member-status" data-level="1" data-list="status-list"> <div class="index-member-status" data-level="1" data-list="status-list">
<div class="index-member-status-title">
<h4>{{status-title}}</h4> <h3 class="index-title">
</div> <span>{{status-title}}</span>
</h3>
<div class="index-member-list row" data-level="2" data-list="members"> <div class="index-member-list row" data-level="2" data-list="members">
<div class="index-member-item clearfix col-sm-6"> <div class="index-member-item clearfix col-sm-6 row" style="font-size: 8px; min-height:180px;">
<div class="index-member-avatar pull-left"> <div class="col-sm-4">
<img class="img-circle" src="{{image}}" alt=""> <a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
</div> </div>
<div class="index-member-info"> <div class="col-sm-8">
<h5 class="index-member-name"> <table class="table table-condensed">
<a href="{{link_to_show}}">{{name}}</a> <tbody data-list="profile_data" data-level="3">
</h5> <tr><th class="{{title_class}}" style="min-width:70px;">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
<p data-level="2" data-list="roles"> </tbody>
<span class="index-member-role">{{role-title}}</span> </table>
</p>
<p class="index-member-mail">{{email}}</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,27 +1,28 @@
<div class="index-member index1"> <div class="index-member index1">
<div class="index-member-group" data-list="roles" data-level="0"> <div class="index-member-group" data-list="roles" data-level="0">
<div class="index-member-group-item"> <div class="index-member-group-item">
<h3 class="index-title">
<span>{{role-title}}</span>
</h3>
<div class="index-member-status" data-level="1" data-list="status-list"> <div class="index-member-status" data-level="1" data-list="status-list">
<h3 class="index-title">
<span>{{status-title}}</span>
</h3>
<div class="index-member-list row" data-level="2" data-list="members"> <div class="index-member-list row" data-level="2" data-list="members">
<div class="index-member-item clearfix col-sm-6"> <div class="index-member-item clearfix col-sm-6 row" style="font-size: 8px; min-height:180px;">
<div class="index-member-avatar pull-left"> <div class="col-sm-4">
<img src="{{image}}" alt="{{name}}" height="80"> <a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
</div> </div>
<div class="index-member-info"> <div class="col-sm-8">
<h5 class="index-member-name"> <table class="table table-condensed">
<a href="{{link_to_show}}">{{name}}</a> <tbody data-list="profile_data" data-level="3">
</h5> <tr><th class="{{title_class}}" style="min-width:70px;">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
<p data-level="3" data-list="roles"> </tbody>
<span class="index-member-job-title">{{job-title}}</span> </table>
</p>
<p class="index-member-mail">{{email}}</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -3,30 +3,29 @@
<div class="index-member-group-item"> <div class="index-member-group-item">
<div class="index-member-status" data-level="1" data-list="status-list"> <div class="index-member-status" data-level="1" data-list="status-list">
<h3 class="index-title"> <h3 class="index-title">
<span>{{status-title}}</span> <span>{{status-title}}</span>
</h3> </h3>
<div class="index-member-list row" data-level="2" data-list="members"> <div class="index-member-list row" data-level="2" data-list="members">
<div class="index-member-item clearfix col-sm-6"> <div class="index-member-item clearfix col-sm-6 row" style="font-size: 8px; min-height:180px;">
<table class="table-condensed" height="165"> <div class="col-sm-4">
<tr> <a href="{{link_to_show}}"><img class="member-pic" src="{{image}}" alt="{{name}}" title="{{name}}" width="100%"></a>
<td rowspan="5" valign="top"> </div>
<img src="{{image}}" alt="{{name}}" height="160" height="auto"> <div class="col-sm-8">
</td> <table class="table table-condensed">
<td>{{job-title}}</td> <tbody data-list="profile_data" data-level="3">
</tr> <tr><th class="{{title_class}}" style="min-width:70px;">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
<tr><td><a href="{{link_to_show}}">{{name}}</a></td></tr> </tbody>
<tr><td>{{discipline}}</td></tr>
<tr><td>{{phone-office}}</td></tr>
<tr><td><a href="mailto:{{email}}">{{email}}</a></td></tr>
</table> </table>
<br/><br/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
</div> </div>
</div> </div>
{{pagination_goes_here}} {{pagination_goes_here}}

View File

@ -1,40 +1,28 @@
<article class="show" module="member"> <div class="show" module="member">
<div class="post-name"> <div class="row">
<h1>{{name}}</h1> <div class="member-pic col-md-3">
<img src="{{image}}" alt="{{name}}" title="{{name}}" width="100%">
</div> </div>
<div class="member-data col-md-9">
<small> <table class="table table-striped">
<span> <div data-list="profile_data" data-level="0">
Roles : <tr><th class="{{title_class}}" width="30%">{{title}}</th><td class="{{value_class}}">{{value}}</td></tr>
<span data-list="roles" data-level="0">
<a href="#"><span class="label label-info">{{role}}</span></a>
</span>
</span>
</small>
<div data-list="role_fields_final" data-level="0">
<p>{{role_field_title}} : {{role_field_value}}</p>
</div> </div>
</table>
<div data-list="member_data" data-level="0">
<p>{{key}} : {{value}}</p>
</div> </div>
<div data-list="custom_fields_final" data-level="0">
<p>{{custom_field_title}} : {{custom_field_value}}</p>
</div> </div>
<section class="post"> <br/>
<p class="pic"><img src="{{img_src}}" alt=""></p> <ul class="nav nav-pills" role="tablist" data-list="plugins" data-level="0">
<div data-list="autobiography_data" data-level="0"> <li class="{{plugin_class}}"><a href="#{{plugin_name}}" role="tab" data-toggle="tab">{{plugin_title}}</a></li>
<h3>{{key}}:</h3>
<p>{{value}}</p>
</div>
</section>
<div data-list="plugins" data-level="0">
<ul>
<li>{{plugin_title}} : <div data-list="plugin_data" data-level="1"><ul><li><a href="{{link_to_show}}">{{data_title}}</a></li></ul></div></li>
</ul> </ul>
<br/>
<div class="tab-content" data-list="plugins" data-level="0">
<div class="tab-pane {{plugin_class}}" id="{{plugin_name}}">
<table class="table table-hover table-striped">
<tbody data-list="plugin_data" data-level="1">
<tr><td><a href="{{link_to_show}}">{{data_title}}</a></td></tr>
</tbody>
</table>
</div>
</div>
</div> </div>
</article>

View File

@ -3,7 +3,7 @@
<thead> <thead>
<tr class="sort-header"> <tr class="sort-header">
<th class="gender"></th> <th class="gender"></th>
<th class="span1"><a href="#"><%= t(:position) %></a></th> <th class="span1"><a href="#"><%= t(:sort_number) %></a></th>
<th class="span2"><a href="#"><%= t(:name) %></a></th> <th class="span2"><a href="#"><%= t(:name) %></a></th>
<th class="span2"><a href="#"><%= t(:role) %></a></th> <th class="span2"><a href="#"><%= t(:role) %></a></th>
</tr> </tr>

View File

@ -25,6 +25,18 @@
<%= f.hidden_field :page_type, value: "page" %> <%= f.hidden_field :page_type, value: "page" %>
</div> </div>
</div> </div>
<div class="control-group" id="member_sort_setting">
<% if @module_app and @module_app.key.eql?("member") %>
<label class="control-label"><%= t(:sort) %>:</label>
<div class="controls">
<%= f.radio_button :member_sort_position, false, checked: !@page.member_sort_position? %> <%= t(:sort_by_role_fields) %><br/>
<%= f.radio_button :member_sort_position, true, checked: @page.member_sort_position?%> <%= t(:sort_manually) %>
<a href="/admin/members/edit_order_list" target="_blank"> <%= t(:sort_edit_order) %> </a>
</div>
<% end %>
</div>
<div class="control-group"> <div class="control-group">
<label class="control-label"><%= t(:category)+" :" if params[:action] == "edit" && !@categories.blank? %></label> <label class="control-label"><%= t(:category)+" :" if params[:action] == "edit" && !@categories.blank? %></label>
<div id="categories_list"> <div id="categories_list">

View File

@ -23,8 +23,9 @@ module Orbit
I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')] I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')]
# set default locale to something other than :en # set default locale to something other than :en
I18n.default_locale = :en config.i18n.enforce_available_locales = false
I18n.available_locales = [:en, :zh_tw] config.i18n.default_locale = :en
config.i18n.available_locales = [:en, :zh_tw]
config.autoload_paths += %W(#{config.root}/lib) config.autoload_paths += %W(#{config.root}/lib)

View File

@ -648,6 +648,7 @@ en:
sid: ID No. sid: ID No.
sid_note: Faculty ID No. or Student ID No. sid_note: Faculty ID No. or Student ID No.
sex: Gender sex: Gender
gender: Gender
user_id: User Account user_id: User Account
user_id_note: Should be more than 3 characters and less than 50 characters user_id_note: Should be more than 3 characters and less than 50 characters
user_id_not_null: User account cannot be null user_id_not_null: User account cannot be null

View File

@ -630,11 +630,12 @@ zh_tw:
female: 女性 female: 女性
unknown: 未知 unknown: 未知
last_name: 姓氏 last_name: 姓氏
office_tel: 辦公室電話 office_tel: 聯絡電話
office_tel_note: 將公開於網頁 office_tel_note: 將公開於網頁
sid: 編號 sid: 編號
sid_note: 教職員工編號或學生學號 sid_note: 教職員工編號或學生學號
sex: 性別 sex: 性別
gender: 性別
user_id: 使用者帳號 user_id: 使用者帳號
user_id_note: 需介於3個字元至50個字元之間 user_id_note: 需介於3個字元至50個字元之間
user_id_not_null: 使用者帳號不能是空值 user_id_not_null: 使用者帳號不能是空值
@ -657,3 +658,7 @@ zh_tw:
visitors_today: 今日造訪人次 visitors_today: 今日造訪人次
yes_: "是" yes_: "是"
sort_number: 排序數 sort_number: 排序數
sort: 排序
sort_edit_order: 編輯排序
sort_manually: 手動排序
sort_by_role_fields: 依照身份欄位