Skip to content

Commit

Permalink
Merge pull request #753 from Charcoal-SE/post-domain-removal
Browse files Browse the repository at this point in the history
Added the ability to remove user added domains
  • Loading branch information
thesecretmaster committed Jul 13, 2020
2 parents e4c8542 + 21c2b79 commit 053c482
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 8 deletions.
16 changes: 13 additions & 3 deletions app/controllers/posts_controller.rb
Expand Up @@ -3,11 +3,11 @@
class PostsController < ApplicationController
protect_from_forgery except: [:create]
before_action :check_if_smokedetector, only: :create
before_action :set_post, only: %i[add_domain needs_admin feedbacksapi reindex_feedback cast_spam_flag delete_post]
before_action :set_post, only: %i[remove_domain add_domain needs_admin feedbacksapi reindex_feedback cast_spam_flag delete_post]
before_action :authenticate_user!, only: %i[reindex_feedback cast_spam_flag]
before_action :verify_developer, only: %i[reindex_feedback delete_post]
before_action :verify_reviewer, only: [:feedback]
before_action :verify_core, only: [:add_domain]
before_action :verify_core, only: %i[remove_domain add_domain]

def show
begin
Expand All @@ -30,7 +30,17 @@ def add_domain
if !domain.present?
flash[:warning] = "Domain #{params[:domain_name]} not found"
else
@post.spam_domains << domain
PostSpamDomain.create(post: @post, spam_domain: domain, added_by: current_user)
end
redirect_back(fallback_location: post_path(@post))
end

def remove_domain
domain = PostSpamDomain.find_by(post: @post, spam_domain: params[:domain_id])
if domain.nil? || domain.added_by.nil?
flash[:warning] = 'You can only delete user added spam domains'
else
domain.custom_delete
end
redirect_back(fallback_location: post_path(@post))
end
Expand Down
3 changes: 2 additions & 1 deletion app/models/post.rb
Expand Up @@ -27,7 +27,8 @@ class Post < ApplicationRecord
belongs_to :smoke_detector
has_and_belongs_to_many :reasons
has_and_belongs_to_many :post_tags, class_name: 'DomainTag'
has_and_belongs_to_many :spam_domains
has_many :post_spam_domains
has_many :spam_domains, through: :post_spam_domains
has_many :feedbacks, dependent: :destroy
has_many :deletion_logs, dependent: :destroy
has_many :flag_logs, dependent: :destroy
Expand Down
12 changes: 12 additions & 0 deletions app/models/post_spam_domain.rb
@@ -0,0 +1,12 @@
# frozen_string_literal: true

class PostSpamDomain < ApplicationRecord
self.table_name = 'posts_spam_domains'
belongs_to :post
belongs_to :spam_domain
belongs_to :added_by, class_name: 'User'

def custom_delete
self.class.where(attributes).delete_all
end
end
3 changes: 2 additions & 1 deletion app/models/spam_domain.rb
Expand Up @@ -3,7 +3,8 @@
class SpamDomain < ApplicationRecord
include Websocket

has_and_belongs_to_many :posts, after_add: :setup_review
has_many :post_spam_domains
has_many :posts, through: :post_spam_domains, after_add: :setup_review
has_and_belongs_to_many :domain_tags, after_add: :check_dq
has_and_belongs_to_many :domain_groups
has_one :review_item, as: :reviewable
Expand Down
12 changes: 10 additions & 2 deletions app/views/posts/show.html.erb
Expand Up @@ -187,7 +187,15 @@
<% if @post.spam_domains.any? %>
<ul class="post-domain-list">
<% @post.spam_domains.each do |d| %>
<li><%= render 'spam_domains/domain', domain: d, occurances: true %></li>
<li>
<%= render 'spam_domains/domain', domain: d, occurances: true %>
<% if current_user&.has_role?(:core) && !(psd = PostSpamDomain.find_by(post: @post, spam_domain: d)).added_by.nil? %>
<%= link_to "remove domain", remove_post_domain_path(id: @post.id, domain_id: d.id), class: 'btn-sm btn-danger', method: :post %>
<% if current_user&.has_role?(:admin) %>
<i class="text-muted">(added by <%= psd.added_by.username %>, user_id: <%= psd.added_by.id %>)</i>
<% end %>
<% end %>
</li>
<% end %>
</ul>
<% else %>
Expand All @@ -198,7 +206,7 @@
<%= form_tag add_post_domain_path, method: :post do %>
<%= hidden_field_tag :post_id, @post.id %>
<%= text_field_tag :domain_name %>
<%= submit_tag 'Add Domain', data: { confirm: "Are you sure you want to add this domain? Only a developer can undo this action." }, class: 'btn btn-primary btn-sm' %>
<%= submit_tag 'Add Domain', class: 'btn btn-primary btn-sm' %>
<% end %>
<% end %>
<br/>
Expand Down
3 changes: 2 additions & 1 deletion config/routes.rb
Expand Up @@ -369,7 +369,8 @@
post ':post_id/feedback', to: 'posts#feedback', as: :post_feedback
get ':id/feedback/clear', to: 'feedbacks#clear', as: :clear_post_feedback
post ':id/admin_flag', to: 'posts#needs_admin', as: :admin_flag_post
post ':id/add_domain', to: 'posts#add_domain', as: :add_post_domain
post ':id/domains/add', to: 'posts#add_domain', as: :add_post_domain
post ':id/domains/remove', to: 'posts#remove_domain', as: :remove_post_domain
end

scope 'posts' do
Expand Down
@@ -0,0 +1,5 @@
class AddAddedByToPostsSpamDomains < ActiveRecord::Migration[5.2]
def change
add_reference :posts_spam_domains, :added_by, foreign_key: { to_table: :users }
end
end

0 comments on commit 053c482

Please sign in to comment.