class Thoth::PageController

Public Instance Methods

delete(id = nil) click to toggle source
# File lib/thoth/controller/page.rb, line 44
def delete(id = nil)
  require_auth

  error_404 unless id && @page = Page[id]

  if request.post?
    error_403 unless form_token_valid?

    if request[:confirm] == 'yes'
      @page.destroy
      Ramaze::Cache.action.clear
      flash[:success] = 'Page deleted.'
      redirect(MainController.r())
    else
      redirect(@page.url)
    end
  end

  @title          = "Delete Page: #{@page.title}"
  @show_page_edit = true
end
edit(id = nil) click to toggle source
# File lib/thoth/controller/page.rb, line 66
def edit(id = nil)
  require_auth

  unless @page = Page[id]
    flash[:error] = 'Invalid page id.'
    redirect(rs(:new))
  end

  if request.post?
    error_403 unless form_token_valid?

    @page.name  = request[:name]
    @page.title = request[:title]
    @page.body  = request[:body]

    if @page.valid? && request[:action] == 'Post'
      begin
        raise unless @page.save
      rescue => e
        @page_error = "There was an error saving your page: #{e}"
      else
        Ramaze::Cache.action.clear
        flash[:success] = 'Page saved.'
        redirect(rs(@page.name))
      end
    end
  end

  @title          = "Edit page - #{@page.title}"
  @form_action    = rs(:edit, id)
  @show_page_edit = true
end
index(name = nil) click to toggle source
# File lib/thoth/controller/page.rb, line 37
def index(name = nil)
  error_404 unless name && @page = Page[:name => name.strip.downcase]

  @title          = @page.title
  @show_page_edit = true
end
list(page = 1) click to toggle source
# File lib/thoth/controller/page.rb, line 99
def list(page = 1)
  require_auth

  # If this is a POST request, set page display positions.
  if request.post? && !request[:position].nil? &&
      request[:position].is_a?(Hash)

    error_403 unless form_token_valid?

    Page.normalize_positions

    Page.order(:position).all do |p|
      unless request[:position][p.id.to_s].nil? ||
         request[:position][p.id.to_s].to_i == p.position
        Page.set_position(p, request[:position][p.id.to_s].to_i)
      end
    end

    Page.normalize_positions
  end

  page = page.to_i

  @columns  = [:name, :title, :created_at, :updated_at, :position]
  @order    = (request[:order] || :asc).to_sym
  @sort     = (request[:sort]  || :display_order).to_sym
  @sort     = :position unless @columns.include?(@sort)
  @sort_url = rs(:list, page)

  @pages = Page.order(@order == :desc ? Sequel.desc(@sort) : @sort).paginate(page, 20)

  @title        = "Pages (page #{page} of #{[@pages.page_count, 1].max})"
  @pager        = pager(@pages, rs(:list, '__page__', :sort => @sort, :order => @order))
  @form_action  = rs(:list)
end
new() click to toggle source
# File lib/thoth/controller/page.rb, line 135
def new
  require_auth

  @title       = "New page - Untitled"
  @form_action = rs(:new)

  if request.post?
    error_403 unless form_token_valid?

    @page = Page.new do |p|
      p.name     = request[:name]
      p.title    = request[:title]
      p.body     = request[:body]
      p.position = Page.dataset.max(:position).to_i + 1
    end

    if @page.valid? && request[:action] == 'Post'
      begin
        raise unless @page.save
      rescue => e
        @page_error = "There was an error saving your page: #{e}"
      else
        Ramaze::Cache.action.clear
        flash[:success] = 'Page created.'
        redirect(rs(@page.name))
      end
    end

    @title = "New page - #{@page.title}"
  end
end