Class: CamaleonCms::SiteDecorator

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

Instance Method Summary collapse

Methods inherited from TermTaxonomyDecorator

#the_content, #the_edit_link, #the_edit_url, #the_excerpt, #the_owner, #the_parent, #the_slug, #the_title

Methods included from CustomFieldsConcern

#render_fields, #the_field, #the_field_grouped, #the_fields, #the_fields_grouped, #the_json_field, #the_json_fields

Methods inherited from ApplicationDecorator

#_calc_locale, #get_locale, #set_decoration_locale, #the_breadcrumb, #the_created_at, #the_id, #the_keywords, #the_slug, #the_updated_at

Methods included from MetasDecoratorMethods

#the_meta, #the_option

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



192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 192

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

  res = ["<ul class='#{list_class}'>"]
  lan.each do |lang|
    path = "#{lang}.png"
    label = (if block
               h.capture(lang, I18n.locale.to_s == lang.to_s,
                         &block)
             else
               "<img src='#{h.asset_path("camaleon_cms/language/#{path}")}'/>"
             end)
    res << "<li class='#{current_class if I18n.locale.to_s == lang.to_s}'> <a href='#{h.cama_url_to_fixed(
      current_page ? 'url_for' : 'cama_root_url', { locale: lang, cama_set_language: lang }
    )}'>#{label}</a> </li>"
  end
  res << '</ul>'
  res.join('').html_safe
end

#generate_breadcrumb(_add_post_type = true) ⇒ Object

draw bread crumb for current site



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

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)


285
286
287
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 285

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)


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

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



270
271
272
273
274
275
276
277
278
279
280
281
282
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 270

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



81
82
83
84
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 81

def the_categories(slug_or_id = nil)
  return the_post_type(slug_or_id).the_categories if slug_or_id.present?
  return object.categories unless slug_or_id.present?
end

#the_category(slug_or_id) ⇒ Object

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



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

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
  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)



105
106
107
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 105

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



215
216
217
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 215

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



257
258
259
260
261
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 257

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
# 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
  post = the_posts.find_by_slug(slug_or_id) if slug_or_id.is_a?(String) # id
  post.present? ? post.decorate : nil
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



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

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
    rescue StandardError
      nil
    end
  end
  if slug_or_id.is_a?(Array)
    begin
      return object.post_types.find_by_slug(slug_or_id).decorate
    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



153
154
155
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 153

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



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

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



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

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



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

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
  rescue StandardError
    nil
  end
end

#the_tagsObject

return all post tags for ths site



110
111
112
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 110

def the_tags
  object.
end

#the_url(*args) ⇒ Object

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



234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# File 'app/decorators/camaleon_cms/site_decorator.rb', line 234

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.keys.include?(: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



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

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
  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



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

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