camaleon_cms 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/assets/js/form-builder/formbuilder.js +1 -1
- data/app/apps/plugins/contact_form/contact_form_html_helper.rb +21 -43
- data/app/apps/plugins/contact_form/front_controller.rb +47 -36
- data/app/apps/plugins/contact_form/views/admin_forms/edit.html.erb +0 -20
- data/app/apps/plugins/contact_form/views/contact_form/_submission.html.erb +26 -0
- data/app/controllers/concerns/frontend_concern.rb +0 -53
- data/app/helpers/admin/application_helper.rb +1 -1
- data/app/helpers/site_helper.rb +1 -1
- data/app/views/layouts/admin/_footer.html.erb +2 -2
- data/config/initializers/sass.rb +83 -36
- data/config/sitemap.rb +1 -0
- data/lib/camaleon_cms.rb +1 -0
- data/lib/camaleon_cms/version.rb +1 -1
- data/lib/generators/camaleon_cms/gem_theme_generator.rb +122 -0
- data/lib/generators/camaleon_cms/gem_theme_template/app/controllers/plugins/my_plugin/admin_controller.rb +8 -0
- data/lib/generators/camaleon_cms/gem_theme_template/app/controllers/plugins/my_plugin/front_controller.rb +8 -0
- data/lib/generators/camaleon_cms/gem_theme_template/app/helpers/plugins/my_plugin/main_helper.rb +22 -0
- data/lib/generators/camaleon_cms/gem_theme_template/app/models/plugins/my_plugin/my_plugin.rb +12 -0
- data/lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/admin/index.html.erb +2 -0
- data/lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/front/index.html.erb +2 -0
- data/lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/layouts/readme.txt +2 -0
- data/lib/generators/camaleon_cms/gem_theme_template/config/camaleon_plugin.json +21 -0
- data/lib/plugin_routes.rb +2 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac6264aa837e1bf65d11ef13a9ddee7d7d287a7c
|
4
|
+
data.tar.gz: 030b3f0ba1bc3720d79aa2b99923bb812f019f95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14c3f2a6edc55438f0788693fa764c817a7b26bd899774ace020d402ab7208561380629b17a29720e2483368b7955252d98bd5379b0ce029c5f2a01eb63b39a4
|
7
|
+
data.tar.gz: b1939cf9c2dc983e74ce60eff0580a232aa534da332cca90addba07b9899ffb0db33a4089ff97be49f96915930f356ff21c168518f8c8b747bc39e0a98225d3e
|
@@ -1163,7 +1163,7 @@ with (obj) {
|
|
1163
1163
|
'</ul>' +
|
1164
1164
|
'</div>\n' +
|
1165
1165
|
'<div class=\'panel-body\'>\n' +
|
1166
|
-
'<div class=\'fb-no-response-fields\'>'+
|
1166
|
+
'<div class=\'fb-no-response-fields\'>'+I18n("msg.no_response_fields")+'</div>\n ' +
|
1167
1167
|
'<div class=\'fb-response-fields\'></div>\n' +
|
1168
1168
|
'</div>\n' +
|
1169
1169
|
'</div>\n' +
|
@@ -23,7 +23,7 @@ module Plugins::ContactForm::ContactFormHtmlHelper
|
|
23
23
|
current_site.contact_forms.where({parent_id: id})
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def form_value_rescue(form)
|
27
27
|
JSON.parse(form.settings).to_sym rescue form.value
|
28
28
|
end
|
29
29
|
|
@@ -34,7 +34,7 @@ module Plugins::ContactForm::ContactFormHtmlHelper
|
|
34
34
|
object.each do |ob|
|
35
35
|
temp = "<div class='form-group'>
|
36
36
|
<label>[label ci]</span></label>
|
37
|
-
#{
|
37
|
+
#{'<p>[descr ci]</p>' if ob[:field_options][:description].present?}
|
38
38
|
<div>[ci]</div>
|
39
39
|
</div>"
|
40
40
|
|
@@ -59,18 +59,16 @@ module Plugins::ContactForm::ContactFormHtmlHelper
|
|
59
59
|
temp2= form_select_multiple_bootstrap(ob, ob[:label], "checkbox",values)
|
60
60
|
when 'text', 'website', 'email'
|
61
61
|
class_type = ""
|
62
|
-
|
63
62
|
class_type = "railscf-field-#{ob[:field_type]}" if ob[:field_type]=="website"
|
64
63
|
class_type = "railscf-field-#{ob[:field_type]}" if ob[:field_type]=="email"
|
65
|
-
|
66
|
-
temp2= "<input #{ob[:custom_attrs].to_attr_format} type=\"#{ob[:field_type]}\" value=\"#{values[cid]}\" name=\"#{f_name}\" class=\"#{ob[:custom_class]} #{class_type}\">"
|
64
|
+
temp2 = "<input #{ob[:custom_attrs].to_attr_format} type=\"#{ob[:field_type]}\" value=\"#{values[cid]}\" name=\"#{f_name}\" class=\"#{ob[:custom_class]} #{class_type}\">"
|
67
65
|
when 'captcha'
|
68
|
-
temp2= captcha_tag(5, {}, {class: "#{ob[:custom_class]} field-captcha required"}.merge(ob[:custom_attrs]))
|
66
|
+
temp2 = captcha_tag(5, {}, {class: "#{ob[:custom_class]} field-captcha required"}.merge(ob[:custom_attrs]))
|
69
67
|
when 'file'
|
70
68
|
class_type = "railscf-field-#{ob[:field_type]}" if ob[:field_type]=="website"
|
71
|
-
temp2=
|
69
|
+
temp2 = "<input multiple=\"multiple\" type=\"file\" value=\"\" name=\"#{f_name}\" #{ob[:custom_attrs].to_attr_format} class=\"#{class_type} #{ob[:custom_class]}\">"
|
72
70
|
when 'dropdown'
|
73
|
-
temp2=
|
71
|
+
temp2 = form_select_multiple_bootstrap(ob, ob[:label], "select",values)
|
74
72
|
else
|
75
73
|
end
|
76
74
|
r[:template] = r[:template].sub('[label ci]', for_name).sub('[ci]', temp2)
|
@@ -81,7 +79,6 @@ module Plugins::ContactForm::ContactFormHtmlHelper
|
|
81
79
|
end
|
82
80
|
|
83
81
|
def form_select_multiple_bootstrap(ob, title, type, values)
|
84
|
-
|
85
82
|
options = ob[:field_options][:options]
|
86
83
|
include_other_option = ob[:field_options][:include_other_option]
|
87
84
|
other_input = ""
|
@@ -91,7 +88,7 @@ module Plugins::ContactForm::ContactFormHtmlHelper
|
|
91
88
|
cid = ob[:cid].to_sym
|
92
89
|
html = ""
|
93
90
|
|
94
|
-
if type=="radio" || type=="checkbox"
|
91
|
+
if type == "radio" || type == "checkbox"
|
95
92
|
|
96
93
|
other_input = (include_other_option)? "<div class=\"#{type} #{ob[:custom_class]}\"> <label for=\"#{ob[:cid]}\"><input id=\"#{ob[:cid]}-other\" type=\"#{type}\" name=\"#{title.downcase}[]\" class=\"\">Other <input type=\"text\" /></label></div>" : " "
|
97
94
|
|
@@ -101,62 +98,43 @@ module Plugins::ContactForm::ContactFormHtmlHelper
|
|
101
98
|
|
102
99
|
options.each do |op|
|
103
100
|
if type == "radio" || type == "checkbox"
|
104
|
-
html +=
|
101
|
+
html += "<div class=\"#{type} #{ob[:custom_class]}\">
|
105
102
|
<label for=\"#{ob[:cid]}\">
|
106
103
|
<input #{ob[:custom_attrs].to_attr_format} type=\"#{type}\" name=\"#{f_name}[]\" class=\"\" value=\"#{op[:label].downcase}\">
|
107
104
|
#{op[:label]}
|
108
105
|
</label>
|
109
106
|
</div>"
|
110
107
|
else
|
111
|
-
html +=
|
108
|
+
html += "<option value=\"#{op[:label].downcase.gsub(" ", "_")}\" #{"selected" if "#{op[:label].downcase.gsub(" ", "_")}" == values[cid]} >#{op[:label]}</option>"
|
112
109
|
end
|
113
110
|
end
|
114
111
|
|
115
|
-
if type=="radio" || type=="checkbox"
|
112
|
+
if type == "radio" || type == "checkbox"
|
116
113
|
html += other_input
|
117
114
|
else
|
118
115
|
html += " </select>"
|
119
116
|
end
|
120
|
-
|
121
117
|
end
|
122
118
|
|
123
|
-
def
|
124
|
-
|
119
|
+
def convert_form_values(op_fields, fields)
|
120
|
+
values = {}
|
125
121
|
|
126
122
|
op_fields.each do |field|
|
127
123
|
cid = field[:cid].to_sym
|
128
124
|
label = field[:label]
|
129
125
|
|
130
|
-
|
126
|
+
values[label] = []
|
131
127
|
|
132
|
-
if field[:field_type] ==
|
133
|
-
|
134
|
-
elsif field[:field_type] ==
|
135
|
-
|
136
|
-
elsif field[:field_type] ==
|
137
|
-
|
128
|
+
if field[:field_type] == 'file'
|
129
|
+
values[label] << fields[cid].original_filename if fields[cid].present?
|
130
|
+
elsif field[:field_type] == 'captcha'
|
131
|
+
values[label] << session[:captcha]
|
132
|
+
elsif field[:field_type] == 'radio' || field[:field_type] == 'checkboxes'
|
133
|
+
values[label] << fields[cid].join(',') if fields[cid].present?
|
138
134
|
else
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
html = "<div class=\"data_body\"></div>"
|
145
|
-
html += "<table style=\"width:100%; float:left\"><tbody><tr><td style=\"width:50%; float:left\">"
|
146
|
-
|
147
|
-
@values.each do |ind, val|
|
148
|
-
if val.to_s != "[]"
|
149
|
-
html += "<div class=\"data_field\"><strong>"+ind + ":</strong>" + "#{val[0].to_s}" +"</div>"
|
135
|
+
values[label] << fields[cid] if fields[cid].present?
|
150
136
|
end
|
151
137
|
end
|
152
|
-
|
153
|
-
html += "</td><td style=\"width:48%; float:left; vertical-align: top;\">"
|
154
|
-
|
155
|
-
file_attachments.each do |attachment|
|
156
|
-
html += "<div class=\"data_link\"> <strong>Attachment:</strong> <a href=\"'#{attachment}'\">'#{File.basename(attachment)}'</a></div>"
|
157
|
-
end
|
158
|
-
|
159
|
-
html += "</td></tr></tbody></table>"
|
138
|
+
return values
|
160
139
|
end
|
161
|
-
|
162
140
|
end
|
@@ -7,6 +7,7 @@
|
|
7
7
|
See the GNU Affero General Public License (GPLv3) for more details.
|
8
8
|
=end
|
9
9
|
class Plugins::ContactForm::FrontController < Apps::PluginsFrontController
|
10
|
+
before_filter :append_view_paths
|
10
11
|
|
11
12
|
def index
|
12
13
|
# here your actions for frontend module
|
@@ -19,10 +20,9 @@ class Plugins::ContactForm::FrontController < Apps::PluginsFrontController
|
|
19
20
|
settings = JSON.parse(@form.settings).to_sym
|
20
21
|
fields = params[:fields]
|
21
22
|
attachments = []
|
22
|
-
file_attachments = []
|
23
23
|
|
24
24
|
errors = []
|
25
|
-
|
25
|
+
success = []
|
26
26
|
|
27
27
|
validate = true
|
28
28
|
|
@@ -31,75 +31,86 @@ class Plugins::ContactForm::FrontController < Apps::PluginsFrontController
|
|
31
31
|
label = f[:label].to_sym
|
32
32
|
|
33
33
|
case f[:field_type].to_s
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
validate = false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
when 'radio'
|
46
|
-
|
47
|
-
when 'checkboxes'
|
48
|
-
|
49
|
-
when 'dropdown'
|
50
|
-
|
51
|
-
when 'captcha'
|
52
|
-
if !captcha_verified?
|
53
|
-
errors << "#{label}: #{settings[:railscf_message][:captcha_not_match]}"
|
34
|
+
when 'text', 'website', 'paragraph', 'textarea', 'email', 'radio', 'checkboxes', 'dropdown', 'file'
|
35
|
+
if f[:required] && !fields[cid].present?
|
36
|
+
errors << "#{label}: #{settings[:railscf_message][:invalid_required]}"
|
37
|
+
validate = false
|
38
|
+
end
|
39
|
+
if f[:field_type].to_s == "email"
|
40
|
+
if !fields[cid].match(/\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/)
|
41
|
+
errors << "#{label}: #{settings[:railscf_message][:invalid_email]}"
|
54
42
|
validate = false
|
55
43
|
end
|
44
|
+
end
|
45
|
+
when 'captcha'
|
46
|
+
unless captcha_verified?
|
47
|
+
errors << "#{label}: #{settings[:railscf_message][:captcha_not_match]}"
|
48
|
+
validate = false
|
49
|
+
end
|
56
50
|
end
|
57
51
|
end
|
58
52
|
|
59
53
|
if validate
|
60
54
|
values[:fields].each do |f|
|
61
55
|
cid = f[:cid].to_sym
|
62
|
-
if f[:field_type] ==
|
56
|
+
if f[:field_type] == 'file'
|
63
57
|
res = upload_file(fields[cid], {maximum: 5.megabytes, folder: current_site.upload_directory("uploads")})
|
64
58
|
if res[:error].present?
|
65
59
|
errors << res[:error]
|
66
60
|
else
|
67
|
-
attachments << res[
|
61
|
+
attachments << res['file']
|
68
62
|
end
|
69
63
|
end
|
70
64
|
end
|
71
65
|
|
72
66
|
new_settings = {"fields" => fields, "created_at" => Time.now.strftime("%Y-%m-%d %H:%M:%S").to_s}.to_json
|
73
|
-
@form_new =
|
67
|
+
@form_new = current_site.contact_forms.new(name: "response-#{Time.now}", description: @form.description, settings:fix_meta_value(new_settings), site_id: @form.site_id, parent_id: @form.id)
|
74
68
|
|
75
69
|
if @form_new.save
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
70
|
+
content = render_to_string partial: 'contact_form/submission',
|
71
|
+
layout: false,
|
72
|
+
locals: {
|
73
|
+
file_attachments: attachments,
|
74
|
+
fields: convert_form_values(
|
75
|
+
values[:fields],
|
76
|
+
fields
|
77
|
+
)
|
78
|
+
}
|
79
|
+
# send mail
|
80
|
+
sendmail(
|
81
|
+
settings[:railscf_mail][:to], settings[:railscf_mail][:subject],
|
82
|
+
content,
|
83
|
+
settings[:railscf_mail][:to],
|
84
|
+
attachments
|
85
|
+
)
|
86
|
+
success << settings[:railscf_message][:mail_sent_ok]
|
82
87
|
else
|
83
88
|
errors << settings[:railscf_message][:mail_sent_ng]
|
84
89
|
end
|
85
90
|
end
|
86
91
|
|
87
|
-
if
|
88
|
-
flash[:notice] =
|
92
|
+
if success.present?
|
93
|
+
flash[:notice] = success.join('<br>')
|
89
94
|
else
|
90
|
-
flash[:error] = errors.join(
|
95
|
+
flash[:error] = errors.join('<br>')
|
91
96
|
flash[:values] = fields
|
92
97
|
end
|
93
98
|
|
94
99
|
redirect_to :back
|
95
100
|
end
|
96
101
|
|
102
|
+
private
|
103
|
+
|
104
|
+
def append_view_paths
|
105
|
+
append_view_path File.join($camaleon_engine_dir, 'app', 'apps', 'plugins', self_plugin_key, 'views')
|
106
|
+
end
|
107
|
+
|
97
108
|
def fix_meta_value(value)
|
98
|
-
if
|
109
|
+
if value.is_a?(Array) || value.is_a?(Hash)
|
99
110
|
value = value.to_json
|
100
111
|
elsif value.is_a?(String)
|
101
112
|
value = value.to_var
|
102
113
|
end
|
103
114
|
value
|
104
115
|
end
|
105
|
-
end
|
116
|
+
end
|
@@ -97,26 +97,6 @@
|
|
97
97
|
<label for="railscf_mail_body"><%= t('plugin.contact_form.body') %>:</label><br>
|
98
98
|
<textarea rows="4" cols="5" id="railscf_mail_body" class="form-control" name="railscf_mail[body]"><%= t('plugin.contact_form.body_value') %></textarea>
|
99
99
|
</div>
|
100
|
-
|
101
|
-
<div class="form-group">
|
102
|
-
<label for="railscf_mail_body"><%= t('admin.sidebar.themes') %>:</label><br>
|
103
|
-
<% dir = Dir.glob("app/apps/themes/#{current_theme.the_slug.to_s}/views/html_mailer/*") %>
|
104
|
-
<select id="railscf_mail_theme" name="railscf_mail[theme]">
|
105
|
-
<% if dir.size > 0 %>
|
106
|
-
<% dir.each do |archivo| file=File.basename(archivo) %>
|
107
|
-
<% f=file.split('.') %>
|
108
|
-
<option value="<%= f[0].to_s %>"><%= f[0].to_s.titleize %></option>
|
109
|
-
<% end %>
|
110
|
-
<% else %>
|
111
|
-
<% dir = Dir.glob("app/views/html_mailer/*") %>
|
112
|
-
<% dir.each do |archivo| file=File.basename(archivo) %>
|
113
|
-
<% f=file.split('.') %>
|
114
|
-
<option value="<%= f[0].to_s %>"><%= f[0].to_s.titleize %></option>
|
115
|
-
<% end %>
|
116
|
-
|
117
|
-
<% end %>
|
118
|
-
</select>
|
119
|
-
</div>
|
120
100
|
</div>
|
121
101
|
</div>
|
122
102
|
</div>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<div class="data_body">
|
2
|
+
<table style="width: 100%; float: left;">
|
3
|
+
<tbody>
|
4
|
+
<tr>
|
5
|
+
<td style="width: 50%; float: left">
|
6
|
+
<% fields.each do |key, value| %>
|
7
|
+
<div class="data_field">
|
8
|
+
<strong><%= key %>:</strong>
|
9
|
+
<%= value[0] %>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
12
|
+
</td>
|
13
|
+
<td style="width: 48%; float: left; vertical-align: top">
|
14
|
+
<% file_attachments.each do |attachment| %>
|
15
|
+
<div class="data_link">
|
16
|
+
<strong>Attachment: </strong>
|
17
|
+
<a href="<%= attachment %>">
|
18
|
+
<%= File.basename(attachment) %>
|
19
|
+
</a>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
</td>
|
23
|
+
</tr>
|
24
|
+
</tbody>
|
25
|
+
</table>
|
26
|
+
</div>
|
@@ -9,59 +9,6 @@
|
|
9
9
|
module FrontendConcern extend ActiveSupport::Concern
|
10
10
|
# visiting sitemap.xml
|
11
11
|
def sitemap
|
12
|
-
# create sitemap directory
|
13
|
-
sitemaps_dir = Rails.root.join("public", "sitemaps").to_s
|
14
|
-
FileUtils.mkdir(sitemaps_dir) unless Dir.exist?(sitemaps_dir)
|
15
|
-
|
16
|
-
site = current_site
|
17
|
-
folder "sitemaps/#{site.slug}"
|
18
|
-
host site.the_url.to_s.parse_domain
|
19
|
-
langs = site.get_languages
|
20
|
-
|
21
|
-
sitemap :site do
|
22
|
-
url root_url, priority: 1.0, change_freq: "daily"
|
23
|
-
|
24
|
-
langs.each_with_index{|l, index| url site.the_url(locale: index==0?nil:l), last_mod: site.updated_at, priority: 0.9 }
|
25
|
-
url sitemap_url
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
sitemap_for site.posts.public_posts, name: :published_posts do |post|
|
30
|
-
post = post.decorate
|
31
|
-
langs.each_with_index{|l, index| url post.the_url(locale: index==0?nil:l), last_mod: post.updated_at, priority: 0.7 }
|
32
|
-
end
|
33
|
-
|
34
|
-
sitemap_for site.full_categories.no_empty, name: :categories do |cat|
|
35
|
-
cat = cat.decorate
|
36
|
-
langs.each_with_index{|l, index| url cat.the_url(locale: index==0?nil:l), last_mod: cat.updated_at, priority: 0.5 }
|
37
|
-
end
|
38
|
-
|
39
|
-
sitemap_for site.post_types, name: :groups do |ptype|
|
40
|
-
ptype = ptype.decorate
|
41
|
-
langs.each_with_index{|l, index| url ptype.the_url(locale: index==0?nil:l), last_mod: ptype.updated_at, priority: 0.3 }
|
42
|
-
end
|
43
|
-
|
44
|
-
sitemap_for site.post_tags, name: :tags do |ptag|
|
45
|
-
ptag = ptag.decorate
|
46
|
-
langs.each_with_index{|l, index| url ptag.the_url(locale: index==0?nil:l), last_mod: ptag.updated_at, priority: 0.2 }
|
47
|
-
end
|
48
|
-
|
49
|
-
# hooks
|
50
|
-
c = CamaleonController.new
|
51
|
-
c.instance_eval do
|
52
|
-
@current_site = site
|
53
|
-
@_hooks_skip = []
|
54
|
-
end
|
55
|
-
|
56
|
-
# sample: sitemap :site2 do \n url root_url \n end
|
57
|
-
r = {site: site, eval: ""}; c.hooks_run("sitemap", r)
|
58
|
-
instance_eval(r[:eval]) if r[:eval].present?
|
59
|
-
|
60
|
-
ping_with "http://#{host}/sitemap.xml"
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
def sitemap2
|
65
12
|
path = Rails.root.join("public", "sitemaps", current_site.slug, "sitemap.xml")
|
66
13
|
if File.exists?(path)
|
67
14
|
respond_to do |format|
|
@@ -16,7 +16,7 @@ module Admin::ApplicationHelper
|
|
16
16
|
def admin_system_notifications(args)
|
17
17
|
if Date.parse(current_site.get_option("date_notified", 2.days.ago).to_s) < Date.today
|
18
18
|
current_site.set_option("date_notified", Date.today)
|
19
|
-
url = "http://camaleon.tuzitio.com/plugins/camaleon_notification/?version=#{
|
19
|
+
url = "http://camaleon.tuzitio.com/plugins/camaleon_notification/?version=#{CamaleonCms::VERSION}&admin_locale=#{current_site.get_admin_language}&site=#{current_site.the_url}"
|
20
20
|
Thread.new do
|
21
21
|
current_site.set_meta("date_notified_message", open(url).read)
|
22
22
|
ActiveRecord::Base.connection.close #closing connection
|
data/app/helpers/site_helper.rb
CHANGED
@@ -54,7 +54,7 @@ module SiteHelper
|
|
54
54
|
# get list templates files of current theme
|
55
55
|
def get_list_template_files
|
56
56
|
contained_files = []
|
57
|
-
Dir[File.join(current_theme.settings["path"], "views", '
|
57
|
+
Dir[File.join(current_theme.settings["path"], "views", '*')].each do |path|
|
58
58
|
f_name = File.basename(path)
|
59
59
|
contained_files << f_name.split(".").first if f_name.include?('template_')
|
60
60
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<footer class="main-footer">
|
2
2
|
<div class="pull-right hidden-xs">
|
3
|
-
<b>Version</b
|
3
|
+
<b>Version</b><%= CamaleonCms::VERSION %>
|
4
4
|
</div>
|
5
5
|
<strong>Copyright © 2015-2016 <a href="http://camaleon.tuzitio.com">Camaleon CMS.</a> </strong> All rights reserved.
|
6
|
-
</footer>
|
6
|
+
</footer>
|
data/config/initializers/sass.rb
CHANGED
@@ -1,42 +1,89 @@
|
|
1
|
-
module Sass::Script::Functions
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
# module Sass::Script::Functions
|
2
|
+
# # similar to asset_path with prefix for current theme asset
|
3
|
+
# # def theme_path(path, options = {})
|
4
|
+
# # asset_path("#{get_theme_prefix}#{path}", options)
|
5
|
+
# # end
|
6
|
+
#
|
7
|
+
# # similar to asset_url with prefix for current theme asset
|
8
|
+
# def theme_asset(path, options = {})
|
9
|
+
# asset_url("#{get_theme_prefix}#{path}", options)
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# # similar to asset_url with prefix for current theme asset
|
13
|
+
# def asset_owencio(path, options = {})
|
14
|
+
# puts "*****************************"
|
15
|
+
# puts "*****************************"
|
16
|
+
# puts "*****************************"
|
17
|
+
# puts "*****************************"
|
18
|
+
# puts "*****************************"
|
19
|
+
# puts "*****************************"
|
20
|
+
# puts "*****************************"
|
21
|
+
# puts "*****************************"
|
22
|
+
# puts "*****************************"
|
23
|
+
# puts "*****************************"
|
24
|
+
# puts "*****************************"
|
25
|
+
# puts "*****************************"
|
26
|
+
# asset_url("#{get_theme_prefix}#{path}", options)
|
27
|
+
# Autoload::Sass::Script::String.new("url(#{asset_path("#{get_theme_prefix}#{path}", options)})")
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# # # similar to asset_path with prefix for current plugin asset
|
31
|
+
# # def plugin_path(path, options = {})
|
32
|
+
# # asset_path("#{get_plugin_prefix}#{path}", options)
|
33
|
+
# # end
|
34
|
+
#
|
35
|
+
# # similar to asset_url with prefix for current plugin asset
|
36
|
+
# def plugin_asset(path, options = {})
|
37
|
+
# asset_url("#{get_plugin_prefix}#{path}", options)
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# private
|
41
|
+
# # get plugin asset prefix
|
42
|
+
# def get_plugin_prefix
|
43
|
+
# file = sprockets_context.filename
|
44
|
+
# res = ""
|
45
|
+
# if file.include?("/app/apps/plugins/")
|
46
|
+
# res = "themes/#{file.split("/app/apps/plugins/").last.split("/").first}/assets/"
|
47
|
+
# end
|
48
|
+
# res
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# # get theme asset prefix
|
52
|
+
# def get_theme_prefix
|
53
|
+
# file = sprockets_context.filename
|
54
|
+
# res = ""
|
55
|
+
# if file.include?("/app/apps/themes/")
|
56
|
+
# res = "themes/#{file.split("/app/apps/themes/").last.split("/").first}/assets/"
|
57
|
+
# end
|
58
|
+
# res
|
59
|
+
# end
|
60
|
+
# end
|
6
61
|
|
7
|
-
# similar to asset_url with prefix for current theme asset
|
8
|
-
def theme_asset(path, options = {})
|
9
|
-
asset_url("#{get_theme_prefix}#{path}", options)
|
10
|
-
end
|
11
|
-
|
12
|
-
# # similar to asset_path with prefix for current plugin asset
|
13
|
-
# def plugin_path(path, options = {})
|
14
|
-
# asset_path("#{get_plugin_prefix}#{path}", options)
|
15
|
-
# end
|
16
|
-
|
17
|
-
# similar to asset_url with prefix for current plugin asset
|
18
|
-
def plugin_asset(path, options = {})
|
19
|
-
asset_url("#{get_plugin_prefix}#{path}", options)
|
20
|
-
end
|
21
62
|
|
22
|
-
|
23
|
-
#
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
63
|
+
module Sprockets
|
64
|
+
# Processor engine class for the SASS/SCSS compiler. Depends on the `sass` gem.
|
65
|
+
#
|
66
|
+
# For more infomation see:
|
67
|
+
#
|
68
|
+
# https://github.com/sass/sass
|
69
|
+
# https://github.com/rails/sass-rails
|
70
|
+
#
|
71
|
+
class SassProcessor
|
72
|
+
module Functions
|
32
73
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
74
|
+
def asset_owencio(path, options = {})
|
75
|
+
puts "%%%%%%%%%%%%%%%"
|
76
|
+
puts "%%%%%%%%%%%%%%%"
|
77
|
+
puts "%%%%%%%%%%%%%%%"
|
78
|
+
puts "%%%%%%%%%%%%%%%"
|
79
|
+
puts "%%%%%%%%%%%%%%%"
|
80
|
+
puts "%%%%%%%%%%%%%%%"
|
81
|
+
puts "%%%%%%%%%%%%%%%"
|
82
|
+
puts "%%%%%%%%%%%%%%%"
|
83
|
+
puts "***************** #{path.inspect}---#{options.inspect}"
|
84
|
+
ass
|
85
|
+
Autoload::Sass::Script::String.new("url(#{asset_path(path, options).value})")
|
86
|
+
end
|
39
87
|
end
|
40
|
-
res
|
41
88
|
end
|
42
89
|
end
|
data/config/sitemap.rb
CHANGED
data/lib/camaleon_cms.rb
CHANGED
data/lib/camaleon_cms/version.rb
CHANGED
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
require 'securerandom'
|
3
|
+
module CamaleonCms
|
4
|
+
module Generators
|
5
|
+
class GemPluginGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("../gem_plugin_template", __FILE__)
|
7
|
+
argument :plugin_name, :type => :string, :default => "my_plugin"
|
8
|
+
desc "This generator create all basic gem plugin structure."
|
9
|
+
|
10
|
+
def create_initializer_file
|
11
|
+
|
12
|
+
plugin_dir = Rails.root.join("plugins", get_plugin_name).to_s
|
13
|
+
plugin_app = File.join($camaleon_engine_dir, "lib", "generators", "camaleon_cms", "gem_plugin_#{get_plugin_name}")
|
14
|
+
FileUtils.rm_r(plugin_app) if Dir.exist?(plugin_app)
|
15
|
+
|
16
|
+
FileUtils.mkdir_p(plugin_dir)
|
17
|
+
system("cd #{Rails.root}; rails plugin new plugins/#{get_plugin_name} --full")
|
18
|
+
|
19
|
+
FileUtils.cp_r(File.join($camaleon_engine_dir, "lib", "generators", "camaleon_cms", "gem_theme_template"), plugin_app)
|
20
|
+
|
21
|
+
# tmp copy
|
22
|
+
helper_path = File.join(plugin_app, "app", "helpers", "plugins", get_plugin_name)
|
23
|
+
model_path = File.join(plugin_app, "app", "models", "plugins", get_plugin_name)
|
24
|
+
views_path = File.join(plugin_app, "app", "views", "plugins", get_plugin_name)
|
25
|
+
controller_path = File.join(plugin_app, "app", "controllers", "plugins", get_plugin_name)
|
26
|
+
FileUtils.mv(File.join(plugin_app, "app", "controllers", "plugins", "my_plugin"), controller_path) rescue nil
|
27
|
+
FileUtils.mv(File.join(plugin_app, "app", "helpers", "plugins", "my_plugin"), helper_path) rescue nil
|
28
|
+
FileUtils.mv(File.join(plugin_app, "app", "models", "plugins", "my_plugin"), model_path) rescue nil
|
29
|
+
FileUtils.mv(File.join(plugin_app, "app", "views", "plugins", "my_plugin"), views_path) rescue nil
|
30
|
+
FileUtils.mv(File.join(plugin_app, "app", "assets", "images", "plugins", "my_plugin"), File.join(plugin_app, "app", "assets", "images", "plugins", get_plugin_name)) rescue nil
|
31
|
+
FileUtils.mv(File.join(plugin_app, "app", "assets", "javascripts", "plugins", "my_plugin"), File.join(plugin_app, "app", "assets", "javascripts", "plugins", get_plugin_name)) rescue nil
|
32
|
+
FileUtils.mv(File.join(plugin_app, "app", "assets", "stylesheets", "plugins", "my_plugin"), File.join(plugin_app, "app", "assets", "stylesheets", "plugins", get_plugin_name)) rescue nil
|
33
|
+
|
34
|
+
# configuration
|
35
|
+
t = fix_text(File.read(File.join(plugin_app, "config", "camaleon_plugin.json")))
|
36
|
+
File.open(File.join(plugin_app, "config", "camaleon_plugin.json"), "w"){|f| f << t }
|
37
|
+
|
38
|
+
# helper
|
39
|
+
t = fix_text(File.read(File.join(helper_path, "main_helper.rb")))
|
40
|
+
File.open(File.join(helper_path, "main_helper.rb"), "w"){|f| f << t }
|
41
|
+
|
42
|
+
# controllers
|
43
|
+
t = fix_text(File.read(File.join(controller_path, "admin_controller.rb")))
|
44
|
+
File.open(File.join(controller_path, "admin_controller.rb"), "w"){|f| f << t }
|
45
|
+
t = fix_text(File.read(File.join(controller_path, "front_controller.rb")))
|
46
|
+
File.open(File.join(controller_path, "front_controller.rb"), "w"){|f| f << t }
|
47
|
+
|
48
|
+
# models
|
49
|
+
model_file = File.join(model_path, "my_plugin.rb")
|
50
|
+
t = fix_text(File.read(model_file))
|
51
|
+
File.open(model_file, "w"){|f| f << t }
|
52
|
+
FileUtils.mv(model_file, File.join(File.dirname(model_file), "#{get_plugin_name}.rb")) rescue nil
|
53
|
+
|
54
|
+
|
55
|
+
directory(plugin_app, plugin_dir)
|
56
|
+
gsub_file File.join(plugin_dir, "config", "routes.rb"), "end" do
|
57
|
+
"
|
58
|
+
scope '(:locale)', locale: /\#{PluginRoutes.all_locales}/, :defaults => { } do
|
59
|
+
# frontend
|
60
|
+
namespace :plugins do
|
61
|
+
namespace '#{get_plugin_name}' do
|
62
|
+
get 'index' => 'front#index'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
#Admin Panel
|
68
|
+
scope 'admin', as: 'admin' do
|
69
|
+
namespace 'plugins' do
|
70
|
+
namespace '#{get_plugin_name}' do
|
71
|
+
get 'index' => 'admin#index'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# main routes
|
77
|
+
#scope '#{get_plugin_name}', module: 'plugins/#{get_plugin_name}/', as: '#{get_plugin_name}' do
|
78
|
+
# Here my routes for main routes
|
79
|
+
#end
|
80
|
+
end"
|
81
|
+
end
|
82
|
+
|
83
|
+
append_to_file Rails.root.join("Gemfile") do
|
84
|
+
"\n\ngem '#{get_plugin_name}', path: '#{plugin_dir}/'"
|
85
|
+
end
|
86
|
+
|
87
|
+
# destroy non used files
|
88
|
+
FileUtils.rm_r(plugin_app)
|
89
|
+
FileUtils.rm_r(File.join(plugin_dir, "app", "assets", "images", get_plugin_name))
|
90
|
+
FileUtils.rm_r(File.join(plugin_dir, "app", "assets", "javascripts", get_plugin_name))
|
91
|
+
FileUtils.rm_r(File.join(plugin_dir, "app", "assets", "stylesheets", get_plugin_name))
|
92
|
+
|
93
|
+
# remove TODO text from gem
|
94
|
+
gemspec_file = File.join(plugin_dir, "#{get_plugin_name}.gemspec")
|
95
|
+
t = File.read(gemspec_file).gsub("TODO", "")
|
96
|
+
File.open(gemspec_file, "w"){|f| f << t }
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
def fix_text(text = "")
|
101
|
+
text.gsub("pluginTitle", get_plugin_title).gsub("PluginClass", get_plugin_class).gsub("pluginKey", get_plugin_name)
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.next_migration_number(dir)
|
105
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
def get_plugin_name
|
110
|
+
plugin_name.underscore.singularize
|
111
|
+
end
|
112
|
+
|
113
|
+
def get_plugin_title
|
114
|
+
plugin_name.titleize
|
115
|
+
end
|
116
|
+
def get_plugin_class
|
117
|
+
get_plugin_name.classify
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
data/lib/generators/camaleon_cms/gem_theme_template/app/helpers/plugins/my_plugin/main_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Plugins::PluginClass::MainHelper
|
2
|
+
def self.included(klass)
|
3
|
+
# klass.helper_method [:my_helper_method] rescue "" # here your methods accessible from views
|
4
|
+
end
|
5
|
+
|
6
|
+
# here all actions on going to active
|
7
|
+
# you can run sql commands like this:
|
8
|
+
# results = ActiveRecord::Base.connection.execute(query);
|
9
|
+
# plugin: plugin model
|
10
|
+
def pluginKey_on_active(plugin)
|
11
|
+
end
|
12
|
+
|
13
|
+
# here all actions on going to inactive
|
14
|
+
# plugin: plugin model
|
15
|
+
def pluginKey_on_inactive(plugin)
|
16
|
+
end
|
17
|
+
|
18
|
+
# here all actions to upgrade for a new version
|
19
|
+
# plugin: plugin model
|
20
|
+
def pluginKey_on_upgrade(plugin)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# class Plugins::PluginClass::Models::PluginClass < ActiveRecord::Base
|
2
|
+
# attr_accessible :path, :browser_key
|
3
|
+
# belongs_to :site
|
4
|
+
|
5
|
+
# here create your models normally
|
6
|
+
# notice: your tables in database will be plugins_pluginKey in plural (check rails documentation)
|
7
|
+
# end
|
8
|
+
|
9
|
+
# here your default models customization
|
10
|
+
# Site.class_eval do
|
11
|
+
# has_many :pluginKey, class_name: "Plugins::PluginClass::Models::PluginClass"
|
12
|
+
# end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"title": "pluginTitle",
|
3
|
+
"descr": "",
|
4
|
+
"version": "0.1",
|
5
|
+
"key": "pluginKey",
|
6
|
+
"helpers": [
|
7
|
+
"Plugins::PluginClass::MainHelper"
|
8
|
+
],
|
9
|
+
"hooks": {
|
10
|
+
"on_active": [
|
11
|
+
"pluginKey_on_active"
|
12
|
+
],
|
13
|
+
"on_inactive": [
|
14
|
+
"pluginKey_on_inactive"
|
15
|
+
],
|
16
|
+
"on_upgrade": [
|
17
|
+
"pluginKey_on_upgrade"
|
18
|
+
]
|
19
|
+
//here you can add all your hooks (read documentation)
|
20
|
+
}
|
21
|
+
}
|
data/lib/plugin_routes.rb
CHANGED
@@ -233,6 +233,7 @@ class PluginRoutes
|
|
233
233
|
r = cache_variable("all_plugins"); return r unless (r.nil? || r == [])
|
234
234
|
res = get_gem_plugins
|
235
235
|
entries = [".", ".."]
|
236
|
+
res.each{|plugin| entries << plugin["key"] }
|
236
237
|
(Dir["#{apps_dir}/plugins/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/plugins/*"]).each do |path|
|
237
238
|
entry = path.split("/").last
|
238
239
|
config = File.join(path, "config", "config.json")
|
@@ -255,6 +256,7 @@ class PluginRoutes
|
|
255
256
|
r = cache_variable("all_themes"); return r unless (r.nil? || r == [])
|
256
257
|
res = get_gem_themes
|
257
258
|
entries = [".", ".."]
|
259
|
+
res.each{|theme| entries << theme["key"] }
|
258
260
|
(Dir["#{apps_dir}/themes/*"] + Dir["#{camaleon_gem.gem_dir}/app/apps/themes/*"]).each do |path|
|
259
261
|
entry = path.split("/").last
|
260
262
|
config = File.join(path, "config", "config.json")
|
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: 1.0.
|
4
|
+
version: 1.0.3
|
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-09-
|
11
|
+
date: 2015-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack-page_caching
|
@@ -235,6 +235,7 @@ files:
|
|
235
235
|
- app/apps/plugins/contact_form/views/admin_forms/index.html.erb
|
236
236
|
- app/apps/plugins/contact_form/views/admin_forms/manual.html.erb
|
237
237
|
- app/apps/plugins/contact_form/views/admin_forms/responses.html.erb
|
238
|
+
- app/apps/plugins/contact_form/views/contact_form/_submission.html.erb
|
238
239
|
- app/apps/plugins/contact_form/views/forms_shorcode.html.erb
|
239
240
|
- app/apps/plugins/contact_form/views/front/index.html.erb
|
240
241
|
- app/apps/plugins/front_cache/admin_controller.rb
|
@@ -860,6 +861,15 @@ files:
|
|
860
861
|
- lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/front/index.html.erb
|
861
862
|
- lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/layouts/readme.txt
|
862
863
|
- lib/generators/camaleon_cms/gem_plugin_template/config/camaleon_plugin.json
|
864
|
+
- lib/generators/camaleon_cms/gem_theme_generator.rb
|
865
|
+
- lib/generators/camaleon_cms/gem_theme_template/app/controllers/plugins/my_plugin/admin_controller.rb
|
866
|
+
- lib/generators/camaleon_cms/gem_theme_template/app/controllers/plugins/my_plugin/front_controller.rb
|
867
|
+
- lib/generators/camaleon_cms/gem_theme_template/app/helpers/plugins/my_plugin/main_helper.rb
|
868
|
+
- lib/generators/camaleon_cms/gem_theme_template/app/models/plugins/my_plugin/my_plugin.rb
|
869
|
+
- lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/admin/index.html.erb
|
870
|
+
- lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/front/index.html.erb
|
871
|
+
- lib/generators/camaleon_cms/gem_theme_template/app/views/plugins/my_plugin/layouts/readme.txt
|
872
|
+
- lib/generators/camaleon_cms/gem_theme_template/config/camaleon_plugin.json
|
863
873
|
- lib/generators/camaleon_cms/install_generator.rb
|
864
874
|
- lib/generators/camaleon_cms/install_template/apps/plugins/readme.txt
|
865
875
|
- lib/generators/camaleon_cms/install_template/apps/themes/readme.txt
|