Files
danbooru/app/controllers/wiki_pages_controller.rb
evazion 90be15e0b5 Fix #4973: Wiki pages json index returns 404.
Fix regression introduced in 0db20e0ca. Setting `format: false` on the
wiki pages resource disabled format negotiation on all wiki page routes,
not just the show page, which meant /wiki_pages.json no longer worked.

The fix to monkey patch the internal Rails method that parses the file
extension from the URL, and have it ignore everything but the .html,
.json, .js, and .xml extensions. This is really hacky and may break in
future Rails releases.
2022-01-22 16:52:20 -06:00

99 lines
2.5 KiB
Ruby

# frozen_string_literal: true
class WikiPagesController < ApplicationController
respond_to :html, :xml, :json, :js
layout "sidebar"
def new
@wiki_page = authorize WikiPage.new(permitted_attributes(WikiPage))
respond_with(@wiki_page)
end
def edit
@wiki_page, _found_by = WikiPage.find_by_id_or_title(params[:id])
authorize @wiki_page
respond_with(@wiki_page)
end
def index
if params[:title].present?
redirect_to wiki_pages_path(search: { title_normalize: params[:title] }, redirect: true)
else
@wiki_pages = authorize WikiPage.paginated_search(params)
respond_with(@wiki_pages)
end
end
def search
authorize WikiPage
render layout: "default"
end
def show
@wiki_page, found_by = WikiPage.find_by_id_or_title(params[:id])
if request.format.html? && @wiki_page.blank? && found_by == :title
@wiki_page = WikiPage.new(title: params[:id])
respond_with @wiki_page, status: 404
elsif request.format.html? && @wiki_page.present? && found_by == :id
redirect_to @wiki_page
elsif @wiki_page.blank?
raise ActiveRecord::RecordNotFound
else
respond_with(@wiki_page)
end
end
def create
@wiki_page = authorize WikiPage.new(permitted_attributes(WikiPage))
@wiki_page.save
respond_with(@wiki_page)
end
def update
@wiki_page, _found_by = WikiPage.find_by_id_or_title(params[:id])
authorize @wiki_page
@wiki_page.update(permitted_attributes(@wiki_page))
flash[:notice] = @wiki_page.warnings.full_messages.join(".\n \n") if @wiki_page.warnings.any?
respond_with(@wiki_page)
end
def destroy
@wiki_page, _found_by = WikiPage.find_by_id_or_title(params[:id])
authorize @wiki_page
@wiki_page.update(is_deleted: true)
respond_with(@wiki_page)
end
def revert
@wiki_page, _found_by = WikiPage.find_by_id_or_title(params[:id])
authorize @wiki_page
@version = @wiki_page.versions.find(params[:version_id])
@wiki_page.revert_to!(@version)
flash[:notice] = "Page was reverted"
respond_with(@wiki_page)
end
def show_or_new
if params[:title].blank?
redirect_to new_wiki_page_path(permitted_attributes(WikiPage))
else
redirect_to wiki_page_path(params[:title])
end
end
private
def item_matches_params(wiki_page)
if params[:search][:title_normalize]
wiki_page.title == WikiPage.normalize_title(params[:search][:title_normalize])
else
true
end
end
end