Merge pull request #3055 from evazion/feat-post-replacement-controller
Add post replacements controller.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
module Moderator
|
module Moderator
|
||||||
module Post
|
module Post
|
||||||
class PostsController < ApplicationController
|
class PostsController < ApplicationController
|
||||||
before_filter :approver_only, :only => [:delete, :undelete, :move_favorites, :replace, :ban, :unban, :confirm_delete, :confirm_move_favorites, :confirm_ban]
|
before_filter :approver_only, :only => [:delete, :undelete, :move_favorites, :ban, :unban, :confirm_delete, :confirm_move_favorites, :confirm_ban]
|
||||||
before_filter :admin_only, :only => [:expunge]
|
before_filter :admin_only, :only => [:expunge]
|
||||||
skip_before_filter :api_check
|
skip_before_filter :api_check
|
||||||
|
|
||||||
@@ -37,15 +37,6 @@ module Moderator
|
|||||||
redirect_to(post_path(@post))
|
redirect_to(post_path(@post))
|
||||||
end
|
end
|
||||||
|
|
||||||
def replace
|
|
||||||
@post = ::Post.find(params[:id])
|
|
||||||
@post.replace!(params[:post][:source])
|
|
||||||
|
|
||||||
respond_with(@post) do |format|
|
|
||||||
format.html { redirect_to(@post) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def expunge
|
def expunge
|
||||||
@post = ::Post.find(params[:id])
|
@post = ::Post.find(params[:id])
|
||||||
@post.expunge!
|
@post.expunge!
|
||||||
|
|||||||
28
app/controllers/post_replacements_controller.rb
Normal file
28
app/controllers/post_replacements_controller.rb
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
class PostReplacementsController < ApplicationController
|
||||||
|
respond_to :html, :xml, :json
|
||||||
|
before_filter :approver_only, except: [:index]
|
||||||
|
|
||||||
|
def new
|
||||||
|
@post = Post.find(params[:post_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@post = Post.find(params[:post_id])
|
||||||
|
@post_replacement = @post.replace!(create_params)
|
||||||
|
|
||||||
|
flash[:notice] = "Post replaced"
|
||||||
|
respond_with(@post_replacement, location: @post)
|
||||||
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
params[:search][:post_id] = params.delete(:post_id) if params.has_key?(:post_id)
|
||||||
|
@post_replacements = PostReplacement.search(params[:search]).paginate(params[:page], limit: params[:limit])
|
||||||
|
|
||||||
|
respond_with(@post_replacements)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def create_params
|
||||||
|
params.require(:post_replacement).permit(:replacement_url)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1429,9 +1429,12 @@ class Post < ActiveRecord::Base
|
|||||||
ModAction.log("undeleted post ##{id}")
|
ModAction.log("undeleted post ##{id}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def replace!(url)
|
def replace!(params)
|
||||||
replacement = replacements.create(replacement_url: url)
|
transaction do
|
||||||
replacement.process!
|
replacement = replacements.create(params)
|
||||||
|
replacement.process!
|
||||||
|
replacement
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -61,4 +61,32 @@ class PostReplacement < ActiveRecord::Base
|
|||||||
post.distribute_files
|
post.distribute_files
|
||||||
post.update_iqdb_async
|
post.update_iqdb_async
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module SearchMethods
|
||||||
|
def search(params = {})
|
||||||
|
q = all
|
||||||
|
|
||||||
|
if params[:creator_id].present?
|
||||||
|
q = q.where(creator_id: params[:creator_id].split(",").map(&:to_i))
|
||||||
|
end
|
||||||
|
|
||||||
|
if params[:creator_name].present?
|
||||||
|
q = q.where(creator_name: User.name_to_id(params[:creator_name]))
|
||||||
|
end
|
||||||
|
|
||||||
|
if params[:id].present?
|
||||||
|
q = q.where(id: params[:id].split(",").map(&:to_i))
|
||||||
|
end
|
||||||
|
|
||||||
|
if params[:post_id].present?
|
||||||
|
q = q.where(post_id: params[:post_id].split(",").map(&:to_i))
|
||||||
|
end
|
||||||
|
|
||||||
|
q = q.order("created_at DESC")
|
||||||
|
|
||||||
|
q
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
extend SearchMethods
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
<div id="c-moderator-post-posts">
|
|
||||||
<div id="a-replace">
|
|
||||||
<%= render "moderator/post/posts/replace" %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<%= simple_form_for(@post, url: replace_moderator_post_post_path, method: :post) do |f| %>
|
<%= simple_form_for(post_replacement, url: post_replacements_path(post_id: post_replacement.post_id), method: :post) do |f| %>
|
||||||
<h1>Replace Image</h1>
|
<h1>Replace Image</h1>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -7,5 +7,5 @@
|
|||||||
lower-quality images, such as image samples, to higher-quality versions.
|
lower-quality images, such as image samples, to higher-quality versions.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<%= f.input :source, label: "New Source", input_html: { value: "" } %>
|
<%= f.input :replacement_url, label: "New Source", input_html: { value: "" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
5
app/views/post_replacements/new.html.erb
Normal file
5
app/views/post_replacements/new.html.erb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<div id="c-post-replacements">
|
||||||
|
<div id="a-new">
|
||||||
|
<%= render "new", post_replacement: @post.replacements.new %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
<li><%= link_to "Expunge", expunge_moderator_post_post_path(:post_id => post.id), :remote => true, :method => :post, :id => "expunge", :data => {:confirm => "This will permanently delete this post (meaning the file will be deleted). Are you sure you want to delete this post?"} %></li>
|
<li><%= link_to "Expunge", expunge_moderator_post_post_path(:post_id => post.id), :remote => true, :method => :post, :id => "expunge", :data => {:confirm => "This will permanently delete this post (meaning the file will be deleted). Are you sure you want to delete this post?"} %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<li><%= link_to "Replace Image", replace_moderator_post_post_path(:post_id => post.id), :id => "replace-image" %></li>
|
<li><%= link_to "Replace Image", new_post_replacement_path(:post_id => post.id), :id => "replace-image" %></li>
|
||||||
|
|
||||||
<li id="mobile-version-list"><%= link_to "Mobile version", mobile_post_path(post) %></li>
|
<li id="mobile-version-list"><%= link_to "Mobile version", mobile_post_path(post) %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -122,7 +122,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="replace-image-dialog" class="prose" title="Replace image" style="display: none;">
|
<div id="replace-image-dialog" class="prose" title="Replace image" style="display: none;">
|
||||||
<%= render "moderator/post/posts/replace" %>
|
<%= render "post_replacements/new", post_replacement: @post.replacements.new %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="add-to-pool-dialog" title="Add to pool" style="display: none;">
|
<div id="add-to-pool-dialog" title="Add to pool" style="display: none;">
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ Rails.application.routes.draw do
|
|||||||
member do
|
member do
|
||||||
get :confirm_delete
|
get :confirm_delete
|
||||||
post :expunge
|
post :expunge
|
||||||
post :replace
|
|
||||||
post :delete
|
post :delete
|
||||||
post :undelete
|
post :undelete
|
||||||
get :confirm_move_favorites
|
get :confirm_move_favorites
|
||||||
@@ -199,6 +198,7 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
resources :posts do
|
resources :posts do
|
||||||
resources :events, :only => [:index], :controller => "post_events"
|
resources :events, :only => [:index], :controller => "post_events"
|
||||||
|
resources :replacements, :only => [:index, :new, :create], :controller => "post_replacements"
|
||||||
resource :artist_commentary, :only => [:index, :show] do
|
resource :artist_commentary, :only => [:index, :show] do
|
||||||
collection { put :create_or_update }
|
collection { put :create_or_update }
|
||||||
member { put :revert }
|
member { put :revert }
|
||||||
@@ -217,6 +217,7 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
resources :post_appeals
|
resources :post_appeals
|
||||||
resources :post_flags
|
resources :post_flags
|
||||||
|
resources :post_replacements, :only => [:index, :new, :create]
|
||||||
resources :post_versions, :only => [:index, :search] do
|
resources :post_versions, :only => [:index, :search] do
|
||||||
member do
|
member do
|
||||||
put :undo
|
put :undo
|
||||||
|
|||||||
6
test/factories/post_replacement.rb
Normal file
6
test/factories/post_replacement.rb
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
FactoryGirl.define do
|
||||||
|
factory(:post_replacement) do
|
||||||
|
original_url { FFaker::Internet.http_url }
|
||||||
|
replacement_url { FFaker::Internet.http_url }
|
||||||
|
end
|
||||||
|
end
|
||||||
43
test/functional/post_replacements_controller_test.rb
Normal file
43
test/functional/post_replacements_controller_test.rb
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class PostReplacementsControllerTest < ActionController::TestCase
|
||||||
|
context "The post replacements controller" do
|
||||||
|
setup do
|
||||||
|
@user = FactoryGirl.create(:user, can_approve_posts: true, created_at: 1.month.ago)
|
||||||
|
CurrentUser.user = @user
|
||||||
|
CurrentUser.ip_addr = "127.0.0.1"
|
||||||
|
|
||||||
|
@post = FactoryGirl.create(:post)
|
||||||
|
@post_replacement = FactoryGirl.create(:post_replacement, post_id: @post.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "create action" do
|
||||||
|
should "render" do
|
||||||
|
params = {
|
||||||
|
format: :json,
|
||||||
|
post_id: @post.id,
|
||||||
|
post_replacement: {
|
||||||
|
replacement_url: "https://www.google.com/intl/en_ALL/images/logo.gif",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_difference("@post.replacements.size") do
|
||||||
|
post :create, params, { user_id: @user.id }
|
||||||
|
@post.reload
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
|
assert_equal("https://www.google.com/intl/en_ALL/images/logo.gif", @post.source)
|
||||||
|
assert_equal("e80d1c59a673f560785784fb1ac10959", @post.md5)
|
||||||
|
assert_equal("e80d1c59a673f560785784fb1ac10959", Digest::MD5.file(@post.file_path).hexdigest)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "index action" do
|
||||||
|
should "render" do
|
||||||
|
get :index, {format: :json}
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user