kryptonite 0.0.1 → 0.0.2
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/PUBLIC_VERSION.yml +1 -1
- data/README.rdoc +6 -1
- data/Rakefile +2 -0
- data/app/controllers/kryptonite/kryptonite_controller.rb +27 -1
- data/app/controllers/kryptonite/password_resets_controller.rb +6 -6
- data/app/controllers/kryptonite/user_sessions_controller.rb +2 -2
- data/app/controllers/kryptonite/users_controller.rb +17 -17
- data/app/mailers/kryptonite/kryptonite_notification.rb +3 -3
- data/app/models/kryptonite/user.rb +2 -0
- data/app/views/kryptonite/kryptonite/blank.html.erb +1 -1
- data/app/views/kryptonite/kryptonite_notification/generate_new_password.erb +5 -5
- data/app/views/kryptonite/kryptonite_notification/new_user_information.erb +5 -5
- data/app/views/kryptonite/kryptonite_notification/password_reset_instructions.erb +4 -5
- data/app/views/kryptonite/password_resets/edit.html.erb +3 -3
- data/app/views/kryptonite/user_sessions/new.html.erb +7 -7
- data/app/views/kryptonite/users/index.html.erb +7 -7
- data/app/views/kryptonite/users/new.html.erb +6 -6
- data/app/views/kryptonite/users/show.html.erb +13 -13
- data/app/views/layouts/kryptonite_auth.html.erb +2 -3
- data/app/views/layouts/kryptonite_main.html.erb +4 -4
- data/config/locales/en.yml +81 -0
- data/lib/generators/kryptonite/install/templates/public/{casein → kryptonite}/javascripts/custom.js +0 -0
- data/lib/generators/kryptonite/install/templates/public/{casein → kryptonite}/stylesheets/custom.css +0 -0
- data/lib/generators/kryptonite/scaffold/scaffold_generator.rb +1 -0
- data/lib/generators/kryptonite/scaffold/templates/controller.rb +34 -18
- data/lib/generators/kryptonite/scaffold/templates/en.yml +7 -0
- data/lib/generators/kryptonite/scaffold/templates/views/_table.html.erb +1 -1
- data/lib/generators/kryptonite/scaffold/templates/views/index.html.erb +2 -2
- data/lib/generators/kryptonite/scaffold/templates/views/new.html.erb +4 -4
- data/lib/generators/kryptonite/scaffold/templates/views/show.html.erb +4 -4
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/kryptonite.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/loading.gif +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/fileuploader.js +1247 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/stylesheets/fileuploader.css +51 -0
- data/lib/generators/kryptonite/update/update_generator.rb +3 -0
- metadata +42 -5
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/casein.png +0 -0
data/PUBLIC_VERSION.yml
CHANGED
data/README.rdoc
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
=Kryptonite. A really simple CMS
|
2
2
|
|
3
|
-
|
3
|
+
Coming
|
4
|
+
|
4
5
|
|
5
6
|
==Installation
|
6
7
|
|
@@ -32,6 +33,10 @@ Comming
|
|
32
33
|
:authentication => :login
|
33
34
|
}
|
34
35
|
|
36
|
+
- Put the autoload paths in your application.rb
|
37
|
+
|
38
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
39
|
+
|
35
40
|
— Install Kryptonite configuration files into your project. This should not be run more than once without backing up or merging the generated files, as your customisations will be overwritten:
|
36
41
|
|
37
42
|
rails g kryptonite:install
|
data/Rakefile
CHANGED
@@ -34,6 +34,8 @@ begin
|
|
34
34
|
gem.homepage = "http://github.com/onefriendaday/Kryptonite"
|
35
35
|
gem.add_dependency("will_paginate", ["3.0.0"])
|
36
36
|
gem.add_dependency("authlogic", ["3.0.3"])
|
37
|
+
gem.add_dependency("best_in_place", ["1.0.6"])
|
38
|
+
gem.add_dependency("paperclip", ["3.0.1"])
|
37
39
|
end
|
38
40
|
rescue
|
39
41
|
puts "Jeweler or one of its dependencies is not installed."
|
@@ -16,6 +16,8 @@ module Kryptonite
|
|
16
16
|
helper_method :current_user_session, :current_user
|
17
17
|
before_filter :authorise
|
18
18
|
before_filter :set_time_zone
|
19
|
+
before_filter :get_uploaded_file
|
20
|
+
after_filter :destroy_uploaded_file
|
19
21
|
|
20
22
|
ActionView::Base.field_error_proc = proc { |input, instance| "<span class='formError'>#{input}</span>".html_safe }
|
21
23
|
|
@@ -24,11 +26,35 @@ module Kryptonite
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def blank
|
27
|
-
@kryptonite_page_title =
|
29
|
+
@kryptonite_page_title = t(:home_page_title)
|
28
30
|
end
|
29
31
|
|
30
32
|
private
|
31
33
|
|
34
|
+
def get_uploaded_file
|
35
|
+
if params.has_key?(:qqfile)
|
36
|
+
if params[:browser]=="opera"
|
37
|
+
@tempname = params[:qqfile].original_filename
|
38
|
+
file_content = File.open("#{Rails.root.to_s}/tmp/#{@tempname}", "wb") do |f|
|
39
|
+
f.write(params[:qqfile].read)
|
40
|
+
end
|
41
|
+
else
|
42
|
+
@tempname = request.env['HTTP_X_FILE_NAME']
|
43
|
+
file_content = File.open("#{Rails.root.to_s}/tmp/#{@tempname}", "wb") do |f|
|
44
|
+
f.write(request.env['rack.input'].read)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
@file = File.new("#{Rails.root.to_s}/tmp/#{@tempname}")
|
48
|
+
#filename = "#{Rails.root.to_s}/tmp/#{tempname}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def destroy_uploaded_file
|
53
|
+
if params.has_key?(:qqfile)
|
54
|
+
File.unlink("#{Rails.root.to_s}/tmp/#{@tempname}")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
32
58
|
def authorise
|
33
59
|
unless current_user
|
34
60
|
session[:return_to] = request.fullpath
|
@@ -17,12 +17,12 @@ module Kryptonite
|
|
17
17
|
end
|
18
18
|
|
19
19
|
if users.length > 1
|
20
|
-
flash[:notice] =
|
20
|
+
flash[:notice] = t(:multiple_acctounts_notice, :email=>params[:recover_email])
|
21
21
|
else
|
22
|
-
flash[:notice] =
|
22
|
+
flash[:notice] = t(:email_sent_notice, :email=>params[:recover_email])
|
23
23
|
end
|
24
24
|
else
|
25
|
-
flash[:warning] =
|
25
|
+
flash[:warning] = t(:no_user_warning)
|
26
26
|
end
|
27
27
|
|
28
28
|
redirect_to new_kryptonite_user_session_url
|
@@ -35,14 +35,14 @@ module Kryptonite
|
|
35
35
|
def update
|
36
36
|
|
37
37
|
if params[:kryptonite_user][:password].empty? || params[:kryptonite_user][:password_confirmation].empty?
|
38
|
-
flash.now[:warning] =
|
38
|
+
flash.now[:warning] = t(:field_empty_warning)
|
39
39
|
else
|
40
40
|
|
41
41
|
@reset_user.password = params[:kryptonite_user][:password]
|
42
42
|
@reset_user.password_confirmation = params[:kryptonite_user][:password_confirmation]
|
43
43
|
|
44
44
|
if @reset_user.save
|
45
|
-
flash[:notice] =
|
45
|
+
flash[:notice] = t(:password_updated_notice)
|
46
46
|
redirect_to new_kryptonite_user_session_url
|
47
47
|
return
|
48
48
|
end
|
@@ -58,7 +58,7 @@ module Kryptonite
|
|
58
58
|
@reset_user = Kryptonite::User.find_using_perishable_token params[:token]
|
59
59
|
|
60
60
|
unless @reset_user
|
61
|
-
flash[:warning] =
|
61
|
+
flash[:warning] = t(:account_not_located_warning)
|
62
62
|
redirect_to new_kryptonite_user_session_url
|
63
63
|
end
|
64
64
|
end
|
@@ -15,7 +15,7 @@ module Kryptonite
|
|
15
15
|
def create
|
16
16
|
@user_session = Kryptonite::UserSession.new params[:kryptonite_user_session]
|
17
17
|
if @user_session.save
|
18
|
-
flash[:notice] =
|
18
|
+
flash[:notice] = t(:login_successful)
|
19
19
|
redirect_back_or_default :controller => :kryptonite, :action => :index
|
20
20
|
else
|
21
21
|
render :action => :new
|
@@ -24,7 +24,7 @@ module Kryptonite
|
|
24
24
|
|
25
25
|
def destroy
|
26
26
|
current_user_session.destroy
|
27
|
-
flash[:notice] =
|
27
|
+
flash[:notice] = t(:logout_successful)
|
28
28
|
redirect_back_or_default new_kryptonite_user_session_url
|
29
29
|
end
|
30
30
|
|
@@ -7,12 +7,12 @@ module Kryptonite
|
|
7
7
|
before_filter :needs_admin_or_current_user, :only => [:show, :destroy, :update, :update_password]
|
8
8
|
|
9
9
|
def index
|
10
|
-
@kryptonite_page_title = "
|
10
|
+
@kryptonite_page_title = t("users_page_title")
|
11
11
|
@users = Kryptonite::User.paginate :order => "login", :page => params[:page]
|
12
12
|
end
|
13
13
|
|
14
14
|
def new
|
15
|
-
@kryptonite_page_title = "
|
15
|
+
@kryptonite_page_title = t("users_add_new")
|
16
16
|
@kryptonite_user = Kryptonite::User.new
|
17
17
|
@kryptonite_user.time_zone = Rails.configuration.time_zone
|
18
18
|
end
|
@@ -21,27 +21,27 @@ module Kryptonite
|
|
21
21
|
@kryptonite_user = Kryptonite::User.new params[:kryptonite_user]
|
22
22
|
|
23
23
|
if @kryptonite_user.save
|
24
|
-
flash[:notice] = "
|
24
|
+
flash[:notice] = t("users_email_sent_with_details", :username=>@kryptonite_user.name)
|
25
25
|
redirect_to kryptonite_users_path
|
26
26
|
else
|
27
|
-
flash.now[:warning] = "
|
27
|
+
flash.now[:warning] = t("users_problems_saving_warning")
|
28
28
|
render :action => :new
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
def show
|
33
33
|
@kryptonite_user = Kryptonite::User.find params[:id]
|
34
|
-
@kryptonite_page_title = @kryptonite_user.name + " |
|
34
|
+
@kryptonite_page_title = @kryptonite_user.name + " | " + t("users_show")
|
35
35
|
end
|
36
36
|
|
37
37
|
def update
|
38
38
|
@kryptonite_user = Kryptonite::User.find params[:id]
|
39
|
-
@kryptonite_page_title = @kryptonite_user.name + " |
|
39
|
+
@kryptonite_page_title = @kryptonite_user.name + " | " + t("users_update")
|
40
40
|
|
41
41
|
if @kryptonite_user.update_attributes params[:kryptonite_user]
|
42
|
-
flash[:notice] =
|
42
|
+
flash[:notice] = t("users_updated_notice", :username=>@kryptonite_user.name)
|
43
43
|
else
|
44
|
-
flash.now[:warning] = "
|
44
|
+
flash.now[:warning] = t("users_problems_updating")
|
45
45
|
render :action => :show
|
46
46
|
return
|
47
47
|
end
|
@@ -55,16 +55,16 @@ module Kryptonite
|
|
55
55
|
|
56
56
|
def update_password
|
57
57
|
@kryptonite_user = Kryptonite::User.find params[:id]
|
58
|
-
@kryptonite_page_title = @kryptonite_user.name + " |
|
58
|
+
@kryptonite_page_title = @kryptonite_user.name + " | " + t("users_update_password")
|
59
59
|
|
60
60
|
if @kryptonite_user.valid_password? params[:form_current_password]
|
61
61
|
if @kryptonite_user.update_attributes params[:kryptonite_user]
|
62
|
-
flash.now[:notice] = "
|
62
|
+
flash.now[:notice] = t("users_password_changed_notice")
|
63
63
|
else
|
64
|
-
flash.now[:warning] = "
|
64
|
+
flash.now[:warning] = t("users_problems_changing_password")
|
65
65
|
end
|
66
66
|
else
|
67
|
-
flash.now[:warning] = "
|
67
|
+
flash.now[:warning] = t("users_password_incorrect")
|
68
68
|
end
|
69
69
|
|
70
70
|
render :action => :show
|
@@ -72,19 +72,19 @@ module Kryptonite
|
|
72
72
|
|
73
73
|
def reset_password
|
74
74
|
@kryptonite_user = Kryptonite::User.find params[:id]
|
75
|
-
@kryptonite_page_title = @kryptonite_user.name + " |
|
75
|
+
@kryptonite_page_title = @kryptonite_user.name + " | " + t("users_reset_password")
|
76
76
|
|
77
77
|
@kryptonite_user.notify_of_new_password = true unless @kryptonite_user.id == @session_user.id
|
78
78
|
|
79
79
|
if @kryptonite_user.update_attributes params[:kryptonite_user]
|
80
80
|
if @kryptonite_user.id == @session_user.id
|
81
|
-
flash.now[:notice] = "
|
81
|
+
flash.now[:notice] = t("users_password_reseted")
|
82
82
|
else
|
83
|
-
flash.now[:notice] = "
|
83
|
+
flash.now[:notice] = t("users_password_reseted_and_emailed", :username=>@kryptonite_user.name)
|
84
84
|
end
|
85
85
|
|
86
86
|
else
|
87
|
-
flash.now[:warning] = "
|
87
|
+
flash.now[:warning] = t("users_problems_reseting_password")
|
88
88
|
end
|
89
89
|
render :action => :show
|
90
90
|
end
|
@@ -93,7 +93,7 @@ module Kryptonite
|
|
93
93
|
user = Kryptonite::User.find params[:id]
|
94
94
|
if user.is_admin? == false || Kryptonite::User.has_more_than_one_admin
|
95
95
|
user.destroy
|
96
|
-
flash[:notice] = user.name
|
96
|
+
flash[:notice] = t("users_deleted", :username=>user.name)
|
97
97
|
end
|
98
98
|
redirect_to kryptonite_users_path
|
99
99
|
end
|
@@ -11,7 +11,7 @@ module Kryptonite
|
|
11
11
|
@pass = pass
|
12
12
|
@from_text = kryptonite_config_website_name
|
13
13
|
|
14
|
-
mail(:to => kryptonite_user.email, :from => from, :subject => "
|
14
|
+
mail(:to => kryptonite_user.email, :from => from, :subject => t("new_password_subject", :website_name=>kryptonite_config_website_name))
|
15
15
|
end
|
16
16
|
|
17
17
|
def new_user_information from, kryptonite_user, host, pass
|
@@ -21,7 +21,7 @@ module Kryptonite
|
|
21
21
|
@pass = pass
|
22
22
|
@from_text = kryptonite_config_website_name
|
23
23
|
|
24
|
-
mail(:to => kryptonite_user.email, :from => from, :subject => "
|
24
|
+
mail(:to => kryptonite_user.email, :from => from, :subject => t("new_account_subject", :website_name=>kryptonite_config_website_name))
|
25
25
|
end
|
26
26
|
|
27
27
|
def password_reset_instructions from, kryptonite_user, host
|
@@ -32,7 +32,7 @@ module Kryptonite
|
|
32
32
|
@reset_password_url = edit_kryptonite_password_reset_url + "/?token=#{kryptonite_user.perishable_token}"
|
33
33
|
@from_text = kryptonite_config_website_name
|
34
34
|
|
35
|
-
mail(:to => kryptonite_user.email, :from => from, :subject => "
|
35
|
+
mail(:to => kryptonite_user.email, :from => from, :subject => t("password_reset_subject", :website_name=>kryptonite_config_website_name))
|
36
36
|
end
|
37
37
|
|
38
38
|
end
|
@@ -13,6 +13,8 @@ module Kryptonite
|
|
13
13
|
acts_as_authentic { |c| c.validate_email_field = false }
|
14
14
|
|
15
15
|
attr_accessor :notify_of_new_password
|
16
|
+
|
17
|
+
attr_accessible :login, :name, :email, :time_zone, :access_level, :password, :password_confirmation
|
16
18
|
|
17
19
|
after_create :send_create_notification
|
18
20
|
after_update :send_update_notification
|
@@ -1 +1 @@
|
|
1
|
-
<h2
|
1
|
+
<h2><%=t "welcome_title", :website_name=>kryptonite_config_website_name %></h2>
|
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
<%=t "greeting", :name=>@name %><br />
|
2
2
|
<br />
|
3
|
-
|
3
|
+
<%=t "password_reset_by_admin" %>:<br />
|
4
4
|
<br />
|
5
5
|
<%= @host %>/kryptonite<br />
|
6
6
|
<br />
|
7
|
-
|
8
|
-
|
7
|
+
<%=t "login" %>: <%= @login %><br />
|
8
|
+
<%=t "new_password" %>: <%= @pass %><br />
|
9
9
|
<br />
|
10
|
-
|
10
|
+
<%=t "from" %><br />
|
11
11
|
<br />
|
12
12
|
<%= @from_text %>
|
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
<%=t "greeting", :name=>@name %><br />
|
2
2
|
<br />
|
3
|
-
|
3
|
+
<%=t "new_account_created" %>:<br />
|
4
4
|
<br />
|
5
5
|
<%= @host %>/kryptonite<br />
|
6
6
|
<br />
|
7
|
-
|
8
|
-
|
7
|
+
<%=t "login" %>: <%= @login %><br />
|
8
|
+
<%=t "new_password" %>: <%= @pass %><br />
|
9
9
|
<br />
|
10
|
-
|
10
|
+
<%=t "from" %><br />
|
11
11
|
<br />
|
12
12
|
<%= @from_text %>
|
@@ -1,11 +1,10 @@
|
|
1
|
-
|
1
|
+
<%=t "greeting", :name=>@name %><br />
|
2
|
+
<br />
|
3
|
+
<%=t "reset_instructions", :login=>@login %>
|
2
4
|
<br />
|
3
|
-
A request to reset the password for login '<%= @login %>' has been made.<br />
|
4
|
-
If you did not make this request, simply ignore this email.<br />
|
5
|
-
Otherwise, click the link below to proceed:<br />
|
6
5
|
<br />
|
7
6
|
<%= @reset_password_url %><br />
|
8
7
|
<br />
|
9
|
-
|
8
|
+
<%=t "from" %><br />
|
10
9
|
<br />
|
11
10
|
<%= @from_text %>
|
@@ -27,21 +27,21 @@
|
|
27
27
|
|
28
28
|
<div class="text">
|
29
29
|
<p>
|
30
|
-
<%= f.label :password, "
|
30
|
+
<%= f.label :password, "#{t(:password)}:" %>
|
31
31
|
<%= f.password_field :password, :class => "kryptoniteTextField" %>
|
32
32
|
</p>
|
33
33
|
</div>
|
34
34
|
|
35
35
|
<div class="text">
|
36
36
|
<p>
|
37
|
-
<%= f.label :password_confirmation, "
|
37
|
+
<%= f.label :password_confirmation, "#{t(:confirm_password)}:" %>
|
38
38
|
<%= f.password_field :password_confirmation, :class => "kryptoniteTextField" %>
|
39
39
|
</p>
|
40
40
|
</div>
|
41
41
|
|
42
42
|
<div class="submit_remember">
|
43
43
|
<p>
|
44
|
-
<%= f.submit
|
44
|
+
<%= f.submit t(:reset_password), :class => "kryptoniteSubmit" %>
|
45
45
|
</p>
|
46
46
|
</div>
|
47
47
|
|
@@ -25,24 +25,24 @@
|
|
25
25
|
|
26
26
|
<div class="text" style="margin-bottom:10px;">
|
27
27
|
<p>
|
28
|
-
<%= f.label :login, "
|
28
|
+
<%= f.label :login, "#{t(:login)}:" %>
|
29
29
|
<%= f.text_field :login, :class => "kryptoniteTextField" %>
|
30
30
|
</p>
|
31
31
|
</div>
|
32
32
|
|
33
33
|
<div class="text">
|
34
34
|
<p>
|
35
|
-
<%= f.label :password, "
|
35
|
+
<%= f.label :password, "#{t(:password)}:" %>
|
36
36
|
<%= f.password_field :password, :class => "kryptoniteTextField" %>
|
37
37
|
</p>
|
38
38
|
</div>
|
39
39
|
|
40
40
|
<div class="submit_remember">
|
41
41
|
<p>
|
42
|
-
<%= f.check_box :remember_me %>
|
42
|
+
<%= f.check_box :remember_me %> <%=t :remember_me %>
|
43
43
|
<br /><br />
|
44
|
-
<%= f.submit
|
45
|
-
<input type="button" value="
|
44
|
+
<%= f.submit t(:do_login), :class => "kryptoniteSubmit" %>
|
45
|
+
<input type="button" value="<%= t(:forgotten_password) %>" class="kryptoniteSubmitBlue" onclick="toggleDiv('recover');" />
|
46
46
|
</p>
|
47
47
|
</div>
|
48
48
|
|
@@ -53,13 +53,13 @@
|
|
53
53
|
|
54
54
|
<div class="text">
|
55
55
|
<p>
|
56
|
-
<%= label_tag :recover_email, "
|
56
|
+
<%= label_tag :recover_email, "#{t(:email)}:" %>
|
57
57
|
<%= text_field_tag :recover_email, params[:recover_email], :class => "kryptoniteTextField" %>
|
58
58
|
</p>
|
59
59
|
</div>
|
60
60
|
<div class="submit_remember">
|
61
61
|
<p>
|
62
|
-
<%= submit_tag
|
62
|
+
<%= submit_tag t(:do_reset), :class => "kryptoniteSubmit" %>
|
63
63
|
</p>
|
64
64
|
</div>
|
65
65
|
</div>
|
@@ -1,10 +1,10 @@
|
|
1
|
-
<h2
|
1
|
+
<h2><%=t :users %></h2>
|
2
2
|
|
3
3
|
<table cellpadding="0" cellspacing="0" id="itemList" class="itemList">
|
4
4
|
<tr>
|
5
|
-
<th
|
6
|
-
<th
|
7
|
-
<th
|
5
|
+
<th><%=t :login %></th>
|
6
|
+
<th><%=t :name %></th>
|
7
|
+
<th><%=t :status %></th>
|
8
8
|
<th> </th>
|
9
9
|
</tr>
|
10
10
|
|
@@ -15,10 +15,10 @@
|
|
15
15
|
<td><%= kryptonite_table_cell_link kryptonite_get_access_level_text(user.access_level), kryptonite_user_path(user) %></td>
|
16
16
|
<td class="delete">
|
17
17
|
<% if user.is_admin? == false || Kryptonite::User.has_more_than_one_admin %>
|
18
|
-
<% confirm_message =
|
18
|
+
<% confirm_message = t(:delete_user_confirm, :user=>user.name) %>
|
19
19
|
|
20
20
|
<% if user.id == @session_user.id %>
|
21
|
-
<% confirm_message +=
|
21
|
+
<% confirm_message += t(:warning_delete_admin) %>
|
22
22
|
<% end %>
|
23
23
|
|
24
24
|
<%= link_to(kryptonite_show_row_icon("delete"), kryptonite_user_path(user), :method => :delete, :confirm => confirm_message) %>
|
@@ -31,5 +31,5 @@
|
|
31
31
|
<%= will_paginate @users %>
|
32
32
|
|
33
33
|
<%= content_for :sidebar do %>
|
34
|
-
<li><%= link_to "#{kryptonite_show_icon('add')}
|
34
|
+
<li><%= link_to "#{kryptonite_show_icon('add')}#{t(:add_new_user)}".html_safe, new_kryptonite_user_path %></li>
|
35
35
|
<% end %>
|