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 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