From 0e215fab6ef01cfe4865ed10bbe083f800c9a73e Mon Sep 17 00:00:00 2001 From: hukl Date: Sat, 21 Mar 2009 17:39:11 +0100 Subject: put the lock onto nodes --- app/models/node.rb | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'app/models/node.rb') 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 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id has_many :permissions has_one :event + belongs_to :user, :foreign_key => :locking_user_id # Callbacks after_create :initialize_empty_page @@ -43,17 +44,17 @@ class Node < ActiveRecord::Base # Instance Methods - def find_or_create_draft user - if draft && draft.user == user + def find_or_create_draft current_user + if draft && self.user == current_user draft - elsif draft && draft.user.nil? - draft.user = user - draft.save + elsif draft && self.user.nil? + lock_for! current_user draft - elsif draft && draft.user != user + elsif draft && self.user != current_user raise "Page is locked" else - create_new_draft user + lock_for! current_user + create_new_draft current_user end end @@ -73,6 +74,7 @@ class Node < ActiveRecord::Base self.head.save! self.draft = nil self.save! + self.unlock! else nil end @@ -95,6 +97,15 @@ class Node < ActiveRecord::Base end protected + def lock_for! current_user + self.user = current_user + self.save + end + + def unlock! + self.user = nil + self.save + end # Creates an empty page and associates it to the given node. This means # freshly created node has an empty draft. A user can create nodes as he -- cgit v1.3