rules_engine_users 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/.document +5 -0
  2. data/.gitignore +22 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +47 -0
  6. data/VERSION +1 -0
  7. data/init.rb +1 -0
  8. data/lib/rules_engine/controller_user_mail.rb +29 -0
  9. data/lib/rules_engine/controller_users.rb +170 -0
  10. data/lib/rules_engine_users.rb +4 -0
  11. data/rails_generators/USAGE +97 -0
  12. data/rails_generators/manifests/rules_engine_users.rb +79 -0
  13. data/rails_generators/manifests/rules_engine_users.yml +32 -0
  14. data/rails_generators/rules_engine_users_generator.rb +21 -0
  15. data/rails_generators/templates/app/controllers/admin/users_controller.rb +64 -0
  16. data/rails_generators/templates/app/controllers/users_controller.rb +215 -0
  17. data/rails_generators/templates/app/models/user.rb +113 -0
  18. data/rails_generators/templates/app/models/user_mailer.rb +26 -0
  19. data/rails_generators/templates/app/models/user_observer.rb +19 -0
  20. data/rails_generators/templates/app/views/admin/users/_form.html.erb +6 -0
  21. data/rails_generators/templates/app/views/admin/users/edit.html.erb +18 -0
  22. data/rails_generators/templates/app/views/admin/users/index.html.erb +52 -0
  23. data/rails_generators/templates/app/views/admin/users/new.html.erb +17 -0
  24. data/rails_generators/templates/app/views/admin/users/show.html.erb +15 -0
  25. data/rails_generators/templates/app/views/user_mailer/forgot_password.html.erb +11 -0
  26. data/rails_generators/templates/app/views/user_mailer/welcome_message.html.erb +11 -0
  27. data/rails_generators/templates/app/views/users/change_form.html.erb +22 -0
  28. data/rails_generators/templates/app/views/users/details.html.erb +11 -0
  29. data/rails_generators/templates/app/views/users/login_form.html.erb +35 -0
  30. data/rails_generators/templates/app/views/users/pswd_change_form.html.erb +20 -0
  31. data/rails_generators/templates/app/views/users/pswd_forgot_form.html.erb +18 -0
  32. data/rails_generators/templates/app/views/users/pswd_reset_form.html.erb +22 -0
  33. data/rails_generators/templates/app/views/users/welcome_form.html.erb +21 -0
  34. data/rails_generators/templates/db/migrate/20100104014507_create_users.rb +41 -0
  35. data/rails_generators/templates/doc/README.rules_engine_users +122 -0
  36. data/rails_generators/templates/doc/README.rules_engine_users_paths +12 -0
  37. data/rails_generators/templates/features/admin/user/edit.feature +46 -0
  38. data/rails_generators/templates/features/admin/user/index.feature +78 -0
  39. data/rails_generators/templates/features/admin/user/new.feature +26 -0
  40. data/rails_generators/templates/features/admin/user/show.feature +22 -0
  41. data/rails_generators/templates/features/admin/user/step_definitions/edit_steps.rb +3 -0
  42. data/rails_generators/templates/features/admin/user/step_definitions/index_steps.rb +13 -0
  43. data/rails_generators/templates/features/admin/user/step_definitions/show_steps.rb +3 -0
  44. data/rails_generators/templates/features/support/blueprint_users.rb +14 -0
  45. data/rails_generators/templates/features/user/change.feature +37 -0
  46. data/rails_generators/templates/features/user/details.feature +15 -0
  47. data/rails_generators/templates/features/user/login.feature +65 -0
  48. data/rails_generators/templates/features/user/pswd_change.feature +46 -0
  49. data/rails_generators/templates/features/user/pswd_forgot.feature +32 -0
  50. data/rails_generators/templates/features/user/pswd_reset.feature +52 -0
  51. data/rails_generators/templates/features/user/step_definitions/login_steps.rb +46 -0
  52. data/rails_generators/templates/features/user/step_definitions/pswd_reset_steps.rb +15 -0
  53. data/rails_generators/templates/features/user/step_definitions/welcome_steps.rb +15 -0
  54. data/rails_generators/templates/features/user/welcome.feature +52 -0
  55. data/rails_generators/templates/spec/controllers/admin/users_controller_spec.rb +191 -0
  56. data/rails_generators/templates/spec/controllers/users_controller_spec.rb +579 -0
  57. data/rails_generators/templates/spec/models/user_mailer_spec.rb +39 -0
  58. data/rails_generators/templates/spec/models/user_observer_spec.rb +56 -0
  59. data/rails_generators/templates/spec/models/user_spec.rb +253 -0
  60. data/rails_generators/templates/spec/support/rules_engine_macros.rb +16 -0
  61. data/rules_engine_users.gemspec +141 -0
  62. data/spec/railsenv/app/controllers/application_controller.rb +10 -0
  63. data/spec/railsenv/config/boot.rb +110 -0
  64. data/spec/railsenv/config/database.yml +22 -0
  65. data/spec/railsenv/config/environment.rb +41 -0
  66. data/spec/railsenv/config/environments/development.rb +17 -0
  67. data/spec/railsenv/config/environments/production.rb +28 -0
  68. data/spec/railsenv/config/environments/test.rb +28 -0
  69. data/spec/railsenv/config/initializers/backtrace_silencers.rb +7 -0
  70. data/spec/railsenv/config/initializers/inflections.rb +10 -0
  71. data/spec/railsenv/config/initializers/mime_types.rb +5 -0
  72. data/spec/railsenv/config/initializers/new_rails_defaults.rb +19 -0
  73. data/spec/railsenv/config/initializers/session_store.rb +15 -0
  74. data/spec/railsenv/config/locales/en.yml +5 -0
  75. data/spec/railsenv/config/routes.rb +43 -0
  76. data/spec/railsenv/db/test.sqlite3 +1 -0
  77. data/spec/railsenv/log/debug.log +1 -0
  78. data/spec/railsenv/log/test.log +1 -0
  79. data/spec/rcov.opts +3 -0
  80. data/spec/rules_engine/controller_user_mail_spec.rb +43 -0
  81. data/spec/rules_engine/controller_users_spec.rb +337 -0
  82. data/spec/spec.opts +4 -0
  83. data/spec/spec_helper.rb +30 -0
  84. data/tasks/rspec.rake +18 -0
  85. metadata +180 -0
