Class: CamaleonCms::SiteDecorator

Inherits:
TermTaxonomyDecorator
  • Object
show all
Defined in:
app/decorators/camaleon_cms/site_decorator.rb

Instance Method Summary collapse

Instance Method Details

#draw_languages(list_class = 'language_list list-inline pull-right', current_page = false, current_class = 'current_l', &block) ⇒ Object

draw languages configured for this site list_class: (String) Custom css classes for ul list current_page: (boolean) true: link with translation to current url, false: link with translation to root url block permit to render custom link label, default: flag icon



195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 195

def draw_languages(list_class = 'language_list list-inline pull-right', current_page = false,
                   current_class = 'current_l', &block)
  lan = object.get_languages
  return if lan.size < 2

  h.(:ul, class: list_class) do
    h.safe_join(lan.map do |lang|
      label = if block
                h.capture(lang, I18n.locale.to_s == lang.to_s, &block)
              else
                h.tag.img(src: h.asset_path("camaleon_cms/language/#{lang}.png"))
              end

      h.(:li, class: (current_class if I18n.locale.to_s == lang.to_s)) do
        h.link_to(
          label,
          h.cama_url_to_fixed(
            current_page ? 'url_for' : 'cama_root_url',
            { locale: lang, cama_set_language: lang }
          )
        )
      end
    end)
  end
end

#generate_breadcrumb(_add_post_type = true) ⇒ Object

draw bread crumb for current site



271
272
273
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 271

def generate_breadcrumb(_add_post_type = true)
  h.breadcrumb_add(the_title)
end

#manage_sites?Boolean

check if current user can manage sites

Returns:

  • (Boolean)


292
293
294
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 292

def manage_sites?
  main_site? && h.cama_current_user.admin?
end

#plugin_installed?(plugin_key) ⇒ Boolean

check if plugin_key is already installed for this site

Returns:

  • (Boolean)


233
234
235
236
237
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 233

def plugin_installed?(plugin_key)
  res = false
  PluginRoutes.enabled_plugins(object).each { |plugin| res = true if plugin['key'] == plugin_key }
  res
end

#the_admin_urlObject

ADMIN =======================

admin root url for this site



277
278
279
280
281
282
283
284
285
286
287
288
289
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 277

def the_admin_url
  host = if object.main_site?
           object.slug
         else
           (object.slug.include?('.') ? object.slug : "#{object.slug}.#{Cama::Site.main_site.slug}")
         end
  port = begin
    host.split(':')[1]
  rescue StandardError
    nil
  end
  h.cama_url_to_fixed('cama_admin_dashboard_url', host: host, port: port, locale: nil)
end

#the_categories(slug_or_id = nil) ⇒ Object

return a collection of categories Arguments:

slug_or_id: string or integer

return: slug_or_id: nil => return all main_categories for this site slug_or_id: integer => return all main categories of the post_type with id = slug_or_id slug_or_id: string => return all main categories of the post_type with slug = slug_or_id



83
84
85
86
87
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 83

def the_categories(slug_or_id = nil)
  return the_post_type(slug_or_id).the_categories if slug_or_id.present?

  object.categories if slug_or_id.blank?
end

#the_category(slug_or_id) ⇒ Object

return the category object with id or slug = slug_or_id from this site



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 90

def the_category(slug_or_id)
  if slug_or_id.is_a?(Integer)
    begin
      return the_full_categories.where(id: slug_or_id).first.decorate
    rescue StandardError
      nil
    end
  end
  return unless slug_or_id.is_a?(String)

  begin
    the_full_categories.find_by_slug(slug_or_id).decorate # rubocop:disable Rails/DynamicFindBy
  rescue StandardError
    nil
  end
end

#the_contents(slug_or_id = 'post') ⇒ Object

return all contents from this site registered for post_type = slug (filter visibility, hidden, expired, ...) slug_or_id: slug or id of the post_type or array of slugs of post_types, default 'post'



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 21

def the_contents(slug_or_id = 'post')
  if slug_or_id.is_a?(Integer)
    return h.verify_front_visibility(object.posts.where("#{CamaleonCms::TermTaxonomy.table_name}.id = ?",
                                                        slug_or_id))
  end
  if slug_or_id.is_a?(String)
    return h.verify_front_visibility(object.posts.where("#{CamaleonCms::TermTaxonomy.table_name}.slug = ?",
                                                        slug_or_id))
  end
  return unless slug_or_id.is_a?(Array)

  h.verify_front_visibility(object.posts.where("#{CamaleonCms::TermTaxonomy.table_name}.slug in (?)",
                                               slug_or_id))
end

#the_descriptionObject



5
6
7
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 5

def the_description
  the_content
end

#the_full_categoriesObject

return all categories for ths site (include all children categories)



108
109
110
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 108

def the_full_categories
  object.full_categories
end

#the_iconObject



15
16
17
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 15

def the_icon
  object.get_option('icon') || h.asset_url('camaleon_cms/favicon.ico')
end

#the_languagesObject

return Array of frontend languages configured for this site



222
223
224
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 222

def the_languages
  object.get_languages
end

#the_logo(default = nil) ⇒ Object

return logo url for this site default: this url will be returned if logo is not present.



11
12
13
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 11

def (default = nil)
  object.get_option('logo') || (default || h.asset_url('camaleon_cms/camaleon.png').to_s)
end

#the_path(*args) ⇒ Object

return the path for this site



264
265
266
267
268
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 264

def the_path(*args)
  args = args.extract_options!
  args[:as_path] = true
  the_url(args)
