Sha256: 26db096902af5480dd896c4c9cc456b9ba90987f7c812049b3863a52f0d2fa8f

Contents?: true

Size: 1.55 KB

Versions: 3

Compression:

Stored size: 1.55 KB

Contents

module PandaCms
  class PagesController < ApplicationController
    include ActionView::Helpers::TagHelper

    def root
      params[:path] = ""
      show
    end

    def show
      if PandaCms.require_login_to_view && !user_signed_in?
        redirect_to panda_cms_maintenance_path and return
      end

      path_to_find = "/" + params[:path].to_s
      page = Page.find_by(path: path_to_find) || Page.find_by(path: "/404")
      PandaCms::Current.page = page

      if page
        globals = {
          page: page,
          title: page.title
        }

        unless ignore_visit?
          RecordVisitJob.perform_later(
            url: request.url,
            user_agent: request.user_agent,
            referrer: request.referrer,
            ip_address: request.remote_ip,
            page_id: page.id,
            current_user_id: current_user&.id,
            params: params.to_unsafe_h.except(:controller, :action, :path),
            visited_at: Time.zone.now
          )
        end

        render inline: "", assigns: globals, status: :ok, layout: page.template.file_path
      else
        # This works for now, but we may want to override in future (e.g. custom 404s)
        render file: "#{Rails.root}/public/404.html", layout: false, status: :not_found
      end
    end

    private

    def ignore_visit?
      # Ignore visits from bots (TODO: make this configurable)
      # return true if request.user_agent =~ /bot/i
      # Ignore visits from Honeybadger
      return true if request.headers.to_h.key? "Honeybadger-Token"

      false
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
panda_cms-0.5.0 app/controllers/panda_cms/pages_controller.rb
panda_cms-0.3.15 app/controllers/panda_cms/pages_controller.rb
panda_cms-0.3.14 app/controllers/panda_cms/pages_controller.rb