camaleon_cms 2.0.4.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of camaleon_cms might be problematic. Click here for more details.

Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/app/apps/plugins/contact_form/contact_form_helper.rb +1 -1
  3. data/app/apps/plugins/contact_form/views/forms_shorcode.html.erb +1 -0
  4. data/app/apps/plugins/front_cache/front_cache_helper.rb +1 -1
  5. data/app/apps/themes/camaleon_first/assets/css/main.css +1 -0
  6. data/app/apps/themes/camaleon_first/views/layouts/index.html.erb +0 -1
  7. data/app/apps/themes/new/assets/css/main.css +1 -0
  8. data/app/apps/themes/new/views/layouts/index.html.erb +0 -1
  9. data/app/assets/javascripts/camaleon_cms/admin/_libraries.js +15 -13
  10. data/app/assets/javascripts/camaleon_cms/admin/_post.js +2 -3
  11. data/app/assets/javascripts/camaleon_cms/admin/uploader/_jquery.form.js +1277 -0
  12. data/app/assets/javascripts/camaleon_cms/admin/uploader/uploader_manifest.js +1 -0
  13. data/app/assets/stylesheets/camaleon_cms/admin/admin-basic-manifest.css +1 -0
  14. data/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css +1 -0
  15. data/app/assets/stylesheets/camaleon_cms/admin/uploader/_uploadfile.css.scss +6 -8
  16. data/app/controllers/camaleon_cms/admin/posts/drafts_controller.rb +8 -5
  17. data/app/controllers/camaleon_cms/admin/sessions_controller.rb +31 -4
  18. data/app/controllers/camaleon_cms/camaleon_controller.rb +1 -0
  19. data/app/controllers/camaleon_cms/frontend_controller.rb +2 -1
  20. data/app/decorators/camaleon_cms/application_decorator.rb +3 -2
  21. data/app/decorators/camaleon_cms/custom_field_decorator.rb +3 -8
  22. data/app/decorators/camaleon_cms/post_decorator.rb +8 -8
  23. data/app/decorators/camaleon_cms/term_taxonomy_decorator.rb +2 -2
  24. data/app/helpers/camaleon_cms/admin/menus_helper.rb +2 -2
  25. data/app/helpers/camaleon_cms/camaleon_helper.rb +2 -2
  26. data/app/helpers/camaleon_cms/email_helper.rb +27 -0
  27. data/app/helpers/camaleon_cms/frontend/seo_helper.rb +17 -20
  28. data/app/helpers/camaleon_cms/frontend/site_helper.rb +6 -5
  29. data/app/helpers/camaleon_cms/html_helper.rb +21 -0
  30. data/app/helpers/camaleon_cms/plugins_helper.rb +2 -1
  31. data/app/helpers/camaleon_cms/session_helper.rb +2 -1
  32. data/app/mailers/camaleon_cms/html_mailer.rb +14 -13
  33. data/app/models/camaleon_cms/nav_menu_item.rb +4 -6
  34. data/app/models/camaleon_cms/site.rb +5 -0
  35. data/app/models/camaleon_cms/term_taxonomy.rb +0 -3
  36. data/app/models/camaleon_cms/user.rb +6 -1
  37. data/app/models/camaleon_cms/user_relationship.rb +0 -2
  38. data/app/models/camaleon_cms/user_role.rb +1 -0
  39. data/app/models/concerns/camaleon_cms/custom_fields_read.rb +1 -0
  40. data/app/views/camaleon_cms/admin/media/index.html.erb +31 -14
  41. data/app/views/camaleon_cms/admin/posts/_sidebar.html.erb +2 -2
  42. data/app/views/camaleon_cms/admin/posts/form.html.erb +1 -1
  43. data/app/views/camaleon_cms/admin/settings/_configuration_settings.html.erb +4 -0
  44. data/app/views/camaleon_cms/admin/settings/post_types/_form.html.erb +7 -0
  45. data/app/views/camaleon_cms/default_theme/layouts/index.html.erb +0 -1
  46. data/app/views/camaleon_cms/default_theme/partials/_render_custom_field.html.erb +1 -3
  47. data/app/views/camaleon_cms/html_mailer/confirm_email.html.erb +3 -0
  48. data/app/views/camaleon_cms/shortcode_templates/widget.html.erb +2 -2
  49. data/app/views/layouts/camaleon_cms/admin.html.erb +0 -1
  50. data/app/views/layouts/camaleon_cms/admin/_footer.html.erb +1 -1
  51. data/app/views/layouts/camaleon_cms/admin/installer.html.erb +0 -1
  52. data/app/views/layouts/camaleon_cms/login.html.erb +0 -1
  53. data/config/initializers/sass.rb +6 -6
  54. data/config/locales/camaleon_cms/admin/en.yml +10 -0
  55. data/config/locales/camaleon_cms/admin/es.yml +10 -0
  56. data/config/routes/admin.rb +1 -2
  57. data/config/routes/frontend.rb +2 -2
  58. data/db/migrate/20151212095328_add_confirm_token_to_users.rb +7 -0
  59. data/lib/camaleon_cms/engine.rb +1 -0
  60. data/lib/camaleon_cms/version.rb +1 -1
  61. data/lib/generators/camaleon_cms/gem_theme_template/app/assets/stylesheets/themes/my_plugin/main.css +1 -0
  62. data/lib/generators/camaleon_cms/gem_theme_template/app/views/themes/my_plugin/layouts/index.html.erb +0 -1
  63. data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/assets/css/main.css +1 -0
  64. data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/views/layouts/index.html.erb +0 -1
  65. metadata +20 -20
  66. data/public/docs/index.html +0 -70
  67. data/public/docs/swagger-ui/css/highlight.default.css +0 -135
  68. data/public/docs/swagger-ui/css/screen.css +0 -1070
  69. data/public/docs/swagger-ui/images/logo_small.png +0 -0
  70. data/public/docs/swagger-ui/images/throbber.gif +0 -0
  71. data/public/docs/swagger-ui/lib/backbone-min.js +0 -38
  72. data/public/docs/swagger-ui/lib/handlebars-1.0.0.js +0 -2278
  73. data/public/docs/swagger-ui/lib/highlight.7.3.pack.js +0 -1
  74. data/public/docs/swagger-ui/lib/jquery-1.8.0.min.js +0 -2
  75. data/public/docs/swagger-ui/lib/jquery.ba-bbq.min.js +0 -18
  76. data/public/docs/swagger-ui/lib/jquery.slideto.min.js +0 -1
  77. data/public/docs/swagger-ui/lib/jquery.wiggle.min.js +0 -8
  78. data/public/docs/swagger-ui/lib/shred.bundle.js +0 -2765
  79. data/public/docs/swagger-ui/lib/shred/content.js +0 -193
  80. data/public/docs/swagger-ui/lib/swagger.js +0 -1253
  81. data/public/docs/swagger-ui/lib/underscore-min.js +0 -32
  82. data/public/docs/swagger-ui/swagger-ui.js +0 -2039
  83. data/public/docs/swagger-ui/swagger-ui.min.js +0 -1
