class Admin::PagesController

def assign_page_attributes

def assign_page_attributes
  if params[:page_id].blank?
    self.model.slug = '/'
  end
  self.model.parent_id = params[:page_id]
end

def count_deleted_pages

def count_deleted_pages
  @count = model.children.count + 1
end

def index

def index
  @homepage = Page.find_by_parent_id(nil)
  response_for :plural
end

def initialize_meta_rows_and_buttons

def initialize_meta_rows_and_buttons
  @buttons_partials ||= []
  @meta ||= []
  @meta << {:field => "slug", :type => "text_field", :args => [{:class => 'textbox', :maxlength => 100}]}
  @meta << {:field => "breadcrumb", :type => "text_field", :args => [{:class => 'textbox', :maxlength => 160}]}
end

def model_class

def model_class
  if Page.descendants.any? { |d| d.to_s == params[:page_class] }
    verify_page_class(params[:page_class])
  elsif params[:page_id]
    Page.find(params[:page_id]).children
  else
    Page
  end
end

def new

def new
  @page = self.model = model_class.new_with_defaults(trusty_config)
  assign_page_attributes
  response_for :new
end

def preview

def preview
  render_preview
rescue PreviewStop => exception
  render :text => exception.message unless @performed_render
end

def process_with_exception(page)

def process_with_exception(page)
  page.process(request, response)
  @performed_render = true
  render template: 'site/show_page', layout: false
  raise PreviewStop
end

def render_preview

def render_preview
  Page.transaction do
    page_class = Page.descendants.include?(model_class) ? model_class : Page
    if request.referer =~ %r{/admin/pages/(\d+)/edit}
      page = Page.find($1).becomes(page_class)
      page.update_attributes(params[:page])
      page.published_at ||= Time.now
    else
      page = page_class.new(params[:page])
      page.published_at = page.updated_at = page.created_at = Time.now
      page.parent = Page.find($1) if request.referer =~ %r{/admin/pages/(\d+)/children/new}
    end
    page.pagination_parameters = pagination_parameters
    process_with_exception(page)
  end
end

def save_table_position

def save_table_position
  new_position = params[:new_position]
  Page.save_order(new_position)
  head :ok
end

def validation_error(e)

def validation_error(e)
  flash[:error] = e.message
  render :new
end

def verify_page_class(page_class)

def verify_page_class(page_class)
  if page_class.constantize.ancestors.include?(Page)
    page_class.constantize
  else
    raise "I'm not allowed to constantize #{page_class}!"
  end
end