Class: CamaleonCms::Site

Inherits:
TermTaxonomy show all
Defined in:
app/models/camaleon_cms/site.rb

Overview

Camaleon CMS is a content management system

Copyright (C) 2015 by Owen Peredo Diaz
Email: [email protected]
This program is free software: you can redistribute it and/or modify   it under the terms of the GNU Affero General Public License as  published by the Free Software Foundation, either version 3 of the  License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the  GNU Affero General Public License (GPLv3) for more details.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from TermTaxonomy

#children, #in_nav_menu_items, #skip_slug_validation?

Methods included from CustomFieldsRead

#add_custom_field_group, #add_custom_field_to_default_group, #get_field_groups, #get_field_object, #get_field_value, #get_field_values, #get_field_values_hash, #get_fields_grouped, #get_fields_object, #get_user_field_groups, #save_field_value, #set_field_value, #set_field_values, #update_field_value

Methods included from Metas

#delete_meta, #delete_option, #fix_save_metas_options_no_changed, #get_meta, #get_option, #options, #save_metas_options, #save_metas_options_skip, #set_meta, #set_metas, #set_multiple_options, #set_option

Class Method Details

.main_siteObject

return main site



177
178
179
# File 'app/models/camaleon_cms/site.rb', line 177

def self.main_site
  @main_site ||= CamaleonCms::Site.reorder(id: :ASC).first
end

Instance Method Details

#admin_per_pageObject

items per page to be listed on admin panel



104
105
106
# File 'app/models/camaleon_cms/site.rb', line 104

def admin_per_page
  get_option("admin_per_page", 10)
end

#assign_user(user) ⇒ Object

assign user to this site



94
95
96
# File 'app/models/camaleon_cms/site.rb', line 94

def assign_user(user)
  user.assign_site(self)
end

#categoriesObject

all main categories for this site



54
55
56
# File 'app/models/camaleon_cms/site.rb', line 54

def categories
  CamaleonCms::Category.includes(:post_type_parent).where(post_type_parent: self.post_types.pluck(:id))
end

#front_comment_statusObject

frontend comments status for new comments on frontend



109
110
111
# File 'app/models/camaleon_cms/site.rb', line 109

def front_comment_status
  get_option("comment_status", "pending")
end

#front_per_pageObject

items per page to be listed on frontend



99
100
101
# File 'app/models/camaleon_cms/site.rb', line 99

def front_per_page
  get_option("front_per_page", 10)
end

#full_categoriesObject

select full_categories for the site, include all children categories



44
45
46
# File 'app/models/camaleon_cms/site.rb', line 44

def full_categories
  CamaleonCms::Category.where({term_group: self.id})
end

#get_admin_languageObject

return current admin language configured for this site



67
68
69
# File 'app/models/camaleon_cms/site.rb', line 67

def get_admin_language
  options[:_admin_theme] || "en"
end

#get_anonymous_userObject

return the anonymous user if the anonymous user not exist, will create one



257
258
259
260
261
262
263
264
# File 'app/models/camaleon_cms/site.rb', line 257

def get_anonymous_user
  user = self.users.where(username: 'anonymous').first
  unless user.present?
    pass = "anonymous#{rand(9999)}"
    user = self.users.create({email: '[email protected]', username: 'anonymous', password: pass, password_confirmation: pass, first_name: 'Anonymous'})
  end
  user
end

#get_languagesObject

return all languages configured by the admin if it is empty, then return default locale



60
61
62
63
64
# File 'app/models/camaleon_cms/site.rb', line 60

def get_languages
  return @_languages if defined?(@_languages)
  l = get_meta("languages_site", [I18n.default_locale])
  @_languages = l.map { |x| x.to_sym } rescue [I18n.default_locale.to_sym]
end

#get_plugin(plugin_slug) ⇒ Object

return plugin model with slug plugin_slug



89
90
91
# File 'app/models/camaleon_cms/site.rb', line 89