@@ -9,6 +9,7 @@
9
9
  #encoding: utf-8
10
10
  module CamaleonCms::HtmlHelper
11
11
  def cama_html_helpers_init
12
+ @_pre_assets_content = [] #Assets contents before the libraries import
12
13
  @_assets_libraries = {}
13
14
  @_assets_content = []
14
15
  end
@@ -33,6 +34,7 @@ module CamaleonCms::HtmlHelper
33
34
  @_assets_libraries[key.to_sym] = library if library.present?
34
35
  end
35
36
  end
37
+
36
38
  alias_method :add_asset_library, :cama_load_libraries
37
39
 
38
40
  # add custom asset libraries (js, css or both) for the current request, also you can add extra css or js files for existent libraries
@@ -50,6 +52,7 @@ module CamaleonCms::HtmlHelper
50
52
  end
51
53
  end
52
54
  end
55
+
53
56
  alias_method :append_asset_libraries, :cama_load_custom_assets
54
57
 
55
58
  # add asset content into custom assets
@@ -60,6 +63,19 @@ module CamaleonCms::HtmlHelper
60
63
  @_assets_content << content
61
64
  end
62
65
 
66
+ # add pre asset content into custom assets
67
+ # content may be: <script>alert()</script>
68
+ # content may be: <style>a{color: red;}</style>
69
+ # this will be printed before assets_library with <%raw cama_draw_pre_asset_contents %>
70
+ def append_pre_asset_content(content)
71
+ @_pre_assets_content << content
72
+ end
73
+
74
+ # return all scripts to be executed before import the js libraries(cama_draw_custom_assets)
75
+ def cama_draw_pre_asset_contents
76
+ (@_pre_assets_content || []).join('').html_safe
77
+ end
78
+
63
79
  # return all js libraries added [aa.js, bb,js, ..]
64
80
  # def get_assets_js
