refinerycms-authentication 1.0.11 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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') %>)
|