sugoi-mail 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/CHANGELOG +38 -0
  2. data/app/apis/mailservice_api.rb +6 -0
  3. data/app/controllers/account_controller.rb +40 -45
  4. data/app/controllers/{root_admin_controller.rb → admin_controller.rb} +1 -2
  5. data/app/controllers/application.rb +9 -9
  6. data/app/controllers/mailinglist_class_controller.rb +63 -0
  7. data/app/controllers/mailinglist_controller.rb +22 -45
  8. data/app/controllers/mailservice_controller.rb +7 -0
  9. data/app/models/mailinglist_class.rb +40 -0
  10. data/app/models/message.rb +8 -7
  11. data/app/views/account/welcome.rhtml +2 -2
  12. data/app/views/{root_admin → admin}/_form.rhtml +3 -3
  13. data/app/views/{root_admin → admin}/add_address.rhtml +0 -0
  14. data/app/views/{root_admin → admin}/add_mailinglist.rhtml +0 -0
  15. data/app/views/{root_admin → admin}/admin_user_list.rhtml +0 -0
  16. data/app/views/{root_admin → admin}/admin_user_new.rhtml +0 -0
  17. data/app/views/{root_admin → admin}/change_user_password.rhtml +0 -0
  18. data/app/views/{root_admin → admin}/edit_address.rhtml +0 -0
  19. data/app/views/{root_admin → admin}/edit_mailinglist.rhtml +0 -0
  20. data/app/views/{root_admin → admin}/edit_user_list.rhtml +0 -0
  21. data/app/views/{root_admin → admin}/list_addresses.rhtml +0 -0
  22. data/app/views/{root_admin → admin}/list_mailinglists.rhtml +0 -0
  23. data/app/views/{root_admin → admin}/list_users.rhtml +3 -3
  24. data/app/views/{root_admin → admin}/remove_address.rhtml +0 -0
  25. data/app/views/{root_admin → admin}/remove_mailinglist.rhtml +0 -0
  26. data/app/views/{root_admin → admin}/remove_user.rhtml +0 -0
  27. data/app/views/{root_admin → admin}/show_user.rhtml +0 -0
  28. data/app/views/layouts/application.rhtml +1 -1
  29. data/app/views/mailinglist/edit.rhtml +1 -1
  30. data/app/views/mailinglist_class/_form.rhtml +31 -0
  31. data/app/views/mailinglist_class/_form_option.rhtml +14 -0
  32. data/app/views/mailinglist_class/_new_form.rhtml +16 -0
  33. data/app/views/mailinglist_class/edit.rhtml +15 -0
  34. data/app/views/{mailinglist/list_mailinglist_classes.rhtml → mailinglist_class/list.rhtml} +5 -4
  35. data/app/views/mailinglist_class/new.rhtml +10 -0
  36. data/app/views/mailinglist_class/show.rhtml +9 -0
  37. data/app/views/navigation/_nav_module.rhtml +13 -13
  38. data/app/views/navigation/_root_add_address_module.rhtml +1 -1
  39. data/app/views/navigation/_root_add_mailinglist_module.rhtml +1 -1
  40. data/app/views/navigation/_root_add_user_module.rhtml +1 -1
  41. data/app/views/navigation/_root_change_user_password_module.rhtml +1 -1
  42. data/app/views/navigation/_root_edit_address_module.rhtml +5 -5
  43. data/app/views/navigation/_root_edit_mailinglist_module.rhtml +5 -5
  44. data/app/views/navigation/_root_edit_user_list_module.rhtml +1 -1
  45. data/app/views/navigation/_root_edit_user_module.rhtml +4 -4
  46. data/app/views/navigation/_root_index_module.rhtml +2 -2
  47. data/app/views/navigation/_root_list_addresses_module.rhtml +4 -4
  48. data/app/views/navigation/_root_list_mailinglists_module.rhtml +3 -3
  49. data/app/views/navigation/_root_list_users_module.rhtml +4 -4
  50. data/app/views/navigation/_root_remove_address_module.rhtml +4 -4
  51. data/app/views/navigation/_root_remove_mailinglist_module.rhtml +4 -4
  52. data/app/views/navigation/_root_remove_user_module.rhtml +4 -4
  53. data/app/views/navigation/_root_show_user_module.rhtml +4 -4
  54. data/app/views/navigation/_root_welcome_module.rhtml +2 -2
  55. data/db/schema.rb +108 -0
  56. data/lib/gurgitate-rules.rb +3 -8
  57. data/lib/tasks/release.rake +1 -1
  58. data/public/stylesheets/global.css +58 -2
  59. data/test/functional/{root_admin_controller_test.rb → admin_controller_test.rb} +4 -4
  60. data/test/unit/mailinglist_class_test.rb +11 -0
  61. metadata +32 -24
  62. data/app/views/mailinglist/_new_class_form.rhtml +0 -16
  63. data/app/views/mailinglist/new_mailinglist_class.rhtml +0 -8
