OSDN Git Service

t#30220:i18n system error message
[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         begin
115           res = PictureIO.system_picture_io.put(imager.binary, self.filename)
116         rescue PictureIO::Error
117           res = false
118           self.errors.add :base, I18n.t('picture_io.error')
119           raise ActiveRecord::Rollback
120         end
121       end
122     end
123     res
124   end
125   
126   def self.store(imager)
127     attr = {:ext => imager.ext, :width => imager.width, :height => imager.height, :filesize => imager.filesize, :md5 => imager.md5}
128     sp = SystemPicture.modify_object(imager.md5, attr, 'md5')
129     res = sp.store imager
130     res ? sp : nil
131   end
132   
133   def restore(subdir = nil)
134     PictureIO.system_picture_io.get self.filename, subdir
135   end
136   
137 end