sugoi-mail 0.1.0 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/INSTALL +94 -0
  2. data/app/apis/mailservice_api.rb +32 -22
  3. data/app/controllers/account_controller.rb +38 -22
  4. data/app/controllers/address_controller.rb +2 -0
  5. data/app/controllers/application.rb +12 -1
  6. data/app/controllers/base_user_controller.rb +29 -0
  7. data/app/controllers/domain_controller.rb +7 -8
  8. data/app/controllers/mail_admin_controller.rb +275 -0
  9. data/app/controllers/mailinglist_controller.rb +68 -14
  10. data/app/controllers/mailservice_controller.rb +116 -94
  11. data/app/controllers/navigation_controller.rb +3 -0
  12. data/app/controllers/root_admin_controller.rb +346 -0
  13. data/app/controllers/sugoi_admin_controller.rb +16 -13
  14. data/app/helpers/base_user_helper.rb +2 -0
  15. data/app/helpers/mail_admin_helper.rb +7 -0
  16. data/app/helpers/navigation_helper.rb +2 -0
  17. data/app/helpers/root_admin_helper.rb +2 -0
  18. data/app/models/address.rb +3 -4
  19. data/app/models/domain.rb +1 -1
  20. data/app/models/mail_admin.rb +2 -0
  21. data/app/models/mailinglist.rb +41 -19
  22. data/app/models/mailinglist_class.rb +1 -0
  23. data/app/models/message.rb +18 -36
  24. data/app/models/proxy_link.rb +14 -6
  25. data/app/views/account/login.rhtml +14 -12
  26. data/app/views/account/logout.rhtml +4 -8
  27. data/app/views/account/welcome.rhtml +3 -13
  28. data/app/views/base_user/add_address.rhtml +3 -0
  29. data/app/views/base_user/edit_address.rhtml +3 -0
  30. data/app/views/base_user/edit_user_list.rhtml +21 -0
  31. data/app/views/base_user/list_mailinglists.rhtml +3 -0
  32. data/app/views/base_user/remove_address.rhtml +3 -0
  33. data/app/views/base_user/unsubscribe_self.rhtml +3 -0
  34. data/app/views/layouts/application.rhtml +47 -0
  35. data/app/views/layouts/login.rhtml +34 -0
  36. data/app/views/layouts/sugoi_admin.rhtml +1 -0
  37. data/app/views/mail_admin/_form.rhtml +11 -0
  38. data/app/views/mail_admin/edit_admin_message.rhtml +12 -0
  39. data/app/views/mail_admin/list_admin_messages.rhtml +20 -0
  40. data/app/views/mail_admin/new_admin_message.rhtml +0 -0
  41. data/app/views/mailinglist/_address_form.rhtml +23 -0
  42. data/app/views/mailinglist/_form.rhtml +10 -14
  43. data/app/views/mailinglist/_new_class_form.rhtml +16 -0
  44. data/app/views/mailinglist/_new_form.rhtml +30 -0
  45. data/app/views/mailinglist/edit.rhtml +11 -5
  46. data/app/views/mailinglist/list.rhtml +15 -15
  47. data/app/views/mailinglist/list_mailinglist_classes.rhtml +18 -0
  48. data/app/views/mailinglist/new.rhtml +5 -5
  49. data/app/views/mailinglist/new_address.rhtml +10 -0
  50. data/app/views/mailinglist/new_mailinglist_class.rhtml +8 -0
  51. data/app/views/mailinglist/show.rhtml +15 -13
  52. data/app/views/navigation/_base_add_address_module.rhtml +2 -0
  53. data/app/views/navigation/_base_edit_address_module.rhtml +2 -0
  54. data/app/views/navigation/_base_edit_user_list_module.rhtml +5 -0
  55. data/app/views/navigation/_base_index_module.rhtml +2 -0
  56. data/app/views/navigation/_base_list_mailinglists_module.rhtml +3 -0
  57. data/app/views/navigation/_base_remove_address_module.rhtml +2 -0
  58. data/app/views/navigation/_base_unsubscribe_self_module.rhtml +2 -0
  59. data/app/views/navigation/_base_welcome_module.rhtml +3 -0
  60. data/app/views/navigation/_nav_module.rhtml +77 -0
  61. data/app/views/navigation/_root_add_address_module.rhtml +3 -0
  62. data/app/views/navigation/_root_add_mailinglist_module.rhtml +3 -0
  63. data/app/views/navigation/_root_add_user_module.rhtml +3 -0
  64. data/app/views/navigation/_root_change_user_password_module.rhtml +3 -0
  65. data/app/views/navigation/_root_edit_address_module.rhtml +13 -0
  66. data/app/views/navigation/_root_edit_mailinglist_module.rhtml +12 -0
  67. data/app/views/navigation/_root_edit_user_list_module.rhtml +3 -0
  68. data/app/views/navigation/_root_edit_user_module.rhtml +10 -0
  69. data/app/views/navigation/_root_index_module.rhtml +4 -0
  70. data/app/views/navigation/_root_list_addresses_module.rhtml +11 -0
  71. data/app/views/navigation/_root_list_mailinglists_module.rhtml +11 -0
  72. data/app/views/navigation/_root_list_users_module.rhtml +12 -0
  73. data/app/views/navigation/_root_remove_address_module.rhtml +12 -0
  74. data/app/views/navigation/_root_remove_mailinglist_module.rhtml +12 -0
  75. data/app/views/navigation/_root_remove_user_module.rhtml +12 -0
  76. data/app/views/navigation/_root_show_user_module.rhtml +10 -0
  77. data/app/views/navigation/_root_welcome_module.rhtml +3 -0
  78. data/app/views/navigation/chooseNav.rhtml +0 -0
  79. data/app/views/navigation/logout.rhtml +8 -0
  80. data/app/views/root_admin/_form.rhtml +21 -0
  81. data/app/views/root_admin/add_address.rhtml +3 -0
  82. data/app/views/root_admin/add_mailinglist.rhtml +3 -0
  83. data/app/views/root_admin/admin_user_list.rhtml +29 -0
  84. data/app/views/root_admin/admin_user_new.rhtml +8 -0
  85. data/app/views/root_admin/change_user_password.rhtml +3 -0
  86. data/app/views/root_admin/edit_address.rhtml +3 -0
  87. data/app/views/root_admin/edit_mailinglist.rhtml +3 -0
  88. data/app/views/root_admin/edit_user_list.rhtml +3 -0
  89. data/app/views/root_admin/list_addresses.rhtml +3 -0
  90. data/app/views/root_admin/list_mailinglists.rhtml +3 -0
  91. data/app/views/root_admin/list_users.rhtml +32 -0
  92. data/app/views/root_admin/remove_address.rhtml +3 -0
  93. data/app/views/root_admin/remove_mailinglist.rhtml +3 -0
  94. data/app/views/root_admin/remove_user.rhtml +3 -0
  95. data/app/views/root_admin/show_user.rhtml +3 -0
  96. data/app/views/sugoi_admin/_command_description.rhtml +1 -1
  97. data/app/views/sugoi_admin/_command_list.rhtml +1 -1
  98. data/app/views/sugoi_admin/create_domain.rhtml +1 -1
  99. data/app/views/sugoi_admin/create_list.rhtml +1 -1
  100. data/app/views/sugoi_admin/create_user.rhtml +1 -1
  101. data/app/views/sugoi_admin/help.rhtml +1 -1
  102. data/app/views/sugoi_admin/init.rhtml +1 -1
  103. data/app/views/sugoi_admin/list_addresses.rhtml +1 -1
  104. data/app/views/sugoi_admin/list_domains.rhtml +1 -1
  105. data/app/views/sugoi_admin/list_mailinglist_classes.rhtml +1 -1
  106. data/app/views/sugoi_admin/list_mailinglists.rhtml +1 -1
  107. data/app/views/sugoi_admin/list_users.rhtml +1 -1
  108. data/app/views/sugoi_admin/set_config.rhtml +4 -1
  109. data/app/views/sugoi_admin/show_config.rhtml +1 -1
  110. data/app/views/sugoi_admin/subscribe.rhtml +1 -1
  111. data/app/views/sugoi_admin/unsubscribe.rhtml +1 -1
  112. data/bin/maild +1 -1
  113. data/bin/sugoi-mail +1 -1
  114. data/config/environment.rb +2 -2
  115. data/config/routes.rb +4 -2
  116. data/db/migrate/028_add_sessions.rb +15 -0
  117. data/db/schema.rb +56 -48
  118. data/lib/login_system.rb +6 -6
  119. data/lib/tasks/release.rake +2 -2
  120. data/public/404.html +27 -5
  121. data/public/500.html +27 -5
  122. data/public/images/celltop1.jpg +0 -0
  123. data/public/images/title11.jpg +0 -0
  124. data/public/{index.html → index_default.html} +0 -0
  125. data/public/javascripts/dragdrop.js +1 -1
  126. data/public/javascripts/effects.js +1 -1
  127. data/public/javascripts/prototype.js +1 -1
  128. data/public/stylesheets/global.css +201 -0
  129. data/public/stylesheets/scaffold.css +176 -11
  130. data/public/stylesheets/trestle.css +176 -11
  131. data/script/cover +6 -0
  132. data/script/process/inspector +3 -0
  133. data/test/all.rb +2 -0
  134. data/test/fixtures/helps.yml +1 -1
  135. data/test/fixtures/mailinglist_classes.yml +4 -4
  136. data/test/fixtures/messages.yml +22 -2
  137. data/test/functional/base_user_controller_test.rb +18 -0
  138. data/test/functional/mail_admin_controller_test.rb +18 -0
  139. data/test/functional/mailservice_controller_test.rb +164 -19
  140. data/test/functional/navigation_controller_test.rb +18 -0
  141. data/test/functional/root_admin_controller_test.rb +18 -0
  142. data/test/functional/sugoi_admin_controller_test.rb +68 -10
  143. data/test/functionals.rb +2 -1
  144. data/test/integration/test_soap.rb +3 -1
  145. data/test/unit/address_test.rb +16 -1
  146. data/test/unit/domain_test.rb +5 -12
  147. data/test/unit/mailinglist_class_test.rb +2 -2
  148. data/test/unit/mailinglist_test.rb +138 -3
  149. data/test/unit/message_test.rb +256 -1
  150. data/test/unit/proxy_link_test.rb +37 -0
  151. data/test/unit/sys_config_test.rb +6 -0
  152. data/test/unit/user_test.rb +20 -0
  153. data/test/units.rb +2 -1
  154. metadata +94 -8
  155. data/app/views/layouts/address.rhtml +0 -13
  156. data/app/views/layouts/scaffold.rhtml +0 -13
