orbit4-5/app/controllers/admin/members_controller.rb

334 lines
10 KiB
Ruby

class Admin::MembersController < OrbitMemberController
before_action :show_member_profile, only: [:show, :edit, :update, :edit_passwd, :edit_privilege]
helper MemberHelper
helper OrbitBackendHelper
def index
@roles = Role.excludes(disabled: true)
page_num = params[:page] || 1
@filter = params[:filter]
@mq = params[:mq]
@new_filter = params[:new_filter]
if @filter && params[:clear]
@filter.delete(params[:type])
elsif @filter && @new_filter
if @filter.has_key?(@new_filter[:type]) && @filter[@new_filter[:type]].include?(@new_filter[:id].to_s)
@filter[@new_filter[:type]].delete(@new_filter[:id].to_s)
elsif @filter.has_key?(@new_filter[:type])
@filter[@new_filter[:type]] << @new_filter[:id].to_s
else
@filter.merge!({@new_filter[:type] => [@new_filter[:id].to_s]})
end
elsif @new_filter
@filter = {@new_filter[:type] => [@new_filter[:id].to_s]}
end
if @filter.blank? and @mq.blank?
render case params[:at]
when 'summary'
@members=MemberProfile.all.page(page_num).per(12).desc("_id")
"index_summary"
when 'thumbnail'
@members=MemberProfile.all.page(page_num).per(36).desc("_id")
"index_thumbnail"
else
@members=MemberProfile.all.page(page_num).per(10).desc("_id")
"index"
end
elsif @filter.blank? and !@mq.blank?
render case params[:at]
when 'summary'
@members=MemberProfile.all.any_of({:user_id => /#{@mq}/i}, {:first_name => /#{@mq}/i}, {:last_name => /#{@mq}/i}, {:email => /#{@mq}/i}, {:office_tel => /#{@mq}/i}).desc("_id")
"index_summary"
when 'thumbnail'
@members=MemberProfile.all.any_of({:user_id => /#{@mq}/i}, {:first_name => /#{@mq}/i}, {:last_name => /#{@mq}/i}, {:email => /#{@mq}/i}, {:office_tel => /#{@mq}/i}).desc("_id")
"index_thumbnail"
else
@members=MemberProfile.all.any_of({:user_id => /#{@mq}/i}, {:first_name => /#{@mq}/i}, {:last_name => /#{@mq}/i}, {:email => /#{@mq}/i}, {:office_tel => /#{@mq}/i}).desc("_id")
"index"
end
elsif !@filter.blank? and @mq.blank?
render case params[:at]
when 'summary'
@members=MemberProfile.all.any_in(:role_ids=>@filter['role']).page(page_num).per(12).desc("_id")
"index_summary"
when 'thumbnail'
@members=MemberProfile.all.any_in(:role_ids=>@filter['role']).page(page_num).per(36).desc("_id")
"index_thumbnail"
else
@members=MemberProfile.all.any_in(:role_ids=>@filter['role']).page(page_num).per(10).desc("_id")
"index"
end
end
end
def show
@custom_fields = @member.member_profile_field_values rescue nil
@plugins = OrbitApp::Plugin::Registration.all rescue nil
@ppname = Array.new
@plugins.each do |aa|
@ppname << [aa.sort_number.to_i, [aa.name, aa.app_name, aa.intro_app_name, aa.front_partial_path]]
end
@plugin_shows = @ppname.sort.collect {|v| {"name"=>v[1][0],"app_name"=>v[1][1],"intro_app_name"=>v[1][2],"front_partial_path"=>v[1][3]} }
if(!params[:show_plugin_profile].nil?)
@right_partial = OrbitApp::Plugin::Registration.find_by_app_name(params[:show_plugin_profile]).profile_partial_path rescue 'plugin_summary'
@plugin_app_name = OrbitApp::Plugin::Registration.find_by_app_name(params[:show_plugin_profile]).name rescue nil
else
@right_partial = "plugin_summary"
@plugin_app_name = ''
end
get_info_and_roles
end
def new
@member = MemberProfile.new
get_info_and_roles
@user = User.new
@form_index = 0
end
def edit
@form_index = 0
get_info_and_roles
if @member.user.present?
@user = @member.user
else
@user = User.new(member_profile_id: @member.id)
end
end
def create
@member = MemberProfile.new(member_profile_params)
@user = User.new(user_params) rescue nil
if @member.save
@user.member_profile_id = @member.id
if !params[:member_profile_field_values].nil?
params[:member_profile_field_values].each_with_index do |m,i|
@custom_field_value = @member.member_profile_field_values.build(value: m.second["value"], member_profile_field_id: m.second["member_profile_field_id"])
@custom_field_value.save
end
end
if !params[:role_field_values].nil?
params[:role_field_values].each_with_index do |r,i|
field_value = r.last[:id].present?
@custom_field_value = AttributeValue.put_field_values(@member, r.last, r.last[:attribute_field_id], field_value)
end
end
@user.save
redirect_to admin_members_path
else
redirect_to new_admin_member_path
end
end
def update
respond_to do |format|
if @member.update_attributes(member_profile_params)
if @member.user.present?
@member.user.update(user_params)
else
@user = User.new(user_params)
@user.save
@user.update_attributes(member_profile_id: @member.id)
end
if !params[:member_profile_field_values].nil?
params[:member_profile_field_values].each_with_index do |m,i|
field_value = m.last[:id].present?
@custom_field_value = MemberProfileFieldValue.put_field_values(@member, m.last, m.last[:id], field_value)
end
# elsif !params[:member_profile_field_value].nil?
# params[:member_profile_field_value].each_with_index do |m,i|
# field_value = m.last[:id].present?
# @custom_field_value = MemberProfileFieldValue.put_field_values(@member, m.last, nil, field_value)
# end
end
if !params[:role_field_values].nil?
params[:role_field_values].each_with_index do |r,i|
field_value = r.last[:id].present?
@custom_field_value = AttributeValue.put_field_values(@member, r.last, r.last[:attribute_field_id], field_value)
end
end
if params[:workgroup_id]
@member.user.update_attributes(workgroup_id: params[:workgroup_id])
end
format.html { redirect_to admin_members_path, notice: 'Successfully Updated the User' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @member.errors, status: :unprocessable_entity }
end
end
end
def destroy
if params[:id].eql?(current_user.id.to_s)
flash[:error] = t(:cant_delete_self)
else
@member_profile = MemberProfile.find(params[:id])
@member_profile.user.delete if @member_profile.user.present?
@member_profile.delete
end
respond_to do |format|
format.js
end
end
def unapproved_members
@member_query = params[:member_query]
page_num = params[:page] || 1
if !@member_query.blank?
members = MemberProfile.all.any_of({:user_id => /#{@member_query}/i}, {:first_name => /#{@member_query}/i}, {:last_name => /#{@member_query}/i}, {:email => /#{@member_query}/i})
@members = members.collect do |member|
if !member.user.approved
member.user
end
end
else
@members = User.unapproved.page(page_num).per(12)
end
end
def accept_member
user = User.find(params[:member_id])
user.approved = true
user.save
redirect_to admin_members_unapproved_members_path
end
def edit_passwd
@user = @member.user
if current_user.id == @user.id
redirect_to :action => :index
end
end
def edit_privilege
@user = @member.user
@workgroup = Workgroup.find_by(key: 'admin')
if current_user.id == @user.id
redirect_to :action => :index
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.
def set_member_profile
@member = MemberProfile.find(params[:id])
end
def show_member_profile
path = request.path.split('/')
if path.last.include? '-'
uid = path[-1].split("-").last
uid = uid.split("?").first
else
uid = path[-2].split("-").last
uid = uid.split("?").first
end
@member = MemberProfile.find_by(uid: uid)
end
# Never trust parameters from the scary internet, only allow the white list through.
def member_profile_params
params.require(:member_profile).permit! rescue nil
end
def user_params
params.require(:user).permit! rescue nil
end
protected
def get_info_and_roles
@roles = Role.excludes(disabled: true)
@infos = MemberProfileField.excludes(disabled: true)
end
def set_attribute
@class = 'users'
end
end