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
@@ -1,14 +1,14 @@
|
|
1
1
|
module Pageflow
|
2
2
|
class HomeButton
|
3
|
-
attr_reader :revision, :
|
3
|
+
attr_reader :revision, :site
|
4
4
|
|
5
|
-
def initialize(revision,
|
5
|
+
def initialize(revision, site)
|
6
6
|
@revision = revision
|
7
|
-
@
|
7
|
+
@site = site
|
8
8
|
end
|
9
9
|
|
10
10
|
def url
|
11
|
-
revision.configuration['home_url'].presence ||
|
11
|
+
revision.configuration['home_url'].presence || site_home_button_url
|
12
12
|
end
|
13
13
|
|
14
14
|
def enabled?
|
@@ -27,9 +27,9 @@ module Pageflow
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
def
|
31
|
-
if
|
32
|
-
options = Pageflow.config.
|
30
|
+
def site_home_button_url
|
31
|
+
if site.home_url.present?
|
32
|
+
options = Pageflow.config.site_url_options(site) || {}
|
33
33
|
Pageflow::Engine.routes.url_for(options.merge(controller: 'pageflow/entries',
|
34
34
|
action: 'index',
|
35
35
|
only_path: !options[:host]))
|
@@ -9,7 +9,7 @@ module Pageflow
|
|
9
9
|
'processed_attachments'
|
10
10
|
end
|
11
11
|
|
12
|
-
|
12
|
+
before_attachment_on_s3_post_process :save_image_dimensions
|
13
13
|
|
14
14
|
def thumbnail_url(*args)
|
15
15
|
unless ready?
|
@@ -49,10 +49,10 @@ module Pageflow
|
|
49
49
|
ultra: {geometry: '3840x3840>',
|
50
50
|
format: :JPG,
|
51
51
|
convert_options: '-quality 90 -interlace Plane'},
|
52
|
-
panorama_medium: {geometry:
|
52
|
+
panorama_medium: {geometry: ImageFile.scale_down_to_cover(1024, 1024),
|
53
53
|
format: panorama_format,
|
54
54
|
convert_options: '-quality 90 -interlace Plane'},
|
55
|
-
panorama_large: {geometry:
|
55
|
+
panorama_large: {geometry: ImageFile.scale_down_to_cover(1920, 1080),
|
56
56
|
format: panorama_format,
|
57
57
|
convert_options: '-quality 90 -interlace Plane'}
|
58
58
|
)
|
@@ -63,6 +63,17 @@ module Pageflow
|
|
63
63
|
end
|
64
64
|
# <- UploadableFile-overrides
|
65
65
|
|
66
|
+
def self.scale_down_to_cover(width, height)
|
67
|
+
lambda do |image_file|
|
68
|
+
if image_file.width.present? && image_file.height.present? &&
|
69
|
+
(image_file.width <= width || image_file.height <= height)
|
70
|
+
'100%'
|
71
|
+
else
|
72
|
+
"#{width}x#{height}^"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
66
77
|
private
|
67
78
|
|
68
79
|
def save_image_dimensions
|
@@ -38,8 +38,9 @@ module Pageflow
|
|
38
38
|
private
|
39
39
|
|
40
40
|
def account_membership_exists
|
41
|
-
|
42
|
-
|
41
|
+
return if user.blank? || user.accounts.include?(entity.account)
|
42
|
+
|
43
|
+
errors.add(:base, 'Entry Membership misses presupposed Membership on account of entry')
|
43
44
|
end
|
44
45
|
|
45
46
|
def on_entry?
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pageflow
|
2
|
+
# @api private
|
3
|
+
class OtherFileUrlTemplates
|
4
|
+
def call
|
5
|
+
{
|
6
|
+
original: UrlTemplate.from_attachment(example_file.attachment, :original)
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def example_file
|
13
|
+
@example_file ||= OtherFile.new(id: 0, file_name: ':basename.:extension')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -14,7 +14,7 @@ module Pageflow
|
|
14
14
|
format: /\A[0-9a-zA-Z_-]+\z/,
|
15
15
|
uniqueness: {scope: :directory})
|
16
16
|
|
17
|
-
validate :
|
17
|
+
validate :belongs_to_same_site_as_entry
|
18
18
|
|
19
19
|
private
|
20
20
|
|
@@ -30,8 +30,8 @@ module Pageflow
|
|
30
30
|
slug.nil?
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
return if !directory || !entry || entry.
|
33
|
+
def belongs_to_same_site_as_entry
|
34
|
+
return if !directory || !entry || entry.site_id == directory.site_id
|
35
35
|
|
36
36
|
errors.add(:directory, :invalid)
|
37
37
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Pageflow
|
2
2
|
# @api private
|
3
3
|
class PermalinkDirectory < ApplicationRecord
|
4
|
-
belongs_to :
|
4
|
+
belongs_to :site
|
5
5
|
|
6
6
|
validates(:path,
|
7
7
|
format: %r{\A([0-9a-zA-Z-]+/)*\z},
|
8
|
-
uniqueness: {scope: :
|
8
|
+
uniqueness: {scope: :site_id})
|
9
9
|
end
|
10
10
|
end
|
@@ -55,12 +55,18 @@ module Pageflow
|
|
55
55
|
)
|
56
56
|
end
|
57
57
|
|
58
|
+
def self.wrap_all(scope)
|
59
|
+
scope
|
60
|
+
.includes(:published_revision)
|
61
|
+
.map { |entry| new(entry) }
|
62
|
+
end
|
63
|
+
|
58
64
|
def cache_key
|
59
65
|
[
|
60
66
|
self.class.model_name.cache_key,
|
61
67
|
entry.cache_key,
|
62
68
|
revision.cache_key,
|
63
|
-
|
69
|
+
site.cache_key
|
64
70
|
].compact.join('-')
|
65
71
|
end
|
66
72
|
|
@@ -68,7 +74,7 @@ module Pageflow
|
|
68
74
|
[
|
69
75
|
entry.cache_version,
|
70
76
|
revision.cache_version,
|
71
|
-
|
77
|
+
site.cache_version
|
72
78
|
].compact.join('-').presence
|
73
79
|
end
|
74
80
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Pageflow
|
2
|
+
class Site < ApplicationRecord
|
3
|
+
belongs_to :account
|
4
|
+
|
5
|
+
has_many :entry_templates, dependent: :destroy
|
6
|
+
has_many :entries
|
7
|
+
has_many :permalink_directories, -> { order('path ASC') }
|
8
|
+
|
9
|
+
scope :with_home_url, -> { where.not(home_url: '') }
|
10
|
+
scope :for_request, ->(request) { Pageflow.config.site_request_scope.call(all, request) }
|
11
|
+
|
12
|
+
validates :account, :presence => true
|
13
|
+
|
14
|
+
delegate :enabled_feature_names, to: :account
|
15
|
+
|
16
|
+
def display_name
|
17
|
+
name.presence || I18n.t('pageflow.admin.sites.default_name')
|
18
|
+
end
|
19
|
+
|
20
|
+
def name_with_account_prefix
|
21
|
+
[account.name, name].compact.join(' - ')
|
22
|
+
end
|
23
|
+
|
24
|
+
def host
|
25
|
+
Pageflow.config.site_url_options(self)&.dig(:host)
|
26
|
+
end
|
27
|
+
|
28
|
+
def cname_domain
|
29
|
+
cname.split('.').pop(2).join('.')
|
30
|
+
end
|
31
|
+
|
32
|
+
def first_paged_entry_template
|
33
|
+
entry_templates.find_or_initialize_by(entry_type_name: 'paged')
|
34
|
+
end
|
35
|
+
|
36
|
+
def existing_and_potential_entry_templates
|
37
|
+
entry_type_names = Pageflow.config_for(account).entry_types.map(&:name)
|
38
|
+
|
39
|
+
allowed_existing_entry_templates =
|
40
|
+
entry_templates.where(entry_type_name: entry_type_names)
|
41
|
+
|
42
|
+
free_type_names =
|
43
|
+
entry_type_names - allowed_existing_entry_templates.map(&:entry_type_name)
|
44
|
+
|
45
|
+
potential_entry_templates = free_type_names.map do |type_name|
|
46
|
+
entry_templates.build(entry_type_name: type_name)
|
47
|
+
end
|
48
|
+
|
49
|
+
allowed_existing_entry_templates + potential_entry_templates
|
50
|
+
end
|
51
|
+
|
52
|
+
# @deprecated Depending on what you need this for, consider
|
53
|
+
# scoping your code to an entry type or look at a specific entry's
|
54
|
+
# theme name.
|
55
|
+
def theme_name
|
56
|
+
first_paged_entry_template.theme_name
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.ransackable_attributes(_auth_object)
|
60
|
+
%w[name]
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.ransackable_associations(_auth_object)
|
64
|
+
%w[account]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -10,9 +10,9 @@ module Pageflow
|
|
10
10
|
@usage.configuration
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def update!(attributes)
|
14
14
|
super(attributes.except(:configuration))
|
15
|
-
@usage.
|
15
|
+
@usage.update!(attributes.slice(:configuration))
|
16
16
|
end
|
17
17
|
|
18
18
|
def usage_id
|
@@ -2,6 +2,8 @@ module Pageflow
|
|
2
2
|
class VideoFileUrlTemplates
|
3
3
|
def call
|
4
4
|
{
|
5
|
+
original: url_template(:attachment, :original),
|
6
|
+
|
5
7
|
high: url_template(:mp4_high),
|
6
8
|
medium: url_template(:mp4_medium),
|
7
9
|
fullhd: url_template(:mp4_fullhd),
|
@@ -26,7 +28,7 @@ module Pageflow
|
|
26
28
|
|
27
29
|
def example_file
|
28
30
|
@example_file ||= VideoFile.new(id: 0).tap do |video_file|
|
29
|
-
video_file.file_name = ':basename
|
31
|
+
video_file.file_name = ':basename.:extension'
|
30
32
|
video_file.output_presences = {':pageflow_hls_qualities' => true}
|
31
33
|
video_file.poster_file_name = video_file.zencoder_poster.original_filename
|
32
34
|
end
|
@@ -72,7 +72,15 @@ module Pageflow
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def from_db_by_role
|
75
|
-
Widget.all
|
75
|
+
reject_unknown_widget_types(Widget.all)
|
76
|
+
.index_by(&:role)
|
77
|
+
end
|
78
|
+
|
79
|
+
def reject_unknown_widget_types(widgets)
|
80
|
+
widgets.select do |widget|
|
81
|
+
widget.type_name.blank? ||
|
82
|
+
config.widget_types.type_name?(widget.type_name)
|
83
|
+
end
|
76
84
|
end
|
77
85
|
|
78
86
|
def defaults_by_role
|
@@ -29,7 +29,7 @@ module Pageflow
|
|
29
29
|
entry_creatable
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def sites_accessible
|
33
33
|
entry_creatable
|
34
34
|
end
|
35
35
|
|
@@ -62,7 +62,7 @@ module Pageflow
|
|
62
62
|
publish?
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
65
|
+
def update_site_on_entry_of?
|
66
66
|
publish?
|
67
67
|
end
|
68
68
|
|
@@ -127,9 +127,9 @@ module Pageflow
|
|
127
127
|
publish_on_account_of?
|
128
128
|
end
|
129
129
|
|
130
|
-
def
|
130
|
+
def update_site_on?
|
131
131
|
user.admin? ||
|
132
|
-
(!permissions_config.
|
132
|
+
(!permissions_config.only_admins_may_update_site &&
|
133
133
|
publish_on_account_of?)
|
134
134
|
end
|
135
135
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Pageflow
|
2
|
-
class
|
2
|
+
class SitePolicy < ApplicationPolicy
|
3
3
|
class Scope < Scope
|
4
4
|
attr_reader :user, :scope
|
5
5
|
|
@@ -8,7 +8,7 @@ module Pageflow
|
|
8
8
|
@scope = scope
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def sites_allowed_for(accounts)
|
12
12
|
if user.admin?
|
13
13
|
scope.all
|
14
14
|
else
|
@@ -23,7 +23,7 @@ module Pageflow
|
|
23
23
|
def publisher_memberships_for_accounts(user, accounts_ids)
|
24
24
|
sanitize_sql_array(['LEFT OUTER JOIN pageflow_memberships ON ' \
|
25
25
|
'pageflow_memberships.user_id = :user_id AND ' \
|
26
|
-
'
|
26
|
+
'pageflow_sites.account_id IN (:accounts_ids) AND ' \
|
27
27
|
'pageflow_memberships.entity_id IN (:accounts_ids) AND ' \
|
28
28
|
'pageflow_memberships.entity_type = \'Pageflow::Account\' AND ' \
|
29
29
|
'pageflow_memberships.role IN (\'publisher\', \'manager\')',
|
@@ -35,19 +35,21 @@ module Pageflow
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
attr_reader :user
|
39
|
+
|
40
|
+
def initialize(user, site)
|
39
41
|
@user = user
|
40
|
-
@
|
42
|
+
@account_role_query = AccountRoleQuery.new(user, site.account)
|
41
43
|
end
|
42
44
|
|
43
|
-
def
|
44
|
-
|
45
|
+
def read?
|
46
|
+
@user.admin? ||
|
47
|
+
(@account_role_query.has_at_least_role?(:manager) &&
|
48
|
+
Pageflow.config.allow_multiaccount_users)
|
45
49
|
end
|
46
50
|
|
47
|
-
|
48
|
-
|
49
|
-
def allows?(roles)
|
50
|
-
@user.memberships.where(role: roles, entity: @theming.account).any?
|
51
|
+
def update?
|
52
|
+
read?
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
h5(entry_template.translated_entry_type_name)
|
2
2
|
|
3
3
|
extensible_attributes_table_for(entry_template,
|
4
|
-
Pageflow.config_for(entry_template.account)
|
4
|
+
Pageflow.config_for(entry_template.site.account)
|
5
5
|
.admin_attributes_table_rows.for(:entry_template)) do
|
6
6
|
row :theme, class: 'theme' do
|
7
7
|
entry_template.theme_name
|
@@ -10,29 +10,11 @@
|
|
10
10
|
<% end %>
|
11
11
|
<% end %>
|
12
12
|
|
13
|
-
|
14
|
-
<%= f.
|
15
|
-
<%=
|
16
|
-
<%= theming.input :additional_cnames, hint: t('pageflow.admin.themings.additional_cnames_hint') %>
|
17
|
-
<%= theming.input :home_url, hint: t('pageflow.admin.themings.home_url_hint') %>
|
13
|
+
<% if resource.new_record? %>
|
14
|
+
<%= f.semantic_fields_for :default_site do |site| %>
|
15
|
+
<%= render 'admin/sites/fields', f: site, account_config: account_config %>
|
18
16
|
<% end %>
|
19
|
-
|
20
|
-
<%= f.inputs do %>
|
21
|
-
<%= theming.input :imprint_link_label %>
|
22
|
-
<%= theming.input :imprint_link_url %>
|
23
|
-
<%= theming.input :copyright_link_label %>
|
24
|
-
<%= theming.input :copyright_link_url %>
|
25
|
-
<%= theming.input :privacy_link_url %>
|
26
|
-
|
27
|
-
<% account_config.admin_form_inputs.find_all_for(:theming).each do |form_input| %>
|
28
|
-
<%= form_input.build(theming) %>
|
29
|
-
<% end %>
|
30
|
-
<% end %>
|
31
|
-
<% end %>
|
32
|
-
|
33
|
-
<p>
|
34
|
-
<%= t('pageflow.admin.accounts.entry_template_hint') %>
|
35
|
-
</p>
|
17
|
+
<% end %>
|
36
18
|
|
37
19
|
<%= f.actions do %>
|
38
20
|
<%= f.action(:submit) %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= admin_form_for([:admin, resource]) do |f| %>
|
2
2
|
<%= f.inputs do %>
|
3
3
|
<%= f.input(:title,
|
4
|
-
hint: @entry.
|
4
|
+
hint: @entry.site.permalink_directories.blank? &&
|
5
5
|
I18n.t('pageflow.admin.entries.title_hint')) %>
|
6
6
|
|
7
7
|
<% if authorized?(:update_account_on, resource) &&
|
@@ -16,18 +16,9 @@
|
|
16
16
|
input_html: {class: 'entry_account_input'}) %>
|
17
17
|
<%end %>
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
ajax: {
|
23
|
-
resource: Pageflow::Entry,
|
24
|
-
collection_name: :eligible_themings,
|
25
|
-
params: {
|
26
|
-
entry_id: resource.id
|
27
|
-
}
|
28
|
-
},
|
29
|
-
include_blank: false) %>
|
30
|
-
<% end %>
|
19
|
+
<%= render('admin/entries/site_input',
|
20
|
+
entry: resource,
|
21
|
+
form: f) %>
|
31
22
|
|
32
23
|
<%= f.fields_for(:permalink, @entry.permalink || Pageflow::Permalink.new) do |permalink| %>
|
33
24
|
<%= render('admin/entries/permalink_inputs',
|
@@ -1,6 +1,5 @@
|
|
1
1
|
<%= form.input(:permalink,
|
2
2
|
as: :pageflow_permalink,
|
3
|
-
base_url:
|
4
|
-
|
5
|
-
form.object),
|
3
|
+
base_url: pretty_site_url(entry.site),
|
4
|
+
site: entry.site,
|
6
5
|
slug_placeholder: entry.default_permalink_slug) %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% if authorized?(:update_site_on, entry) %>
|
2
|
+
<%= form.input(:site,
|
3
|
+
as: :searchable_select,
|
4
|
+
ajax: {
|
5
|
+
resource: Pageflow::Entry,
|
6
|
+
collection_name: :eligible_sites,
|
7
|
+
params: {
|
8
|
+
account_id: entry.account_id
|
9
|
+
}
|
10
|
+
},
|
11
|
+
include_blank: false,
|
12
|
+
wrapper_html: {
|
13
|
+
style: ('display: none' if site_policy_scope.sites_allowed_for(entry.account).one?)
|
14
|
+
}) %>
|
15
|
+
<% end %>
|
@@ -1,4 +1,7 @@
|
|
1
1
|
<%= fields_for(:entry, @entry, builder: ActiveAdmin::FormBuilder) do |form| %>
|
2
|
+
<%= render('admin/entries/site_input',
|
3
|
+
entry: @entry,
|
4
|
+
form: form) %>
|
2
5
|
<%= render('pageflow/admin/entries/entry_type_name_input',
|
3
6
|
form: form,
|
4
7
|
entry_types: Pageflow.config_for(@entry.account).entry_types) %>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
<%= f.inputs do %>
|
6
6
|
<%= f.semantic_errors :entry_type_name %>
|
7
|
-
<%= render('admin/accounts/
|
7
|
+
<%= render('admin/accounts/site_defaults_inline_help') %>
|
8
8
|
<%= f.hidden_field :entry_type_name, value: entry_type_name %>
|
9
9
|
<%= f.input :default_locale,
|
10
10
|
as: :select,
|
@@ -12,15 +12,15 @@
|
|
12
12
|
collection: Pageflow.config.available_public_locales.map{ |locale|
|
13
13
|
[t('pageflow.public._language', locale: locale), locale.to_s]
|
14
14
|
},
|
15
|
-
hint: t('pageflow.admin.
|
15
|
+
hint: t('pageflow.admin.sites.default_locale_hint') %>
|
16
16
|
<%= f.input :default_author,
|
17
|
-
hint: t('pageflow.admin.
|
17
|
+
hint: t('pageflow.admin.sites.default_author_hint'),
|
18
18
|
placeholder: Pageflow.config.default_author_meta_tag %>
|
19
19
|
<%= f.input :default_publisher,
|
20
|
-
hint: t('pageflow.admin.
|
20
|
+
hint: t('pageflow.admin.sites.default_publisher_hint'),
|
21
21
|
placeholder: Pageflow.config.default_publisher_meta_tag %>
|
22
22
|
<%= f.input :default_keywords,
|
23
|
-
hint: t('pageflow.admin.
|
23
|
+
hint: t('pageflow.admin.sites.default_keywords_hint'),
|
24
24
|
placeholder: Pageflow.config.default_keywords_meta_tag %>
|
25
25
|
<%= render('admin/accounts/share_providers_label') %>
|
26
26
|
<%= f.semantic_fields_for :share_providers,
|
@@ -0,0 +1,12 @@
|
|
1
|
+
extensible_attributes_table_for(site,
|
2
|
+
Pageflow.config_for(site.account)
|
3
|
+
.admin_attributes_table_rows.for(:site)) do
|
4
|
+
row :title
|
5
|
+
row :host, class: 'host'
|
6
|
+
row :account, class: 'account' do
|
7
|
+
link_to(site.account.name,
|
8
|
+
admin_account_path(site.account, tab: 'sites'))
|
9
|
+
end
|
10
|
+
row :feeds_enabled
|
11
|
+
row :sitemap_enabled
|
12
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= f.inputs do %>
|
2
|
+
<%= f.input :title, hint: t('pageflow.admin.sites.title_hint') %>
|
3
|
+
<%= f.input :cname, hint: t('pageflow.admin.sites.cname_hint') %>
|
4
|
+
<%= f.input :additional_cnames, hint: t('pageflow.admin.sites.additional_cnames_hint') %>
|
5
|
+
<%= f.input :home_url, hint: t('pageflow.admin.sites.home_url_hint') %>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<%= f.inputs do %>
|
9
|
+
<%= f.input :imprint_link_label %>
|
10
|
+
<%= f.input :imprint_link_url %>
|
11
|
+
<%= f.input :copyright_link_label %>
|
12
|
+
<%= f.input :copyright_link_url %>
|
13
|
+
<%= f.input :privacy_link_url %>
|
14
|
+
|
15
|
+
<%= f.input :feeds_enabled, hint: t('pageflow.admin.sites.feeds_hint',
|
16
|
+
site_host: @site&.persisted? ? @site.host : '<host>') %>
|
17
|
+
<%= f.input :sitemap_enabled, hint: t('pageflow.admin.sites.sitemap_hint',
|
18
|
+
site_host: @site&.persisted? ? @site.host : '<host>') %>
|
19
|
+
|
20
|
+
<% account_config.admin_form_inputs.find_all_for(:site).each do |form_input| %>
|
21
|
+
<%= form_input.build(f) %>
|
22
|
+
<% end %>
|
23
|
+
<% end %>
|
@@ -1,8 +1,7 @@
|
|
1
1
|
module Pageflow
|
2
2
|
module Admin
|
3
3
|
class EntriesTab < ViewComponent
|
4
|
-
def build(
|
5
|
-
account = theming.account
|
4
|
+
def build(account)
|
6
5
|
embedded_index_table(account.entries,
|
7
6
|
blank_slate_text: I18n.t('pageflow.admin.entries.no_members')) do
|
8
7
|
table_for_collection(sortable: true, class: 'entries', i18n: Pageflow::Entry) do
|