65
81
  def cama_draw_custom_assets
@@ -116,4 +132,9 @@ module CamaleonCms::HtmlHelper
116
132
  libs[:admin_intro] = {js: ['camaleon_cms/admin/introjs/intro.min'], css: ["camaleon_cms/admin/introjs/introjs.min"]}
117
133
  @_cama_assets_libraries = libs
118
134
  end
135
+
136
+ # execute translation for value if this value is like: t(admin.my_text) ==> My Text
137
+ def cama_print_i18n_value(value)
138
+ value.start_with?('t(') ? eval(value.sub('t(', 'I18n.t(')) : value
139
+ end
119
140
  end
@@ -97,7 +97,8 @@ module CamaleonCms::PluginsHelper
97
97
  # return plugin full asset path
98
98
  # plugin_key: plugin name
99
99
  # asset: (String) asset name
100
- # sample: <script src="<%= plugin_asset_path("js/admin.js") %>"></script> => /assets/plugins/my_plugin/assets/css/main-54505620f.css
100
+ # sample: <script src="<%= plugin_asset_path("admin.js") %>"></script> => /assets/plugins/my_plugin/admin-54505620f.js
101
+ # sample: <script src="<%= plugin_asset_path("admin.js", 'my_plugin') %>"></script> => /assets/plugins/my_plugin/admin-54505620f.js
101
102
  def plugin_asset_path(asset, plugin_key = nil)
102
103
  if plugin_key.present? && plugin_key.include?("/")
103
104
  return plugin_asset_url(plugin_key, asset || self_plugin_key(1))
@@ -59,7 +59,8 @@ module CamaleonCms::SessionHelper
59
59
  else
60
60
  if @user.save
61
61
  @user.set_meta_from_form(meta)
62
- r = {user: @user, message: t('camaleon_cms.admin.users.message.created'), redirect_url: cama_admin_login_path}; hooks_run('user_after_register', r)
62
+ message = current_site.need_validate_email? ? t('camaleon_cms.admin.users.message.created_pending_validate_email') : t('camaleon_cms.admin.users.message.created')
63
+ r = {user: @user, message: message, redirect_url: cama_admin_login_path}; hooks_run('user_after_register', r)
63
64
  {:result => true, :message => r[:message], :redirect_url => r[:redirect_url]}
64
65
  else
65
66
  {:result => false, :type => :no_saved}
@@ -14,11 +14,12 @@ class CamaleonCms::HtmlMailer < ActionMailer::Base
14
14
  default from: "Camaleon CMS <owenperedo@gmail.com>"
15
15
  after_action :set_delivery_options
16
16
 
17
- def sender(email, subject='Hello', content='', from=nil, attachs=[], url_base='', current_site, template_name, layout_name)
17
+ def sender(email, subject='Hello', content='', from=nil, attachs=[], url_base='', current_site, template_name, layout_name, extra_data)
18
18
  @subject = subject
19
19
  @html = content
20
20
  @url_base = url_base
21
21
  @current_site = current_site
22
+ @extra_data = extra_data
22
23
 
23
24
  mail_data = {to: email, subject: subject}
24
25
  mail_data[:from] = from if from.present?
@@ -27,14 +28,14 @@ class CamaleonCms::HtmlMailer < ActionMailer::Base
27
28
  mail_data[:from] = current_site.get_option("email_from")
28
29
  mail_data[:cc] = current_site.get_option("email_cc")
29
30
  mail_data[:delivery_method] = :smtp
30
- mail_data[:delivery_method_options] = { user_name: current_site.get_option("email_username"),
31
- password: current_site.get_option("email_pass"),
32
- address: current_site.get_option("email_server"),
33
- port: current_site.get_option("email_port"),
34
- domain: (current_site.the_url.to_s.parse_domain rescue "localhost"),
35
- authentication: "plain",
36
- enable_starttls_auto: true
37
- }
31
+ mail_data[:delivery_method_options] = {user_name: current_site.get_option("email_username"),
32
+ password: current_site.get_option("email_pass"),
33
+ address: current_site.get_option("email_server"),
34
+ port: current_site.get_option("email_port"),
35
+ domain: (current_site.the_url.to_s.parse_domain rescue "localhost"),
36
+ authentication: "plain",
37
+ enable_starttls_auto: true
38
+ }
38
39
  end
39
40
 
40
41
  views_dir = "app/apps/"
@@ -46,15 +47,15 @@ class CamaleonCms::HtmlMailer < ActionMailer::Base
46
47
  lookup_context.prefixes.prepend("themes/#{theme.slug}/views") unless theme.settings["gem_mode"]