@@ -0,0 +1,346 @@
1
+ class RootAdminController < MailserviceController
2
+
3
+ def admin_user_new
4
+
5
+ end
6
+
7
+ # Returns true if the user is an administrator and false otherwise
8
+ def is_admin
9
+ user_admin? rescue false
10
+ end
11
+
12
+ # Creates a new user. NOTE: This method requires that you're
13
+ # already signed in as an administrator.
14
+ def admin_user_signup
15
+ #if
16
+ # redirect_to :controller => 'mailinglist', :action => 'list_users'
17
+ #flash[:notice] = "IT WORKED"
18
+ #else
19
+ #end
20
+ # render :controller => 'mailservice', :action => 'admin_user_signup', :params => 'login, password, password_confirmation'
21
+ end
22
+
23
+ # Returns all users in this domain.
24
+ def admin_user_list
25
+ if session[:domain]
26
+ all_users=User.find_all_by_domain_id session[:domain].id
27
+ end
28
+ if all_users
29
+ @users = all_users
30
+ end
31
+ render :controller => 'mailservice', :action => 'admin_user_list'
32
+ end
33
+
34
+ def list_users # domain_name
35
+ #@users = session[:domain].users
36
+ domain_name = session[:domain]
37
+ domain = Domain.find_by_name domain_name
38
+ if domain then
39
+ @users = User.find_all_by_domain_id domain.id
40
+ else
41
+ # error "Domain \"#{domain_name}\" does not exist."
42
+ end
43
+ end
44
+
45
+ # Returns all users in this domain, as a hash
46
+ def admin_user_collection
47
+ render :controller => 'mailservice', :action => 'admin_user_collection'
48
+ end
49
+
50
+ # Resets a user's password.
51
+ def admin_user_reset_password login, password, password_confirmation
52
+ render :controller => 'mailservice', :action => 'admin_user_reset_password', :params => 'login, password, password_confirmation'
53
+ end
54
+
55
+ # Deletes a user.
56
+ def admin_user_delete login, login_confirmation
57
+ render :controller => 'mailservice', :action => 'admin_user_delete', :params => 'login, login_confirmation'
58
+ end
59
+
60
+ # Returns the confirmation code for a particular combination of
61
+ # mailing list and address.
62
+ #
63
+ # This one should probably resend the confirmation message.
64
+ def admin_get_confirmation_code mailinglist_name, address
65
+ render :controller => 'mailservice', :action => 'admin_get_confirmation_code', :params => 'mailinglist_name, address'
66
+ end
67
+
68
+ # Returns all mailing lists in this domain.
69
+ def admin_mailinglists_all
70
+ render :controller => 'mailservice', :action => 'admin_mailinglists_all'
71
+ end
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+ # model :mailinglist
82
+
83
+ # private
84
+ # def get_password
85
+ # password = ask "Password: " do |q| q.echo = false end
86
+ # confirmation = ask "Confirm: " do |q| q.echo = false end
87
+ #
88
+ # return [ password, confirmation ]
89
+ # end
90
+ #
91
+ # def format_errors errors
92
+ # errors.map do |facility, text|
93
+ # " #{facility}: #{text}\n"
94
+ # end
95
+ # end
96
+ #
97
+ # def error(error_text)
98
+ # callername = caller[0].gsub(/.*\`(\w+)\'.*/, '\1')
99
+ # @error = "#{callername}: #{error_text}"
100
+ # nil
101
+ # end
102
+ #
103
+ # def message(message_text)
104
+ # callername = caller[0].gsub(/.*\`(\w+)\'.*/, '\1')
105
+ # @messages ||= []
106
+ # @messages << "#{callername}: #{message_text}"
107
+ # end
108
+ #
109
+ # def ask_description(thing)
110
+ # description = ask "Description for #{thing}: "
111
+ # if description == "" then description = nil end
112
+ # description
113
+ # end
114
+ #
115
+ # public
116
+ #
117
+ # def init
118
+ # @alreadythere = []
119
+ # [ MailinglistClass, AdminMessage, SysConfig, Help ].each do |table|
120
+ # fixture = YAML.load(File.read(File.join(RAILS_ROOT,
121
+ # "test",
122
+ # "fixtures",
123
+ # table.name.tableize +
124
+ # ".yml")))
125
+ # fixture.values.sort_by do |values| values["id"].to_i end .
126
+ # each do |values|
127
+ # begin
128
+ # table.find values["id"]
129
+ # @alreadythere << "%s[%s]" % [ table.name, values["id"] ]
130
+ # rescue ActiveRecord::RecordNotFound
131
+ # configvar = table.new values
132
+ # configvar.id = values["id"].to_i # hohoho
133
+ # configvar.save
134
+ # end
135
+ # end
136
+ # end
137
+ # end
138
+ #
139
+ # def show_config(var_name=nil)
140
+ # unless var_name
141
+ # @config_vars = SysConfig.find_all
142
+ # else
143
+ # @config_vars = SysConfig.find_all_by_name(var_name)
144
+ # end
145
+ # end
146
+ #
147
+ # def set_config(var_name, new_value)
148
+ # @config_var = SysConfig.find_by_name(var_name)
149
+ # @config_var.value = new_value
150
+ # @config_var.save
151
+ # end
152
+ #
153
+ # def list_domains
154
+ # @domains = Domain.find_all
155
+ # end
156
+ #
157
+ # def list_mailinglists#(domain_name)
158
+ # flash[:notice] = "List of Mailing Lists"
159
+ ## domain = Domain.find_by_name(domain_name)
160
+ ## if domain then
161
+ ## @mailinglists = domain.mailinglists
162
+ ## else
163
+ ## error "#{domain_name}: not found"
164
+ ## end
165
+ # end
166
+ #
167
+ # def list_addresses#(mailinglist_address)
168
+ ## @mailinglist = Mailinglist.find_by_address(mailinglist_address)
169
+ ## if @mailinglist then
170
+ ## @mailinglist=@mailinglist[0]
171
+ ## @addresses = @mailinglist.addresses
172
+ ## else
173
+ ## error "#{mailinglist_address}: not found"
174
+ ## end
175
+ # end
176
+ #
177
+ # def add_user #domain_name, username,
178
+ ## email_address = nil,
179
+ ## description = nil
180
+ ## domain = Domain.find_by_name domain_name
181
+ ## if domain then
182
+ ## password, password_confirmation = get_password
183
+ ##
184
+ ## if email_address == nil then
185
+ ## email_address = ask "Address to forward #{username}'s email to: "
186
+ ## if email_address == "" then email_address = nil end
187
+ ## end
188
+ ##
189
+ ## description ||= ask_description(username)
190
+ ##
191
+ ## user = User.new
192
+ ## user.domain = domain
193
+ ## user.login = username
194
+ ## user.password = password
195
+ ## user.password_confirmation = password_confirmation
196
+ ## user.description = description
197
+ ## user.domainadmin = false
198
+ ## user.mailadmin = false
199
+ ##
200
+ ## if user.save then
201
+ ## message "User \"#{username}@#{domain_name}\" created successfully"
202
+ ## if email_address then
203
+ ## addr=Address.find_or_create_by_address(email_address)
204
+ ## user.addresses << addr
205
+ ## end
206
+ ## else
207
+ ## error "User \"#{username}@#{domain_name}\" was not created:\n" +
208
+ ## format_errors(user.errors).join("\n")
209
+ ## end
210
+ ## else
211
+ ## error "Domain \"#{domain_name}\" does not exist."
212
+ ## end
213
+ # end
214
+ #
215
+ # def list_users# domain_name
216
+ # flash[:notice] = "List of users"
217
+ ## domain = Domain.find_by_name domain_name
218
+ ## if domain then
219
+ ## @users = User.find_all_by_domain_id domain.id
220
+ ## else
221
+ ## error "Domain \"#{domain_name}\" does not exist."
222
+ ## end
223
+ # end
224
+ #
225
+ # def list_mailinglist_classes
226
+ # @mailinglist_classes = MailinglistClass.find :all, :order => :id
227
+ # end
228
+ #
229
+ # def list_mlclasses
230
+ # list_mailinglist_classes
231
+ # render "sugoi_admin/list_mailinglist_classes"
232
+ # end
233
+ #
234
+ # def remove_user
235
+ # end
236
+ #
237
+ # def unsubscribe_self
238
+ # end
239
+ #
240
+ # def unsubscribe_user
241
+ # end
242
+ #
243
+ # def edit_user_list
244
+ # end
245
+ #
246
+ # def change_user_password
247
+ # end
248
+ #
249
+ # def remove_mailinglist
250
+ # end
251
+ #
252
+ # def edit_mailinglist
253
+ # end
254
+ #
255
+ # def add_address
256
+ # end
257
+ #
258
+ # def remove_address
259
+ # end
260
+ #
261
+ # def edit_address
262
+ # end
263
+ #
264
+ # def show_address
265
+ # end
266
+ #
267
+ # def show_mailinglist
268
+ # end
269
+ #
270
+ # def show_user
271
+ # end
272
+ #
273
+ # def add_mailinglist mailinglist_name,
274
+ #domain_name, user_name, description = nil, mailinglist_class_id = 2
275
+ #
276
+ # mlclass = begin
277
+ # MailinglistClass.find mailinglist_class_id.to_i
278
+ # rescue ActiveRecord::RecordNotFound
279
+ # nil
280
+ # end
281
+ # unless mlclass
282
+ # return error("Invalid mailing list class: #{mailinglist_class_id}")
283
+ # end
284
+ #
285
+ # domain = Domain.find_by_name domain_name
286
+ # unless domain
287
+ # return error("Domain \"#{domain_name}\" not found.")
288
+ # end
289
+ #
290
+ # user = User.find_by_login_and_domain_id user_name, domain.id
291
+ # unless user
292
+ # return error("User \"#{user_name}\" not found "+
293
+ # "in domain \"#{domain_name}\".")
294
+ # end
295
+ #
296
+ # ml=Mailinglist.new
297
+ # ml.user = user
298
+ # ml.description = description
299
+ # ml.mailinglist_class = mlclass
300
+ # ml.name = mailinglist_name
301
+ #
302
+ # if ml.save then
303
+ # message "Mailing list \"#{ml.address}\" created successfully."
304
+ # end
305
+ # end
306
+ #
307
+ # def subscribe(mailinglist_address, new_address)
308
+ # address=Address.find_or_create_by_address new_address
309
+ # ml=Mailinglist.find_by_address(mailinglist_address)
310
+ # unless ml
311
+ # return error("Mailing list \"#{mailinglist_address}\" not found.")
312
+ # end
313
+ # ml=ml[0]
314
+ # ml.addresses << address
315
+ # message "Subscribed \"#{new_address}\" to \"#{mailinglist_address}\""
316
+ # end
317
+ #
318
+ # def unsubscribe(mailinglist_address, address_to_remove)
319
+ # address = Address.find_by_address address_to_remove
320
+ # unless address
321
+ # return error("Address \"#{address_to_remove}\" unknown.")
322
+ # end
323
+ #
324
+ # mailinglist = Mailinglist.find_by_address mailinglist_address
325
+ # unless mailinglist
326
+ # return error("Mailing list \"#{mailinglist_address}\" unknown.")
327
+ # end
328
+ #
329
+ # @mailinglist = mailinglist[0]
330
+ #
331
+ # unless @mailinglist.addresses.member? address
332
+ # return error("Address \"#{address}\" not in " + "
333
+ # mailing list \"#{mailinglist_address}\"")
334
+ # end
335
+ #
336
+ # @removed_addresses=@mailinglist.remove_addresses address
337
+ # end
338
+ #
339
+ # def help(command=nil)
340
+ # if command
341
+ # @help = Help.find_by_facility_and_command self.class.name, command
342
+ # else
343
+ # @help = Help.find_all_by_facility self.class.name
344
+ # end
345
+ # end
346
+ end
@@ -1,10 +1,8 @@
1
1
  class SugoiAdminController < CommandlineController