@@ -0,0 +1,215 @@
1
+ class UsersController < ApplicationController
2
+
3
+ skip_before_filter :verify_authenticity_token, :only => [:login_form, :login] # allow login from anywhere
4
+ before_filter :login_required, :only=>[:details, :change_form, :change, :pswd_change_form, :pswd_change]
5
+
6
+ def login_form
7
+ if logged_in?
8
+ flash[:success] = "User already logged in"
9
+ redirect_to(root_path)
10
+ end
11
+ end
12
+
13
+ def login
14
+ user_params = params[:user] || {}
15
+ user = User.authenticate_by_email(user_params[:name], user_params[:password]) || User.authenticate_by_login(user_params[:name], user_params[:password])
16
+ unless user.nil?
17
+ if (user.access_level == User::ACCESS_LEVEL_DISABLED)
18
+ flash[:error] = "User access disabled"
19
+ redirect_to(root_path)
20
+ else
21
+ self.current_user = user
22
+
23
+ if params[:remember_me] == "1"
24
+ current_user.set_remember_token
25
+ cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
26
+ end
27
+
28
+ redirect_to(session[:return_to] || root_path)
29
+ end
30
+ else
31
+ flash.now[:error] = "Unable to login user"
32
+ render :action => 'login_form'
33
+ end
34
+ end
35
+
36
+ def logout
37
+ self.current_user.reset_remember_token if logged_in?
38
+ cookies.delete :auth_token
39
+ reset_session
40
+ redirect_to(user_login_path)
41
+ end
42
+
43
+ def details
44
+ @user = current_user
45
+ end
46
+
47
+ def change_form
48
+ @user = current_user
49
+ end
50
+
51
+ def change
52
+ @user=current_user
53
+
54
+ if @user.update_attributes(params[:user].except(:access_level, :password))
55
+ flash[:success]="User Details Changed"
56
+ redirect_to user_details_path
57
+ else
58
+ render :action => 'change_form'
59
+ end
60
+ end
61
+
62
+ def pswd_change_form
63
+ @user=current_user
64
+ end
65
+
66
+ def pswd_change
67
+ user_params = params[:user] || {}
68
+
69
+ @user=current_user
70
+ if user_params[:old_password].blank? || user_params[:password].blank? || user_params[:password_confirmation].blank?
71
+ flash.now[:error] = "Old and New Password Required"
72
+ render :action => 'pswd_change_form'
73
+ elsif !User.authenticate_by_email(@user.email, user_params[:old_password])
74
+ flash.now[:error] = "Invalid Old Password"
75
+ render :action => 'pswd_change_form'
76
+ elsif @user.update_attributes(:password => user_params[:password], :password_confirmation => user_params[:password_confirmation])
77
+ flash[:success]="Password Changed"
78
+ redirect_to user_details_path
79
+ else
80
+ flash.now[:error] = "Could not change password"
81
+ render :action => 'pswd_change_form'
82
+ end
83
+ end
84
+
85
+ def pswd_forgot_form
86
+ end
87
+
88
+ def pswd_forgot
89
+ user_params = params[:user] || {}
90
+ user = User.set_reset_token(user_params[:email])
91
+ if user
92
+ flash[:success] = "An email has been sent with the password reset details."
93
+ redirect_to user_login_path
94
+ else
95
+ flash.now[:error] = "Could not reset password"
96
+ render :action => 'pswd_forgot_form'
97
+ end
98
+ end
99
+
100
+ def pswd_reset_form
101
+ @token = params[:token]
102
+ if @token.blank?
103
+ # flash[:error]="Reset Token Required"
104
+ redirect_to user_pswd_forgot_path
105
+ return
106
+ end
107
+
108
+ user = User.authenticate_by_reset_token(@token)
109
+ unless user
110
+ flash[:error]="Could not reset password"
111
+ redirect_to user_pswd_forgot_path
112
+ return
113
+ end
114
+ end
115
+
116
+ def pswd_reset
117
+ user_params = params[:user] || {}
118
+
119
+ @token = params[:token]
120
+ if @token.blank?
121
+ # flash.now[:error] = "Reset Token Expired"
122
+ render :action => 'pswd_forgot_form'
123
+ return
124
+ end
125
+
126
+ if user_params[:email].blank? || user_params[:password].blank?
127
+ flash.now[:error] = "Email and Password Required"
128
+ render :action => 'pswd_reset_form'
129
+ return
130
+ end
131
+
132
+ if user_params[:password] != user_params[:password_confirmation]
133
+ flash.now[:error] = "Password Confirmation does not match"
134
+ render :action => 'pswd_reset_form'
135
+ return
136
+ end
137
+
138
+ @token = params[:token]
139
+ user = User.authenticate_by_reset_token(@token)
140
+
141
+ unless user && user.email == user_params[:email]
142
+ flash.now[:error] = "Invalid Email"
143
+ render :action => 'pswd_reset_form'
144
+ return
145
+ end
146
+
147
+ if !user.update_attributes(:password=>user_params[:password], :password_confirmation=>user_params[:password])
148
+ flash.now[:error] = "Could not change password"
149
+ render :action => 'pswd_reset_form'
150
+ return
151
+ end
152
+
153
+ flash[:success]="Password Changed"
154
+ self.current_user = user
155
+ redirect_to root_path
156
+ end
157
+
158
+ def welcome_form
159
+ @token = params[:token]
160
+ if @token.blank?
161
+ # flash[:error]="Welcome Token Required"
162
+ redirect_to user_pswd_forgot_path
163
+ return
164
+ end
165
+
166
+ user = User.authenticate_by_reset_token(@token)
167
+ unless user
168
+ flash[:error]="Unable to validate user details"
169
+ redirect_to user_pswd_forgot_path
170
+ return
171
+ end
172
+ end
173
+
174
+ def welcome
175
+ user_params = params[:user] || {}
176
+
177
+ @token = params[:token]
178
+ if @token.blank?
179
+ flash.now[:error] = "Welcome Token Expired"
180
+ render :action => 'pswd_forgot_form'
181
+ return
182
+ end
183
+
184
+ if user_params[:email].blank? || user_params[:password].blank?
185
+ flash.now[:error] = "Email and Password Required"
186
+ render :action => 'welcome_form'
187
+ return
188
+ end
189
+
190
+ if user_params[:password] != user_params[:password_confirmation]
191
+ flash.now[:error] = "Password Confirmation does not match"
192
+ render :action => 'welcome_form'
193
+ return
194
+ end
195
+
196
+ @token = params[:token]
197
+ user = User.authenticate_by_reset_token(@token)
198
+
199
+ unless user && user.email == user_params[:email]
200
+ flash.now[:error] = "Invalid Email"
201
+ render :action => 'welcome_form'
202
+ return
203
+ end
204
+
205
+ if user.update_attributes(:password=>user_params[:password], :password_confirmation=>user_params[:password])
206
+ flash[:success]="Password Created"
207
+ self.current_user = user
208
+ redirect_to root_path
209
+ else
210
+ flash.now[:error] = "Could not change password"
211
+ render :action => 'welcome_form'
212
+ end
213
+ end
214
+
215
+ end
@@ -0,0 +1,113 @@
1
+ require 'digest/sha1'
2
+
3
+ class User < ActiveRecord::Base
4
+
5
+ ACCESS_LEVEL_ADMIN = 999 # administrator access
6
+ ACCESS_LEVEL_DISABLED = 0 # disabled access
7
+
8
+ # validation
9
+ validates_presence_of :full_name
10
+ validates_presence_of :email
11
+ validates_presence_of :time_zone
12
+ validates_presence_of :login
13
+ # validates_presence_of :password, :on => :create
14
+ # validates_length_of :password, :within => 4..40, :on => :create
15
+ validates_confirmation_of :password, :unless => Proc.new{|user| user.password.blank? }
16
+ validates_length_of :password_confirmation, :within => 4..40, :unless => Proc.new{|user| user.password.blank? }
17
+ validates_uniqueness_of :email, :case_sensitive => false, :message=>"alread taken."
18
+ validates_presence_of :login
19
+ validates_format_of :login, :with => /\A[a-zA-ZZ0-9._]+\Z/, :unless => Proc.new { |user| user.login.blank? }
20
+ validates_uniqueness_of :login, :case_sensitive => false, :message=>"alread taken."
21
+
22
+ # anything else you want your user to change should be added here.
23
+ attr_accessor :password, :old_password
24
+ attr_accessible :full_name, :login, :email, :time_zone, :password, :password_confirmation, :access_level, :old_password
25
+
26
+ before_create :set_fields_before_create
27
+ before_save :set_fields_before_save
28
+
29
+ # named scope
30
+ named_scope :by_email, lambda {|email| {:conditions => ['email = ?', email]} }
31
+ named_scope :by_login, lambda {|login| {:conditions => ['login = ?', login]} }
32
+ named_scope :by_ge_email, lambda {|email| {:conditions => ['email >= ?', email]} }
33
+ named_scope :by_ge_login, lambda {|login| {:conditions => ['login >= ?', login]} }
34
+ named_scope :by_ge_full_name, lambda {|full_name| {:conditions => ['full_name >= ?', full_name]} }
35
+ named_scope :by_access_level, lambda {|access_level| {:conditions => ['access_level = ?', access_level]} }
36
+ named_scope :by_remember_token, lambda {|remember_token| {:conditions => ['remember_token = ?', remember_token]} }
37
+ named_scope :by_reset_token, lambda {|reset_token| {:conditions => ['reset_token = ?', reset_token]} }
38
+ named_scope :order_email, :order => 'email ASC'
39
+ named_scope :order_login, :order => 'email ASC'
40
+ named_scope :order_full_name, :order => 'full_name ASC'
41
+ # def self.at_page(page, options = {})
42
+ # paginate(options.reverse_merge(:page => page, :per_page => 20))
43
+ # end
44
+
45
+ ##### Authentication
46
+ def self.authenticate_by_email(email, password)
47
+ u = User.by_email(email).find(:first)
48
+ return nil unless u
49
+ return nil unless u.crypted_password == generate_encryption(password, u.salt)
50
+ u
51
+ end
52
+
53
+ def self.authenticate_by_login(login, password)
54
+ u = User.by_login(login).find(:first)
55
+ return nil unless u
56
+ return nil unless u.crypted_password == generate_encryption(password, u.salt)
57
+ u
58
+ end
59
+
60
+ def self.authenticate_by_remember_token(remember_token)
61
+ u= self.by_remember_token(remember_token).find(:first)
62
+ return nil unless u
63
+ return nil unless u.remember_token_expires_at > Time.now.utc
64
+ u
65
+ end
66
+
67
+ def self.authenticate_by_reset_token(reset_token)
68
+ u= self.by_reset_token(reset_token).find(:first)
69
+ return nil unless u
70
+ return nil unless u.reset_token_expires_at > Time.now.utc
71
+ u
72
+ end
73
+
74
+ ##### Tokens
75
+ def set_remember_token
76
+ self.remember_token_expires_at = 30.days.from_now.utc
77
+ self.remember_token = User.generate_encryption(email, "#{self.remember_token_expires_at}")
78
+ save(false)
79
+ end
80
+
81
+ def reset_remember_token
82
+ self.remember_token_expires_at = nil
83
+ self.remember_token = nil
84
+ save(false)
85
+ end
86
+
87
+ def self.set_reset_token(email)
88
+ u = self.by_email(email).find(:first)
89
+ return nil unless u
90
+ u.reset_token_expires_at = 2.days.from_now.utc
91
+ u.reset_token = self.generate_encryption(email, "#{u.reset_token_expires_at}")
92
+ u.save(false)
93
+ u
94
+ end
95
+
96
+ private
97
+ def set_fields_before_create
98
+ self.reset_token_expires_at = 2.days.from_now.utc
99
+ self.reset_token = User.generate_encryption(self.email, "#{self.reset_token_expires_at}")
100
+ end
101
+
102
+ def set_fields_before_save
103
+ return if self.password.blank? # if password not set no need to change the crypted password
104
+ self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{self.email}--") if new_record?
105
+ self.crypted_password = User.generate_encryption(self.password, self.salt)
106
+ self.reset_token_expires_at = nil
107
+ self.reset_token = nil
108
+ end
109
+
110
+ def self.generate_encryption(password, salt)
111
+ Digest::SHA1.hexdigest("--#{salt}--#{password}--")
112
+ end
113
+ end
@@ -0,0 +1,26 @@
1
+ class UserMailer < ActionMailer::Base
2
+ default_url_options[:host] = "#{RulesEngine::ControllerUserMail.host}"
3
+
4
+ def welcome_message(options)
5
+
6
+ @recipients = options[:to_email]
7
+ @from = "#{RulesEngine::ControllerUserMail.from}"
8
+ @subject = "#{RulesEngine::ControllerUserMail.prefix} Account Created"
9
+
10
+ @body[:to_name] = options[:to_name]
11
+ @body[:to_url] = "http://#{RulesEngine::ControllerUserMail.host}#{user_pswd_reset_path(:token => options[:token])}"
12
+
13
+ @sent_on = Time.current
14
+ end
15
+
16
+ def forgot_password(options)
17
+ @recipients = options[:to_email]
18
+ @from = "#{RulesEngine::ControllerUserMail.from}"
19
+ @subject = "#{RulesEngine::ControllerUserMail.prefix} Reset Password"
20
+
21
+ @body[:to_name] = options[:to_name]
22
+ @body[:to_url] = "http://#{RulesEngine::ControllerUserMail.host}#{user_pswd_reset_path(:token => options[:token])}"
23
+
24
+ @sent_on = Time.current
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ class UserObserver < ActiveRecord::Observer
2
+
3
+ def after_create(record)
4
+ return unless ActionMailer::Base.perform_deliveries
5
+
6
+ UserMailer.deliver_welcome_message(:to_email => record.email,
7
+ :to_name => record.full_name,
8
+ :token => record.reset_token)
9
+ end
10
+
11
+ def after_update(record)
12
+ return if record.reset_token.nil?
13
+ return unless ActionMailer::Base.perform_deliveries
14
+
15
+ UserMailer.deliver_forgot_password(:to_email => record.email,
16
+ :to_name => record.full_name,
17
+ :token => record.reset_token)
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ <%= f.text_field :full_name, :size => 30, :required => true %>
2
+ <%= f.text_field :login, :size => 20, :required => true, :label => "Login Name" %>
3
+ <%= f.text_field :email, :size => 40, :required => true %>
4
+ <%= f.time_zone_select :time_zone, :required => true %>
5
+ <%= f.select :access_level, user_access_levels, :ordered => "false", :required => true, :hint => '<strong class="red">Making the user an administrator will allow them <br> to remove other users INCLUDING YOU!!</strong>' %>
6
+
@@ -0,0 +1,18 @@
1
+ <% set_re_breadcrumbs link_to('Home Page', root_path), link_to('List Users', admin_users_path), link_to('User Details', admin_user_path(@user)), 'Edit User' %>
2
+
3
+ <div class="top-5 prepend-1 span-16">
4
+ <% re_form_for(@user, :url => admin_user_path(@user), :span => "3x13") do |f| %>
5
+ <%= f.error_messages :message => "Unable to Update User" %>
6
+ <% re_whitebox do %>
7
+ <h2 class="float-left">Edit User</h2>
8
+ <div class="float-right">
9
+ <%= re_button_submit_green('Update') %>
10
+ <%= re_button_link_red('Delete', admin_user_path(@user), :confirm => 'Are you sure?', :method => :delete) %>
11
+ <%= re_button_link_orange('Cancel', admin_user_path(@user)) %>
12
+ </div>
13
+ <hr/>
14
+ <%= render :partial => 'form', :locals => {:f => f} %>
15
+ <% end %>
16
+ <% end %>
17
+ </div>
18
+ <div class="clear"></div>
@@ -0,0 +1,52 @@
1
+ <% set_re_breadcrumbs_right link_to('Home Page', root_path), link_to('List Users', admin_users_path), link_to("+ Create New User", new_admin_user_path, :class=>"dkgreen") %>
2
+
3
+ <div class="span-22 prepend-1 append-1 last">
4
+ <% form_tag(admin_users_path, :method => :get) do %>
5
+ <div class="float-right">
6
+ <%= re_button_submit("Search", "orange") %>
7
+ </div>
8
+ <div class="float-right">
9
+ <span class="float-left right-10 largetext blue">Search Users :</span>
10
+ <span class="float-left right-5">
11
+ <%= text_field_tag 'query', params[:query], :required => true, :size => 25, :class=>'right-10'%>
12
+ </span>
13
+ <span class="float-left right-5">
14
+ <%= select_tag 'query_type', options_for_select([["Search Name", 'full_name'],
15
+ ["Search Login", 'login'],
16
+ ["Search Email", 'email']], params['query_type'])%>
17
+ </span>
18
+ </div>
19
+ <% end %>
20
+ </div>
21
+ <div class="clear"></div>
22
+
23
+ <div class="span-22 prepend-1 append-1 last">
24
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" class="data">
25
+ <tr>
26
+ <th align="left">Login Name</th>
27
+ <th align="left">Full Name</th>
28
+ <th align="left">Email</th>
29
+ <th align="left">Time Zone</th>
30
+ <th align="left">Access Level</th>
31
+ </tr>
32
+ <% if @users.empty? %>
33
+ <tr>
34
+ <td colspan="6">
35
+ <h3>No Users Found</h3>
36
+ </td>
37
+ </tr>
38
+ <% end %>
39
+ <% @users.each do | user | %>
40
+ <tr class="<%= cycle('', 'odd') %>">
41
+ <td><%=link_to(h(user.login), admin_user_path(user))%></td>
42
+ <td><%=link_to(h(user.full_name), admin_user_path(user))%></td>
43
+ <td><%=h user.email%></td>
44
+ <td><%=h user.time_zone%></td>
45
+ <td><%= user_access_level(user)%></td>
46
+ </tr>
47
+ <% end %>
48
+ </table>
49
+
50
+ <%= will_paginate(@users) %>
51
+ </div>
52
+ <div class="clear"></div>
@@ -0,0 +1,17 @@
1
+ <% set_re_breadcrumbs link_to('Home Page', root_path), link_to('List Users', admin_users_path), 'New User' %>
2
+
3
+ <div class="top-5 prepend-1 span-16">
4
+ <% re_form_for(@user, :url => admin_users_path, :span => "3x13") do |f| %>
5
+ <%= f.error_messages :user => "Unable to Create User" %>
6
+ <% re_whitebox do %>
7
+ <h2 class="float-left">New User</h2>
8
+ <div class="float-right">
9
+ <%= re_button_submit_green('Create') %>
10
+ <%= re_button_link_orange('Cancel', admin_users_path) %>
11
+ </div>
12
+ <hr/>
13
+ <%= render :partial => 'form', :locals => {:f => f} %>
14
+ <% end %>
15
+ <% end %>
16
+ </div>
17
+ <div class="clear"></div>
@@ -0,0 +1,15 @@
1
+ <% set_re_breadcrumbs link_to('Home Page', root_path), link_to('List Users', admin_users_path), 'User Details' %>
2
+
3
+ <div class="top-5 prepend-1 span-16">
4
+ <% re_whitebox do %>
5
+ <h2 class="float-left">User Details</h2>
6
+ <div class="float-right"><%=re_button_link_blue('Edit', edit_admin_user_path(@user)) %></div>
7
+ <hr/>
8
+
9
+ <%= re_form_text 'Full Name', @user.full_name, :span => "3x13" %>
10
+ <%= re_form_text 'Login Name', @user.login, :span => "3x13" %>
11
+ <%= re_form_text 'Email', @user.email, :span => "3x13" %>
12
+ <%= re_form_text 'Time Zone', @user.time_zone, :span => "3x13" %>
13
+ <%= re_form_text 'Access Level', user_access_level(@user), :span => "3x13" %>
14
+ <% end %>
15
+ </div>
@@ -0,0 +1,11 @@
1
+ Hello <%= @to_name %>,
2
+
3
+ You have requested a new password.
4
+
5
+ You can reset your password at : <%= @to_url %>
6
+
7
+ Kind Regards
8
+ [My Cool New Application] Team
9
+
10
+ Note : This is an automatically generated email. Please do not reply to this email
11
+
@@ -0,0 +1,11 @@
1
+ Hello <%= @to_name %>,
2
+
3
+ An [My Cool New Application] account has been created for you.
4
+
5
+ You can login at : <%= @to_url %>
6
+
7
+ Kind Regards
8
+ [My Cool New Application] Team
9
+
10
+ Note : This is an automatically generated email. Please do not reply to this email
11
+
@@ -0,0 +1,22 @@
1
+ <div class="prepend-1 prepend-top span-15">
2
+ <h2>Change Your Details</h2>
3
+ <% re_form_for(@user, :url=> user_change_path, :method => "post", :html => {:id => 'user_change'}, :span => "3x11") do |f| %>
4
+ <%= f.error_messages :message => "Unable to Change User Details" %>
5
+ <% re_whitebox do %>
6
+ <%= f.text_field :full_name, :size=>30, :required => true%>
7
+ <%= f.text_field :login, :size=>20, :required => true, :label => "Login Name"%>
8
+ <%= f.text_field :email, :size=>40, :required => true%>
9
+ <%= f.time_zone_select :time_zone, :required => true %>
10
+
11
+ <div class="span-4">
12
+ <%= link_to("Change Your Password", user_pswd_change_path) %>
13
+ </div>
14
+ <div class="span-10" style="text-align:right;">
15
+ <%= re_button_submit("Update", "green") %>
16
+ <%= re_button_link("Cancel", user_details_path, "red") %>
17
+ <div class="clear"></div>
18
+ </div>
19
+ <% end %>
20
+ <% end %>
21
+ </div>
22
+ <div class="clear"></div>
@@ -0,0 +1,11 @@
1
+ <div class="prepend-1 prepend-top span-15">
2
+ <h2>Your Details</h2>
3
+ <% re_whitebox do %>
4
+ <%= re_form_text 'Full Name', @user.full_name, :span => '3x11' %>
5
+ <%= re_form_text 'Login', @user.login, :span => '3x11' %>
6
+ <%= re_form_text 'Email', @user.email, :span => '3x11' %>
7
+ <%= re_form_text 'Time Zone', @user.time_zone, :span => '3x11' %>
8
+ <%= re_button_link("Update Your Details", user_change_path, "green") %>
9
+ <% end %>
10
+ </div>
11
+ <div class="clear"></div>
@@ -0,0 +1,35 @@
1
+ <% javascript_tag do %>
2
+
3
+ $(document).ready(function() {
4
+
5
+ $('#user_password').bind('keypress', function(e) {
6
+ var code = (e.keyCode ? e.keyCode : e.which);
7
+ if (code == 13) { //Enter keycode
8
+ $('#user_login').submit();
9
+ return false;
10
+ }
11
+ });
12
+
13
+ });
14
+ <% end %>
15
+
16
+
17
+ <div class="prepend-1 prepend-top span-15">
18
+ <h2>Login</h2>
19
+ <% re_form_for(:user, :url => user_login_path, :html => {:id => 'user_login'}, :span => "5x11") do |f|%>
20
+ <% re_whitebox do %>
21
+ <%= f.text_field :name, :size => 38, :required => true, :label => "Email or Login Name" %>
22
+ <%= f.password_field :password, :size => 25, :required => true%>
23
+ <%= re_check_box "Remember Me", :remember_me, false, false, :span => "5x11" %>
24
+
25
+ <div class="span-11">
26
+ <%= link_to("Forgot Password?", user_pswd_forgot_path) %>
27
+ </div>
28
+ <div class="span-3">
29
+ <%= re_button_submit("Login", "green", :span => "3") %>
30
+ </div>
31
+ <div class="clear"></div>
32
+ <% end %>
33
+ <% end %>
34
+ </div>
35
+ <div class="clear"></div>
@@ -0,0 +1,20 @@
1
+ <div class="prepend-1 prepend-top span-15">
2
+ <h2>Change Your Password</h2>
3
+ <% re_form_for(:user, :url => user_pswd_change_path, :html => {:id => 'user_pswd_change'}, :span => "5x9") do |f|%>
4
+ <% re_whitebox do %>
5
+ <%= f.password_field :old_password, :label => 'Old Password', :size=>25, :required => true%>
6
+ <%= f.password_field :password, :label => 'New Password', :size=>25, :required => true%>
7
+ <%= f.password_field :password_confirmation, :label => 'Confirm New Password', :size=>25, :required => true%>
8
+
9
+ <div class="span-4">
10
+ <%= link_to("Change Your Details", user_change_path) %>
11
+ </div>
12
+ <div class="span-10" style="text-align:right;">
13
+ <%= re_button_submit("Update", "green") %>
14
+ <%= re_button_link("Cancel", user_details_path, "red") %>
15
+ </div>
16
+ <div class="clear"></div>
17
+ <% end %>
18
+ <% end %>
19
+ </div>
20
+ <div class="clear"></div>
@@ -0,0 +1,18 @@
1
+ <div class="prepend-1 prepend-top span-16">
2
+ <h2>Reset Your Password</h2>
3
+
4
+ <% re_form_for(:user, :url => user_pswd_forgot_path, :html => {:id => 'user_pswd_forgot'}, :span => "4x12") do |f| %>
5
+ <% re_whitebox do %>
6
+ <%= f.text_field :email, :required => true, :size => 40, :label => 'Your Email' %>
7
+
8
+ <div class="span-10">
9
+ <%= link_to("Login", user_login_path) %>
10
+ </div>
11
+ <div class="span-4">
12
+ <%= re_button_submit("Reset Password", "green", :span => "4") %>
13
+ </div>
14
+ <div class="clear"></div>
15
+ <% end %>
16
+ <% end %>
17
+ </div>
18
+ <div class="clear"></div>
@@ -0,0 +1,22 @@
1
+ <div class="prepend-1 prepend-top span-16">
2
+ <h2>Reset Your Password</h2>
3
+ <% re_form_for(:user, :url => user_pswd_reset_path, :html => {:id => "user_pswd_reset"}, :span => "5x11") do |f| %>
4
+ <% re_whitebox do %>
5
+ <%= hidden_field_tag :token, @token%>
6
+
7
+ <%= f.text_field :email, :label => 'Your Email', :size=>40, :required => true%>
8
+ <%= f.password_field :password, :label => 'New Password', :size=>25, :required => true%>
9
+ <%= f.password_field :password_confirmation, :label => 'Confirm New Password', :size=>25, :required => true%>
10
+
11
+ <div class="span-10">
12
+ <%= link_to("Login", user_login_path) %>
13
+ </div>
14
+ <div class="span-5">
15
+ <%= re_button_submit("Reset Password", "green", :span => "4") %>
16
+ </div>
17
+ <div class="clear"></div>
18
+
19
+ <% end %>
20
+ <% end %>
21
+ </div>
22
+ <div class="clear"></div>