alchemy_cms 2.8.3 → 2.9.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.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -2
  3. data/README.md +108 -25
  4. data/alchemy_cms.gemspec +0 -1
  5. data/app/assets/stylesheets/alchemy/archive.scss +2 -2
  6. data/app/assets/stylesheets/alchemy/base.scss +0 -37
  7. data/app/assets/stylesheets/alchemy/elements.scss +1 -1
  8. data/app/assets/stylesheets/alchemy/flash.scss +1 -1
  9. data/app/assets/stylesheets/alchemy/form_elements.scss +1 -1
  10. data/app/assets/stylesheets/alchemy/icon-font.css.scss +40 -40
  11. data/app/assets/stylesheets/alchemy/icons.scss +4 -32
  12. data/app/assets/stylesheets/alchemy/jquery-ui.scss +4 -4
  13. data/app/assets/stylesheets/alchemy/menubar.css.scss +20 -12
  14. data/app/assets/stylesheets/alchemy/modules.scss +0 -4
  15. data/app/assets/stylesheets/alchemy/search.scss +1 -1
  16. data/app/assets/stylesheets/alchemy/sitemap.scss +1 -1
  17. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy-tinymce-dialog/window.css.scss +3 -3
  18. data/app/controllers/alchemy/admin/base_controller.rb +12 -8
  19. data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -5
  20. data/app/controllers/alchemy/admin/elements_controller.rb +1 -1
  21. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +8 -1
  22. data/app/controllers/alchemy/admin/layoutpages_controller.rb +1 -1
  23. data/app/controllers/alchemy/admin/pages_controller.rb +11 -6
  24. data/app/controllers/alchemy/admin/resources_controller.rb +2 -2
  25. data/app/controllers/alchemy/admin/users_controller.rb +1 -1
  26. data/app/controllers/alchemy/base_controller.rb +71 -37
  27. data/app/controllers/alchemy/elements_controller.rb +1 -1
  28. data/app/controllers/alchemy/pages_controller.rb +9 -3
  29. data/app/controllers/alchemy/pictures_controller.rb +1 -0
  30. data/app/helpers/alchemy/admin/base_helper.rb +2 -10
  31. data/app/helpers/alchemy/admin/pages_helper.rb +1 -1
  32. data/app/helpers/alchemy/base_helper.rb +1 -1
  33. data/app/helpers/alchemy/pages_helper.rb +1 -1
  34. data/app/models/alchemy/attachment.rb +3 -4
  35. data/app/models/alchemy/cell.rb +1 -1
  36. data/app/models/alchemy/content.rb +3 -4
  37. data/app/models/alchemy/element.rb +5 -6
  38. data/app/models/alchemy/folded_page.rb +1 -1
  39. data/app/models/alchemy/language.rb +1 -1
  40. data/app/models/alchemy/message.rb +1 -7
  41. data/app/models/alchemy/page.rb +12 -10
  42. data/app/models/alchemy/page/{cells.rb → page_cells.rb} +2 -2
  43. data/app/models/alchemy/page/{elements.rb → page_elements.rb} +2 -2
  44. data/app/models/alchemy/page/{naming.rb → page_naming.rb} +1 -1
  45. data/app/models/alchemy/page/{natures.rb → page_natures.rb} +3 -3
  46. data/app/models/alchemy/page/{scopes.rb → page_scopes.rb} +3 -3
  47. data/app/models/alchemy/page/page_users.rb +33 -0
  48. data/app/models/alchemy/picture.rb +3 -3
  49. data/app/models/alchemy/site.rb +2 -2
  50. data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +1 -1
  51. data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +1 -1
  52. data/app/views/alchemy/admin/dashboard/_sites.html.erb +1 -1
  53. data/app/views/alchemy/admin/dashboard/index.html.erb +10 -4
  54. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  55. data/app/views/alchemy/admin/pages/update.js.erb +1 -1
  56. data/app/views/alchemy/{user_sessions → base}/leave.html.erb +2 -2
  57. data/app/views/alchemy/base/permission_denied.js.erb +3 -2
  58. data/app/views/layouts/alchemy/admin.html.erb +6 -3
  59. data/config/alchemy/config.yml +1 -11
  60. data/config/alchemy/modules.yml +0 -12
  61. data/config/locales/alchemy.de.yml +3 -40
  62. data/config/locales/alchemy.en.yml +2 -22
  63. data/config/routes.rb +2 -27
  64. data/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -31
  65. data/lib/alchemy/auth_accessors.rb +54 -0
  66. data/lib/alchemy/capistrano.rb +5 -17
  67. data/lib/alchemy/engine.rb +7 -7
  68. data/lib/alchemy/errors.rb +6 -0
  69. data/lib/alchemy/essence.rb +2 -2
  70. data/lib/alchemy/seeder.rb +1 -1
  71. data/lib/alchemy/tasks/helpers.rb +83 -0
  72. data/lib/alchemy/test_support/auth_helpers.rb +35 -0
  73. data/lib/alchemy/test_support/controller_requests.rb +37 -0
  74. data/{spec/support → lib/alchemy/test_support}/factories.rb +7 -28
  75. data/{spec/support/alchemy → lib/alchemy/test_support}/integration_helpers.rb +9 -36
  76. data/lib/alchemy/upgrader.rb +8 -7
  77. data/lib/alchemy/upgrader/two_point_nine.rb +33 -0
  78. data/lib/alchemy/userstamp.rb +10 -0
  79. data/lib/alchemy/version.rb +1 -3
  80. data/lib/rails/templates/alchemy.rb +1 -0
  81. data/lib/tasks/alchemy/db.rake +5 -5
  82. data/spec/controllers/admin/attachments_controller_spec.rb +3 -3
  83. data/spec/controllers/admin/dashboard_controller_spec.rb +55 -34
  84. data/spec/controllers/admin/elements_controller_spec.rb +1 -1
  85. data/spec/controllers/admin/essence_pictures_controller_spec.rb +22 -6
  86. data/spec/controllers/admin/pages_controller_spec.rb +41 -58
  87. data/spec/controllers/admin/resources_controller_spec.rb +30 -5
  88. data/spec/controllers/admin/trash_controller_spec.rb +1 -1
  89. data/spec/controllers/attachments_controller_spec.rb +26 -44
  90. data/spec/controllers/base_controller_spec.rb +8 -33
  91. data/spec/controllers/elements_controller_spec.rb +1 -1
  92. data/spec/controllers/pages_controller_spec.rb +7 -15
  93. data/spec/controllers/pictures_controller_spec.rb +44 -5
  94. data/spec/dummy/app/controllers/application_controller.rb +9 -1
  95. data/spec/dummy/app/models/user.rb +14 -0
  96. data/spec/dummy/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -31
  97. data/spec/dummy/db/schema.rb +0 -31
  98. data/spec/features/admin/language_tree_feature_spec.rb +34 -0
  99. data/spec/features/admin/pages_controller_spec.rb +1 -1
  100. data/spec/features/pages_controller_spec.rb +5 -12
  101. data/spec/features/picture_security_spec.rb +2 -2
  102. data/spec/features/security_spec.rb +6 -45
  103. data/spec/features/translation_integration_spec.rb +11 -20
  104. data/spec/{support → fixtures}/80x60.png +0 -0
  105. data/spec/support/image with spaces.png b/data/spec/fixtures/image with → spaces.png +0 -0
  106. data/spec/{support → fixtures}/image.png +0 -0
  107. data/spec/{support → fixtures}/image2.PNG +0 -0
  108. data/spec/{support → fixtures}/image3.jpeg +0 -0
  109. data/spec/helpers/admin/base_helper_spec.rb +31 -43
  110. data/spec/helpers/admin/pages_helper_spec.rb +4 -2
  111. data/spec/helpers/base_helper_spec.rb +10 -3
  112. data/spec/helpers/pages_helper_spec.rb +32 -22
  113. data/spec/models/attachment_spec.rb +1 -1
  114. data/spec/models/element_spec.rb +33 -57
  115. data/spec/models/message_spec.rb +0 -16
  116. data/spec/models/page_spec.rb +62 -26
  117. data/spec/models/picture_spec.rb +5 -5
  118. data/spec/spec_helper.rb +13 -4
  119. data/spec/tasks/helpers_spec.rb +213 -0
  120. metadata +33 -75
  121. data/app/controllers/alchemy/passwords_controller.rb +0 -35
  122. data/app/controllers/alchemy/user_sessions_controller.rb +0 -67
  123. data/app/controllers/alchemy/users_controller.rb +0 -46
  124. data/app/mailers/alchemy/notifications.rb +0 -33
  125. data/app/models/alchemy/page/users.rb +0 -25
  126. data/app/models/alchemy/user.rb +0 -183
  127. data/app/views/alchemy/admin/users/_table.html.erb +0 -69
  128. data/app/views/alchemy/admin/users/_user.html.erb +0 -39
  129. data/app/views/alchemy/admin/users/edit.html.erb +0 -6
  130. data/app/views/alchemy/admin/users/index.html.erb +0 -58
  131. data/app/views/alchemy/admin/users/new.html.erb +0 -6
  132. data/app/views/alchemy/notifications/admin_user_created.de.text.erb +0 -15
  133. data/app/views/alchemy/notifications/admin_user_created.en.text.erb +0 -15
  134. data/app/views/alchemy/notifications/registered_user_created.de.text.erb +0 -13
  135. data/app/views/alchemy/notifications/registered_user_created.en.text.erb +0 -13
  136. data/app/views/alchemy/notifications/reset_password_instructions.de.text.erb +0 -8
  137. data/app/views/alchemy/notifications/reset_password_instructions.en.text.erb +0 -8
  138. data/app/views/alchemy/passwords/edit.html.erb +0 -35
  139. data/app/views/alchemy/passwords/new.html.erb +0 -30
  140. data/app/views/alchemy/user_sessions/new.html.erb +0 -48
  141. data/app/views/alchemy/users/new.html.erb +0 -14
  142. data/config/initializers/devise.rb +0 -242
  143. data/config/locales/devise.de.yml +0 -58
  144. data/config/locales/devise.en.yml +0 -60
  145. data/lib/rails/generators/alchemy/devise/devise_generator.rb +0 -29
  146. data/spec/controllers/admin/users_controller_spec.rb +0 -132
  147. data/spec/controllers/passwords_controller_spec.rb +0 -16
  148. data/spec/controllers/user_sessions_controller_spec.rb +0 -22
  149. data/spec/controllers/users_controller_spec.rb +0 -66
  150. data/spec/mailers/notifications_spec.rb +0 -67
  151. data/spec/models/user_spec.rb +0 -252
  152. data/spec/support/alchemy/controller_helpers.rb +0 -35
