Skip to content

Commit 657bc1b

Browse files
authored
Merge pull request #2231 from tf/excursions
Add support for excursion chapters
2 parents 06d001d + 0f26a70 commit 657bc1b

File tree

71 files changed

+1637
-305
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1637
-305
lines changed

app/models/pageflow/entry.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class PasswordMissingError < StandardError
5353

5454
after_create unless: :skip_draft_creation do
5555
create_draft!
56-
draft.storylines.create!(configuration: {main: true})
56+
create_default_revision_components
5757
entry_template.copy_defaults_to(draft)
5858
end
5959

@@ -161,6 +161,10 @@ def entry_type_is_available_for_account
161161
errors.add(:type_name, :must_be_available_for_account, type_name: type_name)
162162
end
163163

164+
def create_default_revision_components
165+
Pageflow.config_for(self).revision_components.create_defaults(draft)
166+
end
167+
164168
def update_password!(options)
165169
if options[:password].present?
166170
self.password = options[:password]

app/models/pageflow/storyline.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,9 @@ class Storyline < ApplicationRecord
1313
nested_revision_components :chapters
1414

1515
delegate :entry, to: :revision
16+
17+
def self.create_defaults(draft)
18+
create!(revision: draft, configuration: {main: true})
19+
end
1620
end
1721
end

config/initializers/revision_components.rb

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class EnsureScrolledEntriesHaveMainStoryline < ActiveRecord::Migration[5.2]
2+
def up
3+
execute(<<-SQL)
4+
INSERT INTO pageflow_scrolled_storylines (revision_id, perma_id, position, configuration, created_at, updated_at)
5+
SELECT r.id, 1, 1, '{"main":true}', NOW(), NOW()
6+
FROM pageflow_revisions r
7+
INNER JOIN pageflow_entries e ON r.entry_id = e.id
8+
LEFT JOIN pageflow_scrolled_storylines s ON s.revision_id = r.id
9+
WHERE e.type_name = 'scrolled' AND s.revision_id IS NULL;
10+
SQL
11+
end
12+
13+
def down; end
14+
end

entry_types/paged/lib/pageflow_paged/plugin.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ def configure(config)
77
end
88

99
config.features.enable_by_default('paged_entry_type')
10+
11+
config.for_entry_type(PageflowPaged.entry_type) do |c|
12+
c.revision_components.register(Pageflow::Storyline, create_defaults: true)
13+
end
1014
end
1115
end
1216
end

entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ class ChaptersController < ActionController::Base
55
include Pageflow::EditorController
66

77
def create
8-
chapter = Chapter.create(chapter_params.merge(revision: @entry.draft))
8+
chapter = find_storyline.chapters.create(chapter_params)
99

1010
render partial: 'pageflow_scrolled/chapters/chapter',
11-
locals: {chapter: chapter},
11+
locals: {chapter:},
1212
status: :created
13+
rescue ActiveRecord::RecordNotFound
14+
head :not_found
1315
end
1416

1517
def update
@@ -53,11 +55,7 @@ def chapter_params
5355
end
5456

5557
def find_storyline
56-
if params[:storyline_id]
57-
Storyline.all_for_revision(@entry.draft).find(params[:storyline_id])
58-
else
59-
Storyline.all_for_revision(@entry.draft).first
60-
end
58+
Storyline.all_for_revision(@entry.draft).find(params[:storyline_id])
6159
end
6260
end
6361
end

entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,50 +24,58 @@ def scrolled_entry_json_seed_script_tag(scrolled_entry, options = {})
2424
end
2525

2626
def scrolled_entry_json_seed(json, scrolled_entry, options = {})
27-
main_storyline = Storyline.all_for_revision(scrolled_entry.revision).first || Storyline.new
28-
sections = scrolled_entry_json_seed_sections(scrolled_entry, main_storyline, options)
27+
revision = scrolled_entry.revision
28+
sections = scrolled_entry_json_seed_sections(scrolled_entry, options)
2929

3030
json.partial!('pageflow_scrolled/entry_json_seed/entry',
3131
entry: scrolled_entry,
3232
entry_config: Pageflow.config_for(scrolled_entry),
33-
chapters: scrolled_entry_json_seed_chapters(main_storyline, options),
33+
storylines: scrolled_entry_json_seed_storylines(revision),
34+
chapters: scrolled_entry_json_seed_chapters(revision, options),
3435
sections:,
35-
content_elements: main_storyline.content_elements.where(section: sections),
36+
content_elements: scrolled_entry_json_seed_content_elements(revision, sections),
3637
widgets: scrolled_entry.resolve_widgets(insert_point: :react),
3738
options:)
3839
end
3940

4041
private
4142

42-
def scrolled_entry_json_seed_sections(scrolled_entry, main_storyline, options)
43+
def scrolled_entry_json_seed_storylines(revision)
44+
Storyline.all_for_revision(revision)
45+
end
46+
47+
def scrolled_entry_json_seed_sections(scrolled_entry, options)
48+
main_storyline = Storyline.all_for_revision(scrolled_entry.revision).first || Storyline.new
49+
4350
sections =
4451
if scrolled_entry.cutoff_mode_enabled_for?(request)
4552
main_storyline.sections_before_cutoff_section
4653
else
47-
main_storyline.sections
54+
Section.all_for_revision(scrolled_entry.revision)
4855
end
4956