def get_plugin(plugin_slug)
  self.plugins.where(slug: plugin_slug).first_or_create!
end

#get_theme(theme_slug = nil) ⇒ Object

return theme model with slug theme_slug for this site theme_slug: (optional) if it is null, this will return current theme for this site



84
85
86
# File 'app/models/camaleon_cms/site.rb', line 84

def get_theme(theme_slug = nil)
  self.themes.where(slug: (theme_slug || get_theme_slug), status: nil).first_or_create!
end

#get_theme_slugObject

return current theme slug configured for this site if theme was not configured, then return system.json defined



78
79
80
# File 'app/models/camaleon_cms/site.rb', line 78

def get_theme_slug
  options[:_theme] || PluginRoutes.system_info["default_template"]
end

#get_valid_post_slug(slug, post_id = nil) ⇒ Object

return an available slug for a new post slug: (String) possible slug value post_id: (integer, optional) current post id sample: (“<!–:es–>features-1<!–:–><!–:en–>caract-1<!–:–>”) | (“features”) return: (String) available slugs



222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# File 'app/models/camaleon_cms/site.rb', line 222

def get_valid_post_slug(slug, post_id=nil)
  slugs = slug.translations
  if slugs.present?
    slugs.each do |k, v|
      slugs[k] = get_valid_post_slug(v)
    end
    slugs.to_translate
  else
    res = slug
    (1..9999).each do |i|
      p = self.posts.find_by_slug(res)
      break if !p.present? || (p.present? && p.id == post_id)
      res = "#{slug}-#{i}"
    end
    res
  end
end

#is_active?Boolean

check if current site is active or not

Returns:

  • (Boolean)


241
242
243
# File 'app/models/camaleon_cms/site.rb', line 241

def is_active?
  !self.status.present? || self.status == 'active'
end

#is_inactive?Boolean

check if current site is active or not

Returns:

  • (Boolean)


246
247
248
# File 'app/models/camaleon_cms/site.rb', line 246

def is_inactive?
  self.status == 'inactive'
end

#is_maintenance?Boolean

check if current site is in maintenance or not

Returns:

  • (Boolean)


251
252
253
# File 'app/models/camaleon_cms/site.rb', line 251

def is_maintenance?
  self.status == 'maintenance'
end

#main_site?Boolean Also known as: is_default?

check if this site is the main site main site is a site that doesn’t have slug

Returns:

  • (Boolean)


183
184
185
# File 'app/models/camaleon_cms/site.rb', line 183

def main_site?
  self.class.main_site == self
end

#need_validate_email?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'app/models/camaleon_cms/site.rb', line 118

def need_validate_email?
  get_option('need_validate_email', false) == true
end

#post_tagsObject

all post_tags for this site



49
50
51
# File 'app/models/camaleon_cms/site.rb', line 49

def 
  CamaleonCms::PostTag.includes(:post_type).where(post_type: self.post_types.pluck(:id))
end

#security_user_register_captcha_enabled?Boolean

security: user register form show captcha?

Returns:

  • (Boolean)


114
115
116
# File 'app/models/camaleon_cms/site.rb', line 114

def security_user_register_captcha_enabled?
  get_option('security_captcha_user_register', false) == true
end

#set_admin_language(language) ⇒ Object

set current admin language for this site



72
73
74
# File 'app/models/camaleon_cms/site.rb', line 72

def set_admin_language(language)
  set_option("_admin_theme", language)
end

#set_default_user_roles(post_type = nil) ⇒ Object

auto create default user roles



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'app/models/camaleon_cms/site.rb', line 123

