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