# -*- encoding : utf-8 -*-

class PagesController < ApplicationController

  before_filter :require_user

  access_control do
    actions :index, :edit, :update, :new, :create, :destroy, :publish, :unpublish  do
      allow :admin
    end
    actions :show do
      allow :admin
      allow anonymous, logged_in
    end
    
  end

  # GET /pages
  # GET /pages.json
  def index
    @pages = Page.find(:all,  :order => "sorting ASC")

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @pages }
    end
  end

  # GET /pages/1
  # GET /pages/1.json
  def show
    @page = Page.find(params[:id])
    
    if @page.public || (current_user.has_role? :admin)      
      respond_to do |format|
        format.html # show.html.erb
        format.json { render json: @page }
      end
    else
      render 'shared/_not_public'
    end    
  end

  # GET /pages/new
  # GET /pages/new.json
  def new

    @page = Page.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @page }
    end                                                 
  end

  # GET /pages/1/edit
  def edit
    @page = Page.find(params[:id])

    query = "Style-Guide"
    if Page.exists?(['title LIKE ?', "%#{query}%"])
      @styleguide = Page.find(:first, :conditions => ['title LIKE ?', "%#{query}%"])
    end        
  end

  # POST /pages
  # POST /pages.json
  def create
    @page = Page.new(params[:page])

    respond_to do |format|
      if @page.save
        format.html { redirect_to @page, notice: 'Die Seite wurde erfolgreich angelegt.' }
        format.json { render json: @page, status: :created, location: @page }
      else
        format.html { render action: "new" }
        format.json { render json: @page.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /pages/1
  # PUT /pages/1.json
  def update
    @page = Page.find(params[:id])
    params[:page][:role_ids] ||= []
    respond_to do |format|
      if @page.update_attributes(params[:page])
        format.html { redirect_to @page, notice: "Die Seite wurde aktualisiert. " }
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.json { render json: @page.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /pages/1
  # DELETE /pages/1.json
  def destroy
    @page = Page.find(params[:id])
    @page.destroy

    respond_to do |format|
      format.html { redirect_to pages_url }
      format.json { head :ok }
    end
  end
  
  def publish
    @page = Page.find(params[:id])
    @page.update_attribute(:public, true)
    flash[:notice]="Seite veröffentlicht"
    request.referer ||= root_url
    redirect_to request.referer
  end
  
  def unpublish
    @page = Page.find(params[:id])
    @page.update_attribute(:public, false)
    flash[:notice]="Seite versteckt"
    request.referer ||= root_url
    redirect_to request.referer
  end
  
end
