summaryrefslogtreecommitdiff
path: root/app/models/node.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/node.rb')
-rw-r--r--app/models/node.rb29
1 files changed, 24 insertions, 5 deletions
diff --git a/app/models/node.rb b/app/models/node.rb
index 6c11fed..75122d1 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -3,11 +3,11 @@ class Node < ActiveRecord::Base
3 acts_as_nested_set 3 acts_as_nested_set
4 4
5 # Associations 5 # Associations
6 has_many :pages, :order => "revision ASC" 6 has_many :pages, :order => "revision ASC", :dependent => :destroy
7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id 7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id, :dependent => :destroy
8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id 8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id, :dependent => :destroy
9 has_many :permissions 9 has_many :permissions, :dependent => :destroy
10 has_one :event 10 has_one :event, :dependent => :destroy
11 belongs_to :lock_owner, :class_name => "User", :foreign_key => :locking_user_id 11 belongs_to :lock_owner, :class_name => "User", :foreign_key => :locking_user_id
12 12
13 # Callbacks 13 # Callbacks
@@ -60,6 +60,7 @@ class Node < ActiveRecord::Base
60 # Instance Methods 60 # Instance Methods
61 61
62 def find_or_create_draft current_user 62 def find_or_create_draft current_user
63 self.wipe_draft!
63 if draft && self.lock_owner == current_user 64 if draft && self.lock_owner == current_user
64 draft 65 draft
65 elsif draft && self.lock_owner.nil? 66 elsif draft && self.lock_owner.nil?
@@ -115,6 +116,24 @@ class Node < ActiveRecord::Base
115 end 116 end
116 end 117 end
117 118
119 # removes a draft and the lock if it is older than a day and still
120 # identical to head
121 def wipe_draft!
122 unless self.draft
123 self.unlock!
124 return
125 end
126 return unless self.head
127 return unless self.draft.updated_at < 1.day.ago
128 return if Page.find(self.head).has_changes_to? self.draft
129
130 self.draft.destroy
131 self.draft_id = nil
132 self.unlock!
133 self.save!
134 self.reload
135 end
136
118 def restore_revision! revision 137 def restore_revision! revision
119 if page = self.pages.find_by_revision(revision) 138 if page = self.pages.find_by_revision(revision)
120 self.head = page 139 self.head = page