Commit bf85926025b38cced363ca5e5ba8b7d4c909322e
Committed by
Daniela Feitosa
1 parent
83923dfc
Exists in
master
and in
23 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,7 +185,8 @@ class ProfileController < PublicController | ||
| 185 | def leave_comment_on_activity | 185 | def leave_comment_on_activity |
| 186 | @comment = Comment.new(params[:comment]) | 186 | @comment = Comment.new(params[:comment]) |
| 187 | @comment.author = user | 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 | @tab_action = params[:tab_action] | 190 | @tab_action = params[:tab_action] |
| 190 | @message = @comment.save ? _("Comment successfully added.") : _("You can't leave an empty comment.") | 191 | @message = @comment.save ? _("Comment successfully added.") : _("You can't leave an empty comment.") |
| 191 | @activities = @profile.activities.paginate(:per_page => 30, :page => params[:page]) if params[:not_load_scraps].nil? | 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,6 +294,16 @@ class ProfileController < PublicController | ||
| 293 | end | 294 | end |
| 294 | end | 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 | protected | 307 | protected |
| 297 | 308 | ||
| 298 | def check_access_to_profile | 309 | def check_access_to_profile |
app/models/article.rb
| @@ -135,8 +135,7 @@ class Article < ActiveRecord::Base | @@ -135,8 +135,7 @@ class Article < ActiveRecord::Base | ||
| 135 | 135 | ||
| 136 | after_update :update_creation_activity | 136 | after_update :update_creation_activity |
| 137 | def update_creation_activity | 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 | end | 139 | end |
| 141 | 140 | ||
| 142 | # retrieves all articles belonging to the given +profile+ that are not | 141 | # retrieves all articles belonging to the given +profile+ that are not |
| @@ -563,6 +562,10 @@ class Article < ActiveRecord::Base | @@ -563,6 +562,10 @@ class Article < ActiveRecord::Base | ||
| 563 | _('Created at: ') | 562 | _('Created at: ') |
| 564 | end | 563 | end |
| 565 | 564 | ||
| 565 | + def activity | ||
| 566 | + ActionTracker::Record.find_by_target_type_and_target_id 'Article', self.id | ||
| 567 | + end | ||
| 568 | + | ||
| 566 | private | 569 | private |
| 567 | 570 | ||
| 568 | def sanitize_tag_list | 571 | def sanitize_tag_list |
app/models/comment.rb
| @@ -79,6 +79,12 @@ class Comment < ActiveRecord::Base | @@ -79,6 +79,12 @@ class Comment < ActiveRecord::Base | ||
| 79 | if comment.source.kind_of?(Article) && comment.article.notify_comments? && !comment.article.profile.notification_emails.empty? | 79 | if comment.source.kind_of?(Article) && comment.article.notify_comments? && !comment.article.profile.notification_emails.empty? |
| 80 | Comment::Notifier.deliver_mail(comment) | 80 | Comment::Notifier.deliver_mail(comment) |
| 81 | end | 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 | end | 88 | end |
| 83 | 89 | ||
| 84 | def replies | 90 | def replies |
app/views/profile/_comment.rhtml
| @@ -25,7 +25,7 @@ | @@ -25,7 +25,7 @@ | ||
| 25 | 25 | ||
| 26 | <% if logged_in? && (user == profile || user == Person.find(comment.author_id) || user.has_permission?(:moderate_comments, profile)) %> | 26 | <% if logged_in? && (user == profile || user == Person.find(comment.author_id) || user.has_permission?(:moderate_comments, profile)) %> |
| 27 | <% button_bar(:style => 'float: right; margin-top: 0px;') do %> | 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 | <% end %> | 29 | <% end %> |
| 30 | <% end %> | 30 | <% end %> |
| 31 | 31 |