summaryrefslogtreecommitdiff
path: root/app/models/node.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/node.rb')
-rw-r--r--app/models/node.rb36
1 files changed, 33 insertions, 3 deletions
diff --git a/app/models/node.rb b/app/models/node.rb
index 9eb0fe4..f15c908 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -56,6 +56,11 @@ class Node < ApplicationRecord
56 def lock_for_editing! current_user 56 def lock_for_editing! current_user
57 if self.lock_owner.nil? || self.lock_owner == current_user 57 if self.lock_owner.nil? || self.lock_owner == current_user
58 lock_for! current_user 58 lock_for! current_user
59 if self.draft
60 self.draft.user = current_user if self.draft.user.nil?
61 self.draft.editor = current_user
62 self.draft.save!
63 end
59 self 64 self
60 else 65 else
61 raise( 66 raise(
@@ -95,15 +100,18 @@ class Node < ApplicationRecord
95 return unless self.autosave 100 return unless self.autosave
96 101
97 if self.draft 102 if self.draft
103 preserved_published_at = self.draft.published_at
98 self.draft.clone_attributes_from self.autosave 104 self.draft.clone_attributes_from self.autosave
105 self.draft.published_at = preserved_published_at
99 self.draft.user_id = self.autosave.user_id if self.autosave.user_id 106 self.draft.user_id = self.autosave.user_id if self.autosave.user_id
100 self.draft.editor = current_user 107 self.draft.editor = current_user
101 self.draft.save! 108 self.draft.save!
102 else 109 else
103 empty_page = self.pages.create! 110 empty_page = self.pages.create!
104 empty_page.user = self.autosave.user_id ? self.autosave.user : (self.head ? self.head.user : current_user)
105 empty_page.editor = current_user
106 empty_page.clone_attributes_from self.autosave 111 empty_page.clone_attributes_from self.autosave
112 empty_page.user = self.autosave.user_id ? self.autosave.user : (self.head ? self.head.user : current_user)
113 empty_page.editor = current_user
114 empty_page.published_at = self.head.published_at if self.head
107 empty_page.save! 115 empty_page.save!
108 self.draft = empty_page 116 self.draft = empty_page
109 self.save! 117 self.save!
@@ -150,6 +158,28 @@ class Node < ApplicationRecord
150 self.draft.reload 158 self.draft.reload
151 end 159 end
152 160
161 # Discards exactly the topmost non-empty layer -- autosave if present,
162 # else draft -- and reveals whatever's beneath it. Releases the lock
163 # only once nothing is left to protect (no draft survives); leaves it
164 # alone whenever a draft remains, since #edit still has real content
165 # open.
166 def revert! current_user
167 assert_locked_by! current_user
168
169 if self.autosave
170 self.autosave.destroy
171 self.autosave_id = nil
172 self.save!
173 elsif self.draft && self.head
174 self.draft.destroy
175 self.draft_id = nil
176 self.save!
177 end
178
179 self.unlock! unless self.draft
180 self.reload
181 end
182
153 def staged_slug=(value) 183 def staged_slug=(value)
154 if head.blank? 184 if head.blank?
155 self.slug = value 185 self.slug = value