alchemy_cms 4.4.4 → 4.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +23 -17
- data/.rubocop.yml +7 -15
- data/CHANGELOG.md +37 -1
- data/alchemy_cms.gemspec +1 -0
- data/app/assets/javascripts/alchemy/admin.js +3 -0
- data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +5 -5
- data/app/assets/javascripts/alchemy/alchemy.node_tree.js +66 -0
- data/app/assets/javascripts/alchemy/alchemy.utils.js +45 -0
- data/app/assets/javascripts/alchemy/templates/index.js +1 -0
- data/app/assets/javascripts/alchemy/templates/node_folder.hbs +3 -0
- data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
- data/app/assets/stylesheets/alchemy/_mixins.scss +2 -3
- data/app/assets/stylesheets/alchemy/_variables.scss +2 -2
- data/app/assets/stylesheets/alchemy/lists.scss +0 -8
- data/app/assets/stylesheets/alchemy/nodes.scss +6 -1
- data/app/assets/stylesheets/alchemy/sitemap.scss +59 -21
- data/app/controllers/alchemy/admin/dashboard_controller.rb +1 -1
- data/app/controllers/alchemy/admin/nodes_controller.rb +0 -10
- data/app/controllers/alchemy/admin/pages_controller.rb +0 -1
- data/app/controllers/alchemy/api/nodes_controller.rb +29 -0
- data/app/controllers/alchemy/api/pages_controller.rb +2 -0
- data/app/decorators/alchemy/content_editor.rb +55 -0
- data/app/helpers/alchemy/admin/pages_helper.rb +16 -16
- data/app/helpers/alchemy/pages_helper.rb +1 -1
- data/app/models/alchemy/content.rb +8 -22
- data/app/models/alchemy/node.rb +29 -6
- data/app/models/alchemy/page.rb +11 -0
- data/app/models/alchemy/page/page_naming.rb +1 -1
- data/app/models/alchemy/page/url_path.rb +66 -0
- data/app/serializers/alchemy/node_serializer.rb +12 -0
- data/app/serializers/alchemy/page_serializer.rb +2 -1
- data/app/serializers/alchemy/page_tree_serializer.rb +4 -3
- data/app/views/alchemy/admin/layoutpages/index.html.erb +5 -1
- data/app/views/alchemy/admin/nodes/_form.html.erb +13 -8
- data/app/views/alchemy/admin/nodes/_node.html.erb +10 -20
- data/app/views/alchemy/admin/nodes/index.html.erb +2 -16
- data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_menu_fields.html.erb +33 -29
- data/app/views/alchemy/admin/pages/_page.html.erb +3 -6
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +6 -0
- data/app/views/alchemy/admin/pages/info.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_routes.html.erb +8 -0
- data/config/alchemy/config.yml +0 -6
- data/config/locales/alchemy.en.yml +14 -6
- data/config/routes.rb +8 -5
- data/lib/alchemy/config.rb +30 -2
- data/lib/alchemy/resource.rb +6 -4
- data/lib/alchemy/ssl_protection.rb +3 -1
- data/lib/alchemy/upgrader/four_point_six.rb +50 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/rails/generators/alchemy/install/install_generator.rb +1 -1
- data/lib/rails/generators/alchemy/install/templates/menus.yml.tt +8 -0
- data/lib/rails/generators/alchemy/menus/menus_generator.rb +3 -3
- data/lib/rails/generators/alchemy/menus/templates/wrapper.html.haml +1 -1
- data/lib/rails/generators/alchemy/menus/templates/wrapper.html.slim +1 -1
- data/lib/tasks/alchemy/convert.rake +10 -7
- data/lib/tasks/alchemy/upgrade.rake +71 -46
- data/vendor/assets/javascripts/sortable/Sortable.min.js +2 -0
- metadata +27 -3
data/config/routes.rb
CHANGED
@@ -17,11 +17,7 @@ Alchemy::Engine.routes.draw do
|
|
17
17
|
namespace :admin, {path: Alchemy.admin_path, constraints: Alchemy.admin_constraints} do
|
18
18
|
resources :contents, only: [:create]
|
19
19
|
|
20
|
-
resources :nodes
|
21
|
-
member do
|
22
|
-
patch :toggle
|
23
|
-
end
|
24
|
-
end
|
20
|
+
resources :nodes
|
25
21
|
|
26
22
|
resources :pages do
|
27
23
|
resources :elements
|
@@ -152,6 +148,13 @@ Alchemy::Engine.routes.draw do
|
|
152
148
|
|
153
149
|
get '/pages/*urlname(.:format)' => 'pages#show', as: 'page'
|
154
150
|
get '/admin/pages/:id(.:format)' => 'pages#show', as: 'preview_page'
|
151
|
+
|
152
|
+
resources :nodes, only: [] do
|
153
|
+
member do
|
154
|
+
patch :move
|
155
|
+
patch :toggle_folded
|
156
|
+
end
|
157
|
+
end
|
155
158
|
end
|
156
159
|
|
157
160
|
get '/:locale' => 'pages#index',
|
data/lib/alchemy/config.rb
CHANGED
@@ -8,8 +8,10 @@ module Alchemy
|
|
8
8
|
# @param name [String]
|
9
9
|
#
|
10
10
|
def get(name)
|
11
|
+
check_deprecation(name)
|
11
12
|
show[name.to_s]
|
12
13
|
end
|
14
|
+
|
13
15
|
alias_method :parameter, :get
|
14
16
|
|
15
17
|
# Returns a merged configuration of the following files
|
@@ -25,11 +27,22 @@ module Alchemy
|
|
25
27
|
@config ||= merge_configs!(alchemy_config, main_app_config, env_specific_config)
|
26
28
|
end
|
27
29
|
|
30
|
+
# A list of deprecated configurations
|
31
|
+
# a value of nil means there is no new default
|
32
|
+
# any not nil value is the new default
|
33
|
+
def deprecated_configs
|
34
|
+
{
|
35
|
+
url_nesting: true,
|
36
|
+
require_ssl: nil,
|
37
|
+
auto_logout_time: nil,
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
28
41
|
private
|
29
42
|
|
30
43
|
# Alchemy default configuration
|
31
44
|
def alchemy_config
|
32
|
-
read_file(File.join(File.dirname(__FILE__),
|
45
|
+
read_file(File.join(File.dirname(__FILE__), "..", "..", "config/alchemy/config.yml"))
|
33
46
|
end
|
34
47
|
|
35
48
|
# Application specific configuration
|
@@ -54,11 +67,26 @@ module Alchemy
|
|
54
67
|
# Merges all given configs together
|
55
68
|
#
|
56
69
|
def merge_configs!(*config_files)
|
57
|
-
raise LoadError,
|
70
|
+
raise LoadError, "No Alchemy config file found!" if config_files.map(&:blank?).all?
|
71
|
+
|
58
72
|
config = {}
|
59
73
|
config_files.each { |h| config.merge!(h.stringify_keys!) }
|
60
74
|
config
|
61
75
|
end
|
76
|
+
|
77
|
+
def check_deprecation(name)
|
78
|
+
if deprecated_configs.key?(name.to_sym)
|
79
|
+
config = deprecated_configs[name.to_sym]
|
80
|
+
if config.nil?
|
81
|
+
Alchemy::Deprecation.warn("#{name} configuration is deprecated and will be removed from Alchemy 5.0")
|
82
|
+
else
|
83
|
+
value = show[name.to_s]
|
84
|
+
if value != config
|
85
|
+
Alchemy::Deprecation.warn("Setting #{name} configuration to #{value} is deprecated and will be always #{config} in Alchemy 5.0")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
62
90
|
end
|
63
91
|
end
|
64
92
|
end
|
data/lib/alchemy/resource.rb
CHANGED
@@ -131,21 +131,23 @@ module Alchemy
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def namespaced_resource_name
|
134
|
-
@_namespaced_resource_name ||=
|
134
|
+
@_namespaced_resource_name ||= begin
|
135
|
+
namespaced_resources_name.to_s.singularize
|
136
|
+
end.to_sym # Rails >= 6.0.3.7 needs symbols in polymorphic routes
|
135
137
|
end
|
136
138
|
|
137
139
|
def namespaced_resources_name
|
138
140
|
@_namespaced_resources_name ||= begin
|
139
141
|
resource_name_array = resource_array.dup
|
140
142
|
resource_name_array.delete(engine_name) if in_engine?
|
141
|
-
resource_name_array.join(
|
142
|
-
end
|
143
|
+
resource_name_array.join("_")
|
144
|
+
end.to_sym # Rails >= 6.0.3.7 needs symbols in polymorphic routes
|
143
145
|
end
|
144
146
|
|
145
147
|
def namespace_for_scope
|
146
148
|
namespace_array = namespace_diff
|
147
149
|
namespace_array.delete(engine_name) if in_engine?
|
148
|
-
namespace_array
|
150
|
+
namespace_array.map(&:to_sym) # Rails >= 6.0.3.7 needs symbols in polymorphic routes
|
149
151
|
end
|
150
152
|
|
151
153
|
# Returns an array of underscored association names
|
@@ -26,7 +26,9 @@ module Alchemy
|
|
26
26
|
|
27
27
|
# Redirects current request to https.
|
28
28
|
def enforce_ssl
|
29
|
-
redirect_to url_for(request.params.merge(protocol:
|
29
|
+
redirect_to url_for(request.params.merge(protocol: "https"))
|
30
30
|
end
|
31
|
+
|
32
|
+
deprecate :enforce_ssl, deprecator: Alchemy::Deprecation
|
31
33
|
end
|
32
34
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Alchemy
|
4
|
+
class Upgrader::FourPointSix < Upgrader
|
5
|
+
class << self
|
6
|
+
def alchemy_4_6_todos
|
7
|
+
notice = <<-NOTE.strip_heredoc
|
8
|
+
|
9
|
+
ℹ️ Page visible attribute is deprecated
|
10
|
+
----------------------------------------
|
11
|
+
|
12
|
+
Page slugs will be visible in URLs of child pages all the time in the future.
|
13
|
+
Please use Menus and Tags instead to re-organize your pages if your page tree does not reflect the URL hierarchy.
|
14
|
+
|
15
|
+
A rake task to help with the migration is available.
|
16
|
+
|
17
|
+
bin/rake alchemy:upgrade:4.6:restructure_page_tree
|
18
|
+
|
19
|
+
NOTE
|
20
|
+
todo notice, "Alchemy v4.6 TODO"
|
21
|
+
end
|
22
|
+
|
23
|
+
def restructure_page_tree
|
24
|
+
desc "Move child pages of invisible pages to visible parent."
|
25
|
+
Alchemy::Deprecation.silence do
|
26
|
+
# All leaves can safely be marked visible
|
27
|
+
Alchemy::Page.leaves.update_all(visible: true)
|
28
|
+
Alchemy::Page.language_roots.each do |root_page|
|
29
|
+
# Root pages are always visible
|
30
|
+
root_page.update!(visible: true)
|
31
|
+
remove_invisible_children(root_page)
|
32
|
+
end
|
33
|
+
Alchemy::Page.update_all(visible: true)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def remove_invisible_children(page)
|
40
|
+
page.children.each { |child| remove_invisible_children(child) }
|
41
|
+
if !page.visible
|
42
|
+
page.children.reload.reverse.each do |child|
|
43
|
+
puts "Moving #{child.urlname} to right of #{page.urlname}"
|
44
|
+
child.move_to_right_of(page)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/alchemy/version.rb
CHANGED
@@ -9,14 +9,14 @@ module Alchemy
|
|
9
9
|
source_root File.expand_path('templates', __dir__)
|
10
10
|
|
11
11
|
def create_partials
|
12
|
-
menus = Alchemy::Node.
|
12
|
+
menus = Alchemy::Node.available_menu_names
|
13
13
|
return unless menus
|
14
14
|
|
15
15
|
menus.each do |menu|
|
16
16
|
conditional_template "wrapper.html.#{template_engine}",
|
17
|
-
"app/views/#{menu
|
17
|
+
"app/views/alchemy/menus/#{menu}/_wrapper.html.#{template_engine}"
|
18
18
|
conditional_template "node.html.#{template_engine}",
|
19
|
-
"app/views/#{menu
|
19
|
+
"app/views/alchemy/menus/#{menu}/_node.html.#{template_engine}"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -3,6 +3,7 @@ namespace :alchemy do
|
|
3
3
|
namespace :urlnames do
|
4
4
|
desc "Converts the urlname of all pages to nested url paths."
|
5
5
|
task to_nested: [:environment] do
|
6
|
+
Alchemy::Deprecation.warn('alchemy:convert:urlnames:to_nested task is deprecated and will be removed from Alchemy 5.0')
|
6
7
|
unless Alchemy::Config.get(:url_nesting)
|
7
8
|
raise "\nURL nesting is disabled! Please enable url_nesting in `config/alchemy/config.yml` first.\n\n"
|
8
9
|
end
|
@@ -18,6 +19,7 @@ namespace :alchemy do
|
|
18
19
|
|
19
20
|
desc "Converts the urlname of all pages to contain the slug only."
|
20
21
|
task to_slug: [:environment] do
|
22
|
+
Alchemy::Deprecation.warn('alchemy:convert:urlnames:to_slug task is deprecated and will be removed from Alchemy 5.0')
|
21
23
|
if Alchemy::Config.get(:url_nesting)
|
22
24
|
raise "\nURL nesting is enabled! Please disable url_nesting in `config/alchemy/config.yml` first.\n\n"
|
23
25
|
end
|
@@ -58,15 +60,17 @@ namespace :alchemy do
|
|
58
60
|
def convert_to_nodes(children, node:)
|
59
61
|
children.each do |page|
|
60
62
|
has_children = page.children.any?
|
61
|
-
next unless page.visible || has_children
|
62
63
|
|
63
64
|
Alchemy::Deprecation.silence do
|
65
|
+
next unless page.visible || has_children
|
66
|
+
|
64
67
|
new_node = node.children.create!(
|
65
68
|
name: name_for_node(page),
|
66
69
|
page: page_for_node(page),
|
67
|
-
url: page.definition['redirects_to_external'] ? page.urlname : nil,
|
68
|
-
external: page.definition['redirects_to_external'] && Alchemy::Config.get(:open_external_links_in_new_tab),
|
69
|
-
language_id: page.language_id
|
70
|
+
url: !!page.definition['redirects_to_external'] ? page.urlname : nil,
|
71
|
+
external: !!page.definition['redirects_to_external'] && Alchemy::Config.get(:open_external_links_in_new_tab),
|
72
|
+
language_id: page.language_id,
|
73
|
+
site_id: page.language.site_id
|
70
74
|
)
|
71
75
|
print "."
|
72
76
|
if has_children
|
@@ -80,9 +84,8 @@ namespace :alchemy do
|
|
80
84
|
puts "\n- Converting #{menu_count} page #{'tree'.pluralize(menu_count)} into #{'menu'.pluralize(menu_count)}."
|
81
85
|
Alchemy::BaseRecord.transaction do
|
82
86
|
Alchemy::Language.all.each do |language|
|
83
|
-
|
84
|
-
|
85
|
-
root_node = Alchemy::Node.create(language: language, name: menu_name)
|
87
|
+
menu_name = 'main_menu'
|
88
|
+
root_node = Alchemy::Node.create(language: language, name: menu_name, site: language.site, external: false)
|
86
89
|
language.pages.language_roots.each do |root_page|
|
87
90
|
convert_to_nodes(root_page.children, node: root_node)
|
88
91
|
end
|
@@ -1,29 +1,32 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "alchemy/upgrader"
|
4
|
+
require "alchemy/version"
|
3
5
|
|
4
6
|
namespace :alchemy do
|
5
7
|
desc "Upgrades your app to AlchemyCMS v#{Alchemy::VERSION}."
|
6
8
|
task upgrade: [
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
"alchemy:upgrade:prepare",
|
10
|
+
"alchemy:upgrade:4.1:run", "alchemy:upgrade:4.1:todo",
|
11
|
+
"alchemy:upgrade:4.2:run", "alchemy:upgrade:4.2:todo",
|
12
|
+
"alchemy:upgrade:4.4:run", "alchemy:upgrade:4.4:todo",
|
13
|
+
"alchemy:upgrade:4.6:run", "alchemy:upgrade:4.6:todo",
|
11
14
|
] do
|
12
15
|
Alchemy::Upgrader.display_todos
|
13
16
|
end
|
14
17
|
|
15
18
|
namespace :upgrade do
|
16
|
-
desc
|
19
|
+
desc "Alchemy Upgrader: Prepares the database and updates Alchemys configuration file."
|
17
20
|
task prepare: [
|
18
|
-
|
19
|
-
|
21
|
+
"alchemy:upgrade:database",
|
22
|
+
"alchemy:upgrade:config",
|
20
23
|
]
|
21
24
|
|
22
25
|
desc "Alchemy Upgrader: Prepares the database."
|
23
26
|
task database: [
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
+
"alchemy:install:migrations",
|
28
|
+
"db:migrate",
|
29
|
+
"alchemy:db:seed",
|
27
30
|
]
|
28
31
|
|
29
32
|
desc "Alchemy Upgrader: Copy configuration file."
|
@@ -37,19 +40,19 @@ namespace :alchemy do
|
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
40
|
-
desc
|
41
|
-
task
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
desc "Upgrade Alchemy to v4.1"
|
44
|
+
task "4.1" => [
|
45
|
+
"alchemy:upgrade:prepare",
|
46
|
+
"alchemy:upgrade:4.1:run",
|
47
|
+
"alchemy:upgrade:4.1:todo",
|
45
48
|
] do
|
46
49
|
Alchemy::Upgrader.display_todos
|
47
50
|
end
|
48
51
|
|
49
|
-
namespace
|
50
|
-
task run: [
|
52
|
+
namespace "4.1" do
|
53
|
+
task run: ["alchemy:upgrade:4.1:harden_acts_as_taggable_on_migrations"]
|
51
54
|
|
52
|
-
desc
|
55
|
+
desc "Harden acts_as_taggable_on migrations"
|
53
56
|
task harden_acts_as_taggable_on_migrations: [:environment] do
|
54
57
|
Alchemy::Upgrader::FourPointOne.harden_acts_as_taggable_on_migrations
|
55
58
|
end
|
@@ -59,45 +62,45 @@ namespace :alchemy do
|
|
59
62
|
end
|
60
63
|
end
|
61
64
|
|
62
|
-
desc
|
63
|
-
task
|
64
|
-
|
65
|
-
|
66
|
-
|
65
|
+
desc "Upgrade Alchemy to v4.2"
|
66
|
+
task "4.2" => [
|
67
|
+
"alchemy:upgrade:prepare",
|
68
|
+
"alchemy:upgrade:4.2:run",
|
69
|
+
"alchemy:upgrade:4.2:todo",
|
67
70
|
] do
|
68
71
|
Alchemy::Upgrader.display_todos
|
69
72
|
end
|
70
73
|
|
71
|
-
namespace
|
74
|
+
namespace "4.2" do
|
72
75
|
task run: [
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
76
|
+
"alchemy:upgrade:4.2:convert_picture_galleries",
|
77
|
+
"alchemy:upgrade:4.2:migrate_picture_galleries",
|
78
|
+
"alchemy:upgrade:4.2:convert_cells",
|
79
|
+
"alchemy:upgrade:4.2:migrate_cells",
|
80
|
+
"alchemy:upgrade:4.2:update_element_partial_name_variable",
|
78
81
|
]
|
79
82
|
|
80
|
-
desc
|
83
|
+
desc "Convert `picture_gallery` element definitions to `nestable_elements`."
|
81
84
|
task convert_picture_galleries: [:environment] do
|
82
85
|
Alchemy::Upgrader::FourPointTwo.convert_picture_galleries
|
83
86
|
end
|
84
87
|
|
85
|
-
desc
|
88
|
+
desc "Migrate `picture_gallery` elements to `nestable_elements`."
|
86
89
|
task migrate_picture_galleries: [:environment] do
|
87
90
|
Alchemy::Upgrader::FourPointTwo.migrate_picture_galleries
|
88
91
|
end
|
89
92
|
|
90
|
-
desc
|
93
|
+
desc "Convert cells config to fixed nestable elements."
|
91
94
|
task convert_cells: [:environment] do
|
92
95
|
Alchemy::Upgrader::FourPointTwo.convert_cells
|
93
96
|
end
|
94
97
|
|
95
|
-
desc
|
96
|
-
task migrate_cells: [
|
98
|
+
desc "Migrate existing cells to fixed nestable elements."
|
99
|
+
task migrate_cells: ["alchemy:install:migrations", "db:migrate"] do
|
97
100
|
Alchemy::Upgrader::FourPointTwo.migrate_cells
|
98
101
|
end
|
99
102
|
|
100
|
-
desc
|
103
|
+
desc "Update element views to use element partial name variable."
|
101
104
|
task :update_element_partial_name_variable do
|
102
105
|
Alchemy::Upgrader::FourPointTwo.update_element_views_variable_name
|
103
106
|
end
|
@@ -107,19 +110,19 @@ namespace :alchemy do
|
|
107
110
|
end
|
108
111
|
end
|
109
112
|
|
110
|
-
desc
|
111
|
-
task
|
112
|
-
|
113
|
-
|
114
|
-
|
113
|
+
desc "Upgrade Alchemy to v4.4"
|
114
|
+
task "4.4" => [
|
115
|
+
"alchemy:upgrade:prepare",
|
116
|
+
"alchemy:upgrade:4.4:run",
|
117
|
+
"alchemy:upgrade:4.4:todo",
|
115
118
|
] do
|
116
119
|
Alchemy::Upgrader.display_todos
|
117
120
|
end
|
118
121
|
|
119
|
-
namespace
|
122
|
+
namespace "4.4" do
|
120
123
|
task run: [
|
121
|
-
|
122
|
-
|
124
|
+
"alchemy:upgrade:4.4:rename_element_views",
|
125
|
+
"alchemy:upgrade:4.4:update_local_variable",
|
123
126
|
]
|
124
127
|
|
125
128
|
desc "Remove '_view' suffix from element views."
|
@@ -127,7 +130,7 @@ namespace :alchemy do
|
|
127
130
|
Alchemy::Upgrader::FourPointFour.rename_element_views
|
128
131
|
end
|
129
132
|
|
130
|
-
desc
|
133
|
+
desc "Update element views local variable to element name."
|
131
134
|
task update_local_variable: [:environment] do
|
132
135
|
Alchemy::Upgrader::FourPointFour.update_local_variable
|
133
136
|
end
|
@@ -136,5 +139,27 @@ namespace :alchemy do
|
|
136
139
|
Alchemy::Upgrader::FourPointFour.alchemy_4_4_todos
|
137
140
|
end
|
138
141
|
end
|
142
|
+
|
143
|
+
desc "Upgrade Alchemy to v4.6"
|
144
|
+
task "4.6" => [
|
145
|
+
"alchemy:upgrade:prepare",
|
146
|
+
"alchemy:upgrade:4.6:run",
|
147
|
+
"alchemy:upgrade:4.6:todo",
|
148
|
+
] do
|
149
|
+
Alchemy::Upgrader.display_todos
|
150
|
+
end
|
151
|
+
|
152
|
+
namespace "4.6" do
|
153
|
+
task run: []
|
154
|
+
|
155
|
+
desc "Move child pages of invisible pages to visible parent."
|
156
|
+
task restructure_page_tree: [:environment] do
|
157
|
+
Alchemy::Upgrader::FourPointSix.restructure_page_tree
|
158
|
+
end
|
159
|
+
|
160
|
+
task :todo do
|
161
|
+
Alchemy::Upgrader::FourPointSix.alchemy_4_6_todos
|
162
|
+
end
|
163
|
+
end
|
139
164
|
end
|
140
165
|
end
|