OSDN Git Service

t#29312:any update
[pettanr/pettanr.git] / app / models / comic.rb
1 #コミック
2 class Comic < ActiveRecord::Base
3   has_many :stories
4   belongs_to :author
5   
6   validates :title, :presence => true, :length => {:maximum => 100}
7   validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..3}
8   
9   before_save do |r|
10     r.supply_default
11   end
12   
13   def supply_default
14     self.visible = 0 if self.visible.blank?
15   end
16   
17   def overwrite au
18     return false unless au
19     self.author_id = au.id
20   end
21   
22   def own? author
23     return false unless author
24     self.author_id == author.id
25   end
26   
27   def visible? author
28     self.visible > 0 or self.own?(author)
29   end
30   
31   def disp_visible
32     visible == 1 ? 'O' : 'X'
33   end
34   
35   def self.default_page_size
36     25
37   end
38   
39   def self.max_page_size
40     100
41   end
42   
43   def self.default_panel_size
44     30
45   end
46   
47   def self.max_panel_size
48     200
49   end
50   
51   def self.page prm = nil
52     page = prm.to_i
53     page = 1 if page < 1
54     page
55   end
56   
57   def self.page_size prm = self.default_page_size
58     page_size = prm.to_i
59     page_size = self.max_page_size if page_size > self.max_page_size
60     page_size = self.default_page_size if page_size < 1
61     page_size
62   end
63   
64   def self.list opt = {}, page = 1, page_size = self.default_page_size
65     opt.merge!(self.list_opt) unless opt[:include]
66     opt.merge!({:conditions => ['visible > 0'], :order => 'updated_at desc', :limit => page_size, :offset => (page -1) * page_size})
67     Comic.find(:all, opt)
68   end
69   
70   def self.list_opt
71     {:include => {:stories => {:panel => {}}, :author => {}}}
72   end
73   
74   def self.list_json_opt
75     {:include => {:stories => {:panel => {}}, :author => {}}}
76   end
77   
78   def self.mylist au, opt = {}, page = 1, comic_page_size = Author.default_comic_page_size
79     opt.merge!(self.list_opt) unless opt[:include]
80     opt.merge!({:conditions => ['comics.author_id = ?', au.id], :order => 'comics.updated_at desc', :limit => page_size, :offset => (page -1) * comic_page_size})
81     Comic.find(:all, opt)
82   end
83   
84   def self.show cid, au, opt = {}
85     c = Comic.find(cid, :include => self.show_include_opt(opt))
86     raise ActiveRecord::Forbidden unless c.visible?(au)
87     c
88   end
89   
90   def self.edit cid, au, opt = {}
91     c = Comic.find(cid, :include => self.show_include_opt(opt))
92     raise ActiveRecord::Forbidden unless c.own?(au)
93     c
94   end
95   
96   def self.show_include_opt opt = {}
97     res = {:stories => {:panel => {}}, :author => {}}
98     res.push(opt[:include]) if opt[:include]
99     res
100   end
101   
102   def self.show_json_include_opt
103     {:include => {:stories => {:panel => {}}, :author => {}}}
104   end
105   
106   def self.visible_count
107     Comic.count 'visible > 0'
108   end
109   
110 end