end

#the_post(slug_or_id) ⇒ Object

return the post with id or slug equal to slug_or_id slug_or_id: (String) for post slug slug_or_id: (Integer) for post id slug_or_id: (Array) array of post ids, return multiple posts return post model or nil



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 55

def the_post(slug_or_id)
  if slug_or_id.is_a?(Integer)
    post = begin
      the_posts.find(slug_or_id)
    rescue StandardError
      nil
    end
  end
  if slug_or_id.is_a?(Array)
    post = begin
      the_posts.find(slug_or_id)
    rescue StandardError
      nil
    end
  end
  # use find_by_slug (multi-language aware) so posts with localized slugs
  # (e.g. "<!--:en-->sample-post<!--:-->...") are matched instead of returning nil
  post = the_posts.find_by_slug(slug_or_id) if slug_or_id.is_a?(String) # rubocop:disable Rails/DynamicFindBy
  post&.decorate
end

#the_post_type(slug_or_id) ⇒ Object

return a post_type object with id or slug = slug_or_id Arguments:

slug_or_id: string or integer

return: slug_or_id: integer => return the post type with id = slug_or_id slug_or_id: string => return the post type with slug = slug_or_id slug_or_id: array => return all post types with slugs in the array of this site



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 167

def the_post_type(slug_or_id)
  if slug_or_id.is_a?(String)
    begin
      return object.post_types.find_by_slug(slug_or_id).decorate # rubocop:disable Rails/DynamicFindBy
    rescue StandardError
      nil
    end
  end
  if slug_or_id.is_a?(Array)
    begin
      return object.post_types.find_by_slug(slug_or_id).decorate # rubocop:disable Rails/DynamicFindBy
    rescue StandardError
      nil
    end
  end
  return unless slug_or_id.is_a?(Integer)

  begin
    object.post_types.find(slug_or_id).decorate
  rescue StandardError
    nil
  end
end

#the_post_typesObject

return all post types for this site



156
157
158
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 156

def the_post_types
  object.post_types
end

#the_posts(slug_or_id = nil) ⇒ Object

return all contents for this site filteredby (visibility, hidden, expired, ...) slug_or_id: (slug of the post_type) possible values:

empty: return all posts of the current site
string: return all posts of post_type with slug = slug_or_id
integer: return all posts of post_type with id = slug_or_id
array: return all posts of post_types with slug in slug_or_id


42
43
44
45
46
47
48
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 42

def the_posts(slug_or_id = nil)
  if slug_or_id.present?
    the_contents(slug_or_id)
  else
    h.verify_front_visibility(object.posts)
  end
end

#the_statusObject

return the text status of current site



297
298
299
300
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 297

def the_status
  I18n.t("camaleon_cms.models.site.status_options.#{object.status || 'active'}",
         default: (object.status || 'active').titleize)
end

#the_status_optionsObject

return an array for select options of all status for this site



303
304
305
306
307
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 303

def the_status_options
  %w[active inactive maintenance].map do |o|
    [I18n.t("camaleon_cms.models.site.status_options.#{o}", default: o.titleize), o == 'active' ? '' : o]
  end
end

#the_tag(slug_or_id) ⇒ Object

return the post_tag object with id or slug = slug_or_id from this site sample: current_site.the_tag('test').the_url sample2: current_site.the_tag('test').the_posts



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 120

def the_tag(slug_or_id)
  if slug_or_id.is_a?(Integer)
    begin
      return object..where(id: slug_or_id).first.decorate
    rescue StandardError
      nil
    end
  end
  return unless slug_or_id.is_a?(String)

  begin
    object..find_by_slug(slug_or_id).decorate # rubocop:disable Rails/DynamicFindBy
  rescue StandardError
    nil
  end
end

#the_tagsObject

return all post tags for ths site



113
114
115
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 113

def the_tags
  object.
end

#the_url(*args) ⇒ Object

return root url for this site args = true/false(default), as_path: true/false(default)



241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 241

def the_url(*args)
  args = args.extract_options!
  args[:site] = self
  args[:host], args[:port] = object.get_domain.to_s.split(':') if !args[:as_path] && begin
    h.current_site
  rescue StandardError
    false
  end != self
  h.cama_current_site_host_port(args) unless args[:as_path]
  args[:locale] = @_deco_locale unless args.include?(:locale)
  postfix = 'url'
  postfix = 'path' if args.delete(:as_path)
  skip_relative_url_root = args.delete(:skip_relative_url_root)
  h.cama_current_site_host_port(args) unless args.key?(:host)
  res = h.cama_url_to_fixed("cama_root_#{postfix}", args)
  if skip_relative_url_root && PluginRoutes.static_system_info['relative_url_root'].present?
    res = res.sub("/#{PluginRoutes.static_system_info['relative_url_root']}",
                  '')
  end
  res
end

#the_user(id_or_username) ⇒ Object

return the user object with id or username = id_or_username from this site



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 138

def the_user(id_or_username)
  if id_or_username.is_a?(Integer)
    begin
      return object.users.where(id: id_or_username).first.decorate
    rescue StandardError
      nil
    end
  end
  return unless id_or_username.is_a?(String)

  begin
    object.users.find_by_username(id_or_username).decorate # rubocop:disable Rails/DynamicFindBy
  rescue StandardError
    nil
  end
end

#visitor_roleObject

return the role_id of current visitor for this site if the visitor was not logged in, then return -1



228
229
230
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 228

def visitor_role
  h.signin? ? h.cama_current_user.role : '-1'
end