Module: Plugins::FrontCache::FrontCacheHelper

Included in:
AdminController
Defined in:
app/apps/plugins/front_cache/front_cache_helper.rb

Instance Method Summary collapse

Instance Method Details

#front_cache_before_loadObject

expire cache for a page after comment registered or updated



78
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 78

def front_cache_before_load; end

#front_cache_cleanObject

clear all frontend cache items



93
94
95
96
97
98
99
100
101
102
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 93

def front_cache_clean
  @caches = current_site.get_meta('front_cache_elements')
  if @caches[:invalidate_only]
    @caches[:cache_counter] += 1
  else
    Rails.cache.clear
    @caches[:cache_counter] = 0
  end
  current_site.set_meta('front_cache_elements', @caches)
end

#front_cache_front_after_loadObject



44
45
46
47
48
49
50
51
52
53
54
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 44

def front_cache_front_after_load
  cache_key = front_cache_plugin_cache_key
  return unless @_plugin_do_cache && !flash.keys.present?

  args = { data: response.body
                         .gsub(/csrf-token" content="(.*?)"/, 'csrf-token" content="{{form_authenticity_token}}"')
                         .gsub(/name="authenticity_token" value="(.*?)"/, 'name="authenticity_token" value="{{form_authenticity_token}}"') }
  hooks_run('front_cache_writing_cache', args)
  front_cache_plugin_cache_create(cache_key, args[:data])
  Rails.logger.info "Camaleon CMS - cache saved as: #{front_cache_plugin_get_path(cache_key)}"
end

#front_cache_front_before_loadObject

save as cache all pages configured on settings of this plugin for public users



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 5

def front_cache_front_before_load
  if current_site.get_option('refresh_cache') # clear cache every restart server unless option checked in settings
    front_cache_clean unless current_site.get_meta('front_cache_elements')[:preserve_cache_on_restart]
    current_site.set_option('refresh_cache', false)
  end

  # avoid cache if current visitor is logged in or development
  return if signin? || Rails.env.development? || Rails.env.test? || !request.get?

  cache_key = front_cache_plugin_cache_key
  @caches = current_site.get_meta('front_cache_elements')
  if !flash.keys.present? && front_cache_exist?(cache_key) # recover cache item
    Rails.logger.info "Camaleon CMS - readed cache: #{front_cache_plugin_get_path(cache_key)}"
    response.headers['PLUGIN_FRONT_CACHE'] = 'TRUE'
    args = { data: front_cache_get(cache_key).gsub('{{form_authenticity_token}}', form_authenticity_token) }
    hooks_run('front_cache_reading_cache', args)
    render html: args[:data].html_safe
    return
  end

  @_plugin_do_cache = false
  if @caches[:paths].include?(request.original_url) || @caches[:paths].include?(request.path_info) || front_cache_plugin_match_path_patterns?(request.original_url, request.path_info) || (params[:action] == 'index' && params[:controller] == 'camaleon_cms/frontend' && @caches[:home].present?) # cache paths and home page
    @_plugin_do_cache = true
  elsif params[:action] == 'post' && params[:controller] == 'camaleon_cms/frontend' && !params[:draft_id].present?
    begin
      post = current_site.the_posts.find_by_slug(params[:slug]).decorate
      if post.can_visit? && post.visibility != 'private'
        if (@caches[:skip_posts] || []).include?(post.id.to_s)
          @_plugin_do_cache = false
        elsif (@caches[:post_types] || []).include?(post.post_type_id.to_s) || (@caches[:posts] || []).include?(post.id.to_s)
          @_plugin_do_cache = true
        end
      end
    rescue StandardError # skip post not found
    end
  end
  response.headers['PLUGIN_FRONT_CACHE'] = 'TRUE' if @_plugin_do_cache
end

#front_cache_on_active(_plugin) ⇒ Object

on install plugin



57
58
59
60
61
62
63
64
65
66
67
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 57

def front_cache_on_active(_plugin)
  return if current_site.get_meta('front_cache_elements', nil).present?

  current_site.set_meta('front_cache_elements', { paths: [],
                                                  posts: [],
                                                  post_types: [current_site.post_types.where(slug: 'page').first.id],
                                                  skip_posts: [],
                                                  home: true,
                                                  cache_login: true,
                                                  cache_counter: 0 })
end

#front_cache_on_inactive(plugin) ⇒ Object

on uninstall plugin



70
71
72
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 70

def front_cache_on_inactive(plugin)
  # current_site.delete_meta("front_cache_elements")
end

#front_cache_on_render(args) ⇒ Object

cache actions (for logged users)



75
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 75

def front_cache_on_render(args); end

#front_cache_plugin_options(arg) ⇒ Object



80
81
82
83
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 80

def front_cache_plugin_options(arg)
  arg[:links] << link_to(t('plugin.front_cache.settings'), admin_plugins_front_cache_settings_path)
  arg[:links] << link_to(t('plugin.front_cache.clean_cache'), admin_plugins_front_cache_clean_path)
end

#front_cache_post_requestsObject

save as cache all post requests



86
87
88
89
90
# File 'app/apps/plugins/front_cache/front_cache_helper.rb', line 86

def front_cache_post_requests
  return unless request.post? || request.patch?

  front_cache_clean
end