diff --git a/app/models/mailing_list_membership.rb b/app/models/mailing_list_membership.rb index dcabc69..12829d5 100644 --- a/app/models/mailing_list_membership.rb +++ b/app/models/mailing_list_membership.rb @@ -10,8 +10,13 @@ def self.of_list(listname) self end - def exist?(address) - !!self.find_by_id(address) + [:digest, :not_metoo, :nomail, :plain].each do |col| + define_method(col) do + read_attribute(col) == 'Y' + end + define_method("#{col}=") do |value| + write_attribute(col, (!!value ? 'Y' : 'N')) + end end end \ No newline at end of file diff --git a/app/views/accounts/_mailing_list.html.haml b/app/views/accounts/_mailing_list.html.haml new file mode 100644 index 0000000..f659469 --- /dev/null +++ b/app/views/accounts/_mailing_list.html.haml @@ -0,0 +1,20 @@ +- fields_for @reader do |rf| + - @reader.build_mailing_list_membership unless @reader.mailing_list_membership + - rf.fields_for :mailing_list_membership do |mf| + #mailing_list + %h3 + = t('mailing_list_preferences') + %p + = t('control_your_subscription', :list_name => "#{Radiant.config['reader.mailman.list_name']}@") + %br + = mf.check_box :nomail + = mf.label :nomail + %br + = mf.check_box :digest + = mf.label :digest + %br + = mf.check_box :plain + = mf.label :plain + %br + = mf.check_box :not_metoo + = mf.label :not_metoo diff --git a/app/views/admin/accounts/_mailing_list.html.haml b/app/views/admin/accounts/_mailing_list.html.haml deleted file mode 100644 index 8f3a00b..0000000 --- a/app/views/admin/accounts/_mailing_list.html.haml +++ /dev/null @@ -1,13 +0,0 @@ -#mailing_list - %p - = f.check_box :opt_out_of_mailing_list - = f.label :opt_out_of_mailing_list, :class => "checkbox" - %br - = f.check_box :mailing_list_digested - = f.label :mailing_list_digested, :class => "checkbox" - %br - = f.check_box :mailing_list_notmetoo - = f.label :mailing_list_notmetoo, :class => "checkbox" - %br - = f.check_box :mailing_list_nomail - = f.label :mailing_list_nomail, :class => "checkbox" diff --git a/app/views/admin/reader_configuration/_edit_mailing_list.html.haml b/app/views/admin/reader_configuration/_edit_mailing_list.html.haml index 726ba76..8308e8b 100644 --- a/app/views/admin/reader_configuration/_edit_mailing_list.html.haml +++ b/app/views/admin/reader_configuration/_edit_mailing_list.html.haml @@ -1,6 +1,6 @@ -#mailing_list_settings.box +#mailing_list_settings %h3 - =t("reader_mailman_extension.mailing_list_configuration") + =t("mailing_list_configuration") %p = edit_config 'reader.mailman.list_name' %p diff --git a/app/views/admin/reader_configuration/_mailing_list.html.haml b/app/views/admin/reader_configuration/_mailing_list.html.haml index 5e7fa3c..1df92f0 100644 --- a/app/views/admin/reader_configuration/_mailing_list.html.haml +++ b/app/views/admin/reader_configuration/_mailing_list.html.haml @@ -2,7 +2,7 @@ %h3 .actions = button_to t("edit"), edit_admin_reader_settings_url, :method => :get - =t("reader_mailman_extension.mailing_list_configuration") + =t("mailing_list_configuration") %p.ruled = show_config 'reader.mailman.list_name' %p.ruled diff --git a/app/views/admin/readers/_mailing_list.html.haml b/app/views/admin/readers/_mailing_list.html.haml index 8f3a00b..4369da3 100644 --- a/app/views/admin/readers/_mailing_list.html.haml +++ b/app/views/admin/readers/_mailing_list.html.haml @@ -1,13 +1,21 @@ -#mailing_list - %p - = f.check_box :opt_out_of_mailing_list - = f.label :opt_out_of_mailing_list, :class => "checkbox" - %br - = f.check_box :mailing_list_digested - = f.label :mailing_list_digested, :class => "checkbox" - %br - = f.check_box :mailing_list_notmetoo - = f.label :mailing_list_notmetoo, :class => "checkbox" - %br - = f.check_box :mailing_list_nomail - = f.label :mailing_list_nomail, :class => "checkbox" +- fields_for @reader do |rf| + #mailing_list + %h3 + = t('mailing_list_preferences') + %p + = rf.check_box :opt_out_of_mailing_list + = rf.label :opt_out_of_mailing_list + %br + - @reader.build_mailing_list_membership + - rf.fields_for :mailing_list_membership do |mf| + = mf.check_box :nomail + = mf.label :nomail + %br + = mf.check_box :digest + = mf.label :digest + %br + = mf.check_box :plain + = mf.label :plain + %br + = mf.check_box :not_metoo + = mf.label :not_metoo diff --git a/config/locales/en.yml b/config/locales/en.yml index ca45ca3..0c7916d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,18 +1,24 @@ en: activerecord: attributes: - reader: - opt_out_of_mailing_list: "Tick this box if you do not want to go on the mailing list" - mailing_list_digest: "Get mailing list as digest instead of individual messages" - mailing_list_notmetoo: "Don't receive your own messages to the mailing list" - mailing_list_nomail: "Switch off the mailing list temporarily but remain a member" + mailing_list_membership: + nomail: "Tick this box if you do not want to receive mailing list messages" + digest: "Get the mailing list as a daily digest instead of individual messages" + plain: "Get digest messages in plain text rather than HTML" + not_metoo: "Don't receive an echo of your own messages to the mailing list" errors: models: download: attributes: config: - download: - download: "download" - downloads: "Downloads" - downloads_extension: - permission_denied: "You do not have permission to download the requested file." \ No newline at end of file + reader: + mailman: + list_name: mailing list name + host: database host + port: database port + username: db username + password: db password + control_your_subscription: "You can also control your membership of the %{list_name} mailing list from here:" + mailing_list: "Mailing list" + mailing_list_configuration: "Mailing list configuration" + mailing_list_preferences: "Mailing list preferences" \ No newline at end of file diff --git a/lib/mailing_list_reader.rb b/lib/mailing_list_reader.rb index 230d861..5423958 100644 --- a/lib/mailing_list_reader.rb +++ b/lib/mailing_list_reader.rb @@ -3,32 +3,7 @@ module MailingListReader # for inclusion into Reader def self.included(base) base.class_eval do has_one :mailing_list_membership, :primary_key => 'email', :foreign_key => 'address', :dependent => :destroy - - include InstanceMethods - after_create :create_list_membership - before_update :update_list_membership - end - end - - module InstanceMethods - def create_list_membership - unless self.opt_out_of_mailing_list? - self.create_mailing_list_membership(:name => name, :ack => 'Y', :bi_date => 0, :bi_lastnotice => 0) - end - end - - def update_list_membership - if reader.opts_out_of_mailing_list? - mailing_list_membership.destroy - else - mailing_list_membership ||= create_list_membership - mailing_list_membership.address = self.new_email if self.email.changed? - mailing_list_membership.digested = self.mailing_list_digested? ? 'Y' : 'N' - mailing_list_membership.notmetoo = self.mailing_list_notmetoo? ? 'Y' : 'N' - mailing_list_membership.nomail = self.mailing_list_nomail? ? 'Y' : 'N' - mailing_list_membership.save if mailing_list_membership.changed? - end + accepts_nested_attributes_for :mailing_list_membership end - end end diff --git a/reader_mailman_extension.rb b/reader_mailman_extension.rb index a5be488..ce4598e 100644 --- a/reader_mailman_extension.rb +++ b/reader_mailman_extension.rb @@ -6,11 +6,10 @@ class ReaderMailmanExtension < Radiant::Extension def activate Reader.send :include, MailingListReader - admin.reader.edit.add :form, "mailing_list", :after => 'edit_group' - admin.account.edit.add :form, "mailing_list", :after => 'edit_password' - admin.reader.edit.add :form, "mailing_list", :before => 'edit_address' - admin.reader_configuration.show.add :settings, "mailman", :after => "administration" - admin.reader_configuration.edit.add :form, "mailman", :after => "administration" + admin.account.edit.add :form, "accounts/mailing_list", :after => 'edit_password' + admin.reader.edit.add :form, "admin/readers/mailing_list", :after => 'edit_group' + admin.reader_configuration.show.add :settings, "admin/reader_configuration/mailing_list", :after => "administration" + admin.reader_configuration.edit.add :form, "admin/reader_configuration/edit_mailing_list", :after => "administration" end end