class Admin::PagesController
def assign_page_attributes
def assign_page_attributes if params[:page_id].blank? model.slug = '/' end model.parent_id = params[:page_id] end
def count_deleted_pages
def count_deleted_pages @count = model.children.count + 1 end
def edit
def edit verify_site_id load_assets @page_url = generate_page_url(request.url, @page) @page_path = format_path(@page.path) @versions = format_versions(@page.versions) response_for :edit end
def fetch_search_results
def fetch_search_results @query = params.dig(:search, :query) Page.ransack(title_cont: @query, site_id_eq: @site_id).result .or(Page.ransack(slug_cont: @query, site_id_eq: @site_id).result) end
def format_versions(versions)
def format_versions(versions) return nil unless versions.any? versions .sort_by(&:created_at).reverse .map do |version| { index: version&.index, update_date: version&.created_at&.strftime('%B %d, %Y'), update_time: version&.created_at&.strftime('%I:%M %p'), updated_by: User.unscoped.find_by(id: version&.whodunnit)&.name || 'Unknown User', } end end
def generate_view_page_url
def generate_view_page_url @view_page_url = generate_page_url(request.url, @page) end
def index
def index set_site_and_homepage @q = initialize_search response_for :plural end
def initialize_meta_rows_and_buttons
def initialize_meta_rows_and_buttons @buttons_partials ||= [] @meta ||= [] @meta << { field: 'slug', type: 'text_field', args: [{ class: 'textbox' }] } @meta << { field: 'breadcrumb', type: 'text_field', args: [{ class: 'textbox' }] } end
def initialize_search
def initialize_search Page.ransack(params[:search] || '') end
def load_assets
def load_assets assets = Asset.order(created_at: :desc) @term = assets.ransack(params[:search].presence || {}) @term.result(distinct: true) end
def model_class
def model_class if Page.descendants.any? { |d| d.to_s == params[:page_class] } verify_page_class(params[:page_class]) elsif params[:page_id] Page.find(params[:page_id]).children else Page end end
def new
def new assets = Asset.order('created_at DESC') @term = assets.ransack(params[:search] || '') @page = self.model = model_class.new_with_defaults(trusty_config) assign_page_attributes response_for :new end
def process_with_exception(page)
def process_with_exception(page) page.process(request, response) @performed_render = true render template: 'site/show_page', layout: false raise PreviewStop end
def restore
def restore index = params[:version_index].to_i restore_page_version(@page, index) redirect_to edit_admin_page_path(@page) end
def restore_page_version(page, index)
def restore_page_version(page, index) lock_version = page.lock_version restored_page = page.versions[index].reify(has_many: true) restored_page.lock_version = lock_version restored_page.save! end
def save_table_position
def save_table_position new_position = params[:new_position] Page.save_order(new_position) head :ok end
def search
def search @site_id = params[:site_id] || Page.current_site.id @q = initialize_search @pages = fetch_search_results if search_query_present? render end
def search_query_present?
def search_query_present? params.dig(:search, :query).present? end
def set_page
def set_page @page = Page.find(params[:id]) end
def set_site_and_homepage
def set_site_and_homepage @site ||= Page.current_site @homepage = @site&.homepage || Page.homepage @site_id = @site&.id end
def validation_error(e)
def validation_error(e) flash[:error] = e.message render :new end
def verify_page_class(page_class)
def verify_page_class(page_class) if page_class.constantize.ancestors.include?(Page) page_class.constantize else raise "I'm not allowed to constantize #{page_class}!" end end
def verify_site_id
def verify_site_id page_site_id = @page.site_id user_site_ids = current_user.admins_sites.each.pluck(:site_id) unless user_site_ids.include?(page_site_id) redirect_to admin_pages_url end end