pageflow 15.8.0 → 16.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +183 -103
  3. data/README.md +0 -1
  4. data/Rakefile +1 -1
  5. data/admins/pageflow/accounts.rb +12 -16
  6. data/admins/pageflow/entry.rb +28 -26
  7. data/admins/pageflow/entry_templates.rb +5 -7
  8. data/admins/pageflow/sites.rb +53 -0
  9. data/app/assets/javascripts/pageflow/admin/entries.js +16 -7
  10. data/app/assets/javascripts/pageflow/dist/ui.js +298 -72
  11. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +10 -0
  12. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +6 -1
  13. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -0
  14. data/app/assets/stylesheets/pageflow/editor/help.scss +3 -3
  15. data/app/assets/stylesheets/pageflow/editor/info_box.scss +7 -0
  16. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +0 -5
  17. data/app/assets/stylesheets/pageflow/ui/forms.scss +1 -1
  18. data/app/controllers/pageflow/chapters_controller.rb +2 -2
  19. data/app/controllers/pageflow/editor/files_controller.rb +1 -1
  20. data/app/controllers/pageflow/entries_controller.rb +12 -2
  21. data/app/controllers/pageflow/feeds_controller.rb +18 -0
  22. data/app/controllers/pageflow/pages_controller.rb +2 -2
  23. data/app/controllers/pageflow/sitemaps_controller.rb +15 -0
  24. data/app/controllers/pageflow/storylines_controller.rb +2 -2
  25. data/app/helpers/pageflow/common_entry_seed_helper.rb +1 -1
  26. data/app/helpers/pageflow/embed_code_helper.rb +1 -1
  27. data/app/helpers/pageflow/entries_helper.rb +16 -15
  28. data/app/helpers/pageflow/feeds_helper.rb +66 -0
  29. data/app/helpers/pageflow/page_types_helper.rb +9 -9
  30. data/app/helpers/pageflow/sites_helper.rb +11 -0
  31. data/app/helpers/pageflow/social_share_helper.rb +2 -2
  32. data/app/inputs/pageflow_permalink_input.rb +15 -3
  33. data/app/models/concerns/pageflow/reusable_file.rb +3 -3
  34. data/app/models/pageflow/account.rb +13 -31
  35. data/app/models/pageflow/audio_file_url_templates.rb +2 -1
  36. data/app/models/pageflow/{cname_theming_request_scope.rb → cname_site_request_scope.rb} +3 -3
  37. data/app/models/pageflow/customized_theme.rb +1 -1
  38. data/app/models/pageflow/draft_entry.rb +1 -1
  39. data/app/models/pageflow/entries_feed.rb +32 -0
  40. data/app/models/pageflow/entry.rb +3 -4
  41. data/app/models/pageflow/entry_at_revision.rb +2 -2
  42. data/app/models/pageflow/entry_duplicate.rb +1 -1
  43. data/app/models/pageflow/entry_template.rb +4 -4
  44. data/app/models/pageflow/home_button.rb +7 -7
  45. data/app/models/pageflow/image_file.rb +14 -3
  46. data/app/models/pageflow/membership.rb +3 -2
  47. data/app/models/pageflow/other_file.rb +5 -0
  48. data/app/models/pageflow/other_file_url_templates.rb +16 -0
  49. data/app/models/pageflow/permalink.rb +3 -3
  50. data/app/models/pageflow/permalink_directory.rb +2 -2
  51. data/app/models/pageflow/published_entry.rb +8 -2
  52. data/app/models/pageflow/revision.rb +4 -0
  53. data/app/models/pageflow/site.rb +67 -0
  54. data/app/models/pageflow/sitemaps.rb +13 -0
  55. data/app/models/pageflow/theme_customization.rb +1 -1
  56. data/app/models/pageflow/used_file.rb +2 -2
  57. data/app/models/pageflow/video_file_url_templates.rb +3 -1
  58. data/app/models/pageflow/widget.rb +9 -1
  59. data/app/policies/pageflow/account_policy.rb +2 -2
  60. data/app/policies/pageflow/entry_policy.rb +2 -2
  61. data/app/policies/pageflow/entry_template_policy.rb +1 -1
  62. data/app/policies/pageflow/{theming_policy.rb → site_policy.rb} +13 -11
  63. data/app/views/admin/accounts/_entry_template_details.html.arb +1 -1
  64. data/app/views/admin/accounts/_form.html.erb +4 -22
  65. data/app/views/admin/accounts/_site_defaults_inline_help.html.erb +5 -0
  66. data/app/views/admin/entries/_form.html.erb +4 -13
  67. data/app/views/admin/entries/_permalink_inputs.html.erb +2 -3
  68. data/app/views/admin/entries/_site_input.html.erb +15 -0
  69. data/app/views/admin/entries/{entry_type_name_input.html.erb → entry_site_and_type_name_input.html.erb} +3 -0
  70. data/app/views/admin/entry_templates/_form.html.erb +5 -5
  71. data/app/views/admin/sites/_attributes_table.html.arb +12 -0
  72. data/app/views/admin/sites/_fields.html.erb +23 -0
  73. data/app/views/admin/sites/_form.html.erb +5 -0
  74. data/app/views/components/pageflow/admin/entries_tab.rb +1 -2
  75. data/app/views/components/pageflow/admin/entry_templates_tab.rb +10 -11
  76. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
  77. data/app/views/components/pageflow/admin/features_tab.rb +1 -1
  78. data/app/views/components/pageflow/admin/sites_tab.rb +35 -0
  79. data/app/views/components/pageflow/admin/users_tab.rb +1 -2
  80. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
  81. data/app/views/pageflow/editor/entries/seed.json.erb +1 -1
  82. data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
  83. data/app/views/pageflow/entries/stylesheet.css.erb +1 -1
  84. data/app/views/pageflow/feeds/index.atom.builder +20 -0
  85. data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
  86. data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
  87. data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
  88. data/config/initializers/admin_resource_tabs.rb +29 -12
  89. data/config/initializers/features.rb +1 -0
  90. data/config/initializers/paperclip.rb +4 -0
  91. data/config/locales/de.yml +42 -19
  92. data/config/locales/en.yml +45 -17
  93. data/config/routes.rb +3 -0
  94. data/config/spring.rb +1 -1
  95. data/db/migrate/20221215101134_rename_theming_to_site.rb +9 -0
  96. data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +34 -0
  97. data/db/migrate/20221219203023_add_name_to_sites.rb +5 -0
  98. data/db/migrate/20230103155934_associate_theme_customizations_with_sites.rb +27 -0
  99. data/db/migrate/20230120092923_create_other_files.rb +23 -0
  100. data/db/migrate/20230323115745_add_feeds_enabled_to_sites.rb +5 -0
  101. data/db/migrate/20230323154323_add_sitemap_enabled_to_sites.rb +5 -0
  102. data/db/migrate/20230331103823_add_title_to_sites.rb +5 -0
  103. data/db/migrate/20230405103612_add_custom_feed_url_to_sites.rb +5 -0
  104. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +455 -119
  105. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +31 -8
  106. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +1 -1
  107. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +1 -1
  108. data/entry_types/paged/app/controllers/pageflow_paged/editor/entries_controller.rb +0 -2
  109. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
  110. data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
  111. data/entry_types/paged/config/initializers/features.rb +0 -1
  112. data/entry_types/paged/lib/pageflow_paged/engine.rb +17 -1
  113. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
  114. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +3 -4
  115. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +13 -6
  116. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -0
  117. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +11 -0
  118. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +42 -0
  119. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
  120. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +31 -10
  121. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +9 -1
  122. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +3 -1
  123. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +23 -0
  124. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +6 -1
  125. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -5
  126. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +10 -0
  127. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +44 -41
  128. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder +16 -0
  129. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +8 -5
  130. data/entry_types/scrolled/config/initializers/features.rb +5 -0
  131. data/entry_types/scrolled/config/locales/consent_widget.de.yml +4 -0
  132. data/entry_types/scrolled/config/locales/consent_widget.en.yml +4 -0
  133. data/entry_types/scrolled/config/locales/de.yml +189 -8
  134. data/entry_types/scrolled/config/locales/en.yml +207 -2
  135. data/entry_types/scrolled/config/routes.rb +4 -0
  136. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +97 -5
  137. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
  138. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +96 -0
  139. data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +38 -0
  140. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +17 -1
  141. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -0
  142. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +6 -1
  143. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +1 -1
  144. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +1 -2
  145. data/entry_types/scrolled/package/contentElements-editor.js +307 -22
  146. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  147. data/entry_types/scrolled/package/contentElements-frontend.js +690 -71
  148. data/entry_types/scrolled/package/editor.js +616 -220
  149. data/entry_types/scrolled/package/frontend/{EditableInlineText.module-c6672f27.js → EditableInlineText.module-fa9e3aff.js} +1669 -1674
  150. data/entry_types/scrolled/package/frontend/PhonePlatformContext-10a1d600.js +32 -0
  151. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-727cce0d.js +107 -0
  152. data/entry_types/scrolled/package/frontend/Viewer-169e14ca.js +154 -0
  153. data/entry_types/scrolled/package/frontend/{Viewer-6b05522f.js → Viewer-ee1aa590.js} +32 -161
  154. data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
  155. data/entry_types/scrolled/package/frontend/{components-487daafa.js → components-4a09bfa3.js} +185 -45
  156. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-22e65f92.js → i18n-ddd92820.js} +162 -292
  157. data/entry_types/scrolled/package/frontend/index-02378634.js +118 -0
  158. data/entry_types/scrolled/package/frontend/index.css +1 -1
  159. data/entry_types/scrolled/package/frontend/index.js +375 -40
  160. data/entry_types/scrolled/package/frontend/useContentElementEditorState-63045393.js +52 -0
  161. data/entry_types/scrolled/package/package.json +2 -1
  162. data/entry_types/scrolled/package/testHelpers.js +9 -2
  163. data/entry_types/scrolled/package/values/colors.module.css +15 -0
  164. data/entry_types/scrolled/package/widgets/consentBar.css +1 -0
  165. data/entry_types/scrolled/package/widgets/consentBar.js +426 -0
  166. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  167. data/entry_types/scrolled/package/widgets/defaultNavigation.js +16 -9
  168. data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
  169. data/lib/pageflow/ability_mixin.rb +21 -13
  170. data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
  171. data/lib/pageflow/admin/attributes_table_rows.rb +1 -1
  172. data/lib/pageflow/admin/form_inputs.rb +1 -1
  173. data/lib/pageflow/admin/tabs.rb +1 -1
  174. data/lib/pageflow/built_in_file_type.rb +7 -0
  175. data/lib/pageflow/configuration/permissions.rb +3 -3
  176. data/lib/pageflow/configuration.rb +38 -17
  177. data/lib/pageflow/engine.rb +60 -39
  178. data/lib/pageflow/entry_export_import/entry_serialization.rb +1 -1
  179. data/lib/pageflow/entry_export_import/revision_serialization.rb +1 -1
  180. data/lib/pageflow/file_type.rb +2 -2
  181. data/lib/pageflow/global_config_api.rb +2 -2
  182. data/lib/pageflow/nested_revision_component.rb +23 -5
  183. data/lib/pageflow/primary_domain_entry_redirect.rb +7 -7
  184. data/lib/pageflow/rails_version.rb +19 -0
  185. data/lib/pageflow/seeds.rb +20 -17
  186. data/lib/pageflow/theme_customizations.rb +10 -10
  187. data/lib/pageflow/version.rb +1 -1
  188. data/lib/pageflow/widget_types.rb +4 -0
  189. data/package/config/webpack5.js +14 -0
  190. data/package/editor.js +148 -37
  191. data/package/frontend.js +26 -2
  192. data/package/testHelpers.js +1 -1
  193. data/package/ui.js +296 -71
  194. data/spec/factories/accounts.rb +5 -2
  195. data/spec/factories/draft_entries.rb +2 -2
  196. data/spec/factories/entries.rb +19 -5
  197. data/spec/factories/entry_templates.rb +1 -1
  198. data/spec/factories/permalink_directory.rb +1 -1
  199. data/spec/factories/published_entries.rb +2 -2
  200. data/spec/factories/sites.rb +12 -0
  201. data/vendor/assets/javascripts/iscroll.js +4 -7
  202. metadata +84 -59
  203. data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
  204. data/app/helpers/pageflow/themings_helper.rb +0 -11
  205. data/app/models/pageflow/theming.rb +0 -30
  206. data/app/views/admin/accounts/_theming_defaults_inline_help.html.erb +0 -5
  207. data/app/views/admin/accounts/_theming_details.html.arb +0 -5
  208. data/app/views/pageflow/editor/themings/_theming.json.jbuilder +0 -1
  209. data/entry_types/scrolled/package/frontend/arrowRight-7e3d9dd5.js +0 -42
  210. data/spec/factories/themings.rb +0 -7
  211. /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 :see_theming_admin_tab, Admin::Tab do |tab|
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 :update_theming_on_entry_of, Account do |account|
116
- AccountPolicy.new(user, account).update_theming_on_entry_of?
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 :update_theming_on, Entry do |entry|
184
- EntryPolicy.new(user, entry).update_theming_on?
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 :edit, Theming do |theming|
226
- ThemingPolicy.new(user, theming).edit?
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, Theming
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
- elsif action == :create
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 :theming.
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 `:theming`
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
@@ -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 `:account`
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
- @only_admins_may_update_theming = false
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 theming drop down on entry edit admin page
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 :only_admins_may_update_theming
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::Theming} records
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 themings.
156
+ # in which to find sites.
157
157
  #