@@ -1,11 +1,11 @@
1
- <% if false %><div class="link"><%= link_to "Add User", :controller => "root_admin", :action => "list_mailinglists" %></div><br/><% end %>
1
+ <% if false %><div class="link"><%= link_to "Add User", :controller => "admin", :action => "list_mailinglists" %></div><br/><% end %>
2
2
  <% if false %><% end %>
3
3
  <% if false %><!-- Change these to link_to_if to establish condition that they are clickable only --><% end %>
4
4
  <% if false %><!-- if a user is selected in the main panel. They should display regardless, but --><% end %>
5
5
  <% if false %><!-- be greyed out or something. --><% end %>
6
- <% if false %><div class="link"><%= link_to "Remove User", :controller => "root_admin", :action => "list_users" %></div><br/><% end %>
7
- <% if false %><div class="link"><%= link_to "Edit User's Forwarding List", :controller => "root_admin", :action => "list_mailinglists" %></div><br/><% end %>
8
- <% if false %><div class="link"><%= link_to "Change User's Password", :controller => "root_admin", :action => "list_users" %></div><br/><% end %>
6
+ <% if false %><div class="link"><%= link_to "Remove User", :controller => "admin", :action => "list_users" %></div><br/><% end %>
7
+ <% if false %><div class="link"><%= link_to "Edit User's Forwarding List", :controller => "admin", :action => "list_mailinglists" %></div><br/><% end %>
8
+ <% if false %><div class="link"><%= link_to "Change User's Password", :controller => "admin", :action => "list_users" %></div><br/><% end %>
9
9
  <% if false %><!-- End conditional links --><% end %>
10
10
  <% if false %><% end %>
11
11
  <% if false %><div class="link"><%= link_to "Back", :controller => "account", :action => "welcome"%></div><br/><% end %>
@@ -1,10 +1,10 @@
1
1
  <!-- Change these to link_to_if to establish condition that they are clickable only -->
2
2
  <!-- if a user is selected in the main panel. They should display regardless, but -->
3
3
  <!-- be greyed out or something. -->
4
- <div class="link"><%= link_to "Remove User", :controller => "root_admin", :action => "remove_user" %></div><br/>
5
- <div class="link"><%= link_to "Edit User's Forwarding List", :controller => "root_admin", :action => "edit_user_list" %></div><br/>
6
- <div class="link"><%= link_to "Change User's Password", :controller => "root_admin", :action => "change_user_password" %></div><br/>
4
+ <div class="link"><%= link_to "Remove User", :controller => "admin", :action => "remove_user" %></div><br/>
5
+ <div class="link"><%= link_to "Edit User's Forwarding List", :controller => "admin", :action => "edit_user_list" %></div><br/>
6
+ <div class="link"><%= link_to "Change User's Password", :controller => "admin", :action => "change_user_password" %></div><br/>
7
7
  <!-- End conditional links -->
8
8
 
9
- <div class="link"><%= link_to "Back", :controller => "root_admin", :action => "list_users"%></div><br/>
9
+ <div class="link"><%= link_to "Back", :controller => "admin", :action => "list_users"%></div><br/>
10
10
  <div class="link"><%= link_to "Logout", :controller => "account", :action => "logout"%></div>
