screenconcept/kuhsaft

View on GitHub
app/controllers/kuhsaft/cms/pages_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'kuhsaft/page_tree'

module Kuhsaft
  module Cms
    class PagesController < AdminController
      def index
        @pages = Kuhsaft::Page.roots
        respond_with @pages
      end

      def show
        @page = Kuhsaft::Page.find(params[:id])
        respond_with @page
      end

      def new
        @page = Kuhsaft::Page.new
        @page.published ||= Kuhsaft::PublishState::UNPUBLISHED
        respond_with @page
      end

      def create
        @page = Kuhsaft::Page.create(page_params)

        if @page.valid?
          flash[:success] = t('layouts.kuhsaft.cms.flash.success', subject: Kuhsaft::Page.model_name.human)
          respond_with @page, location: kuhsaft.edit_cms_page_path(@page)
        else
          render 'new'
        end
      end

      def edit
        @page = Kuhsaft::Page.find(params[:id])
        @page.published ||= Kuhsaft::PublishState::UNPUBLISHED
        @page.bricks.each { |brick| brick.valid? }
        respond_with @page
      end

      def update
        @page = Kuhsaft::Page.find(params[:id])
        if @page.update_attributes(page_params)
          flash[:success] = t('layouts.kuhsaft.cms.flash.success', subject: Kuhsaft::Page.model_name.human)
          respond_with @page, location: kuhsaft.edit_cms_page_path(@page)
        else
          render 'edit'
        end
      end

      def destroy
        @page = Kuhsaft::Page.find(params[:id])
        @page.destroy
        redirect_to kuhsaft.cms_pages_path
      end

      def sort
        Kuhsaft::PageTree.update(params[:page_tree])
      end

      def mirror
        @page = Kuhsaft::Page.find(params[:page_id])

        unless @page.bricks.empty?
          if params[:rutheless] == 'true' || @page.bricks.unscoped.where(locale: params[:target_locale]).empty?
            @page.clear_bricks_for_locale(params[:target_locale])
            params[:failed_bricks] = @page.clone_bricks_to(params[:target_locale])
            params[:rutheless] = 'true'
          end
        end

        respond_to :js, :html
      end

      private

      def page_params
        safe_params = [
          :title, :page_title, :slug, :redirect_url, :url, :page_type, :parent_id,
          :keywords, :description, :published, :position, :google_verification_key
        ]
        params.require(:page).permit(*safe_params)
      end
    end
  end
end