summaryrefslogtreecommitdiff
path: root/app
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
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')
-rw-r--r--app/controllers/nodes_controller.rb3
-rw-r--r--app/models/node.rb35
2 files changed, 18 insertions, 20 deletions
diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb
index 9ba91f6..a403b95 100644
--- a/app/controllers/nodes_controller.rb
+++ b/app/controllers/nodes_controller.rb
@@ -12,7 +12,8 @@ class NodesController < ApplicationController
12 12
13 def index 13 def index
14 @nodes = Node.root.descendants.paginate( 14 @nodes = Node.root.descendants.paginate(
15 :include => :head, 15 :include => :head,
16 :include => :draft,
16 :page => params[:page], 17 :page => params[:page],
17 :per_page => 25, 18 :per_page => 25,
18 :order => 'id DESC' 19 :order => 'id DESC'
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