Commit bf85926025b38cced363ca5e5ba8b7d4c909322e
Committed by
Daniela Feitosa
1 parent
83923dfc
Exists in
master
and in
29 other branches
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
Showing
4 changed files
with
24 additions
and
4 deletions
Show diff stats
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 | ... | ... |