def set_default_user_roles(post_type = nil)
  user_role = self.user_roles.where({slug: 'admin', term_group: -1}).first_or_create({name: 'Administrator', description: 'Default roles admin'})
  if user_role.valid?
    d, m = {}, {}
    pts = self.post_types.all.pluck(:id)
    CamaleonCms::UserRole::ROLES[:post_type].each { |value| d[value[:key]] = pts }
    CamaleonCms::UserRole::ROLES[:manager].each { |value| m[value[:key]] = 1 }
    user_role.set_meta("_post_type_#{self.id}", d || {})
    user_role.set_meta("_manager_#{self.id}", m || {})
  end

  user_role = self.user_roles.where({slug: 'editor'}).first_or_create({name: 'Editor', description: 'Editor Role'})
  if user_role.valid?
    d = {}
    if post_type.present?
      d = user_role.get_meta("_post_type_#{self.id}", {})
      CamaleonCms::UserRole::ROLES[:post_type].each { |value|
        value_old = d[value[:key].to_sym] || []
        d[value[:key].to_sym] = value_old + [post_type.id]
      }
    else
      pts = self.post_types.all.pluck(:id)
      CamaleonCms::UserRole::ROLES[:post_type].each { |value| d[value[:key]] = pts }
    end
    user_role.set_meta("_post_type_#{self.id}", d || {})
  end

  user_role = self.user_roles.where({slug: 'contributor'}).first_or_create({name: 'Contributor', description: 'Contributor Role'})
  if user_role.valid?
    d = {}
    if post_type.present?
      d = user_role.get_meta("_post_type_#{self.id}", {})
      CamaleonCms::UserRole::ROLES[:post_type].each { |value|
        value_old = d[value[:key].to_sym] || []
        d[value[:key].to_sym] = value_old + [post_type.id] if value[:key].to_s == 'edit'
      }
    else
      pts = self.post_types.all.pluck(:id)
      CamaleonCms::UserRole::ROLES[:post_type].each { |value| d[value[:key]] = pts if value[:key].to_s == 'edit' }
    end
    user_role.set_meta("_post_type_#{self.id}", d || {})
  end

  unless post_type.present?
    user_role = self.user_roles.where({slug: 'client', term_group: -1}).first_or_create({name: 'Client', description: 'Default roles client'})
    if user_role.valid?
      user_role.set_meta("_post_type_#{self.id}", {})
      user_role.set_meta("_manager_#{self.id}", {})
    end
  end

end

#upload_directory(inner_directory = nil) ⇒ Object

return upload directory for this site (deprecated for cloud support)



208
209
210
# File 'app/models/camaleon_cms/site.rb', line 208

def upload_directory(inner_directory = nil)
  File.join(Rails.public_path, "/media/#{PluginRoutes.static_system_info["media_slug_folder"] ? self.slug : self.id}", inner_directory.to_s)
end

#upload_directory_nameObject

return the directory name where to upload file for this site



213
214
215
# File 'app/models/camaleon_cms/site.rb', line 213

def upload_directory_name
  "#{PluginRoutes.static_system_info["media_slug_folder"] ? self.slug : self.id}"
end

#user_rolesObject

all user roles for this site



35
36
37
38
39
40
41
# File 'app/models/camaleon_cms/site.rb', line 35

def user_roles
  if PluginRoutes.system_info["users_share_sites"]
    CamaleonCms::Site.main_site.user_roles_rel
  else
    user_roles_rel
  end
end

#usersObject

list all users of current site



190
191
192
193
194
195
196
# File 'app/models/camaleon_cms/site.rb', line 190

def users
  if PluginRoutes.system_info["users_share_sites"]
    CamaleonCms::User.where(site_id: -1)
  else
    CamaleonCms::User.where(site_id: self.id)
  end
end

#users_include_adminsObject

return all users including administrators



199
200
201
202
203
204
205
# File 'app/models/camaleon_cms/site.rb', line 199

def users_include_admins
  if PluginRoutes.system_info["users_share_sites"]
    CamaleonCms::User.where(site_id: -1)
  else
    CamaleonCms::User.where("site_id = ? or role = ?", self.id, 'admin')
  end
end