5057
return sections if options[:include_hidden_sections]
5158

5259
sections.reject { |section| section.configuration['hidden'] }
5360
end
5461

55-
def scrolled_entry_json_seed_chapters(main_storyline, options)
56-
return main_storyline.chapters if options[:include_hidden_sections]
62+
def scrolled_entry_json_seed_chapters(revision, options)
63+
chapters = Chapter.all_for_revision(revision)
64+
return chapters if options[:include_hidden_sections]
5765

5866
has_visible_sections, has_hidden_sections =
59-
scrolled_entry_json_seed_chapter_section_visibilites(main_storyline)
67+
scrolled_entry_json_seed_chapter_section_visibilites(revision)
6068

61-
main_storyline.chapters.reject do |chapter|
69+
chapters.reject do |chapter|
6270
has_hidden_sections[chapter.id] && !has_visible_sections[chapter.id]
6371
end
6472
end
6573

66-
def scrolled_entry_json_seed_chapter_section_visibilites(main_storyline)
67-
has_visible_sections = []
68-
has_hidden_sections = []
74+
def scrolled_entry_json_seed_chapter_section_visibilites(revision)
75+
has_visible_sections = {}
76+
has_hidden_sections = {}
6977

70-
main_storyline.sections.each do |section|
78+
Section.all_for_revision(revision).each do |section|
7179
if section.configuration['hidden']
7280
has_hidden_sections[section.chapter_id] = true
7381
else
@@ -77,5 +85,9 @@ def scrolled_entry_json_seed_chapter_section_visibilites(main_storyline)
7785

7886
[has_visible_sections, has_hidden_sections]
7987
end
88+
89+
def scrolled_entry_json_seed_content_elements(revision, sections)
90+
ContentElement.all_for_revision(revision).where(section: sections)
91+
end
8092
end
8193
end

entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
module PageflowScrolled
22
class Chapter < Pageflow::ApplicationRecord
3+
POSITION_ORDER = [
4+
'pageflow_scrolled_storylines.position ASC',
5+
'pageflow_scrolled_chapters.position ASC'
6+
].join(',')
7+
38
include Pageflow::SerializedConfiguration
49
include Pageflow::AutoGeneratedPermaId
510
include Pageflow::NestedRevisionComponent
@@ -13,9 +18,6 @@ class Chapter < Pageflow::ApplicationRecord
1318

1419
nested_revision_components :sections
1520

16-
attr_accessor :revision # used on :create to lazily create storyline
17-
before_validation :ensure_storyline, on: :create
18-
1921
def create_section(attributes = {})
2022
shift_section_positions(from: attributes[:position])
2123

@@ -36,6 +38,7 @@ def duplicate_section(section)
3638
def self.all_for_revision(revision)
3739
joins(storyline: :revision)
3840
.where(pageflow_scrolled_storylines: {revision_id: revision})
41+
.order(POSITION_ORDER)
3942
end
4043

4144
private
@@ -45,13 +48,5 @@ def shift_section_positions(from:)
4548
.where('position >= ?', from)
4649
.update_all('position = position + 1')
4750
end
48-
49-
def ensure_storyline
50-
return if storyline.present?
51-
unless Storyline.all_for_revision(revision).exists?
52-
Storyline.create!(revision: revision, configuration: {main: true})
53-
end
54-
self.storyline = Storyline.all_for_revision(revision).first
55-
end
5651
end
5752
end

entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
module PageflowScrolled
22
# @api private
33
class ContentElement < Pageflow::ApplicationRecord
4+
POSITION_ORDER = [
5+
'pageflow_scrolled_storylines.position ASC',
6+
'pageflow_scrolled_chapters.position ASC',
7+
'pageflow_scrolled_sections.position ASC',
8+
'pageflow_scrolled_content_elements.position ASC'
9+
].join(',')
10+
411
include Pageflow::SerializedConfiguration
512
include Pageflow::AutoGeneratedPermaId
613
include Pageflow::NestedRevisionComponent
@@ -10,6 +17,7 @@ class ContentElement < Pageflow::ApplicationRecord
1017
def self.all_for_revision(revision)
1118
joins(section: {chapter: {storyline: :revision}})
1219
.where(pageflow_scrolled_storylines: {revision_id: revision})
20+
.order(POSITION_ORDER)
1321
end
1422

1523
def self.select_used_type_names(revision, type_names)

entry_types/scrolled/app/models/pageflow_scrolled/section.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
module PageflowScrolled
22
class Section < Pageflow::ApplicationRecord
3+
POSITION_ORDER = [
4+
'pageflow_scrolled_storylines.position ASC',
5+
'pageflow_scrolled_chapters.position ASC',
6+
'pageflow_scrolled_sections.position ASC'
7+
].join(',')
8+
39
include Pageflow::SerializedConfiguration
410
include Pageflow::AutoGeneratedPermaId
511
include Pageflow::NestedRevisionComponent
@@ -15,6 +21,7 @@ class Section < Pageflow::ApplicationRecord
1521
def self.all_for_revision(revision)
1622
joins(chapter: {storyline: :revision})
1723
.where(pageflow_scrolled_storylines: {revision_id: revision})
24+
.order(POSITION_ORDER)
1825
end
1926
end
2027
end

0 commit comments

Comments
 (0)