forked from saurabh/orbit4-5
update member import,frontend,structure
member frontend order is hard-coded
This commit is contained in:
parent
58bcf69940
commit
4de07afb2a
|
@ -302,6 +302,51 @@ class Admin::ImportController < OrbitAdminController
|
||||||
@@import_stats["current_status"] = 0
|
@@import_stats["current_status"] = 0
|
||||||
@@import_stats["success"] = true
|
@@import_stats["success"] = true
|
||||||
write_to_file
|
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"]
|
members = data["users"]
|
||||||
data_to_send = []
|
data_to_send = []
|
||||||
members.each do |member|
|
members.each do |member|
|
||||||
|
|
|
@ -239,7 +239,7 @@ class Admin::MembersController < OrbitMemberController
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit_order_list
|
def edit_order_list
|
||||||
@members = MemberProfile.order('created_at DESC')
|
@members = MemberProfile.order(:position=>'asc',:created_at=>'desc')
|
||||||
@type = 'list'
|
@type = 'list'
|
||||||
render 'edit_order'
|
render 'edit_order'
|
||||||
end
|
end
|
||||||
|
@ -262,27 +262,35 @@ class Admin::MembersController < OrbitMemberController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_order_list
|
def update_order_list
|
||||||
@error = []
|
if params[:position].present?
|
||||||
if params[:users].present?
|
params[:position].each do |id, position|
|
||||||
params[:users].values.sort.each do |pair|
|
profile = MemberProfile.find(id)
|
||||||
to_go = pair[0].to_i
|
profile.position = position.to_i
|
||||||
|
profile.save(:validate => false)
|
||||||
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
|
||||||
end
|
end
|
||||||
@members = MemberProfile.asc(:position)
|
# @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)
|
||||||
|
render :nothing=>true
|
||||||
end
|
end
|
||||||
|
|
||||||
def setting_account
|
def setting_account
|
||||||
|
@ -296,6 +304,12 @@ class Admin::MembersController < OrbitMemberController
|
||||||
end
|
end
|
||||||
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
|
private
|
||||||
|
|
||||||
# Use callbacks to share common setup or constraints between actions.
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
|
|
|
@ -22,14 +22,15 @@ class MembersController < ApplicationController
|
||||||
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, 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
|
end
|
||||||
else
|
else
|
||||||
# Members with status
|
# 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_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, role['id'])
|
||||||
|
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
|
||||||
|
@ -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|
|
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, role['id'])
|
||||||
end
|
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
|
end
|
||||||
role_list << { "role-title" => role['title'], "status-list" => status_list }
|
role_list << { "role-title" => role['title'], "status-list" => status_list }
|
||||||
end
|
end
|
||||||
|
@ -52,10 +54,10 @@ class MembersController < ApplicationController
|
||||||
|
|
||||||
def get_members_by_status(status, role_id)
|
def get_members_by_status(status, role_id)
|
||||||
member_profiles = []
|
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)
|
member_profiles<<get_member_data(profile, role_id)
|
||||||
end
|
end
|
||||||
return member_profiles
|
return member_profiles.sort_by{|a|[a['job-title-value'],a["name"]] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_member_data(profile, role_id)
|
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_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 ""
|
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?)}
|
phone_office = profile.attributes.select{|k,v| v if (k.eql?("office_tel") && v.present?)}
|
||||||
{
|
{
|
||||||
"name"=>profile.name,
|
"name"=>profile.name,
|
||||||
"email" => profile.email,
|
"email" => profile.email,
|
||||||
"job-title" => job_title,
|
"job-title" => job_title,
|
||||||
|
"job-title-value" => (job_title_value.value.to_s rescue ""),
|
||||||
"discipline" => discipline,
|
"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",
|
"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)
|
"link_to_show" => OrbitHelper.url_to_show(profile.to_param)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -99,7 +103,9 @@ class MembersController < ApplicationController
|
||||||
"name"=>profile.name,
|
"name"=>profile.name,
|
||||||
"email" => profile.email,
|
"email" => profile.email,
|
||||||
"job-title" => job_title,
|
"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",
|
"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)
|
"link_to_show" => OrbitHelper.url_to_show(profile.to_param)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -143,7 +143,7 @@ class PagesController < ApplicationController
|
||||||
def get_categories
|
def get_categories
|
||||||
module_app = ModuleApp.find_by_key(params[:module]);
|
module_app = ModuleApp.find_by_key(params[:module]);
|
||||||
if module_app.key.eql?("member")
|
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,
|
"title" => role.title,
|
||||||
"id" => role.id.to_s,
|
"id" => role.id.to_s,
|
||||||
|
@ -164,7 +164,7 @@ class PagesController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
roles = roles.nil? ? [] : roles.sort_by{|status| status['title']}
|
roles = roles.nil? ? [] : roles
|
||||||
categories = categories.nil? ? [] : categories
|
categories = categories.nil? ? [] : categories
|
||||||
|
|
||||||
if module_app.data_count.nil?
|
if module_app.data_count.nil?
|
||||||
|
@ -195,14 +195,13 @@ class PagesController < ApplicationController
|
||||||
@categories = @module_app.categories rescue []
|
@categories = @module_app.categories rescue []
|
||||||
@tags = @module_app.tags rescue []
|
@tags = @module_app.tags rescue []
|
||||||
if @module_app.key.eql?("member")
|
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,
|
"title" => role.title,
|
||||||
"id" => role.id.to_s,
|
"id" => role.id.to_s,
|
||||||
"status" => RoleStatus.where(:role=>role)
|
"status" => RoleStatus.where(:role=>role)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
@roles = @roles.sort_by{|status| status['title']}
|
|
||||||
else
|
else
|
||||||
@roles = []
|
@roles = []
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,14 +9,14 @@
|
||||||
|
|
||||||
<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">
|
||||||
<table class="table-condensed">
|
<table class="table-condensed" height="165">
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="5" height="120">
|
<td rowspan="5" valign="top">
|
||||||
<img src="{{image}}" alt="{{name}}" height="120">
|
<img src="{{image}}" alt="{{name}}" height="160" height="auto">
|
||||||
</td>
|
</td>
|
||||||
<td><a href="{{link_to_show}}">{{name}}</a></td>
|
<td>{{job-title}}</td>
|
||||||
</tr>
|
</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>{{discipline}}</td></tr>
|
||||||
<tr><td>{{phone-office}}</td></tr>
|
<tr><td>{{phone-office}}</td></tr>
|
||||||
<tr><td><a href="mailto:{{email}}">{{email}}</a></td></tr>
|
<tr><td><a href="mailto:{{email}}">{{email}}</a></td></tr>
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
<div id="list-view">
|
<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>
|
<thead>
|
||||||
<tr class="sort-header">
|
<tr class="sort-header">
|
||||||
<th class="gender"></th>
|
<th class="gender"></th>
|
||||||
<th class="span2"><a href="#"><%= t(:position) %></a></th>
|
<th class="span1"><a href="#"><%= t(:position) %></a></th>
|
||||||
<th class="span4"><a href="#"><%= t(:name) %></a></th>
|
<th class="span2"><a href="#"><%= t(:name) %></a></th>
|
||||||
<th><a href="#"><%= t(:email) %></a></th>
|
<th class="span2"><a href="#"><%= t(:role) %></a></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody class="sortable">
|
||||||
<% @members.each do |member| %>
|
<% @members.each do |member| %>
|
||||||
<%
|
<%
|
||||||
case member.sex
|
case member.sex
|
||||||
|
@ -20,25 +20,56 @@
|
||||||
member_sex = 'gender-none'
|
member_sex = 'gender-none'
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
<tr id="<%= dom_id member %>">
|
<tr id="<%= dom_id member %>" class="sortable-member">
|
||||||
<td class="<%= member_sex %>"></td>
|
<td class="<%= member_sex %>"></td>
|
||||||
<td><%= link_to (member.position + 1), '#', class: 'edit_position', 'data-user-id' => member.id %></td>
|
<td class="member-position" data-value="<%= member.id %>"><%= member.position+1 %></td>
|
||||||
<td><%= link_to member.name, admin_member_path(member) %></td>
|
<td><%= member.name %></td>
|
||||||
<td><%= member.email %></td>
|
<td>
|
||||||
|
<% member.roles.each do |role| %>
|
||||||
|
<span class="label label-info"><%= role.title %></span>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bottomnav clearfix">
|
<style type="text/css">
|
||||||
<div class="action pull-right">
|
.sortable-placeholder{
|
||||||
<%= link_to t(:update_), '#', class: "btn btn-primary pull-right" %>
|
}
|
||||||
</div>
|
.sortable-member{
|
||||||
</div>
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<script>
|
<script>
|
||||||
|
var position_data = {};
|
||||||
|
|
||||||
$(function() {
|
$(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>
|
</script>
|
|
@ -12,7 +12,7 @@
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<%= label_tag t(:status), nil, {:func=>"field_label", :for=>"1", :class=>"control-label muted"} %>
|
<%= label_tag t(:status), nil, {:func=>"field_label", :for=>"1", :class=>"control-label muted"} %>
|
||||||
<div class="controls">
|
<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">
|
<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 %>
|
<%= check_box_tag 'member_profile[role_status_ids][]', rrs.id, @member.role_statuses.include?(rrs) ? true: false, class: "check" %> <%= rrs.title %>
|
||||||
</label>
|
</label>
|
||||||
|
|
|
@ -85,7 +85,8 @@ Orbit::Application.routes.draw do
|
||||||
get 'get_month_traffic'
|
get 'get_month_traffic'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get "members/get_role_fields/:id" => "members#get_role_fields", :as => :get_role_fields
|
||||||
get "members/unapproved_members" => "members#unapproved_members"
|
get "members/unapproved_members" => "members#unapproved_members"
|
||||||
resources :members do
|
resources :members do
|
||||||
collection do
|
collection do
|
||||||
|
|
Loading…
Reference in New Issue