2
- model :mailinglist
3
-
4
2
  private
5
3
  def get_password
6
- password = ask "Password: " do |q| q.echo = false end
7
- confirmation = ask "Confirm: " do |q| q.echo = false end
4
+ password = ask "New password: " do |q| q.echo = false end
5
+ confirmation = ask "Confirm new password: " do |q| q.echo = false end
8
6
 
9
7
  return [ password, confirmation ]
10
8
  end
@@ -59,7 +57,7 @@ class SugoiAdminController < CommandlineController
59
57
 
60
58
  def show_config(var_name=nil)
61
59
  unless var_name
62
- @config_vars = SysConfig.find_all
60
+ @config_vars = SysConfig.find(:all)
63
61
  else
64
62
  @config_vars = SysConfig.find_all_by_name(var_name)
65
63
  end
@@ -67,12 +65,16 @@ class SugoiAdminController < CommandlineController
67
65
 
68
66
  def set_config(var_name, new_value)
69
67
  @config_var = SysConfig.find_by_name(var_name)
70
- @config_var.value = new_value
71
- @config_var.save
68
+ if @config_var then
69
+ @config_var.value = new_value
70
+ @config_var.save
71
+ else
72
+ @missing_config_name = var_name
73
+ end
72
74
  end
73
75
 