@@ -1,35 +0,0 @@
1
- module Alchemy
2
- class PasswordsController < Devise::PasswordsController
3
- include Ferret::Search
4
- helper 'Alchemy::Admin::Base', 'Alchemy::Pages'
5
-
6
- before_filter { enforce_ssl if ssl_required? && !request.ssl? }
7
- before_filter :set_translation
8
-
9
- layout 'alchemy/login'
10
-
11
- def new
12
- build_resource(email: params[:email])
13
- end
14
-
15
- private
16
-
17
- # Override for Devise method
18
- def new_session_path(resource_name)
19
- alchemy.login_path
20
- end
21
-
22
- def edit_password_url(resource, options={})
23
- alchemy.edit_password_url(options)
24
- end
25
-
26
- def after_sign_in_path_for(resource_or_scope)
27
- if permitted_to?(:index, :alchemy_admin_dashboard)
28
- alchemy.admin_dashboard_path
29
- else
30
- alchemy.root_path
31
- end
32
- end
33
-
34
- end
35
- end
@@ -1,67 +0,0 @@
1
- module Alchemy
2
- class UserSessionsController < Devise::SessionsController
3
- # Necessary because this controller is also used for general login.
4
- include Ferret::Search
5
- helper 'Alchemy::Admin::Base', 'Alchemy::Pages'
6
-
7
- before_filter(except: 'destroy') { enforce_ssl if ssl_required? && !request.ssl? }
8
- before_filter :set_translation
9
- before_filter :check_user_count, :only => :new
10
-
11
- layout 'alchemy/login'
12
-
13
- def new
14
- super
15
- end
16
-
17
- def create
18
- authenticate_user!
19
- if user_signed_in?
20
- store_screen_size
21
- if session[:redirect_path].blank?
22
- redirect_path = admin_dashboard_path
23
- else
24
- # We have to strip double slashes from beginning of path, because of strange rails/rack bug.
25
- redirect_path = session[:redirect_path].gsub(/^\/{2,}/, '/')
26
- end
27
- redirect_to redirect_path, :notice => t(:signed_in, :scope => 'devise.sessions')
28
- else
29
- super
30
- end
31
- end
32
-
33
- def leave
34
- render layout: !request.xhr?
35
- end
36
-
37
- def destroy
38
- cookies.clear
39
- session.clear
40
- super
41
- end
42
-
43
- private
44
-
45
- def check_user_count
46
- if User.count == 0
47
- redirect_to signup_path
48
- else
49
- return true
50
- end
51
- end
52
-
53
- def store_screen_size
54
- session[:screen_size] = params[:user_screensize]
55
- end
56
-
57
- # Ovewriting the default of Devise
58
- def after_sign_out_path_for(resource_or_scope)
59
- if request.referer.blank? || request.referer.to_s =~ /admin/
60
- root_path
61
- else
62
- request.referer
63
- end
64
- end
65
-
66
- end
67
- end
@@ -1,46 +0,0 @@
1
- module Alchemy
2
- class UsersController < BaseController
3
-
4
- before_filter { enforce_ssl if ssl_required? && !request.ssl? }
5
- before_filter :set_translation
6
- before_filter :check_user_count
7
- before_filter :load_genders
8
-
9
- layout 'alchemy/admin'
10
-
11
- helper 'Alchemy::Admin::Base'
12
-
13
- def new
14
- @signup = true
15
- @user = User.new(:roles => 'admin')
16
- end
17
-
18
- def create
19
- @user = User.new(params[:user])
20
- if @user.save
21
- flash[:notice] = _t('Successfully signup admin user')
22
- sign_in :user, @user
23
- redirect_to admin_dashboard_path
24
- else
25
- @signup = true
26
- render :new
27
- end
28
- rescue Errno::ECONNREFUSED => e
29
- flash[:error] = _t(:signup_mail_delivery_error)
30
- redirect_to admin_dashboard_path
31
- end
32
-
33
- private
34
-
35
- def load_genders
36
- @user_genders = User.genders_for_select
37
- end
38
-
39
- def check_user_count
40
- if User.count > 0
41
- redirect_to admin_dashboard_path
42
- end
43
- end
44
-
45
- end
46
- end
@@ -1,33 +0,0 @@
1
- module Alchemy
2
- class Notifications < ActionMailer::Base
3
-
4
- default(from: Config.get(:mailer)['mail_from'])
5
-
6
- def registered_user_created(user)
7
- @user = user
8
- @url = login_url
9
- mail(
10
- to: user.email,
11
- subject: I18n.t("Your user credentials")
12
- )
13
- end
14
-
15
- def admin_user_created(user)
16
- @user = user
17
- @url = admin_url
18
- mail(
19
- to: user.email,
20
- subject: I18n.t("Your Alchemy Login")
21
- )
22
- end
23
-
24
- def reset_password_instructions(user, opts={})
25
- @user = user
26
- mail(
27
- to: user.email,
28
- subject: I18n.t("Reset password instructions")
29
- )
30
- end
31
-
32
- end
33
- end
@@ -1,25 +0,0 @@
1
- module Alchemy
2
- module Page::Users
3
-
4
- extend ActiveSupport::Concern
5
-
6
- # Returns the name of the creator of this page.
7
- def creator_name
8
- return I18n.t('unknown') if creator.nil?
9
- creator.name
10
- end
11
-
12
- # Returns the name of the last updater of this page.
13
- def updater_name
14
- return I18n.t('unknown') if updater.nil?
15
- updater.name
16
- end
17
-
18
- # Returns the name of the user currently editing this page.
19
- def locker_name
20
- return I18n.t('unknown') if locker.nil?
21
- locker.name
22
- end
23
-
24
- end
25
- end
@@ -1,183 +0,0 @@
1
- require 'userstamp'
2
- require 'acts-as-taggable-on'
3
-
4
- module Alchemy
5
- class User < ActiveRecord::Base
6
-
7
- model_stamper
8
- stampable(:stamper_class_name => 'Alchemy::User')
9
-
10
- begin
11
- devise(*Config.get(:devise_modules))
12
- rescue NameError => e
13
- abort <<-WARN
14
- You enabled the encryptable devise module, but did not have the `devise-encryptable` gem installed!
15
- Please add the `devise-encryptable` gem into your Gemfile.
16
- WARN
17
- end
18
-
19
- acts_as_taggable
20
-
21
- attr_accessible(
22
- :firstname,
23
- :lastname,
24
- :login,
25
- :email,
26
- :gender,
27
- :language,
28
- :password,
29
- :password_confirmation,
30
- :roles,
31
- :send_credentials,
32
- :tag_list
33
- )
34
-
35
- attr_accessor :send_credentials
36
-
37
- has_many :folded_pages
38
-
39
- validates_uniqueness_of :login
40
- validates_presence_of :roles
41
-
42
- # Unlock all locked pages before destroy and before the user gets logged out.
43
- before_destroy :unlock_pages!
44
- Warden::Manager.before_logout do |user, auth, opts|
45
- if user
46
- user.unlock_pages!
47
- end
48
- end
49
-
50
- after_save :deliver_welcome_mail, if: -> { send_credentials == '1' }
51
-
52
- scope :admins, where(arel_table[:roles].matches("%admin%")) # not pleased with that approach
53
- # mysql regexp word matching would be much nicer, but it's not included in SQLite functions per se.
54
- # scope :admins, where("#{table_name}.roles REGEXP '[[:<:]]admin[[:>:]]'")
55
-
56
- scope :logged_in, lambda { where("last_request_at > ?", logged_in_timeout.seconds.ago) }
57
- scope :logged_out, lambda { where("last_request_at is NULL or last_request_at <= ?", logged_in_timeout.seconds.ago) }
58
-
59
- ROLES = Config.get(:user_roles)
60
-
61
- class << self
62
- def human_rolename(role)
63
- I18n.t("user_roles.#{role}")
64
- end
65
-
66
- def genders_for_select
67
- [
68
- [I18n.t('male'), 'male'],
69
- [I18n.t('female'), 'female']
70
- ]
71
- end
72
-
73
- def logged_in_timeout
74
- Config.get(:auto_logout_time).minutes.to_i
75
- end
76
- end
77
-
78
- def role_symbols
79
- roles.map(&:to_sym)
80
- end
81
-
82
- def role
83
- roles.first
84
- end
85
-
86
- def roles
87
- read_attribute(:roles).split(' ')
88
- end
89
-
90
- def roles=(roles_string)
91
- if roles_string.is_a? Array
92
- write_attribute(:roles, roles_string.join(' '))
93
- elsif roles_string.is_a? String
94
- write_attribute(:roles, roles_string)
95
- end
96
- end
97
-
98
- def add_role(role)
99
- self.roles = self.roles.push(role.to_s).uniq
100
- end
101
-
102
- # Returns true if the user ahs admin role
103
- def is_admin?
104
- has_role? 'admin'
105
- end
106
- alias_method :admin?, :is_admin?
107
-
108
- # Returns true if the user has the given role.
109
- def has_role?(role)
110
- roles.include? role.to_s
111
- end
112
-
113
- # Calls unlock on all locked pages
114
- def unlock_pages!
115
- pages_locked_by_me.map(&:unlock!)
116
- end
117
-
118
- # Returns all pages locked by user.
119
- #
120
- # A page gets locked, if the user requests to edit the page.
121
- #
122
- def pages_locked_by_me
123
- Page.where(:locked => true).where(:locked_by => self.id).order(:updated_at)
124
- end
125
- alias_method :locked_pages, :pages_locked_by_me
126
-
127
- # Returns the firstname and lastname as a string
128
- #
129
- # If both are blank, returns the login
130
- #
131
- # @option options :flipped (false)
132
- # Flip the firstname and lastname
133
- #
134
- def fullname(options = {})
135
- if lastname.blank? && firstname.blank?
136
- login
137
- else
138
- options = {:flipped => false}.merge(options)
139
- fullname = options[:flipped] ? "#{lastname}, #{firstname}" : "#{firstname} #{lastname}"
140
- fullname.squeeze(" ").strip
141
- end
142
- end
143
- alias_method :name, :fullname
144
-
145
- # Returns true if the last request not longer ago then the logged_in_time_out
146
- def logged_in?
147
- raise "Can not determine the records login state because there is no last_request_at column" if !respond_to?(:last_request_at)
148
- !last_request_at.nil? && last_request_at > logged_in_timeout.seconds.ago
149
- end
150
-
151
- # Opposite of logged_in?
152
- def logged_out?
153
- !logged_in?
154
- end
155
-
156
- def human_roles_string
157
- roles.map do |role|
158
- self.class.human_rolename(role)
159
- end.to_sentence
160
- end
161
-
162
- def store_request_time!
163
- update_attribute(:last_request_at, Time.now)
164
- end
165
-
166
- private
167
-
168
- def logged_in_timeout
169
- self.class.logged_in_timeout
170
- end
171
-
172
- # Delivers a welcome mail depending from user's role.
173
- #
174
- def deliver_welcome_mail
175
- if has_role?('author') || has_role?('editor') || has_role?('admin')
176
- Notifications.admin_user_created(self).deliver
177
- else
178
- Notifications.registered_user_created(self).deliver
179
- end
180
- end
181
-
182
- end
183
- end
@@ -1,69 +0,0 @@
1
- <table>
2
- <tr>
3
- <td class="label"><%= f.label 'gender' %></td>
4
- <td class="select"><%= f.select 'gender', options_for_select(@user_genders, @user.gender), {:prompt => _t('Please choose')}, :class => 'alchemy_selectbox long', :autofocus => true -%></td>
5
- </tr>
6
- <tr>
7
- <td class="label"><%= f.label 'firstname' %></td>
8
- <td class="input"><%= f.text_field 'firstname', :class => 'thin_border long' %></td>
9
- </tr>
10
- <tr>
11
- <td class="label"><%= f.label 'lastname' %></td>
12
- <td class="input"><%= f.text_field 'lastname', :class => 'thin_border long' %></td>
13
- </tr>
14
- <tr>
15
- <td class="label mandatory"><%= f.label 'login' %></td>
16
- <td class="input"><%= f.text_field 'login', :class => 'thin_border long', :required => true, :autofocus => true %></td>
17
- </tr>
18
- <tr>
19
- <td class="label mandatory"><%= f.label 'email' %></td>
20
- <td class="input"><%= f.email_field 'email', :class => 'thin_border long', :required => true %></td>
21
- </tr>
22
- <tr>
23
- <td class="label"><%= f.label 'language' %></td>
24
- <td class="select"><%= f.select 'language', translations_for_select, {}, {:class => 'alchemy_selectbox long'} %></td>
25
- </tr>
26
- <tr>
27
- <td class="label mandatory"><%= f.label 'password' %></td>
28
- <td class="input mandatory"><%= f.password_field 'password', :class => 'thin_border long', :autocomplete => "off", :required => action_name == 'signup' %></td>
29
- </tr>
30
- <tr>
31
- <td class="label mandatory"><%= f.label 'password_confirmation' %></td>
32
- <td class="input"><%= f.password_field 'password_confirmation', :class => 'thin_border long', :autocomplete => "off", :required => action_name == 'signup' %></td>
33
- </tr>
34
- <% if @signup %>
35
- <%= f.hidden_field :roles %>
36
- <% elsif permitted_to? :update_roles %>
37
- <tr>
38
- <td class="label"><%= f.label 'roles' %></td>
39
- <td id="user_roles">
40
- <% Alchemy::User::ROLES.each do |role| %>
41
- <label>
42
- <%= check_box_tag 'user[roles][]', role, @user.has_role?(role) %>
43
- <%= Alchemy::User.human_rolename(role) %>
44
- </label>
45
- <% end %>
46
- </td>
47
- </tr>
48
- <% end %>
49
- <% unless @signup %>
50
- <tr>
51
- <td class="label"><%= f.label :tag_list %></td>
52
- <td class="input">
53
- <%= render 'alchemy/admin/partials/autocomplete_tag_list', :f => f, :object => @user %>
54
- </td>
55
- </tr>
56
- <% end %>
57
- <tr>
58
- <td>&nbsp;</td>
59
- <td class="checkbox long">
60
- <%= f.check_box(:send_credentials, checked: @user.new_record?) %>
61
- <%= f.label(:send_credentials) %>
62
- </td>
63
- </tr>
64
- <tr>
65
- <td class="submit" colspan="2">
66
- <%= f.button _t(:save), :class => 'button' %>
67
- </td>
68
- </tr>
69
- </table>