muck-users 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/controllers/admin/muck/access_codes_controller.rb +46 -21
- data/app/controllers/admin/muck/roles_controller.rb +2 -2
- data/app/controllers/admin/muck/users_controller.rb +5 -8
- data/app/views/admin/access_codes/_access_code.html.erb +3 -1
- data/app/views/admin/access_codes/ajax_create_access_code.js.erb +2 -0
- data/app/views/admin/access_codes/ajax_update_access_code.js.erb +2 -0
- data/app/views/admin/access_codes/bulk.html.erb +20 -7
- data/app/views/admin/access_codes/destroy.js.erb +2 -0
- data/app/views/admin/access_codes/edit.html.erb +1 -1
- data/app/views/admin/access_codes/index.html.erb +9 -4
- data/app/views/admin/access_codes/new.html.erb +1 -1
- data/app/views/admin/access_codes/show.html.erb +1 -1
- data/app/views/admin/roles/_role.html.erb +1 -1
- data/app/views/admin/roles/destroy.js.erb +2 -2
- data/app/views/admin/roles/index.html.erb +1 -3
- data/app/views/admin/roles/show.html.erb +1 -2
- data/app/views/admin/users/permissions.html.erb +1 -1
- data/app/views/admin/users/update_activate.js.erb +2 -0
- data/app/views/admin/users/update_permissions.js.erb +2 -1
- data/lib/active_record/acts/muck_access_code.rb +10 -0
- data/locales/en.yml +18 -4
- data/muck-users.gemspec +6 -2
- data/test/rails_root/public/javascripts/jquery/jquery.tips.js +2 -2
- data/test/rails_root/public/javascripts/muck.js +15 -8
- data/test/rails_root/public/stylesheets/admin.css +5 -2
- data/test/rails_root/public/stylesheets/styles.css +1 -1
- metadata +6 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.3
|
@@ -12,16 +12,15 @@ class Admin::Muck::AccessCodesController < Admin::Muck::BaseController
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def new
|
15
|
-
render :template => 'admin/access_codes/new'
|
15
|
+
render :template => 'admin/access_codes/new', :layout => false
|
16
16
|
end
|
17
17
|
|
18
18
|
def create
|
19
19
|
@access_code = AccessCode.new(params[:access_code])
|
20
20
|
if @access_code.save
|
21
|
-
|
22
|
-
redirect_to admin_access_code_path(@access_code)
|
21
|
+
ajax_create_access_code
|
23
22
|
else
|
24
|
-
|
23
|
+
output_admin_messages(@access_code)
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
@@ -32,47 +31,73 @@ class Admin::Muck::AccessCodesController < Admin::Muck::BaseController
|
|
32
31
|
end
|
33
32
|
|
34
33
|
def bulk_create
|
35
|
-
|
34
|
+
@access_code = AccessCode.new(params[:access_code])
|
35
|
+
@access_code.bulk_valid?
|
36
|
+
emails = @access_code.emails.split(',')
|
37
|
+
use_random_code = @access_code.code.blank?
|
36
38
|
emails.each do |email|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
if use_random_code
|
40
|
+
# need to build a new access code for each email
|
41
|
+
@access_code = AccessCode.new(params[:access_code])
|
42
|
+
@access_code.unlimited = false
|
43
|
+
@access_code.use_limit = 1
|
44
|
+
@access_code.uses = 0
|
45
|
+
@access_code.code = AccessCode.random_code
|
46
|
+
@access_code.save!
|
47
|
+
end
|
48
|
+
UserMailer.deliver_access_code(email, @access_code.subject, @access_code.message, @access_code.code)
|
44
49
|
end
|
45
50
|
flash[:notice] = translate('muck.users.bulk_access_codes_created', :email_count => emails.count)
|
46
|
-
redirect_to bulk_create_admin_access_codes_path
|
51
|
+
redirect_to bulk_create_admin_access_codes_path
|
52
|
+
|
47
53
|
rescue ActiveRecord::RecordInvalid => ex
|
48
54
|
render :template => "admin/access_codes/bulk"
|
49
55
|
end
|
50
56
|
|
51
57
|
def edit
|
52
|
-
render :template => "admin/access_codes/edit"
|
58
|
+
render :template => "admin/access_codes/edit", :layout => false
|
53
59
|
end
|
54
60
|
|
55
61
|
def update
|
56
62
|
if @access_code.update_attributes(params[:access_code])
|
57
|
-
|
63
|
+
ajax_update_access_code
|
58
64
|
else
|
59
|
-
|
60
|
-
render :template => "admin/access_codes/edit"
|
65
|
+
output_admin_messages(@access_code)
|
61
66
|
end
|
62
67
|
end
|
63
68
|
|
64
69
|
def destroy
|
65
70
|
if @access_code.users.length <= 0
|
66
|
-
@access_code.destroy
|
67
|
-
flash[:notice] =
|
71
|
+
success = @access_code.destroy
|
72
|
+
flash[:notice] = translate('muck.users.access_code_delete_error') unless success
|
68
73
|
else
|
69
|
-
flash[:notice] =
|
74
|
+
flash[:notice] = translate('muck.users.access_code_delete_problem')
|
75
|
+
end
|
76
|
+
respond_to do |format|
|
77
|
+
format.html { redirect_to admin_access_codes_path }
|
78
|
+
format.js do
|
79
|
+
if success
|
80
|
+
render :template => 'admin/access_codes/destroy', :layout => false
|
81
|
+
else
|
82
|
+
output_admin_messages
|
83
|
+
end
|
84
|
+
end
|
70
85
|
end
|
71
|
-
|
86
|
+
|
72
87
|
end
|
73
88
|
|
74
89
|
protected
|
90
|
+
|
75
91
|
def setup_access_code
|
76
92
|
@access_code = AccessCode.find(params[:id])
|
77
93
|
end
|
94
|
+
|
95
|
+
def ajax_update_access_code
|
96
|
+
render :template => 'admin/access_codes/ajax_update_access_code'
|
97
|
+
end
|
98
|
+
|
99
|
+
def ajax_create_access_code
|
100
|
+
render :template => 'admin/access_codes/ajax_create_access_code'
|
101
|
+
end
|
102
|
+
|
78
103
|
end
|
@@ -46,7 +46,7 @@ class Admin::Muck::RolesController < Admin::Muck::BaseController
|
|
46
46
|
flash[:notice] = translate('muck.users.cant_delete_administrator_role')
|
47
47
|
output_admin_messages
|
48
48
|
else
|
49
|
-
success = @role.
|
49
|
+
success = @role.destroy
|
50
50
|
flash[:notice] = translate('muck.users.role_not_deleted') if !success
|
51
51
|
|
52
52
|
respond_to do |format|
|
@@ -57,7 +57,7 @@ class Admin::Muck::RolesController < Admin::Muck::BaseController
|
|
57
57
|
format.xml { head :ok }
|
58
58
|
format.js do
|
59
59
|
if success
|
60
|
-
render :
|
60
|
+
render :template => 'admin/roles/destroy', :layout => false
|
61
61
|
else
|
62
62
|
output_admin_messages
|
63
63
|
end
|
@@ -89,7 +89,7 @@ class Admin::Muck::UsersController < Admin::Muck::BaseController
|
|
89
89
|
else
|
90
90
|
params[:user][:role_ids] ||= []
|
91
91
|
if @user.update_attributes(params[:user])
|
92
|
-
return update_permissions(
|
92
|
+
return update_permissions #(translate('muck.users.updated_permissions'))
|
93
93
|
end
|
94
94
|
end
|
95
95
|
flash[:notice] = message
|
@@ -125,7 +125,7 @@ class Admin::Muck::UsersController < Admin::Muck::BaseController
|
|
125
125
|
redirect_to admin_users_path
|
126
126
|
end
|
127
127
|
format.xml { head :ok }
|
128
|
-
format.js { render :js => "
|
128
|
+
format.js { render :js => "jQuery('##{@user.dom_id('row')}').fadeOut();" }
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -135,17 +135,14 @@ class Admin::Muck::UsersController < Admin::Muck::BaseController
|
|
135
135
|
|
136
136
|
protected
|
137
137
|
|
138
|
-
def update_permissions(
|
139
|
-
flash[:notice] = message
|
138
|
+
def update_permissions(message = '')
|
139
|
+
flash[:notice] = message unless message.blank?
|
140
140
|
render :template => 'admin/users/update_permissions', :layout => false
|
141
141
|
end
|
142
142
|
|
143
143
|
def update_activate(message)
|
144
144
|
flash[:notice] = message
|
145
|
-
render :
|
146
|
-
page.replace_html 'admin-messages', output_flash
|
147
|
-
page.replace_html @user.dom_id('link'), :partial => 'admin/users/activate', :locals => { :user => @user }
|
148
|
-
end
|
145
|
+
render :template => 'admin/users/update_activate', :layout => false
|
149
146
|
end
|
150
147
|
|
151
148
|
def get_user
|
@@ -1,8 +1,10 @@
|
|
1
|
-
<tr>
|
1
|
+
<tr id="<%=access_code.dom_id('row')%>">
|
2
2
|
<td><%= link_to access_code.code, admin_access_code_path(access_code) %></td>
|
3
3
|
<td><%= access_code.uses %></td>
|
4
4
|
<td><%= access_code.use_limit %></td>
|
5
5
|
<td><%= access_code.unlimited %></td>
|
6
6
|
<td><%= format_date(access_code.expires_at) %></td>
|
7
7
|
<td><%= format_date(access_code.created_at) %></td>
|
8
|
+
<td><%= link_to(translate('muck.users.edit'), edit_admin_access_code_path(access_code.id), { :class => 'dialog-pop', :title => translate('muck.users.edit_access_code_title') }) %></td>
|
9
|
+
<td><%= link_to(translate('muck.users.delete'), admin_access_code_path(access_code.id), :class => 'ajax-delete', :title => translate('muck.users.access_code_delete_confirm')) %></td>
|
8
10
|
</tr>
|
@@ -1,12 +1,25 @@
|
|
1
1
|
<h2><%=translate('muck.users.bulk_access_codes_title') %></h2>
|
2
2
|
<p><%=translate('muck.users.bulk_access_codes_description') %></p>
|
3
|
-
|
4
3
|
<%= output_errors(translate('muck.users.bulk_access_code_problem'), {:class => 'help-box'}, @access_code) %>
|
5
|
-
|
6
4
|
<% custom_form_for :access_code, :url => bulk_create_admin_access_codes_path, :html => {:class => "standard-form alt"} do |f| -%>
|
7
|
-
<%=
|
8
|
-
|
9
|
-
|
10
|
-
<%=
|
5
|
+
<%= f.text_field :code, { :label => translate('muck.users.access_code'),
|
6
|
+
:tip => translate('muck.users.bulk_access_code_tip'),
|
7
|
+
:hide_required => true } -%>
|
8
|
+
<%= f.text_field :use_limit, { :label => translate('muck.users.use_limit'),
|
9
|
+
:tip => translate('muck.users.use_limit_tip') } -%>
|
10
|
+
<%= f.check_box :unlimited, { :label => translate('muck.users.unlimited'),
|
11
|
+
:tip => translate('muck.users.unlimited_tip') } -%>
|
12
|
+
<%= f.text_field :expires_at, { :label => translate('muck.users.expiration_date'),
|
13
|
+
:tip => translate('muck.users.expiration_date_tip'),
|
14
|
+
:class => 'date_pick' } -%>
|
15
|
+
<%= f.text_field :subject, { :label => translate('muck.users.bulk_access_code_subject') } -%>
|
16
|
+
<%= f.text_area :message, { :label => translate('muck.users.bulk_access_code_message') } -%>
|
17
|
+
<%= f.text_area :emails, { :label => translate('muck.users.bulk_access_code_emails'),
|
18
|
+
:tip => translate('muck.users.bulk_access_code_emails_tip') } -%>
|
11
19
|
<%= f.submit translate('muck.users.save') %>
|
12
|
-
<% end -%>
|
20
|
+
<% end -%>
|
21
|
+
<script type="text/javascript" language="JavaScript">
|
22
|
+
jQuery(document).ready(function(){
|
23
|
+
jQuery('.date_pick').datepicker();
|
24
|
+
});
|
25
|
+
</script>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<h3><%=translate('muck.users.edit_access_code') %></h3>
|
2
2
|
<%= output_errors(translate('muck.users.access_code_edit_problem'), {:class => 'help-box'}, @access_code) %>
|
3
|
-
<% custom_form_for @access_code, :url => admin_access_code_path(@access_code), :html => { :method => :put } do |f| -%>
|
3
|
+
<% custom_form_for @access_code, :url => admin_access_code_path(@access_code), :html => { :method => :put, :class => 'ajax' } do |f| -%>
|
4
4
|
<%= render :partial => 'admin/access_codes/form', :locals => { :f => f } %>
|
5
5
|
<%= f.submit translate('muck.users.save') %>
|
6
6
|
<% end -%>
|
@@ -1,7 +1,8 @@
|
|
1
1
|
<h2><%=translate('muck.users.access_codes') %></h2>
|
2
|
-
<
|
3
|
-
<%= link_to translate('muck.users.access_code_new'), new_admin_access_code_path %>
|
4
|
-
|
2
|
+
<p>
|
3
|
+
<%= link_to translate('muck.users.access_code_new'), new_admin_access_code_path, { :class => 'dialog-pop', :title => translate('muck.users.add_access_code_title') } %>
|
4
|
+
<%= link_to translate('muck.users.bulk_access_codes'), bulk_admin_access_codes_path %>
|
5
|
+
</p>
|
5
6
|
<table class="adminTable" cellspacing="0" cellpadding="0">
|
6
7
|
<thead>
|
7
8
|
<tr>
|
@@ -11,8 +12,12 @@
|
|
11
12
|
<th><%=translate('muck.users.access_code_unlimited') %></th>
|
12
13
|
<th><%=translate('muck.users.access_code_expires') %></th>
|
13
14
|
<th><%=translate('muck.users.access_code_created') %></th>
|
15
|
+
<th></th>
|
16
|
+
<th></th>
|
14
17
|
</tr>
|
15
18
|
</thead>
|
16
|
-
|
19
|
+
<tbody id="current-access-codes">
|
20
|
+
<%= render :partial => 'admin/access_codes/access_code', :collection => @codes %>
|
21
|
+
</tbody>
|
17
22
|
</table>
|
18
23
|
<%= will_paginate @codes %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<h3><%=translate('muck.users.add_access_code') %></h3>
|
2
2
|
<%= output_errors(translate('muck.users.access_code_add_problem'), {:class => 'help-box'}, @access_code) %>
|
3
|
-
<% custom_form_for :access_code, :url => admin_access_codes_path do |f| -%>
|
3
|
+
<% custom_form_for :access_code, :url => admin_access_codes_path, :html => { :class => 'ajax' } do |f| -%>
|
4
4
|
<%= render :partial => 'admin/access_codes/form', :locals => {:f => f} %>
|
5
5
|
<%= f.submit translate('muck.users.save') %>
|
6
6
|
<% end -%>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<h2><%=translate('muck.users.access_code') %></h2>
|
2
2
|
<%= link_to(translate('muck.users.access_code_edit_link'), edit_admin_access_code_path(@access_code.id)) %>
|
3
|
-
<%= link_to(translate('muck.users.access_code_delete_link'), admin_access_code_path(@access_code.id), :
|
3
|
+
<%= link_to(translate('muck.users.access_code_delete_link'), admin_access_code_path(@access_code.id), :class => 'ajax-delete', :title => translate('muck.users.access_code_delete_confirm')) %>
|
4
4
|
|
5
5
|
<table class="adminTable" cellspacing="0" cellpadding="0">
|
6
6
|
<thead>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<tr id="<%=role.dom_id%>">
|
2
2
|
<td><%= link_to(role.rolename, admin_role_path(role)) %></td>
|
3
3
|
<td><%= link_to(translate('muck.users.edit'), edit_admin_role_path(role), { :class => 'dialog-pop', :title => translate('muck.users.edit_role_dialog_title') } ) %></td>
|
4
|
-
<td><%= link_to(translate('muck.users.delete'), admin_role_path(role), { :class => 'ajax-delete', :
|
4
|
+
<td><%= link_to(translate('muck.users.delete'), admin_role_path(role), { :class => 'ajax-delete', :title => translate('muck.users.role_delete_confirm') } ) %></td>
|
5
5
|
</tr>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
jQuery('#<%=@role.dom_id%>').fadeOut();
|
2
|
+
<%= hide_admin_messages %>
|
@@ -1,7 +1,5 @@
|
|
1
1
|
<h2><%=translate('muck.users.roles') %></h2>
|
2
|
-
<p>
|
3
|
-
<%= link_to translate('muck.users.add_role'), new_admin_role_path, { :class => 'dialog-pop', :title => translate('muck.users.add_role_dialog_title') } %>
|
4
|
-
</p>
|
2
|
+
<p><%= link_to translate('muck.users.add_role'), new_admin_role_path, { :class => 'dialog-pop', :title => translate('muck.users.add_role_dialog_title') } %></p>
|
5
3
|
<table class="adminTable">
|
6
4
|
<thead>
|
7
5
|
<tr>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% custom_form_for @user, :url => admin_user_path(@user), :html => { :class => 'ajax', :method => :put } do |f| %>
|
2
|
-
<ul class="checkbox-list">
|
2
|
+
<ul class="admin-list checkbox-list">
|
3
3
|
<% Role.all.each do |role| -%>
|
4
4
|
<li><%= check_box_tag "user[role_ids][]", role.id, @user.has_role?(role.rolename) -%> <%= role.rolename -%></li>
|
5
5
|
<% end -%>
|
@@ -1,2 +1,3 @@
|
|
1
1
|
jQuery('.dialog').dialog('close');
|
2
|
-
jQuery('#<%= user.dom_id('permissions') %>').html('<%= escape_javascript(render(:partial => 'admin/permissions/permission', :collection => user.permissions, :locals => { :user => user })) %>');
|
2
|
+
jQuery('#<%= @user.dom_id('permissions') %>').html('<%= escape_javascript(render(:partial => 'admin/permissions/permission', :collection => @user.permissions, :locals => { :user => @user })) %>');
|
3
|
+
<%= output_admin_messages(@user) %>
|
@@ -18,6 +18,9 @@ module ActiveRecord
|
|
18
18
|
named_scope :by_alpha, :order => 'access_codes.code ASC'
|
19
19
|
named_scope :active, :conditions => 'access_codes.expires_at > Now() AND access_codes.uses <= use_limit'
|
20
20
|
|
21
|
+
# Used to make bulk access code easier to deal with
|
22
|
+
attr_accessor :emails, :subject, :message
|
23
|
+
|
21
24
|
include ActiveRecord::Acts::MuckAccessCode::InstanceMethods
|
22
25
|
extend ActiveRecord::Acts::MuckAccessCode::SingletonMethods
|
23
26
|
|
@@ -53,6 +56,13 @@ module ActiveRecord
|
|
53
56
|
|
54
57
|
module InstanceMethods
|
55
58
|
|
59
|
+
def bulk_valid?
|
60
|
+
errors.add(:emails, I18n.translate('muck.users.validation_are_required')) if self.emails.blank?
|
61
|
+
errors.add(:subject, I18n.translate('muck.users.validation_is_required')) if self.subject.blank?
|
62
|
+
errors.add(:message, I18n.translate('muck.users.validation_is_required')) if self.message.blank?
|
63
|
+
raise RecordInvalid.new(self) if !errors.empty?
|
64
|
+
end
|
65
|
+
|
56
66
|
def use_code
|
57
67
|
self.update_attribute(:uses, self.uses + 1)
|
58
68
|
end
|
data/locales/en.yml
CHANGED
@@ -21,6 +21,7 @@ en:
|
|
21
21
|
login_success: Login successful!
|
22
22
|
change_password: Change Password
|
23
23
|
add_user_to_role: Add User to Role
|
24
|
+
add_access_code_title: Add Access Code
|
24
25
|
terms_and_service: By clicking 'Sign-up Now' you agree to comply with the {{tos_link_anchor}}Terms and Conditions{{link_end}}.
|
25
26
|
password_reset_link_sent: Instructions to reset your password have been emailed to you. Please check your email.
|
26
27
|
deleting_user: deleting user...
|
@@ -29,28 +30,35 @@ en:
|
|
29
30
|
login_requred: You must be logged in to access this feature.
|
30
31
|
recover_password: Recover Password
|
31
32
|
confirm_delete_account: Are you sure you want to delete your account?\nThis can not be undone.
|
33
|
+
access_code_deleted: Deleted access code.
|
32
34
|
password_updated: Password successfully updated.
|
33
35
|
username_sent: Your username has been sent emailed to you. Please check your Email.
|
34
36
|
add_permission: (Add Permission)
|
37
|
+
access_code_delete_error: An error occured while trying to delete the access code
|
35
38
|
access_code_unlimited: Unlimited
|
36
39
|
welcome: Welcome
|
37
40
|
bulk_access_codes_created: Bulk access codes created and emailed to {{email_count}} emails.
|
38
|
-
users_in_role: "Users in
|
41
|
+
users_in_role: "Users in role: {{role}}"
|
39
42
|
current_password: Current Password
|
40
43
|
problem_creating_account: "There was a problem creating your account. Please correct the following errors:"
|
41
44
|
password_confirmation_help: To ensure that your password is correct please enter it again here.
|
45
|
+
edit_access_code_title: Edit Access Code
|
42
46
|
thanks_sign_up_login: Thanks for signing up! You may login now
|
43
47
|
already_activated: Your account has already been activated. You can log in below.
|
44
48
|
password: Password
|
45
49
|
account_not_activated: Your {{application_name}} account has not yet been activated.
|
46
50
|
sorry_invalid_reset_code: We're sorry, but we could not locate your account. If you are having issues try copying and pasting the URL from your email into your browser or restarting the reset password process.
|
47
51
|
problem_changing_password: There was a problem changing your password. {{errors}}
|
52
|
+
access_code_delete_problem: Cannot delete access code it has users associated with it.
|
48
53
|
user_enable_problem: There was a problem enabling this user.
|
49
54
|
access_code_tip: Enter a access code.
|
50
55
|
email_empty: Please enter an email address
|
51
56
|
select_new_password: Select a New Password
|
57
|
+
bulk_access_code_emails: Emails
|
58
|
+
bulk_access_code_subject: Subject
|
52
59
|
access_code_delete_link: Delete Access Code
|
53
60
|
request_access_code: Request Access Code
|
61
|
+
validation_is_required: is required.
|
54
62
|
first_name: First Name
|
55
63
|
forgot_username: Forgot Username
|
56
64
|
updated_permissions: Updated Permissions
|
@@ -83,6 +91,7 @@ en:
|
|
83
91
|
click_to_sign_up_now: Click here to sign up now.
|
84
92
|
forgot_password: Forgot Password
|
85
93
|
login: Login
|
94
|
+
validation_are_required: are required.
|
86
95
|
user_not_activated_error: Could not activate user
|
87
96
|
password_not_reset: Password not reset.
|
88
97
|
save: Save
|
@@ -98,6 +107,7 @@ en:
|
|
98
107
|
edit: Edit
|
99
108
|
activation_instructions: Activation Instructions
|
100
109
|
access_code_created: Created
|
110
|
+
access_code_added: Access Code was successfully added
|
101
111
|
change_permissions: Change Roles
|
102
112
|
what_is_the_email: What is the email address used to create your account?
|
103
113
|
activation_complete: Activation Complete
|
@@ -112,12 +122,11 @@ en:
|
|
112
122
|
access_code_request_tip: Enter your email and we'll send you an access code as soon as one is available. Thank you!
|
113
123
|
password_mismatch: Password mismatch.
|
114
124
|
add_role_dialog_title: Add Role
|
125
|
+
user_account_deleted: You have successfully deleted your account.
|
115
126
|
new_password_doesnt_match: New password does not match the password confirmation.
|
116
127
|
add_permission_to_user: Add Permission to user {{user}}
|
117
|
-
user_account_deleted: You have successfully deleted your account.
|
118
128
|
sign_in: Sign In
|
119
129
|
role_deleted: Role Deleted
|
120
|
-
role_not_deleted: Role could not be deleted
|
121
130
|
complete_profile: Complete Your Profile
|
122
131
|
access_codes: Access Codes
|
123
132
|
access_code_delete_confirm: Are you sure you want to cancel this access code?
|
@@ -129,6 +138,7 @@ en:
|
|
129
138
|
search_users: Search Users
|
130
139
|
user_marked_inactive: User has been marked as inactive
|
131
140
|
access_code_request_thank_you: Thank you for your request. We'll be in touch as soon as possible.
|
141
|
+
bulk_access_code_tip: Optional. If a code is specified then that code will be sent to all users. Leave this field empty to send a unique code to each user.
|
132
142
|
role: Role
|
133
143
|
bulk_access_codes_title: Bulk Access Codes
|
134
144
|
users_admin: Users
|
@@ -136,6 +146,7 @@ en:
|
|
136
146
|
access_code_expires: Expires
|
137
147
|
user_successfully_deleted: User {{login}} was successfully deleted.
|
138
148
|
application_base_url_not_set: Please set application_base_url in global_config.yml
|
149
|
+
access_code_update_problem: There was a problem updating the access code.
|
139
150
|
user_not_deactivated_error: Could not deactivate user
|
140
151
|
total_users: "Total Users: {{total}}"
|
141
152
|
password_cannot_be_blank: Password field cannot be blank.
|
@@ -146,6 +157,7 @@ en:
|
|
146
157
|
confirm_password: Confirm Password
|
147
158
|
add_user_to_role_title: Add user to a new role.
|
148
159
|
expiration_date: Expiration Date
|
160
|
+
role_not_deleted: Role could not be deleted
|
149
161
|
roles: Roles
|
150
162
|
access_code_related_users: Users who signed up with this code
|
151
163
|
login_empty: Please enter a login
|
@@ -163,7 +175,7 @@ en:
|
|
163
175
|
change_your_password: Change Your Password
|
164
176
|
forgot_your_password: Forgot your password?
|
165
177
|
role_delete_confirm: Are you sure you want to delete this role? All associated permissions will also be deleted!
|
166
|
-
unlimited: Unlimited
|
178
|
+
unlimited: Unlimited Uses
|
167
179
|
remember_me: Remember me
|
168
180
|
reset_your_password: Reset Your Password
|
169
181
|
access_code_use_limit: Use Limit
|
@@ -174,6 +186,8 @@ en:
|
|
174
186
|
request_username_subject: Forgotten username
|
175
187
|
could_not_find_reset_code: Could not find a password reset code. Please try resetting your password again.
|
176
188
|
register_for_account: Register for an account
|
189
|
+
bulk_access_code_message: Message
|
190
|
+
bulk_access_codes: Email Access Codes
|
177
191
|
add_access_code: Add Access Code
|
178
192
|
user_update: You're user information has been updated.
|
179
193
|
update_profile: Update your profile
|
data/muck-users.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{muck-users}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Justin Ball", "Joel Duffin"]
|
12
|
-
s.date = %q{2010-02-
|
12
|
+
s.date = %q{2010-02-04}
|
13
13
|
s.description = %q{Easily add user signup, login and other features to your application}
|
14
14
|
s.email = %q{justin@tatemae.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -39,7 +39,10 @@ Gem::Specification.new do |s|
|
|
39
39
|
"app/views/admin/access_codes/_access_code.html.erb",
|
40
40
|
"app/views/admin/access_codes/_form.html.erb",
|
41
41
|
"app/views/admin/access_codes/_user.html.erb",
|
42
|
+
"app/views/admin/access_codes/ajax_create_access_code.js.erb",
|
43
|
+
"app/views/admin/access_codes/ajax_update_access_code.js.erb",
|
42
44
|
"app/views/admin/access_codes/bulk.html.erb",
|
45
|
+
"app/views/admin/access_codes/destroy.js.erb",
|
43
46
|
"app/views/admin/access_codes/edit.html.erb",
|
44
47
|
"app/views/admin/access_codes/index.html.erb",
|
45
48
|
"app/views/admin/access_codes/new.html.erb",
|
@@ -65,6 +68,7 @@ Gem::Specification.new do |s|
|
|
65
68
|
"app/views/admin/users/index.html.erb",
|
66
69
|
"app/views/admin/users/permissions.html.erb",
|
67
70
|
"app/views/admin/users/search.html.erb",
|
71
|
+
"app/views/admin/users/update_activate.js.erb",
|
68
72
|
"app/views/admin/users/update_permissions.js.erb",
|
69
73
|
"app/views/password_resets/edit.html.erb",
|
70
74
|
"app/views/password_resets/new.html.erb",
|
@@ -1,5 +1,5 @@
|
|
1
1
|
jQuery(document).ready(function() {
|
2
|
-
jQuery(".tip-field").focus
|
2
|
+
jQuery(".tip-field").live('focus', function() {
|
3
3
|
jQuery(".active").removeClass("active");
|
4
4
|
var tip_key = jQuery('#' + this.id).siblings('.tip-key');
|
5
5
|
var control_id = this.id;
|
@@ -22,7 +22,7 @@ jQuery(document).ready(function() {
|
|
22
22
|
jQuery("#" + help_id + "-container").addClass("active");
|
23
23
|
});
|
24
24
|
|
25
|
-
jQuery(".tip-field").blur
|
25
|
+
jQuery(".tip-field").live('blur', function() {
|
26
26
|
jQuery('#' + this.id + '-tip').hide(1);
|
27
27
|
});
|
28
28
|
});
|
@@ -22,9 +22,16 @@ function add_headers(xhr){
|
|
22
22
|
}
|
23
23
|
|
24
24
|
jQuery(document).ready(function() {
|
25
|
-
|
25
|
+
|
26
26
|
jQuery('a.ajax-delete').live('click', function() {
|
27
|
-
jQuery
|
27
|
+
var title = jQuery(this).attr('title');
|
28
|
+
var do_delete = true;
|
29
|
+
if(title.length > 0){
|
30
|
+
do_delete = confirm(title);
|
31
|
+
}
|
32
|
+
if (do_delete){
|
33
|
+
jQuery.post(this.href, { _method: 'delete', format: 'js' }, null, "script");
|
34
|
+
}
|
28
35
|
return false;
|
29
36
|
});
|
30
37
|
|
@@ -33,15 +40,15 @@ jQuery(document).ready(function() {
|
|
33
40
|
return false;
|
34
41
|
});
|
35
42
|
|
36
|
-
|
43
|
+
jQuery(".submit-form").click(function() {
|
37
44
|
jQuery(this).parent('form').submit();
|
38
45
|
});
|
39
46
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
47
|
+
apply_ajax_forms();
|
48
|
+
|
49
|
+
jQuery('a.fancy-pop').fancybox({'hideOnContentClick':false, 'overlayShow':true, 'frameWidth':600, 'frameHeight':500 });
|
50
|
+
|
51
|
+
jQuery('a.dialog-pop').live('click', function() {
|
45
52
|
var d = jQuery('<div class="dialog"></div>').appendTo("body");
|
46
53
|
d.dialog({ modal: true, autoOpen: false, width: 'auto', title: jQuery(this).attr('title') });
|
47
54
|
d.load(jQuery(this).attr('href'), '', function(){
|
@@ -1,5 +1,7 @@
|
|
1
1
|
/* header */
|
2
2
|
a {color:#000;}
|
3
|
+
.checkbox-label{display:inline-block;}
|
4
|
+
input[type="checkbox"] {margin:0px;}
|
3
5
|
#main-navigation{}
|
4
6
|
#account-navigation {}
|
5
7
|
.navigation ul{padding:2px;margin:0;}
|
@@ -26,9 +28,10 @@ ul.admin-list li a{font-size:1.2em;}
|
|
26
28
|
/* errors, message */
|
27
29
|
.notify-box{font-size:1.2em;color:#555;width:100%}
|
28
30
|
.error,.notice,.success {margin:0;}
|
29
|
-
#errorExplanation{margin:0;padding
|
31
|
+
#errorExplanation #field-errors{margin:0;padding:0.4em 1.5em;width:96%;border:2px solid #ddd;background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
|
30
32
|
#admin-messages{display:none;}
|
31
|
-
|
33
|
+
/* ui elements */
|
34
|
+
#ui-datepicker-div{z-index:2005;}
|
32
35
|
/* tables */
|
33
36
|
.adminTable{margin:5px 0 0 0;padding:0 0 40px 0px;width:980px;}
|
34
37
|
.adminTable a{color:#000;text-decoration:none;font-weight:bold;}
|
@@ -37,7 +37,7 @@ ul.icon-list a{display:inline-block;margin:2px 0;padding:2px 0 5px 28px;text-dec
|
|
37
37
|
.availability{color:#b61e12;position:absolute;}
|
38
38
|
.hidden-tips{display:none;}
|
39
39
|
.required-tip{color:#555555;font-size:1.2em;margin:0pt;font-weight:bolder;height:0px;}
|
40
|
-
.tip{position:absolute;z-index:
|
40
|
+
.tip{position:absolute;z-index:2000;border:2px solid #CCCCCC;background-color:#fff;width:400px;}
|
41
41
|
#tip-title{font-size:1.1em;background-color:#CCCCCC;text-align:left;padding:2px 0px 5px 8px;font-weight:bold;}
|
42
42
|
#tip-main{padding:10px;color:#333333;}
|
43
43
|
#tip-main p,#tip-main ul{font-size:1.3em;}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muck-users
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Ball
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2010-02-
|
13
|
+
date: 2010-02-04 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -95,7 +95,10 @@ files:
|
|
95
95
|
- app/views/admin/access_codes/_access_code.html.erb
|
96
96
|
- app/views/admin/access_codes/_form.html.erb
|
97
97
|
- app/views/admin/access_codes/_user.html.erb
|
98
|
+
- app/views/admin/access_codes/ajax_create_access_code.js.erb
|
99
|
+
- app/views/admin/access_codes/ajax_update_access_code.js.erb
|
98
100
|
- app/views/admin/access_codes/bulk.html.erb
|
101
|
+
- app/views/admin/access_codes/destroy.js.erb
|
99
102
|
- app/views/admin/access_codes/edit.html.erb
|
100
103
|
- app/views/admin/access_codes/index.html.erb
|
101
104
|
- app/views/admin/access_codes/new.html.erb
|
@@ -121,6 +124,7 @@ files:
|
|
121
124
|
- app/views/admin/users/index.html.erb
|
122
125
|
- app/views/admin/users/permissions.html.erb
|
123
126
|
- app/views/admin/users/search.html.erb
|
127
|
+
- app/views/admin/users/update_activate.js.erb
|
124
128
|
- app/views/admin/users/update_permissions.js.erb
|
125
129
|
- app/views/password_resets/edit.html.erb
|
126
130
|
- app/views/password_resets/new.html.erb
|