47
48
 
48
49
  # run hook "email" to customize values
49
- r = {template_name: template_name, layout_name: layout_name, mail_data: mail_data, files: attachs, format: "html" }
50
+ r = {template_name: template_name, layout_name: layout_name, mail_data: mail_data, files: attachs, format: "html"}
50
51
  hooks_run("email", r)
51
52
 
52
53
  if r[:files].present?
53
- r[:files].each{|attach| attachments["#{File.basename(attach)}"] = File.open(attach, 'rb'){|f| f.read} }
54
+ r[:files].each { |attach| attachments["#{File.basename(attach)}"] = File.open(attach, 'rb') { |f| f.read } }
54
55
  end
55
56
 
56
- mail(r[:mail_data]){|format| format.html { render r[:template_name], layout: r[:layout_name] } } if r[:format] == "html"
57
- mail(r[:mail_data]){|format| format.text { render r[:template_name], layout: r[:layout_name] } } if r[:format] == "txt"
57
+ mail(r[:mail_data]) { |format| format.html { render r[:template_name], layout: r[:layout_name] } } if r[:format] == "html"
58
+ mail(r[:mail_data]) { |format| format.text { render r[:template_name], layout: r[:layout_name] } } if r[:format] == "txt"
58
59
  mail(r[:mail_data]) unless r[:format].present?
59
60
 
60
61
  end
@@ -18,12 +18,10 @@ class CamaleonCms::NavMenuItem < CamaleonCms::TermTaxonomy
18
18
 
19
19
  # return the main menu
20
20
  def main_menu
21
- ctg = self
22
- begin
23
- main_menu = ctg.parent
24
- ctg = ctg.parent_item
25
- end while ctg.present?
26
- main_menu
21
+ main_menu = self.parent
22
+ return main_menu if main_menu.present?
23
+ parent_menu = self.parent_item
24
+ parent_menu.main_menu if parent_menu.present?
27
25
  end
28
26
 
29
27
  # return the type of this menu (post|category|post_tag|post_type|external)
@@ -114,6 +114,10 @@ class CamaleonCms::Site < CamaleonCms::TermTaxonomy
114
114
  get_option('security_captcha_user_register', false) == true
115
115
  end
116
116
 
117
+ def need_validate_email?
118
+ get_option('need_validate_email', false) == true
119
+ end
120
+
117
121
  # auto create default user roles
118
122
  def set_default_user_roles(post_type = nil)
119
123
  user_role = self.user_roles.where({slug: 'admin', term_group: -1}).first_or_create({name: 'Administrator', description: 'Default roles admin'})
@@ -234,6 +238,7 @@ class CamaleonCms::Site < CamaleonCms::TermTaxonomy
234
238
  CamaleonCms::User.where(site_id: self.id).destroy_all
235
239
  end
236
240
  FileUtils.rm_rf(upload_directory) # destroy current media directory
241
+ users.destroy_all unless PluginRoutes.system_info["users_share_sites"] # destroy all users assigned fot this site
237
242
  end
238
243
 
239
244
  # default structure for each new site
@@ -29,14 +29,11 @@ class CamaleonCms::TermTaxonomy < ActiveRecord::Base
29
29
  validates :name, :taxonomy, presence: true
30
30
  validates_with CamaleonCms::UniqValidator
31
31
 
32
- #default_scope order('users.role ASC')
33
32
  # relations
34
33
  has_many :term_relationships, :class_name => "CamaleonCms::TermRelationship", :foreign_key => :term_taxonomy_id, dependent: :destroy
35
34
  has_many :posts, foreign_key: :objectid, through: :term_relationships, :source => :objects
36
35
  belongs_to :parent, class_name: "CamaleonCms::TermTaxonomy", foreign_key: :parent_id
37
36
  belongs_to :owner, class_name: "CamaleonCms::User", foreign_key: :user_id
38
- has_many :user_relationships, :class_name => "CamaleonCms::UserRelationship", :foreign_key => :term_taxonomy_id, dependent: :destroy
39
- has_many :users, through: :user_relationships, :source => :user
40
37
 
41
38
  # return all children taxonomy
42
39
  # sample: sub categories of a category
@@ -21,6 +21,7 @@ class CamaleonCms::User < ActiveRecord::Base
21
21
  attr_accessible :username, :role, :email, :parent_id, :last_login_at, :site_id, :password, :password_confirmation #, :profile_attributes
