app/controllers/alchemy/admin/pages_controller.rb in alchemy_cms-5.1.0.beta2 vs app/controllers/alchemy/admin/pages_controller.rb in alchemy_cms-5.1.0.rc1

- old
+ new

@@ -1,15 +1,15 @@ # frozen_string_literal: true module Alchemy module Admin - class PagesController < Alchemy::Admin::BaseController + class PagesController < ResourcesController include OnPageLayout::CallbacksRunner helper "alchemy/pages" - before_action :load_page, except: [:index, :flush, :new, :order, :create, :copy_language_tree, :link, :sort] + before_action :load_resource, except: [:index, :flush, :new, :order, :create, :copy_language_tree, :link, :sort] authorize_resource class: Alchemy::Page, except: [:index, :tree] before_action only: [:index, :tree, :flush, :new, :order, :create, :copy_language_tree] do authorize! :index, :alchemy_admin_pages @@ -25,15 +25,37 @@ before_action :run_on_page_layout_callbacks, if: :run_on_page_layout_callbacks?, only: [:show] + before_action :load_languages_and_layouts, + unless: -> { @page_root }, + only: [:index] + + before_action :set_view, only: [:index] + def index - if !@page_root - @language = @current_language - @languages_with_page_tree = Language.on_current_site.with_root_page - @page_layouts = PageLayout.layouts_for_select(@language.id) + @query = @current_language.pages.contentpages.ransack(search_filter_params[:q]) + + if @view == "list" + @query.sorts = default_sort_order if @query.sorts.empty? + items = @query.result + + if search_filter_params[:tagged_with].present? + items = items.tagged_with(search_filter_params[:tagged_with]) + end + + if search_filter_params[:filter].present? + items = items.public_send(sanitized_filter_params) + end + + if search_filter_params[:page_layout].present? + items = items.where(page_layout: search_filter_params[:page_layout]) + end + + items = items.page(params[:page] || 1).per(items_per_page) + @pages = items end end # Returns all pages as a tree from the root given by the id parameter # @@ -227,10 +249,23 @@ respond_to { |format| format.js } end private + def resource_handler + @_resource_handler ||= Alchemy::Resource.new(controller_path, alchemy_module, Alchemy::Page) + end + + def common_search_filter_includes + super.push(:page_layout, :view) + end + + def set_view + @view = params[:view] || session[:alchemy_pages_view] || "tree" + session[:alchemy_pages_view] = @view + end + def copy_of_language_root Page.copy( language_root_to_copy_from, language_id: params[:languages][:new_lang_id], language_code: @current_language.code, @@ -308,11 +343,11 @@ def process_url(ancestors_path, item) default_urlname = (ancestors_path.blank? ? "" : "#{ancestors_path}/") + item["slug"].to_s { my_urlname: default_urlname, children_path: default_urlname } end - def load_page + def load_resource @page = Page.find(params[:id]) end def pages_from_raw_request request.raw_post.split("&").map do |i| @@ -370,9 +405,15 @@ def serialized_page_tree PageTreeSerializer.new(@page, ability: current_ability, user: current_alchemy_user, full: params[:full] == "true") + end + + def load_languages_and_layouts + @language = @current_language + @languages_with_page_tree = Language.on_current_site.with_root_page + @page_layouts = PageLayout.layouts_for_select(@language.id) end end end end