diff options
Diffstat (limited to 'app/models/node.rb')
| -rw-r--r-- | app/models/node.rb | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/app/models/node.rb b/app/models/node.rb index da26164..0f34b73 100644 --- a/app/models/node.rb +++ b/app/models/node.rb | |||
| @@ -8,6 +8,7 @@ class Node < ActiveRecord::Base | |||
| 8 | belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id | 8 | belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id |
| 9 | has_many :permissions | 9 | has_many :permissions |
| 10 | has_one :event | 10 | has_one :event |
| 11 | belongs_to :user, :foreign_key => :locking_user_id | ||
| 11 | 12 | ||
| 12 | # Callbacks | 13 | # Callbacks |
| 13 | after_create :initialize_empty_page | 14 | after_create :initialize_empty_page |
| @@ -43,17 +44,17 @@ class Node < ActiveRecord::Base | |||
| 43 | 44 | ||
| 44 | # Instance Methods | 45 | # Instance Methods |
| 45 | 46 | ||
| 46 | def find_or_create_draft user | 47 | def find_or_create_draft current_user |
| 47 | if draft && draft.user == user | 48 | if draft && self.user == current_user |
| 48 | draft | 49 | draft |
| 49 | elsif draft && draft.user.nil? | 50 | elsif draft && self.user.nil? |
| 50 | draft.user = user | 51 | lock_for! current_user |
| 51 | draft.save | ||
| 52 | draft | 52 | draft |
| 53 | elsif draft && draft.user != user | 53 | elsif draft && self.user != current_user |
| 54 | raise "Page is locked" | 54 | raise "Page is locked" |
| 55 | else | 55 | else |
| 56 | create_new_draft user | 56 | lock_for! current_user |
| 57 | create_new_draft current_user | ||
| 57 | end | 58 | end |
| 58 | end | 59 | end |
| 59 | 60 | ||
| @@ -73,6 +74,7 @@ class Node < ActiveRecord::Base | |||
| 73 | self.head.save! | 74 | self.head.save! |
| 74 | self.draft = nil | 75 | self.draft = nil |
| 75 | self.save! | 76 | self.save! |
| 77 | self.unlock! | ||
| 76 | else | 78 | else |
| 77 | nil | 79 | nil |
| 78 | end | 80 | end |
| @@ -95,6 +97,15 @@ class Node < ActiveRecord::Base | |||
| 95 | end | 97 | end |
| 96 | 98 | ||
| 97 | protected | 99 | protected |
| 100 | def lock_for! current_user | ||
| 101 | self.user = current_user | ||
| 102 | self.save | ||
| 103 | end | ||
| 104 | |||
| 105 | def unlock! | ||
| 106 | self.user = nil | ||
| 107 | self.save | ||
| 108 | end | ||
| 98 | 109 | ||
| 99 | # Creates an empty page and associates it to the given node. This means | 110 | # Creates an empty page and associates it to the given node. This means |
| 100 | # freshly created node has an empty draft. A user can create nodes as he | 111 | # freshly created node has an empty draft. A user can create nodes as he |
