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]
|
if params[:folder] && params[:set_default_folder]
|
||||||
cookies.permanent[:dmail_folder] = params[:folder]
|
cookies.permanent[:dmail_folder] = params[:folder]
|
||||||
end
|
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])
|
@dmails = @query.order("dmails.created_at desc").paginate(params[:page], :limit => params[:limit])
|
||||||
respond_with(@dmails) do |format|
|
respond_with(@dmails) do |format|
|
||||||
format.xml do
|
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)
|
time_tag(time.strftime("%Y-%m-%d %H:%M"), time)
|
||||||
end
|
end
|
||||||
|
|
||||||
def link_to_user(user)
|
def link_to_user(user, options = {})
|
||||||
user_class = user.level_class
|
user_class = user.level_class
|
||||||
user_class = user_class + " user-post-approver" if user.can_approve_posts?
|
user_class = user_class + " user-post-approver" if user.can_approve_posts?
|
||||||
user_class = user_class + " with-style" if CurrentUser.user.style_usernames?
|
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
|
end
|
||||||
|
|
||||||
def mod_link_to_user(user, positive_or_negative)
|
def mod_link_to_user(user, positive_or_negative)
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ class AnonymousUser
|
|||||||
Time.now
|
Time.now
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dmail_filter
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
def name
|
def name
|
||||||
"Anonymous"
|
"Anonymous"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class DmailFilter < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def filtered?(dmail)
|
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
|
end
|
||||||
|
|
||||||
def has_filter?
|
def has_filter?
|
||||||
@@ -19,6 +19,6 @@ class DmailFilter < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def regexp
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
<p>
|
<p>
|
||||||
<%= link_to "Respond", new_dmail_path(:respond_to_id => @dmail) %>
|
<%= link_to "Respond", new_dmail_path(:respond_to_id => @dmail) %>
|
||||||
| <%= link_to "Forward", new_dmail_path(:respond_to_id => @dmail, :forward => true) %>
|
| <%= 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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</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 :login_reminder, :only => [:new, :create]
|
||||||
resource :deletion, :only => [:show, :destroy]
|
resource :deletion, :only => [:show, :destroy]
|
||||||
resource :email_change, :only => [:new, :create]
|
resource :email_change, :only => [:new, :create]
|
||||||
|
resource :dmail_filter, :only => [:edit, :update]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,43 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
||||||
class DmailFilterTest < ActiveSupport::TestCase
|
class DmailFilterTest < ActiveSupport::TestCase
|
||||||
# test "the truth" do
|
def setup
|
||||||
# assert true
|
super
|
||||||
# end
|
|
||||||
|
@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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user