summaryrefslogtreecommitdiff
path: root/app/models/node.rb
diff options
context:
space:
mode:
authorhukl <contact@smyck.org>2009-03-01 13:56:24 +0100
committerhukl <contact@smyck.org>2009-03-01 13:56:24 +0100
commitc7757522c2750675fab6c4324453e237b863d84c (patch)
tree3cc50a7f8e5c5ab9dbad1957863422a772dddf14 /app/models/node.rb
parent62db596a0807059afe321930c2015b30f8b0e6d9 (diff)
refactored drafts which are now identified by a draft_id on the node rather than by guessing it. i was really that close to make that mistake again.
Diffstat (limited to 'app/models/node.rb')
-rw-r--r--app/models/node.rb35
1 files changed, 16 insertions, 19 deletions
diff --git a/app/models/node.rb b/app/models/node.rb
index e2cb564..99a2d84 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -5,6 +5,7 @@ class Node < ActiveRecord::Base
5 # Associations 5 # Associations
6 has_many :pages, :order => "revision ASC" 6 has_many :pages, :order => "revision ASC"
7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id 7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id
8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id
8 has_many :permissions 9 has_many :permissions
9 10
10 # Callbacks 11 # Callbacks
@@ -41,22 +42,14 @@ class Node < ActiveRecord::Base
41 42
42 # Instance Methods 43 # Instance Methods
43 44
44 # check if there is a page which has a nil :published_at column 45
45 # if there is one - it is considered a draft
46 def draft
47 if draft = pages.find_by_published_at(nil)
48 draft
49 end
50 end
51
52 def find_or_create_draft user 46 def find_or_create_draft user
53 if draft && draft.user == user 47 if draft && draft.user == user
54 draft 48 draft
55 elsif draft && draft.user.nil? 49 elsif draft && draft.user.nil?
56 tmp_draft = draft 50 draft.user = user
57 tmp_draft.user = user 51 save
58 tmp_draft.save 52 draft
59 tmp_draft
60 elsif draft && draft.user != user 53 elsif draft && draft.user != user
61 raise "Page is locked" 54 raise "Page is locked"
62 else 55 else
@@ -65,16 +58,18 @@ class Node < ActiveRecord::Base
65 end 58 end
66 59
67 def create_new_draft user 60 def create_new_draft user
68 page = self.pages.create! 61 empty_page = self.pages.new
62 empty_page.user = user
63 empty_page.save!
64
65 self.draft = empty_page
69 66
70 if self.head 67 if self.head
71 clone_attributes_to page 68 clone_attributes_to draft
72 end 69 end
73 70
74 page.user = user 71 self.save
75 page.save 72 draft
76 page.reload
77 page
78 end 73 end
79 74
80 def clone_attributes_to page 75 def clone_attributes_to page
@@ -98,6 +93,7 @@ class Node < ActiveRecord::Base
98 def publish_draft! 93 def publish_draft!
99 if self.draft 94 if self.draft
100 self.head = self.draft 95 self.head = self.draft
96 self.draft = nil
101 self.save! 97 self.save!
102 98
103 self.head.published_at = Time.now 99 self.head.published_at = Time.now
@@ -131,7 +127,8 @@ class Node < ActiveRecord::Base
131 # that draft and publishes it. 127 # that draft and publishes it.
132 def initialize_empty_page 128 def initialize_empty_page
133 if self.pages.empty? 129 if self.pages.empty?
134 self.pages.create! 130 self.draft = self.pages.create!
131 self.save
135 end 132 end
136 end 133 end
137end 134end