diff options
| author | hukl <contact@smyck.org> | 2009-03-01 13:56:24 +0100 |
|---|---|---|
| committer | hukl <contact@smyck.org> | 2009-03-01 13:56:24 +0100 |
| commit | c7757522c2750675fab6c4324453e237b863d84c (patch) | |
| tree | 3cc50a7f8e5c5ab9dbad1957863422a772dddf14 /app/models/node.rb | |
| parent | 62db596a0807059afe321930c2015b30f8b0e6d9 (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.rb | 35 |
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 |
| 137 | end | 134 | end |
