pageflow 15.8.0 → 16.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +183 -103
- data/README.md +0 -1
- data/Rakefile +1 -1
- data/admins/pageflow/accounts.rb +12 -16
- data/admins/pageflow/entry.rb +28 -26
- data/admins/pageflow/entry_templates.rb +5 -7
- data/admins/pageflow/sites.rb +53 -0
- data/app/assets/javascripts/pageflow/admin/entries.js +16 -7
- data/app/assets/javascripts/pageflow/dist/ui.js +298 -72
- data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +10 -0
- data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +6 -1
- data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -0
- data/app/assets/stylesheets/pageflow/editor/help.scss +3 -3
- data/app/assets/stylesheets/pageflow/editor/info_box.scss +7 -0
- data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +0 -5
- data/app/assets/stylesheets/pageflow/ui/forms.scss +1 -1
- data/app/controllers/pageflow/chapters_controller.rb +2 -2
- data/app/controllers/pageflow/editor/files_controller.rb +1 -1
- data/app/controllers/pageflow/entries_controller.rb +12 -2
- data/app/controllers/pageflow/feeds_controller.rb +18 -0
- data/app/controllers/pageflow/pages_controller.rb +2 -2
- data/app/controllers/pageflow/sitemaps_controller.rb +15 -0
- data/app/controllers/pageflow/storylines_controller.rb +2 -2
- data/app/helpers/pageflow/common_entry_seed_helper.rb +1 -1
- data/app/helpers/pageflow/embed_code_helper.rb +1 -1
- data/app/helpers/pageflow/entries_helper.rb +16 -15
- data/app/helpers/pageflow/feeds_helper.rb +66 -0
- data/app/helpers/pageflow/page_types_helper.rb +9 -9
- data/app/helpers/pageflow/sites_helper.rb +11 -0
- data/app/helpers/pageflow/social_share_helper.rb +2 -2
- data/app/inputs/pageflow_permalink_input.rb +15 -3
- data/app/models/concerns/pageflow/reusable_file.rb +3 -3
- data/app/models/pageflow/account.rb +13 -31
- data/app/models/pageflow/audio_file_url_templates.rb +2 -1
- data/app/models/pageflow/{cname_theming_request_scope.rb → cname_site_request_scope.rb} +3 -3
- data/app/models/pageflow/customized_theme.rb +1 -1
- data/app/models/pageflow/draft_entry.rb +1 -1
- data/app/models/pageflow/entries_feed.rb +32 -0
- data/app/models/pageflow/entry.rb +3 -4
- data/app/models/pageflow/entry_at_revision.rb +2 -2
- data/app/models/pageflow/entry_duplicate.rb +1 -1
- data/app/models/pageflow/entry_template.rb +4 -4
- data/app/models/pageflow/home_button.rb +7 -7
- data/app/models/pageflow/image_file.rb +14 -3
- data/app/models/pageflow/membership.rb +3 -2
- data/app/models/pageflow/other_file.rb +5 -0
- data/app/models/pageflow/other_file_url_templates.rb +16 -0
- data/app/models/pageflow/permalink.rb +3 -3
- data/app/models/pageflow/permalink_directory.rb +2 -2
- data/app/models/pageflow/published_entry.rb +8 -2
- data/app/models/pageflow/revision.rb +4 -0
- data/app/models/pageflow/site.rb +67 -0
- data/app/models/pageflow/sitemaps.rb +13 -0
- data/app/models/pageflow/theme_customization.rb +1 -1
- data/app/models/pageflow/used_file.rb +2 -2
- data/app/models/pageflow/video_file_url_templates.rb +3 -1
- data/app/models/pageflow/widget.rb +9 -1
- data/app/policies/pageflow/account_policy.rb +2 -2
- data/app/policies/pageflow/entry_policy.rb +2 -2
- data/app/policies/pageflow/entry_template_policy.rb +1 -1
- data/app/policies/pageflow/{theming_policy.rb → site_policy.rb} +13 -11
- data/app/views/admin/accounts/_entry_template_details.html.arb +1 -1
- data/app/views/admin/accounts/_form.html.erb +4 -22
- data/app/views/admin/accounts/_site_defaults_inline_help.html.erb +5 -0
- data/app/views/admin/entries/_form.html.erb +4 -13
- data/app/views/admin/entries/_permalink_inputs.html.erb +2 -3
- data/app/views/admin/entries/_site_input.html.erb +15 -0
- data/app/views/admin/entries/{entry_type_name_input.html.erb → entry_site_and_type_name_input.html.erb} +3 -0
- data/app/views/admin/entry_templates/_form.html.erb +5 -5
- data/app/views/admin/sites/_attributes_table.html.arb +12 -0
- data/app/views/admin/sites/_fields.html.erb +23 -0
- data/app/views/admin/sites/_form.html.erb +5 -0
- data/app/views/components/pageflow/admin/entries_tab.rb +1 -2
- data/app/views/components/pageflow/admin/entry_templates_tab.rb +10 -11
- data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
- data/app/views/components/pageflow/admin/features_tab.rb +1 -1
- data/app/views/components/pageflow/admin/sites_tab.rb +35 -0
- data/app/views/components/pageflow/admin/users_tab.rb +1 -2
- data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
- data/app/views/pageflow/editor/entries/seed.json.erb +1 -1
- data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
- data/app/views/pageflow/entries/stylesheet.css.erb +1 -1
- data/app/views/pageflow/feeds/index.atom.builder +20 -0
- data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
- data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
- data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
- data/config/initializers/admin_resource_tabs.rb +29 -12
- data/config/initializers/features.rb +1 -0
- data/config/initializers/paperclip.rb +4 -0
- data/config/locales/de.yml +42 -19
- data/config/locales/en.yml +45 -17
- data/config/routes.rb +3 -0
- data/config/spring.rb +1 -1
- data/db/migrate/20221215101134_rename_theming_to_site.rb +9 -0
- data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +34 -0
- data/db/migrate/20221219203023_add_name_to_sites.rb +5 -0
- data/db/migrate/20230103155934_associate_theme_customizations_with_sites.rb +27 -0
- data/db/migrate/20230120092923_create_other_files.rb +23 -0
- data/db/migrate/20230323115745_add_feeds_enabled_to_sites.rb +5 -0
- data/db/migrate/20230323154323_add_sitemap_enabled_to_sites.rb +5 -0
- data/db/migrate/20230331103823_add_title_to_sites.rb +5 -0
- data/db/migrate/20230405103612_add_custom_feed_url_to_sites.rb +5 -0
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +455 -119
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +31 -8
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +1 -1
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +1 -1
- data/entry_types/paged/app/controllers/pageflow_paged/editor/entries_controller.rb +0 -2
- data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
- data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
- data/entry_types/paged/config/initializers/features.rb +0 -1
- data/entry_types/paged/lib/pageflow_paged/engine.rb +17 -1
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +3 -4
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +13 -6
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +11 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +42 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +31 -10
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +9 -1
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +3 -1
- data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +23 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +6 -1
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -5
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +10 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +44 -41
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder +16 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +8 -5
- data/entry_types/scrolled/config/initializers/features.rb +5 -0
- data/entry_types/scrolled/config/locales/consent_widget.de.yml +4 -0
- data/entry_types/scrolled/config/locales/consent_widget.en.yml +4 -0
- data/entry_types/scrolled/config/locales/de.yml +189 -8
- data/entry_types/scrolled/config/locales/en.yml +207 -2
- data/entry_types/scrolled/config/routes.rb +4 -0
- data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +97 -5
- data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +96 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +38 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +17 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +6 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +1 -1
- data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +1 -2
- data/entry_types/scrolled/package/contentElements-editor.js +307 -22
- data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
- data/entry_types/scrolled/package/contentElements-frontend.js +690 -71
- data/entry_types/scrolled/package/editor.js +616 -220
- data/entry_types/scrolled/package/frontend/{EditableInlineText.module-c6672f27.js → EditableInlineText.module-fa9e3aff.js} +1669 -1674
- data/entry_types/scrolled/package/frontend/PhonePlatformContext-10a1d600.js +32 -0
- data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-727cce0d.js +107 -0
- data/entry_types/scrolled/package/frontend/Viewer-169e14ca.js +154 -0
- data/entry_types/scrolled/package/frontend/{Viewer-6b05522f.js → Viewer-ee1aa590.js} +32 -161
- data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
- data/entry_types/scrolled/package/frontend/{components-487daafa.js → components-4a09bfa3.js} +185 -45
- data/entry_types/scrolled/package/frontend/{PhonePlatformContext-22e65f92.js → i18n-ddd92820.js} +162 -292
- data/entry_types/scrolled/package/frontend/index-02378634.js +118 -0
- data/entry_types/scrolled/package/frontend/index.css +1 -1
- data/entry_types/scrolled/package/frontend/index.js +375 -40
- data/entry_types/scrolled/package/frontend/useContentElementEditorState-63045393.js +52 -0
- data/entry_types/scrolled/package/package.json +2 -1
- data/entry_types/scrolled/package/testHelpers.js +9 -2
- data/entry_types/scrolled/package/values/colors.module.css +15 -0
- data/entry_types/scrolled/package/widgets/consentBar.css +1 -0
- data/entry_types/scrolled/package/widgets/consentBar.js +426 -0
- data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
- data/entry_types/scrolled/package/widgets/defaultNavigation.js +16 -9
- data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
- data/lib/pageflow/ability_mixin.rb +21 -13
- data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
- data/lib/pageflow/admin/attributes_table_rows.rb +1 -1
- data/lib/pageflow/admin/form_inputs.rb +1 -1
- data/lib/pageflow/admin/tabs.rb +1 -1
- data/lib/pageflow/built_in_file_type.rb +7 -0
- data/lib/pageflow/configuration/permissions.rb +3 -3
- data/lib/pageflow/configuration.rb +38 -17
- data/lib/pageflow/engine.rb +60 -39
- data/lib/pageflow/entry_export_import/entry_serialization.rb +1 -1
- data/lib/pageflow/entry_export_import/revision_serialization.rb +1 -1
- data/lib/pageflow/file_type.rb +2 -2
- data/lib/pageflow/global_config_api.rb +2 -2
- data/lib/pageflow/nested_revision_component.rb +23 -5
- data/lib/pageflow/primary_domain_entry_redirect.rb +7 -7
- data/lib/pageflow/rails_version.rb +19 -0
- data/lib/pageflow/seeds.rb +20 -17
- data/lib/pageflow/theme_customizations.rb +10 -10
- data/lib/pageflow/version.rb +1 -1
- data/lib/pageflow/widget_types.rb +4 -0
- data/package/config/webpack5.js +14 -0
- data/package/editor.js +148 -37
- data/package/frontend.js +26 -2
- data/package/testHelpers.js +1 -1
- data/package/ui.js +296 -71
- data/spec/factories/accounts.rb +5 -2
- data/spec/factories/draft_entries.rb +2 -2
- data/spec/factories/entries.rb +19 -5
- data/spec/factories/entry_templates.rb +1 -1
- data/spec/factories/permalink_directory.rb +1 -1
- data/spec/factories/published_entries.rb +2 -2
- data/spec/factories/sites.rb +12 -0
- data/vendor/assets/javascripts/iscroll.js +4 -7
- metadata +84 -59
- data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
- data/app/helpers/pageflow/themings_helper.rb +0 -11
- data/app/models/pageflow/theming.rb +0 -30
- data/app/views/admin/accounts/_theming_defaults_inline_help.html.erb +0 -5
- data/app/views/admin/accounts/_theming_details.html.arb +0 -5
- data/app/views/pageflow/editor/themings/_theming.json.jbuilder +0 -1
- data/entry_types/scrolled/package/frontend/arrowRight-7e3d9dd5.js +0 -42
- data/spec/factories/themings.rb +0 -7
- /data/app/views/pageflow/entries/{_theming.css.erb → _site.css.erb} +0 -0
@@ -31,7 +31,7 @@ module Pageflow
|
|
31
31
|
AccountPolicy.new(user, account).see_badge_belonging_to?
|
32
32
|
end
|
33
33
|
|
34
|
-
can :create, Membership do |membership|
|
34
|
+
can :create, Membership, Membership.all do |membership|
|
35
35
|
membership.entity.nil? ||
|
36
36
|
membership.user.nil? ||
|
37
37
|
(!(membership.user.entries.include?(membership.entity) ||
|
@@ -95,7 +95,11 @@ module Pageflow
|
|
95
95
|
Admin::EntryTabPolicy.new(user, tab).see?
|
96
96
|
end
|
97
97
|
|
98
|
-
can :
|
98
|
+
can :see_site_admin_tab, Admin::Tab do |tab|
|
99
|
+
Admin::AdminOnlyTabPolicy.new(user, tab).see?
|
100
|
+
end
|
101
|
+
|
102
|
+
can :see_account_admin_tab, Admin::Tab do |tab|
|
99
103
|
Admin::AdminOnlyTabPolicy.new(user, tab).see?
|
100
104
|
end
|
101
105
|
|
@@ -112,11 +116,11 @@ module Pageflow
|
|
112
116
|
AccountPolicy.new(user, account).configure_folder_on?
|
113
117
|
end
|
114
118
|
|
115
|
-
can :
|
116
|
-
AccountPolicy.new(user, account).
|
119
|
+
can :update_site_on_entry_of, Account do |account|
|
120
|
+
AccountPolicy.new(user, account).update_site_on_entry_of?
|
117
121
|
end
|
118
122
|
|
119
|
-
can :create, Entry do |entry|
|
123
|
+
can :create, Entry, Entry.all do |entry|
|
120
124
|
EntryPolicy.new(user, entry).create?
|
121
125
|
end
|
122
126
|
|
@@ -180,8 +184,8 @@ module Pageflow
|
|
180
184
|
EntryPolicy.new(user, entry).update_feature_configuration_on?
|
181
185
|
end
|
182
186
|
|
183
|
-
can :
|
184
|
-
EntryPolicy.new(user, entry).
|
187
|
+
can :update_site_on, Entry do |entry|
|
188
|
+
EntryPolicy.new(user, entry).update_site_on?
|
185
189
|
end
|
186
190
|
|
187
191
|
can :use_files, Entry, EntryPolicy::Scope.new(user, Entry).resolve do |entry|
|
@@ -200,7 +204,7 @@ module Pageflow
|
|
200
204
|
FilePolicy.new(user, record).use?
|
201
205
|
end
|
202
206
|
|
203
|
-
can [:create, :update, :destroy], Folder do |folder|
|
207
|
+
can [:create, :update, :destroy], Folder, Folder.all do |folder|
|
204
208
|
FolderPolicy.new(user, folder).manage?
|
205
209
|
end
|
206
210
|
|
@@ -222,11 +226,15 @@ module Pageflow
|
|
222
226
|
EntryPolicy.new(user, storyline.revision.entry).edit?
|
223
227
|
end
|
224
228
|
|
225
|
-
can :
|
226
|
-
|
229
|
+
can :read, Site do |site|
|
230
|
+
SitePolicy.new(user, site).read?
|
231
|
+
end
|
232
|
+
|
233
|
+
can :update, Site do |site|
|
234
|
+
SitePolicy.new(user, site).update?
|
227
235
|
end
|
228
236
|
|
229
|
-
can :create, EntryTemplate do |entry_template|
|
237
|
+
can :create, EntryTemplate, EntryTemplate.all do |entry_template|
|
230
238
|
EntryTemplatePolicy.new(user, entry_template).create?
|
231
239
|
end
|
232
240
|
|
@@ -234,7 +242,7 @@ module Pageflow
|
|
234
242
|
EntryTemplatePolicy.new(user, entry_template).update?
|
235
243
|
end
|
236
244
|
|
237
|
-
can :create, ::User do |managed_user|
|
245
|
+
can :create, ::User, ::User.all do |managed_user|
|
238
246
|
UserPolicy.new(user, managed_user).create?
|
239
247
|
end
|
240
248
|
|
@@ -275,7 +283,7 @@ module Pageflow
|
|
275
283
|
can :manage, [Entry, Revision]
|
276
284
|
can :manage, Pageflow.config.file_types.map(&:model)
|
277
285
|
can :manage, Folder
|
278
|
-
can :manage,
|
286
|
+
can :manage, Site
|
279
287
|
can :manage, EntryTemplate
|
280
288
|
can :manage, ::User
|
281
289
|
end
|
@@ -17,13 +17,13 @@ module Pageflow
|
|
17
17
|
# :create, User -> :create_any, :users
|
18
18
|
module ActiveAdminCanCanFix
|
19
19
|
def can?(action, subject)
|
20
|
-
if [:read, :create].include?(action) &&
|
20
|
+
if [:read, :new, :create].include?(action) &&
|
21
21
|
[Entry, Account, User].include?(subject)
|
22
22
|
collection_name = subject.name.demodulize.underscore.pluralize.to_sym
|
23
23
|
|
24
24
|
if action == :read
|
25
25
|
super(:index, collection_name)
|
26
|
-
|
26
|
+
else
|
27
27
|
super(:create_any, collection_name)
|
28
28
|
end
|
29
29
|
else
|
@@ -12,7 +12,7 @@ module Pageflow
|
|
12
12
|
|
13
13
|
# Insert an additional row into an attribute table.
|
14
14
|
#
|
15
|
-
# @param resource_name [Symbol] Either :entry, :account or :
|
15
|
+
# @param resource_name [Symbol] Either :entry, :account or :site.
|
16
16
|
#
|
17
17
|
# @param name [Symbol] Name of the attribute to display.
|
18
18
|
#
|
@@ -11,7 +11,7 @@ module Pageflow
|
|
11
11
|
# Register a proc which adds additional inputs to admin forms.
|
12
12
|
#
|
13
13
|
# @param resource_name [Symbol] A resource name like `:entry`,
|
14
|
-
# `:account` or `:
|
14
|
+
# `:account` or `:site`
|
15
15
|
# @param attribute_name [Symbol] The name of the additional
|
16
16
|
# attribute
|
17
17
|
# @param options [Hash] Formtastic options
|
data/lib/pageflow/admin/tabs.rb
CHANGED
@@ -9,7 +9,7 @@ module Pageflow
|
|
9
9
|
# Display additional tabs on admin resource pages.
|
10
10
|
#
|
11
11
|
# @param [Symbol] resource_name A resource name like `:entry`,
|
12
|
-
# `:user` or `:
|
12
|
+
# `:user`, `:account` or `:site`.
|
13
13
|
# @param [Hash] options
|
14
14
|
# @option options [Symbol] :name Unique identifier.
|
15
15
|
# @option options [Arbre::Component] :component Component to
|
@@ -41,5 +41,12 @@ module Pageflow
|
|
41
41
|
collection_name: 'text_track_files',
|
42
42
|
url_templates: TextTrackFileUrlTemplates.new)
|
43
43
|
end
|
44
|
+
|
45
|
+
def self.other
|
46
|
+
FileType.new(model: 'Pageflow::OtherFile',
|
47
|
+
collection_name: 'other_files',
|
48
|
+
url_templates: OtherFileUrlTemplates.new,
|
49
|
+
top_level_type: true)
|
50
|
+
end
|
44
51
|
end
|
45
52
|
end
|
@@ -6,7 +6,7 @@ module Pageflow
|
|
6
6
|
def initialize
|
7
7
|
@only_admins_may_update_features = false
|
8
8
|
@only_admins_may_see_admin_boolean = false
|
9
|
-
@
|
9
|
+
@only_admins_may_update_site = false
|
10
10
|
end
|
11
11
|
|
12
12
|
# Restrict access to features tabs to admins. Defaults to false.
|
@@ -18,10 +18,10 @@ module Pageflow
|
|
18
18
|
# @since 12.1
|
19
19
|
attr_accessor :only_admins_may_see_admin_boolean
|
20
20
|
|
21
|
-
# Restrict access to
|
21
|
+
# Restrict access to site drop down on entry edit admin page
|
22
22
|
# to admins. Defaults to false.
|
23
23
|
# @since 12.1
|
24
|
-
attr_accessor :
|
24
|
+
attr_accessor :only_admins_may_update_site
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -151,21 +151,21 @@ module Pageflow
|
|
151
151
|
attr_accessor :editor_routing_constraint
|
152
152
|
|
153
153
|
# Either a lambda or an object with a `call` method taking two
|
154
|
-
# parameters: An `ActiveRecord` scope of {Pageflow::
|
154
|
+
# parameters: An `ActiveRecord` scope of {Pageflow::Site} records
|
155
155
|
# and an {ActionDispatch::Request} object. Has to return the scope
|
156
|
-
# in which to find
|
156
|
+
# in which to find sites.
|
157
157
|
#
|
158
|
-
# Defaults to {
|
158
|
+
# Defaults to {CnameSiteRequestScope} which finds sites
|
159
159
|
# based on the request subdomain. Can be used to alter the logic
|
160
|
-
# of finding a
|
160
|
+
# of finding a site whose home_url to redirect to when visiting
|
161
161
|
# the public root path.
|
162
162
|
#
|
163
163
|
# Example:
|
164
164
|
#
|
165
|
-
# config.
|
166
|
-
#
|
165
|
+
# config.site_request_scope = lambda do |sites, request|
|
166
|
+
# sites.where(id: Pageflow::Account.find_by_name!(request.subdomain).default_site_id)
|
167
167
|
# end
|
168
|
-
attr_accessor :
|
168
|
+
attr_accessor :site_request_scope
|
169
169
|
|
170
170
|
# Either a lambda or an object with a `call` method taking two
|
171
171
|
# parameters: An `ActiveRecord` scope of `Pageflow::Entry` records
|
@@ -195,8 +195,21 @@ module Pageflow
|
|
195
195
|
# @since 12.4
|
196
196
|
attr_accessor :public_entry_redirect
|
197
197
|
|
198
|
+
# Cache-Control header to set for published entries that have been
|
199
|
+
# published without a password. For password protected entries,
|
200
|
+
# cache control is always set to private to prevent caching
|
201
|
+
# authenticated responses in public caches like CDNs and serving
|
202
|
+
# them to unauthenticated users.
|
203
|
+
#
|
204
|
+
# Can be wrapped in a `features.register` block to use different
|
205
|
+
# caching strategies for different entries or accounts.
|
206
|
+
#
|
207
|
+
# @since 16.1
|
208
|
+
# @return [String]
|
209
|
+
attr_accessor :public_entry_cache_control_header
|
210
|
+
|
198
211
|
# Either a lambda or an object with a `call` method taking a
|
199
|
-
# {
|
212
|
+
# {Site} as paramater and returing a hash of options used to
|
200
213
|
# construct the url of a published entry.
|
201
214
|
#
|
202
215
|
# Can be used to change the host of the url under which entries
|
@@ -204,13 +217,13 @@ module Pageflow
|
|
204
217
|
#
|
205
218
|
# Example:
|
206
219
|
#
|
207
|
-
# config.public_entry_url_options = lambda do |
|
208
|
-
# {host: "#{
|
220
|
+
# config.public_entry_url_options = lambda do |site|
|
221
|
+
# {host: "#{site.account.name}.example.com"}
|
209
222
|
# end
|
210
223
|
attr_accessor :public_entry_url_options
|
211
224
|
|
212
225
|
# Either a lambda or an object with a `call` method taking a
|
213
|
-
# {
|
226
|
+
# {Site} as paramater and returing a hash of options used to
|
214
227
|
# construct the embed url of a published entry.
|
215
228
|
attr_accessor :entry_embed_url_options
|
216
229
|
|
@@ -232,6 +245,12 @@ module Pageflow
|
|
232
245
|
# boolean. Defaults to false.
|
233
246
|
attr_accessor :confirm_encoding_jobs
|
234
247
|
|
248
|
+
# Controls default value of "published until" date field in editor
|
249
|
+
# publish entry view.
|
250
|
+
#
|
251
|
+
# @since 16.1
|
252
|
+
attr_accessor :default_published_until_duration_in_months
|
253
|
+
|
235
254
|
# Used by Pageflow extensions to provide new tabs to be displayed
|
236
255
|
# in the admin.
|
237
256
|
#
|
@@ -281,7 +300,7 @@ module Pageflow
|
|
281
300
|
# @since 0.10
|
282
301
|
attr_accessor :available_public_locales
|
283
302
|
|
284
|
-
# Array of sharing providers which can be configured on
|
303
|
+
# Array of sharing providers which can be configured on site level.
|
285
304
|
# Defaults to `[:facebook, :twitter, :linked_in, :whats_app, :telegram, :email]`.
|
286
305
|
# @since 14.1
|
287
306
|
attr_accessor :available_share_providers
|
@@ -310,7 +329,7 @@ module Pageflow
|
|
310
329
|
|
311
330
|
# Share provider defaults.
|
312
331
|
#
|
313
|
-
# Default share providers for new
|
332
|
+
# Default share providers for new sites.
|
314
333
|
# Must be a subset or equal to `available_share_providers`
|
315
334
|
# @since 14.1
|
316
335
|
attr_accessor :default_share_providers
|
@@ -402,16 +421,17 @@ module Pageflow
|
|
402
421
|
@thumbnail_styles = Defaults::THUMBNAIL_STYLES.dup
|
403
422
|
@css_rendered_thumbnail_styles = Defaults::CSS_RENDERED_THUMBNAIL_STYLES.dup
|
404
423
|
|
405
|
-
@
|
424
|
+
@site_request_scope = CnameSiteRequestScope.new
|
406
425
|
@public_entry_request_scope = lambda { |entries, request| entries }
|
407
426
|
@public_entry_redirect = ->(_entry, _request) { nil }
|
408
|
-
@public_entry_url_options = Pageflow::
|
427
|
+
@public_entry_url_options = Pageflow::SitesHelper::DEFAULT_PUBLIC_ENTRY_OPTIONS
|
409
428
|
@entry_embed_url_options = {protocol: 'https'}
|
410
429
|
|
411
430
|
@transform_theme_customization_overrides = ->(overrides, _entry) { overrides }
|
412
431
|
@transform_theme_customization_files = ->(files, _entry) { files }
|
413
432
|
|
414
433
|
@confirm_encoding_jobs = false
|
434
|
+
@default_published_until_duration_in_months = 12
|
415
435
|
|
416
436
|
@admin_resource_tabs = Pageflow::Admin::Tabs.new
|
417
437
|
@admin_form_inputs = Pageflow::Admin::FormInputs.new
|
@@ -515,9 +535,9 @@ module Pageflow
|
|
515
535
|
end
|
516
536
|
|
517
537
|
# @api private
|
518
|
-
def
|
538
|
+
def site_url_options(site)
|
519
539
|
options = public_entry_url_options
|
520
|
-
options.respond_to?(:call) ? options.call(
|
540
|
+
options.respond_to?(:call) ? options.call(site) : options
|
521
541
|
end
|
522
542
|
|
523
543
|
# @api private
|
@@ -541,6 +561,7 @@ module Pageflow
|
|
541
561
|
delegate :page_types, to: :config
|
542
562
|
delegate :themes, to: :config
|
543
563
|
delegate :widget_types, to: :config
|
564
|
+
delegate :public_entry_cache_control_header=, to: :config
|
544
565
|
|
545
566
|
delegate :for_entry_type, to: :config
|
546
567
|
end
|
data/lib/pageflow/engine.rb
CHANGED
@@ -31,6 +31,8 @@ require 'pageflow_paged'
|
|
31
31
|
require 'pageflow_scrolled'
|
32
32
|
require 'symmetric-encryption'
|
33
33
|
|
34
|
+
require 'pageflow/rails_version'
|
35
|
+
|
34
36
|
if Gem::Specification.find_all_by_name('pageflow-react', '>= 0.0').any?
|
35
37
|
fail('The pageflow-react gem has been merged into the pageflow gem. ' \
|
36
38
|
'See the pageflow changelog for update instructions.')
|
@@ -41,44 +43,63 @@ module Pageflow
|
|
41
43
|
class Engine < ::Rails::Engine
|
42
44
|
isolate_namespace Pageflow
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
require_dependency
|
46
|
+
if Pageflow::RailsVersion.experimental?
|
47
|
+
config.autoload_paths << root.join('app/views/components')
|
48
|
+
config.eager_load_paths << root.join('app/views/components')
|
49
|
+
|
50
|
+
lib = root.join('lib')
|
51
|
+
|
52
|
+
config.autoload_paths << lib
|
53
|
+
config.eager_load_paths << lib
|
54
|
+
|
55
|
+
initializer 'pageflow.autoloading' do
|
56
|
+
Rails.autoloaders.main.ignore(
|
57
|
+
lib.join('generators'),
|
58
|
+
lib.join('tasks'),
|
59
|
+
lib.join('pageflow/paperclip_processors'),
|
60
|
+
lib.join('pageflow/version.rb')
|
61
|
+
)
|
62
|
+
end
|
63
|
+
else
|
64
|
+
config.paths.add('app/views/components', autoload: true)
|
65
|
+
config.paths.add('lib', autoload: true)
|
66
|
+
|
67
|
+
def eager_load!
|
68
|
+
# Manually eager load `lib/pageflow` as the least bad option:
|
69
|
+
#
|
70
|
+
# - Autoload paths are not eager loaded in production.
|
71
|
+
#
|
72
|
+
# - `lib` cannot be an eager load path since otherwise templates
|
73
|
+
# in `lib/generators` are also executed.
|
74
|
+
#
|
75
|
+
# - `lib/pageflow` cannot be an eager load path since eager load
|
76
|
+
# paths are automatically used as autoload paths. That way
|
77
|
+
# `lib/pageflow/admin/something.rb` could be autoloaded via
|
78
|
+
# `Admin::Something`.
|
79
|
+
#
|
80
|
+
# - Using `require` in `lib/pageflow.rb` disables code
|
81
|
+
# reloading.
|
82
|
+
#
|
83
|
+
# - Using `require_dependency` in `lib/pageflow.rb` does not
|
84
|
+
# activate code reloading either since it requires the
|
85
|
+
# autoload path to be set up correctly, which only happens
|
86
|
+
# during initialization.
|
87
|
+
super
|
88
|
+
|
89
|
+
lib_path = config.root.join('lib')
|
90
|
+
matcher = %r{\A#{Regexp.escape(lib_path.to_s)}/(.*)\.rb\Z}
|
91
|
+
|
92
|
+
already_required_files = [
|
93
|
+
'pageflow/engine',
|
94
|
+
'pageflow/global_config_api',
|
95
|
+
'pageflow/news_item_api',
|
96
|
+
'pageflow/version'
|
97
|
+
]
|
98
|
+
|
99
|
+
Dir.glob("#{lib_path}/pageflow/**/*.rb").sort.each do |file|
|
100
|
+
logical_path = file.sub(matcher, '\1')
|
101
|
+
require_dependency(logical_path) unless already_required_files.include?(logical_path)
|
102
|
+
end
|
82
103
|
end
|
83
104
|
end
|
84
105
|
|
@@ -106,7 +127,7 @@ module Pageflow
|
|
106
127
|
end
|
107
128
|
|
108
129
|
initializer 'pageflow.factories', after: 'factory_bot.set_factory_paths' do
|
109
|
-
if
|
130
|
+
if defined?(FactoryBot)
|
110
131
|
FactoryBot.definition_file_paths.unshift(Engine.root.join('spec', 'factories'))
|
111
132
|
end
|
112
133
|
end
|
@@ -44,7 +44,7 @@ module Pageflow
|
|
44
44
|
def create_entry(data, options)
|
45
45
|
entry_data = data.except(*DEFAULT_REMOVAL_COLUMNS)
|
46
46
|
entry_data['account_id'] = options[:account].id
|
47
|
-
entry_data['
|
47
|
+
entry_data['site_id'] = options[:account].default_site.id
|
48
48
|
Entry.create!(entry_data.merge(skip_draft_creation: true))
|
49
49
|
end
|
50
50
|
|
data/lib/pageflow/file_type.rb
CHANGED
@@ -123,11 +123,11 @@ module Pageflow
|
|
123
123
|
@css_background_image_class_prefix || model.model_name.singular
|
124
124
|
end
|
125
125
|
|
126
|
-
def css_background_image_urls_for(file, options)
|
126
|
+
def css_background_image_urls_for(file, **options)
|
127
127
|
if call_arity(css_background_image_urls) == 1
|
128
128
|
css_background_image_urls.call(file)
|
129
129
|
else
|
130
|
-
css_background_image_urls.call(file, options)
|
130
|
+
css_background_image_urls.call(file, **options)
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
@@ -87,8 +87,6 @@ module Pageflow
|
|
87
87
|
# coniguration is now complete.
|
88
88
|
def finalize!
|
89
89
|
@finalized = true
|
90
|
-
configure!
|
91
|
-
@config.lint!
|
92
90
|
end
|
93
91
|
|
94
92
|
# @api private
|
@@ -103,6 +101,8 @@ module Pageflow
|
|
103
101
|
@after_global_configure_blocks.each do |block|
|
104
102
|
block.call(@config)
|
105
103
|
end
|
104
|
+
|
105
|
+
@config.lint!
|
106
106
|
end
|
107
107
|
|
108
108
|
private
|
@@ -14,10 +14,10 @@ module Pageflow
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# @api private
|
17
|
-
def copy_nested_revision_component_to(record)
|
17
|
+
def copy_nested_revision_component_to(record, reset_perma_ids: false)
|
18
18
|
nested_revision_component_collection_names.each do |collection_name|
|
19
19
|
send(collection_name).each do |nested|
|
20
|
-
nested.copy_to(record.send(collection_name))
|
20
|
+
nested.copy_to(record.send(collection_name), reset_perma_ids: reset_perma_ids)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -38,12 +38,30 @@ module Pageflow
|
|
38
38
|
extend ActiveSupport::Concern
|
39
39
|
include Container
|
40
40
|
|
41
|
+
def duplicate
|
42
|
+
copy_with(reset_perma_ids: true) do |record|
|
43
|
+
yield record if block_given?
|
44
|
+
record.save!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
41
48
|
# @api private
|
42
|
-
def copy_to(collection)
|
49
|
+
def copy_to(collection, reset_perma_ids: false)
|
50
|
+
copy_with(reset_perma_ids: reset_perma_ids) do |record|
|
51
|
+
collection << record
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def copy_with(reset_perma_ids:)
|
43
58
|
record = dup
|
44
|
-
|
59
|
+
record.perma_id = nil if reset_perma_ids && record.respond_to?(:perma_id=)
|
60
|
+
|
61
|
+
yield record
|
62
|
+
copy_nested_revision_component_to(record, reset_perma_ids: reset_perma_ids)
|
45
63
|
|
46
|
-
|
64
|
+
record
|
47
65
|
end
|
48
66
|
end
|
49
67
|
end
|
@@ -5,20 +5,20 @@ module Pageflow
|
|
5
5
|
# @since 12.4
|
6
6
|
class PrimaryDomainEntryRedirect
|
7
7
|
def call(entry, request)
|
8
|
-
|
8
|
+
site = entry.site
|
9
9
|
|
10
|
-
if
|
11
|
-
!known_domains(
|
12
|
-
[request.protocol,
|
10
|
+
if site.cname.present? &&
|
11
|
+
!known_domains(site).include?(request.host)
|
12
|
+
[request.protocol, site.cname, request.fullpath].join
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
|
-
def known_domains(
|
18
|
+
def known_domains(site)
|
19
19
|
[
|
20
|
-
|
21
|
-
(
|
20
|
+
site.cname,
|
21
|
+
(site.additional_cnames || '').split(',').map(&:strip)
|
22
22
|
].flatten
|
23
23
|
end
|
24
24
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Pageflow
|
2
|
+
module RailsVersion
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def detect
|
6
|
+
from_env || '5.2.0'
|
7
|
+
end
|
8
|
+
|
9
|
+
def experimental?
|
10
|
+
detect != '5.2.0'
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def from_env
|
16
|
+
ENV['PAGEFLOW_RAILS_VERSION'] if ENV['PAGEFLOW_RAILS_VERSION'] != ''
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|