update member import,frontend,structure

member frontend order is hard-coded
This commit is contained in:
manson 2014-07-29 11:18:15 +08:00
parent 58bcf69940
commit 4de07afb2a
8 changed files with 150 additions and 54 deletions

View File

@ -302,6 +302,51 @@ class Admin::ImportController < OrbitAdminController
@@import_stats["current_status"] = 0
@@import_stats["success"] = true
write_to_file
rss2_roles = data["attributes"]
rss2_roles.each do |key,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
next if rss2_role["classes"].blank?
rss2_role["classes"].each do |class_name, rss2_class_list|
if class_name.include? "class1"
rss2_class_list['data'].each do |rss2_option|
status_key = rss2_option["name"]["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_option["name"]["en"],"zh_tw"=>rss2_option["name"]["zh-tw"]})
end
status.save
end
else
key = rss2_class_list["name"]["en"].gsub("/"," ").split(' ').join('_').underscore
field = AttributeField.find_by(key: key, :role=>role) rescue nil
if field.nil?
field = AttributeField.new(key: key, title_translations: {"en"=>rss2_class_list["name"]["en"],"zh_tw"=>rss2_class_list["name"]["zh-tw"]})
field["markup"] = "select"
field.typeB["option_list"] = {}
field.option_list = {}
role.attribute_fields << field
field.save
field = AttributeField.find_by(key: key, :role=>role)
end
index = 0
rss2_class_list['data'].each do |rss2_option|
option = {"en"=>rss2_option["name"]["en"],"zh_tw"=>rss2_option["name"]["zh-tw"]}
field.typeB["option_list"]["#{index}"] = option
field.option_list["#{index}"] = option
index = index+1
end
field.save
end
end
end
members = data["users"]
data_to_send = []
members.each do |member|

View File

@ -239,7 +239,7 @@ class Admin::MembersController < OrbitMemberController
end
def edit_order_list
@members = MemberProfile.order('created_at DESC')
@members = MemberProfile.order(:position=>'asc',:created_at=>'desc')
@type = 'list'
render 'edit_order'
end
@ -262,27 +262,35 @@ class Admin::MembersController < OrbitMemberController
end
def update_order_list
@error = []
if params[:users].present?
params[:users].values.sort.each do |pair|
to_go = pair[0].to_i
if params[:position].present?
params[:position].each do |id, position|
profile = MemberProfile.find(id)
profile.position = position.to_i
profile.save(:validate => false)
end
end
# @error = []
# if params[:users].present?
# params[:users].values.sort.each do |pair|
# to_go = pair[0].to_i
if to_go > 0
member_at_position = MemberProfile.where(position: to_go).first
member = MemberProfile.find(pair[1])
if member_at_position && !(member_at_position == member)
if member.position > member_at_position.position
member.move_above(member_at_position)
else
member.move_below(member_at_position)
end
elsif to_go > MemberProfile.count
member.move_to_bottom
end
end
end
end
@members = MemberProfile.asc(:position)
# if to_go > 0
# member_at_position = MemberProfile.where(position: to_go).first
# member = MemberProfile.find(pair[1])
# if member_at_position && !(member_at_position == member)
# if member.position > member_at_position.position
# member.move_above(member_at_position)
# else
# member.move_below(member_at_position)
# end
# elsif to_go > MemberProfile.count
# member.move_to_bottom
# end
# end
# end
# end
# @members = MemberProfile.asc(:position)
render :nothing=>true
end
def setting_account
@ -296,6 +304,12 @@ class Admin::MembersController < OrbitMemberController
end
end
def get_role_fields
role = Role.find(params[:id])
statuses = role.role_statuses.map{|status| {'key'=>status.key, 'title'=>status.title}}.select{|s| s['key']='part_time'}
render :json=>{"statuses"=>statuses}
end
private
# Use callbacks to share common setup or constraints between actions.

View File

@ -22,14 +22,15 @@ class MembersController < ApplicationController
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 }
status_list << { "status-title" => status.title, "members" => member_profiles } if !member_profiles.blank?
end
else
# Members with status
role_status = RoleStatus.order_by(:title=>"desc").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.each do |status|
member_profiles = get_members_by_status(status, role['id'])
next if member_profiles.blank?
status_list << { "status-title" => status.title, "members" => member_profiles }
end
# Members without status
@ -37,7 +38,8 @@ class MembersController < ApplicationController
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 }
member_profiles = member_profiles.sort_by{|a|[a["job-title-value"],a["name"]] }
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
@ -52,10 +54,10 @@ class MembersController < ApplicationController
def get_members_by_status(status, role_id)
member_profiles = []
status.member_profiles.sort{|a,b|a.position<=>b.position}.each do |profile|
status.member_profiles.each do |profile|
member_profiles<<get_member_data(profile, role_id)
end
return member_profiles
return member_profiles.sort_by{|a|[a['job-title-value'],a["name"]] }
end
def get_member_data(profile, role_id)
@ -79,15 +81,17 @@ class MembersController < ApplicationController
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]
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'],
"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
@ -99,7 +103,9 @@ class MembersController < ApplicationController
"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

View File

