alchemy_cms 7.0.7 → 7.0.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5eb0c05455de8ab6f10985ac53819ce4c3c31648b93909f933dc57af4f056f3d
4
- data.tar.gz: 43f67834df294087fed4fc699a9a91a30988f0f08e798b02c8c87e96d5373592
3
+ metadata.gz: 8da1dca92c99bbe46045a378b3a2f9b7585c168adf95c5887f487e6145ccc8fa
4
+ data.tar.gz: 2b03c7720954bd3293b461ea3888cbdc7688658cf4d55ee93f34d0ee0665b784
5
5
  SHA512:
6
- metadata.gz: 7cc55a633a63004a971e0ac070bfa0e9b7bcce2070b06086204f50cea1619cd3d83592b6b4bb33ad044bf17525b36fc3374fb00c689a069d917242364bf424c1
7
- data.tar.gz: 33d84a1857ebc5a2cbb26fc48bb18b355a1aeb7e007cadb7151bb5e567e6148deb0f40d6c2376c144419450c3f67eedcb8f04e29b51b26cf9cc0201207d80490
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"]
@@ -1,6 +1,3 @@
1
1
  .label {
2
- @include label-base(
3
- $margin: $default-margin/2 0,
4
- $padding: $default-padding 2*$default-padding $default-padding
5
- );
2
+ @include label-base($margin: 0, $padding: 0 2 * $default-padding);
6
3
  }
@@ -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.ingredient(:mail_to) || mailer_config["mail_to"]
80
+ @element.value_for(:mail_to) || mailer_config["mail_to"]
81
81
  end
82
82
 
83
83
  def mail_from
84
- @element.ingredient(:mail_from) || mailer_config["mail_from"]
84
+ @element.value_for(:mail_from) || mailer_config["mail_from"]
85
85
  end
86
86
 
87
87
  def subject
88
- @element.ingredient(:subject) || mailer_config["subject"]
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.ingredient(:success_page)
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 = Alchemy::Language.current
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}".to_sym,
162
- "errors.#{error}".to_sym
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
- repository.not_nested.each.with_index(1) do |element, position|
51
+ elements.each.with_index(1) do |element, position|
43
52
  Alchemy::DuplicateElement.new(element, repository: repository).call(
44
- page_version_id: target.draft_version.id,
53
+ page_version_id: page_version.id,
45
54
  position: position
46
55
  )
47
56
  end
@@ -581,7 +581,7 @@ module Alchemy
581
581
 
582
582
  def set_fixed_attributes
583
583
  fixed_attributes.all.each do |attribute, value|
584
- send("#{attribute}=", value)
584
+ send(:"#{attribute}=", value)
585
585
  end
586
586
  end
587
587
 
@@ -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, params[:filter].try(:[], filter.name)
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? Hash %>
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 class="count">
5
- <%= tag.taggings.collect(&:taggable).collect { |t| t.class.model_name.human }.uniq.join(', ') %>
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
- # Try to find and stores current language for Alchemy.
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
- # find the best language and remember it for later
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's id in the session.
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
@@ -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 = (custom_model || guess_model_from_controller_path)
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".to_sym
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 = (resource_scope + [resource] || resource_handler.resource_array)
49
+ path_segments = resource_scope + [resource] || resource_handler.resource_array
50
50
  edit_polymorphic_path path_segments, options
51
51
  end
52
52
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "7.0.7"
4
+ VERSION = "7.0.9"
5
5
 
6
6
  def self.version
7
7
  VERSION
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.7
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: 2023-11-28 00:00:00.000000000 Z
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.17
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