camaleon_cms 2.4.5.5 → 2.4.5.7
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.
- checksums.yaml +4 -4
- data/app/apps/themes/default/views/partials/_comments.html.erb +36 -21
- data/app/apps/themes/default/views/post.html.erb +1 -1
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee +4 -4
- data/app/controllers/camaleon_cms/admin/categories_controller.rb +3 -0
- data/app/controllers/camaleon_cms/admin/media_controller.rb +9 -6
- data/app/controllers/camaleon_cms/admin/sessions_controller.rb +1 -1
- data/app/controllers/camaleon_cms/admin/settings/post_types_controller.rb +2 -0
- data/app/controllers/concerns/camaleon_cms/frontend_concern.rb +17 -13
- data/app/decorators/camaleon_cms/post_decorator.rb +0 -1
- data/app/helpers/camaleon_cms/captcha_helper.rb +1 -1
- data/app/helpers/camaleon_cms/frontend/nav_menu_helper.rb +1 -0
- data/app/helpers/camaleon_cms/hooks_helper.rb +6 -1
- data/app/helpers/camaleon_cms/site_helper.rb +1 -1
- data/app/helpers/camaleon_cms/uploader_helper.rb +36 -27
- data/app/models/camaleon_cms/custom_fields_relationship.rb +6 -0
- data/app/models/camaleon_cms/media.rb +54 -0
- data/app/models/camaleon_cms/post.rb +1 -0
- data/app/models/camaleon_cms/site.rb +7 -0
- data/app/uploaders/camaleon_cms_aws_uploader.rb +21 -23
- data/app/uploaders/camaleon_cms_local_uploader.rb +20 -26
- data/app/uploaders/camaleon_cms_uploader.rb +17 -45
- data/app/views/camaleon_cms/admin/categories/index.html.erb +2 -2
- data/app/views/camaleon_cms/admin/media/_render_file_item.html.erb +53 -36
- data/app/views/camaleon_cms/admin/media/index.html.erb +1 -1
- data/app/views/camaleon_cms/admin/post_tags/index.html.erb +4 -4
- data/app/views/camaleon_cms/admin/posts/index.html.erb +1 -0
- data/app/views/camaleon_cms/admin/settings/_configuration_settings.html.erb +5 -1
- data/app/views/camaleon_cms/admin/settings/post_types/_form.html.erb +1 -1
- data/app/views/camaleon_cms/default_theme/partials/_comments.html.erb +45 -28
- data/app/views/camaleon_cms/default_theme/single.html.erb +1 -1
- data/config/locales/camaleon_cms/admin/es.yml +1 -0
- data/config/locales/camaleon_cms/admin/js.yml +54 -3
- data/config/locales/camaleon_cms/admin/ru.yml +39 -28
- data/db/migrate/20180124132318_create_media.rb +17 -0
- data/lib/camaleon_cms/version.rb +1 -1
- data/lib/ext/string.rb +8 -0
- data/lib/generators/camaleon_cms/gem_plugin_generator.rb +29 -25
- data/lib/plugin_routes.rb +27 -0
- data/spec/dummy/config/application.rb +1 -0
- data/spec/dummy/config/environments/test.rb +2 -0
- data/spec/dummy/db/schema.rb +1 -140
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/post_type.rb +17 -0
- data/spec/factories/site.rb +8 -0
- data/spec/features/{categories_spec.rb → admin/categories_spec.rb} +1 -1
- data/spec/features/{comments_spec.rb → admin/comments_spec.rb} +16 -9
- data/spec/features/{contact_form_spec.rb → admin/contact_form_spec.rb} +16 -9
- data/spec/features/{content_groups_spec.rb → admin/content_groups_spec.rb} +19 -11
- data/spec/features/{custom_fields_spec.rb → admin/custom_fields_spec.rb} +1 -1
- data/spec/features/{languages_spec.rb → admin/languages_spec.rb} +1 -1
- data/spec/features/{media_spec.rb → admin/media_spec.rb} +1 -1
- data/spec/features/{menus_spec.rb → admin/menus_spec.rb} +2 -2
- data/spec/features/{pages_spec.rb → admin/pages_spec.rb} +1 -1
- data/spec/features/{plugins_spec.rb → admin/plugins_spec.rb} +1 -1
- data/spec/features/{posts_spec.rb → admin/posts_spec.rb} +4 -3
- data/spec/features/admin/session_spec.rb +102 -0
- data/spec/features/{settings_spec.rb → admin/settings_spec.rb} +1 -1
- data/spec/features/{shortcodes_spec.rb → admin/shortcodes_spec.rb} +1 -1
- data/spec/features/{sites_spec.rb → admin/sites_spec.rb} +22 -14
- data/spec/features/{tags_spec.rb → admin/tags_spec.rb} +17 -8
- data/spec/features/{themes_spec.rb → admin/themes_spec.rb} +1 -1
- data/spec/features/{user_roles_spec.rb → admin/user_roles_spec.rb} +25 -19
- data/spec/features/{users_spec.rb → admin/users_spec.rb} +2 -2
- data/spec/features/{widgets_spec.rb → admin/widgets_spec.rb} +19 -12
- data/spec/features/frontend/pages_spec.rb +86 -5
- data/spec/features/frontend/post_type_spec.rb +16 -0
- data/spec/helpers/email_helper_spec.rb +1 -1
- data/spec/helpers/uploader_helper_spec.rb +56 -0
- data/spec/mailers/send_mail_spec.rb +3 -3
- data/spec/{decorators/camaleon_cms/post_decorator_spec.rb → models/post_spec.rb} +3 -3
- data/spec/rails_helper.rb +79 -0
- data/spec/spec_helper.rb +25 -56
- data/spec/support/common.rb +10 -24
- data/spec/support/fixtures/rails.png +0 -0
- data/spec/support/fixtures/rails_tmp.png +0 -0
- metadata +64 -50
- data/app/views/camaleon_cms/admin/media/_files_list.html.erb +0 -2
- data/app/views/camaleon_cms/admin/media/_render_folder_item.html.erb +0 -15
- data/spec/decorators/post_type_spec.rb +0 -13
- data/spec/features/session_spec.rb +0 -74
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c40d70430d7edd9132d9ed5529735b8421054db1
|
|
4
|
+
data.tar.gz: f34b54e713ca8a1d88a8de55e1cd3b5d048cc08b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4bdd8d1ce6f4a4ceaddd893c5ca4cf4d478ca3f5ede911b4cf86935ab39fcf6637abd300073a69dd194666366c90e2919bf65fabdba7fe21771e3b159bb68eb9
|
|
7
|
+
data.tar.gz: f6c8551c32f86b304a0b328b725b5bb0efcd9546784b56151ebe70aaaaaaf5e2ec62b1d0f2b7183f48e4593504bac472be12418796f2c940f162a4e6a67833f7
|
|
@@ -1,25 +1,40 @@
|
|
|
1
1
|
<section id="comments" class="comments-area">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
<% if post.the_comments.count > 0 %>
|
|
3
|
+
<h2 class="comments-title"><%= post.the_comments.count %> <%= ct('comments', default: 'Comments') %>
|
|
4
|
+
"<span><%= post.the_title %></span>"</h2>
|
|
5
|
+
<section class="comment-list">
|
|
6
|
+
<%= render partial: "partials/comments_list", locals: {comments: post.the_comments, children: ""} %>
|
|
7
|
+
</section>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% if post.can_commented? %>
|
|
8
10
|
<div id="respond" class="comment-respond">
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
<h3><%= ct('comment_new', default: 'New Comment') %></h3>
|
|
12
|
+
<% if signin? || current_site.get_option('permit_anonimos_comment', false) %>
|
|
13
|
+
<%= form_for post, url: {action: :save_comment, post_id: post.id}, html: {method: "post", class: "form-comment comment-form", id: 'form-comment'} do |f| %>
|
|
14
|
+
<%= render partial: "camaleon_cms/flash_messages", locals: {flash: (flash[:comment_submit] || {}).with_indifferent_access} %>
|
|
15
|
+
<% unless signin? %>
|
|
16
|
+
<div class="form-group">
|
|
17
|
+
<%= text_field_tag 'post_comment[name]', '', class: 'form-control required', placeholder: t('.anonymous_name', default: 'Name') %>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="form-group">
|
|
20
|
+
<%= email_field_tag 'post_comment[email]', '', class: 'form-control required', placeholder: t('.anonymous_email', default: 'Email') %>
|
|
21
|
+
</div>
|
|
22
|
+
<% if current_site.is_enable_captcha_for_comments? %>
|
|
23
|
+
<%= content_tag :div, raw(cama_captcha_tag), class: 'form-group' %>
|
|
24
|
+
<% end %>
|
|
25
|
+
<% end %>
|
|
26
|
+
<div class="form-group">
|
|
27
|
+
<%= text_area_tag 'post_comment[content]', '', class: 'form-control required counted', placeholder: ct('comment', default: 'Here your comment') %>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="form-group text-right">
|
|
30
|
+
<button type="submit" class="btn btn-info"><%= ct('comment', default: 'Comment') %></button>
|
|
31
|
+
</div>
|
|
32
|
+
<% end %>
|
|
33
|
+
<% else %>
|
|
34
|
+
<div class="panel-login-comment"><%= ct('comment_msg', default: 'You must be logged in to post a comment') %>
|
|
35
|
+
<a class="link-login-comment" href="<%= cama_admin_path %>"><%= ct('login', default: 'Login') %></a>
|
|
36
|
+
</div>
|
|
37
|
+
<% end %>
|
|
24
38
|
</div>
|
|
39
|
+
<% end %>
|
|
25
40
|
</section>
|
|
@@ -20,18 +20,18 @@ window["cama_init_media"] = (media_panel) ->
|
|
|
20
20
|
"<div class='p_label'><b>"+I18n("button.name")+": </b><br> <span>"+data["name"]+"</span></div>" +
|
|
21
21
|
"<div class='p_body'>" +
|
|
22
22
|
"<div style='overflow: auto;'><b>"+I18n("button.url")+":</b><br> <a target='_blank' href='"+data["url"]+"'>"+data["url"]+"</a></div>" +
|
|
23
|
-
"<div><b>"+I18n("button.size")+":</b> <span>"+cama_humanFileSize(data["
|
|
23
|
+
"<div><b>"+I18n("button.size")+":</b> <span>"+cama_humanFileSize(parseFloat(data["file_size"]))+"</span></div>" +
|
|
24
24
|
"</div>"
|
|
25
25
|
|
|
26
26
|
if window["callback_media_uploader"]
|
|
27
|
-
if !media_panel.attr("data-formats") || (media_panel.attr("data-formats") && ($.inArray(data["
|
|
27
|
+
if !media_panel.attr("data-formats") || (media_panel.attr("data-formats") && ($.inArray(data["file_type"], media_panel.attr("data-formats").split(",")) >= 0 || $.inArray(data["url"].split(".").pop().toLowerCase(), media_panel.attr("data-formats").split(",")) >= 0))
|
|
28
28
|
tpl += "<div class='p_footer'>" +
|
|
29
29
|
"<button class='btn btn-primary insert_btn'>"+I18n("button.insert")+"</button>" +
|
|
30
30
|
"</div>"
|
|
31
31
|
|
|
32
32
|
media_info.html(tpl)
|
|
33
33
|
media_info.find(".p_thumb").html(item.find(".thumb").html())
|
|
34
|
-
if data["
|
|
34
|
+
if data["file_type"] == "image"
|
|
35
35
|
if item.find('.edit_item') # add button to edit image
|
|
36
36
|
edit_img = $('<button type="button" class="pull-right btn btn-default" title="Edit"><i class="fa fa-pencil"></i></button>').click ->
|
|
37
37
|
item.find('.edit_item').trigger('click')
|
|
@@ -351,7 +351,7 @@ window["cama_init_media"] = (media_panel) ->
|
|
|
351
351
|
title: I18n('button.edit_image', 'Edit Image')+' - ' + data['name'] + (if media_panel.attr("data-dimension") then " <small><i>("+media_panel.attr("data-dimension")+")</i></small>" else ''),
|
|
352
352
|
content: '<div>' +
|
|
353
353
|
'<div class="editable_wrapper">' +
|
|
354
|
-
'<img style="max-width: 100%;" class="editable" id="media_editable_image" src="'+data['url']+'">' +
|
|
354
|
+
'<img style="max-width: 100%;" class="editable" id="media_editable_image" crossorigin src="'+data['url']+'">' +
|
|
355
355
|
'</div>' +
|
|
356
356
|
'<div class="row" style="margin-top: 5px;">' +
|
|
357
357
|
'<div class="col-md-8">' +
|
|
@@ -32,9 +32,12 @@ class CamaleonCms::Admin::CategoriesController < CamaleonCms::AdminController
|
|
|
32
32
|
|
|
33
33
|
def create
|
|
34
34
|
@category = @post_type.categories.new(params.require(:category).permit!)
|
|
35
|
+
hooks_run("create_category", {category: @category, post_type: @post_type})
|
|
36
|
+
|
|
35
37
|
if @category.save
|
|
36
38
|
@category.set_options(params[:meta])
|
|
37
39
|
@category.set_field_values(params[:field_options])
|
|
40
|
+
hooks_run("created_category", {category: @category, post_type: @post_type})
|
|
38
41
|
flash[:notice] = t('camaleon_cms.admin.post_type.message.created')
|
|
39
42
|
redirect_to action: :index
|
|
40
43
|
else
|
|
@@ -8,7 +8,7 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
|
|
|
8
8
|
def index
|
|
9
9
|
authorize! :manage, :media
|
|
10
10
|
@show_file_actions = true
|
|
11
|
-
@files = @tree
|
|
11
|
+
@files = @tree.paginate(page: params[:page], per_page: 100)
|
|
12
12
|
@next_page = @files.current_page < @files.total_pages ? @files.current_page + 1 : nil
|
|
13
13
|
add_breadcrumb I18n.t("camaleon_cms.admin.sidebar.media")
|
|
14
14
|
end
|
|
@@ -38,10 +38,10 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
|
|
|
38
38
|
@show_file_actions = true
|
|
39
39
|
end
|
|
40
40
|
@tree = cama_uploader.search(params[:search]) if params[:search].present?
|
|
41
|
-
@files = @tree
|
|
41
|
+
@files = @tree.paginate(page: params[:page], per_page: 100)
|
|
42
42
|
@next_page = @files.current_page < @files.total_pages ? @files.current_page + 1 : nil
|
|
43
43
|
if params[:partial].present?
|
|
44
|
-
render json: {next_page: @next_page, html: render_to_string(partial: "
|
|
44
|
+
render json: {next_page: @next_page, html: render_to_string(partial: "render_file_item", locals: { files: @files })}
|
|
45
45
|
else
|
|
46
46
|
render "index", layout: false unless params[:partial].present?
|
|
47
47
|
end
|
|
@@ -56,7 +56,7 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
|
|
|
56
56
|
case params[:media_action]
|
|
57
57
|
when "new_folder"
|
|
58
58
|
params[:folder] = slugify_folder(params[:folder])
|
|
59
|
-
render partial: "
|
|
59
|
+
render partial: "render_file_item", locals: {files: [cama_uploader.add_folder(params[:folder])]}
|
|
60
60
|
when "del_folder"
|
|
61
61
|
cama_uploader.delete_folder(params[:folder])
|
|
62
62
|
render inline: ""
|
|
@@ -64,7 +64,9 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
|
|
|
64
64
|
cama_uploader.delete_file(params[:folder].gsub("//", "/"))
|
|
65
65
|
render inline: ""
|
|
66
66
|
when 'crop_url'
|
|
67
|
-
|
|
67
|
+
unless params[:url].start_with?('data:')
|
|
68
|
+
params[:url] = (params[:url].start_with?('http') ? '' : current_site.the_url(locale: nil)) + params[:url]
|
|
69
|
+
end
|
|
68
70
|
r = cama_tmp_upload( params[:url], formats: params[:formats], name: params[:name])
|
|
69
71
|
unless r[:error].present?
|
|
70
72
|
params[:file_upload] = r[:file_path]
|
|
@@ -93,7 +95,8 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
|
|
|
93
95
|
# init basic media variables
|
|
94
96
|
def init_media_vars
|
|
95
97
|
@cama_uploader = CamaleonCmsLocalUploader.new({current_site: current_site, private: true}) if params[:private].present?
|
|
96
|
-
cama_uploader.clear_cache if params[:cama_media_reload]
|
|
98
|
+
cama_uploader.clear_cache if params[:cama_media_reload] == 'clear_cache'
|
|
99
|
+
cama_uploader.reload if params[:cama_media_reload] == 'reload'
|
|
97
100
|
@media_formats = (params[:media_formats] || "").sub("media", ",video,audio").sub("all", "").split(",")
|
|
98
101
|
@tree = cama_uploader.objects(@folder = params[:folder] || "/")
|
|
99
102
|
@show_file_actions ||= params[:actions].to_s == 'true'
|
|
@@ -112,7 +112,7 @@ class CamaleonCms::Admin::SessionsController < CamaleonCms::CamaleonController
|
|
|
112
112
|
user_data = user_permit_data
|
|
113
113
|
result = cama_register_user(user_data, params[:meta])
|
|
114
114
|
if result[:result] == false && result[:type] == :captcha_error
|
|
115
|
-
@user.errors
|
|
115
|
+
@user.errors.add(:captcha, t('camaleon_cms.admin.users.message.error_captcha'))
|
|
116
116
|
render 'register'
|
|
117
117
|
elsif result[:result]
|
|
118
118
|
flash[:notice] = result[:message]
|
|
@@ -19,6 +19,7 @@ class CamaleonCms::Admin::Settings::PostTypesController < CamaleonCms::Admin::Se
|
|
|
19
19
|
def update
|
|
20
20
|
if @post_type.update(@data_term)
|
|
21
21
|
@post_type.set_field_values(params.require(:field_options).permit!) if params[:field_options].present?
|
|
22
|
+
hooks_run("updated_post_type", {post_type: @post_type})
|
|
22
23
|
flash[:notice] = t('camaleon_cms.admin.post_type.message.updated')
|
|
23
24
|
redirect_to action: :index
|
|
24
25
|
else
|
|
@@ -30,6 +31,7 @@ class CamaleonCms::Admin::Settings::PostTypesController < CamaleonCms::Admin::Se
|
|
|
30
31
|
@post_type = current_site.post_types.new(@data_term)
|
|
31
32
|
if @post_type.save
|
|
32
33
|
@post_type.set_field_values(params.require(:field_options).permit!) if params[:field_options].present?
|
|
34
|
+
hooks_run("created_post_type", {post_type: @post_type})
|
|
33
35
|
flash[:notice] = t('camaleon_cms.admin.post_type.message.created')
|
|
34
36
|
redirect_to action: :index
|
|
35
37
|
else
|
|
@@ -31,6 +31,7 @@ module CamaleonCms::FrontendConcern extend ActiveSupport::Concern
|
|
|
31
31
|
@post = current_site.posts.find_by_id(params[:post_id]).decorate
|
|
32
32
|
user = cama_current_user
|
|
33
33
|
comment_data = {}
|
|
34
|
+
flash[:comment_submit][:error] = t('.comments_not_enabled', default: 'This post can not be commented') if !@post.can_commented?
|
|
34
35
|
if user.present?
|
|
35
36
|
comment_data[:author] = user.fullname
|
|
36
37
|
comment_data[:author_email] = user.email
|
|
@@ -39,23 +40,26 @@ module CamaleonCms::FrontendConcern extend ActiveSupport::Concern
|
|
|
39
40
|
comment_data[:is_anonymous] = true
|
|
40
41
|
comment_data[:author] = params[:post_comment][:name]
|
|
41
42
|
comment_data[:author_email] = params[:post_comment][:email]
|
|
43
|
+
flash[:comment_submit][:error] = t('camaleon_cms.admin.users.message.error_captcha', default: 'Invalid captcha value') if current_site.is_enable_captcha_for_comments? && !cama_captcha_verified?
|
|
42
44
|
end
|
|
43
45
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
unless flash[:comment_submit][:error]
|
|
47
|
+
if user.present?
|
|
48
|
+
comment_data[:user_id] = user.id
|
|
49
|
+
comment_data[:author_url] = params[:post_comment][:url] || ""
|
|
50
|
+
comment_data[:author_IP] = request.remote_ip.to_s
|
|
51
|
+
comment_data[:approved] = current_site.front_comment_status
|
|
52
|
+
comment_data[:agent] = request.user_agent.force_encoding("ISO-8859-1").encode("UTF-8")
|
|
53
|
+
comment_data[:content] = params[:post_comment][:content]
|
|
54
|
+
@comment = params[:post_comment][:parent_id].present? ? @post.comments.find_by_id(params[:post_comment][:parent_id]).children.new(comment_data) : @post.comments.main.new(comment_data)
|
|
55
|
+
if @comment.save
|
|
56
|
+
flash[:comment_submit][:notice] = t('camaleon_cms.admin.comments.message.created')
|
|
57
|
+
else
|
|
58
|
+
flash[:comment_submit][:error] = "#{t('camaleon_cms.common.comment_error', default: 'An error was occurred on save comment')}:<br> #{@comment.errors.full_messages.join(', ')}"
|
|
59
|
+
end
|
|
54
60
|
else
|
|
55
|
-
flash[:comment_submit][:error] =
|
|
61
|
+
flash[:comment_submit][:error] = t('camaleon_cms.admin.message.unauthorized')
|
|
56
62
|
end
|
|
57
|
-
else
|
|
58
|
-
flash[:comment_submit][:error] = t('camaleon_cms.admin.message.unauthorized')
|
|
59
63
|
end
|
|
60
64
|
params[:format] == 'json' ? render(json: flash.discard(:comment_submit).to_hash) : redirect_to(request.referer || @post.the_url(as_path: true))
|
|
61
65
|
end
|
|
@@ -217,7 +217,6 @@ class CamaleonCms::PostDecorator < CamaleonCms::ApplicationDecorator
|
|
|
217
217
|
# @param _parent: parent decorated model, like: (PostType *default), Category, PostTag, Site
|
|
218
218
|
# @samples: my_post.the_next_post(), my_post.the_next_post(@category), my_post.the_next_post(current_site)
|
|
219
219
|
def the_next_post(_parent = nil)
|
|
220
|
-
puts "next for: #{object.slug}"
|
|
221
220
|
(_parent.presence || the_post_type).the_posts.where("#{CamaleonCms::Post.table_name}.post_order > :position OR (#{CamaleonCms::Post.table_name}.post_order = :position and #{CamaleonCms::Post.table_name}.created_at > :created_at)", {position: object.post_order, created_at: object.created_at}).where.not(id: object.id).take.try(:decorate)
|
|
222
221
|
end
|
|
223
222
|
|
|
@@ -34,7 +34,7 @@ module CamaleonCms::CaptchaHelper
|
|
|
34
34
|
|
|
35
35
|
# verify captcha value
|
|
36
36
|
def cama_captcha_verified?
|
|
37
|
-
(session[:cama_captcha] || []).include?((params[:cama_captcha] || params[:captcha]).to_s.upcase)
|
|
37
|
+
(session[:cama_captcha] || []).include?((params[:cama_captcha] || params[:captcha]).to_s.upcase)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
#************************* captcha in attack helpers ***************************#
|
|
@@ -166,6 +166,7 @@ module CamaleonCms::Frontend::NavMenuHelper
|
|
|
166
166
|
# label => label of the link
|
|
167
167
|
# url: url for the link
|
|
168
168
|
def breadcrumb_add(label, url = "", prepend = false)
|
|
169
|
+
@_front_breadcrumb ||= []
|
|
169
170
|
if prepend
|
|
170
171
|
@_front_breadcrumb = @_front_breadcrumb.unshift([label, url])
|
|
171
172
|
else
|
|
@@ -18,8 +18,13 @@ module CamaleonCms::HooksHelper
|
|
|
18
18
|
PluginRoutes.enabled_apps(current_site).each do |plugin|
|
|
19
19
|
_do_hook(plugin, hook_key, params)
|
|
20
20
|
end
|
|
21
|
-
end
|
|
22
21
|
|
|
22
|
+
# call all anonymous hooks
|
|
23
|
+
PluginRoutes.get_anonymous_hooks(hook_key).each do |_hook|
|
|
24
|
+
_hook.call(params)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
23
28
|
# skip hook function with name: hook_function_name
|
|
24
29
|
def hook_skip(hook_function_name)
|
|
25
30
|
@_hooks_skip << hook_function_name
|
|
@@ -11,7 +11,7 @@ module CamaleonCms::SiteHelper
|
|
|
11
11
|
host << request.subdomain if request.subdomain.present?
|
|
12
12
|
site = CamaleonCms::Site.where(slug: host).first.decorate rescue nil
|
|
13
13
|
end
|
|
14
|
-
r = {site: site, request: request};
|
|
14
|
+
r = {site: site, request: (request rescue nil)};
|
|
15
15
|
cama_current_site_helper(r) rescue nil
|
|
16
16
|
Rails.logger.error 'Camaleon CMS - Please define your current site: $current_site = CamaleonCms::Site.first.decorate or map your domains: http://camaleon.tuzitio.com/documentation/category/139779-examples/how.html'.cama_log_style(:red) if !r[:site].present?
|
|
17
17
|
@current_site = r[:site]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module CamaleonCms::UploaderHelper
|
|
2
2
|
include ActionView::Helpers::NumberHelper
|
|
3
|
+
include CamaleonCms::CamaleonHelper
|
|
3
4
|
# upload a file into server
|
|
4
5
|
# settings:
|
|
5
6
|
# folder: Directory where the file will be saved (default: "")
|
|
@@ -21,7 +22,7 @@ module CamaleonCms::UploaderHelper
|
|
|
21
22
|
def upload_file(uploaded_io, settings = {})
|
|
22
23
|
cached_name = uploaded_io.is_a?(ActionDispatch::Http::UploadedFile) ? uploaded_io.original_filename : nil
|
|
23
24
|
return {error: "File is empty", file: nil, size: nil} unless uploaded_io.present?
|
|
24
|
-
if uploaded_io.is_a?(String) &&
|
|
25
|
+
if uploaded_io.is_a?(String) && uploaded_io.match(/^https?:\/\//).present? # download url file
|
|
25
26
|
tmp = cama_tmp_upload(uploaded_io)
|
|
26
27
|
return tmp if tmp[:error].present?
|
|
27
28
|
settings[:remove_source] = true
|
|
@@ -58,22 +59,21 @@ module CamaleonCms::UploaderHelper
|
|
|
58
59
|
end
|
|
59
60
|
# save file
|
|
60
61
|
key = File.join(settings[:folder], settings[:filename]).to_s.cama_fix_slash
|
|
61
|
-
res = cama_uploader.add_file(uploaded_io, key, {same_name: settings[:same_name]})
|
|
62
|
+
res = cama_uploader.add_file(settings[:uploaded_io], key, {same_name: settings[:same_name]})
|
|
62
63
|
{} if settings[:temporal_time] > 0 # temporal file upload (always put as local for temporal files) (TODO: use delayjob)
|
|
63
64
|
|
|
64
65
|
# generate image versions
|
|
65
|
-
if res['
|
|
66
|
+
if res['file_type'] == 'image'
|
|
66
67
|
settings[:versions].to_s.gsub(' ', '').split(',').each do |v|
|
|
67
|
-
version_path = cama_resize_upload(uploaded_io.path, v, {replace: false})
|
|
68
|
+
version_path = cama_resize_upload(settings[:uploaded_io].path, v, {replace: false})
|
|
68
69
|
cama_uploader.add_file(version_path, cama_uploader.version_path(res['key'], v), is_thumb: true, same_name: true)
|
|
69
70
|
FileUtils.rm_f(version_path)
|
|
70
71
|
end
|
|
71
72
|
end
|
|
72
73
|
|
|
73
74
|
# generate thumb
|
|
74
|
-
cama_uploader_generate_thumbnail(uploaded_io.path, res['key'], settings[:thumb_size]) if settings[:generate_thumb] && res['thumb'].present?
|
|
75
|
-
|
|
76
|
-
FileUtils.rm_f(uploaded_io.path) if settings[:remove_source]
|
|
75
|
+
cama_uploader_generate_thumbnail(uploaded_io.path, res['key'], settings[:thumb_size], settings[:remove_source]) if settings[:generate_thumb] && res['thumb'].present?
|
|
76
|
+
FileUtils.rm_f(uploaded_io.path) if File.exist?(uploaded_io.path) if settings[:remove_source]
|
|
77
77
|
|
|
78
78
|
hooks_run('after_upload', settings)
|
|
79
79
|
res
|
|
@@ -82,13 +82,13 @@ module CamaleonCms::UploaderHelper
|
|
|
82
82
|
# generate thumbnail of a existent image
|
|
83
83
|
# key: key of the current file
|
|
84
84
|
# the thumbnail will be saved in my_images/my_img.png => my_images/thumb/my_img.png
|
|
85
|
-
def cama_uploader_generate_thumbnail(uploaded_io, key, thumb_size = nil)
|
|
85
|
+
def cama_uploader_generate_thumbnail(uploaded_io, key, thumb_size = nil, remove_source = false)
|
|
86
86
|
w, h = cama_uploader.thumb[:w], cama_uploader.thumb[:h]
|
|
87
87
|
w, h = thumb_size.split('x') if thumb_size.present?
|
|
88
88
|
uploaded_io = File.open(uploaded_io) if uploaded_io.is_a?(String)
|
|
89
89
|
path_thumb = cama_resize_and_crop(uploaded_io.path, w, h)
|
|
90
|
-
thumb = cama_uploader.add_file(path_thumb, cama_uploader.version_path(key), is_thumb: true, same_name: true)
|
|
91
|
-
FileUtils.rm_f(path_thumb)
|
|
90
|
+
thumb = cama_uploader.add_file(path_thumb, cama_uploader.version_path(key).sub('.svg', '.jpg'), is_thumb: true, same_name: true)
|
|
91
|
+
FileUtils.rm_f(path_thumb) if remove_source
|
|
92
92
|
thumb
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -133,24 +133,26 @@ module CamaleonCms::UploaderHelper
|
|
|
133
133
|
def cama_crop_image(file_path, w=nil, h=nil, w_offset = 0, h_offset = 0, resize = false , replace = true)
|
|
134
134
|
force = ""
|
|
135
135
|
force = "!" if w.present? && h.present? && !w.include?("?") && !h.include?("?")
|
|
136
|
-
|
|
137
|
-
w =
|
|
138
|
-
h =
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
i.
|
|
136
|
+
img = MiniMagick::Image.open(file_path)
|
|
137
|
+
w = img[:width].to_f > w.sub('?', '').to_i ? w.sub('?', "") : img[:width] if w.present? && w.to_s.include?('?')
|
|
138
|
+
h = img[:height].to_f > h.sub('?', '').to_i ? h.sub('?', "") : img[:height] if h.present? && h.to_s.include?('?')
|
|
139
|
+
data = {img: img, w: w, h: h, w_offset: w_offset, h_offset: h_offset, resize: resize, replace: replace}; hooks_run("before_crop_image", data)
|
|
140
|
+
data[:img].combine_options do |i|
|
|
141
|
+
i.resize("#{w if w.present?}x#{h if h.present?}#{force}") if data[:resize]
|
|
142
|
+
i.crop "#{w if w.present?}x#{h if h.present?}+#{w_offset}+#{h_offset}#{force}" unless data[:resize]
|
|
142
143
|
end
|
|
143
144
|
|
|
144
145
|
res = file_path
|
|
145
|
-
unless replace
|
|
146
|
+
unless data[:replace]
|
|
146
147
|
ext = File.extname(file_path)
|
|
147
148
|
res = file_path.gsub(ext, "_crop#{ext}")
|
|
148
149
|
end
|
|
149
|
-
|
|
150
|
+
data[:img].write res
|
|
150
151
|
res
|
|
151
152
|
end
|
|
152
153
|
|
|
153
154
|
# resize and crop a file
|
|
155
|
+
# SVGs are converted to JPEGs for editing
|
|
154
156
|
# Params:
|
|
155
157
|
# file: (String) File path
|
|
156
158
|
# w: (Integer) width
|
|
@@ -164,6 +166,11 @@ module CamaleonCms::UploaderHelper
|
|
|
164
166
|
def cama_resize_and_crop(file, w, h, settings = {})
|
|
165
167
|
settings = {gravity: :north_east, overwrite: true, output_name: ""}.merge(settings)
|
|
166
168
|
img = MiniMagick::Image.open(file)
|
|
169
|
+
if file.end_with? '.svg'
|
|
170
|
+
img.format 'jpg'
|
|
171
|
+
file.sub! '.svg', '.jpg'
|
|
172
|
+
settings[:output_name].sub!('.svg', '.jpg') if settings[:output_name]
|
|
173
|
+
end
|
|
167
174
|
w = img[:width].to_f > w.sub('?', '').to_i ? w.sub('?', "") : img[:width] if w.present? && w.to_s.include?('?')
|
|
168
175
|
h = img[:height].to_f > h.sub('?', '').to_i ? h.sub('?', "") : img[:height] if h.present? && h.to_s.include?('?')
|
|
169
176
|
w_original, h_original = [img[:width].to_f, img[:height].to_f]
|
|
@@ -181,19 +188,21 @@ module CamaleonCms::UploaderHelper
|
|
|
181
188
|
h_result = h
|
|
182
189
|
end
|
|
183
190
|
|
|
184
|
-
w_offset, h_offset = cama_crop_offsets_by_gravity(settings[:gravity], [w_result, h_result], [
|
|
185
|
-
img
|
|
186
|
-
|
|
191
|
+
w_offset, h_offset = cama_crop_offsets_by_gravity(settings[:gravity], [w_result, h_result], [w, h])
|
|
192
|
+
data = {img: img, w: w, h: h, w_offset: w_offset, h_offset: h_offset, op_resize: op_resize, settings: settings}; hooks_run("before_resize_crop", data)
|
|
193
|
+
data[:img].combine_options do |i|
|
|
194
|
+
i.resize(data[:op_resize])
|
|
187
195
|
i.gravity(settings[:gravity])
|
|
188
|
-
i.crop "#{w.to_i}x#{h.to_i}+#{w_offset}+#{h_offset}!"
|
|
196
|
+
i.crop "#{data[:w].to_i}x#{data[:h].to_i}+#{data[:w_offset]}+#{data[:h_offset]}!"
|
|
189
197
|
end
|
|
190
198
|
|
|
191
|
-
|
|
192
|
-
|
|
199
|
+
if settings[:overwrite]
|
|
200
|
+
data[:img].write(file.sub '.svg', '.jpg')
|
|
201
|
+
else
|
|
193
202
|
if settings[:output_name].present?
|
|
194
|
-
img.write(file = File.join(File.dirname(file), settings[:output_name]).to_s)
|
|
203
|
+
data[:img].write(file = File.join(File.dirname(file), settings[:output_name]).to_s)
|
|
195
204
|
else
|
|
196
|
-
img.write(file = uploader_verify_name(File.join(File.dirname(file), "crop_#{File.basename(file)}")))
|
|
205
|
+
data[:img].write(file = uploader_verify_name(File.join(File.dirname(file), "crop_#{File.basename(file.sub '.svg', '.jpg')}")))
|
|
197
206
|
end
|
|
198
207
|
end
|
|
199
208
|
file
|
|
@@ -271,7 +280,7 @@ module CamaleonCms::UploaderHelper
|
|
|
271
280
|
}
|
|
272
281
|
hooks_run("on_uploader", args)
|
|
273
282
|
return args[:custom_uploader] if args[:custom_uploader].present?
|
|
274
|
-
|
|
283
|
+
|
|
275
284
|
case args[:server]
|
|
276
285
|
when 's3', 'aws'
|
|
277
286
|
CamaleonCmsAwsUploader.new({current_site: current_site, thumb: args[:thumb], aws_settings: args[:aws_settings]}, self)
|