# frozen_string_literal: true require_dependency 'c/admin_controller' module C class Admin::PagesController < AdminController before_action :load_from_url, only: [:destroy, :edit, :update] load_and_authorize_resource class: C::Page # required for dropzone to work skip_before_action :verify_authenticity_token, only: :dropzone_image def index # @pages = filter_and_paginate(@pages, 'created_at desc') @pages = C::Page.hash_tree end def new; end def edit; end def create if @page.save redirect_to pages_path, notice: 'Page created' else render :new end end def update if @page.update(page_params) redirect_to pages_path, notice: 'Page updated' else render :edit end end def dashboard; end def destroy @page.destroy unless @page.protected respond_to do |format| format.js format.html { redirect_to pages_path } end end # methods for dropzone and js image cool stuff def dropzone_image @page.images.create(image: params[:file]) end def destroy_image @page.images.find_by(id: params[:image_id]).destroy respond_to do |format| format.js end end def reload_images @obj = @page respond_to do |format| format.js end end def set_preview_image @obj = @page @obj.images.find_each { |image| image.update(preview_image: false) } C::Image.find(params[:image_id]).update(preview_image: true) respond_to do |format| format.js end end def update_order children = params.require(:order) Page.update(children.keys, children.values) end private def load_from_url @page = C::Page.get_from_url(params[:id]) end def new_image_params params.require(:page).permit(new_images: [], images_attributes: [:id, :_destroy, :alt, :caption]) end def page_params params.require(:page).permit(:name, :body, :preview_body, :layout, :published, :url_alias, C::Page::IMAGEABLE_ATTRIBUTES, C::Page::PAGE_INFO_ATTRIBUTES, new_images: [], documents_attributes: [:id, :name, :document, :_destroy], new_documents: []) end end end