foodsoft/plugins/wiki/app/controllers/pages_controller.rb

161 lines
4.2 KiB
Ruby
Raw Permalink Normal View History

class PagesController < ApplicationController
before_action -> { require_plugin_enabled FoodsoftWiki }
before_action :catch_special_pages, only: %i[show new]
skip_before_action :authenticate, only: :all
before_action only: :all do
authenticate_or_token(%w[wiki all])
2014-01-04 20:12:01 +01:00
end
before_action do
2014-01-04 20:12:01 +01:00
content_for :head, view_context.rss_meta_tag
end
def index
@page = Page.find_by_permalink 'Home'
if @page
render action: 'show'
else
redirect_to all_pages_path
end
end
def show
2009-09-28 15:31:20 +02:00
if params[:permalink]
@page = Page.find_by_permalink(params[:permalink])
elsif params[:id]
page = Page.find_by_id(params[:id])
if page.nil?
2013-04-12 00:58:38 +02:00
flash[:error] = I18n.t('pages.cshow.error_noexist')
2009-09-28 15:31:20 +02:00
redirect_to all_pages_path and return
else
redirect_to wiki_page_path(page.permalink) and return
end
end
if @page.nil?
redirect_to new_page_path(title: params[:permalink])
elsif @page.redirect?
page = Page.find_by_id(@page.redirect)
unless page.nil?
flash[:notice] = I18n.t('pages.cshow.redirect_notice', page: @page.title)
redirect_to wiki_page_path(page.permalink)
end
end
end
def new
@page = Page.new
@page.title = params[:title].gsub('_', ' ') if params[:title]
@page.parent = Page.find_by_permalink(params[:parent]) if params[:parent]
respond_to do |format|
format.html # new.html.erb
format.xml { render xml: @page }
end
end
def edit
@page = Page.find(params[:id])
end
def create
@page = Page.new(params[:page].merge({ user: current_user }))
if params[:preview]
render action: 'new'
elsif @page.save
flash[:notice] = I18n.t('pages.create.notice')
redirect_to(wiki_page_path(@page.permalink))
else
render action: 'new'
end
end
def update
@page = Page.find(params[:id])
@page.attributes = params[:page].merge({ user: current_user })
if params[:preview]
@page.attributes = params[:page]
render action: 'edit'
elsif @page.save
@page.parent_id = parent_id if params[:parent_id].present? \
&& params[:parent_id] != @page_id
flash[:notice] = I18n.t('pages.update.notice')
redirect_to wiki_page_path(@page.permalink)
else
render action: 'edit'
end
rescue ActiveRecord::StaleObjectError
2013-04-12 00:58:38 +02:00
flash[:error] = I18n.t('pages.error_stale_object')
redirect_to wiki_page_path(@page.permalink)
end
def destroy
@page = Page.find(params[:id])
@page.destroy
flash[:notice] = I18n.t('pages.destroy.notice', page: @page.title)
redirect_to wiki_path
end
def all
2012-10-09 02:31:10 +02:00
@pages = Page.non_redirected
@partial = params[:view] || 'site_map'
2012-10-09 02:31:10 +02:00
if params[:name]
@pages = @pages.where('title LIKE ?', "%#{params[:name]}%").limit(20)
2012-10-09 02:31:10 +02:00
@partial = 'title_list'
end
sort = if params[:sort]
case params[:sort]
when 'title' then 'title'
when 'title_reverse' then 'title DESC'
when 'last_updated' then 'updated_at DESC'
when 'last_updated_reverse' then 'updated_at'
end
else
'title'
end
@pages = @pages.order(sort)
2014-01-04 20:12:01 +01:00
respond_to do |format|
format.html
format.rss { render layout: false }
2014-01-04 20:12:01 +01:00
end
end
2009-05-15 17:32:45 +02:00
2016-03-06 21:05:06 +01:00
def diff
@page = Page.find(params[:id])
@old_version = Page::Version.find_by_page_id_and_lock_version params[:id], params[:old]
@new_version = Page::Version.find_by_page_id_and_lock_version params[:id], params[:new]
@diff = Diffy::Diff.new(@old_version.body, @new_version.body).to_s(:html)
end
2009-05-15 17:32:45 +02:00
def version
@page = Page.find(params[:id])
@version = Page::Version.find_by_page_id_and_lock_version params[:id], params[:version]
2009-05-15 17:32:45 +02:00
end
def revert
@page = Page.find(params[:id])
@page.revert_to!(params[:version].to_i)
2009-05-15 17:32:45 +02:00
redirect_to wiki_page_path(@page.permalink)
2009-05-15 17:32:45 +02:00
end
2015-03-20 16:32:58 +01:00
def variables
keys = Foodsoft::ExpansionVariables.variables.keys
@variables = keys.index_with { |k| Foodsoft::ExpansionVariables.get(k) }
2015-03-20 16:32:58 +01:00
render 'variables'
end
private
def catch_special_pages
return unless params[:id] == 'Help:Foodsoft_variables'
variables
2015-03-20 16:32:58 +01:00
end
end