diff --git a/app/assets/javascripts/lib/member/sort.js.erb b/app/assets/javascripts/lib/member/sort.js.erb
index be5b2f8..3f66c09 100644
--- a/app/assets/javascripts/lib/member/sort.js.erb
+++ b/app/assets/javascripts/lib/member/sort.js.erb
@@ -6,7 +6,7 @@ function dragMode() {
_userPosition.position = $(ui.item).index();
_userPosition.id = $(ui.item).data('user-id');
$.ajax({
- url: "<%#= Rails.application.routes.url_helpers.update_order_card_admin_users_new_interface_index_path %>",
+ url: "<%= Rails.application.routes.url_helpers.update_order_card_admin_members_path %>",
type: 'POST',
dataType: 'script',
data: {users: _userPosition}
@@ -46,7 +46,7 @@ function typeMode() {
_userPosition.push([$(this).val(), $(this).siblings('a').data('user-id')]);
});
$.ajax({
- url: "<%#= Rails.application.routes.url_helpers.update_order_list_admin_users_new_interface_index_path %>",
+ url: "<%= Rails.application.routes.url_helpers.update_order_list_admin_members_path %>",
type: 'POST',
dataType: 'script',
data: {users: _userPosition}
diff --git a/app/controllers/admin/members_controller.rb b/app/controllers/admin/members_controller.rb
index 597f02b..d449a66 100644
--- a/app/controllers/admin/members_controller.rb
+++ b/app/controllers/admin/members_controller.rb
@@ -2,7 +2,7 @@ class Admin::MembersController < OrbitMemberController
before_action :set_member_profile, only: [:show, :edit, :update]
def index
- @roles = Role.where(disabled: false).asc("_id")
+ @roles = Role.excludes(disabled: true)
page_num = params[:page] || 1
@filter = params[:filter]
@@ -70,6 +70,7 @@ class Admin::MembersController < OrbitMemberController
end
def show
+ @custom_fields = @member.member_profile_field_values rescue nil
end
def new
@@ -91,10 +92,17 @@ class Admin::MembersController < OrbitMemberController
def create
@member = MemberProfile.new(member_profile_params)
- @user = User.new(user_params)
-
+ @user = User.new(user_params) rescue nil
if @member.save
@user.member_profile_id = @member.id
+
+ if !params[:member_profile_field_value].nil?
+ params[:member_profile_field_value].each_with_index do |m,i|
+ @custom_field_value = @member.member_profile_field_values.new(value: m.second["value"], member_profile_field_id: m.second["member_profile_field_id"])
+ @custom_field_value.save
+ end
+ end
+
@user.save
redirect_to admin_members_path
else
@@ -130,8 +138,10 @@ class Admin::MembersController < OrbitMemberController
@member_profile.user.delete if @member_profile.user.present?
@member_profile.delete
end
-
- render action: "index"
+
+ respond_to do |format|
+ format.js
+ end
end
def unapproved_members
@@ -173,6 +183,70 @@ class Admin::MembersController < OrbitMemberController
end
end
+ def edit_order_card
+ @members = MemberProfile.order('created_at DESC')
+ @type = 'card'
+ render 'edit_order'
+ end
+
+ def edit_order_list
+ @members = MemberProfile.order('created_at DESC')
+ @type = 'list'
+ render 'edit_order'
+ end
+
+ def update_order_card
+ @error = false
+ if params[:users].present?
+ to_go = params[:users][:position].to_i
+ member_at_position = MemberProfile.find_by(position: to_go + 1)
+ member = MemberProfile.find(params[:users][:id])
+ if member_at_position
+ if member.position > member_at_position.position
+ member.move_above(member_at_position)
+ else
+ member.move_below(member_at_position)
+ end
+ end
+ end
+ render nothing: true, status: 200
+ end
+
+ def update_order_list
+ @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)
+ end
+
+ def setting_account
+ if params[:member_id].blank?
+ redirect_to action: :index
+ else
+ @user = MemberProfile.find(params[:member_id])
+ if current_user.id != @user.id
+ redirect_to action: :index
+ end
+ end
+ end
+
private
# Use callbacks to share common setup or constraints between actions.
@@ -193,7 +267,8 @@ class Admin::MembersController < OrbitMemberController
protected
def get_info_and_roles
- @roles = Role.excludes('disabled' => true)
+ @roles = Role.excludes(disabled: true)
+ @infos = MemberProfileField.excludes(disabled: true)
end
def set_attribute
diff --git a/app/helpers/attribute_fields_helper.rb b/app/helpers/attribute_fields_helper.rb
index 2771823..c5fcf0b 100644
--- a/app/helpers/attribute_fields_helper.rb
+++ b/app/helpers/attribute_fields_helper.rb
@@ -10,15 +10,15 @@ module AttributeFieldsHelper
include OrbitFormHelper
- def block_helper(user,index,disable = false)
+ def block_helper(member,index,disable = false)
unless self.disabled
@index = index
@markup_options = markup_options.merge(:disabled=>disable,:func=>"input_unit")
- @user = user
- @attribute_value = @user.get_value_from_field_id(id)
+ @member = member
+ @attribute_value = @member.get_value_from_field_id(id)
@new_attribute = @attribute_value.nil?
- @attribute_value = @attribute_value || @user.attribute_values.build( attribute_field_id: id )
- @prefiled_value = @attribute_value.value
+ @attribute_value = @attribute_value || @member.member_profile_field_values.build(member_profile_field: id)
+ @prefiled_value = @attribute_value.value rescue nil
@panel_setting = self.get_data
return instance_eval("render_#{markup}") #rescue ""
@@ -179,12 +179,17 @@ module AttributeFieldsHelper
protected
+ def valid_locales
+ site = Site.first
+ site.valid_locales
+ end
+
def lang_panel_tabbable_wrapper(add_more_params,&block)
add_more_counter = ''
if self.markup=='text_area' #or self.markup=='address'
- tmp1 = VALID_LOCALES.collect do |key|
+ tmp1 = valid_locales.collect do |key|
value = @prefiled_value[key] rescue nil
# div_class_ary = ["tab-pane" ,"fade","#{get_pairing_tab_class({})}_#{key}"]
div_class_ary = ["tab-pane" ,"fade"]
@@ -205,7 +210,7 @@ protected
tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do
- buff2 = VALID_LOCALES.each.collect do |key|
+ buff2 = valid_locales.each.collect do |key|
# link_entry = self.add_more ? "#{add_more_tab(:tab_btn,loop_counter,key)}" : "#tab"+id.to_s+"_#{key}"
link_entry_ary = ["##{get_pairing_tab_class({})}","_#{key}"]
link_entry_ary << ".add_more_item_#{add_more_counter}" if can_add_more
@@ -229,7 +234,7 @@ protected
tmp1 =
content_tag :div,:class=> "tab-content" do
- buff = VALID_LOCALES.collect do |key|
+ buff = valid_locales.collect do |key|
value = @prefiled_value[key] rescue nil
# div_class_ary = ["tab-pane" ,"fade","#{get_pairing_tab_class({})}_#{key}"]
div_class_ary = ["tab-pane" ,"fade"]
@@ -254,7 +259,7 @@ protected
end
tmp2 = content_tag(:div,:class => 'btn-group', :data=>{:toggle=>"buttons-radio"}) do
- buff2 = VALID_LOCALES.each.collect do |key|
+ buff2 = valid_locales.each.collect do |key|
# link_entry = self.add_more ? "#{add_more_tab(:tab_btn,loop_counter,key)}" : "#tab"+id.to_s+"_#{key}"
link_entry_ary = ["##{get_pairing_tab_class({})}","_#{key}"]
link_entry_ary << ".add_more_item_#{add_more_counter}" if can_add_more
@@ -342,14 +347,14 @@ protected
end
- temp = label + content_tag(:div, multipleInputs + add_more_unt, :class=>'controls add-input')
+ temp = form_label + content_tag(:div, multipleInputs + add_more_unt, :class=>'controls add-input')
result = content_tag(:div,temp,:class=>div_class)
# result = label + multipleInputs + add_more_unt
# result = label + 一堆的輸入框(要用 multipleInput editMore 包起來) + add_more btn + hidden_fields
else
- temp = label + content_tag(:div, controls_wrapper(&block), :class=>'controls')
+ temp = form_label + content_tag(:div, controls_wrapper(&block), :class=>'controls')
result = content_tag(:div,temp,:class=>div_class)
end
@@ -358,13 +363,13 @@ protected
# address = content_tag :div,:class=>"multipleInput editMore" do
address = content_tag :div,:class=>"control-group" do
- label + content_tag(:div, controls_wrapper(&block), :class=>'controls add-input')
+ form_label + content_tag(:div, controls_wrapper(&block), :class=>'controls add-input')
end # of div multipleInput editMore
result = address
else
- temp = label + content_tag(:div, controls_wrapper(&block), :class=>'controls')
+ temp = form_label + content_tag(:div, controls_wrapper(&block), :class=>'controls')
result = content_tag(:div,temp,:class=>div_class)
end
@@ -395,7 +400,7 @@ protected
def end_block
if @new_attribute
- hidden_field_tag(get_basic_field_name_base+"[attribute_field_id]",id,:for=>"field_#{@index}")
+ hidden_field_tag(get_basic_field_name_base+"[member_profile_field_id]",id,:for=>"field_#{@index}")
else
hidden_field_tag(get_basic_field_name_base+"[id]",@attribute_value.id,:for=>"field_#{@index}")
end
@@ -420,9 +425,9 @@ protected
def get_basic_field_name_base
if @new_attribute
- "user[new_attribute_values][#{@index}]"
+ "member_profile_field_value[#{@index}]"
else
- "user[attribute_values][#{@index}]"
+ "member_profile_field_values[#{@index}]"
end
end
diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb
index 66f7924..878f605 100644
--- a/app/models/member_profile.rb
+++ b/app/models/member_profile.rb
@@ -1,6 +1,8 @@
class MemberProfile
include Mongoid::Document
include Mongoid::Timestamps
+ include Mongoid::Tree
+ include Mongoid::Tree::Ordering
field :first_name, type: String, localize: true
field :last_name, type: String, localize: true
@@ -12,14 +14,21 @@ class MemberProfile
field :personal_website
field :autobiography, type: String, localize: true
field :email, type: String
+ field :position, type: Integer
VALID_EMAIL_FORMAT = /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/
validates :email, uniqueness: true, format: { with: VALID_EMAIL_FORMAT }
+ validates :position, uniqueness: true
has_one :user
has_and_belongs_to_many :roles
has_and_belongs_to_many :role_statuses
+ has_many :member_profile_field_values
+ accepts_nested_attributes_for :member_profile_field_values
+
+ before_save :assign_default_position, :if => :assign_default_position?
+
mount_uploader :avatar, AvatarUploader
paginates_per 10
@@ -38,4 +47,19 @@ class MemberProfile
end
end
end
+
+ def get_attribute_values
+ @attribute_values ||= self.member_profile_field_values rescue nil
+ end
+
+ def get_value_from_field_id(field_id)
+ values = get_attribute_values
+ value = values.detect {|value| value.attribute_field_id == field_id} rescue nil
+ value ? value : nil
+ end
+
+ def assign_default_position?
+ self.position.nil? || self.parent_id_changed?
+ end
+
end
diff --git a/app/models/member_profile_field.rb b/app/models/member_profile_field.rb
index faf6996..bbbb236 100644
--- a/app/models/member_profile_field.rb
+++ b/app/models/member_profile_field.rb
@@ -21,7 +21,7 @@ class MemberProfileField
field :typeD, type: Hash, default: {cross_lang: false}
field :typeE, type: Hash, default: {}
- embeds_many :member_profile_field_values
+ has_many :member_profile_field_values
def markup_value
get_data["option_list"]
diff --git a/app/models/member_profile_field_value.rb b/app/models/member_profile_field_value.rb
index ecae25c..6db36d3 100644
--- a/app/models/member_profile_field_value.rb
+++ b/app/models/member_profile_field_value.rb
@@ -5,6 +5,8 @@ class MemberProfileFieldValue
field :key
field :address_key
+ field :value
- embedded_in :member_profile_field
+ belongs_to :member_profile_field
+ belongs_to :member_profile
end
diff --git a/app/views/admin/members/_edit_order_card.html.erb b/app/views/admin/members/_edit_order_card.html.erb
new file mode 100644
index 0000000..dbc0fd4
--- /dev/null
+++ b/app/views/admin/members/_edit_order_card.html.erb
@@ -0,0 +1,23 @@
+
+
+
+ <% @members.each do |member| %>
+
+
+
+ <% end %>
+
+
+
+
+
\ 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
new file mode 100644
index 0000000..f001952
--- /dev/null
+++ b/app/views/admin/members/_edit_order_list.html.erb
@@ -0,0 +1,44 @@
+
+
+
\ No newline at end of file
diff --git a/app/views/admin/members/_index_paginator.html.erb b/app/views/admin/members/_index_paginator.html.erb
index 67464b4..76d1ab9 100644
--- a/app/views/admin/members/_index_paginator.html.erb
+++ b/app/views/admin/members/_index_paginator.html.erb
@@ -2,7 +2,7 @@
<% if params[:action] != "unapproved_members" %>
<% if current_user.is_admin? %>
- <%= link_to t(:edit_order),new_admin_member_path ,:class => "btn btn-primary" %>
+ <%= link_to t(:edit_order), edit_order_list_admin_members_path,:class => "btn btn-primary" %>
<%= link_to(new_admin_member_path,:class=> "btn btn-primary") do %>
<%= t(:add) %>
<% end -%>
diff --git a/app/views/admin/members/_info.html.erb b/app/views/admin/members/_info.html.erb
new file mode 100644
index 0000000..16a314c
--- /dev/null
+++ b/app/views/admin/members/_info.html.erb
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/app/views/admin/members/_infos.html.erb b/app/views/admin/members/_infos.html.erb
new file mode 100644
index 0000000..d9d47fc
--- /dev/null
+++ b/app/views/admin/members/_infos.html.erb
@@ -0,0 +1 @@
+<%=render partial: "info", collection: @infos%>
\ No newline at end of file
diff --git a/app/views/admin/members/_member_for_listing.html.erb b/app/views/admin/members/_member_for_listing.html.erb
index a83c548..5a37e1d 100644
--- a/app/views/admin/members/_member_for_listing.html.erb
+++ b/app/views/admin/members/_member_for_listing.html.erb
@@ -22,7 +22,9 @@
<%= content_tag(:li, link_to(t(:edit),edit_admin_member_path(member_for_listing))) if current_user.is_admin? %>
+ <% if member_for_listing.user.present? %>
<%= content_tag(:li, link_to(t("users.setting_privilege"),admin_member_edit_privilege_path(member_for_listing))) if current_user.is_admin? and current_user.id != (member_for_listing.user.id if member_for_listing.user.present? ) %>
+ <% end %>
<%= content_tag(:li, link_to(t(:delete_),admin_member_path(member_for_listing, :at=>params[:at]), :confirm => t(:sure?), :method => :delete, :class=>"text-error", :remote => true)) if current_user.is_admin? %>