74
76
  def list_domains
75
- @domains = Domain.find_all
77
+ @domains = Domain.find(:all)
76
78
  end
77
79
 
78
80
  def list_mailinglists(domain_name)
@@ -136,7 +138,8 @@ class SugoiAdminController < CommandlineController
136
138
  user.password_confirmation = password_confirmation
137
139
  user.description = description
138
140
  user.domainadmin = false
139
-
141
+ user.mailinglistadmin = false
142
+
140
143
  if user.save then
141
144
  message "User \"#{username}@#{domain_name}\" created successfully"
142
145
  if email_address then
@@ -167,7 +170,7 @@ class SugoiAdminController < CommandlineController
167
170
 
168
171
  def list_mlclasses
169
172
  list_mailinglist_classes
170
- render "sugoi_admin/list_mailinglist_classes"
173
+ render :action => :list_mailinglist_classes
171
174
  end
172
175
 
173
176
  def create_list mailinglist_name,
@@ -229,11 +232,11 @@ class SugoiAdminController < CommandlineController
229
232
  @mailinglist = mailinglist[0]
230
233
 
231
234
  unless @mailinglist.addresses.member? address
232
- return error("Address \"#{address}\" not in " + "
233
- mailing list \"#{mailinglist_address}\"")
235
+ return error("Address \"#{address}\" not in " +
236
+ "mailing list \"#{mailinglist_address}\"")
234
237
  end
