Normally we skip doing page counts on index pages when there aren't any search filters. This is on the assumption that most index pages have more than 1000 pages (20,000 results), so it's not worth counting them exactly. This isn't always true, so here we turn on full counts on certain index pages known to be small.
97 lines
2.6 KiB
Ruby
97 lines
2.6 KiB
Ruby
class PoolsController < ApplicationController
|
|
respond_to :html, :xml, :json, :js
|
|
before_action :member_only, :except => [:index, :show, :gallery]
|
|
before_action :builder_only, :only => [:destroy]
|
|
|
|
def new
|
|
@pool = Pool.new
|
|
respond_with(@pool)
|
|
end
|
|
|
|
def edit
|
|
@pool = Pool.find(params[:id])
|
|
if @pool.is_deleted && !@pool.deletable_by?(CurrentUser.user)
|
|
raise User::PrivilegeError
|
|
end
|
|
respond_with(@pool)
|
|
end
|
|
|
|
def index
|
|
@pools = Pool.includes(:creator).paginated_search(params, count_pages: true)
|
|
respond_with(@pools)
|
|
end
|
|
|
|
def gallery
|
|
limit = params[:limit].presence || CurrentUser.user.per_page
|
|
search = search_params.presence || ActionController::Parameters.new(category: "series")
|
|
|
|
@pools = Pool.search(search).paginate(params[:page], limit: limit, search_count: params[:search])
|
|
@post_set = PostSets::PoolGallery.new(@pools)
|
|
end
|
|
|
|
def show
|
|
limit = params[:limit].presence || CurrentUser.user.per_page
|
|
|
|
@pool = Pool.find(params[:id])
|
|
@posts = @pool.posts.paginate(params[:page], limit: limit, count: @pool.post_count)
|
|
respond_with(@pool)
|
|
end
|
|
|
|
def create
|
|
@pool = Pool.create(pool_params)
|
|
flash[:notice] = @pool.valid? ? "Pool created" : @pool.errors.full_messages.join("; ")
|
|
respond_with(@pool)
|
|
end
|
|
|
|
def update
|
|
# need to do this in order for synchronize! to work correctly
|
|
@pool = Pool.find(params[:id])
|
|
@pool.attributes = pool_params
|
|
@pool.synchronize
|
|
@pool.save
|
|
unless @pool.errors.any?
|
|
flash[:notice] = "Pool updated"
|
|
end
|
|
respond_with(@pool)
|
|
end
|
|
|
|
def destroy
|
|
@pool = Pool.find(params[:id])
|
|
if !@pool.deletable_by?(CurrentUser.user)
|
|
raise User::PrivilegeError
|
|
end
|
|
@pool.update_attribute(:is_deleted, true)
|
|
@pool.create_mod_action_for_delete
|
|
flash[:notice] = "Pool deleted"
|
|
respond_with(@pool)
|
|
end
|
|
|
|
def undelete
|
|
@pool = Pool.find(params[:id])
|
|
if !@pool.deletable_by?(CurrentUser.user)
|
|
raise User::PrivilegeError
|
|
end
|
|
@pool.update_attribute(:is_deleted, false)
|
|
@pool.create_mod_action_for_undelete
|
|
flash[:notice] = "Pool undeleted"
|
|
respond_with(@pool)
|
|
end
|
|
|
|
def revert
|
|
@pool = Pool.find(params[:id])
|
|
@version = @pool.versions.find(params[:version_id])
|
|
@pool.revert_to!(@version)
|
|
flash[:notice] = "Pool reverted"
|
|
respond_with(@pool) do |format|
|
|
format.js
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def pool_params
|
|
permitted_params = %i[name description category is_active post_ids post_ids_string]
|
|
params.require(:pool).permit(*permitted_params, post_ids: [])
|
|
end
|
|
end
|