OSDN Git Service

419e965016f0c6849e342bbb62ce503f33262d36
[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     return false unless au.is_a?(Author)
21     self.author_id == au.id
22   end
23   
24   def visible? au
25     if au == nil
26       return false if MagicNumber['run_mode'] == 1
27     elsif au.is_a?(Author)
28       return true
29     else
30       return false
31     end
32     true
33   end
34   
35   def self.find_by_author author
36     Artist.find( :first, :conditions => ['author_id = ?', author.id])
37   end
38   
39   def self.default_page_size
40     25
41   end
42   
43   def self.max_page_size
44     100
45   end
46   
47   def self.page prm = nil
48     page = prm.to_i
49     page = 1 if page < 1
50     page
51   end
52   
53   def self.page_size prm = self.default_page_size
54     page_size = prm.to_i
55     page_size = self.max_page_size if page_size > self.max_page_size
56     page_size = self.default_page_size if page_size < 1
57     page_size
58   end
59   
60   def self.offset cnt, prm = nil
61     offset = prm.to_i
62     offset = cnt - 1 if offset >= cnt
63     offset = cnt - offset.abs if offset < 0
64     offset = 0 if offset < 0
65     offset
66   end
67   
68   def self.list page = 1, page_size = self.default_page_size
69     opt = {}
70     opt.merge!(Artist.list_opt)
71     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
72     opt.merge!({:order => 'created_at desc'})
73     Artist.find(:all, opt)
74   end
75   
76   def self.list_opt
77     {:include => {:author => {}} }
78   end
79   
80   def self.list_json_opt
81     {:include => {:author => {}} }
82   end
83   
84   def self.show aid, au
85     opt = {}
86     opt.merge!(Artist.show_opt)
87     res = Artist.find(aid, opt)
88     raise ActiveRecord::Forbidden unless res.visible?(au)
89     res
90   end
91   
92   def self.edit sid, au
93     opt = {}
94     opt.merge!(Artist.show_opt)
95     res = Artist.find sid, opt
96     raise ActiveRecord::Forbidden unless res.own?(au)
97     res
98   end
99   
100   def self.show_opt
101     {:include => {:author => {}} }
102   end
103   
104   def self.show_json_opt
105     {:include => {:author => {}} }
106   end
107   
108   def self.visible_count
109     Artist.count
110   end
111   
112 end