Class: CamaleonCms::Site

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

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_option, #set_options

Class Method Details

.main_siteObject

return main site



169
170
171
# File 'app/models/camaleon_cms/site.rb', line 169

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



96
97
98
# File 'app/models/camaleon_cms/site.rb', line 96

def admin_per_page
  get_option("admin_per_page", 10)
end

#assign_user(user) ⇒ Object

assign user to this site



86
87
88
# File 'app/models/camaleon_cms/site.rb', line 86

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

#categoriesObject

all main categories for this site



46
47
48
# File 'app/models/camaleon_cms/site.rb', line 46

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



101
102
103
# File 'app/models/camaleon_cms/site.rb', line 101

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

#front_per_pageObject

items per page to be listed on frontend



91
92
93
# File 'app/models/camaleon_cms/site.rb', line 91

def front_per_page
  get_option("front_per_page", 10)
end

#full_categoriesObject

select full_categories for the site, include all children categories



36
37
38
# File 'app/models/camaleon_cms/site.rb', line 36

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

#get_admin_languageObject

return current admin language configured for this site



59
60
61
# File 'app/models/camaleon_cms/site.rb', line 59

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



249
250
251
252
253
254
255
256
# File 'app/models/camaleon_cms/site.rb', line 249

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



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

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



81
82
83
# File 'app/models/camaleon_cms/site.rb', line 81

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



76
77
78
# File 'app/models/camaleon_cms/site.rb', line 76

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



70
71
72
# File 'app/models/camaleon_cms/site.rb', line 70

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



214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'app/models/camaleon_cms/site.rb', line 214

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)


233
234
235
# File 'app/models/camaleon_cms/site.rb', line 233

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

#is_inactive?Boolean

check if current site is active or not

Returns:

  • (Boolean)


238
239
240
# File 'app/models/camaleon_cms/site.rb', line 238

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

#is_maintenance?Boolean

check if current site is in maintenance or not

Returns:

  • (Boolean)


243
244
245
# File 'app/models/camaleon_cms/site.rb', line 243

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)


175
176
177
# File 'app/models/camaleon_cms/site.rb', line 175

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

#need_validate_email?Boolean

Returns:

  • (Boolean)


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

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

#post_tagsObject

all post_tags for this site



41
42
43
# File 'app/models/camaleon_cms/site.rb', line 41

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)


106
107
108
# File 'app/models/camaleon_cms/site.rb', line 106

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



64
65
66
# File 'app/models/camaleon_cms/site.rb', line 64

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

#set_default_user_roles(post_type = nil) ⇒ Object

auto create default user roles



115
116
117
118
119
120
121
122
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
# File 'app/models/camaleon_cms/site.rb', line 115

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)



200
201
202
# File 'app/models/camaleon_cms/site.rb', line 200

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



205
206
207
# File 'app/models/camaleon_cms/site.rb', line 205

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

#user_rolesObject

all user roles for this site



27
28
29
30
31
32
33
# File 'app/models/camaleon_cms/site.rb', line 27

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



182
183
184
185
186
187
188
# File 'app/models/camaleon_cms/site.rb', line 182

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



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

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