Module: Alchemy::Page::PageNatures

Extended by:
ActiveSupport::Concern
Included in:
Alchemy::Page
Defined in:
app/models/alchemy/page/page_natures.rb

Instance Method Summary collapse

Instance Method Details

#cache_page?Boolean

Returns true if the page cache control headers should be set.

Disable Alchemy’s page caching globally

# config/alchemy/config.yml
...
cache_pages: false

Disable caching on page layout level

# config/alchemy/page_layouts.yml
- name: contact
  cache: false

Note:

This only sets the cache control headers and skips rendering of the page body, if the cache is fresh. This does not disable the fragment caching in the views. So if you don’t want a page and it’s elements to be cached, then be sure to not use <% cache element %> in the views.

Returns:

  • (Boolean)


146
147
148
149
150
151
# File 'app/models/alchemy/page/page_natures.rb', line 146

def cache_page?
  return false unless caching_enabled?

  page_layout = PageLayout.get(self.page_layout)
  page_layout["cache"] != false && page_layout["searchresults"] != true
end

#cache_versionObject

Returns the version string that’s taken for Rails’ recycable cache key.



106
107
108
# File 'app/models/alchemy/page/page_natures.rb', line 106

def cache_version
  last_modified_at&.to_s
end

#definitionObject

Returns the self#page_layout definition from config/alchemy/page_layouts.yml file.



82
83
84
85
86
87
88
89
# File 'app/models/alchemy/page/page_natures.rb', line 82

def definition
  definition = PageLayout.get(page_layout)
  if definition.nil?
    log_warning "Page definition for `#{page_layout}` not found. Please check `page_layouts.yml` file."
    return {}
  end
  definition
end

#editor_rolesObject



44
45
46
47
48
# File 'app/models/alchemy/page/page_natures.rb', line 44

def editor_roles
  return unless has_limited_editors?

  definition["editable_by"]
end

#expiration_timeObject



16
17
18
# File 'app/models/alchemy/page/page_natures.rb', line 16

def expiration_time
  public_until ? public_until - Time.current : nil
end

#folded?(user_id) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
27
28
# File 'app/models/alchemy/page/page_natures.rb', line 24

def folded?(user_id)
  return unless Alchemy.user_class < ActiveRecord::Base

  folded_pages.where(user_id: user_id, folded: true).any?
end

#has_limited_editors?Boolean

Returns an Array of Alchemy roles which are able to edit this template

# config/alchemy/page_layouts.yml
- name: contact
  editable_by:
    - freelancer
    - admin

Returns:

  • (Boolean)


40
41
42
# File 'app/models/alchemy/page/page_natures.rb', line 40

def has_limited_editors?
  definition["editable_by"].present?
end

#last_modified_atObject

Returns the timestamp that the page was last modified at, regardless of through publishing or editing page, or through a change of related objects through ingredients. Respects the public version not changing if editing a preview.

In preview mode, it will take the draft version’s updated_at timestamp. In public mode, it will take the public version’s updated_at timestamp.



117
118
119
120
# File 'app/models/alchemy/page/page_natures.rb', line 117

def last_modified_at
  relevant_page_version = (Current.preview_page == self) ? draft_version : public_version
  relevant_page_version&.updated_at
end

#layout_display_nameObject

Returns translated name of the pages page_layout value. Page layout names are defined inside the config/alchemy/page_layouts.yml file. Translate the name in your config/locales language yml file.



94
95
96
# File 'app/models/alchemy/page/page_natures.rb', line 94

def layout_display_name
  Alchemy.t(page_layout, scope: "page_layout_names")
end

#layout_partial_nameObject

Returns the name for the layout partial



100
101
102
# File 'app/models/alchemy/page/page_natures.rb', line 100

def layout_partial_name
  page_layout.parameterize.underscore
end

#locked?Boolean

True if page locked_at timestamp and locked_by id are set

Returns:

  • (Boolean)


51
52
53
# File 'app/models/alchemy/page/page_natures.rb', line 51

def locked?
  locked_by? && locked_at?
end

#public?Boolean

Determines if this page has a public version and this version is public.

Returns:

  • (Boolean)

See Also:



12
13
14
# File 'app/models/alchemy/page/page_natures.rb', line 12

def public?
  language.public? && !!public_version&.public?
end

#rootpage?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'app/models/alchemy/page/page_natures.rb', line 20

def rootpage?
  !new_record? && parent_id.blank?
end

#statusObject

Returns a Hash describing the status of the Page.



57
58
59
60
61
62
63
# File 'app/models/alchemy/page/page_natures.rb', line 57

def status
  {
    public: public?,
    locked: locked?,
    restricted: restricted?
  }
end

#status_message(status_type) ⇒ Object

Returns the long translated status message for given status type.

Parameters:

  • status_type (Symbol)


69
70
71
# File 'app/models/alchemy/page/page_natures.rb', line 69

def status_message(status_type)
  Alchemy.t(status[status_type].to_s, scope: "page_states.#{status_type}")
end

#status_title(status_type) ⇒ Object

Returns the sort translated status title for given status type.

Parameters:

  • status_type (Symbol)


77
78
79
# File 'app/models/alchemy/page/page_natures.rb', line 77

def status_title(status_type)
  Alchemy.t(status[status_type].to_s, scope: "page_status_titles.#{status_type}")
end