@ -143,7 +143,7 @@ class PagesController < ApplicationController
def get_categories
module_app = ModuleApp.find_by_key(params[:module]);
if module_app.key.eql?("member")
roles = Role.all.collect do |role|
roles = Role.order_by(:_id=>'ASC').all.collect do |role|
{
"title" => role.title,
"id" => role.id.to_s,
@ -164,7 +164,7 @@ class PagesController < ApplicationController
end
end
roles = roles.nil? ? [] : roles.sort_by{|status| status['title']}
roles = roles.nil? ? [] : roles
categories = categories.nil? ? [] : categories
if module_app.data_count.nil?
@ -195,14 +195,13 @@ class PagesController < ApplicationController
@categories = @module_app.categories rescue []
@tags = @module_app.tags rescue []
if @module_app.key.eql?("member")
@roles = Role.all.collect do |role|
@roles = Role.order_by(:_id=>'ASC').all.collect do |role|
{
"title" => role.title,
"id" => role.id.to_s,
"status" => RoleStatus.where(:role=>role)
}
end
@roles = @roles.sort_by{|status| status['title']}
else
@roles = []
end

View File

@ -9,14 +9,14 @@
<div class="index-member-list row" data-level="2" data-list="members">
<div class="index-member-item clearfix col-sm-6">
<table class="table-condensed">
<table class="table-condensed" height="165">
<tr>
<td rowspan="5" height="120">
<img src="{{image}}" alt="{{name}}" height="120">
<td rowspan="5" valign="top">
<img src="{{image}}" alt="{{name}}" height="160" height="auto">
</td>
<td><a href="{{link_to_show}}">{{name}}</a></td>
<td>{{job-title}}</td>
</tr>
<tr><td>{{job-title}}</td></tr>
<tr><td><a href="{{link_to_show}}">{{name}}</a></td></tr>
<tr><td>{{discipline}}</td></tr>
<tr><td>{{phone-office}}</td></tr>
<tr><td><a href="mailto:{{email}}">{{email}}</a></td></tr>

View File

@ -1,14 +1,14 @@
<div id="list-view">
<table id="member-list" class="table main-list">
<table id="member-list" class="table main-list table-striped table-hover" style="width: inherit; margin: 0 auto;">
<thead>
<tr class="sort-header">
<th class="gender"></th>
<th class="span2"><a href="#"><%= t(:position) %></a></th>
<th class="span4"><a href="#"><%= t(:name) %></a></th>
<th><a href="#"><%= t(:email) %></a></th>
<th class="span1"><a href="#"><%= t(:position) %></a></th>
<th class="span2"><a href="#"><%= t(:name) %></a></th>
<th class="span2"><a href="#"><%= t(:role) %></a></th>
</tr>
</thead>
<tbody>
<tbody class="sortable">
<% @members.each do |member| %>
<%
case member.sex
@ -20,25 +20,56 @@
member_sex = 'gender-none'
end
%>
<tr id="<%= dom_id member %>">
<tr id="<%= dom_id member %>" class="sortable-member">
<td class="<%= member_sex %>"></td>
<td><%= link_to (member.position + 1), '#', class: 'edit_position', 'data-user-id' => member.id %></td>
<td><%= link_to member.name, admin_member_path(member) %></td>
<td><%= member.email %></td>
<td class="member-position" data-value="<%= member.id %>"><%= member.position+1 %></td>
<td><%= member.name %></td>
<td>
<% member.roles.each do |role| %>
<span class="label label-info"><%= role.title %></span>
<% end %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
<div class="bottomnav clearfix">
<div class="action pull-right">
<%= link_to t(:update_), '#', class: "btn btn-primary pull-right" %>
</div>
</div>
<style type="text/css">
.sortable-placeholder{
}
.sortable-member{
cursor: pointer;
}
</style>
<script>
var position_data = {};
$(function() {
typeMode();
reOrderMembers();
$( ".sortable" ).sortable({
axis: "y",
revert: true,
placeholder: "sortable-placeholder",
stop: function(){
reOrderMembers();
$.post("/admin/members/update_order_list",$.param({position:position_data}),function(data){
console.log(data);
});
}
});
$('.sortable').disableSelection();
});
var reOrderMembers = function(){
var position = 1;
$.each($(".member-position"),function(){
if($(this).text()!=position){
position_data[$(this).attr("data-value")] = position-1;
}
$(this).text(position);
position++;
});
}
</script>

View File

@ -12,7 +12,7 @@
<div class="control-group">
<%= label_tag t(:status), nil, {:func=>"field_label", :for=>"1", :class=>"control-label muted"} %>
<div class="controls">
<% role.role_statuses.where(disable: false).each_with_index do |rrs, i| %>
<% role.role_statuses.where(disable: false).order_by(:id=>'asc').each_with_index do |rrs, i| %>
<label class="checkbox inline">
<%= check_box_tag 'member_profile[role_status_ids][]', rrs.id, @member.role_statuses.include?(rrs) ? true: false, class: "check" %> <%= rrs.title %>
</label>

View File

@ -86,6 +86,7 @@ Orbit::Application.routes.draw do
end
end
get "members/get_role_fields/:id" => "members#get_role_fields", :as => :get_role_fields
get "members/unapproved_members" => "members#unapproved_members"
resources :members do
collection do