22
22
  attr_accessible :data_options
23
23
  attr_accessible :data_metas
24
+ attr_accessible :is_valid_email
24
25
 
25
26
  default_scope {order("#{CamaleonCms::User.table_name}.role ASC")}
26
27
 
@@ -112,7 +113,11 @@ class CamaleonCms::User < ActiveRecord::Base
112
113
  save!
113
114
  end
114
115
 
115
-
116
+ def send_confirm_email
117
+ generate_token(:confirm_email_token)
118
+ self.confirm_email_sent_at = Time.zone.now
119
+ save!
120
+ end
116
121
 
117
122
  private
118
123
  def create_profile
@@ -12,6 +12,4 @@ class CamaleonCms::UserRelationship < ActiveRecord::Base
12
12
 
13
13
  belongs_to :term_taxonomies, :class_name => "CamaleonCms::TermTaxonomy", foreign_key: :term_taxonomy_id, inverse_of: :user_relationships
14
14
  belongs_to :user, :class_name => "CamaleonCms::User", foreign_key: :user_id, inverse_of: :user_relationships
15
-
16
-
17
15
  end
@@ -9,6 +9,7 @@
9
9
  class CamaleonCms::UserRole < CamaleonCms::TermTaxonomy
10
10
  default_scope { where(taxonomy: :user_roles) }
11
11
  has_many :metas, ->{ where(object_class: 'UserRole')}, :class_name => "CamaleonCms::Meta", foreign_key: :objectid, dependent: :destroy
12
+ has_many :user_relationships, :class_name => "CamaleonCms::UserRelationship", :foreign_key => :term_taxonomy_id, dependent: :destroy
12
13
  has_many :users, through: :user_relationships, :source => :user
13
14
  belongs_to :site, :class_name => "CamaleonCms::Site", foreign_key: :parent_id
14
15
 
@@ -41,6 +41,7 @@ module CamaleonCms::CustomFieldsRead extend ActiveSupport::Concern
41
41
  self.custom_field_groups.where(object_class: class_name)
42
42
  when 'NavMenuItem'
43
43
  # self.main_menu.custom_field_groups //verify this problem
44
+ puts "get_field_groups - NavMenuItem: **************#{self.inspect}***** #{self.main_menu.inspect}"
44
45
  CamaleonCms::NavMenu.find(self.main_menu.id).get_field_groups
45
46
  when 'PostType'
46
47
  if args[:kind] == "all"
@@ -1,25 +1,42 @@
1
- <div class="row" id="cama_media_gallery" data-url_actions="<%= actions_cama_admin_media_path(actions: @show_file_actions) %>" data-formats="<%= @media_formats.join(",") %>" data-folder="<%= @folder %>" data-url="<%= ajax_cama_admin_media_path(actions: @show_file_actions) %>">
2
- <div class="col-md-9 media_browser_list">
3
- <%= render "files_list" %>
1
+ <div id="cama_media_gallery" data-url_actions="<%= actions_cama_admin_media_path(actions: @show_file_actions) %>" data-formats="<%= @media_formats.join(",") %>" data-folder="<%= @folder %>" data-url="<%= ajax_cama_admin_media_path(actions: @show_file_actions) %>">
2
+ <div class="panel panel-default">
3
+ <div class="panel-heading">
4
+ <div class="row">
5
+ <div class="col-md-12">
6
+ <h4 class="pull-left">root</h4>
7
+ <ol class="pull-left breadcrumb media_folder_breadcrumb"></ol>
8
+ <% if @show_file_actions %>
9
+ <a href="#" class="btn btn-primary pull-right add_folder">
10
+ <i class="fa fa-plus"></i> <%= t("camaleon_cms.admin.button.add_folder") %>
11
+ </a>
12
+ <% end %>
13
+ </div>
14
+ </div>
4
15
  </div>
16
+ <div class="panel-body">
17
+ <div class="row" style="margin-bottom: 16px">
18
+ <div class="col-md-9 media_browser_list">
19
+ <%= render "files_list" %>
20
+ </div>
5
21
 
6
- <div class="col-md-3 media_file_info_col">
7
- <ul class="nav nav-tabs nav-justified" role="tablist">
22
+ <div class="col-md-3 media_file_info_col">
23
+ <ul class="nav nav-tabs nav-justified" role="tablist">
8
24
  <li role="presentation" class="active"><a href="#cama_media_upload" class="link_media_upload" role="tab" data-toggle="tab"><%= t("camaleon_cms.admin.button.upload_file") %></a></li>
