OSDN Git Service

import all source code
[pettanr/pettanr.git] / app / models / panel.rb
1 class Panel < ActiveRecord::Base
2   belongs_to :comic
3   has_many :panel_pictures, :dependent => :destroy
4   has_many :balloons, :dependent => :destroy
5   accepts_nested_attributes_for :panel_pictures, :allow_destroy => true
6   accepts_nested_attributes_for :balloons, :allow_destroy => true
7
8   def self.max_seq comic_id
9     Panel.maximum(:seqno, :conditions => ['comic_id = ?', comic_id]).to_i
10   end
11   
12   def self.find_seq comic_id, seqno
13     Panel.find(:first, :conditions => ['comic_id = ? and seqno = ?', comic_id, seqno])
14   end
15
16   #更新する時にPanelIDをチェックしとかないと勝手に所属先を変えられるゾ!?
17
18   def vdt_save
19     f = nil
20     max_seq = Panel.max_seq self.comic_id
21     f = Panel.find_seq(self.comic_id, self.seqno) if self.seqno
22     if f
23       Panel.update_all('seqno = seqno + 1', ['comic_id = ? and seqno >= ?', self.comic_id, self.seqno])
24     else
25       self.seqno = max_seq + 1
26     end
27     self.save
28   end
29   
30   def move_to new_seq
31     return true if self.seqno == new_seq
32     if self.seqno > new_seq
33       Panel.update_all('seqno = seqno + 1', ['comic_id = ? and (seqno >= ? and seqno < ?)', self.comic_id, new_seq, self.seqno])
34     else
35       nf = Panel.find_seq(self.comic_id, new_seq)
36       max_seq = Panel.max_seq self.comic_id
37       new_seq = max_seq if new_seq > max_seq
38       Panel.update_all('seqno = seqno - 1', ['comic_id = ? and (seqno > ? and seqno <= ?)', self.comic_id, self.seqno, new_seq])
39     end
40     self.seqno = new_seq
41     self.save
42   end
43   
44   def destroy_and_shorten
45     Panel.update_all('seqno = seqno - 1', ['comic_id = ? and (seqno > ?)', self.comic_id, self.seqno])
46     self.destroy
47   end
48   
49   def own? author
50     return false unless author
51     self.author_id == author.id
52   end
53   
54 end