diff --git a/app/controllers/public/content_viewer_controller.rb b/app/controllers/public/content_viewer_controller.rb index 4679dae..106cdc3 100644 --- a/app/controllers/public/content_viewer_controller.rb +++ b/app/controllers/public/content_viewer_controller.rb @@ -99,6 +99,14 @@ class ContentViewerController < ApplicationController @images = @images.paginate(:per_page => per_page, :page => params[:npage]) unless params[:slideshow] end + @unfollow_form = params[:unfollow] && params[:unfollow] == 'true' + if params[:unfollow] && params[:unfollow] == 'commit' && request.post? + @page.followers -= [params[:email]] + if @page.save + session[:notice] = _("Notification of new comments to '%s' canceled") % params[:email] + end + end + @comments = @page.comments(true).as_thread @comments_count = @page.comments.count if params[:slideshow] diff --git a/app/models/article.rb b/app/models/article.rb index 2e48ea9..ce47f2f 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -34,6 +34,7 @@ class Article < ActiveRecord::Base settings_items :display_hits, :type => :boolean, :default => true settings_items :author_name, :type => :string, :default => "" settings_items :allow_members_to_edit, :type => :boolean, :default => false + settings_items :followers, :type => Array, :default => [] belongs_to :reference_article, :class_name => "Article", :foreign_key => 'reference_article_id' diff --git a/app/models/comment.rb b/app/models/comment.rb index 50af142..ac9a084 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -75,11 +75,30 @@ class Comment < ActiveRecord::Base article.comments_updated if article.kind_of?(Article) end - after_create do |comment| - if comment.source.kind_of?(Article) && comment.article.notify_comments? && !comment.article.profile.notification_emails.empty? - Comment::Notifier.deliver_mail(comment) + after_create :new_follower + def new_follower + if source.kind_of?(Article) + article.followers += [author_email] + article.followers -= article.profile.notification_emails + article.followers.uniq! + article.save + end + end + + after_create :notify_by_mail + def notify_by_mail + if source.kind_of?(Article) && article.notify_comments? + if !article.profile.notification_emails.empty? + Comment::Notifier.deliver_mail(self) + end + emails = article.followers - [author_email] + if !emails.empty? + Comment::Notifier.deliver_mail_to_followers(self, emails) + end end + end + after_create do |comment| if comment.source.kind_of?(Article) comment.article.create_activity if comment.article.activity.nil? if comment.article.activity @@ -138,6 +157,22 @@ class Comment < ActiveRecord::Base :environment => profile.environment.name, :url => profile.environment.top_url end + def mail_to_followers(comment, emails) + profile = comment.article.profile + bcc emails + from "#{profile.environment.name} <#{profile.environment.contact_email}>" + subject _("[%s] %s commented on a content of %s") % [profile.environment.name, comment.author_name, profile.short_name] + body :recipient => profile.nickname || profile.name, + :sender => comment.author_name, + :sender_link => comment.author_link, + :article_title => comment.article.name, + :comment_url => comment.url, + :unsubscribe_url => comment.article.view_url.merge({:unfollow => true}), + :comment_title => comment.title, + :comment_body => comment.body, + :environment => profile.environment.name, + :url => profile.environment.top_url + end end def rejected? diff --git a/app/models/user.rb b/app/models/user.rb index 020a4a9..520d344 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -114,6 +114,7 @@ class User < ActiveRecord::Base # Activates the user in the database. def activate + return false unless self.person self.activated_at = Time.now.utc self.activation_code = nil self.person.visible = true diff --git a/app/views/comment/notifier/mail_to_followers.rhtml b/app/views/comment/notifier/mail_to_followers.rhtml new file mode 100644 index 0000000..8cb47f9 --- /dev/null +++ b/app/views/comment/notifier/mail_to_followers.rhtml @@ -0,0 +1,22 @@ +<%= _('Hi!') %> + +<%= word_wrap(_('%{sender} (%{sender_link}) commented on the content "%{article_title}".') % { :sender => @sender, :sender_link => url_for(@sender_link), :article_title => @article_title }) %> + +<%= word_wrap(_('Title: %s') % @comment_title) %> + +<%= _("Comment:") %> +------------------------------------------------------------------------------- +<%= word_wrap(@comment_body) %> +------------------------------------------------------------------------------- + +<%= _('Access the address below to view this comment:') %> +<%= url_for @comment_url %> + +<%= _('Access the address below to cancel comments notification:') %> +<%= url_for @unsubscribe_url %> + +<%= _("Greetings,") %> + +-- +<%= _('%s team.') % @environment %> +<%= url_for @url %> diff --git a/app/views/content_viewer/_confirm_unfollow.rhtml b/app/views/content_viewer/_confirm_unfollow.rhtml new file mode 100644 index 0000000..0156280 --- /dev/null +++ b/app/views/content_viewer/_confirm_unfollow.rhtml @@ -0,0 +1,12 @@ +<% if @unfollow_form %> +
+

<%= _('Cancel notification of new comments') %>

+ <% form_tag(@page.view_url.merge({:only_path => true}), {:method => 'post', :class => 'comment_form'}) do %> + <%= hidden_field_tag(:unfollow, 'commit') %> + <%= labelled_form_field(_('Enter your e-Mail'), text_field_tag(:email, nil, {:size => 40})) %> + <% button_bar do %> + <%= submit_button(:ok, _('Cancel notifications for e-mail above') ) %> + <% end %> + <% end %> +
+<% end %> diff --git a/app/views/content_viewer/view_page.rhtml b/app/views/content_viewer/view_page.rhtml index 7ba980a..d2a12c9 100644 --- a/app/views/content_viewer/view_page.rhtml +++ b/app/views/content_viewer/view_page.rhtml @@ -6,6 +6,8 @@
+<%= render :partial => 'confirm_unfollow' %> +