@@ -1,3 +1,3 @@
1
- <div class="link"><%= link_to "Mailing Lists", :controller => "root_admin", :action => "list_mailinglists" %></div><br/>
2
- <div class="link"><%= link_to "Users", :controller => "root_admin", :action => "list_users" %></div><br/>
1
+ <div class="link"><%= link_to "Mailing Lists", :controller => "admin", :action => "list_mailinglists" %></div><br/>
2
+ <div class="link"><%= link_to "Users", :controller => "admin", :action => "list_users" %></div><br/>
3
3
  <div class="link"><%= link_to "Logout", :controller => "account", :action => "logout"%></div>
@@ -0,0 +1,108 @@
1
+ # This file is autogenerated. Instead of editing this file, please use the
2
+ # migrations feature of ActiveRecord to incrementally modify your database, and
3
+ # then regenerate this schema definition.
4
+
5
+ ActiveRecord::Schema.define(:version => 28) do
6
+
7
+ create_table "addresses", :force => true do |t|
8
+ t.column "address", :text
9
+ t.column "active", :boolean, :default => true
10
+ t.column "delivery_attempts", :integer, :default => 0
11
+ t.column "bounces", :integer, :default => 0
12
+ end
13
+
14
+ create_table "addresses_mailinglists", :id => false, :force => true do |t|
15
+ t.column "address_id", :integer
16
+ t.column "mailinglist_id", :integer
17
+ end
18
+
19
+ create_table "admin_messages", :force => true do |t|
20
+ t.column "message", :text, :null => false
21
+ end
22
+
23
+ create_table "confirmationcodes", :force => true do |t|
24
+ t.column "mailinglist_id", :integer
25
+ t.column "address_id", :integer
26
+ t.column "code", :text, :null => false
27
+ t.column "confirmed", :boolean, :default => false
28
+ end
29
+
30
+ create_table "domains", :force => true do |t|
31
+ t.column "name", :string, :null => false
32
+ t.column "password", :text, :null => false
33
+ end
34
+
35
+ create_table "helps", :force => true do |t|
36
+ t.column "facility", :string
37
+ t.column "command", :string
38
+ t.column "parameters", :string
39
+ t.column "summary", :string
40
+ t.column "explanation", :text
41
+ end
42
+
43
+ create_table "mailinglist_classes", :force => true do |t|
44
+ t.column "name", :text, :null => false
45
+ t.column "description", :text
46
+ t.column "public", :boolean, :default => false, :null => false
47
+ t.column "closed", :boolean, :default => false, :null => false
48
+ t.column "moderated", :boolean, :default => false, :null => false
49
+ t.column "confirmation", :boolean, :default => true, :null => false
50
+ t.column "joinable", :boolean, :default => true, :null => false
51
+ t.column "archived", :boolean, :default => false, :null => false
52
+ t.column "proxify", :boolean, :default => false
53
+ end
54
+
55
+ create_table "mailinglists", :force => true do |t|
56
+ t.column "user_id", :integer
57
+ t.column "name", :text, :null => false
58
+ t.column "description", :text
59
+ t.column "welcome_admin_message_id", :integer, :default => 1
60
+ t.column "confirmed_admin_message_id", :integer, :default => 2
61
+ t.column "sayonara_admin_message_id", :integer, :default => 3
62
+ t.column "mailinglist_class_id", :integer
63
+ end
64
+
65
+ create_table "messages", :force => true do |t|
66
+ t.column "mailinglist_id", :integer
67
+ t.column "address_id", :integer
68
+ t.column "parent_id", :integer
69
+ t.column "subject", :string
70
+ t.column "messageid", :string
71
+ t.column "timestamp", :datetime
72
+ t.column "headers", :text
73
+ t.column "body", :text
74
+ t.column "envelope_from", :text
75
+ t.column "envelope_to", :text
76
+ end
77
+
78
+ create_table "proxy_links", :force => true do |t|
79
+ t.column "mailinglist_id", :integer, :null => false
80
+ t.column "address_id", :integer, :null => false
81
+ end
82
+
83
+ create_table "sessions", :force => true do |t|
84
+ t.column "session_id", :string
85
+ t.column "data", :text
86
+ t.column "updated_at", :datetime
87
+ end
88
+
89
+ add_index "sessions", ["session_id"], :name => "sessions_session_id_index"
90
+
91
+ create_table "sys_configs", :force => true do |t|
92
+ t.column "name", :string
93
+ t.column "value", :string
94
+ t.column "description", :string
95
+ t.column "priority", :integer
96
+ end
97
+
98
+ create_table "users", :force => true do |t|
99
+ t.column "login", :text, :null => false
100
+ t.column "password", :text, :null => false
101
+ t.column "mailinglist_id", :integer
102
+ t.column "domainadmin", :boolean, :default => false
103
+ t.column "domain_id", :integer
104
+ t.column "mailinglistadmin", :boolean, :default => false
105
+ t.column "virtual", :boolean, :default => false
106
+ end
107
+
108
+ end
@@ -5,11 +5,6 @@
5
5
  # stuff.
