camaleon_cms 0.1.4 → 0.1.5
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.
- checksums.yaml +4 -4
- data/app/apps/plugins/contact_form/config/custom_models.rb +3 -0
- data/app/apps/plugins/contact_form/contact_form_helper.rb +1 -4
- data/app/apps/plugins/visibility_post/assets/js/form.js +2 -2
- data/app/apps/plugins/visibility_post/visibility_post_helper.rb +2 -2
- data/app/assets/javascripts/admin/data.js +1 -0
- data/app/controllers/apps/plugins_admin_controller.rb +0 -2
- data/app/controllers/apps/plugins_front_controller.rb +0 -2
- data/app/controllers/apps/themes_admin_controller.rb +0 -2
- data/app/controllers/apps/themes_front_controller.rb +0 -2
- data/app/controllers/camaleon_controller.rb +22 -1
- data/app/controllers/frontend_controller.rb +0 -14
- data/app/helpers/hooks_helper.rb +6 -6
- data/app/helpers/plugins_helper.rb +4 -2
- data/app/helpers/short_code_helper.rb +27 -13
- data/app/helpers/site_helper.rb +2 -1
- data/app/helpers/theme_helper.rb +4 -2
- data/app/helpers/uploader_helper.rb +16 -9
- data/app/mailers/html_mailer.rb +1 -1
- data/app/views/admin/installers/form.html.erb +2 -2
- data/app/views/admin/plugins/info.html.erb +47 -0
- data/app/views/admin/settings/site.html.erb +1 -0
- data/app/views/layouts/admin/_flash_messages.html.erb +3 -4
- data/app/views/layouts/admin/installer.html.erb +1 -1
- data/app/views/shortcode_templates/widget.html.erb +1 -1
- data/config/initializers/active_record_extension.rb +8 -0
- data/config/initializers/assets.rb +8 -0
- data/config/initializers/cache_helper.rb +8 -0
- data/config/initializers/custom_initializers.rb +15 -0
- data/config/initializers/fix_ssl.rb +8 -3
- data/config/initializers/page_caching.rb +8 -0
- data/config/initializers/rufus_cron.rb +14 -4
- data/config/locales/admin/en.yml +2 -0
- data/config/locales/admin/es.yml +2 -0
- data/config/system.json +2 -5
- data/lib/camaleon_cms/engine.rb +5 -17
- data/lib/camaleon_cms/version.rb +1 -1
- data/lib/generators/camaleon_cms/install_template/system.json +0 -3
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 322873a45ef38a4a4f83887f1963bfe55e2b7ab4
|
4
|
+
data.tar.gz: 87a4662b7f099b0f8e1ef8606a56f0794935409b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3c6e1be0f889d9e35821c42415c005caaa1796c6ea98cecfe26ffafa6e88744c27b58d9bd3a3bd383e8edf26170041cef4825de500918cc396eb44d22340e21
|
7
|
+
data.tar.gz: 6701d5ff639c44fbe9fbec821b605e2d02789127d56c7568206070067963aa7814283f612521d60dc7d35ecf1e984c2a14a2d5f1fc4192e1dba32d0b49fb241d
|
@@ -25,7 +25,7 @@ module Plugins::ContactForm::ContactFormHelper
|
|
25
25
|
plugins[self_plugin_key.to_sym].each do |contact|
|
26
26
|
unless current_site.contact_forms.where(slug: contact[:slug]).first.present?
|
27
27
|
sba_data = ActionController::Parameters.new(contact)
|
28
|
-
contact_new = current_site.
|
28
|
+
contact_new = current_site.contact_forms.new(sba_data.permit(:name, :slug, :count, :description, :value, :settings))
|
29
29
|
if contact_new.save!
|
30
30
|
if contact[:get_field_groups] # save group fields
|
31
31
|
save_field_group(contact_new, contact[:get_field_groups])
|
@@ -78,9 +78,6 @@ module Plugins::ContactForm::ContactFormHelper
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def contact_form_app_before_load
|
81
|
-
Site.class_eval do
|
82
|
-
has_many :contact_forms, :class_name => "Plugins::ContactForm::Models::ContactForm", foreign_key: :site_id, dependent: :destroy
|
83
|
-
end
|
84
81
|
|
85
82
|
end
|
86
83
|
|
@@ -22,8 +22,8 @@ jQuery(function($){
|
|
22
22
|
//label.next().show();
|
23
23
|
}).filter(":checked").trigger("change");
|
24
24
|
|
25
|
-
var cal_input = $('#
|
26
|
-
cal_input.
|
25
|
+
var cal_input = $("#form-post").find('#published_from');
|
26
|
+
cal_input.datetimepicker({
|
27
27
|
language: CURRENT_LOCALE
|
28
28
|
});
|
29
29
|
});
|
@@ -88,12 +88,12 @@ module Plugins::VisibilityPost::VisibilityPostHelper
|
|
88
88
|
|
89
89
|
def form_html(post)
|
90
90
|
append_asset_libraries({"plugin_visibility"=> { js: [plugin_asset_path("visibility_post", "js/form.js")] }})
|
91
|
-
add_asset_library('
|
91
|
+
add_asset_library('datetimepicker')
|
92
92
|
|
93
93
|
"
|
94
94
|
<div class='form-group'>
|
95
95
|
<label class='control-label'>#{t('admin.post_type.published_date')}</label>
|
96
|
-
<div id='
|
96
|
+
<div id='published_from' data-locale='#{current_locale}' class='input-append date'>
|
97
97
|
<input type='text' name='post[published_at]' data-format='yyyy-MM-dd hh:mm:ss' value='#{@post[:published_at]}' />
|
98
98
|
<span class='add-on input-group-addon'><span class='glyphicon glyphicon-calendar'></span></span>
|
99
99
|
</div>
|
@@ -15,8 +15,6 @@ class Apps::PluginsAdminController < AdminController
|
|
15
15
|
@plugin = current_site.plugins.where(slug: plugin_name).first
|
16
16
|
return render_error(404) unless @plugin.active?
|
17
17
|
lookup_context.prefixes.prepend(params[:controller].sub("plugins/#{plugin_name}", "#{plugin_name}/views"))
|
18
|
-
self.prepend_view_path(File.join($camaleon_engine_dir, "app", 'apps', "plugins"))
|
19
|
-
self.prepend_view_path(Rails.root.join("app", 'apps', "plugins"))
|
20
18
|
end
|
21
19
|
|
22
20
|
end
|
@@ -15,8 +15,6 @@ class Apps::PluginsFrontController < FrontendController
|
|
15
15
|
@plugin = current_site.plugins.where(slug: plugin_name).first
|
16
16
|
return render_error(404) unless @plugin.active?
|
17
17
|
lookup_context.prefixes.prepend(params[:controller].sub("plugins/#{plugin_name}", "#{plugin_name}/views"))
|
18
|
-
self.prepend_view_path(File.join($camaleon_engine_dir, "app", 'apps', "plugins"))
|
19
|
-
self.prepend_view_path(Rails.root.join("app", 'apps', "plugins"))
|
20
18
|
end
|
21
19
|
|
22
20
|
end
|
@@ -15,8 +15,6 @@ class Apps::ThemesAdminController < AdminController
|
|
15
15
|
@theme = current_theme
|
16
16
|
return render_error(404) unless current_theme.slug == theme_name
|
17
17
|
lookup_context.prefixes.prepend(params[:controller].sub("themes/#{theme_name}", "#{theme_name}/views"))
|
18
|
-
self.append_view_path(Rails.root.join("app", 'apps', "themes"))
|
19
|
-
self.append_view_path(File.join($camaleon_engine_dir, "app", 'apps', "themes"))
|
20
18
|
end
|
21
19
|
|
22
20
|
end
|
@@ -15,8 +15,6 @@ class Apps::ThemesFrontController < FrontendController
|
|
15
15
|
@theme = current_theme
|
16
16
|
return render_error(404) unless current_theme.slug == theme_name
|
17
17
|
lookup_context.prefixes.prepend(params[:controller].sub("themes/#{theme_name}", "#{theme_name}/views"))
|
18
|
-
self.append_view_path(Rails.root.join("app", 'apps', "themes"))
|
19
|
-
self.append_view_path(File.join($camaleon_engine_dir, "app", 'apps', "themes"))
|
20
18
|
end
|
21
19
|
|
22
20
|
end
|
@@ -21,6 +21,7 @@ class CamaleonController < ApplicationController
|
|
21
21
|
include UploaderHelper
|
22
22
|
include Mobu::DetectMobile
|
23
23
|
|
24
|
+
prepend_before_action :camaleon_add_view_paths
|
24
25
|
prepend_before_action :load_custom_models
|
25
26
|
before_action :site_check_existence, except: [:render_error, :captcha]
|
26
27
|
before_action :before_actions, except: [:render_error, :captcha]
|
@@ -82,7 +83,27 @@ class CamaleonController < ApplicationController
|
|
82
83
|
def load_custom_models
|
83
84
|
if current_site.present?
|
84
85
|
site_load_custom_models(current_site)
|
85
|
-
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# add custom views of camaleon
|
90
|
+
def camaleon_add_view_paths
|
91
|
+
self.prepend_view_path(File.join($camaleon_engine_dir, "app", "apps", "plugins"))
|
92
|
+
self.prepend_view_path(Rails.root.join("app", "apps", 'plugins'))
|
93
|
+
|
94
|
+
self.prepend_view_path(File.join($camaleon_engine_dir, "app", "views", 'default_theme'))
|
95
|
+
self.prepend_view_path(Rails.root.join("app", "views", 'default_theme'))
|
96
|
+
|
97
|
+
if current_theme.present?
|
98
|
+
views_dir = "app/apps/themes/#{current_theme.slug}/views"
|
99
|
+
self.prepend_view_path(File.join($camaleon_engine_dir, views_dir).to_s)
|
100
|
+
self.prepend_view_path(Rails.root.join(views_dir).to_s)
|
101
|
+
end
|
102
|
+
|
103
|
+
if current_site.present?
|
104
|
+
views_site_dir = "app/apps/themes/#{current_site.id}/views"
|
105
|
+
self.prepend_view_path(File.join($camaleon_engine_dir, views_site_dir).to_s)
|
106
|
+
self.prepend_view_path(Rails.root.join(views_site_dir).to_s)
|
86
107
|
end
|
87
108
|
end
|
88
109
|
|
@@ -204,20 +204,6 @@ class FrontendController < CamaleonController
|
|
204
204
|
lookup_context.prefixes.delete(params[:controller])
|
205
205
|
lookup_context.prefixes.prepend(params[:controller].sub("themes/#{current_theme.slug}/", ""))
|
206
206
|
end
|
207
|
-
|
208
|
-
self.prepend_view_path(File.join($camaleon_engine_dir, "app", "apps", "plugins"))
|
209
|
-
self.prepend_view_path(Rails.root.join("app", "apps", 'plugins'))
|
210
|
-
|
211
|
-
self.prepend_view_path(File.join($camaleon_engine_dir, "app", "views", 'default_theme'))
|
212
|
-
self.prepend_view_path(Rails.root.join("app", "views", 'default_theme'))
|
213
|
-
|
214
|
-
views_dir = "app/apps/themes/#{current_theme.slug}/views"
|
215
|
-
self.prepend_view_path(File.join($camaleon_engine_dir, views_dir).to_s)
|
216
|
-
self.prepend_view_path(Rails.root.join(views_dir).to_s)
|
217
|
-
|
218
|
-
views_site_dir = "app/apps/themes/#{current_site.id}/views"
|
219
|
-
self.prepend_view_path(File.join($camaleon_engine_dir, views_site_dir).to_s)
|
220
|
-
self.prepend_view_path(Rails.root.join(views_site_dir).to_s)
|
221
207
|
theme_init()
|
222
208
|
end
|
223
209
|
|
data/app/helpers/hooks_helper.rb
CHANGED
@@ -42,12 +42,12 @@ module HooksHelper
|
|
42
42
|
send(hook) if params.nil?
|
43
43
|
rescue
|
44
44
|
plugin_load_helpers(plugin)
|
45
|
-
begin
|
46
|
-
|
47
|
-
|
48
|
-
rescue => e
|
49
|
-
|
50
|
-
end
|
45
|
+
# begin
|
46
|
+
send(hook, params) unless params.nil?
|
47
|
+
send(hook) if params.nil?
|
48
|
+
# rescue => e
|
49
|
+
# Rails.logger.info "--------------------------------------- error executing hook '#{hook_key}' for plugin '#{plugin["title"]}': #{e.message} --- #{e.backtrace.join("\n")}"
|
50
|
+
# end
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -81,7 +81,8 @@ module PluginsHelper
|
|
81
81
|
# asset: (String) asset name
|
82
82
|
# sample: <script src="<%= plugin_asset_path("my_plugin", "js/admin.js") %>"></script> => /assets/plugins/my_plugin/assets/css/main-54505620f.css
|
83
83
|
def plugin_asset_path(plugin_key, asset)
|
84
|
-
|
84
|
+
p = "plugins/#{plugin_key}/assets/#{asset}"
|
85
|
+
asset_url(p) rescue p
|
85
86
|
end
|
86
87
|
|
87
88
|
# return the full url for asset of current plugin:
|
@@ -90,7 +91,8 @@ module PluginsHelper
|
|
90
91
|
# sample:
|
91
92
|
# plugin_asset_url("css/main.css") => return: http://myhost.com/assets/plugins/my_plugin/assets/css/main-54505620f.css
|
92
93
|
def plugin_asset_url(asset, plugin_key = nil)
|
93
|
-
|
94
|
+
p = "plugins/#{plugin_key || self_plugin_key}/assets/#{asset}"
|
95
|
+
asset_url(p) rescue p
|
94
96
|
end
|
95
97
|
|
96
98
|
|
@@ -16,8 +16,9 @@ module ShortCodeHelper
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# add shortcode
|
19
|
-
# key:
|
19
|
+
# key: shortcode key
|
20
20
|
# template: template to render, if nil will render "shortcode_templates/<key>"
|
21
|
+
# Also can be a function to execute that instead a render, sample: lambda{|attrs, args| return "my custom content"; }
|
21
22
|
# descr: description for shortcode
|
22
23
|
def shortcode_add(key, template = nil, descr = '')
|
23
24
|
@_shortcodes << key
|
@@ -46,23 +47,39 @@ module ShortCodeHelper
|
|
46
47
|
args = {owner: args} unless args.is_a?(Hash)
|
47
48
|
content.scan(/(\[(#{@_shortcodes.join("|")})\s?(.*?)\])/) do |item|
|
48
49
|
shortcode, code, attrs = item
|
49
|
-
|
50
|
-
content = content.sub(shortcode, res)
|
50
|
+
content = content.sub(shortcode, _eval_shortcode(code, attrs, args))
|
51
51
|
end
|
52
52
|
content
|
53
53
|
end
|
54
54
|
|
55
55
|
# render direct a shortcode
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
56
|
+
# text: text that contain the shortcode
|
57
|
+
# key: shortcode key
|
58
|
+
# template: template to render, if nil this will render default render file
|
59
|
+
# Also can be a function to execute that instead a render, sample: lambda{|attrs, args| return "my custom content"; }
|
60
|
+
# render_shortcode("asda dasdasdas[owen a='1'] [bbb] sdasdas dasd as das[owen a=213]", "owen", lambda{|attrs, args| puts attrs; return "my test"; })
|
61
|
+
def render_shortcode(text, key, template = nil)
|
62
|
+
text.scan(/(\[(#{key})\s?(.*?)\])/).each do |item|
|
63
|
+
shortcode, code, attrs = item
|
64
|
+
text = text.sub(shortcode, _eval_shortcode(code, attrs, {}, template))
|
65
|
+
end
|
66
|
+
text
|
63
67
|
end
|
64
68
|
|
65
69
|
private
|
70
|
+
# determine the content to replace instead the shortcode
|
71
|
+
# return string
|
72
|
+
def _eval_shortcode(code, attrs, args={}, template = nil)
|
73
|
+
template ||= (@_shortcodes_template[code].present? ? @_shortcodes_template[code] : "shortcode_templates/#{code}")
|
74
|
+
if @_shortcodes_template[code].class.name == "Proc"
|
75
|
+
res = @_shortcodes_template[code].call(attributes: _shortcode_parse_attr(attrs), args: args)
|
76
|
+
else
|
77
|
+
res = render :file => template, :locals => {attributes: _shortcode_parse_attr(attrs), args: args}
|
78
|
+
end
|
79
|
+
res
|
80
|
+
end
|
81
|
+
|
82
|
+
# parse the attributes of a shortcode
|
66
83
|
def _shortcode_parse_attr(text)
|
67
84
|
res = {}
|
68
85
|
return res unless text.present?
|
@@ -76,7 +93,4 @@ module ShortCodeHelper
|
|
76
93
|
end
|
77
94
|
res
|
78
95
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
82
96
|
end
|
data/app/helpers/site_helper.rb
CHANGED
@@ -110,7 +110,8 @@ module SiteHelper
|
|
110
110
|
def site_load_custom_models(site)
|
111
111
|
PluginRoutes.enabled_apps(site).each{ |app|
|
112
112
|
s = File.join(app["path"], "config", "custom_models.rb")
|
113
|
-
require_relative s if File.exist?(s)
|
113
|
+
# require_relative s if File.exist?(s)
|
114
|
+
eval(File.read(s)) if File.exist?(s)
|
114
115
|
}
|
115
116
|
end
|
116
117
|
|
data/app/helpers/theme_helper.rb
CHANGED
@@ -26,7 +26,8 @@ module ThemeHelper
|
|
26
26
|
# asset: asset file name, if asset is present return full path to this asset
|
27
27
|
# sample: <script src="<%= theme_asset_path("js/admin.js") %>"></script> => return: /assets/themes/my_theme/assets/css/main-54505620f.css
|
28
28
|
def theme_asset_path(asset = nil, theme_name = nil)
|
29
|
-
|
29
|
+
p = "themes/#{theme_name || current_theme.slug }/assets/#{asset}"
|
30
|
+
asset_url(p) rescue p
|
30
31
|
end
|
31
32
|
|
32
33
|
# return the full url for asset of current theme:
|
@@ -35,7 +36,8 @@ module ThemeHelper
|
|
35
36
|
# sample:
|
36
37
|
# theme_asset_url("css/main.css") => return: http://myhost.com/assets/themes/my_theme/assets/css/main-54505620f.css
|
37
38
|
def theme_asset_url(asset, theme_name = nil)
|
38
|
-
|
39
|
+
p = "themes/#{theme_name || current_theme.slug }/assets/#{asset}"
|
40
|
+
asset_url(p) rescue p
|
39
41
|
end
|
40
42
|
|
41
43
|
# return theme full view path
|
@@ -85,15 +85,22 @@ module UploaderHelper
|
|
85
85
|
return res
|
86
86
|
end
|
87
87
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
88
|
+
# check for destroy the file in the future
|
89
|
+
if settings[:temporal_time] > 0
|
90
|
+
if defined?(ActiveJob::Base)
|
91
|
+
TemporalFileJob.set(wait: settings[:is_temporal]).perform_later(file_path)
|
92
|
+
{
|
93
|
+
"file" => file_path,
|
94
|
+
"name"=> File.basename(file_path),
|
95
|
+
"size"=> File.size(file_path),
|
96
|
+
"url"=> file_path_to_url(file_path),
|
97
|
+
"type"=> uploaded_io.content_type,
|
98
|
+
"deleteUrl"=> ""
|
99
|
+
}
|
100
|
+
else
|
101
|
+
Rails.logger.error " ******************** Camaleon: This version of rails doesn't support active job, please install a gem or manage your file destroy manually."
|
102
|
+
end
|
103
|
+
end
|
97
104
|
end
|
98
105
|
|
99
106
|
# helper to find an available filename for file_path in that directory
|
data/app/mailers/html_mailer.rb
CHANGED
@@ -32,7 +32,7 @@ class HtmlMailer < ActionMailer::Base
|
|
32
32
|
password: current_site.get_option("email_pass"),
|
33
33
|
address: current_site.get_option("email_server"),
|
34
34
|
port: current_site.get_option("email_port"),
|
35
|
-
domain: "localhost",
|
35
|
+
domain: (current_site.the_url.to_s.parse_domain rescue "localhost"),
|
36
36
|
authentication: "plain",
|
37
37
|
enable_starttls_auto: true
|
38
38
|
}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<%= form_for @site, url: save_admin_installers_path, html: {class: 'form-horizontal', style: "color: #ccc;"} do |f| %>
|
3
3
|
<%= render partial: 'layouts/admin/form_error', locals: {data: @site} %>
|
4
4
|
<div class="form-group">
|
5
|
-
|
5
|
+
<%= f.label t('admin.button.domain') %><br>
|
6
6
|
<%= f.text_field :slug, :class => "form-control required" %>
|
7
7
|
</div>
|
8
8
|
<div class="form-group">
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<%= f.text_field :name, :class => "form-control required" %>
|
11
11
|
</div>
|
12
12
|
<div class="form-group">
|
13
|
-
|
13
|
+
<%= f.label t('admin.post_type.template') %><br>
|
14
14
|
<%= select_tag :theme, options_for_select(PluginRoutes.all_themes.map{|theme| [theme["name"], theme["key"]] }), :class => "form-control required" %>
|
15
15
|
</div>
|
16
16
|
<div class="form-group">
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<div>
|
2
|
+
<div class="banner">
|
3
|
+
<%= image_tag(plugin_asset_path(@plugin["slug"], @plugin["banner"]), class: "banner_bg") if @plugin["banner"].present? %>
|
4
|
+
<%= image_tag(plugin_asset_path(@plugin["slug"], @plugin["thumb"]), class: "logo_plugin") if @plugin["thumb"].present? %>
|
5
|
+
<h3 class="title_plugin"><%= @plugin["title"] %></h3>
|
6
|
+
</div>
|
7
|
+
<div class="row">
|
8
|
+
<div class="col-md-9">
|
9
|
+
<%= @plugin["description"] %>
|
10
|
+
</div>
|
11
|
+
<div class="col-md-3">
|
12
|
+
<%= link_to("Version #{@plugin["version"]}", "", class: "btn btn-primary") %>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
<!-- Nav tabs -->
|
16
|
+
<ul class="nav nav-tabs" role="tablist">
|
17
|
+
<% if @plugin["html_description"].present? %>
|
18
|
+
<li role="presentation" class="active"><a href="#tab_plugin_descr" aria-controls="home" role="tab" data-toggle="tab">Description</a></li>
|
19
|
+
<% end %>
|
20
|
+
<% if @plugin["html_installation"].present? %>
|
21
|
+
<li role="presentation"><a href="#tab_installation" aria-controls="profile" role="tab" data-toggle="tab">Installation</a></li>
|
22
|
+
<% end %>
|
23
|
+
|
24
|
+
<% if @plugin["screenshots"].present? %>
|
25
|
+
<li role="presentation"><a href="#tab_screenshots" aria-controls="messages" role="tab" data-toggle="tab">Screenshots</a></li>
|
26
|
+
<% end %>
|
27
|
+
</ul>
|
28
|
+
|
29
|
+
<!-- Tab panes -->
|
30
|
+
<div class="tab-content">
|
31
|
+
<% if @plugin["html_description"].present? %>
|
32
|
+
<div role="tabpanel" class="tab-pane active" id="tab_plugin_descr"> <%= render file: File.join(@plugin["path"], "assets", @plugin["html_description"]) %> </div>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<% if @plugin["html_installation"].present? %>
|
36
|
+
<div role="tabpanel" class="tab-pane active" id="tab_installation"> <%= render file: File.join(@plugin["path"], "assets", @plugin["html_installation"]) %> </div>
|
37
|
+
<% end %>
|
38
|
+
|
39
|
+
<% if @plugin["screenshots"].present? %>
|
40
|
+
<div role="tabpanel" class="tab-pane" id="tab_screenshots">
|
41
|
+
<% @plugin["screenshots"].each do |s| %>
|
42
|
+
<%= link_to(image_tag(plugin_asset_path(@plugin["slug"], s)), plugin_asset_path(@plugin["slug"], s), target: "_blank", class: "screen_item") %>
|
43
|
+
<% end %>
|
44
|
+
</div>
|
45
|
+
<% end %>
|
46
|
+
</div>
|
47
|
+
</div>
|
@@ -119,6 +119,7 @@
|
|
119
119
|
</div>
|
120
120
|
|
121
121
|
<div id="tab-email_settings" class="tab-pane col-md-10 col-md-offset-1">
|
122
|
+
<div class="alert alert-info">Gmail Need Permissions: <a href="http://know.mailsbestfriend.com/smtp_error_password_command_failed_5345714-1194946499.shtml" target="_blank">Check here.</a> </div>
|
122
123
|
<div class="form-group">
|
123
124
|
<%= label_tag t('admin.settings.email_enabled') %><br>
|
124
125
|
<%= check_box :options, :mailer_enabled, {checked: @site.get_option("mailer_enabled") == 1}, 1, 0 %>
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
<% if flash[:notice] %>
|
3
2
|
<div class="flash_messages">
|
4
3
|
<div class="alert alert-success">
|
@@ -7,11 +6,11 @@
|
|
7
6
|
</div>
|
8
7
|
</div>
|
9
8
|
<% end %>
|
10
|
-
<% if params[:
|
9
|
+
<% if params[:info] %>
|
11
10
|
<div class="flash_messages">
|
12
|
-
<div class="alert alert-
|
11
|
+
<div class="alert alert-info">
|
13
12
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
14
|
-
<%= raw(params[:
|
13
|
+
<%= raw(params[:info]) %>
|
15
14
|
</div>
|
16
15
|
</div>
|
17
16
|
<% end %>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<div class="login-box animated fadeInDown">
|
25
25
|
<div class="login-logo text-center"><%= image_tag("camaleon.png") %></div>
|
26
26
|
<div class="login-body">
|
27
|
-
<div class="login-title"><%= raw t('
|
27
|
+
<div class="login-title"><%= raw t('camaleon_message', default: "Welcome to Camaleon CMS") %> </div>
|
28
28
|
<div class="">
|
29
29
|
<%= yield %>
|
30
30
|
</div>
|
@@ -1,3 +1,11 @@
|
|
1
|
+
=begin
|
2
|
+
Camaleon CMS is a content management system
|
3
|
+
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
+
Email: owenperedo@gmail.com
|
5
|
+
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.
|
6
|
+
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.
|
7
|
+
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
+
=end
|
1
9
|
module ActiveRecordExtras
|
2
10
|
module Relation
|
3
11
|
extend ActiveSupport::Concern
|
@@ -1,3 +1,11 @@
|
|
1
|
+
=begin
|
2
|
+
Camaleon CMS is a content management system
|
3
|
+
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
+
Email: owenperedo@gmail.com
|
5
|
+
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.
|
6
|
+
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.
|
7
|
+
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
+
=end
|
1
9
|
# Be sure to restart your server when you modify this file.
|
2
10
|
|
3
11
|
# Version of your assets, change this if you want to expire all your assets.
|
@@ -1,3 +1,11 @@
|
|
1
|
+
=begin
|
2
|
+
Camaleon CMS is a content management system
|
3
|
+
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
+
Email: owenperedo@gmail.com
|
5
|
+
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.
|
6
|
+
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.
|
7
|
+
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
+
=end
|
1
9
|
# customizable cache path for cache inline
|
2
10
|
module ActiveSupport
|
3
11
|
module Cache
|
@@ -0,0 +1,15 @@
|
|
1
|
+
=begin
|
2
|
+
Camaleon CMS is a content management system
|
3
|
+
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
+
Email: owenperedo@gmail.com
|
5
|
+
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.
|
6
|
+
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.
|
7
|
+
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
+
=end
|
9
|
+
# load all custom initializers of plugins or themes
|
10
|
+
PluginRoutes.all_enabled_apps.each do |ap|
|
11
|
+
if ap["path"].present?
|
12
|
+
f = File.join(ap["path"], "config", "initializer.rb")
|
13
|
+
eval(File.read(f)) if File.exist?(f)
|
14
|
+
end
|
15
|
+
end
|
@@ -5,10 +5,15 @@ module Net
|
|
5
5
|
class HTTP
|
6
6
|
alias_method :original_use_ssl=, :use_ssl=
|
7
7
|
|
8
|
+
# fix ssl for facebook connection
|
8
9
|
def use_ssl=(flag)
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
if @address.include?("facebook.com")
|
11
|
+
self.ca_file = Rails.root.join('lib/ca-bundle.crt').to_s
|
12
|
+
self.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
13
|
+
self.original_use_ssl = flag
|
14
|
+
else
|
15
|
+
super
|
16
|
+
end
|
12
17
|
end
|
13
18
|
end
|
14
19
|
end
|
@@ -1,3 +1,11 @@
|
|
1
|
+
=begin
|
2
|
+
Camaleon CMS is a content management system
|
3
|
+
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
+
Email: owenperedo@gmail.com
|
5
|
+
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.
|
6
|
+
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.
|
7
|
+
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
+
=end
|
1
9
|
module ActionController
|
2
10
|
module Caching
|
3
11
|
module Pages extend ActiveSupport::Concern
|
@@ -1,3 +1,11 @@
|
|
1
|
+
=begin
|
2
|
+
Camaleon CMS is a content management system
|
3
|
+
Copyright (C) 2015 by Owen Peredo Diaz
|
4
|
+
Email: owenperedo@gmail.com
|
5
|
+
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.
|
6
|
+
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.
|
7
|
+
See the GNU Affero General Public License (GPLv3) for more details.
|
8
|
+
=end
|
1
9
|
begin
|
2
10
|
require 'rufus-scheduler'
|
3
11
|
$scheduler = Rufus::Scheduler.singleton
|
@@ -36,9 +44,11 @@ end
|
|
36
44
|
|
37
45
|
####### DELAYED JOBS
|
38
46
|
# auto delete file after a time
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
47
|
+
if defined?(ActiveJob::Base)
|
48
|
+
class TemporalFileJob < ActiveJob::Base
|
49
|
+
queue_as "destroy_temporal_file"
|
50
|
+
def perform(file_path)
|
51
|
+
FileUtils.rm_rf(file_path) if File.exist?(file_path) && !File.directory?(file_path)
|
52
|
+
end
|
43
53
|
end
|
44
54
|
end
|
data/config/locales/admin/en.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
en:
|
2
|
+
camaleon_message: "Welcome to Camaleon CMS"
|
2
3
|
admin:
|
3
4
|
button:
|
4
5
|
activity: 'Activity'
|
@@ -53,6 +54,7 @@ en:
|
|
53
54
|
yes: 'Yes'
|
54
55
|
out_yes: 'Yes'
|
55
56
|
out_not: 'No'
|
57
|
+
domain: "Domain"
|
56
58
|
comments:
|
57
59
|
comments_list_post: 'List Comments Post'
|
58
60
|
responses: 'Responses'
|
data/config/locales/admin/es.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
es:
|
3
|
+
camaleon_message: "Bienvenido a Camaleon CMS"
|
3
4
|
admin:
|
4
5
|
button:
|
5
6
|
activity: 'Actividad'
|
@@ -54,6 +55,7 @@ es:
|
|
54
55
|
yes: 'Si'
|
55
56
|
out_yes: 'Si'
|
56
57
|
out_not: 'No'
|
58
|
+
domain: "Dominio"
|
57
59
|
comments:
|
58
60
|
comments_list_post: 'Lista Comentarios de Articulos'
|
59
61
|
responses: 'Respuestas'
|
data/config/system.json
CHANGED
@@ -1,16 +1,13 @@
|
|
1
1
|
{
|
2
2
|
"default_template": "default", // default template name for new sites
|
3
|
-
"locale": "en", // Default locale, here all locales: https://github.com/svenfuchs/rails-i18n
|
4
|
-
"time_zone": "La Paz", // Default Time zone, here all timezones: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
|
5
3
|
"hooks": { }, // system hooks
|
6
4
|
"default_plugins": ["front_cache", "contact_form", "attack"], // Default plugins installed for each new site
|
7
5
|
"available_languages": ["es", "en", "fr", "zh", "de", "it", "pt"], // Available languages for frontend panel, here all locales: https://github.com/svenfuchs/rails-i18n
|
8
6
|
"admin_available_languages": ["en", "es"], //Available languages for the admin panel
|
9
|
-
"base_domain": "localhost:
|
7
|
+
"base_domain": "localhost:3000", // primary domain
|
10
8
|
"share_sessions": true, // (boolean) share user sessions between subdomains of base_domain (only for users_share_sites = true)
|
11
9
|
"default_user_role": "client", // default user role for all new users
|
12
|
-
"users_share_sites": true
|
13
|
-
"version": "0.0.1"
|
10
|
+
"users_share_sites": true //(boolean) true: permit to share users between sites, false: All users are assigned for a unique site.
|
14
11
|
}
|
15
12
|
|
16
13
|
// Note: after any change in this file, you need to restart your server to apply changes.
|
data/lib/camaleon_cms/engine.rb
CHANGED
@@ -3,18 +3,11 @@ Dir[File.join($camaleon_engine_dir, "lib", "ext", "**", "*.rb")].each{ |f| requi
|
|
3
3
|
module CamaleonCms
|
4
4
|
class Engine < ::Rails::Engine
|
5
5
|
config.before_initialize do |app|
|
6
|
-
app.console
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
site = Site.first.decorate
|
12
|
-
site_console_switch(site)
|
13
|
-
puts "*************** Camaleon CMS Console Added for \"#{site.the_title}\", change this by: ***************"
|
14
|
-
puts "- include SiteHelper "
|
15
|
-
puts "- site_console_switch(site = nil)"
|
16
|
-
rescue => e
|
17
|
-
puts "**************** Errors starting camaleon cms in console: #{e.message}"
|
6
|
+
if app.respond_to?(:console)
|
7
|
+
app.console do
|
8
|
+
puts "******** Camaleon CMS: To use custom models and helpers of installed plugins, write this: ********"
|
9
|
+
puts "include SiteHelper; site_console_switch(Site.first.decorate);"
|
10
|
+
puts "*********** To change current site, use: site_console_switch(site) *************"
|
18
11
|
end
|
19
12
|
end
|
20
13
|
end
|
@@ -27,8 +20,6 @@ module CamaleonCms
|
|
27
20
|
engine_dir = File.expand_path("../../../", __FILE__)
|
28
21
|
app.config.i18n.load_path += Dir[File.join($camaleon_engine_dir, 'config', 'locales', '**', '*.{rb,yml}')]
|
29
22
|
app.config.i18n.enforce_available_locales = false
|
30
|
-
app.config.i18n.default_locale = PluginRoutes.system_info[:locale]
|
31
|
-
app.config.time_zone = PluginRoutes.system_info[:time_zone]
|
32
23
|
PluginRoutes.all_apps.each{ |info| app.config.i18n.load_path += Dir[File.join(info["path"], "config", "locales", '*.{rb,yml}')] }
|
33
24
|
|
34
25
|
# assets
|
@@ -43,9 +34,6 @@ module CamaleonCms
|
|
43
34
|
app.routes_reloader.paths.push(File.join(engine_dir, "config", "routes", "frontend.rb"))
|
44
35
|
# Dir[File.join(engine_dir, "config", "routes", "*.rb")].each{|r| app.routes_reloader.paths.unshift(r) }
|
45
36
|
|
46
|
-
# cache control
|
47
|
-
app.config.cache_store = :file_store, Rails.root.join("tmp","cache","vars")
|
48
|
-
|
49
37
|
# extra configuration for plugins
|
50
38
|
app.config.autoload_paths += %W{#{app.config.root}/app/apps/**/}
|
51
39
|
PluginRoutes.all_plugins.each{ |plugin| app.config.paths["db/migrate"] << File.join(plugin["path"], "migrate") if Dir.exist?(File.join(plugin["path"], "migrate")) }
|
data/lib/camaleon_cms/version.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
1
|
{
|
2
|
-
"default_template": "default", // default template name for new sites
|
3
|
-
"locale": "en", // Default locale, here all locales: https://github.com/svenfuchs/rails-i18n
|
4
|
-
"time_zone": "La Paz", // Default Time zone, here all timezones: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
|
5
2
|
"base_domain": "localhost:3001", // primary domain
|
6
3
|
"share_sessions": true, // (boolean) share user sessions between subdomains of base_domain (only for users_share_sites = true)
|
7
4
|
"default_user_role": "client", // default user role for all new users
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camaleon_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Owen Peredo Diaz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Camaleon CMS is a dynamic and advanced content management system based
|
14
14
|
on Ruby on Rails 4 as an alternative to Wordpress.
|
@@ -48,6 +48,7 @@ files:
|
|
48
48
|
- app/apps/plugins/contact_form/assets/js/form-builder/vendor.js
|
49
49
|
- app/apps/plugins/contact_form/assets/js/readme.txt
|
50
50
|
- app/apps/plugins/contact_form/config/config.json
|
51
|
+
- app/apps/plugins/contact_form/config/custom_models.rb
|
51
52
|
- app/apps/plugins/contact_form/config/locales/readme.txt
|
52
53
|
- app/apps/plugins/contact_form/config/locales/translation.yml
|
53
54
|
- app/apps/plugins/contact_form/config/routes_admin.txt
|
@@ -491,6 +492,7 @@ files:
|
|
491
492
|
- app/views/admin/media/index.html.erb
|
492
493
|
- app/views/admin/plugins/_plugins_list.html.erb
|
493
494
|
- app/views/admin/plugins/index.html.erb
|
495
|
+
- app/views/admin/plugins/info.html.erb
|
494
496
|
- app/views/admin/post_tags/_form.html.erb
|
495
497
|
- app/views/admin/post_tags/edit.html.erb
|
496
498
|
- app/views/admin/post_tags/index.html.erb
|
@@ -588,6 +590,7 @@ files:
|
|
588
590
|
- config/initializers/active_record_extension.rb
|
589
591
|
- config/initializers/assets.rb
|
590
592
|
- config/initializers/cache_helper.rb
|
593
|
+
- config/initializers/custom_initializers.rb
|
591
594
|
- config/initializers/elfinder.rb
|
592
595
|
- config/initializers/fix_ssl.rb
|
593
596
|
- config/initializers/mobu.rb
|