9
25
  <li role="presentation"><a href="#cama_media_info" class="link_media_info" role="tab" data-toggle="tab"><%= t("camaleon_cms.admin.media.info") %></a></li>
10
- </ul>
11
- <div class="tab-content">
26
+ </ul>
27
+ <div class="tab-content">
12
28
  <div role="tabpanel" class="tab-pane active" id="cama_media_upload">
13
- <div class="cama_media_fileuploader" data-url="<%= upload_cama_admin_media_path(actions: @show_file_actions) %>"><%= t("camaleon_cms.admin.button.upload_file") %></div>
29
+ <div class="cama_media_fileuploader" data-url="<%= upload_cama_admin_media_path(actions: @show_file_actions) %>"><%= t("camaleon_cms.admin.button.upload_file") %></div>
14
30
  </div>
15
31
  <div role="tabpanel" class="tab-pane" id="cama_media_info">
16
- <div class="media_file_info"></div>
32
+ <div class="media_file_info"></div>
17
33
  </div>
34
+ </div>
18
35
  </div>
36
+ </div>
19
37
  </div>
20
- <ol class="breadcrumb media_folder_breadcrumb"></ol>
21
- <% if @show_file_actions %>
22
- <a href="#" class="btn btn-primary pull-right add_folder btn-xs"><i class="fa fa-folder-plus"></i> <%= t("camaleon_cms.admin.button.add_folder") %></a>
23
- <% end %>
38
+ </div>
24
39
  </div>
25
- <script>jQuery(function(){ cama_init_media($("#cama_media_gallery")); });</script>
40
+ <script>jQuery(function () {
41
+ cama_init_media($("#cama_media_gallery"));
42
+ });</script>
@@ -4,9 +4,9 @@
4
4
  <div class="panel-body ">
5
5
  <div class="row">
6
6
  <% if @post.draft? && !@post.parent.present? %>
7
- <div class="col-md-12 input-submit"><%= f.submit "#{ (@post.new_record?) ? t('camaleon_cms.admin.page_title.create') : t('camaleon_cms.admin.button.publish')}", class: "btn btn-success btn-lg btn-block", onclick: "$('#post_status').val('published')" %></div>
7
+ <div class="col-md-12 input-submit"><%= f.submit "#{ (@post.new_record?) ? t('camaleon_cms.admin.page_title.create') : t('camaleon_cms.admin.button.publish')}", class: "btn btn-success btn-lg btn-block", onclick: "$('#post_status').val('#{@post.get_option('draft_status')}')" %></div>
8
8
  <% elsif @post.draft? && @post.parent.present? %>
9
- <div class="col-md-12 input-submit"><%= f.submit "#{ t('camaleon_cms.admin.button.recover') }", class: "btn btn-success btn-lg btn-block", onclick: "$('#post_status').val('published')" %></div>
9
+ <div class="col-md-12 input-submit"><%= f.submit "#{ t('camaleon_cms.admin.button.recover') }", class: "btn btn-success btn-lg btn-block", onclick: "$('#post_status').val('#{@post.get_option('draft_status')}')" %></div>
10
10
  <% else %>
11
11
  <div class="col-md-12 input-submit"><%= f.submit "#{ (@post.new_record?) ? t('camaleon_cms.admin.page_title.create') : t('camaleon_cms.admin.page_title.update')}", class: "btn btn-success btn-lg btn-block" %></div>
12
12
  <% end %>
@@ -82,7 +82,7 @@
82
82
  post_id: '<%= @post.draft? ? (@post.parent.present? ? @post.parent.id : nil) : @post.id %>',
83
83
  post_draft_id: '<%= @post.id if @post.draft? %>',
84
84
  post_status: '<%= @post.status %>',
85
- _post_path: '<%= @post_type.posts.new({slug: '__-__', locale: '____'}).decorate.the_url() %>',
85
+ _post_urls: <%= raw @post_type.posts.new({slug: '__-__'}).decorate.the_urls.to_json %>,
86
86
  _drafts_path: '<%= (@post.draft? && !@post.new_record?) ? cama_admin_post_type_draft_path(@post_type.id, @post) : cama_admin_post_type_drafts_path(@post_type.id) %>',
87
87
  _posts_path: '<%= cama_admin_post_type_posts_path(@post_type.id) %>',
88
88
  _ajax_path: '<%= ajax_cama_admin_post_type_posts_path(@post_type.id) %>',
