fixes #2418 (includes hiding deleted dmails and allowing filtering on user name)
This commit is contained in:
@@ -17,7 +17,7 @@ class DmailsController < ApplicationController
|
||||
if params[:folder] && params[:set_default_folder]
|
||||
cookies.permanent[:dmail_folder] = params[:folder]
|
||||
end
|
||||
@query = Dmail.visible.search(params[:search])
|
||||
@query = Dmail.active.visible.search(params[:search])
|
||||
@dmails = @query.order("dmails.created_at desc").paginate(params[:page], :limit => params[:limit])
|
||||
respond_with(@dmails) do |format|
|
||||
format.xml do
|
||||
|
||||
29
app/controllers/maintenance/user/dmail_filters_controller.rb
Normal file
29
app/controllers/maintenance/user/dmail_filters_controller.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
module Maintenance
|
||||
module User
|
||||
class DmailFiltersController < ApplicationController
|
||||
before_filter :ensure_ownership
|
||||
before_filter :member_only
|
||||
|
||||
def edit
|
||||
@dmail_filter = CurrentUser.dmail_filter || DmailFilter.new
|
||||
end
|
||||
|
||||
def update
|
||||
@dmail_filter = CurrentUser.dmail_filter || DmailFilter.new
|
||||
@dmail_filter.update_attributes(params[:dmail_filter])
|
||||
flash[:notice] = "Filter updated"
|
||||
redirect_to(dmail_path(@dmail.id))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def ensure_ownership
|
||||
@dmail = Dmail.find(params[:dmail_id])
|
||||
|
||||
if @dmail.owner_id != CurrentUser.user.id
|
||||
raise User::PrivilegeError.new
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -76,11 +76,16 @@ module ApplicationHelper
|
||||
time_tag(time.strftime("%Y-%m-%d %H:%M"), time)
|
||||
end
|
||||
|
||||
def link_to_user(user)
|
||||
def link_to_user(user, options = {})
|
||||
user_class = user.level_class
|
||||
user_class = user_class + " user-post-approver" if user.can_approve_posts?
|
||||
user_class = user_class + " with-style" if CurrentUser.user.style_usernames?
|
||||
link_to(user.pretty_name, user_path(user), :class => user_class)
|
||||
if options[:raw_name]
|
||||
name = user.name
|
||||
else
|
||||
name = user.pretty_name
|
||||
end
|
||||
link_to(name, user_path(user), :class => user_class)
|
||||
end
|
||||
|
||||
def mod_link_to_user(user, positive_or_negative)
|
||||
|
||||
@@ -20,6 +20,10 @@ class AnonymousUser
|
||||
Time.now
|
||||
end
|
||||
|
||||
def dmail_filter
|
||||
nil
|
||||
end
|
||||
|
||||
def name
|
||||
"Anonymous"
|
||||
end
|
||||
|
||||
@@ -11,7 +11,7 @@ class DmailFilter < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def filtered?(dmail)
|
||||
dmail.from.level <= User::Levels::MODERATOR && has_filter? && (dmail.body =~ regexp || dmail.title =~ regexp)
|
||||
dmail.from.level <= User::Levels::MODERATOR && has_filter? && (dmail.body =~ regexp || dmail.title =~ regexp || dmail.from.name =~ regexp)
|
||||
end
|
||||
|
||||
def has_filter?
|
||||
@@ -19,6 +19,6 @@ class DmailFilter < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def regexp
|
||||
@regexp ||= Regexp.compile(words.scan(/\S+/).map {|x| Regexp.escape(x)}.join("|"))
|
||||
@regexp ||= Regexp.compile('\b(?:' + words.scan(/\S+/).map {|x| Regexp.escape(x)}.join("|") + ')\b')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
<p>
|
||||
<%= link_to "Respond", new_dmail_path(:respond_to_id => @dmail) %>
|
||||
| <%= link_to "Forward", new_dmail_path(:respond_to_id => @dmail, :forward => true) %>
|
||||
| <%= link_to "Filter messages like these", edit_maintenance_user_dmail_filter_path(:dmail_id => @dmail.id) %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
37
app/views/maintenance/user/dmail_filters/edit.html.erb
Normal file
37
app/views/maintenance/user/dmail_filters/edit.html.erb
Normal file
@@ -0,0 +1,37 @@
|
||||
<div id="c-users">
|
||||
<div id="a-edit">
|
||||
<h1>Edit Message Filters</h1>
|
||||
|
||||
<div>
|
||||
<h2><%= @dmail.title %></h2>
|
||||
|
||||
<ul style="margin-bottom: 1em;">
|
||||
<li><strong>Sender</strong>: <%= link_to_user @dmail.from %></li>
|
||||
<li><strong>Recipient</strong>: <%= link_to_user @dmail.to, :raw => true %></li>
|
||||
<li><strong>Date</strong>: <%= compact_time(@dmail.created_at) %></li>
|
||||
<% if CurrentUser.user.is_moderator? %>
|
||||
<li><strong>Sender IP</strong>: <%= @dmail.creator_ip_addr %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<h3>Body</h3>
|
||||
<div class="prose">
|
||||
<%= format_text(@dmail.body) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= simple_form_for @dmail_filter, :url => maintenance_user_dmail_filter_path(:dmail_id => @dmail.id), :method => :put do |f| %>
|
||||
<div class="input text optional field_with_hint">
|
||||
<label class="text" for="dmail_filter_words">Banned Words</label>
|
||||
<%= text_area_tag "dmail_filter[words]", @dmail_filter.words, :id => "dmail_filter_words", :class => "text", :style => "height: 10em;" %>
|
||||
<p class="hint">A list of banned words or users (space delimited). Any message you receive with a banned word will automatically be deleted. Make sure user names have no spaces in them (replace with underscores).</p>
|
||||
</div>
|
||||
|
||||
<%= f.button :submit, "Submit" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% content_for(:page_title) do %>
|
||||
Edit Message Filters - <%= Danbooru.config.app_name %>
|
||||
<% end %>
|
||||
@@ -56,6 +56,7 @@ Rails.application.routes.draw do
|
||||
resource :login_reminder, :only => [:new, :create]
|
||||
resource :deletion, :only => [:show, :destroy]
|
||||
resource :email_change, :only => [:new, :create]
|
||||
resource :dmail_filter, :only => [:edit, :update]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,7 +1,43 @@
|
||||
require 'test_helper'
|
||||
|
||||
class DmailFilterTest < ActiveSupport::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
def setup
|
||||
super
|
||||
|
||||
@receiver = FactoryGirl.create(:user)
|
||||
@sender = FactoryGirl.create(:user)
|
||||
end
|
||||
|
||||
def create_dmail(body, title)
|
||||
CurrentUser.scoped(@sender, "127.0.0.1") do
|
||||
Dmail.create_split(:to_id => @receiver.id, :body => body, :title => title)
|
||||
end
|
||||
end
|
||||
|
||||
context "a dmail filter for a word" do
|
||||
setup do
|
||||
@dmail_filter = @receiver.create_dmail_filter(:words => "banned")
|
||||
end
|
||||
|
||||
should "filter on that word in the body" do
|
||||
create_dmail("banned", "okay")
|
||||
assert_equal(true, @receiver.dmails.last.is_deleted?)
|
||||
end
|
||||
|
||||
should "filter on that word in the title" do
|
||||
create_dmail("okay", "banned")
|
||||
assert_equal(true, @receiver.dmails.last.is_deleted?)
|
||||
end
|
||||
end
|
||||
|
||||
context "a dmail filter for a user name" do
|
||||
setup do
|
||||
@dmail_filter = @receiver.create_dmail_filter(:words => @sender.name)
|
||||
end
|
||||
|
||||
should "filter on the sender" do
|
||||
create_dmail("okay", "okay")
|
||||
assert_equal(true, @receiver.dmails.last.is_deleted?)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user