alchemy_cms 5.0.3 → 5.1.1
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/.github/PULL_REQUEST_TEMPLATE.md +1 -1
- data/.github/workflows/stale.yml +1 -1
- data/.gitignore +1 -0
- data/CHANGELOG.md +66 -2
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/alchemy_cms.gemspec +3 -3
- data/app/assets/images/alchemy/missing-image.svg +1 -0
- data/app/assets/javascripts/alchemy/admin.js +0 -1
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +1 -4
- data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +0 -3
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +29 -4
- data/app/assets/stylesheets/alchemy/_variables.scss +8 -0
- data/app/assets/stylesheets/alchemy/admin.scss +0 -1
- data/app/assets/stylesheets/alchemy/archive.scss +23 -17
- data/app/assets/stylesheets/alchemy/buttons.scss +26 -15
- data/app/assets/stylesheets/alchemy/elements.scss +58 -19
- data/app/assets/stylesheets/alchemy/errors.scss +1 -1
- data/app/assets/stylesheets/alchemy/frame.scss +0 -1
- data/app/assets/stylesheets/alchemy/hints.scss +2 -1
- data/app/assets/stylesheets/alchemy/navigation.scss +7 -10
- data/app/assets/stylesheets/alchemy/pagination.scss +1 -1
- data/app/assets/stylesheets/alchemy/search.scss +13 -3
- data/app/assets/stylesheets/alchemy/selects.scss +26 -20
- data/app/assets/stylesheets/alchemy/tables.scss +38 -9
- data/app/assets/stylesheets/alchemy/tags.scss +19 -31
- data/app/controllers/alchemy/admin/pages_controller.rb +58 -8
- data/app/controllers/alchemy/admin/pictures_controller.rb +13 -6
- data/app/controllers/alchemy/admin/resources_controller.rb +3 -3
- data/app/controllers/alchemy/pages_controller.rb +49 -14
- data/app/decorators/alchemy/element_editor.rb +1 -0
- data/app/helpers/alchemy/admin/base_helper.rb +0 -44
- data/app/helpers/alchemy/admin/navigation_helper.rb +2 -1
- data/app/models/alchemy/attachment.rb +20 -3
- data/app/models/alchemy/attachment/url.rb +40 -0
- data/app/models/alchemy/essence_picture.rb +3 -3
- data/app/models/alchemy/essence_picture_view.rb +5 -3
- data/app/models/alchemy/legacy_page_url.rb +1 -1
- data/app/models/alchemy/page.rb +24 -1
- data/app/models/alchemy/page/page_natures.rb +2 -0
- data/app/models/alchemy/page/url_path.rb +8 -6
- data/app/models/alchemy/picture.rb +58 -2
- data/app/models/alchemy/picture/calculations.rb +55 -0
- data/app/models/alchemy/picture/transformations.rb +5 -49
- data/app/models/alchemy/picture/url.rb +28 -77
- data/app/models/alchemy/picture_thumb.rb +57 -0
- data/app/models/alchemy/picture_thumb/create.rb +39 -0
- data/app/models/alchemy/picture_thumb/signature.rb +23 -0
- data/app/models/alchemy/picture_thumb/uid.rb +22 -0
- data/app/models/alchemy/picture_variant.rb +114 -0
- data/app/models/alchemy/site/layout.rb +30 -2
- data/app/views/alchemy/admin/attachments/show.html.erb +8 -8
- data/app/views/alchemy/admin/dashboard/index.html.erb +13 -16
- data/app/views/alchemy/admin/elements/_element_footer.html.erb +1 -1
- data/app/views/alchemy/admin/elements/publish.js.erb +1 -0
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +2 -2
- data/app/views/alchemy/admin/layoutpages/edit.html.erb +4 -6
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +19 -29
- data/app/views/alchemy/admin/pages/_form.html.erb +4 -6
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +12 -2
- data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +29 -0
- data/app/views/alchemy/admin/pages/_table.html.erb +27 -0
- data/app/views/alchemy/admin/pages/_table_row.html.erb +107 -0
- data/app/views/alchemy/admin/pages/_toolbar.html.erb +77 -0
- data/app/views/alchemy/admin/pages/edit.html.erb +9 -1
- data/app/views/alchemy/admin/pages/index.html.erb +41 -74
- data/app/views/alchemy/admin/pages/list/_table.html.erb +31 -0
- data/app/views/alchemy/admin/pages/unlock.js.erb +2 -2
- data/app/views/alchemy/admin/pages/update.js.erb +19 -10
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +14 -13
- data/app/views/alchemy/admin/partials/_search_form.html.erb +8 -8
- data/app/views/alchemy/admin/pictures/_archive.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_form.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_picture.html.erb +3 -3
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/index.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/show.html.erb +3 -3
- data/app/views/alchemy/admin/resources/_filter_bar.html.erb +13 -11
- data/app/views/alchemy/admin/resources/_per_page_select.html.erb +3 -3
- data/app/views/alchemy/admin/resources/index.html.erb +4 -1
- data/app/views/alchemy/admin/tags/index.html.erb +14 -15
- data/app/views/alchemy/base/500.html.erb +11 -13
- data/app/views/alchemy/essences/_essence_file_view.html.erb +3 -3
- data/config/alchemy/config.yml +15 -11
- data/config/alchemy/modules.yml +12 -12
- data/config/locales/alchemy.en.yml +6 -4
- data/config/routes.rb +1 -1
- data/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb +22 -0
- data/db/migrate/20200907111332_remove_tri_state_booleans.rb +33 -0
- data/lib/alchemy.rb +66 -0
- data/lib/alchemy/admin/preview_url.rb +2 -0
- data/lib/alchemy/auth_accessors.rb +12 -5
- data/lib/alchemy/config.rb +1 -3
- data/lib/alchemy/engine.rb +7 -6
- data/lib/alchemy/modules.rb +11 -1
- data/lib/alchemy/permissions.rb +1 -0
- data/lib/alchemy/test_support/factories/picture_factory.rb +0 -1
- data/lib/alchemy/test_support/factories/picture_thumb_factory.rb +12 -0
- data/lib/alchemy/test_support/integration_helpers.rb +0 -7
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +2 -4
- data/lib/generators/alchemy/install/files/alchemy.en.yml +2 -2
- data/lib/generators/alchemy/install/templates/dragonfly.rb.tt +5 -5
- data/lib/tasks/alchemy/thumbnails.rake +37 -0
- data/vendor/assets/javascripts/jquery_plugins/select2.js +3729 -0
- data/vendor/assets/stylesheets/alchemy_admin/select2.scss +740 -0
- metadata +41 -31
- data/.github/workflows/greetings.yml +0 -13
- data/app/controllers/concerns/alchemy/locale_redirects.rb +0 -40
- data/app/controllers/concerns/alchemy/page_redirects.rb +0 -68
- data/lib/alchemy/userstamp.rb +0 -12
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<% content_for :toolbar do %>
|
|
2
|
+
<%= toolbar_button(
|
|
3
|
+
icon: :plus,
|
|
4
|
+
label: Alchemy.t('New Tag'),
|
|
5
|
+
url: alchemy.new_admin_tag_path,
|
|
6
|
+
title: Alchemy.t('New Tag'),
|
|
7
|
+
hotkey: 'alt+n',
|
|
8
|
+
dialog_options: {
|
|
7
9
|
title: Alchemy.t('New Tag'),
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
]
|
|
16
|
-
) %>
|
|
10
|
+
size: '310x180'
|
|
11
|
+
},
|
|
12
|
+
if_permitted_to: [:create, Alchemy::Tag]
|
|
13
|
+
) %>
|
|
14
|
+
<%= render 'alchemy/admin/partials/search_form' %>
|
|
15
|
+
<% end %>
|
|
17
16
|
|
|
18
17
|
<div id="archive_all" class="resources-table-wrapper">
|
|
19
18
|
<%= render 'alchemy/admin/resources/table_header' %>
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
<%= toolbar
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
], search: false
|
|
13
|
-
) %>
|
|
1
|
+
<%= content_for :toolbar do %>
|
|
2
|
+
<%= toolbar_button(
|
|
3
|
+
icon: 'angle-double-left',
|
|
4
|
+
url: request.referer || alchemy.admin_dashboard_path,
|
|
5
|
+
label: Alchemy.t(:back),
|
|
6
|
+
title: Alchemy.t(:back),
|
|
7
|
+
hotkey: 'alt+z',
|
|
8
|
+
dialog: false,
|
|
9
|
+
skip_permission_check: true
|
|
10
|
+
) %>
|
|
11
|
+
<% end %>
|
|
14
12
|
|
|
15
13
|
<% content_for(:alchemy_body_class) { 'error' } %>
|
|
16
14
|
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
content.essence.link_text.presence ||
|
|
6
6
|
content.settings_value(:link_text, local_assigns.fetch(:options, {})) ||
|
|
7
7
|
attachment.name,
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
attachment.url(
|
|
9
|
+
download: true,
|
|
10
10
|
name: attachment.slug,
|
|
11
11
|
format: attachment.suffix
|
|
12
12
|
),
|
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
title: content.essence.title.presence
|
|
16
16
|
}.merge(html_options)
|
|
17
17
|
) -%>
|
|
18
|
-
<%- end -%>
|
|
18
|
+
<%- end -%>
|
data/config/alchemy/config.yml
CHANGED
|
@@ -9,12 +9,6 @@
|
|
|
9
9
|
#
|
|
10
10
|
auto_logout_time: 30
|
|
11
11
|
|
|
12
|
-
# === Redirect Options
|
|
13
|
-
#
|
|
14
|
-
# redirect_to_public_child [Boolean] # Alchemy redirects to the first public child page found, if a page is not public.
|
|
15
|
-
#
|
|
16
|
-
redirect_to_public_child: true
|
|
17
|
-
|
|
18
12
|
# === Page caching
|
|
19
13
|
#
|
|
20
14
|
# Enable/Disable page caching globally.
|
|
@@ -68,17 +62,27 @@ items_per_page: 15
|
|
|
68
62
|
|
|
69
63
|
# === Picture rendering settings
|
|
70
64
|
#
|
|
71
|
-
# Alchemy uses Dragonfly to render images.
|
|
65
|
+
# Alchemy uses Dragonfly to render images. Settings for image rendering are specific to elements and are defined in elements.yml
|
|
72
66
|
#
|
|
73
|
-
#
|
|
67
|
+
# Example:
|
|
68
|
+
# - name: some_element
|
|
69
|
+
# contents:
|
|
70
|
+
# - name: some_picture
|
|
71
|
+
# type: EssencePicture
|
|
72
|
+
# settings:
|
|
73
|
+
# hint: true
|
|
74
|
+
# crop: true # turns on image cropping
|
|
75
|
+
# size: '500x500' # image will be cropped to this size
|
|
74
76
|
#
|
|
75
|
-
#
|
|
77
|
+
# See http://markevans.github.com/dragonfly for further info.
|
|
78
|
+
#
|
|
79
|
+
# ==== Global Options:
|
|
76
80
|
#
|
|
77
81
|
# output_image_jpg_quality [Integer] # If image gets rendered as JPG this is the quality setting for it. (Default 85)
|
|
78
|
-
# preprocess_image_resize [String] # Use this option to resize images to
|
|
82
|
+
# preprocess_image_resize [String] # Use this option to resize images to the given size when they are uploaded to the image library. Downsizing example: '1000x1000>' (Default nil)
|
|
79
83
|
# image_output_format [String] # The global image output format setting. (Default +original+)
|
|
80
84
|
#
|
|
81
|
-
# NOTE: You can always override the output format in the
|
|
85
|
+
# NOTE: You can always override the output format in the settings of your Essence in elements.yml, I.E. {format: 'gif'}
|
|
82
86
|
#
|
|
83
87
|
output_image_jpg_quality: 85
|
|
84
88
|
preprocess_image_resize:
|
data/config/alchemy/modules.yml
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
position: 1
|
|
6
6
|
navigation:
|
|
7
7
|
name: 'modules.dashboard'
|
|
8
|
-
controller: 'alchemy/admin/dashboard'
|
|
8
|
+
controller: '/alchemy/admin/dashboard'
|
|
9
9
|
action: index
|
|
10
10
|
inline_image: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="-4 -6 32 32" class="svg-inline--fa fa-lg fa-fw"><path fill="currentColor" d="M15.7 7.9L9.9 2.2 2.1 4.3 0 12.1l5.7 5.8 7.8-2.1 2.2-7.9zm-5.3 10.3l-1.2 4.4 3.2 3.2 4.4-1.2 1.2-4.4-3.2-3.2-4.4 1.2zM23.5 7.3L17.2 9l-1.7 6.2 4.5 4.6 6.2-1.7 1.7-6.2-4.4-4.6z"/></svg>'
|
|
11
11
|
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
position: 2
|
|
15
15
|
navigation:
|
|
16
16
|
name: 'modules.pages'
|
|
17
|
-
controller: 'alchemy/admin/pages'
|
|
17
|
+
controller: '/alchemy/admin/pages'
|
|
18
18
|
action: index
|
|
19
19
|
icon: file-alt
|
|
20
20
|
sub_navigation:
|
|
21
21
|
- name: 'modules.pages'
|
|
22
|
-
controller: 'alchemy/admin/pages'
|
|
22
|
+
controller: '/alchemy/admin/pages'
|
|
23
23
|
action: index
|
|
24
24
|
- name: 'modules.layoutpages'
|
|
25
|
-
controller: 'alchemy/admin/layoutpages'
|
|
25
|
+
controller: '/alchemy/admin/layoutpages'
|
|
26
26
|
action: index
|
|
27
27
|
nested:
|
|
28
|
-
- controller: 'alchemy/admin/pages'
|
|
28
|
+
- controller: '/alchemy/admin/pages'
|
|
29
29
|
action: edit
|
|
30
30
|
|
|
31
31
|
- name: menus
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
position: 3
|
|
34
34
|
navigation:
|
|
35
35
|
name: 'modules.menus'
|
|
36
|
-
controller: 'alchemy/admin/nodes'
|
|
36
|
+
controller: '/alchemy/admin/nodes'
|
|
37
37
|
action: index
|
|
38
38
|
icon: list-ul
|
|
39
39
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
position: 4
|
|
43
43
|
navigation:
|
|
44
44
|
name: 'modules.languages'
|
|
45
|
-
controller: 'alchemy/admin/languages'
|
|
45
|
+
controller: '/alchemy/admin/languages'
|
|
46
46
|
action: index
|
|
47
47
|
icon: flag
|
|
48
48
|
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
position: 5
|
|
52
52
|
navigation:
|
|
53
53
|
name: 'modules.sites'
|
|
54
|
-
controller: 'alchemy/admin/sites'
|
|
54
|
+
controller: '/alchemy/admin/sites'
|
|
55
55
|
action: index
|
|
56
56
|
icon: bullseye
|
|
57
57
|
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
position: 6
|
|
61
61
|
navigation:
|
|
62
62
|
name: 'modules.tags'
|
|
63
|
-
controller: 'alchemy/admin/tags'
|
|
63
|
+
controller: '/alchemy/admin/tags'
|
|
64
64
|
action: index
|
|
65
65
|
icon: tags
|
|
66
66
|
|
|
@@ -68,14 +68,14 @@
|
|
|
68
68
|
engine_name: alchemy
|
|
69
69
|
position: 7
|
|
70
70
|
navigation:
|
|
71
|
-
controller: 'alchemy/admin/pictures'
|
|
71
|
+
controller: '/alchemy/admin/pictures'
|
|
72
72
|
action: index
|
|
73
73
|
name: 'modules.library'
|
|
74
74
|
icon: archive
|
|
75
75
|
sub_navigation:
|
|
76
76
|
- name: 'modules.pictures'
|
|
77
|
-
controller: 'alchemy/admin/pictures'
|
|
77
|
+
controller: '/alchemy/admin/pictures'
|
|
78
78
|
action: index
|
|
79
79
|
- name: 'modules.attachments'
|
|
80
|
-
controller: 'alchemy/admin/attachments'
|
|
80
|
+
controller: '/alchemy/admin/attachments'
|
|
81
81
|
action: index
|
|
@@ -171,8 +171,8 @@ en:
|
|
|
171
171
|
anchor_link_headline: "You can link to an element anchor from the actual page."
|
|
172
172
|
attribute_fixed: Value can't be changed for this page type
|
|
173
173
|
back: 'back'
|
|
174
|
-
create_tree_as_new_language: "Create %{language} as a new language tree"
|
|
175
174
|
locked_pages: "Active pages"
|
|
175
|
+
"Add a page": "Add a page"
|
|
176
176
|
"Add global page": "Add global page"
|
|
177
177
|
"Add page link": "Add page link"
|
|
178
178
|
"Alchemy is open software and itself uses open software and free resources:": "Alchemy is open software and itself uses open software and free resources:"
|
|
@@ -339,13 +339,13 @@ en:
|
|
|
339
339
|
copy_element: "Copy this element"
|
|
340
340
|
copy_page: "Copy page"
|
|
341
341
|
"Could not delete Pictures": "Could not delete Pictures"
|
|
342
|
-
copy_language_tree_heading: "Copy
|
|
342
|
+
copy_language_tree_heading: "Copy pages"
|
|
343
343
|
country_code_placeholder: 'i.e. US (optional)'
|
|
344
344
|
country_code_foot_note: "You only need to set a country code if you want to support multiple countries with the same language."
|
|
345
345
|
create: "create"
|
|
346
346
|
"Create language": "Create a new language"
|
|
347
347
|
"Create site": "Create a new site"
|
|
348
|
-
create_language_tree_heading: "Create
|
|
348
|
+
create_language_tree_heading: "Create new homepage"
|
|
349
349
|
create_menu: "Add a menu"
|
|
350
350
|
create_node: "Add a menu node"
|
|
351
351
|
create_page: "Create a new subpage"
|
|
@@ -402,6 +402,7 @@ en:
|
|
|
402
402
|
"Open upload form": "Open upload form"
|
|
403
403
|
"Select all pictures": "Select all pictures"
|
|
404
404
|
hide_element_content: "Hide this elements content."
|
|
405
|
+
homepage_does_not_exist: "This language has no homepage yet"
|
|
405
406
|
dashboard: "Dashboard"
|
|
406
407
|
image_alt_tag: "Alt-tag"
|
|
407
408
|
image_caption: "Caption"
|
|
@@ -415,7 +416,6 @@ en:
|
|
|
415
416
|
javascript_disabled_headline: "Javascript is disabled!"
|
|
416
417
|
javascript_disabled_text: "Alchemy needs Javascript to run smoothly. Please enable it in your browser settings."
|
|
417
418
|
language_code_placeholder: 'i.e. en'
|
|
418
|
-
language_does_not_exist: "This language tree does not exist"
|
|
419
419
|
language_pages_copied: "Language tree successfully copied."
|
|
420
420
|
last_upload_only: "Last upload only"
|
|
421
421
|
left: "left"
|
|
@@ -521,6 +521,7 @@ en:
|
|
|
521
521
|
'768': '768px (iPad - Portrait)'
|
|
522
522
|
'1024': '1024px (iPad - Landscape)'
|
|
523
523
|
'1280': '1280px (Desktop)'
|
|
524
|
+
preview_url: Preview
|
|
524
525
|
recently_uploaded_only: 'Recently uploaded only'
|
|
525
526
|
"regular method": "Regular method"
|
|
526
527
|
remove: "Remove"
|
|
@@ -690,6 +691,7 @@ en:
|
|
|
690
691
|
alchemy/message:
|
|
691
692
|
one: Message
|
|
692
693
|
other: Messages
|
|
694
|
+
alchemy/admin/preview_url: Internal
|
|
693
695
|
attributes:
|
|
694
696
|
alchemy/message:
|
|
695
697
|
salutation: 'Salutation'
|
data/config/routes.rb
CHANGED
|
@@ -124,7 +124,7 @@ Alchemy::Engine.routes.draw do
|
|
|
124
124
|
|
|
125
125
|
get "/attachment/:id/download(/:name)" => "attachments#download",
|
|
126
126
|
as: :download_attachment
|
|
127
|
-
get "/attachment/:id/show" => "attachments#show",
|
|
127
|
+
get "/attachment/:id/show(/:name)" => "attachments#show",
|
|
128
128
|
as: :show_attachment
|
|
129
129
|
|
|
130
130
|
resources :messages, only: [:index, :new, :create]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class CreateAlchemyPictureThumbs < ActiveRecord::Migration[5.2]
|
|
4
|
+
def up
|
|
5
|
+
return if table_exists?(:alchemy_picture_thumbs)
|
|
6
|
+
|
|
7
|
+
create_table :alchemy_picture_thumbs do |t|
|
|
8
|
+
t.references :picture, foreign_key: { to_table: :alchemy_pictures }, null: false
|
|
9
|
+
t.string :signature, null: false
|
|
10
|
+
t.text :uid, null: false
|
|
11
|
+
end
|
|
12
|
+
add_index :alchemy_picture_thumbs, :signature, unique: true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def down
|
|
16
|
+
return unless table_exists?(:alchemy_picture_thumbs)
|
|
17
|
+
|
|
18
|
+
remove_foreign_key :alchemy_picture_thumbs, :alchemy_pictures, column: :picture_id
|
|
19
|
+
remove_index :alchemy_picture_thumbs, :signature
|
|
20
|
+
drop_table :alchemy_picture_thumbs
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class RemoveTriStateBooleans < ActiveRecord::Migration[5.2]
|
|
4
|
+
def change
|
|
5
|
+
change_column_null :alchemy_elements, :public, false, false
|
|
6
|
+
change_column_default :alchemy_elements, :public, true
|
|
7
|
+
|
|
8
|
+
change_column_null :alchemy_elements, :folded, false
|
|
9
|
+
change_column_null :alchemy_elements, :unique, false
|
|
10
|
+
|
|
11
|
+
change_column_null :alchemy_essence_richtexts, :public, false, false
|
|
12
|
+
change_column_default :alchemy_essence_richtexts, :public, false
|
|
13
|
+
|
|
14
|
+
change_column_null :alchemy_essence_texts, :public, false
|
|
15
|
+
|
|
16
|
+
change_column_null :alchemy_folded_pages, :folded, false
|
|
17
|
+
|
|
18
|
+
change_column_null :alchemy_languages, :public, false
|
|
19
|
+
change_column_null :alchemy_languages, :default, false
|
|
20
|
+
|
|
21
|
+
change_column_null :alchemy_pages, :language_root, false, false
|
|
22
|
+
change_column_default :alchemy_pages, :language_root, false
|
|
23
|
+
|
|
24
|
+
change_column_null :alchemy_pages, :restricted, false
|
|
25
|
+
change_column_null :alchemy_pages, :robot_index, false
|
|
26
|
+
change_column_null :alchemy_pages, :robot_follow, false
|
|
27
|
+
change_column_null :alchemy_pages, :sitemap, false
|
|
28
|
+
|
|
29
|
+
change_column_null :alchemy_sites, :public, false
|
|
30
|
+
change_column_null :alchemy_sites, :redirect_to_primary_host, false, false
|
|
31
|
+
change_column_default :alchemy_sites, :redirect_to_primary_host, false
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/alchemy.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "alchemy/admin/preview_url"
|
|
4
|
+
|
|
5
|
+
module Alchemy
|
|
6
|
+
YAML_WHITELIST_CLASSES = %w(Symbol Date Regexp)
|
|
7
|
+
|
|
8
|
+
# Define page preview sources
|
|
9
|
+
#
|
|
10
|
+
# A preview source is a Ruby class returning an URL
|
|
11
|
+
# that is used as source for the preview frame in the
|
|
12
|
+
# admin UI.
|
|
13
|
+
#
|
|
14
|
+
# == Example
|
|
15
|
+
#
|
|
16
|
+
# # lib/acme/preview_source.rb
|
|
17
|
+
# class Acme::PreviewSource < Alchemy::Admin::PreviewUrl
|
|
18
|
+
# def url_for(page)
|
|
19
|
+
# if page.site.name == "Next"
|
|
20
|
+
# "https://user:#{ENV['PREVIEW_HTTP_PASS']}@next.acme.com"
|
|
21
|
+
# else
|
|
22
|
+
# "https://www.acme.com"
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# # config/initializers/alchemy.rb
|
|
28
|
+
# require "acme/preview_source"
|
|
29
|
+
# Alchemy.preview_sources << Acme::PreviewSource
|
|
30
|
+
#
|
|
31
|
+
# # config/locales/de.yml
|
|
32
|
+
# de:
|
|
33
|
+
# activemodel:
|
|
34
|
+
# models:
|
|
35
|
+
# acme/preview_source: Acme Vorschau
|
|
36
|
+
#
|
|
37
|
+
def self.preview_sources
|
|
38
|
+
@_preview_sources ||= begin
|
|
39
|
+
Set.new << Alchemy::Admin::PreviewUrl
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Define page publish targets
|
|
44
|
+
#
|
|
45
|
+
# A publish target is a ActiveJob that gets performed
|
|
46
|
+
# whenever a user clicks the publish page button.
|
|
47
|
+
#
|
|
48
|
+
# Use this to trigger deployment hooks of external
|
|
49
|
+
# services in an asychronous way.
|
|
50
|
+
#
|
|
51
|
+
# == Example
|
|
52
|
+
#
|
|
53
|
+
# # app/jobs/publish_job.rb
|
|
54
|
+
# class PublishJob < ApplicationJob
|
|
55
|
+
# def perform(page)
|
|
56
|
+
# RestClient.post(ENV['BUILD_HOOK_URL'])
|
|
57
|
+
# end
|
|
58
|
+
# end
|
|
59
|
+
#
|
|
60
|
+
# # config/initializers/alchemy.rb
|
|
61
|
+
# Alchemy.publish_targets << PublishJob
|
|
62
|
+
#
|
|
63
|
+
def self.publish_targets
|
|
64
|
+
@_publish_targets ||= Set.new
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -91,16 +91,23 @@ module Alchemy
|
|
|
91
91
|
@@user_class_name.constantize
|
|
92
92
|
rescue NameError => e
|
|
93
93
|
if e.message =~ /#{Regexp.escape(@@user_class_name)}/
|
|
94
|
-
|
|
94
|
+
Rails.logger.warn <<~MSG
|
|
95
|
+
#{e.message}
|
|
96
|
+
#{e.backtrace.join("\n")}
|
|
95
97
|
|
|
96
|
-
|
|
98
|
+
AlchemyCMS cannot find any user class!
|
|
97
99
|
|
|
98
|
-
|
|
99
|
-
to create your own class, add the `alchemy-devise` gem to your Gemfile.
|
|
100
|
+
Please add a user class and tell Alchemy about it:
|
|
100
101
|
|
|
101
|
-
|
|
102
|
+
# config/initializers/alchemy.rb
|
|
103
|
+
Alchemy.user_class_name = 'MyUser'
|
|
104
|
+
|
|
105
|
+
Or add the `alchemy-devise` gem to your Gemfile:
|
|
106
|
+
|
|
107
|
+
bundle add alchemy-devise
|
|
102
108
|
|
|
103
109
|
MSG
|
|
110
|
+
nil
|
|
104
111
|
else
|
|
105
112
|
raise e
|
|
106
113
|
end
|