235
238
 
236
- @removed_addresses=@mailinglist.remove_addresses address
239
+ @removed_addresses=@mailinglist.addresses.delete address
237
240
  end
238
241
 
239
242
  def help(command=nil)
@@ -0,0 +1,2 @@
1
+ module BaseUserHelper
2
+ end
@@ -0,0 +1,7 @@
1
+ module MailAdminHelper
2
+
3
+ def get_subject_from_message
4
+ #TemplateRegex = /\{(\w+)\}/
5
+ end
6
+
7
+ end
@@ -0,0 +1,2 @@
1
+ module NavigationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module RootAdminHelper
2
+ end
@@ -89,15 +89,14 @@ class Address < ActiveRecord::Base
89
89
 
90
90
  # Returns an anonymous proxy address for this user and a mailing list
91
91
  def proxified ml
92
- ProxyLink.find_or_create_by_address_id_and_mailinglist_id(
93
- id, ml.id
94
- ).proxy_address
92
+ ProxyLink.find_or_create_by_address_id_and_mailinglist_id(id, ml.id) .
93
+ proxy_address
95
94
  end
96
95
 
97
96
  # If the address has a proxy address, then return the user that
98
97
  # the proxy address belongs to.
99
98
  def user
100
- ml = mailinglists.find_all do |ml|
99
+ ml = mailinglists.find(:all) do |ml|
101
100
  ml.id == ml.user.mailinglist_id && !ml.user.virtual?