6
6
  #------------------------------------------------------------------------
7
7
 
8
- $logger.debug "in gurgitate-rules"
9
- $logger.debug to_s
10
- $logger.debug "From: #{from}"
11
- $logger.debug "To: #{to.inspect}"
12
-
13
8
  # ------------------------------------------------------------------------
14
9
  # mail to mailing list
15
10
  # ------------------------------------------------------------------------
@@ -26,15 +21,15 @@ to.each do |to_address|
26
21
  when :mail
27
22
  mess=Message.from_message(self)
28
23
  mess.mailinglist = ml
29
- mess.save
24
+ mess.save!
30
25
 
31
26
  if mess then
32
27
  mess.deliver
33
28
 
34
29
  if ml.archived?
35
30
  mess.save
36
- mailinglist.store_message mess
37
- mailinglist.save
31
+ ml.store_message mess
32
+ ml.save
38
33
  else
39
34
  mess.destroy
40
35
  end
@@ -1,6 +1,6 @@
1
1
  require 'rake/gempackagetask'
2
2
 
3
- PKG_VERSION = "0.3.0"
3
+ PKG_VERSION = "0.3.2"
4
4
  PKG_NAME = "sugoi-mail"
5
5
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
6
6
 
@@ -131,6 +131,31 @@ html>/**/body #navbar {
131
131
  top: -8px;
132
132
  }
133
133
 
