users_controller.rb
3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
require 'csv'
class UsersController < AdminController
protect 'manage_environment_users', :environment
include UsersHelper
def index
@filter = params[:filter] || 'all_users'
scope = environment.people.no_templates
if @filter == 'admin_users'
scope = scope.admins
elsif @filter == 'activated_users'
scope = scope.activated
elsif @filter == 'deactivated_users'
scope = scope.deactivated
end
scope = scope.order('name ASC')
@q = params[:q]
@collection = find_by_contents(:people, environment, scope, @q, {:per_page => per_page, :page => params[:npage]})[:results]
end
def set_admin_role
person = environment.people.find(params[:id])
environment.add_admin(person)
redirect_to :action => :index, :q => params[:q], :filter => params[:filter]
end
def reset_admin_role
person = environment.people.find(params[:id])
environment.remove_admin(person)
redirect_to :action => :index, :q => params[:q], :filter => params[:filter]
end
def activate
person = environment.people.find(params[:id])
person.user.activate
redirect_to :action => :index, :q => params[:q], :filter => params[:filter]
end
def deactivate
person = environment.people.find(params[:id])
person.user.deactivate
redirect_to :action => :index, :q => params[:q], :filter => params[:filter]
end
def destroy_user
if request.post?
person = environment.people.find_by_id(params[:id])
if person && person.destroy
session[:notice] = _('The profile was deleted.')
else
session[:notice] = _('Could not remove profile')
end
end
redirect_to :action => :index, :q => params[:q], :filter => params[:filter]
end
def download
respond_to do |format|
format.html
format.xml do
users = User.find(:all, :conditions => {:environment_id => environment.id}, :include => [:person])
send_data users.to_xml(
:skip_types => true,
:only => %w[email login created_at updated_at],
:include => { :person => {:only => %w[name updated_at created_at address birth_date contact_phone identifier lat lng] } }),
:type => 'text/xml',
:disposition => "attachment; filename=users.xml"
end
format.csv do
# using a direct connection with the dbms to optimize
command = User.send(:sanitize_sql, ["SELECT profiles.name, users.email FROM profiles
INNER JOIN users ON profiles.user_id=users.id
WHERE profiles.environment_id = ?", environment.id])
users = User.connection.execute(command)
csv_content = "name;email\n"
users.each { |u|
csv_content << CSV.generate_line([u['name'], u['email']], {:col_sep => ';'})
}
render :text => csv_content, :content_type => 'text/csv', :layout => false
end
end
end
def send_mail
@mailing = environment.mailings.build(params[:mailing])
if request.post?
@mailing.locale = locale
@mailing.person = user
if @mailing.save
session[:notice] = _('The e-mails are being sent')
redirect_to :action => 'index'
else
session[:notice] = _('Could not create the e-mail')
end
end
end
private
def per_page
10
end
end