@@ -32,4 +32,8 @@
32
32
  <label for=""><%= t('camaleon_cms.admin.settings.security.captcha_user_register') %></label><br>
33
33
  <%= check_box :options, :security_captcha_user_register, {checked: @site.security_user_register_captcha_enabled?, class: "icheckbox0"}, "true", "" %>
34
34
  </div>
35
+ <div class="form-group">
36
+ <label for=""><%= t('camaleon_cms.admin.settings.security.need_validate_email') %></label><br>
37
+ <%= check_box :options, :need_validate_email, {checked: @site.need_validate_email?, class: "icheckbox0"}, "true", "" %>
38
+ </div>
35
39
  </div>
@@ -21,6 +21,13 @@
21
21
  <%= f.text_area :description, :class => "form-control translatable", :rows => 4 %>
22
22
  </div>
23
23
 
24
+ <div class="form-group">
25
+ <label><%= t('camaleon_cms.admin.post_type.icon', default: 'Icon') %></label>
26
+ <%= text_field_tag "meta[icon]", @post_type.get_option("icon", ''), class: 'form-control' %>
27
+ <small>Please enter any icon name from <a href="https://fortawesome.github.io/Font-Awesome/icons/" target="_blank">this site</a></small>
28
+ </div>
29
+
30
+ <hr/>
24
31
  <h4><%= t('camaleon_cms.admin.table.settings') %></h4>
25
32
 
26
33
  <!-- Settings -->
@@ -9,7 +9,6 @@
9
9
  <!-- END META SECTION -->
10
10
 
11
11
  <%= stylesheet_link_tag theme_asset_path("css/main.css") %>
12
- <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
13
12
  <%= javascript_include_tag theme_asset_path("js/main.js") %>
14
13
  <%= raw the_head %>
15
14
  </head>
@@ -1,10 +1,8 @@
1
-
2
-
3
1
  <% fields.each do |slug, field|
4
2
  field_key = field[:options][:field_key]
5
3
  %>
6
4
  <div class="field-box field-<%= slug %> field-type-<%= field_key %>">
7
- <strong><%= field[:name] %></strong><br/>
5
+ <strong><%= cama_print_i18n_value(field[:name]) %></strong><br/>
8
6
  <%
9
7
  values = field[:values].is_a?(Array) ? field[:values] : [field[:values]]
10
8
  %>
@@ -0,0 +1,3 @@
1
+ <p><%= t('camaleon_cms.admin.login.welcome') %> <%= @extra_data[:fullname] %></p>
2
+ <p><%= t('camaleon_cms.admin.login.confirm.text') %>:</p>
3
+ <p><%= @extra_data[:url] %></p>
@@ -3,8 +3,8 @@
3
3
  widget = @current_site.widgets.where("slug = ?", key).first
4
4
  %>
5
5
  <% if widget.present? %>
6
- <% if key == 'visits-counter' %>
7
- <%= render partial: plugin_view("admin/partials/table") %>
6
+ <% if (r = widget.renderer).present? %>
7
+ <%= render partial: r, locals: {attributes: attributes } %>
8
8
  <% else %>
9
9
  <%= raw widget[:description].translate %>
10
10
  <% end %>
@@ -7,7 +7,6 @@
7
7
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
9
9
  <%= stylesheet_link_tag "camaleon_cms/admin/admin-manifest", media: "all" %>
10
- <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
11
10
  <script>
12
11
  var root_url = '<%= cama_root_url %>';
13
12
  var root_admin_url = '<%= cama_admin_url %>';
@@ -1,6 +1,6 @@
1
1
  <footer class="main-footer">
2
2
  <div class="row">
3
- <div class="col-md-6"><strong>Copyright &copy; 2015-2016 <a href="http://camaleon.tuzitio.com">Camaleon CMS.</a> </strong>.</div>
3
+ <div class="col-md-6"><strong>Copyright &copy; 2015-2016 <a href="http://camaleon.tuzitio.com">Camaleon CMS.</a> </strong></div>
4
4
  <div class="col-md-6 hidden-xs">
5
5
  <div class="pull-left">
6
6
  <a id="link_see_intro" href="#" onclick="init_intro(); return false;"><i class="fa fa-tv"></i> See Intro.</a>
@@ -10,7 +10,6 @@
10
10
  <meta name="viewport" content="width=device-width, initial-scale=1" />
11
11
 
12
12
  <%= stylesheet_link_tag "camaleon_cms/bootstrap.min.css", media: "all" %>
13
- <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
14
13
  <%= javascript_include_tag "camaleon_cms/admin/login_manifest" %>
