OSDN Git Service

merge i18n
[pettanr/pettanr.git] / app / models / system_picture.rb
1 class SystemPicture < ActiveRecord::Base
2   has_many :balloons
3   has_many :balloon_templates
4   has_many :licenses
5   
6   validates :ext, :presence => true, :length => {:maximum => 4}, :inclusion => {:in => ['png', 'jpeg', 'gif']}
7   validates :width, :presence => true, :numericality => true, :natural_number => true
8   validates :height, :presence => true, :numericality => true, :natural_number => true
9   validates :filesize, :presence => true, :numericality => {:greater_than => 0, :less_than_or_equal_to => 2000000}, :natural_number => true
10   validates :md5, :presence => true, :length => {:minimum => 32, :maximum => 32}
11   
12   before_destroy :destroy_with_file
13   
14   def destroy_with_file
15     PictureIO.system_picture_io.delete self.filename
16   end
17   
18   def supply_default
19   end
20   
21   def overwrite
22   end
23   
24   def own? ad
25     true
26   end
27   
28   def visible? ad
29     true
30   end
31   
32   def filename
33     "#{self.id}.#{self.ext}"
34   end
35   
36   def mime_type
37     "image/#{self.ext}"
38   end
39   
40   def url
41     '/system_pictures/' + filename
42   end
43   
44   def opt_img_tag
45     {:src => self.url, :width => self.width, :height => self.height}
46   end
47   
48   def tmb_opt_img_tag
49     tw, th = PettanImager.thumbnail_size(self.width, self.height)
50     {:src => self.url, :width => tw, :height => th}
51   end
52   
53   def self.default_page_size
54     25
55   end
56   
57   def self.max_page_size
58     100
59   end
60   
61   def self.page prm = nil
62     page = prm.to_i
63     page = 1 if page < 1
64     page
65   end
66   
67   def self.page_size prm = self.default_page_size
68     page_size = prm.to_i
69     page_size = self.max_page_size if page_size > self.max_page_size
70     page_size = self.default_page_size if page_size < 1
71     page_size
72   end
73   
74   def self.list page = 1, page_size = self.default_page_size
75     opt = {}
76     opt.merge!(self.list_opt)
77     opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0
78     opt.merge!({:order => 'system_pictures.updated_at desc'})
79     SystemPicture.find(:all, opt)
80   end
81   
82   def self.list_opt
83     {}
84   end
85   
86   def self.list_json_opt
87     {}
88   end
89   
90   def self.show sid, ad
91     opt = {}
92     opt.merge!(self.show_opt)
93     res = SystemPicture.find(sid, opt)
94     raise ActiveRecord::Forbidden unless res.visible?(ad)
95     res
96   end
97   
98   def self.show_opt
99     {}
100   end
101   
102   def self.show_json_opt
103     {}
104   end
105   
106   def store(imager)
107     unless imager
108       self.errors.add :base, 'illegal picture data'
109       return false
110     end
111     res = false
112     SystemPicture.transaction do
113       if res = self.save
114         if res = PictureIO.system_picture_io.put(imager.binary, self.filename)
115           res = true
116         else
117           self.errors.add :base, 'system picture io does not work'
118           raise ActiveRecord::Rollback
119         end
120       end
121     end
122     res
123   end
124   
125   def self.store(imager)
126     attr = {:ext => imager.ext, :width => imager.width, :height => imager.height, :filesize => imager.filesize, :md5 => imager.md5}
127     sp = SystemPicture.modify_object(imager.md5, attr, 'md5')
128     res = sp.store imager
129     res ? sp : nil
130   end
131   
132   def restore(subdir = nil)
133     PictureIO.system_picture_io.get self.filename, subdir
134   end
135   
136 end