Commit bf85926025b38cced363ca5e5ba8b7d4c909322e

Authored by Caio Almeida
Committed by Daniela Feitosa
1 parent 83923dfc

If activity is about an article, the comment is added to the article; Comments c…

…an be removed; Added an method to get the activity related to the article; Alter the counter cache of the activity when a comment is added or removed to the article
app/controllers/public/profile_controller.rb
... ... @@ -185,7 +185,8 @@ class ProfileController < PublicController
185 185 def leave_comment_on_activity
186 186 @comment = Comment.new(params[:comment])
187 187 @comment.author = user
188   - @comment.source = ActionTracker::Record.find(params[:comment][:source_id])
  188 + @activity = ActionTracker::Record.find(params[:comment][:source_id])
  189 + @comment.source_type, @comment.source_id = (@activity.target_type == 'Article' ? ['Article', @activity.target_id] : [@activity.class.to_s, @activity.id])
189 190 @tab_action = params[:tab_action]
190 191 @message = @comment.save ? _("Comment successfully added.") : _("You can't leave an empty comment.")
191 192 @activities = @profile.activities.paginate(:per_page => 30, :page => params[:page]) if params[:not_load_scraps].nil?
... ... @@ -293,6 +294,16 @@ class ProfileController < PublicController
293 294 end
294 295 end
295 296  
  297 + def remove_comment
  298 + #FIXME Check whether these permissions are enough
  299 + @comment = Comment.find(params[:comment_id])
  300 + if (user == @comment.author || user == profile || user.has_permission?(:moderate_comments, profile))
  301 + @comment.destroy
  302 + session[:notice] = _('Comment successfully deleted')
  303 + end
  304 + redirect_to :action => :index
  305 + end
  306 +
296 307 protected
297 308  
298 309 def check_access_to_profile
... ...
app/models/article.rb
... ... @@ -135,8 +135,7 @@ class Article < ActiveRecord::Base
135 135  
136 136 after_update :update_creation_activity
137 137 def update_creation_activity
138   - action = ActionTracker::Record.find(:first, :conditions => {:target_type => 'Article', :target_id => self.id})
139   - action.touch
  138 + self.activity.touch if self.activity
140 139 end
141 140  
142 141 # retrieves all articles belonging to the given +profile+ that are not
... ... @@ -563,6 +562,10 @@ class Article < ActiveRecord::Base
563 562 _('Created at: ')
564 563 end
565 564  
  565 + def activity
  566 + ActionTracker::Record.find_by_target_type_and_target_id 'Article', self.id
  567 + end
  568 +
566 569 private
567 570  
568 571 def sanitize_tag_list
... ...
app/models/comment.rb
... ... @@ -79,6 +79,12 @@ class Comment < ActiveRecord::Base
79 79 if comment.source.kind_of?(Article) && comment.article.notify_comments? && !comment.article.profile.notification_emails.empty?
80 80 Comment::Notifier.deliver_mail(comment)
81 81 end
  82 +
  83 + comment.article.activity.increment!(:comments_count) if comment.source.kind_of?(Article) && comment.article.activity
  84 + end
  85 +
  86 + after_destroy do |comment|
  87 + comment.article.activity.decrement!(:comments_count) if comment.source.kind_of?(Article) && comment.article.activity
82 88 end
83 89  
84 90 def replies
... ...
app/views/profile/_comment.rhtml
... ... @@ -25,7 +25,7 @@
25 25  
26 26 <% if logged_in? && (user == profile || user == Person.find(comment.author_id) || user.has_permission?(:moderate_comments, profile)) %>
27 27 <% button_bar(:style => 'float: right; margin-top: 0px;') do %>
28   - <%= icon_button(:delete, _('Remove'), { :profile => params[:profile], :remove_comment => comment.id, :view => params[:view] }, :method => :post, :confirm => _('Are you sure you want to remove this comment and all its replies?')) %>
  28 + <%= icon_button(:delete, _('Remove'), { :action => :remove_comment, :comment_id => comment.id }, :method => :get, :confirm => _('Are you sure you want to remove this comment and all its replies?')) %>
29 29 <% end %>
30 30 <% end %>
31 31  
... ...