refinerycms-authentication 1.0.11 → 2.0.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/app/controllers/refinery/admin/users_controller.rb +100 -0
- data/app/controllers/refinery/passwords_controller.rb +51 -0
- data/app/controllers/refinery/sessions_controller.rb +26 -0
- data/app/controllers/refinery/users_controller.rb +42 -0
- data/app/helpers/refinery/sessions_helper.rb +4 -0
- data/app/helpers/refinery/users_helper.rb +4 -0
- data/app/mailers/refinery/user_mailer.rb +22 -0
- data/app/models/refinery/role.rb +18 -0
- data/app/models/refinery/roles_users.rb +8 -0
- data/app/models/refinery/user.rb +94 -0
- data/app/models/refinery/user_plugin.rb +8 -0
- data/app/views/refinery/admin/users/_actions.html.erb +6 -0
- data/app/views/{admin → refinery/admin}/users/_form.html.erb +15 -19
- data/app/views/{admin → refinery/admin}/users/_records.html.erb +1 -1
- data/app/views/refinery/admin/users/_user.html.erb +21 -0
- data/app/views/refinery/admin/users/_users.html.erb +4 -0
- data/app/views/refinery/admin/users/edit.html.erb +1 -0
- data/app/views/refinery/admin/users/index.html.erb +6 -0
- data/app/views/refinery/admin/users/new.html.erb +1 -0
- data/app/views/{layouts → refinery/layouts}/login.html.erb +3 -4
- data/app/views/refinery/passwords/edit.html.erb +26 -0
- data/app/views/refinery/passwords/new.html.erb +17 -0
- data/app/views/{sessions → refinery/sessions}/new.html.erb +6 -8
- data/app/views/refinery/user_mailer/reset_notification.html.erb +12 -0
- data/app/views/refinery/user_mailer/reset_notification.text.plain.erb +7 -0
- data/app/views/refinery/users/new.html.erb +29 -0
- data/config/locales/bg.yml +55 -55
- data/config/locales/cs.yml +58 -58
- data/config/locales/da.yml +55 -55
- data/config/locales/de.yml +55 -55
- data/config/locales/el.yml +55 -55
- data/config/locales/en.yml +55 -55
- data/config/locales/es.yml +55 -60
- data/config/locales/fi.yml +55 -55
- data/config/locales/fr.yml +55 -55
- data/config/locales/it.yml +51 -57
- data/config/locales/ja.yml +72 -0
- data/config/locales/ko.yml +72 -0
- data/config/locales/lt.yml +46 -46
- data/config/locales/lv.yml +55 -55
- data/config/locales/nb.yml +55 -55
- data/config/locales/nl.yml +55 -55
- data/config/locales/pl.yml +53 -59
- data/config/locales/pt-BR.yml +52 -52
- data/config/locales/rs.yml +62 -61
- data/config/locales/ru.yml +52 -52
- data/config/locales/sk.yml +55 -55
- data/config/locales/sl.yml +55 -54
- data/config/locales/sv.yml +52 -52
- data/config/locales/vi.yml +55 -55
- data/config/locales/zh-CN.yml +55 -55
- data/config/locales/zh-TW.yml +55 -55
- data/config/routes.rb +30 -24
- data/db/migrate/20100913234705_create_refinerycms_authentication_schema.rb +30 -30
- data/lib/refinery/authenticated_system.rb +40 -0
- data/lib/refinery/authentication/configuration.rb +9 -0
- data/lib/refinery/authentication/engine.rb +36 -0
- data/lib/refinery/authentication.rb +29 -0
- data/lib/refinerycms-authentication.rb +1 -54
- data/refinerycms-authentication.gemspec +14 -109
- data/spec/controllers/refinery/admin/users_controller_spec.rb +73 -0
- data/spec/factories/user.rb +38 -0
- data/spec/models/refinery/user_spec.rb +220 -0
- data/spec/requests/refinery/admin/users_spec.rb +49 -0
- data/spec/requests/refinery/passwords_spec.rb +84 -0
- data/spec/requests/refinery/sessions_spec.rb +62 -0
- metadata +109 -124
- data/app/controllers/admin/users_controller.rb +0 -86
- data/app/controllers/passwords_controller.rb +0 -42
- data/app/controllers/sessions_controller.rb +0 -23
- data/app/controllers/users_controller.rb +0 -67
- data/app/helpers/sessions_helper.rb +0 -2
- data/app/helpers/users_helper.rb +0 -2
- data/app/mailers/user_mailer.rb +0 -20
- data/app/models/role.rb +0 -16
- data/app/models/roles_users.rb +0 -6
- data/app/models/user.rb +0 -65
- data/app/models/user_plugin.rb +0 -6
- data/app/views/admin/users/_actions.html.erb +0 -5
- data/app/views/admin/users/_user.html.erb +0 -19
- data/app/views/admin/users/_users.html.erb +0 -4
- data/app/views/admin/users/edit.html.erb +0 -1
- data/app/views/admin/users/index.html.erb +0 -6
- data/app/views/admin/users/new.html.erb +0 -1
- data/app/views/passwords/edit.html.erb +0 -31
- data/app/views/passwords/new.html.erb +0 -18
- data/app/views/user_mailer/reset_notification.html.erb +0 -12
- data/app/views/user_mailer/reset_notification.text.plain.erb +0 -7
- data/app/views/users/new.html.erb +0 -41
- data/config/locales/jp.yml +0 -72
- data/config/locales/lolcat.yml +0 -55
- data/db/migrate/20100929035252_add_missing_indexes_to_roles_users.rb +0 -11
- data/db/migrate/20101206013505_change_to_devise_users_table.rb +0 -27
- data/db/migrate/20110106184757_add_remember_created_at_to_users.rb +0 -9
- data/db/migrate/20110325213325_remove_password_salt_from_users.rb +0 -13
- data/features/lost_password.feature +0 -49
- data/features/manage_users.feature +0 -88
- data/features/step_definitions/lost_password.rb +0 -8
- data/features/step_definitions/user_steps.rb +0 -41
- data/features/support/factories.rb +0 -32
- data/features/support/paths.rb +0 -24
- data/lib/authenticated_system.rb +0 -29
- data/lib/gemspec.rb +0 -38
- data/lib/generators/refinerycms_authentication_generator.rb +0 -8
- data/spec/models/user_spec.rb +0 -152
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
module Admin
|
|
3
|
+
class UsersController < Refinery::AdminController
|
|
4
|
+
|
|
5
|
+
crudify :'refinery/user',
|
|
6
|
+
:order => 'username ASC',
|
|
7
|
+
:title_attribute => 'username',
|
|
8
|
+
:xhr_paging => true
|
|
9
|
+
|
|
10
|
+
before_filter :load_available_plugins_and_roles, :only => [:new, :create, :edit, :update]
|
|
11
|
+
|
|
12
|
+
def new
|
|
13
|
+
@user = Refinery::User.new
|
|
14
|
+
@selected_plugin_names = []
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def create
|
|
18
|
+
@user = Refinery::User.new(params[:user])
|
|
19
|
+
@selected_plugin_names = params[:user][:plugins] || []
|
|
20
|
+
@selected_role_names = params[:user][:roles] || []
|
|
21
|
+
|
|
22
|
+
if @user.save
|
|
23
|
+
@user.plugins = @selected_plugin_names
|
|
24
|
+
# if the user is a superuser and can assign roles according to this site's
|
|
25
|
+
# settings then the roles are set with the POST data.
|
|
26
|
+
unless current_refinery_user.has_role?(:superuser) and Refinery::Authentication.superuser_can_assign_roles
|
|
27
|
+
@user.add_role(:refinery)
|
|
28
|
+
else
|
|
29
|
+
@user.roles = @selected_role_names.collect { |r| Refinery::Role[r.downcase.to_sym] }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
redirect_to refinery.admin_users_path,
|
|
33
|
+
:notice => t('created', :what => @user.username, :scope => 'refinery.crudify')
|
|
34
|
+
else
|
|
35
|
+
render :action => 'new'
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def edit
|
|
40
|
+
@user = Refinery::User.find(params[:id])
|
|
41
|
+
|
|
42
|
+
redirect_unless_user_editable!
|
|
43
|
+
|
|
44
|
+
@selected_plugin_names = @user.plugins.collect(&:name)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def update
|
|
48
|
+
redirect_unless_user_editable!
|
|
49
|
+
|
|
50
|
+
# Store what the user selected.
|
|
51
|
+
@selected_role_names = params[:user].delete(:roles) || []
|
|
52
|
+
unless current_refinery_user.has_role?(:superuser) and Refinery::Authentication.superuser_can_assign_roles
|
|
53
|
+
@selected_role_names = @user.roles.collect(&:title)
|
|
54
|
+
end
|
|
55
|
+
@selected_plugin_names = params[:user][:plugins]
|
|
56
|
+
|
|
57
|
+
# Prevent the current user from locking themselves out of the User manager
|
|
58
|
+
if current_refinery_user.id == @user.id and (params[:user][:plugins].exclude?("refinery_users") || @selected_role_names.map(&:downcase).exclude?("refinery"))
|
|
59
|
+
flash.now[:error] = t('cannot_remove_user_plugin_from_current_user', :scope => 'refinery.admin.users.update')
|
|
60
|
+
render :edit
|
|
61
|
+
else
|
|
62
|
+
# Store the current plugins and roles for this user.
|
|
63
|
+
@previously_selected_plugin_names = @user.plugins.collect(&:name)
|
|
64
|
+
@previously_selected_roles = @user.roles
|
|
65
|
+
@user.roles = @selected_role_names.collect { |r| Refinery::Role[r.downcase.to_sym] }
|
|
66
|
+
if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
|
|
67
|
+
params[:user].except!(:password, :password_confirmation)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
if @user.update_attributes(params[:user])
|
|
71
|
+
redirect_to refinery.admin_users_path,
|
|
72
|
+
:notice => t('updated', :what => @user.username, :scope => 'refinery.crudify')
|
|
73
|
+
else
|
|
74
|
+
@user.plugins = @previously_selected_plugin_names
|
|
75
|
+
@user.roles = @previously_selected_roles
|
|
76
|
+
@user.save
|
|
77
|
+
render :edit
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
protected
|
|
83
|
+
|
|
84
|
+
def load_available_plugins_and_roles
|
|
85
|
+
@available_plugins = Refinery::Plugins.registered.in_menu.collect { |a|
|
|
86
|
+
{ :name => a.name, :title => a.title }
|
|
87
|
+
}.sort_by { |a| a[:title] }
|
|
88
|
+
|
|
89
|
+
@available_roles = Refinery::Role.all
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def redirect_unless_user_editable!
|
|
93
|
+
unless current_refinery_user.can_edit?(@user)
|
|
94
|
+
redirect_to(main_app.refinery_admin_users_path) and return
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
class PasswordsController < Devise::PasswordsController
|
|
3
|
+
layout 'refinery/layouts/login'
|
|
4
|
+
|
|
5
|
+
before_filter :store_password_reset_return_to, :only => [:update]
|
|
6
|
+
def store_password_reset_return_to
|
|
7
|
+
session[:'refinery_user_return_to'] = refinery.admin_root_path
|
|
8
|
+
end
|
|
9
|
+
protected :store_password_reset_return_to
|
|
10
|
+
|
|
11
|
+
# Rather than overriding devise, it seems better to just apply the notice here.
|
|
12
|
+
after_filter :give_notice, :only => [:update]
|
|
13
|
+
def give_notice
|
|
14
|
+
if %w(notice error alert).exclude?(flash.keys.map(&:to_s)) or @refinery_user.errors.any?
|
|
15
|
+
flash[:notice] = t('successful', :scope => 'refinery.users.reset', :email => @refinery_user.email)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
protected :give_notice
|
|
19
|
+
|
|
20
|
+
# GET /registrations/password/edit?reset_password_token=abcdef
|
|
21
|
+
def edit
|
|
22
|
+
if params[:reset_password_token] and (@refinery_user = User.where(:reset_password_token => params[:reset_password_token]).first).present?
|
|
23
|
+
respond_with(@refinery_user)
|
|
24
|
+
else
|
|
25
|
+
redirect_to refinery.new_refinery_user_password_path,
|
|
26
|
+
:flash => ({ :error => t('code_invalid', :scope => 'refinery.users.reset') })
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# POST /registrations/password
|
|
31
|
+
def create
|
|
32
|
+
if params[:refinery_user].present? and (email = params[:refinery_user][:email]).present? and
|
|
33
|
+
(user = User.where(:email => email).first).present?
|
|
34
|
+
|
|
35
|
+
# Call devise reset function.
|
|
36
|
+
user.send(:generate_reset_password_token!)
|
|
37
|
+
UserMailer.reset_notification(user, request).deliver
|
|
38
|
+
redirect_to refinery.new_refinery_user_session_path,
|
|
39
|
+
:notice => t('email_reset_sent', :scope => 'refinery.users.forgot')
|
|
40
|
+
else
|
|
41
|
+
@refinery_user = User.new(params[:refinery_user])
|
|
42
|
+
flash.now[:error] = if @refinery_user.email.blank?
|
|
43
|
+
t('blank_email', :scope => 'refinery.users.forgot')
|
|
44
|
+
else
|
|
45
|
+
t('email_not_associated_with_account_html', :email => @refinery_user.email, :scope => 'refinery.users.forgot').html_safe
|
|
46
|
+
end
|
|
47
|
+
render :new
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
class SessionsController < Devise::SessionsController
|
|
3
|
+
layout 'refinery/layouts/login'
|
|
4
|
+
|
|
5
|
+
before_filter :clear_unauthenticated_flash, :only => [:new]
|
|
6
|
+
|
|
7
|
+
def create
|
|
8
|
+
super
|
|
9
|
+
rescue ::BCrypt::Errors::InvalidSalt, ::BCrypt::Errors::InvalidHash
|
|
10
|
+
flash[:error] = t('password_encryption', :scope => 'refinery.users.forgot')
|
|
11
|
+
redirect_to refinery.new_refinery_user_password_path
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
# We don't like this alert.
|
|
17
|
+
def clear_unauthenticated_flash
|
|
18
|
+
if flash.keys.include?(:alert) and flash.any?{|k, v|
|
|
19
|
+
['unauthenticated', t('unauthenticated', :scope => 'devise.failure')].include?(v)
|
|
20
|
+
}
|
|
21
|
+
flash.delete(:alert)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
class UsersController < Devise::RegistrationsController
|
|
3
|
+
|
|
4
|
+
# Protect these actions behind an admin login
|
|
5
|
+
before_filter :redirect?, :only => [:new, :create]
|
|
6
|
+
|
|
7
|
+
layout 'refinery/layouts/login'
|
|
8
|
+
|
|
9
|
+
def new
|
|
10
|
+
@user = User.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# This method should only be used to create the first Refinery user.
|
|
14
|
+
def create
|
|
15
|
+
@user = User.new(params[:user])
|
|
16
|
+
|
|
17
|
+
if @user.create_first
|
|
18
|
+
flash[:message] = "<h2>#{t('welcome', :scope => 'refinery.users.create', :who => @user.username).gsub(/\.$/, '')}.</h2>".html_safe
|
|
19
|
+
|
|
20
|
+
sign_in(@user)
|
|
21
|
+
redirect_back_or_default(refinery.admin_root_path)
|
|
22
|
+
else
|
|
23
|
+
render :new
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
def redirect?
|
|
30
|
+
if refinery_user?
|
|
31
|
+
redirect_to refinery.admin_users_path
|
|
32
|
+
elsif refinery_users_exist?
|
|
33
|
+
redirect_to refinery.new_refinery_user_session_path
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def refinery_users_exist?
|
|
38
|
+
Refinery::Role[:refinery].users.any?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
class UserMailer < ActionMailer::Base
|
|
3
|
+
|
|
4
|
+
def reset_notification(user, request)
|
|
5
|
+
@user = user
|
|
6
|
+
@url = refinery.edit_refinery_user_password_url({
|
|
7
|
+
:host => request.host_with_port,
|
|
8
|
+
:reset_password_token => @user.reset_password_token
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
mail(:to => user.email,
|
|
12
|
+
:subject => t('subject', :scope => 'refinery.user_mailer.reset_notification'),
|
|
13
|
+
:from => "\"#{Refinery::Core.site_name}\" <no-reply@#{request.domain}>")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
protected
|
|
17
|
+
|
|
18
|
+
def url_prefix(request)
|
|
19
|
+
"#{request.protocol}#{request.host_with_port}"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Refinery
|
|
2
|
+
class Role < Refinery::Core::BaseModel
|
|
3
|
+
|
|
4
|
+
has_and_belongs_to_many :users, :join_table => :refinery_roles_users
|
|
5
|
+
|
|
6
|
+
before_validation :camelize_title
|
|
7
|
+
validates :title, :uniqueness => true
|
|
8
|
+
|
|
9
|
+
def camelize_title(role_title = self.title)
|
|
10
|
+
self.title = role_title.to_s.camelize
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.[](title)
|
|
14
|
+
find_or_create_by_title(title.to_s.camelize)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'devise'
|
|
2
|
+
|
|
3
|
+
module Refinery
|
|
4
|
+
class User < Refinery::Core::BaseModel
|
|
5
|
+
extend FriendlyId
|
|
6
|
+
|
|
7
|
+
has_and_belongs_to_many :roles, :join_table => :refinery_roles_users
|
|
8
|
+
|
|
9
|
+
has_many :plugins, :class_name => "UserPlugin", :order => "position ASC", :dependent => :destroy
|
|
10
|
+
friendly_id :username
|
|
11
|
+
|
|
12
|
+
# Include default devise modules. Others available are:
|
|
13
|
+
# :token_authenticatable, :confirmable, :lockable and :timeoutable
|
|
14
|
+
if self.respond_to?(:devise)
|
|
15
|
+
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Setup accessible (or protected) attributes for your model
|
|
19
|
+
# :login is a virtual attribute for authenticating by either username or email
|
|
20
|
+
# This is in addition to a real persisted field like 'username'
|
|
21
|
+
attr_accessor :login
|
|
22
|
+
attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :plugins, :login
|
|
23
|
+
|
|
24
|
+
validates :username, :presence => true, :uniqueness => true
|
|
25
|
+
|
|
26
|
+
class << self
|
|
27
|
+
# Find user by email or username.
|
|
28
|
+
# https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign_in-using-their-username-or-email-address
|
|
29
|
+
def find_for_database_authentication(conditions)
|
|
30
|
+
value = conditions[authentication_keys.first]
|
|
31
|
+
where(["username = :value OR email = :value", { :value => value }]).first
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def plugins=(plugin_names)
|
|
36
|
+
if persisted? # don't add plugins when the user_id is nil.
|
|
37
|
+
UserPlugin.delete_all(:user_id => id)
|
|
38
|
+
|
|
39
|
+
plugin_names.each_with_index do |plugin_name, index|
|
|
40
|
+
plugins.create(:name => plugin_name, :position => index) if plugin_name.is_a?(String)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def authorized_plugins
|
|
46
|
+
plugins.collect { |p| p.name } | ::Refinery::Plugins.always_allowed.names
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def can_delete?(user_to_delete = self)
|
|
50
|
+
user_to_delete.persisted? &&
|
|
51
|
+
!user_to_delete.has_role?(:superuser) &&
|
|
52
|
+
::Refinery::Role[:refinery].users.any? &&
|
|
53
|
+
id != user_to_delete.id
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def can_edit?(user_to_edit = self)
|
|
57
|
+
user_to_edit.persisted? && (
|
|
58
|
+
user_to_edit == self ||
|
|
59
|
+
self.has_role?(:superuser)
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def add_role(title)
|
|
64
|
+
raise ArgumentException, "Role should be the title of the role not a role object." if title.is_a?(::Refinery::Role)
|
|
65
|
+
roles << ::Refinery::Role[title] unless has_role?(title)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def has_role?(title)
|
|
69
|
+
raise ArgumentException, "Role should be the title of the role not a role object." if title.is_a?(::Refinery::Role)
|
|
70
|
+
roles.any?{|r| r.title == title.to_s.camelize}
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def create_first
|
|
74
|
+
if valid?
|
|
75
|
+
# first we need to save user
|
|
76
|
+
save
|
|
77
|
+
# add refinery role
|
|
78
|
+
add_role(:refinery)
|
|
79
|
+
# add superuser role
|
|
80
|
+
add_role(:superuser) if ::Refinery::Role[:refinery].users.count == 1
|
|
81
|
+
# add plugins
|
|
82
|
+
self.plugins = Refinery::Plugins.registered.in_menu.names
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# return true/false based on validations
|
|
86
|
+
valid?
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def to_s
|
|
90
|
+
username
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
<%= form_for [:admin, @user] do |f| %>
|
|
1
|
+
<%= form_for [refinery, :admin, @user] do |f| %>
|
|
2
2
|
|
|
3
|
-
<%= render
|
|
4
|
-
:locals => {
|
|
5
|
-
:object => @user,
|
|
6
|
-
:include_object_name => true
|
|
7
|
-
} %>
|
|
3
|
+
<%= render '/refinery/admin/error_messages', :object => @user, :include_object_name => true %>
|
|
8
4
|
|
|
9
5
|
<div class='field'>
|
|
10
6
|
<%= f.label :username %>
|
|
@@ -17,7 +13,10 @@
|
|
|
17
13
|
<div class='field'>
|
|
18
14
|
<%= f.label :password %>
|
|
19
15
|
<%= f.password_field :password, :autocomplete => 'off' %>
|
|
20
|
-
|
|
16
|
+
<% if @user.persisted? %>
|
|
17
|
+
<%= content_tag(:br) %>
|
|
18
|
+
<%= content_tag(:span, t('.blank_password_keeps_current')) %>
|
|
19
|
+
<% end %>
|
|
21
20
|
</div>
|
|
22
21
|
<div class='field'>
|
|
23
22
|
<%= f.label :password_confirmation %>
|
|
@@ -31,7 +30,7 @@
|
|
|
31
30
|
<ul id='plugins' class='checkboxes'>
|
|
32
31
|
<% @available_plugins.each do |plugin| -%>
|
|
33
32
|
<% if Refinery::Plugins.always_allowed.names.include?(plugin[:name]) or
|
|
34
|
-
(plugin[:name] == 'refinery_users' and @user.id ==
|
|
33
|
+
(plugin[:name] == 'refinery_users' and @user.id == current_refinery_user.id) %>
|
|
35
34
|
<%= hidden_field_tag 'user[plugins][]', plugin[:name],
|
|
36
35
|
:id => "plugins_#{plugin[:name]}" %>
|
|
37
36
|
<% else %>
|
|
@@ -40,7 +39,7 @@
|
|
|
40
39
|
@selected_plugin_names.include?(plugin[:name]),
|
|
41
40
|
:id => "plugins_#{plugin[:name]}" %>
|
|
42
41
|
<%= f.label 'user[plugins][]',
|
|
43
|
-
t('title', :scope => "plugins.#{plugin[:name].downcase}", :default => plugin[:title]),
|
|
42
|
+
t('title', :scope => "refinery.plugins.#{plugin[:name].downcase}", :default => plugin[:title]),
|
|
44
43
|
:class => "stripped",
|
|
45
44
|
:for => "plugins_#{plugin[:name]}" %>
|
|
46
45
|
</li>
|
|
@@ -49,7 +48,7 @@
|
|
|
49
48
|
</ul>
|
|
50
49
|
</div>
|
|
51
50
|
|
|
52
|
-
<% if
|
|
51
|
+
<% if current_refinery_user.has_role?(:superuser) and Refinery::Authentication.superuser_can_assign_roles %>
|
|
53
52
|
<div class='field role_access'>
|
|
54
53
|
<span class='label_with_help'>
|
|
55
54
|
<%= f.label :role_access, t('.role_access'), :class => "title_label" %>
|
|
@@ -61,7 +60,7 @@
|
|
|
61
60
|
<%= check_box_tag 'user[roles][]', downcased_title, @user.has_role?(title),
|
|
62
61
|
:id => "roles_#{downcased_title}" %>
|
|
63
62
|
<%= f.label 'user[roles][]',
|
|
64
|
-
t(downcased_title, :scope => 'roles', :default => title),
|
|
63
|
+
t(downcased_title, :scope => 'refinery.roles', :default => title),
|
|
65
64
|
:class => 'stripped',
|
|
66
65
|
:for => "roles_#{downcased_title}" %>
|
|
67
66
|
</li>
|
|
@@ -70,14 +69,11 @@
|
|
|
70
69
|
</div>
|
|
71
70
|
<% end %>
|
|
72
71
|
|
|
73
|
-
<%= render
|
|
74
|
-
:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
:delete_title => t('delete', :scope => 'admin.users'),
|
|
79
|
-
:delete_confirmation => t('message', :scope => 'shared.admin.delete', :title => @user.username)
|
|
80
|
-
} %>
|
|
72
|
+
<%= render '/refinery/admin/form_actions', :f => f,
|
|
73
|
+
:continue_editing => false,
|
|
74
|
+
:hide_delete => !current_refinery_user.can_delete?(@user),
|
|
75
|
+
:delete_title => t('delete', :scope => 'refinery.admin.users'),
|
|
76
|
+
:delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @user.username) %>
|
|
81
77
|
<% end %>
|
|
82
78
|
|
|
83
79
|
<% content_for :javascripts do %>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<li id="sortable_<%= user.id %>" class='clearfix record <%= cycle("on", "on-hover") %>'>
|
|
2
|
+
<span class='title'>
|
|
3
|
+
<strong><%= user.username %></strong>
|
|
4
|
+
<span class="preview">
|
|
5
|
+
<%= t('.preview', :who => user.email, :created_at => l(user.created_at, :format => :short)) %>
|
|
6
|
+
</span>
|
|
7
|
+
</span>
|
|
8
|
+
<span class='actions'>
|
|
9
|
+
<%= mail_to user.email, refinery_icon_tag('email_go.png'),
|
|
10
|
+
:title => t('.email_user') %>
|
|
11
|
+
<%= link_to refinery_icon_tag('application_edit.png'),
|
|
12
|
+
refinery.edit_admin_user_path(user),
|
|
13
|
+
:title => t('edit', :scope => 'refinery.admin.users') if current_refinery_user.can_edit?(user) %>
|
|
14
|
+
<%= link_to refinery_icon_tag('delete.png'),
|
|
15
|
+
refinery.admin_user_path(user),
|
|
16
|
+
:class => "cancel confirm-delete",
|
|
17
|
+
:title => t('delete', :scope => 'refinery.admin.users'),
|
|
18
|
+
:method => :delete,
|
|
19
|
+
:confirm => t('message', :scope => 'refinery.admin.delete', :title => user.username) if current_refinery_user.can_delete?(user) %>
|
|
20
|
+
</span>
|
|
21
|
+
</li>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render 'form' %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render 'form' %>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<%= render
|
|
3
|
-
<%= render
|
|
2
|
+
<%= render '/refinery/html_tag' %>
|
|
3
|
+
<%= render '/refinery/admin/head' %>
|
|
4
4
|
<body class='login <%= I18n.locale %>'>
|
|
5
5
|
<div id='tooltip_container'></div>
|
|
6
6
|
<header>
|
|
@@ -10,12 +10,11 @@
|
|
|
10
10
|
<div id="page">
|
|
11
11
|
<div id="content" class="clearfix">
|
|
12
12
|
<div id="flash_container">
|
|
13
|
-
<%= render
|
|
13
|
+
<%= render '/refinery/message' %>
|
|
14
14
|
</div>
|
|
15
15
|
<%= yield %>
|
|
16
16
|
</div>
|
|
17
17
|
</div>
|
|
18
18
|
</div>
|
|
19
|
-
<%= render :partial => "/admin/javascripts", :locals => {:login => true} %>
|
|
20
19
|
</body>
|
|
21
20
|
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<% content_for :header, t('pick_new_password_for', :scope => 'refinery.users.reset', :email => @refinery_user.email) %>
|
|
2
|
+
|
|
3
|
+
<%= form_for resource, :as => resource_name,
|
|
4
|
+
:url => refinery.refinery_user_password_path,
|
|
5
|
+
:html => { :method => :put } do |f| %>
|
|
6
|
+
<%= f.hidden_field :reset_password_token %>
|
|
7
|
+
|
|
8
|
+
<%= render '/refinery/admin/error_messages', :object => @refinery_user, :include_object_name => true %>
|
|
9
|
+
|
|
10
|
+
<div class='field'>
|
|
11
|
+
<%= f.label :password %>
|
|
12
|
+
<%= f.password_field :password, :class => 'larger widest' %>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div class='field'>
|
|
16
|
+
<%= f.label :password_confirmation %>
|
|
17
|
+
<%= f.password_field :password_confirmation, :class => 'larger widest' %>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<%= render '/refinery/admin/form_actions', :f => f,
|
|
21
|
+
:continue_editing => false,
|
|
22
|
+
:submit_button_text => t('reset_password', :scope => 'refinery.users.reset'),
|
|
23
|
+
:cancel_url => refinery.new_refinery_user_session_path,
|
|
24
|
+
:cancel_title => nil,
|
|
25
|
+
:hide_delete => true -%>
|
|
26
|
+
<% end -%>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<% content_for :header, t('enter_email_address', :scope => 'refinery.users.forgot') %>
|
|
2
|
+
|
|
3
|
+
<%= form_for resource, :as => resource_name,
|
|
4
|
+
:url => refinery.refinery_user_password_path,
|
|
5
|
+
:html => { :method => :post } do |f| %>
|
|
6
|
+
|
|
7
|
+
<div class='field'>
|
|
8
|
+
<%= f.text_field :email, :class => "larger widest",
|
|
9
|
+
:placeholder => t('email_address', :scope => 'refinery.users.forgot') %>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<%= render '/refinery/admin/form_actions', :f => f,
|
|
13
|
+
:continue_editing => false,
|
|
14
|
+
:submit_button_text => t('reset_password', :scope => 'refinery.users.forgot'),
|
|
15
|
+
:cancel_url => refinery.refinery_user_session_path,
|
|
16
|
+
:cancel_title => nil -%>
|
|
17
|
+
<% end -%>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<% content_for :header, t('.hello_please_sign_in') %>
|
|
2
2
|
|
|
3
|
-
<%= form_for
|
|
3
|
+
<%= form_for resource, :as => resource_name,
|
|
4
|
+
:url => refinery.refinery_user_session_path do |f| %>
|
|
4
5
|
<div class='field session_username clearfix'>
|
|
5
6
|
<%= f.label :login %>
|
|
6
7
|
<%= f.text_field :login, :class => 'larger widest' %>
|
|
@@ -17,13 +18,10 @@
|
|
|
17
18
|
</div>
|
|
18
19
|
<% end %>
|
|
19
20
|
<div class='field forgot_password'>
|
|
20
|
-
<%= link_to t('.forgot_password'),
|
|
21
|
+
<%= link_to t('.forgot_password'), refinery.new_refinery_user_password_path %>
|
|
21
22
|
</div>
|
|
22
23
|
</div>
|
|
23
|
-
<%= render
|
|
24
|
-
:
|
|
25
|
-
|
|
26
|
-
:submit_button_text => t('.sign_in'),
|
|
27
|
-
:hide_cancel => true
|
|
28
|
-
} %>
|
|
24
|
+
<%= render '/refinery/admin/form_actions', :f => f,
|
|
25
|
+
:submit_button_text => t('.sign_in'),
|
|
26
|
+
:hide_cancel => true %>
|
|
29
27
|
<% end -%>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<p>
|
|
2
|
+
<%= t('reset_request_received_for', :scope => 'refinery.user_mailer.reset_notification', :username => @user.username) %>
|
|
3
|
+
</p>
|
|
4
|
+
<p>
|
|
5
|
+
<%= t('visit_this_url', :scope => 'refinery.user_mailer.reset_notification') %>:
|
|
6
|
+
</p>
|
|
7
|
+
<p>
|
|
8
|
+
<%= @url %>
|
|
9
|
+
</p>
|
|
10
|
+
<p>
|
|
11
|
+
(<%= t('remain_same_if_no_action', :scope => 'refinery.user_mailer.reset_notification') %>)
|
|
12
|
+
</p>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<%= t('reset_request_received_for', :scope => 'refinery.user_mailer.reset_notification', :username => @user.username) %>
|
|
2
|
+
|
|
3
|
+
<%= t('visit_this_url', :scope => 'refinery.user_mailer.reset_notification') %>:
|
|
4
|
+
|
|
5
|
+
<%= @url %>
|
|
6
|
+
|
|
7
|
+
(<%= t('remain_same_if_no_action', :scope => 'refinery.user_mailer.reset_notification') %>)
|