15
14
  <script>
16
15
  jQuery(function(){
@@ -7,7 +7,6 @@
7
7
  <%= raw the_head({}) if current_site.present? %>
8
8
  <title><%= (content_for?(:title) ? yield(:title) : t('camaleon_cms.admin.login.login')) %></title>
9
9
  <%= stylesheet_link_tag "camaleon_cms/admin/admin-basic-manifest", media: "all" %>
10
- <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
11
10
  <%= javascript_include_tag "camaleon_cms/admin/admin-basic-manifest" %>
12
11
  </head>
13
12
  <body class="hold-transition login-page">
@@ -12,18 +12,18 @@ module Sprockets
12
12
  # return them path (this prefix automatically the path with current theme location)
13
13
  # Sample: .container{ background: #ffffff url(asset_theme_path('img/patterns/pattern1.jpg')); }
14
14
  def asset_theme_path(path, options = {})
15
- asset_path(Autoload::Sass::Script::String.new("#{get_theme_prefix}/#{path.value}"), options)
15
+ asset_path(Autoload::Sass::Script::String.new("#{get_theme_prefix}/#{path.value}".gsub("//", "/")), options)
16
16
  end
17
17
 
18
18
  # return them path (this prefix automatically the path with current theme location)
19
- def asset_plugin_path(path, options = {})
20
- asset_path(Autoload::Sass::Script::String.new("#{get_plugin_prefix}/#{path.value}"), options)
19
+ # Sample: .container{ background: #ffffff asset-theme-url('img/patterns/pattern1.jpg'); }
20
+ def asset_theme_url(path, options = {})
21
+ asset_url(Autoload::Sass::Script::String.new("#{get_theme_prefix}/#{path.value}".gsub("//", "/")), options)
21
22
  end
22
23
 
23
24
  # return them path (this prefix automatically the path with current theme location)
24
- # Sample: .container{ background: #ffffff asset-theme-url('img/patterns/pattern1.jpg'); }
25
- def asset_theme_url(path, options = {})
26
- asset_url(Autoload::Sass::Script::String.new("#{get_theme_prefix}/#{path.value}"), options)
25
+ def asset_plugin_path(path, options = {})
26
+ asset_path(Autoload::Sass::Script::String.new("#{get_plugin_prefix}/#{path.value}"), options)
27
27
  end
28
28
 
29
29
  # return them path (this prefix automatically the path with current theme location)
@@ -135,6 +135,10 @@ en:
135
135
  send_mail_succes: 'Send email reset success.'
136
136
  send_mail_error: 'Not found email address.'
137
137
  invalid_caption: 'Invalid captcha'
138
+ email_not_validated: 'Email has not been validated.'
139
+ confirm_email_token_incorrect: 'URL incorrect'
140
+ confirm_email_token_expired: 'Confirm email URL expired'
141
+ confirm_email_success: 'Confirm email success!'
138
142
  personal_info: 'Personal info'
139
143
  please_login: 'Please login'
140
144
  reset_password: 'reset password'
@@ -152,6 +156,9 @@ en:
152
156
  last_name: "Last Name"
153
157
  email: "Email"
154
158
  remember_me: "Remember Me"
159
+ confirm:
160
+ text: "Please confirm your account by clicking this link"
161
+ subject: "Confirm your account"
155
162
  logout:
156
163
  log: 'Log'
157
164
  out: 'Out'
@@ -256,6 +263,7 @@ en:
256
263
  keywords: 'Keywords'
257
264
  default_layout: 'Default Layout'
258
265
  default_template: 'Default Template'
266
+ icon: 'Icon'
259
267
  message:
260
268
  error: 'Error class'
261
269
  error_term: 'Error term class'
@@ -346,6 +354,7 @@ en:
346
354
  filesystem_cdn: "CDN url"
347
355
  security:
348
356
  captcha_user_register: "Enable captcha on user registration?"
357
+ need_validate_email: "Need validate email?"
349
358
  message:
350
359
  language_updated: 'Your languages was configured.'
351
360
  site_updated: 'The site has been updated.'
@@ -550,6 +559,7 @@ en:
550
559
  requires_different_name: 'Requires different name'
551
560
  requires_different_username: 'Requires different username'
552
561
  requires_different_email: 'Requires different email'
562
+ created_pending_validate_email: "The user has been created, please confirm your email"
553
563
  new_photo: 'New Photo'
554
564
  others_permissions: 'Others permissions'
555
565
  profile: 'Profile'