class Admin::UserController < AdminController
layout "cms-boxed"
def email
@user = User.find_sys_id(_sid, params[:id])
if request.post?
note = UserNote.new(params[:user_note])
note.user = @user
note.category = "EMail #{current_user.email}"
note.save
Notification.send_message(note, _sid).deliver
redirect_to "/admin/user/#{@user.id}", :notice=>"Message sent"
else
@note = UserNote.new
end
end
def generate_profile_html
mode = params[:mode]
@pro_forma = true
if mode=='view'
@user = User.last
mode = 'user'
elsif mode=='owner'
@user = current_user
mode = 'user'
end
html = render_to_string "user/#{mode}_profile", :layout=>false
if mode=='edit'
html = html.gsub(//, '')
end
render :text=>html, :layout=>false
end
def password
@user = User.find_sys_id(_sid, params[:id])
password = params[:user][:password]
if password.not_blank?
@user.user_notes << UserNote.new(:category=>"Password", :description=>"Reset by administrator", :created_by_id=>current_user.id)
@user.password = params[:user][:password]
@user.save
end
respond_with_bip(@user)
end
def attributes
@attribute = UserAttribute.new
@attributes = UserAttribute.sys(_sid).order(:order_by).all
if request.post?
Preference.set(_sid, "user_profile_edit_form", params[:edit_html], nil)
Preference.set(_sid, "user_profile_view_form", params[:view_html], nil)
Preference.set(_sid, "user_profile_owner_form", params[:owner_html], nil)
end
@edit_html = Preference.get_cached(_sid, "user_profile_edit_form") || ''
@view_html = Preference.get_cached(_sid, "user_profile_view_form") || '' # it's not really a form, but for consistency with edit it's called a form here
@owner_html = Preference.get_cached(_sid, "user_profile_owner_form") || '' # it's not really a form, but for consistency with edit it's called a form here
end
def attribute
@attribute = UserAttribute.find_sys_id(_sid, params[:id])
end
def destroy_attribute
@attribute = UserAttribute.find_sys_id(_sid, params[:id])
UserAttribute.delete_all("id = #{params[:id]} and system_id = #{_sid}")
UserAttributeValue.delete_all("user_attribute_id = #{params[:id]}")
Activity.add(_sid, "Attribute '#{@attribute.name}' deleted", current_user, "Users")
flash[:notice] = "Attribute deleted"
redirect_to "/admin/users/attributes"
end
def update
@user = User.find_sys_id(_sid, params[:id])
if params[:user][:display_name].is_blank?
params[:user][:display_name] = nil
end
@user.update_attributes(params[:user])
respond_with_bip(@user)
end
def update_attribute
@attribute = UserAttribute.find_sys_id(_sid, params[:id])
@attribute.update_attributes(params[:user_attribute])
if @attribute.save
Activity.add(_sid, "Attribute '#{@attribute.name}' edited", current_user, "Users")
flash[:notice] = "Attribute updated"
redirect_to "/admin/users/attribute/#{@attribute.id}"
else
render "attribute"
end
end
def add_user_to_group
@user = User.find_sys_id(_sid, params[:id])
@group = Group.find_sys_id(_sid, params[:group_id])
@user.groups << @group
@user.update_index
flash[:notice] = "User added to group"
Activity.add(_sid, "User '#{@user.email}' added to group '#{@group.name}'", current_user, "Users")
redirect_to "/admin/user/#{@user.id}"
end
def remove_user_from_group
@user = User.find_sys_id(_sid, params[:id])
@group = Group.find_sys_id(_sid, params[:group_id])
@user.groups.destroy(@group)
@user.update_index
flash[:notice] = "User removed from group"
Activity.add(_sid, "User '#{@user.email}' removed from group '#{@group.name}'", current_user, "Users")
redirect_to "/admin/user/#{@user.id}"
end
def help_mode
Preference.set(_sid, 'show_help', params[:mode], current_user.id)
render :js=>""
end
def attribute_value
@user = User.find_sys_id(_sid, params[:id])
uav = UserAttributeValue.find_or_initialize_by_user_id_and_user_attribute_id(@user.id, params[:attribute_id])
uav.value = params[:user_attribute_value][:value]
uav.save
@user.update_index
Activity.add(_sid, "Set attribute '#{uav.user_attribute.name}' to '#{uav.value}' for '#{@user.email}'", current_user, "Users")
respond_with_bip(uav)
end
def create_attribute
ua = UserAttribute.new(params[:user_attribute])
ua.public_visible = false
ua.user_visible = false
ua.owner_visible = false
ua.owner_editable = false
ua.admin_visible = true
ua.form_field_type_id = FormFieldType.sys(_sid).where(:field_type=>"line").first.id
ua.code_name = ua.name.urlise
if ua.code_name == "id" || ua.code_name == "submit"
ua.code_name = "attribute_#{ua.code_name}"
end
ua.system_id = _sid
if ua.save
flash[:notice] = "New attribute created"
Activity.add(_sid, "Created new user attribute '#{ua.name}'", current_user, "Users")
else
flash[:notice] = "Couldn't create attribute - does it already exist?"
end
redirect_to request.referer
end
def index
per_page = params[:per_page] || 50
system_id = _sid
if params[:user_id].not_blank?
@users = User.sys(_sid).where(:id=>params[:user_id]).page(1).per(per_page)
else
group = params[:grp_id]
search_for = params[:for]
parameter = params[:parameter]
value = params[:value]
export = params[:submit_button]=="export"
param_hash = { parameter => value } if parameter
if export
from = 0
size = 10000000
else
page = (params[:page] || 1).to_i
from = ((page-1) * per_page)
size = per_page
end
musts = []
musts << { :term => {:group_ids => group} } if group.not_blank?
musts << { :query_string => {:fields => [ :email, :display_name ], :query => "*#{search_for.downcase}*" }} if search_for.not_blank?
musts << { :term => {"attributes.#{parameter}" => value.downcase} } if parameter.not_blank? && value.not_blank?
if musts.size > 0
search = Tire.search "kit_#{app_name.downcase}_users", {:query => { :bool => { :must => musts } }, :size=>per_page, :from=>from}
search.size(per_page)
search.from(from)
search.filter :terms, :system_id=>system_id
@users = search.results
else
@users = User.sys(_sid).order(:email).page(params[:page]).per(per_page)
end
end
if export
stream_csv(@users)
return
end
params[:page] = page
end
def add_note
@user = User.find_sys_id(_sid, params[:id])
@user_note = UserNote.new(params[:user_note])
@user_note.created_by_id = current_user.id
@user.user_notes << @user_note
Activity.add(_sid, "Added note to user '#{@user.email}'", current_user, "Users")
redirect_to "/admin/user/#{@user.id}"
end
def view
@attribute = UserAttribute.new
@user = User.sys(_sid).where(:id=>params[:id]).first
@user_note = UserNote.new
if params[:spam_points]
@user.update_attributes(:spam_points=>params[:spam_points])
Activity.add(_sid, "Set spam points to #{params[:spam_points]} for user '#{@user.email}'", current_user, "Users")
redirect_to "/admin/user/#{@user.id}" and return # don't want the user refreshing the set spam to zero URL
end
if params[:unlock]
@user.unlock_access!
Activity.add(_sid, "Unlocked user '#{@user.email}'", current_user, "Users")
end
if params[:ban]
@user.ban!(current_user.id)
end
if params[:unban]
@user.unban!(current_user.id)
end
if params[:designer]
@user.designer_status(params[:designer]=="1")
end
if params[:moderator]
@user.moderator_status(params[:moderator]=="1")
end
if params[:admin]
@user.admin_status(params[:admin]=="1")
end
if params[:newsletter]
@user.subscribe_newsletter = params[:newsletter]
@user.save
end
if params[:forum_status]
change = params[:forum_status]=="up" ? 1 : -1
@user.forum_status += change
@user.forum_status = 0 if @user.forum_level < 0
@user.save
Activity.add(_sid, "Changed user '#{@user.email}' forum level by #{change} to #{@user.forum_status}", current_user, "Users")
end
if params[:forum_level]
change = params[:forum_level]=="up" ? 1 : -1
@user.forum_level += change
@user.forum_level = 0 if @user.forum_level < 0
@user.save
Activity.add(_sid, "Changed user '#{@user.email}' forum level by #{change} to #{@user.forum_level}", current_user, "Users")
end
end
def become
return unless current_user.admin?
target = User.find_sys_id(_sid, params[:id])
if target.ranking > current_user.ranking
redirect_to "/db", :notice=>"You cannot become that user"
return
else
sign_in(:user, target)
redirect_to "/", :notice=>"You've successfully become that user"
return
end
end
private
def stream_csv(users)
filename = params[:action] + ".csv"
#this is required if you want this to work with IE
csv_headers(filename)
csv_string = CSV.generate do |csv|
csv << ["id","email","groups"]
users.each do |u|
csv << [u.id, u.email, u.groups.join(", ")]
end
end
render :text => csv_string
end
end