158
- # Defaults to {CnameThemingRequestScope} which finds themings
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 theming whose home_url to redirect to when visiting
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.theming_request_scope = lambda do |themings, request|
166
- # themings.where(id: Pageflow::Account.find_by_name!(request.subdomain).default_theming_id)
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 :theming_request_scope
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
- # {Theming} as paramater and returing a hash of options used to
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 |theming|
208
- # {host: "#{theming.account.name}.example.com"}
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
- # {Theming} as paramater and returing a hash of options used to
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 theming level.
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 themings.
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
- @theming_request_scope = CnameThemingRequestScope.new
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::ThemingsHelper::DEFAULT_PUBLIC_ENTRY_OPTIONS
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 theming_url_options(theming)
538
+ def site_url_options(site)
519
539
  options = public_entry_url_options
520
- options.respond_to?(:call) ? options.call(theming) : options
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
@@ -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
- config.paths.add('app/views/components', autoload: true)
45
- config.paths.add('lib', autoload: true)
46
-
47
- def eager_load!
48
- # Manually eager load `lib/pageflow` as the least bad option:
49
- #
50
- # - Autoload paths are not eager loaded in production.
51
- #
52
- # - `lib` cannot be an eager load path since otherwise templates
53
- # in `lib/generators` are also executed.
54
- #
55
- # - `lib/pageflow` cannot be an eager load path since eager load
56
- # paths are automatically used as autoload paths. That way
57
- # `lib/pageflow/admin/something.rb` could be autoloaded via
58
- # `Admin::Something`.
59
- #
60
- # - Using `require` in `lib/pageflow.rb` disables code
61
- # reloading.
62
- #
63
- # - Using `require_dependency` in `lib/pageflow.rb` does not
64
- # activate code reloading either since it requires the
65
- # autoload path to be set up correctly, which only happens
66
- # during initialization.
67
- super
68
-
69
- lib_path = config.root.join('lib')
70
- matcher = %r{\A#{Regexp.escape(lib_path.to_s)}/(.*)\.rb\Z}
71
-
72
- already_required_files = [
73
- 'pageflow/engine',
74
- 'pageflow/global_config_api',
75
- 'pageflow/news_item_api',
76
- 'pageflow/version'
77
- ]
78
-
79
- Dir.glob("#{lib_path}/pageflow/**/*.rb").sort.each do |file|
80
- logical_path = file.sub(matcher, '\1')
81
- require_dependency(logical_path) unless already_required_files.include?(logical_path)
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 Pageflow.configured? && defined?(FactoryBot)
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['theming_id'] = options[:account].default_theming.id
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
 
@@ -28,7 +28,7 @@ module Pageflow
28
28
  end
29
29
 
30
30
  def import(data, options)
31
- Import.new(options).perform(data)
31
+ Import.new(**options).perform(data)
32
32
  end
33
33
 
34
34
  private
@@ -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
- collection << record
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
- copy_nested_revision_component_to(record)
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
- theming = entry.theming
8
+ site = entry.site
9
9
 
10
- if theming.cname.present? &&
11
- !known_domains(theming).include?(request.host)
12
- [request.protocol, theming.cname, request.fullpath].join
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(theming)
18
+ def known_domains(site)
19
19
  [
20
- theming.cname,
21
- (theming.additional_cnames || '').split(',').map(&:strip)
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