muck-users 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +27 -0
- data/Rakefile +96 -0
- data/VERSION +1 -0
- data/app/controllers/admin/muck/roles_controller.rb +57 -0
- data/app/controllers/admin/muck/users_controller.rb +122 -0
- data/app/controllers/muck/activations_controller.rb +31 -0
- data/app/controllers/muck/password_resets_controller.rb +81 -0
- data/app/controllers/muck/user_sessions_controller.rb +40 -0
- data/app/controllers/muck/username_request_controller.rb +43 -0
- data/app/controllers/muck/users_controller.rb +211 -0
- data/app/models/muck_user_mailer.rb +53 -0
- data/app/models/permission.rb +17 -0
- data/app/models/role.rb +25 -0
- data/app/views/admin/roles/_role.html.erb +9 -0
- data/app/views/admin/roles/edit.html.erb +17 -0
- data/app/views/admin/roles/index.html.erb +8 -0
- data/app/views/admin/roles/new.html.erb +16 -0
- data/app/views/admin/roles/show.html.erb +7 -0
- data/app/views/admin/users/_activate.html.erb +5 -0
- data/app/views/admin/users/_ajax_search_box.html.erb +6 -0
- data/app/views/admin/users/_row.html.erb +6 -0
- data/app/views/admin/users/_search_box.html.erb +6 -0
- data/app/views/admin/users/_table.html.erb +21 -0
- data/app/views/admin/users/_user_navigation.html.erb +11 -0
- data/app/views/admin/users/do_search.html.erb +5 -0
- data/app/views/admin/users/inactive.html.erb +8 -0
- data/app/views/admin/users/inactive_emails.html.erb +6 -0
- data/app/views/admin/users/index.html.erb +12 -0
- data/app/views/admin/users/search.html.erb +5 -0
- data/app/views/muck_user_mailer/activation_confirmation.html.erb +7 -0
- data/app/views/muck_user_mailer/activation_instructions.html.erb +7 -0
- data/app/views/muck_user_mailer/password_not_active_instructions.html.erb +10 -0
- data/app/views/muck_user_mailer/password_reset_instructions.html.erb +10 -0
- data/app/views/muck_user_mailer/username_request.html.erb +3 -0
- data/app/views/muck_user_mailer/welcome_notification.html.erb +5 -0
- data/app/views/password_resets/edit.html.erb +9 -0
- data/app/views/password_resets/new.html.erb +11 -0
- data/app/views/user_sessions/new.html.erb +17 -0
- data/app/views/username_request/new.html.erb +11 -0
- data/app/views/users/_user.html.erb +15 -0
- data/app/views/users/activation_confirmation.html.erb +1 -0
- data/app/views/users/activation_instructions.html.erb +1 -0
- data/app/views/users/edit.html.erb +45 -0
- data/app/views/users/new.html.erb +51 -0
- data/app/views/users/show.html.erb +4 -0
- data/app/views/users/welcome.html.erb +4 -0
- data/config/muck_users_routes.rb +56 -0
- data/db/migrate/20090320174818_create_muck_permissions_and_roles.rb +16 -0
- data/db/migrate/20090512013727_add_photo_to_user.rb +13 -0
- data/install.rb +1 -0
- data/lib/action_controller/authentic_application.rb +213 -0
- data/lib/active_record/acts/muck_user.rb +192 -0
- data/lib/muck-users/exceptions.rb +5 -0
- data/lib/muck-users/initialize_routes.rb +8 -0
- data/lib/muck-users/tasks.rb +46 -0
- data/lib/muck-users.rb +7 -0
- data/locales/ar.yml +124 -0
- data/locales/bg.yml +124 -0
- data/locales/ca.yml +124 -0
- data/locales/cs.yml +124 -0
- data/locales/da.yml +124 -0
- data/locales/de.yml +124 -0
- data/locales/el.yml +124 -0
- data/locales/en.yml +127 -0
- data/locales/es.yml +124 -0
- data/locales/fr.yml +124 -0
- data/locales/it.yml +124 -0
- data/locales/iw.yml +124 -0
- data/locales/ja.yml +124 -0
- data/locales/ko.yml +124 -0
- data/locales/lt.yml +124 -0
- data/locales/lv.yml +124 -0
- data/locales/nl.yml +124 -0
- data/locales/no.yml +125 -0
- data/locales/pl.yml +124 -0
- data/locales/pt.yml +124 -0
- data/locales/ro.yml +124 -0
- data/locales/ru.yml +124 -0
- data/locales/sk.yml +124 -0
- data/locales/sl.yml +124 -0
- data/locales/sr.yml +124 -0
- data/locales/sv.yml +124 -0
- data/locales/tl.yml +124 -0
- data/locales/uk.yml +124 -0
- data/locales/vi.yml +124 -0
- data/locales/zh-CN.yml +124 -0
- data/locales/zh-TW.yml +124 -0
- data/locales/zh.yml +124 -0
- data/muck-users.gemspec +170 -0
- data/pkg/muck-users-0.1.0.gem +0 -0
- data/public/images/profile_default.jpg +0 -0
- data/rails/init.rb +18 -0
- data/tasks/muck_users_engine.rake +27 -0
- data/tasks/rails.rake +2 -0
- data/test/factories.rb +56 -0
- data/test/functional/activations_controller_test.rb +73 -0
- data/test/functional/admin/roles_controller_test.rb +10 -0
- data/test/functional/admin/users_controller_test.rb +55 -0
- data/test/functional/password_resets_controller_test.rb +60 -0
- data/test/functional/user_sessions_controller_test.rb +62 -0
- data/test/functional/users_controller_test.rb +255 -0
- data/test/shoulda_macros/controller.rb +43 -0
- data/test/shoulda_macros/forms.rb +28 -0
- data/test/shoulda_macros/models.rb +34 -0
- data/test/shoulda_macros/pagination.rb +48 -0
- data/test/shoulda_macros/plugins.rb +30 -0
- data/test/test_helper.rb +36 -0
- data/test/unit/muck_user_mailer_test.rb +64 -0
- data/test/unit/permission_test.rb +19 -0
- data/test/unit/role_test.rb +17 -0
- data/uninstall.rb +1 -0
- metadata +198 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
class Muck::UsersController < ApplicationController
|
|
2
|
+
unloadable
|
|
3
|
+
|
|
4
|
+
ssl_required :show, :new, :edit, :create, :update
|
|
5
|
+
before_filter :not_logged_in_required, :only => [:new, :create]
|
|
6
|
+
before_filter :login_required, :only => [:show, :edit, :update, :welcome]
|
|
7
|
+
before_filter :check_administrator_role, :only => [:enable]
|
|
8
|
+
|
|
9
|
+
def show
|
|
10
|
+
@user = User.find(params[:id]) if params[:id]
|
|
11
|
+
@user ||= current_user
|
|
12
|
+
if @user == current_user || admin?
|
|
13
|
+
@page_title = @user.to_param
|
|
14
|
+
standard_response('show')
|
|
15
|
+
else
|
|
16
|
+
redirect_to public_user_path(@user)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def welcome
|
|
21
|
+
@page_title = t('muck.users.welcome')
|
|
22
|
+
@user = User.find(params[:id])
|
|
23
|
+
respond_to do |format|
|
|
24
|
+
format.html { render :template => 'users/welcome' }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def activation_instructions
|
|
29
|
+
@page_title = t('muck.users.welcome')
|
|
30
|
+
@user = User.find(params[:id])
|
|
31
|
+
respond_to do |format|
|
|
32
|
+
format.html { render :template => 'users/activation_instructions' }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def new
|
|
37
|
+
@page_title = t('muck.users.register_account', :application_name => GlobalConfig.application_name)
|
|
38
|
+
@user = User.new
|
|
39
|
+
standard_response('new')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def edit
|
|
43
|
+
@page_title = t('muck.users.update_profile')
|
|
44
|
+
@user = admin? ? User.find(params[:id]) : current_user
|
|
45
|
+
respond_to do |format|
|
|
46
|
+
format.html { render :template => 'users/edit' }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def create
|
|
51
|
+
@page_title = t('muck.users.register_account', :application_name => GlobalConfig.application_name)
|
|
52
|
+
cookies.delete :auth_token
|
|
53
|
+
@user = User.new(params[:user])
|
|
54
|
+
|
|
55
|
+
if GlobalConfig.use_recaptcha
|
|
56
|
+
if !(verify_recaptcha(@user) && @user.valid?)
|
|
57
|
+
raise ActiveRecord::RecordInvalid, @user
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
if GlobalConfig.automatically_activate
|
|
62
|
+
if GlobalConfig.automatically_login_after_account_create
|
|
63
|
+
if @user.save
|
|
64
|
+
@user.activate!
|
|
65
|
+
@user.deliver_welcome_email
|
|
66
|
+
flash[:notice] = t('muck.users.thanks_sign_up')
|
|
67
|
+
after_create_response(true, signup_complete_path(@user))
|
|
68
|
+
else
|
|
69
|
+
after_create_response(false)
|
|
70
|
+
end
|
|
71
|
+
else
|
|
72
|
+
if @user.save_without_session_maintenance
|
|
73
|
+
@user.activate!
|
|
74
|
+
@user.deliver_welcome_email
|
|
75
|
+
flash[:notice] = t('muck.users.thanks_sign_up_login')
|
|
76
|
+
after_create_response(true, signup_complete_login_required_path(@user))
|
|
77
|
+
else
|
|
78
|
+
after_create_response(false)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
else
|
|
82
|
+
if @user.save_without_session_maintenance
|
|
83
|
+
@user.deliver_activation_instructions!
|
|
84
|
+
flash[:notice] = t('muck.users.thanks_sign_up_check')
|
|
85
|
+
after_create_response(true, signup_complete_activation_required_path(@user))
|
|
86
|
+
else
|
|
87
|
+
after_create_response(false)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def update
|
|
93
|
+
@title = t("users.update_profile")
|
|
94
|
+
@user = admin? ? User.find(params[:id]) : User.find(current_user)
|
|
95
|
+
if @user.update_attributes(params[:user])
|
|
96
|
+
flash[:notice] = t("muck.users.user_update")
|
|
97
|
+
after_update_response(true)
|
|
98
|
+
else
|
|
99
|
+
after_update_response(false)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def destroy
|
|
104
|
+
return unless admin? || GlobalConfig.let_users_delete_their_account
|
|
105
|
+
@user = admin? ? User.find(params[:id]) : User.find(current_user)
|
|
106
|
+
if @user.destroy
|
|
107
|
+
flash[:notice] = t("muck.users.user_account_deleted")
|
|
108
|
+
end
|
|
109
|
+
after_destroy_response
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def is_login_available
|
|
113
|
+
result = t('muck.users.username_not_available')
|
|
114
|
+
if params[:user_login] && params[:user_login].length <= 0
|
|
115
|
+
result = ''
|
|
116
|
+
elsif !User.login_exists?(params[:user_login])
|
|
117
|
+
@user = User.new(:login => params[:user_login])
|
|
118
|
+
if !@user.validate_attributes(:only => [:login])
|
|
119
|
+
result = t('muck.users.invalid_username')
|
|
120
|
+
@user.errors.full_messages.each do |message|
|
|
121
|
+
if !message.include? 'blank'
|
|
122
|
+
result += "<br />#{message}"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
else
|
|
126
|
+
result = t('muck.users.username_available')
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
respond_to do |format|
|
|
130
|
+
format.html { render :text => result}
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def is_email_available
|
|
135
|
+
# TODO add in link to let the user recover their password
|
|
136
|
+
#recover_password_prompt = link_to(t('muck.users.recover_password_prompt'), reset_password_path)
|
|
137
|
+
recover_password_prompt = ''
|
|
138
|
+
result = t('muck.users.email_not_available', :reset_password_help => recover_password_prompt)
|
|
139
|
+
|
|
140
|
+
if params[:user_email] && params[:user_email].length <= 0
|
|
141
|
+
result = ''
|
|
142
|
+
elsif !User.email_exists?(params[:user_email])
|
|
143
|
+
result = t('muck.users.email_available')
|
|
144
|
+
end
|
|
145
|
+
respond_to do |format|
|
|
146
|
+
format.html { render :text => result}
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
protected
|
|
151
|
+
|
|
152
|
+
def standard_response(template)
|
|
153
|
+
respond_to do |format|
|
|
154
|
+
format.html { render :template => "users/#{template}" }
|
|
155
|
+
format.xml { render :xml => @user }
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def after_create_response(success, local_uri = '')
|
|
160
|
+
if success
|
|
161
|
+
respond_to do |format|
|
|
162
|
+
format.html { redirect_to local_uri }
|
|
163
|
+
format.xml { render :xml => @user, :status => :created, :location => user_url(@user) }
|
|
164
|
+
end
|
|
165
|
+
else
|
|
166
|
+
respond_to do |format|
|
|
167
|
+
format.html { render :template => "users/new" }
|
|
168
|
+
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def after_update_response(success)
|
|
174
|
+
if success
|
|
175
|
+
respond_to do |format|
|
|
176
|
+
format.html do
|
|
177
|
+
get_redirect_to do
|
|
178
|
+
redirect_to admin? ? profile_path(@user) : user_path(@user)
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
format.xml{ head :ok }
|
|
182
|
+
end
|
|
183
|
+
else
|
|
184
|
+
respond_to do |format|
|
|
185
|
+
format.html { render :template => 'users/edit' }
|
|
186
|
+
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def after_destroy_response
|
|
192
|
+
respond_to do |format|
|
|
193
|
+
format.html do
|
|
194
|
+
get_redirect_to do
|
|
195
|
+
redirect_to(root_url)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
format.xml { head :ok }
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def permission_denied
|
|
203
|
+
flash[:notice] = t('muck.users.permission_denied')
|
|
204
|
+
respond_to do |format|
|
|
205
|
+
format.html do
|
|
206
|
+
redirect_to user_path(current_user)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
class MuckUserMailer < ActionMailer::Base
|
|
2
|
+
unloadable
|
|
3
|
+
|
|
4
|
+
default_url_options[:host] = GlobalConfig.application_url
|
|
5
|
+
|
|
6
|
+
def activation_confirmation(user)
|
|
7
|
+
setup_email(user)
|
|
8
|
+
subject I18n.t('muck.users.activation_complete')
|
|
9
|
+
body :user => user
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def activation_instructions(user)
|
|
13
|
+
setup_email(user)
|
|
14
|
+
subject I18n.t('muck.users.activation_instructions')
|
|
15
|
+
body :user => user,
|
|
16
|
+
:account_activation_url => activate_url(user.perishable_token)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def password_not_active_instructions(user)
|
|
20
|
+
setup_email(user)
|
|
21
|
+
subject I18n.t('muck.users.account_not_activated', :application_name => GlobalConfig.application_name)
|
|
22
|
+
body :user => user
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def password_reset_instructions(user)
|
|
26
|
+
setup_email(user)
|
|
27
|
+
subject I18n.t('muck.users.password_reset_email_subject', :application_name => GlobalConfig.application_name)
|
|
28
|
+
body :user => user
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def welcome_notification(user)
|
|
32
|
+
setup_email(user)
|
|
33
|
+
subject I18n.t('muck.users.welcome_email_subject', :application_name => GlobalConfig.application_name)
|
|
34
|
+
body :login => user.login,
|
|
35
|
+
:application_name => GlobalConfig.application_name
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def username_request(user)
|
|
39
|
+
setup_email(user)
|
|
40
|
+
subject I18n.t('muck.users.request_username_subject', :application_name => GlobalConfig.application_name)
|
|
41
|
+
body :login => user.login,
|
|
42
|
+
:application_name => GlobalConfig.application_name
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
protected
|
|
46
|
+
def setup_email(user)
|
|
47
|
+
@recipients = "#{user.email}"
|
|
48
|
+
@from = "#{GlobalConfig.from_email}"
|
|
49
|
+
@sent_on = Time.now
|
|
50
|
+
@body[:user] = user
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# == Schema Information
|
|
2
|
+
#
|
|
3
|
+
# Table name: permissions
|
|
4
|
+
#
|
|
5
|
+
# id :integer(4) not null, primary key
|
|
6
|
+
# role_id :integer(4) not null
|
|
7
|
+
# user_id :integer(4) not null
|
|
8
|
+
# created_at :datetime
|
|
9
|
+
# updated_at :datetime
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
class Permission < ActiveRecord::Base
|
|
13
|
+
unloadable
|
|
14
|
+
|
|
15
|
+
belongs_to :user
|
|
16
|
+
belongs_to :role
|
|
17
|
+
end
|
data/app/models/role.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# == Schema Information
|
|
2
|
+
#
|
|
3
|
+
# Table name: roles
|
|
4
|
+
#
|
|
5
|
+
# id :integer(4) not null, primary key
|
|
6
|
+
# rolename :string(255)
|
|
7
|
+
# created_at :datetime
|
|
8
|
+
# updated_at :datetime
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
class Role < ActiveRecord::Base
|
|
12
|
+
unloadable
|
|
13
|
+
|
|
14
|
+
has_many :permissions
|
|
15
|
+
has_many :users, :through => :permissions
|
|
16
|
+
|
|
17
|
+
validates_presence_of :rolename
|
|
18
|
+
|
|
19
|
+
# roles can be defined as symbols. We want to store them as strings in the database
|
|
20
|
+
def rolename= val
|
|
21
|
+
write_attribute(:rolename, val.to_s)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<li>
|
|
2
|
+
<%= role.rolename %>
|
|
3
|
+
<% if @user.has_role?(role.rolename) %>
|
|
4
|
+
<%= link_to I18n.t('muck.roles.remove_role'), user_role_url(:id => role.id, :user_id => @user.id), :method => :delete %>
|
|
5
|
+
<% else %>
|
|
6
|
+
<%= link_to I18n.t('muck.roles.assign_role'), user_role_url(:id => role.id, :user_id => @user.id), :method => :put %>
|
|
7
|
+
<% end %>
|
|
8
|
+
</li>
|
|
9
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<h1><%= I18n.t('Editing role') %></h1>
|
|
2
|
+
|
|
3
|
+
<%= error_messages_for :role %>
|
|
4
|
+
|
|
5
|
+
<% form_for(admin_roles_path(@role)) do |f| %>
|
|
6
|
+
<p>
|
|
7
|
+
<b><%= I18n.t('Rolename') %></b><br />
|
|
8
|
+
<%= f.text_field :rolename %>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p>
|
|
12
|
+
<%= f.submit I18n.t('Update') %>
|
|
13
|
+
</p>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<%= link_to I18n.t('Show'), @role %> |
|
|
17
|
+
<%= link_to I18n.t('Back'), admin_roles_path %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<h2><%= I18n.t('Roles for %{user}') % {:user => h(@user.login.capitalize)} %></h2>
|
|
2
|
+
|
|
3
|
+
<h3><%= I18n.t('Roles assigned:') %></h3>
|
|
4
|
+
<ul><%= render :partial => 'role', :collection => @user.roles %></ul>
|
|
5
|
+
|
|
6
|
+
<h3><%= I18n.t('Roles available:') %></h3>
|
|
7
|
+
<ul><%= render :partial => 'role', :collection => (@all_roles - @user.roles) %></ul>
|
|
8
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<h1><%= I18n.t('New role') %></h1>
|
|
2
|
+
|
|
3
|
+
<%= error_messages_for :role %>
|
|
4
|
+
|
|
5
|
+
<% form_for @role, :url => admin_role_path(@role) do |f| %>
|
|
6
|
+
<p>
|
|
7
|
+
<b><%= I18n.t('Rolename') %></b><br />
|
|
8
|
+
<%= f.text_field :rolename %>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p>
|
|
12
|
+
<%= f.submit I18n.t('Create') %>
|
|
13
|
+
</p>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<%= link_to I18n.t('Back'), admin_roles_path %>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<% if user.active? -%>
|
|
2
|
+
<%= link_to_remote I18n.t('muck.general.deactivate'), { :url => admin_user_path(user, :format => 'js'), :method => :put } -%>
|
|
3
|
+
<% else -%>
|
|
4
|
+
<%= link_to_remote I18n.t('muck.general.activate'), { :url => admin_user_path(user, :format => 'js'), :method => :put } -%>
|
|
5
|
+
<% end -%>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<div id="ajax_search_box" class="box" style="display: none;" >
|
|
2
|
+
<% form_remote_tag :action => 'ajax_search', :url => '/admin/users/ajax_search', :update => "manage" do %>
|
|
3
|
+
<%= text_field_tag :query, '', :class => 'span-5' %>
|
|
4
|
+
<%= submit_tag t("muck.users.admin.search_users") %>
|
|
5
|
+
<% end %>
|
|
6
|
+
</div>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<tr id="<%=user.dom_id('row')%>" class="<%= cycle('odd','even') %>">
|
|
2
|
+
<td><%= link_to h(user.full_name), user %></td>
|
|
3
|
+
<td><%= mail_to h(user.email), user.email %></td>
|
|
4
|
+
<td id="<%=user.dom_id('link')%>"><%= render :partial => 'admin/users/activate', :locals => { :user => user } %></td>
|
|
5
|
+
<td><%= link_to_remote t("muck.general.delete"), { :url => admin_user_path(user.id), :method => :delete }, { :title => t('muck.users.delete_this_user'), :class => 'delete-user' } -%></td>
|
|
6
|
+
</tr>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<table id="manage" class="manage">
|
|
2
|
+
<thead>
|
|
3
|
+
<tr>
|
|
4
|
+
<th><%= t('muck.users.name') %></th>
|
|
5
|
+
<th><%= t('muck.users.email_address') %></th>
|
|
6
|
+
<th></th>
|
|
7
|
+
<th></th>
|
|
8
|
+
</tr>
|
|
9
|
+
</thead>
|
|
10
|
+
<tbody>
|
|
11
|
+
<%= render :partial => 'admin/users/row', :collection => @users, :as => :user %>
|
|
12
|
+
</tbody>
|
|
13
|
+
</table>
|
|
14
|
+
<%= will_paginate @users %>
|
|
15
|
+
<script type="text/javascript" language="JavaScript">
|
|
16
|
+
jQuery(document).ready(function() {
|
|
17
|
+
jQuery(".delete-user").click(function() {
|
|
18
|
+
jQuery(this).parent().html('deleting user...');
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% content_for :sidebar do -%>
|
|
2
|
+
<%= render :partial => 'admin/users/search_box' -%>
|
|
3
|
+
<%= render :partial => 'admin/users/ajax_search_box' -%>
|
|
4
|
+
<div id="user-navigation" class="box">
|
|
5
|
+
<ul>
|
|
6
|
+
<li><%= link_to t("muck.users.navigation.all_users"), admin_users_path %></li>
|
|
7
|
+
<li><%= link_to t("muck.users.navigation.inactive_users"), inactive_admin_users_path %></li>
|
|
8
|
+
<li><%= link_to t("muck.users.navigation.search_users"), search_admin_users_path %></li>
|
|
9
|
+
</ul>
|
|
10
|
+
</div>
|
|
11
|
+
<% end -%>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%= render :partial => 'admin/users/user_navigation' -%>
|
|
2
|
+
<div>
|
|
3
|
+
<h2><%= t('muck.users.admin.unactivated_users', :count => @user_inactive_count) %>
|
|
4
|
+
<span class="link-button"><%= link_to t('muck.users.admin.activate_all_inactive_users'), activate_all_admin_users_path, :confirm => t('muck.users.admin.activate_all_inactive_users_confirm') %></span>
|
|
5
|
+
<span class="link-button"><%= link_to t('muck.users.admin.show_emails'), inactive_emails_admin_users_path %></span>
|
|
6
|
+
</h2>
|
|
7
|
+
<%= render :partial => 'admin/users/table' -%>
|
|
8
|
+
</div>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%= render :partial => 'admin/users/user_navigation' -%>
|
|
2
|
+
<div id="inactive-emails" class="activity_box">
|
|
3
|
+
<h2><%= I18n.t("Inactive User's Emails (%{count} total)") % {:count => @user_inactive_count} %></h2>
|
|
4
|
+
<textarea id="user-emails"><%= @users.collect{|user| user.email}.join(', ') -%></textarea>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%= render :partial => 'admin/users/user_navigation' -%>
|
|
2
|
+
<div>
|
|
3
|
+
<h2><%= t('muck.users.admin_users_title') %></h2>
|
|
4
|
+
<%= render :partial => 'admin/users/table' -%>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<script type="text/javascript" language="JavaScript">
|
|
8
|
+
jQuery(document).ready(function() {
|
|
9
|
+
jQuery("#search_box").hide();
|
|
10
|
+
jQuery("#ajax_search_box").show();
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Welcome <%= h(@user.login) %>,
|
|
2
|
+
|
|
3
|
+
Thank you for creating an account! Click the url below to activate your account!
|
|
4
|
+
|
|
5
|
+
<%= @account_activation_url %>
|
|
6
|
+
|
|
7
|
+
If the above URL does not work try copying and pasting it into your browser. If you continue to have problem, please feel free to contact us.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Hello <%= h(@user.login) %>,
|
|
2
|
+
|
|
3
|
+
A request to reset your password has been made.
|
|
4
|
+
If you did not make this request, simply ignore this email.
|
|
5
|
+
|
|
6
|
+
Your account has not yet been activated. Simply click the url below to activate your account. After that you may change your password to something that is easy to remember.
|
|
7
|
+
|
|
8
|
+
<%= activate_url(@user.perishable_token) %>
|
|
9
|
+
|
|
10
|
+
If the above URL does not work try copying and pasting it into your browser. If you continue to have problem, please feel free to contact us.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Hello <%= h(@user.login) %>,
|
|
2
|
+
|
|
3
|
+
A request to reset your password has been made.
|
|
4
|
+
If you did not make this request, simply ignore this email.
|
|
5
|
+
If you did make this request just click the link below:
|
|
6
|
+
|
|
7
|
+
<%= reset_password_url(@user.perishable_token) %>
|
|
8
|
+
|
|
9
|
+
If the above URL does not work try copying and pasting it into your browser.
|
|
10
|
+
If you continue to have problem please feel free to contact us.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div id="reset-password-confirm" class="common-form">
|
|
2
|
+
<h1><%= t('muck.users.select_new_password') %></h1>
|
|
3
|
+
<%= output_errors(t('muck.users.select_new_password'), {:class => 'help-box'}) %>
|
|
4
|
+
<% custom_form_for :reset_password, :url => password_resets_path, :html => {:method => :put} do |f| -%>
|
|
5
|
+
<%= f.text_field :password, { :label => t('muck.users.password'), :hide_required => true } -%>
|
|
6
|
+
<%= f.text_field :password_confirmation, { :label => t('muck.users.confirm_password'), :hide_required => true } -%>
|
|
7
|
+
<%= submit_tag t('muck.users.confirm_select_new_password') %>
|
|
8
|
+
<% end -%>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<div id="reset-password" class="common-form">
|
|
2
|
+
<h1><%= t('muck.users.forgot_password') %></h1>
|
|
3
|
+
<%= output_errors(t('muck.users.reset_password'), {:class => 'help-box'}) %>
|
|
4
|
+
<% custom_form_for :reset_password, :url => password_resets_path do |f| -%>
|
|
5
|
+
<p><%= t('muck.users.email_recover_prompt') %></p>
|
|
6
|
+
<%= f.text_field :email, { :label => t('muck.users.email_address'), :hide_required => true } -%>
|
|
7
|
+
<div class="button form-row">
|
|
8
|
+
<%= submit_tag t('muck.users.reset_password') %>
|
|
9
|
+
</div>
|
|
10
|
+
<% end -%>
|
|
11
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<div id="sign_in" class="common-form">
|
|
2
|
+
<% custom_form_for @user_session, :url => user_session_path do |f| -%>
|
|
3
|
+
<h1><%= I18n.t('muck.users.login_title') %></h1>
|
|
4
|
+
<%= output_errors(t('muck.users.login_fail'), {:class => 'help-box'}) %>
|
|
5
|
+
<%= f.text_field :login, { :label => I18n.t('muck.users.username'), :hide_required => true, :hide_control_error => true } -%>
|
|
6
|
+
<%= f.password_field :password, { :label => I18n.t('muck.users.password'), :hide_required => true, :hide_control_error => true } -%>
|
|
7
|
+
<%= f.check_box :remember_me, { :label => I18n.t('muck.users.remember_me'), :hide_required => true, :hide_control_error => true } %>
|
|
8
|
+
<div class="button form-row">
|
|
9
|
+
<%= submit_tag I18n.t('muck.users.sign_in') %>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="form-row">
|
|
12
|
+
<span class="instruction"><%= link_to I18n.t('muck.users.register_for_account'), signup_url %></span> |
|
|
13
|
+
<span class="instruction"><%= link_to I18n.t('muck.users.forgot_your_password'), forgot_password_path %></span> |
|
|
14
|
+
<span class="instruction"><%= link_to I18n.t('muck.users.forgot_your_username'), forgot_username_path %></span>
|
|
15
|
+
</div>
|
|
16
|
+
<% end %>
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<div id="request-username" class="common-form">
|
|
2
|
+
<h1><%= t('muck.users.forgot_username') %></h1>
|
|
3
|
+
<%= output_errors(t('muck.users.request_username'), {:class => 'help-box'}) %>
|
|
4
|
+
<% custom_form_for :request_username, :url => username_request_path do |f| -%>
|
|
5
|
+
<p><%= t('muck.users.username_recover_prompt') %></p>
|
|
6
|
+
<%= f.text_field :email, { :label => t('muck.users.email_address'), :hide_required => true } -%>
|
|
7
|
+
<div class="button form-row">
|
|
8
|
+
<%= submit_tag t('muck.users.request_username') %>
|
|
9
|
+
</div>
|
|
10
|
+
<% end -%>
|
|
11
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<tr class="<%= cycle('odd', 'even') %>">
|
|
2
|
+
<td><%=h user.login %></td>
|
|
3
|
+
<td><%=h user.email %></td>
|
|
4
|
+
<td><%= user.enabled ? I18n.t('muck.general.yes') : I18n.t('muck.general.no') %>
|
|
5
|
+
<% unless user == current_user %>
|
|
6
|
+
<% if user.enabled %>
|
|
7
|
+
<%= link_to(I18n.t('muck.general.disable'), user_path(user.id), :method => :delete) %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<%= link_to(I18n.t('muck.general.enable'), enable_user_path(user.id), :method => :put) %>
|
|
10
|
+
<% end %>
|
|
11
|
+
<% end %>
|
|
12
|
+
</td>
|
|
13
|
+
<td><%= link_to I18n.t('muck.roles.edit_roles'), user_admin_roles_path(user) %>]</td>
|
|
14
|
+
</tr>
|
|
15
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Thank you for activating your account
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
You will receive an email with instructions on how to activate your account.
|