102
101
  end[0]
103
102
  if ml then ml.user end
data/app/models/domain.rb CHANGED
@@ -31,7 +31,7 @@ class Domain < ActiveRecord::Base
31
31
  # @user = User.authenticate('bob', 'bobpass')
32
32
  #
33
33
  def self.authenticate(name, pass)
34
- find_first(["name = ? AND password = ?", name, sha1(pass)])
34
+ find_by_name_and_password name, sha1(pass)
35
35
  end
36
36
 
37
37
 
@@ -0,0 +1,2 @@
1
+ class MailAdmin < ActiveRecord::Base
2
+ end
@@ -34,18 +34,18 @@
34
34
  # subscriber when she unsubscribes from the
35
35
  # mailing list.
36
36
 
37
+ class AlreadySubscribedError < Exception; end
38
+
37
39
  class Mailinglist < ActiveRecord::Base
38
40
  belongs_to :user
39
- has_and_belongs_to_many :addresses
41
+ has_and_belongs_to_many :addresses, :before_add => :validate_unique_address
40
42
  has_many :messages
41
43
  has_many :proxy_links
42
44
  validates_each :name, :on => :create do |record, attr, value|
43
45
  if record.user
44
46
  if Mailinglist.find_by_sql(
45
- ['select * from mailinglists m, users u
46
- where u.id = m.user_id
47
- and u.domain_id = ?
48
- and m.name = ?',
47
+ [ 'select * from mailinglists m, users u
48
+ where u.id = m.user_id and u.domain_id = ? and m.name = ?',
49
49
  record.user.domain_id,
50
50
  value ]).length > 0 then
51
51
  record.errors.add("name",
@@ -54,11 +54,30 @@ class Mailinglist < ActiveRecord::Base
54
54
  end
55
55
  end
56
56
 
57
+ def validate_unique_address address
58
+ raise AlreadySubscribedError if addresses.member? address
59
+ end
60
+
57
61
  validates_associated :user, :on => :create
58
62
 
59
63
  validates_presence_of :user
64
+ validates_each :description, :on => :save do |record, attr, value|
65
+ if value
66
+ if value.length > 160
67
+ record.errors.add("description","Is too long (>160 chars)")
68
+ end
69
+ end
70
+ end
71
+
72
+ # validates_length_of :description, :within => 0..160, :on => :save
60
73
  belongs_to :mailinglist_class
61
74
 
75
+ def self.find_all_by_domain_id domain_id
76
+ Mailinglist.find(:all).find_all do |ml| # yes, you're reading that right
77
+ ml.domain.id == domain_id
78
+ end
79
+ end
80
+
62
81
  # Since rails's has_one interface apparently DOESN'T WORK, I
63
82
  # have to do all these by hand.
64
83
 
@@ -220,33 +239,32 @@ class Mailinglist < ActiveRecord::Base
220
239
  end
221
240
 
222
241
  def subscribe(address,confirmationcode = nil)
223
- addr=Address.find_or_create_by_address(address)
224
- if confirmation?
242
+ addr=Address.find_or_create_by_address(address) unless Address === address
243
+ if confirmation? #used to be confirmation? but that method doesn't appear to exist!
225
244
  if confirmed_addresses.member? addr
226
245
  true
227
246
  else
228
247
  if confirmationcode then
229
248
  confirm addr, confirmationcode
230
249
  else
231
- send_welcome_message(addr)
232
- addresses << addr
250
+ begin
251
+ addresses << addr
252
+ send_welcome_message(addr)
253
+ rescue AlreadySubscribedError
254
+ true
255
+ end
233
256
  end
234
257
  end
235
258
  else
236
- if addresses.member? addr
237
- true
238
- else
259
+ begin
239
260
  addresses << addr
261
+ rescue AlreadySubscribedError
262
+ true
240
263
  end
241
264
  end
242
265
  end
243
266
 
244
- def send_welcome_message(address)
245
- if Address === address then
246
- addr = address
247
- else
248
- addr=Address.find_or_create_by_address(address)
249
- end
267
+ def send_welcome_message(addr)
250
268
  c=Confirmationcode.find_by_address_id_and_mailinglist_id addr.id, id
251
269
  unless c
252
270
  c=Confirmationcode.new
@@ -315,7 +333,7 @@ class Mailinglist < ActiveRecord::Base
315
333
  :description => description,
316
334
  :requestaddress => requestaddress
317
335
  end
318
- remove_addresses addr
336
+ addresses.delete addr
319
337
  end
320
338
  end
321
339
 
@@ -352,4 +370,8 @@ class Mailinglist < ActiveRecord::Base
352
370
  return unsubscribe(addresscandidate, confirmationcode)
353
371
  end
354
372
  end
373
+
374
+ def openposting
375
+ return false
376
+ end
355
377
  end
@@ -36,4 +36,5 @@
36
36
  # people who want to use sugoi-mail for forwarding want)
37
37
  class MailinglistClass < ActiveRecord::Base
38
38
  has_many :mailinglists
39
+
39
40
  end