alchemy_cms 7.0.7 → 7.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/alchemy_cms.gemspec +1 -1
- data/app/assets/stylesheets/alchemy/labels.scss +1 -4
- data/app/controllers/alchemy/admin/languages_controller.rb +2 -1
- data/app/controllers/alchemy/admin/resources_controller.rb +5 -5
- data/app/controllers/alchemy/messages_controller.rb +4 -4
- data/app/controllers/concerns/alchemy/admin/current_language.rb +5 -1
- data/app/models/alchemy/element/element_ingredients.rb +2 -2
- data/app/models/alchemy/ingredient.rb +3 -3
- data/app/models/alchemy/ingredient_validator.rb +2 -2
- data/app/models/alchemy/page/page_elements.rb +11 -2
- data/app/models/alchemy/page.rb +1 -1
- data/app/models/concerns/alchemy/picture_thumbnails.rb +1 -1
- data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +5 -5
- data/app/views/alchemy/admin/resources/_filter.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_per_page_select.html.erb +1 -1
- data/app/views/alchemy/admin/tags/_tag.html.erb +6 -2
- data/lib/alchemy/controller_actions.rb +4 -17
- data/lib/alchemy/resource.rb +2 -2
- data/lib/alchemy/resources_helper.rb +3 -3
- data/lib/alchemy/version.rb +1 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8da1dca92c99bbe46045a378b3a2f9b7585c168adf95c5887f487e6145ccc8fa
|
4
|
+
data.tar.gz: 2b03c7720954bd3293b461ea3888cbdc7688658cf4d55ee93f34d0ee0665b784
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb3960ce49c6f137040b72458438fff2bb698898fe9ad64370980dd4dcd97df9cbce2033f5b13b2011e40c173b6acc7b9a05ef1146a1d042f1adbf755734eb57
|
7
|
+
data.tar.gz: 86bd60f2a5af41044b7fa23245bd82ed4e204ad01a1630efcc5327d7b25ee38500e69fa8fcf69bd55c2048687279ff8394c5c98601d4a0edc0f63438924e23cb
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 7.0.9 (2024-02-27)
|
4
|
+
|
5
|
+
- [7.0] Fix tags view for missing taggables [#2757](https://github.com/AlchemyCMS/alchemy_cms/pull/2757) ([tvdeyen](https://github.com/tvdeyen))
|
6
|
+
- [7.0-stable] Merge pull request #2752 from tvdeyen/fix-copy-elements-order [#2753](https://github.com/AlchemyCMS/alchemy_cms/pull/2753) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
7
|
+
- [7.0-stable] Merge pull request #2689 from robinboening/fix_switching_to_default_language [#2745](https://github.com/AlchemyCMS/alchemy_cms/pull/2745) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
8
|
+
- [7.0-stable] Merge pull request #2720 from sascha-karnatz/restrict-turbo-rails-version [#2725](https://github.com/AlchemyCMS/alchemy_cms/pull/2725) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
9
|
+
- [7.0-stable] Merge pull request #2665 from tvdeyen/resource-filter-fixes [#2668](https://github.com/AlchemyCMS/alchemy_cms/pull/2668) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
10
|
+
|
11
|
+
## 7.0.8 (2023-12-28)
|
12
|
+
|
13
|
+
- [7.0-stable] Merge pull request #2658 from tvdeyen/fix-contactform-mailer [#2660](https://github.com/AlchemyCMS/alchemy_cms/pull/2660) ([alchemycms-bot](https://github.com/alchemycms-bot))
|
14
|
+
- [7.0] Fix humanization for add nested element button [#2659](https://github.com/AlchemyCMS/alchemy_cms/pull/2659) ([tvdeyen](https://github.com/tvdeyen))
|
15
|
+
|
3
16
|
## 7.0.7 (2023-11-28)
|
4
17
|
|
5
18
|
- [7.0] Disable Turbolinks on menubar [#2622](https://github.com/AlchemyCMS/alchemy_cms/pull/2622) ([tvdeyen](https://github.com/tvdeyen))
|
data/alchemy_cms.gemspec
CHANGED
@@ -51,7 +51,7 @@ Gem::Specification.new do |gem|
|
|
51
51
|
gem.add_runtime_dependency "sassc-rails", ["~> 2.1"]
|
52
52
|
gem.add_runtime_dependency "simple_form", [">= 4.0", "< 6"]
|
53
53
|
gem.add_runtime_dependency "sprockets", [">= 3.0", "< 5"]
|
54
|
-
gem.add_runtime_dependency "turbo-rails", [">= 1.4"]
|
54
|
+
gem.add_runtime_dependency "turbo-rails", [">= 1.4", "< 2"]
|
55
55
|
gem.add_runtime_dependency "view_component", ["~> 3.0"]
|
56
56
|
|
57
57
|
gem.add_development_dependency "capybara", ["~> 3.0"]
|
@@ -38,7 +38,8 @@ module Alchemy
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def switch
|
41
|
-
set_alchemy_language(params[:language_id])
|
41
|
+
@language = set_alchemy_language(params[:language_id])
|
42
|
+
session[:alchemy_language_id] = @language.id
|
42
43
|
do_redirect_to request.referer || alchemy.admin_dashboard_path
|
43
44
|
end
|
44
45
|
|
@@ -34,16 +34,16 @@ module Alchemy
|
|
34
34
|
respond_to do |format|
|
35
35
|
format.html do
|
36
36
|
items = items.page(params[:page] || 1).per(items_per_page)
|
37
|
-
instance_variable_set("@#{resource_handler.resources_name}", items)
|
37
|
+
instance_variable_set(:"@#{resource_handler.resources_name}", items)
|
38
38
|
end
|
39
39
|
format.csv do
|
40
|
-
instance_variable_set("@#{resource_handler.resources_name}", items)
|
40
|
+
instance_variable_set(:"@#{resource_handler.resources_name}", items)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
def new
|
46
|
-
instance_variable_set("@#{resource_handler.resource_name}", resource_handler.model.new)
|
46
|
+
instance_variable_set(:"@#{resource_handler.resource_name}", resource_handler.model.new)
|
47
47
|
end
|
48
48
|
|
49
49
|
def show
|
@@ -54,7 +54,7 @@ module Alchemy
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def create
|
57
|
-
instance_variable_set("@#{resource_handler.resource_name}", resource_handler.model.new(resource_params))
|
57
|
+
instance_variable_set(:"@#{resource_handler.resource_name}", resource_handler.model.new(resource_params))
|
58
58
|
resource_instance_variable.save
|
59
59
|
render_errors_or_redirect(
|
60
60
|
resource_instance_variable,
|
@@ -169,7 +169,7 @@ module Alchemy
|
|
169
169
|
end
|
170
170
|
|
171
171
|
def load_resource
|
172
|
-
instance_variable_set("@#{resource_handler.resource_name}", resource_handler.model.find(params[:id]))
|
172
|
+
instance_variable_set(:"@#{resource_handler.resource_name}", resource_handler.model.find(params[:id]))
|
173
173
|
end
|
174
174
|
|
175
175
|
def authorize_resource
|
@@ -77,15 +77,15 @@ module Alchemy
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def mail_to
|
80
|
-
@element.
|
80
|
+
@element.value_for(:mail_to) || mailer_config["mail_to"]
|
81
81
|
end
|
82
82
|
|
83
83
|
def mail_from
|
84
|
-
@element.
|
84
|
+
@element.value_for(:mail_from) || mailer_config["mail_from"]
|
85
85
|
end
|
86
86
|
|
87
87
|
def subject
|
88
|
-
@element.
|
88
|
+
@element.value_for(:subject) || mailer_config["subject"]
|
89
89
|
end
|
90
90
|
|
91
91
|
def redirect_to_success_page
|
@@ -104,7 +104,7 @@ module Alchemy
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def success_page
|
107
|
-
@_success_page ||= @element.
|
107
|
+
@_success_page ||= @element.value_for(:success_page)
|
108
108
|
end
|
109
109
|
|
110
110
|
def success_page_urlname
|
@@ -12,7 +12,11 @@ module Alchemy
|
|
12
12
|
private
|
13
13
|
|
14
14
|
def load_current_language
|
15
|
-
@current_language =
|
15
|
+
@current_language = if session[:alchemy_language_id].present?
|
16
|
+
set_alchemy_language(session[:alchemy_language_id])
|
17
|
+
else
|
18
|
+
Alchemy::Language.current
|
19
|
+
end
|
16
20
|
if @current_language.nil?
|
17
21
|
flash[:warning] = Alchemy.t("Please create a language first.")
|
18
22
|
redirect_to admin_languages_path
|
@@ -158,8 +158,8 @@ module Alchemy
|
|
158
158
|
"#{name}.#{role}.#{error}",
|
159
159
|
scope: "ingredient_validations",
|
160
160
|
default: [
|
161
|
-
"fields.#{role}.#{error}"
|
162
|
-
"errors.#{error}"
|
161
|
+
:"fields.#{role}.#{error}",
|
162
|
+
:"errors.#{error}"
|
163
163
|
],
|
164
164
|
field: Alchemy::Ingredient.translated_label_for(role, name)
|
165
165
|
)
|
@@ -45,14 +45,14 @@ module Alchemy
|
|
45
45
|
# @param [String] The class name of the related object
|
46
46
|
def related_object_alias(name, class_name:)
|
47
47
|
alias_method name, :related_object
|
48
|
-
alias_method "#{name}=", :related_object=
|
48
|
+
alias_method :"#{name}=", :related_object=
|
49
49
|
|
50
50
|
# Somehow Rails STI does not allow us to use `alias_method` for the related_object_id
|
51
|
-
define_method "#{name}_id" do
|
51
|
+
define_method :"#{name}_id" do
|
52
52
|
related_object_id
|
53
53
|
end
|
54
54
|
|
55
|
-
define_method "#{name}_id=" do |id|
|
55
|
+
define_method :"#{name}_id=" do |id|
|
56
56
|
self.related_object_id = id
|
57
57
|
self.related_object_type = class_name
|
58
58
|
end
|
@@ -51,10 +51,10 @@ module Alchemy
|
|
51
51
|
validations.each do |validation|
|
52
52
|
if validation.respond_to?(:keys)
|
53
53
|
validation.map do |key, value|
|
54
|
-
send("validate_#{key}", value)
|
54
|
+
send(:"validate_#{key}", value)
|
55
55
|
end
|
56
56
|
else
|
57
|
-
send("validate_#{validation}")
|
57
|
+
send(:"validate_#{validation}")
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -37,11 +37,20 @@ module Alchemy
|
|
37
37
|
#
|
38
38
|
def copy_elements(source, target)
|
39
39
|
repository = source.draft_version.element_repository
|
40
|
+
elements = repository.not_nested
|
41
|
+
page_version = target.draft_version
|
42
|
+
duplicate_elements(elements.unfixed, repository, page_version) +
|
43
|
+
duplicate_elements(elements.fixed, repository, page_version)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def duplicate_elements(elements, repository, page_version)
|
40
49
|
transaction do
|
41
50
|
Element.acts_as_list_no_update do
|
42
|
-
|
51
|
+
elements.each.with_index(1) do |element, position|
|
43
52
|
Alchemy::DuplicateElement.new(element, repository: repository).call(
|
44
|
-
page_version_id:
|
53
|
+
page_version_id: page_version.id,
|
45
54
|
position: position
|
46
55
|
)
|
47
56
|
end
|
data/app/models/alchemy/page.rb
CHANGED
@@ -168,7 +168,7 @@ module Alchemy
|
|
168
168
|
def fix_crop_values
|
169
169
|
%i[crop_from crop_size].each do |crop_value|
|
170
170
|
if public_send(crop_value).is_a?(String)
|
171
|
-
public_send("#{crop_value}=", normalize_crop_value(crop_value))
|
171
|
+
public_send(:"#{crop_value}=", normalize_crop_value(crop_value))
|
172
172
|
end
|
173
173
|
end
|
174
174
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= content_tag :div, class: 'add-nested-element', data: { element_id: element.id } do %>
|
2
2
|
<% if element.expanded? || element.fixed? %>
|
3
|
-
<% if element.nestable_elements.length == 1 &&
|
4
|
-
(nestable_element = element.nestable_elements.first) &&
|
3
|
+
<% if element.nestable_elements.length == 1 &&
|
4
|
+
(nestable_element = element.nestable_elements.first) &&
|
5
5
|
Alchemy::Element.all_from_clipboard_for_parent_element(get_clipboard("elements"), element).none?
|
6
6
|
%>
|
7
7
|
<%= form_for [:admin, Alchemy::Element.new(name: nestable_element)],
|
@@ -10,11 +10,11 @@
|
|
10
10
|
<%= f.hidden_field :page_version_id, value: element.page_version_id %>
|
11
11
|
<%= f.hidden_field :parent_element_id, value: element.id %>
|
12
12
|
<button class="button add-nestable-element-button" data-alchemy-button>
|
13
|
-
<%= Alchemy.t(:add_nested_element, name: Alchemy.t(nestable_element, scope: 'element_names')) %>
|
13
|
+
<%= Alchemy.t(:add_nested_element, name: Alchemy.t(nestable_element.to_sym, scope: 'element_names')) %>
|
14
14
|
</button>
|
15
15
|
<% end %>
|
16
16
|
<% else %>
|
17
|
-
<%= link_to_dialog (nestable_element ? Alchemy.t(:add_nested_element, name: Alchemy.t(nestable_element, scope: 'element_names')) : Alchemy.t("New Element")),
|
17
|
+
<%= link_to_dialog (nestable_element ? Alchemy.t(:add_nested_element, name: Alchemy.t(nestable_element.to_sym, scope: 'element_names')) : Alchemy.t("New Element")),
|
18
18
|
alchemy.new_admin_element_path(
|
19
19
|
parent_element_id: element.id,
|
20
20
|
page_version_id: element.page_version_id
|
@@ -24,4 +24,4 @@
|
|
24
24
|
}, class: "button add-nestable-element-button" %>
|
25
25
|
<% end %>
|
26
26
|
<% end %>
|
27
|
-
<% end %>
|
27
|
+
<% end %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<%= select_tag(
|
4
4
|
filter.name,
|
5
5
|
options_for_select(
|
6
|
-
filter.options_for_select,
|
6
|
+
filter.options_for_select, search_filter_params.dig(:filter, filter.name)
|
7
7
|
),
|
8
8
|
include_blank: Alchemy.t(:all, scope: ['resources', resource_name, 'filters']),
|
9
9
|
data: { remote: !!request.xhr? },
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= form_tag url_for, method: :get, class: 'per-page-select-form' do |f| %>
|
2
2
|
<% search_filter_params.reject { |k, _| k == 'page' || k == 'per_page' }.each do |key, value| %>
|
3
|
-
<% if value.is_a?
|
3
|
+
<% if value.is_a? ActionController::Parameters %>
|
4
4
|
<% value.each do |k, v| %>
|
5
5
|
<%= hidden_field_tag "#{key}[#{k}]", v, id: nil %>
|
6
6
|
<% end %>
|
@@ -1,8 +1,12 @@
|
|
1
1
|
<tr class="<%= cycle('even', 'odd') %>">
|
2
2
|
<td class="icon"><%= render_icon :tag %></td>
|
3
3
|
<td class="name"><%= tag.name %></td>
|
4
|
-
<td
|
5
|
-
|
4
|
+
<td>
|
5
|
+
<% tag.taggings.collect(&:taggable).compact.uniq.each do |taggable| %>
|
6
|
+
<span class="label">
|
7
|
+
<%= taggable.class.model_name.human %>
|
8
|
+
</span>
|
9
|
+
<% end %>
|
6
10
|
</td>
|
7
11
|
<td class="count"><%= tag.taggings.count %></td>
|
8
12
|
<td class="tools">
|
@@ -59,17 +59,15 @@ module Alchemy
|
|
59
59
|
Site.current = current_alchemy_site
|
60
60
|
end
|
61
61
|
|
62
|
-
#
|
62
|
+
# Sets the current language for Alchemy.
|
63
63
|
#
|
64
64
|
def set_alchemy_language(lang = nil)
|
65
65
|
@language = if lang
|
66
66
|
lang.is_a?(Language) ? lang : load_alchemy_language_from_id_or_code(lang)
|
67
67
|
else
|
68
|
-
|
69
|
-
load_alchemy_language_from_params ||
|
70
|
-
load_alchemy_language_from_session ||
|
71
|
-
Language.default
|
68
|
+
load_alchemy_language_from_params || Language.default
|
72
69
|
end
|
70
|
+
|
73
71
|
store_current_alchemy_language(@language)
|
74
72
|
end
|
75
73
|
|
@@ -80,26 +78,15 @@ module Alchemy
|
|
80
78
|
end
|
81
79
|
end
|
82
80
|
|
83
|
-
# Load language from session if it's present on current site.
|
84
|
-
# Otherwise return nil so we can load the default language from current site.
|
85
|
-
def load_alchemy_language_from_session
|
86
|
-
if session[:alchemy_language_id].present? && Site.current
|
87
|
-
Site.current.languages.find_by(id: session[:alchemy_language_id])
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
81
|
def load_alchemy_language_from_id_or_code(id_or_code)
|
92
82
|
Language.find_by(id: id_or_code) ||
|
93
83
|
Language.find_by_code(id_or_code)
|
94
84
|
end
|
95
85
|
|
96
|
-
# Stores language
|
97
|
-
#
|
98
|
-
# Also stores language in +Language.current+
|
86
|
+
# Stores language in +Language.current+
|
99
87
|
#
|
100
88
|
def store_current_alchemy_language(language)
|
101
89
|
if language&.id
|
102
|
-
session[:alchemy_language_id] = language.id
|
103
90
|
Language.current = language
|
104
91
|
end
|
105
92
|
end
|
data/lib/alchemy/resource.rb
CHANGED
@@ -108,7 +108,7 @@ module Alchemy
|
|
108
108
|
def initialize(controller_path, module_definition = nil, custom_model = nil)
|
109
109
|
@controller_path = controller_path
|
110
110
|
@module_definition = module_definition
|
111
|
-
@model =
|
111
|
+
@model = custom_model || guess_model_from_controller_path
|
112
112
|
if model.respond_to?(:alchemy_resource_relations)
|
113
113
|
if !model.respond_to?(:reflect_on_all_associations)
|
114
114
|
raise MissingActiveRecordAssociation
|
@@ -320,7 +320,7 @@ module Alchemy
|
|
320
320
|
model.alchemy_resource_relations.each do |name, options|
|
321
321
|
relation_name = name.to_s.gsub(/_id$/, "") # ensure that we don't have an id
|
322
322
|
association = association_from_relation_name(relation_name)
|
323
|
-
foreign_key = association.options[:foreign_key] || "#{association.name}_id"
|
323
|
+
foreign_key = association.options[:foreign_key] || :"#{association.name}_id"
|
324
324
|
collection = options[:collection] || resource_relation_class(association).all
|
325
325
|
resource_relations[foreign_key] = options.merge(
|
326
326
|
model_association: association,
|
@@ -14,11 +14,11 @@ module Alchemy
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def resource_instance_variable
|
17
|
-
instance_variable_get("@#{resource_handler.resource_name}")
|
17
|
+
instance_variable_get(:"@#{resource_handler.resource_name}")
|
18
18
|
end
|
19
19
|
|
20
20
|
def resources_instance_variable
|
21
|
-
instance_variable_get("@#{resource_handler.resources_name}")
|
21
|
+
instance_variable_get(:"@#{resource_handler.resources_name}")
|
22
22
|
end
|
23
23
|
|
24
24
|
def resource_url_proxy
|
@@ -46,7 +46,7 @@ module Alchemy
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def edit_resource_path(resource = nil, options = {})
|
49
|
-
path_segments =
|
49
|
+
path_segments = resource_scope + [resource] || resource_handler.resource_array
|
50
50
|
edit_polymorphic_path path_segments, options
|
51
51
|
end
|
52
52
|
|
data/lib/alchemy/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alchemy_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas von Deyen
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2024-02-27 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: actionmailer
|
@@ -508,6 +508,9 @@ dependencies:
|
|
508
508
|
- - ">="
|
509
509
|
- !ruby/object:Gem::Version
|
510
510
|
version: '1.4'
|
511
|
+
- - "<"
|
512
|
+
- !ruby/object:Gem::Version
|
513
|
+
version: '2'
|
511
514
|
type: :runtime
|
512
515
|
prerelease: false
|
513
516
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -515,6 +518,9 @@ dependencies:
|
|
515
518
|
- - ">="
|
516
519
|
- !ruby/object:Gem::Version
|
517
520
|
version: '1.4'
|
521
|
+
- - "<"
|
522
|
+
- !ruby/object:Gem::Version
|
523
|
+
version: '2'
|
518
524
|
- !ruby/object:Gem::Dependency
|
519
525
|
name: view_component
|
520
526
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1449,7 +1455,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1449
1455
|
version: '0'
|
1450
1456
|
requirements:
|
1451
1457
|
- ImageMagick (libmagick), v6.6 or greater.
|
1452
|
-
rubygems_version: 3.4.
|
1458
|
+
rubygems_version: 3.4.19
|
1453
1459
|
signing_key:
|
1454
1460
|
specification_version: 4
|
1455
1461
|
summary: A powerful, userfriendly and flexible CMS for Rails
|