134
+ #flash{
135
+ text-align: center;
136
+ background-color: #FFA54F;
137
+ font-style: italic;
138
+ }
139
+
140
+ #errorExplanation {
141
+ background-color: lightyellow;
142
+ font-size: 8pt;
143
+ padding: 5px;
144
+ border: 1px dotted black;
145
+ }
146
+
147
+ #errorExplanation * {
148
+ font-size: 8pt;
149
+ }
150
+
151
+ #errorExplanation h2 {
152
+ font-size: 10pt;
153
+ border: 1px solid red;
154
+ padding: 3px;
155
+ margin: 0px;
156
+ text-align: center;
157
+ }
158
+
134
159
  .login {
135
160
  border-style: solid;
136
161
  border-width: 1px;
@@ -159,12 +184,43 @@ html>/**/body .link {
159
184
  }
160
185
 
161
186
  .item {
162
- font-size: 11;
187
+ font-size: 11pt;
163
188
  font-weight: bold;
164
189
  }
165
190
 
166
191
  .small {
167
- font-size: 9;
192
+ font-size: 9pt;
193
+ }
194
+
195
+ .mainTable {
196
+ width: 99%;
197
+ }
198
+
199
+
200
+ .checklist {
201
+ border: none;
202
+ width: 99%;
203
+ }
204
+
205
+ .checklist td{
206
+ padding: 5px;
207
+ }
208
+
209
+ .help {
210
+ padding: 5px 10px;
211
+ font-size: 8pt;
212
+ background-color: #f4f4f4;
213
+ border: 1px solid #c0cdc0;
214
+ color: #444;
215
+ }
216
+
217
+ .textbox {
218
+ border: 1px solid #c0cdc0;
219
+ padding: 3px;
220
+ }
221
+
222
+ .button {
223
+ width: 130px;
168
224
  }
169
225
 
170
226
  /* general styles */
@@ -1,12 +1,12 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
- require 'root_admin_controller'
2
+ require 'admin_controller'
3
3
 
4
4
  # Re-raise errors caught by the controller.
5
- class RootAdminController; def rescue_action(e) raise e end; end
5
+ class AdminController; def rescue_action(e) raise e end; end
6
6
 
7
- class RootAdminControllerTest < Test::Unit::TestCase
7
+ class AdminControllerTest < Test::Unit::TestCase
8
8
  def setup
9
- @controller = RootAdminController.new
9
+ @controller = AdminController.new
10
10
  @request = ActionController::TestRequest.new
11
11
  @response = ActionController::TestResponse.new
12
12
  end
@@ -79,4 +79,15 @@ class MailinglistClassTest < Test::Unit::TestCase
79
79
  assert d.closed
80
80
  assert d.archived
81
81
  end
82
+
83
+ def test_illegal_creation
84
+ c=MailinglistClass.new
85
+ assert !c.save
86
+ assert c.name = "somenewname"
87
+ assert c.save
88
+ c2=MailinglistClass.new
89
+ assert c2.name = "somenewname"
90
+ assert !c2.save
91
+ end
92
+
82
93
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: sugoi-mail
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.0
7
- date: 2007-04-20 00:00:00 +09:00
6
+ version: 0.3.2
7
+ date: 2007-05-15 00:00:00 +09:00
8
8
  summary: Powerful mailing list manager.
9
9
  require_paths:
10
10
  - .
@@ -29,6 +29,7 @@ post_install_message:
29
29
  authors:
30
30
  - Dave Brown
31
31
  files:
32
+ - CHANGELOG
32
33
  - doc
33
34
  - README
34
35
  - Rakefile
@@ -97,7 +98,9 @@ files:
97
98
  - app/views
98
99
  - app/helpers
99
100
  - app/apis
101
+ - app/controllers/admin_controller.rb
100
102
  - app/controllers/account_controller.rb
103
+ - app/controllers/mailinglist_class_controller.rb
101
104
  - app/controllers/mail_admin_controller.rb
102
105
  - app/controllers/mailinglist_controller.rb
103
106
  - app/controllers/sugoi_admin_controller.rb
@@ -106,7 +109,6 @@ files:
106
109
  - app/controllers/commandline_controller.rb
107
110
  - app/controllers/navigation_controller.rb
108
111
  - app/controllers/address_controller.rb
109
- - app/controllers/root_admin_controller.rb
110
112
  - app/controllers/application.rb
111
113
  - app/controllers/domain_controller.rb
112
114
  - app/models/sys_config.rb
@@ -121,45 +123,43 @@ files:
121
123
  - app/models/proxy_link.rb
122
124
  - app/models/confirmationcode.rb
123
125
  - app/models/user.rb
126
+ - app/views/admin
124
127
  - app/views/account
125
- - app/views/root_admin
126
128
  - app/views/mailinglist
127
129
  - app/views/sugoi_admin
128
130
  - app/views/layouts
129
131
  - app/views/address
130
132
  - app/views/base_user
131
133
  - app/views/navigation
134
+ - app/views/mailinglist_class
132
135
  - app/views/domain
133
136
  - app/views/mail_admin
137
+ - app/views/admin/edit_user_list.rhtml
138
+ - app/views/admin/show_user.rhtml
139
+ - app/views/admin/admin_user_new.rhtml
140
+ - app/views/admin/list_addresses.rhtml
141
+ - app/views/admin/remove_user.rhtml
142
+ - app/views/admin/add_address.rhtml
143
+ - app/views/admin/add_mailinglist.rhtml
144
+ - app/views/admin/admin_user_list.rhtml
145
+ - app/views/admin/edit_address.rhtml
146
+ - app/views/admin/remove_address.rhtml
147
+ - app/views/admin/change_user_password.rhtml
148
+ - app/views/admin/remove_mailinglist.rhtml
149
+ - app/views/admin/list_mailinglists.rhtml
150
+ - app/views/admin/edit_mailinglist.rhtml
151
+ - app/views/admin/list_users.rhtml
152
+ - app/views/admin/_form.rhtml
134
153
  - app/views/account/logout.rhtml
135
154
  - app/views/account/login.rhtml
136
155
  - app/views/account/welcome.rhtml
137
156
  - app/views/account/signup.rhtml
138
- - app/views/root_admin/edit_user_list.rhtml
139
- - app/views/root_admin/show_user.rhtml
140
- - app/views/root_admin/admin_user_new.rhtml
141
- - app/views/root_admin/list_addresses.rhtml
142
- - app/views/root_admin/remove_user.rhtml
143
- - app/views/root_admin/add_address.rhtml
144
- - app/views/root_admin/add_mailinglist.rhtml
145
- - app/views/root_admin/admin_user_list.rhtml
146
- - app/views/root_admin/edit_address.rhtml
147
- - app/views/root_admin/remove_address.rhtml
148
- - app/views/root_admin/change_user_password.rhtml
149
- - app/views/root_admin/remove_mailinglist.rhtml
150
- - app/views/root_admin/list_mailinglists.rhtml
151
- - app/views/root_admin/edit_mailinglist.rhtml
152
- - app/views/root_admin/list_users.rhtml
153
- - app/views/root_admin/_form.rhtml
154
157
  - app/views/mailinglist/new.rhtml
155
158
  - app/views/mailinglist/edit.rhtml
156
159
  - app/views/mailinglist/list.rhtml
157
160
  - app/views/mailinglist/_new_form.rhtml
158
161
  - app/views/mailinglist/new_address.rhtml
159
162
  - app/views/mailinglist/show.rhtml
160
- - app/views/mailinglist/new_mailinglist_class.rhtml
161
- - app/views/mailinglist/_new_class_form.rhtml
162
- - app/views/mailinglist/list_mailinglist_classes.rhtml
163
163
  - app/views/mailinglist/_address_form.rhtml
164
164
  - app/views/mailinglist/_form.rhtml
165
165
  - app/views/sugoi_admin/_command_description.rhtml
@@ -220,6 +220,13 @@ files:
220
220
  - app/views/navigation/_root_show_user_module.rhtml
221
221
  - app/views/navigation/_root_edit_mailinglist_module.rhtml
222
222
  - app/views/navigation/_base_unsubscribe_self_module.rhtml
223
+ - app/views/mailinglist_class/new.rhtml
224
+ - app/views/mailinglist_class/_form_option.rhtml
225
+ - app/views/mailinglist_class/edit.rhtml
226
+ - app/views/mailinglist_class/list.rhtml
227
+ - app/views/mailinglist_class/_new_form.rhtml
228
+ - app/views/mailinglist_class/show.rhtml
229
+ - app/views/mailinglist_class/_form.rhtml
223
230
  - app/views/domain/logout.rhtml
224
231
  - app/views/domain/login.rhtml
225
232
  - app/views/domain/welcome.rhtml
@@ -259,6 +266,7 @@ files:
259
266
  - script/process/inspector
260
267
  - script/performance/benchmarker
261
268
  - script/performance/profiler
269
+ - db/schema.rb
262
270
  - db/schema.mysql.sql
263
271
  - db/schema.sqlserver.sql
264
272
  - db/schema.postgresql.sql
@@ -330,8 +338,8 @@ files:
330
338
  - test/fixtures/domains.yml
331
339
  - test/fixtures/helps.yml
332
340
  - test/fixtures/users.yml
333
- - test/functional/root_admin_controller_test.rb
334
341
  - test/functional/navigation_controller_test.rb
342
+ - test/functional/admin_controller_test.rb
335
343
  - test/functional/mail_admin_controller_test.rb
336
344
  - test/functional/sugoi_admin_controller_test.rb
337
345
  - test/functional/mailservice_controller_test.rb
@@ -1,16 +0,0 @@
1
- <%= error_messages_for 'mailinglist_class' %>
2
-
3
- <!--[form:mailinglist]-->
4
- <p>
5
- <label for="mailinglist_class_name">Mailinglist Class Name</label>
6
- <br/>
7
- <%= text_field 'mailinglist_class', 'name' %>
8
- </p>
9
-
10
- <label for="mailinglist_class_description">Description:</label>
11
- <br />
12
- <%= text_field 'mailinglist_class', 'description' %>
13
- </p>
14
- <br/>
15
- <br/>
16
- <!--[eoform:mailinglist]-->
@@ -1,8 +0,0 @@
1
- <h3>New Mailing List Class</h3>
2
-
3
- <%= start_form_tag :action => 'new_class' %>
4
-
5
- <%= render :partial => 'new_class_form' %>
6
-
7
- <%= submit_tag 'Save' %>
8
- <%= end_form_tag %>