OSDN Git Service

bfd9b76704512f6d7b77c91ea324e621e0b8ea3c
[pettanr/pettanr.git] / app / models / artist.rb
1 class Artist < ActiveRecord::Base
2   belongs_to :author
3   has_many :original_pictures
4   has_many :pictures
5   has_many :resource_pictures
6   
7   validates :name, :presence => true, :length => {:maximum => 30}
8   validates :author_id, :numericality => {:allow_blank => true}
9   
10   def supply_default
11     self.name = 'no name' if self.name.blank?
12   end
13   
14   def overwrite au
15     return false unless au
16     self.author_id = au.id
17   end
18   
19   def own? au
20     if au.is_a?(Author)
21       self.author_id == au.id
22     elsif au.is_a?(Artist)
23       self.id == au.id
24     else
25       false
26     end
27   end
28   
29   def visible? au
30     if au == nil
31       return false if MagicNumber['run_mode'] == 1
32     elsif au.is_a?(Author)
33       return true
34     else
35       return false
36     end
37     true
38   end
39   
40   def self.find_by_author author
41     Artist.find( :first, :conditions => ['author_id = ?', author.id])
42   end
43   
44   def self.default_page_size
45     25
46   end
47   
48   def self.max_page_size
49     100
50   end
51   
52   def self.page prm = nil
53     page = prm.to_i
54     page = 1 if page < 1
55     page
56   end
57   
58   def self.page_size prm = self.default_page_size
59     page_size = prm.to_i
60     page_size = self.max_page_size if page_size > self.max_page_size
61     page_size = self.default_page_size if page_size < 1
62     page_size
63   end
64   
65   def self.offset cnt, prm = nil
66     offset = prm.to_i
67     offset = cnt - 1 if offset >= cnt
68     offset = cnt - offset.abs if offset < 0
69     offset = 0 if offset < 0
70     offset
71   end
72   
73   def self.list page = 1, page_size = self.default_page_size
74     opt = {}
75     opt.merge!(Artist.list_opt)
76     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
77     opt.merge!({:order => 'created_at desc'})
78     Artist.find(:all, opt)
79   end
80   
81   def self.list_opt
82     {:include => {:author => {}} }
83   end
84   
85   def self.list_json_opt
86     {:include => {:author => {}} }
87   end
88   
89   def self.show aid, au
90     opt = {}
91     opt.merge!(Artist.show_opt)
92     res = Artist.find(aid, opt)
93     raise ActiveRecord::Forbidden unless res.visible?(au)
94     res
95   end
96   
97   def self.edit sid, au
98     opt = {}
99     opt.merge!(Artist.show_opt)
100     res = Artist.find sid, opt
101     raise ActiveRecord::Forbidden unless res.own?(au)
102     res
103   end
104   
105   def self.show_opt
106     {:include => {:author => {}} }
107   end
108   
109   def self.show_json_opt
110     {:include => {:author => {}} }
111   end
112   
113   def self.visible_count
114     Artist.count
115   end
116   
117 end