OSDN Git Service

picture test
[pettanr/pettanr.git] / app / models / original_picture.rb
1 class OriginalPicture < ActiveRecord::Base
2   belongs_to :artist
3   belongs_to :license
4   has_one :resource_picture
5   
6   before_destroy :destroy_with_file
7   
8   def validate
9     errors.add(:filesize, 'size over(1MB)') if self.filesize > 1000000
10   end
11   
12   def supply_default art
13     self.license_id = art.default_license_id if self.license_id.blank?
14   end
15   
16   def self.default_page_size
17     25
18   end
19   
20   def self.max_page_size
21     100
22   end
23   
24   def self.page prm = nil
25     page = prm.to_i
26     page = 1 if page < 1
27     page
28   end
29   
30   def self.page_size prm = self.default_page_size
31     page_size = prm.to_i
32     page_size = self.max_page_size if page_size > self.max_page_size
33     page_size = self.default_page_size if page_size < 1
34     page_size
35   end
36   
37   def self.list artist_id, opt = {}, page = 1, page_size = self.default_page_size
38     opt.merge!(self.list_opt) unless opt[:include]
39     opt.merge!({:conditions => ['artist_id = ?', artist_id], 
40       :order => 'updated_at desc', :limit => page_size, :offset => (page -1) * page_size}
41     )
42     OriginalPicture.find(:all, opt)
43   end
44   
45   def self.list_opt
46     {:include => [:artist, :license, :resource_picture]}
47   end
48   
49   def self.list_json_opt
50     {:include => [:resource_picture, :artist, :license]}
51   end
52   
53   def self.show cid, opt = {}
54     Comic.find(cid, :include => self.show_include_opt(opt))
55   end
56   
57   def self.show_include_opt opt = {}
58     res = [:author]
59     res.push(opt[:include]) if opt[:include]
60     res
61   end
62   
63   def self.show_json_include_opt
64     {:include => :author}
65   end
66   
67   def destroy_with_file
68     PictureIO.original_picture_io.delete self.filename
69     self.resource_picture.destroy
70   end
71   
72   def dext
73     self.ext.downcase
74   end
75   
76   def filename
77     "#{self.id}.#{self.dext}"
78   end
79   
80   def mime_type
81     "image/#{self.dext}"
82   end
83   
84   def url
85     '/original_pictures/' + filename
86   end
87   
88   def store(rimg)
89     bindata = rimg.to_blob
90     PictureIO.original_picture_io.put bindata, self.filename
91     res = if self.resource_picture
92       self.resource_picture.store rimg
93     else
94       ResourcePicture.store(rimg, self)
95     end
96     res
97   end
98   
99   def restore(subdir = nil)
100     PictureIO.original_picture_io.get self.filename, subdir
101   end
102   
103   def own? author
104     return false unless author
105     return false unless author.artist?
106     self.artist_id == author.artist.id
107   end
108   
109 end