sugoi-mail 0.1.0 → 0.1.5

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 (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